问题描述
我们公司正在开发一款基于动作捕捉定位系统的无人机/无人车空地协同演示项目,调试实物无人机飞控的过程中,当动捕系统采集到的定位数据发送到飞控上之后,静止状态下飞控的位姿融合解算还算正常,一旦飞机以位置Posision模式起飞,不到30秒,位姿解算就会自动停止,同时自动切换到高度Altitude模式,并且以IMU惯组的定位作为它的基准定位,直到无人机降落停稳后,位姿融合算法才继续开始工作,但解算出来的位姿已经和动捕定位的实际位姿相去甚远了。
调试过程
调试这个问题的过程中,我们尝试了各种思路,包括调整动捕数据的发送频率(其实这个方向已经离解决问题不远了,只是没有深入下去,只尝试了30Hz、60Hz、90Hz三种频率),调宽噪声容忍阈值,还有预处理动捕数据(平滑、滤波)等等,甚至还通过一定关系请教了专门做无人机的公司,他们的技术人员都把我们调试过程的日志要过去分析了一阵,然后就没有下文了。
问题解决
一次偶然的机会,我在午休过程中思考这个问题,翻开B站找找有没有解决方案,看到一个大佬分享的视觉定位教程,里面有提到视觉定位的发送频率要和IMU一致,虽然他是一句话带过了,但对我来说就是一个重要的信息,我马上去实验室尝试了这个办法,无人机立马就能飞了,而且数据不会莫名其妙丢失。
具体解决方法就是在MAVROS下找到/mavros/imu/data_raw,并运行`rostopic hz /mavros/imu/data_raw`查看惯组的数据频率(我们使用的PixHawk6C飞控,固件版本PX4 1.13.2,这个频率是50Hz),将动捕数据的发送频率调整到与之一致即可。