本文记录了如何使用UWB设备的伪GPS功能,实现ardupilot无人机在室内定点定高飞行。
实验器材:空循环Linktrack 6或8个(4或6个ANCHOR,1个TAG,1个CONSOLE)
无人机一架
笔记本电脑一台
1 布置基站并标定
①按上图布置4或6个基站,需要注意基站坐标系Y轴正方向要指向正北,X轴正方向指向正东。
②布置好后,TAG和CONSOLE模块上电,打开空循环上位机,连接CONSOLE模块,打开设置;
③先点击左侧“无线设置”按钮查看所有模块是否都在线,如果个别模块不在线,可以重新插拔对应模块电源;如果所有基站都在线则再次点击“无线设置”按钮退出无线设置;
④点击“一键标定”按钮开始标定。在 NAssistant 主页面的【2D】 界面中可以看到所有 ANCHOR 的图标逐渐收敛(如果无法看见,则使用鼠标滚轮对视图进行一 定的放缩,直到坐标轴上的数值(单位:m)与实际基站布局范围差不多),等待右侧基站坐标完全停止变化以后,在【2D】界面中鼠标滚轮调整视图,此时若能看见所有基站的图标且基站图标与实际基站摆放的位置基本一致说明标定成功。如果长时间标定不成功,一般是基站之间存在遮挡或者基站离大面积玻璃或金属太近。
2 TAG模块以及ardupilot设置
根据TAG模块输出协议的不同,有两种方法实现Linktrack与ardupilot之间的通信,一种通过Node_Frame2协议,一种通过NMEA协议。
2.1 Node_Frame2 协议
这种方法参考ardupilot官方教程,博主严格按照教程设置,发现MP地面站没有位置信息。上网搜解决方法,发现一篇22年的帖子已经提出了这个问题,至今无人回复(/(ㄒoㄒ)/~~ 另寻他法吧)。因此本文通过第二种方法来实现,步骤更简单。
2.2 NMEA协议(推荐)
步骤如下:
(1)按照Linktrack与飞控接口定义,制作与飞控某一串口的连接线,以CUAV v5nano为例,将Linktrack TAG模块连接到UART4。
(2)电脑连接TAG模块,配置波特率以及输出协议:
(3)打开地面站全部参数表,配置下列参数:
SERIAL4_BAUD = 115200 (CUAV v5nano UART4就对应SERIAL4)
SERIAL4_PROTOCOL = 5 (配置UART4为GPS)
GPS_TYPE = 5 (使飞控可以接收NMEA协议的GPS数据)
配置到这里,在MP主界面应该可以看到GPS是3D定位状态了。在右侧地图窗口也可以看到飞机位置,而且移动飞机也在变化。
但是还不能在Loiter等GPS模式下解锁,提示"PreArm:Need position Estimation",这是因为没有满足星数的解锁条件,LinkTrack 模拟的卫星数量在 4 颗的时候定位精度已经相当高了,hdop在0.1左右,因此我们直接把GPS校验关掉就可以解锁了,不需要修改源码。
EK3_GPS_CHECK = 0
EK3_SRC1_POSZ = 3 (z轴位置数据源选用GPS)
改完参数重启一下飞控,稍等一小会就可以解锁了。
在Loiter模式实际测试的时候,有的时候飞机会自动刷锅,圈越来越大,我用的是飞控自带罗盘,初步推测是罗盘受干扰,因为一开始地面站报“compass offsets too high”的错误,等后续解决了再更新。