使用MAVLINK提升Px4飞控的数据采样率
经历了一个月惨淡的无意义的考试,我总算是回到了飞控调试的正轨上。今天解决了一个比较有意义的问题,鉴于官方那几个大佬对问题的回答乱七八糟的(虽然是正确回答了)我决定还是整理一下。
问题如下:使用MAVROS和px4飞控连接的时候,对于/mavros/imu/data_raw 和/mavros/local_position/odom等的几个topic的采样速率都是比较低的,在正确设置了最高的通讯波特率912600之后也只能分别达到50HZ和30HZ。这是不合理的。
在使用了mavsys进行设置后发现结果并没有变化,多方查证之后发现应该要使用mavlink指令进行设置。
1.对于真实环境:
(确保波特率设置正确:使用qgc修改其中的SYS_COMPANION = Companion Link (921600 baud))
首先在px4的sd卡中创建一个文件夹,取名为etc,再创建一个extras.txt文件。px4启动的时候会自动读取这个文件中的代码。因此我们写入下面三行代码:
mavlink stream -d /dev/ttyACM0 -s ATTITUDE -r 200
mavlink stream -d /dev/ttyACM0 -s HIGHRES_IMU -r 200
mavlink stream -d /dev/ttyACM0 -s LOCAL_POSITION_NED -r 200 然后保存即可,其中-d代表硬件,后面跟随的/dev/ttyACM0代表设备号,-r 200 代表设置为rate=200hz的streaming rate(输出速率)
ATTITUDE 管的是 /mavros/imu/data的输出速率
HIGHRES_IMU 管的是/mavros/imu/data_raw的输出速率
LOCAL_POSITION_NED管的是/mavros/local_position/odom的输出速率
其他的可以在下面的例子中看:
#!nsh
#
# USB MAVLink start
#
mavlink start -d /dev/ttyS6 -b 921600
# Enable a number of interesting streams we want via USB
mavlink stream -d /dev/ttyS6 -s PARAM_VALUE -r 300
mavlink stream -d /dev/ttyS6 -s MISSION_ITEM -r 50
mavlink stream -d /dev/ttyS6 -s NAMED_VALUE_FLOAT -r 10
mavlink stream -d /dev/ttyS6 -s OPTICAL_FLOW_RAD -r 10
mavlink stream -d /dev/ttyS6 -s VFR_HUD -r 20
mavlink stream -d /dev/ttyS6 -s ATTITUDE -r 20
mavlink stream -d /dev/ttyS6 -s ACTUATOR_CONTROL_TARGET0 -r 30
mavlink stream -d /dev/ttyS6 -s RC_CHANNELS_RAW -r 5
mavlink stream -d /dev/ttyS6 -s SERVO_OUTPUT_RAW_0 -r 20
mavlink stream -d /dev/ttyS6 -s POSITION_TARGET_GLOBAL_INT -r 10
mavlink stream -d /dev/ttyS6 -s LOCAL_POSITION_NED -r 30
mavlink stream -d /dev/ttyS6 -s MANUAL_CONTROL -r 5
mavlink stream -d /dev/ttyS6 -s HIGHRES_IMU -r 100
mavlink stream -d /dev/ttyS6 -s GPS_RAW_INT -r 20
# Exit shell to make it available to MAVLink
exit MAVLINK控制指令:
在完成了上面的真实环境的设置后,我了解到了主要是要用mavlink指令进行设置即可。其实在真实环境中不一定要通过创建extras.txt文件来设置,可以连接到px4上使用screen等进行设置,但是缺点是每次开启后都要设置,总的来说不是很方便,因此还是推荐extras.txt文件设置。
2.对于gazebo仿真环境:
使用gazebo仿真,开启仿真环境下的px4是必不可少的。具体指令前面文章中有说过。开启之后能看到如下:
然后分别输入:
mavlink stream -u 14557 -s ATTITUDE -r 200
mavlink stream -u 14557 -s HIGHRES_IMU -r 200
mavlink stream -u 14557 -s LOCAL_POSITION_NED -r 200
就能达到和之前现实环境中一样的效果了。
-u代表的是udp网络端口14557是我使用的本地端口号。
参考:
修改波特率:
Increase the data stream rate in px4 stack using mavros · Issue #589 · mavlink/mavros
Increase the data stream rate in px4 stack using mavros · Issue #589 · mavlink/mavros
Pixfalcon telemetry port rate can't be changed by SD card extras.txt file 2 · Issue #6760 · PX4/Firmware
系统启动流程:
https://dev.px4.io/en/advanced/system_startup.html
https://dev.px4.io/en/advanced/system_startup.html
Adding a New Airframe
问题相关:
Post a bounty on mavlink/mavros!
Increase output frequency of pixhawk using mavros
https://groups.google.com/forum/#!topic/px4users/lY-zm3QDebA
Update local_position/odom at higher rate · Issue #7034 · PX4/Firmware
Pixhawk MAVLINK data stream rates / Pixhawk sensor calibration
mavlink/mavlink
Increase reading data rate · Issue #178 · mavlink/mavros
https://github.com/mavlink/mavros/issues/305
https://github.com/mavlink/mavros/issues/305
当成记录器的方法:
Logging (high resolution) IMU data ONLY eleboss
页:
[1]