记录使用RTK进行无人机定位并操作的使用体验
一. RTK定位设置
使用的是CUAV制作发售的RTK,型号为C9P,目前该产品已经下架,上新了C9PS。
并不需要太多的设置,在飞控接入RTK后(也包括普通的GPS模块),需要重新进行设置才能使用。
RTK在飞控上需要接入的线包括GPS和UART4两个,同时还需要一个数传接入TEMP1;地面站则接入飞控和数传的usb,同时需要打开QGC软件才能进行RTK定位。
二、MAVROS
打开后,可以使用mavros读取到无人机的ROS话题,这是基于mavlink协议的。
查看local_position话题,可以看到坐标还是挺稳定的,但是测试过程中,高度偏差较大,这在后面继续讲到。
然而,在使用XTDrone的communication.py代码进行通信的过程中,原本OK的代码,报错了,显示NED的frame 0不支持之类的。解决方法为,在启动程序后,需要定一个目标地址,否则其默认的NED目标坐标设置在RTK中是不支持的。
三、定位高度
RTK实测中,水平位置的精度可以达到2cm以内,换算就是±1cm,也就是cm级别的精度。
但是高度的抖动和误差比较大,在今天(2022年12月21日)的测试过程中,出现了高度的误差达到了将近2m,在之前的几次误差中,也达到了1m的误差。询问卖家,说这是正常的误差范围。
我也觉得是正常的,GPS对于水平精度还是挺准的,但是对于高度的测量,甚至达到十几米。RTK能达到几米已经很不错了。另外,高度还基于飞控内部的气压计进行测量,由于气压计测量的气压属于变化幅度比较大的那种,在温度、风速等变化下,数值变化巨大。今天测试高度误差更大的一个原因就是风速比较大。
已解决:看第四点下面的内容。
四、高度融合方法
目前想到的是,使用其他方法进行高度互补。首先就是测距模块:超声波或者激光。可以确保在高度不是那么高的情况下进行测高(考虑到户外测试也不需要那么高,以及高了之后也可以忽略这点高度误差)。在测试中,需要考虑场景,比如我们目前的测试是在户外草坪上,激光测距对于这种不规则表面是否会有较大的误差需要考虑到。
- 首先看能不能直接使用PX4内部的方式进行融合,(挖坑)
- 使用另外写程序的方法,高度对于PX4的offboard控制影响不是那么大,甚至可以外部写程序,生成一个新的高度数据进行后续的测量。但是这个方法可能会没有上述方法来的灵活,优先上述方法。
- 已解决:在QGC中进行高度融合设置(EKF_HEIGHT),默认使用的仍然是气压计,但是气压计在有风的情况下精度会很差。修改成GPS后,即可使用RTK的高度,精度也还不错。
五、多无人机RTK
初步测试:可以同时实现一个RTK基站,3个RTK移动站的高精度定位,在多次来回移动后保持高精度。
设置注意事项:由于RTK需要数传,因此也需要一个数传基站,和3个数传移动站。如果什么都没有设置,会导致QGC乱码。设置包括:①固定数传移动站的发射目标地址为数传基站,默认是广播的,影响了其他通道;②在QGC修改无人机编号MAVLINK_SYS_ID,比如分别设置成1、2、3,这样QGC才能够区别出来。
遇到的问题:多架无人机的相对位置并不会体现出来,他们的初始坐标都是自己的,并且初始化不一定为0,可能飘到很远很高的地方。因此在后续中,需要解决该问题。
可能的方法:首先,无人机的初始位置需要合理摆放,确保他们的物理坐标是明确的。其次,要确保无人机的坐标已经稳定,每一架无人机的坐标不一定马上就能稳定。最后,程序上解算相对偏移量。
六、 多无人机RTK测试出现高度变化问题
实际无人机测试情况:由于上述已经将无人机的高度定位修改成了GPS,也就是RTK提供的高度。在单架无人机测试中,无人机可以正常测试,在水平位置和高度保持较为稳定的状态。然而,在三架无人机测试中,主无人机(其中一架)在起飞时,目标高度2m,但是会冲到 8m的高度,但是高度数据显示只提高了2m,勉强起飞后,也会降落。其它两架无人机,或多或少会出现高度数据偏差严重问题。
猜测1:RTK高度定位本来就不太行,1架无人机成功飞行属于是运气好。
猜测2:RTK在多无人机情况下,地面站的数传通信能力有限,发送丢帧导致数据错误。
猜测3:多无人机出现了高度坐标混乱的情况,地面站没有分开发送高度数据。
猜测4:~
这是其中一张图片,图中飞行过程中Z轴的坐标,由于Z轴向下为正,所以看起来式反的。可以看出,Z轴目标点一直没变,但是在40s的时候,测量的z轴高度下降(也就是传感器测量出来无人机往下飞了),为了保持高度,无人机就向上飞了。可以想象,由于未知问题,传感器得到的Z轴高度不断降低(实际并没有下降),无人机为了保持高度而加大油门,导致实际高度不断上升。最后z目标点突然变为1,这点有点难以理解。
七、 上述问题的原因和解决
原因:通过询问客服和分析,可能是RTK数据量大,使用的数传性能不够,导致发送给无人机的定位数据不够,从而引发无人机定位精度偏差大。在后续的测试过程中,仅使用两架无人机后,无人机的定位问题解决了,进一步验证了上述的问题原因。
后续:考虑能否去除QGC除RTK必要数据外的其他数据,以减少负载,让三架无人机也能正常定位和工作。
八、 无人机MAVLINK_SYS_ID设置为其他后无法与mavros连接
问题:在两架无人机测试中,第二架无人机无法通过mavros进行控制,出现无法arm和无法切换offboard的问题,而遥控器是正常控制的。查看topic数据,发现了问题所在:
问题就是connected为false。
解决:通过查看px4.launch文件,发现了其中一个参数要对应修改,修改成2后即可,或者在roslaunch中进行设置:
roslaunch mavros px4.launch tgt_system:=2
九、 继续测试三架无人机的定位飞行
综上,目前已经测试2架无人机,使用RTK定位,在机载电脑offboard控制下正常飞行。需要继续增加无人机数量到3架进行测试。
测试结果:三架无人机时候,继续出现了定位抖动严重的问题,确定了是由于数传通信能力不足导致的RTK无法正常工作。数传只有200bps,即使更贵的数传也不超过300,因为他们是为了远距离而设计的。为此,可以考虑wifi数传,以下是参考资料:
- csdn的教程:https://blog.csdn.net/u013181595/article/details/90313964
- PX4官方教程:https://docs.px4.io/main/en/telemetry/telemetry_wifi.html
可以使用ESP8266或者esp32,如果通信能力不足,可以考虑外接天线版本的esp32。注意是想主要有以下几点:1. 能够设置成sta模式,他们接入路由器,这样才可以一对多通信;2. 固定地面站ip,固定无人机数传的目标地址,防止网络占用;3. 以防机载电脑和wifi数传的通信干扰。
十、 总结
- 地面站连接多架无人机,需要分别设置MAVLINK_SYS_ID,保证QGC可以区分每架无人机。
- 上述修改后,mavros指令也需要相应修改,tat_system:=n修改成对应ID,使机载电脑可以正常连接。
- QGC与多架无人机通信,数传模式为1对多,需要修改移动端数传的发送地址为地面端数传的地址,而不是默认的广播传输,地面站数传不修改为广播发送,保证了通信不被其他信道干扰。
- 使用RTK后,无人机的高度定位源可以从气压计修改为GPS,可以进一步提高高度定位精度。
- 测试过程中,请等待RTK初始化成功后测试。
十一、WiFi数传辅助RTK
上述的问题是数传传输速率不足,导致RTK定位失效,因此采用WiFi数传,使用便宜的ESP8266模块,依照官方教程,博客即可实现。
- 下载官方bin文件,通过在线网页进行烧录。注意esp01s为3.3V供电,飞控提供的是5V引脚,推荐使用ESP-15F使用。另外,如果有问题可以短接G2-GND进行重置。
- 链接对应wifi,此时还是AP模式,修改相应数据、更改为STA模式:
也可以在QGC进行设置:
- 其中波特率:57600为telem1、uart4接口的默认波特率;921600为telem2的默认波特率。
- 其中telem1是默认启用的,其他要启用则需要在QGC进行设置:
- 优化:上面的博客说,需要设置地面站目标IP,防止WIFI数传广播数据占用带宽,继续看下如何设置。
- 增加数传通信能力:默认的57600bps的通信能力有限,可以修改为921600。修改包括:
1)打开数传ip地址,进入设置,修改为921600。
2)修改qgc参数,包括wifi桥接、telem1波特率、mav波特率