hz770495569 发表于 2018-5-24 11:16:45

无人机飞控相关的GPS知识小结

转载过来的一篇文章什么是GPS?通常意义上讲GPS,其实应该是指Global Navigation
Satellite System全球导航卫星系统,即GNSS。主要是用来定位的系统。
GPS的种类?目前全球定位系统有下面几种:GLONASS         俄罗斯 格洛纳斯Galileo-NES      欧洲 伽利略BDS                  中国 北斗GPS                  美国 全球定位系统这里看到,其实GPS只是单指美国的全球定位系统,不过现在习惯上用GPS泛指其他定位系统。
为什么飞控需要GPS?这是由无人机的操作要求和任务要求决定的。有了GPS后,无人机能够悬停飞行(定点),飞手操作的复杂性大大降低,同时,为了能够执行一些航迹飞行任务,定位信息也是必要的。简单来说,如果只是姿态自稳的飞行,可以没有GPS,但是随着要求的提高,GPS对飞控、对无人机都是必要的部件。
GPS的工作原理?首先,宇宙里的卫星会不停的向地面的GPS接收机(常用的GPS模块)广播当前的位置信息,包括该数据包的时间戳,当GPS模块接收到这些信息后,用当前时间减去时间戳的时间,就得到空中传输的时间,乘上传输速度,就得到卫星与GPS模块的距离。理论来讲,为了确定GPS模块的坐标位置(NEH),3个参数,那只需要3颗卫星与GPS模块的距离就可以计算出来。但是因为对时间差的要求特别高,由于GPS模块的时钟一般是石英钟,所以认为它的时钟时间与卫星的时间有同步误差,所以加上这个误差作为参数,这样就有4个参数待定,所以一般至少需要4颗卫星进行观测。
飞控上常用的GPS型号?目前,用于多旋翼无人机中的GPS,常见的是Ublox的NEO-M8系列。https://pic4.zhimg.com/80/v2-b413e8a18e223bf9fe1baca9b1e87f0a_hd.jpg当然,还有其他厂家的高精度GPS模块,比如偌瓦泰,以及这两年广泛使用的差分GPS。
GPS的指标?https://pic2.zhimg.com/80/v2-8412f47721f7d63b97d2a21a59344fd0_hd.jpg这里,有比较重要的几个指标:速度数据的精度在0.05m/s;水平的定位精度,如图所示,一般设置在GPS模式时,定位精度为2.5m左右;输出频率,在GPS模式时,最大输出10hz。
GPS的输出协议?以M8N模块为例,有NMEA、UBX、RTCM3种。默认NMEA、UBX两种协议都已使能,但是输出的只有NMEA协议,这个协议是ASCII码形式输出,如果与电脑上位机进行通讯时,用这种方式解析比较方便,但如果是嵌入式单片机(飞控一般属于此类)与GPS模块进行通信,一般用UBX协议,其输出格式是二进制。
UBX数据帧结构https://pic2.zhimg.com/80/v2-9d96b5a979e2e6069e9399101f66352b_hd.jpg前两个字节是同步头,接收模块通过查找这两个同步头,可以确定这包数据按照什么格式进行接收。CLASS字节表明接收的数据组信息;IP字节表明接收的数据组里的什么信息;长度信息用两个字节表示,表明数据包里有多少个数据,且是小端模式(大小端模式,主要是说,比如一个16位的数据在传输过程中,将高8位的数据放在前面还是后面)。PAYLOAD存放的即数据信息。CK_A和CK_B是两个字节的校验位,对CLASS到PAYLOAD的数据进行校验,为了确保数据包在传输过程中数据的正确。
GPS模块的设置为什么需要设置?设置GPS模块,主要是为了让模块能够输出想要的信息,包括输出频率等。
设置的方法?1.电脑端上位机设置https://pic4.zhimg.com/80/v2-657df167eca72e1039174a6a95ce22c1_hd.jpg用USB转串口模块,将GPS模块与电脑相连,用官方给的u-center上位机进行设置。优点:嵌入式程序不需要做相应的代码编写;缺点:需要GPS模块能够保存设置信息,掉电不丢失;
2.嵌入式程序,在上电初始化的时候进行设置(常用方式)。优点:对GPS模块没有要求,不要求其能够保存设置信息,方便使用;缺点:飞控程序需要编写相应的初始化设置代码(代码可参考后面给出的链接);
飞控需要GPS哪些信息(即需要设置哪些参数)?以开源飞控px4为例:https://pic2.zhimg.com/80/v2-78fc540983ccce8e2598e95563a4a03b_hd.jpg实际应用中,我们可以不需要解码出这么多信息,常用的如下:经纬度、海平面高度            lat   lon   alt锁定类型                              fix_type水平/垂直精度估计               ephepv水平/垂直精度因子               hdopvdopGPS噪声值                        noise_per_msNED系速度                         vel_n_m_s    vel_e_m_svel_d_m_s卫星数                              satellites_used
如何设置?以电脑上位机设置示例:1.连接相应的com口,打开MessagesView窗口https://pic2.zhimg.com/80/v2-aac3aa2ed59eb9aa6347cc35ff3f3568_hd.jpg2.点击UBX窗口,因为与飞控之间的通信都是用的UBX协议,所以我们要在UBX窗口进行配置https://pic3.zhimg.com/80/v2-d773860980921b10f0a93ba4470afe17_hd.jpg3.设置模块输出的方式,选择串口,输入输出都选择UBX协议https://pic4.zhimg.com/80/v2-90e27ef3557b249da8d4f70ab53913ae_hd.jpg4.点击下方按钮,能够看到发出的命令具体是什么,在嵌入式代码编写中,最简单的笨办法就是通过电脑上位机将这些命令保存下来,直接在嵌入式代码中赋值给数组保存起来调用https://pic2.zhimg.com/80/v2-3b2f6a0ee7c67f765ca491b2aee55176_hd.jpg5.设置GPS模块的输出频率,如图,选择UTC时间,5Hz输出https://pic1.zhimg.com/80/v2-2f7680e3540f58c51c9d908ba9b3129f_hd.jpg6.设置一些参数,比如动态模式小于2g(一般飞行不会超过该数值),fix类型为3d锁定等https://pic1.zhimg.com/80/v2-7680d6923802fd71ce149f53b4186cb4_hd.jpg7.设置输出的数据消息类型,在m8n系列中,可以直接选择NAV-PVT输出,就包含了常用的一些信息,比如经纬度、高度、NED速度等https://pic1.zhimg.com/80/v2-975b38cf5b7d40efb0786ce7491c95aa_hd.jpg如下图所示,GPS模块正在输出PVT数据包https://pic3.zhimg.com/80/v2-c0b4f55e2d95e6a3983a76de5ebd1562_hd.jpg8.设置输出DOP数据包https://pic2.zhimg.com/80/v2-24d87191008e73185a1aa031a2c2016b_hd.jpg9.设置输出星数数据包https://pic1.zhimg.com/80/v2-6c7ea9835c2e2aa291bcce34e8204b3b_hd.jpg
GPS相关的坐标系GPS的数据全部是在WGS-84坐标系下的,而飞控做定点控制,对位置进行解算、控制都在北东地NED坐标系下,所以要将GPS的数据进行转换(主要是位置数据经纬度)。多说一句,GPS输出的高度一般不会用来进行高度推算,在大范围的高度变化情况下,具有一定的参考意义(相对变化),但是GPS的高度会随机漂移,所以一般不会使用这个数据(笔者自己的看法)。有关坐标系转换的数学表达式这里不再进行推导,有兴趣的可以自行查找资料推导,以工程应用为主,直接给出ned系和WGS-84系互相转换的函数(参考px4代码),图中的ref为原点,即home点。由home点坐标和当前点坐标,计算出NED系下当前点与原点的距离。https://pic1.zhimg.com/80/v2-10771aaff867da4ca5c99f6ecede07bc_hd.jpg反之,由home点坐标与ned系下的距离,推算出当前点的坐标。https://pic1.zhimg.com/80/v2-3ff23c84f144dd5da58ae097f3fba6a9_hd.jpg
飞控中如何判定GPS可用?标准不定,但是基本原则是根据精度来判定。这里插入讲一下,笔者有次在某个群里看到有人问飞控算法里的eph epv表示什么意思,有人回答说是水平和垂直的精度因子,然后一大群人附和这个说法,但其实这个说法是错误的。首先,水平/垂直精度因子是dop数据包解析出来的hdopvdop。这里的eph epv是pvt数据包里的hAcc vAcc,单位是mm,飞控中将其转换到m。简单理解就是水平和垂直方向的精度,这个数据是估计出来的。
在飞控算法中也更新这个数据。所以,参考开源代码的时候,要看的细致一些,不能想当然的认为,包括网络查找的答案不能尽信,要自己审核确认下。https://pic3.zhimg.com/80/v2-67ff16aab5a442c91893df8d55638aeb_hd.jpg这里通过判定gps的噪声值、fix_type来判定gps是否可用。在组合导航算法中,通过eph、epv和fix_type来判定。https://pic4.zhimg.com/80/v2-7b5b066327d2ccccdd88037ce8897c95_hd.jpg
ephepv在导航算法里的小应用比如用来自适应调整GPS参与融合的权重值。https://pic1.zhimg.com/80/v2-2b839e5e14b84eba077d57279edb6fc8_hd.jpg如图所示,这里的min_eph_epv为2,也就是说,当GPS的eph、epv小于2的时候,gps参与融合的权重为1,当GPS的eph、epv大于2的时候,这时候GPS的数据质量不佳,同时,权重值也小于1,达到自适应调整权重值的目的。
为什么不用星数作为判定条件?星数数据是离散变化的,很容易在设定的阈值上下跳变,这种情况下,飞行模式会不断的进行切换,导航算法也在不停的切换,程序容易出现问题,也不稳定。
Dop是什么意思?Dop分为以下几种:https://pic2.zhimg.com/80/v2-adf7c0b6bc9d87c0235e3bc840b281a5_hd.jpg常用的有:PDOP(position dilution of precision ) 三维位置精度因子:为纬度、经度和高程等误差平方和的开根号值HDOP(horizontal dilution of precision )水平分量精度因子:为纬度和经度等误差平方和的开根号值VDOP(vertical dilution of precision )垂直分量精度因子GDOP(Geometric Dilution Precision)几何精度因子:是衡量一个定位系统精度的重要标准之一它们之间的简单关系为:
HDOP2+VDOP2=PDOP2DOP值的大小与GPS定位的误差成正比,DOP值越大,定位误差越大,定位的精度就低。PDOP则直接反映GPS卫星的分布情况,当PDOP较大时,表明空中的4颗GPS卫星几何分布不是太理想,他们构成的图形周长太短,定位精度就低,反之亦然。小于等于4的PDOP产生最佳位置。5到7之间的PDOP可接受,大于等于7的PDOP较差。
GPS解码与环形缓冲区网上有些源码,gps解码采用的是串口中断方式。当然,源码只实现gps解码的话,这种方式问题不大,但是在整个飞控工程中,采用这种方式并不好。原因:嵌入式实时响应系统的中断使用,有一个原则,就是快进快出。在进入中断的时候,这个中断执行函数就必须尽可能快地执行完毕,然后跳出这个中断,使得比它优先级低的中断能够得到响应。所以在遇到一些接收数据量大,然后数据同时需要进行计算解析的时候。如果不使用缓冲队列进行管理数据,那必然需要在中断执行函数里面完成,接收同时完成解析。这样解析的时间如果过长,就势必会影响中断的执行长短,然后从而影响着整个系统的实时性。如果系统的任务比较多的时候,这个中断的执行时间太长,从而引起其他的任务无法正常的运行,有可能会导致整个系统的崩溃。所以,采用了缓冲队列的方式,将数据进行保存下来。然后在主控制器中解析这些数据,这样既保证了中断的实时性,又保证了我所接收到的数据能够完整的进行解析。举个例子:假设这样一种情况,我们在中断里面去接收数据前,同时解析数据。当接收到一个字节的数据的时候,再进行一些计算,如果这个时候有更高优先级的中断发生了,那系统肯定要跳到中断优先级高的执行函数里面去执行,如果这个高执行函数执行时间过长。在还未跳到低优先级的中断的时候,这个时候来了几组新的数据,这样就会新数据会覆盖之前的数据,引起丢桢。
所以为什么要用环形缓冲区ringbuffer?用于接收不定时、量大、数据,且数据需要分析处理。还有一个优点,做解码的时候,并不会去判断我是不是接受了一完整的数据包。一般的做法是,把gps的数据接收下来,保存在缓冲区。主函数里面一有空就去解析这个缓冲区里面的数据。因为一个完整格式的数据帧,里面还有数据头和检验,根据这个,就能够识别出这个数据包头。所以并不需要等到一个完整的数据包接收完全之后再去解析。
参考源码(移植pixhawk GPS解码代码):硬件平台:Pixhawk v2硬件 F4主芯片
软件环境:mdk stm32 cube HAL库C语言百度云盘链接: https://pan.baidu.com/s/1BCS4n_g_CZQDdxbLgu-s_A
密码: rysu
GPS数据在飞控中如何使用?首先,在做定点飞行控制时,如果直接使用GPS反馈的数据,也是能够实现功能的。但是需要注意的是,前面讲到GPS模块的输出频率,最大10hz,而通常做定点控制时,控制频率是达到50hz以上(px4在100~200hz左右),反馈的数据频率带宽过低,这样控制增益不能加大,控制效果偏弱,甚至出现不稳定的现象(抖动、电机声音抽搐)。
说到控制,插入两个知识点:什么是控制带宽?简单来说一句话,控制带宽决定了系统的快速性。以飞行器这个对象来说,高带宽意味着高性能,飞机的快速响应能力,但高带宽是建立在高成本的基础上的。比如飞行器的机体材料需要刚性强的,动力系统的响应能力要快,飞控的芯片处理能力快,传感器延迟小等等条件。一般来说,飞行器的带宽在30hz左右,所以传感器的低通滤波的截止频率一般设置在30hz。某些震动大的飞行器,可以设置更低一些,一般震动大的,轴距也大,所以快速性要求没那么高。
传感器采样频率、控制频率之间的关系?一般来说,传感器的采样频率尽可能越高越好,比如gyro数据1000hz采样,实际在姿态估计算法中是200hz读取,这样多出来的数据点能用来做滤波处理,尽可能的保存真实信息。控制器频率则一般根据系统的带宽决定,一般来说,控制频率是带宽的5倍左右(理论推导不详述了,请自行查阅书籍)。在多旋翼飞行器中,一般包含了4个控制回路,角速度控制、角度控制、速度控制、位置控制。以角速度控制为例,前面gyro滤波器设置的截止频率为30hz,所以最好角速度控制达到150hz以上。当然,这些没有标准的设置,基本合理就可以,底层的角速度控制频率尽可能高些,200~400左右即可。
如果反馈的数据频率低于控制频率怎么样?常见的,以飞行器的定点控制为例,如直接使用GPS数据作为速度、位置反馈,GPS的数据频率可设置到10hz,但一般速度位置的控制频率在50hz以上。这样做,也是可以的,飞行器能够实现定点功能,但是存在一些问题,比如控制参数不能设置过大(与高频率的反馈数据相比),飞行过程中出现细微的不稳定现象等。综上:传感器采样频率越高越好,控制频率低于反馈数据的采样频率,同时尽量保证控制频率大于带宽5倍以上。
所以,飞控解码得到GPS的数据之后,会做数据融合,简单来讲,就是通过与加速度计数据、姿态数据、气压计数据进行组合导航,估计出所需的惯性导航数据。好的融合算法,能够使得估计出来的数据相比GPS原始数据,频率提升,且具有相位超前(GPS的数据一般较实际反应,延迟150ms左右)。有关组合导航的估计算法,后面会单独写文章进行描述,这里不再赘述。
GPS数据质量不佳会有什么影响?前面提到,需要用GPS的数据进行数据融合,如果GPS原始数据质量不佳(满足可用条件,但是不够好),会对融合算法产生影响,实际飞行时,比如GPS模式下飞行时,打杆操作不正常,返航精度不够等,总而言之,增大了炸机的风险。
补充:Ø GPS第一次在一个地方上电的时候,搜星时间比较长一些,一般需要1min左右,如果在同一地点,上电间隔时间短的话,搜星很快,20s内就能搜星成功,达到GPS可用状态。Ø 一般空旷环境下,星数在15颗以上,就认为GPS质量相对较好了,大部分人都是通过星数判定GPS的数据质量。Ø 阴雨天气,楼层之间等环境下,GPS数据质量会受到很大影响,因此不建议在这种状态下飞行。

sctwp 发表于 2018-5-24 13:40:03

没有点赞的图,写文字吧

3466756555 发表于 2018-5-24 13:58:11


文字说的挺详细,只是图片显示不出来

zwjiang8212 发表于 2018-5-24 14:04:08

图片不显示

hz770495569 发表于 2018-5-24 14:05:18

3466756555 发表于 2018-5-24 13:58
文字说的挺详细,只是图片显示不出来

奇怪了,我复制过来的时候看到能显示图片的~那直接上链接吧
https://zhuanlan.zhihu.com/p/37063724

cmy043 发表于 2018-5-24 14:15:20

好文章,mark一下

xu1688 发表于 2018-5-24 19:19:10

好文章。多谢多谢

jimgx 发表于 2018-5-24 19:30:32

好文章。多谢多谢

caoxuerji 发表于 2018-5-24 20:21:15

图片好像打不开,文章不错

bjc55 发表于 2018-5-31 16:51:01


非常不错啊,赞一个,可惜图片打不开。

clqfly 发表于 2018-6-12 20:57:34

图挂了,楼主

diyer_zhou 发表于 2018-6-12 21:49:01

不错,学习!

窗外枫叶 发表于 2019-1-2 11:30:34

我还以为就我看不到图呢

zhongsandaoren 发表于 2019-1-2 13:14:43

飞控GPSmark一下

窗外枫叶 发表于 2019-1-2 16:23:44

楼主,求图片,我配置UBX没配置成功

窗外枫叶 发表于 2019-1-3 10:56:46

培植成功了
页: [1]
查看完整版本: 无人机飞控相关的GPS知识小结