Ardupilot飞控使用M9/M10 GPS传感器的设置方法和注意事项
2022到2023年,无人机DIY领域的GPS传感器进入更新迭代期,基于Ublox的M9和M10方案大量推出,替换以往的M8/M8N等老一代GPS,比如微空科技的MG-A01/MG-902等型号的GPS模组。本文主要介绍这几种GPS方案的主要区别,以及用于Ardupilot飞控的一些设置方法和注意事项。

为什么无人机一定要使用Ublox
这是一个老生常谈的话题,但这也是很多刚踏入无人机DIY领域的新手可能一直没搞清楚的一个问题。Ublox这家瑞士公司设计生产的GPS接收机芯片方案,在无人机领域几乎处于垄断地位,从最初的5代6代,到广为流行的8代双模,再到今天的M9/M10多模,Ublox的GPS方案不断升级,为无人机的稳定飞行提供了强有力的支持和保障。而在其它领域,还有着各种各样的GPS方案,为什么无人机上就Ublox一家独大呢,简单概括就是:一直以来,几乎只有Ublox的方案才能满足无人机的性能需求。
GPS产品性能有着非常多的评价指标,比如新手也能轻松理解的搜星颗数、启动速度等,除此之外还有定位精度、测量频率、速度精度等等指标。而定位精度也分绝对精度和相对精度,绝对精度会影响无人机的返航精度,相对精度则是指一定时间内的偏移误差,比如多轴无人机的悬停定点效果便会受此误差影响。而在这些关键参数上,各类国产GPS方案和Ublox相比均相差甚远。
还有一个比较大的区别是,Ublox可以使用自家的UBX协议,相比传统的标准NMEA协议,UBX协议提供了NED(东北天)三向速度值输出,以及GPS定位精度估计值hacc、vacc等,相比传统的hdop值相比有更直接的参考价值。最重要的是,UBX输出的NED速度数据精度非常高,简单的经纬度微分得到的速度数据与之无法相比,非常适合无人机这类对定位精度和实时性要求都非常高的应用。众所周知,GPS虽然有提供高度数据,不过误差通常是非常大的,一般难以使用。但Ublox输出的天向速度值却基本可以使用,而且刚好可以在室外辅助无人机的高度信息估计,特别是在大风天气压数据不稳的情况下。最新版的Ardupilot飞控固件,就需要使用到天向速度值,基本上就是绑定使用Ublox的意思了。
当然了,Ublox的王者地位肯定不会是一成不变的,有了领头羊在前面开路,后面总会出现一大堆的追随者,比如目前就有不少国产GPS芯片方案在迎头追赶,如国内的华大北斗、中科微、国科微、西南集成等芯片企业都在努力中。
M9和M10的区别
这里所说的M9和M10,通常泛指使用Ublox的第九代(M9140)和第十代(M10050)GPS接收机芯片设计而成的GPS模组产品.
M9是M8的下一代产品,性能提升非常之大,从双模定位升级到4模,可同时使用GPS、北斗、格洛纳斯、伽利略四大卫星系统,最多支持同时使用32颗卫星,且官方标称输出频率高达25Hz,定位精度和使用效果理论上相比8代要提升非常多。
M10则是Ublox的最新一代产品,但设计上并不是性能取向,而且综合权衡了功耗、成本等方面因素。因此相比M9,性能上并不占优。
不过,官标参数未必完全靠谱,一切还是以实测数据为参考标准。实际测试中发现M9/M10的某些参数和官方标称还是有些出入的,最明显的便是输出频率参数。M9官标25Hz,但实测下来发现在默认四模配置下,超过13Hz,数据便会出现异常。M10标称10Hz,且确实可以配置为10Hz没有异常,但输出数据的实际采样率只有4-5Hz左右。从使用来讲,5Hz的GPS数据基本可以满足飞控的需求,Ardupilot飞控的默认配置也是5Hz,但10Hz或更高的GPS数据频率对飞行性能还是有明显提升的,特别是机动飞行状态下。
选择M9还是M10
选择用M9或M10,还是由实际应用需求来决定的。比如在穿越机上主要用于GPS救援功能,对GPS本身性能要求并不是特别高,那么用M10便足够了。如果是用于普通多轴无人机或者固定翼,那么还是比较推荐使用M9,性能上更占优。
Ardupilot在固件版本4.3以后,优化了姿态融合算法,提升了效果和精度,但是对GPS性能要求更高了。特别是用于固定翼时,在不使用罗盘的情况下,其GSF算法融合IMU和GPS信息以估计飞机航向角度,使用高精度高刷率的GPS传感器会得到更佳的结果。
在Ardupilot飞控中使用GPS
1. 连接GPS到飞控
第一步是先完成传感器的物理连接,以微空的MG-A01/MG-902为例,GPS模组上使用6P接口,其中分别是GND/5V/Rx/Tx/SCL/SDA,GND和5V用于供电,Rx和Tx则是串口的两根数据线,用于传输GPS数据给飞控,通常需要接入到飞控的某一路串口上,注意两边的Rx和Tx需要交叉接。而SCL和SDA则是模块上板载罗盘的通信接口,需要连接到飞控的IIC接口。
下图以Pixhawk2.4.8为例说明接线方式,其它飞控请参考飞控官方提供的接线说明图来连接GPS。

2. Ardupilot中配置GPS相关参数
首先需要把Ardupilot的串口功能(SERIAL_PROTOCOL)设置为GPS(5),波特率可以不用设置。由于Serial3通常就是预留给GPS的,所以一般情况下这是Ardupilot的默认设置。

接下来配置GPS相关参数,在参数树中找到GPS这一列相关参数。首先确认GPS_AUTO_CONFIG为默认值1,GPS_TYPE为1或者2,这样飞控将会自动识别GPS模块的波特率并自动配置Ublox。接着GPS_DELAY_MS修改为200,GPS_RATE_MS配置为200(M10)或者125(M9)。
GPS_RATE_MS这个参数意思是配置GPS的输出速率,125表示8Hz,M9的话可以尝试更高(不要超过13Hz)。值得注意的是,M9当输出速率大于等于10Hz时,搜星颗数会限制最大16颗,通常是挑选质量最好的16颗卫星,所以对定位精度并没有太大影响。

修改完配置并写入参数后,飞控重新上电并连接MissonPlanner,如果在飞行数据的Hub右下角看到“GPS:未定位”,说明飞控已经能成功识别到GPS了。如果识别失败,显示的则是“无GPS”。

到此GPS配置完毕,可以将飞机带到室外开阔地测试GPS搜星效果了。
3. Ardupilot中配置和使用罗盘
只要将罗盘的SCL和SDA两根信号线正确连接飞控,Ardupilot便能自动识别并使用罗盘,飞控中需要设置的参数并不是太多。
和IMU传感器一样,罗盘也是有安装方向定义的,但是Ardupilot实现了一个比较便利的功能,那便是罗盘方向自动识别。这功能通常是默认打开的,在参数树中确认COMPASS_AUTO_ROT参数的数值为2即可。这样我们便能以随意方向安装GPS模块(0-90-180-270°中四选一),在校准完罗盘传感器后,Ardupilot将会自动识别出罗盘的安装方向。

在指南针设置页面,可以看到罗盘传感器是否已经被飞控识别。
之后寻找一个空旷无干扰的区域,最好是室外,点击软件中的Start,开始校准罗盘,这个时候开始将飞机在各个方向上多次旋转360°,直至校准进度条达到100%,校准成功后飞控将会自动计算出罗盘的安装方向参数并保存。
需要注意的是,罗盘校准并不是一劳永逸的。当每更换一次飞行场地的时候,建议需要重新校准一次罗盘,保持恰当的校准参数,以适应当地的地磁环境。

还有一个地方需要注意的是
新版Ardupilot固件中默认使用EK3估计器,可以手动选择传感器来源。如果需要使用罗盘的话,请务必确认EK3_SRC1_YAW的值为1。

结语
GPS是一个非常重要的传感器,不管是多轴还是固定翼,因此选取使用合适型号的GPS并正确配置使用,是每一个无人机DIY入门新手都必须要走的一条路,希望此文能对读者有所帮助和启发。
另外对于多轴来说,GPS和罗盘都是Ardupilot飞控必需的传感器。而固定翼在某些情况下,没有罗盘也可以单纯依靠GPS和IMU来估计航向,和使用罗盘+IMU估计航向的方式各有优劣之处,需要读者结合自己的需求和实际使用场景来判断使用哪种方案。