第五章 PX4-Pixhawk-GPS解析

时间:2024-04-04 07:57:07

第五章 PX4-GPS解析

在上一章节我们对传感器MPU6000做了一个解析,MPU6000所支持的协议是SPI。这一章节我们来解析GPS,GPS使用的是串口通信。这里我们着重讲解UBLOX的解析过程,并且会附带串口的解析说明。这一章节完了之后大家有兴趣可以尝试RTK的数据解析,对于RTK我在前面讲到过。

首先我们还是找到GPS的启动代码,GPS的启动在RCS文件中直接就是第五章 PX4-Pixhawk-GPS解析

。这里我们回到驱动层第五章 PX4-Pixhawk-GPS解析

找到文件gps.cpp文件找到入口函数第五章 PX4-Pixhawk-GPS解析

。这里说明一下PX4的gps驱动是可以支持2套gps的第五章 PX4-Pixhawk-GPS解析

从这里就可以看出来。首先我们还是来看device_name,这个参数是第五章 PX4-Pixhawk-GPS解析

驱动层的h文件均在第五章 PX4-Pixhawk-GPS解析

目录下。很显然这里其实就是串口的名字。既然说到这里我们就来说说“/dev/ttys3”是如何注册到串口的吧。

还记的SPI的驱动吧。这里我们主控是V2板的所以是支持的处理器是stm32的,所以我们就到stm32的驱动中去找,这里一般对stm32库了解的话都知道,串口要么是usart要么是serial,这里我们就可以知道文件是stm32_serial.c,初始化串口程序就是up_serialinit了,至于为什么,你可以去追踪一下,发现这个函数在第五章 PX4-Pixhawk-GPS解析

文件中调用,stm32是属于arm不是avr哦,第五章 PX4-Pixhawk-GPS解析

然后一级一级的去追踪你就能发现最终的源头了。回到stm32_serial.c文件的初始那段代码去。你可以看到NSH 后台控制串口注册的是串口7第五章 PX4-Pixhawk-GPS解析

CONSOLE_UART=7哦,这里你可以去追踪哦,对照deconfig文件,那些define定义在deconfig文件能找到的。并且串口7还注册了DMA控制第五章 PX4-Pixhawk-GPS解析,接下来的for会对串口一一初始化第五章 PX4-Pixhawk-GPS解析看到没一开始是复制第五章 PX4-Pixhawk-GPS解析然后对x值进行改变然后注册了哦,刚才我们找到GPS是ttys3,所以我们查看一下uart_devs[2],这里面的逻辑应该不难理解吧!发现注册的是串口3。我们在来看看硬件的GPS接口第五章 PX4-Pixhawk-GPS解析

正好是串口3哦,这下对应起来了吧。串口的注册也就讲完了。

这里我们就直接进入start函数,第五章 PX4-Pixhawk-GPS解析这里的参数是第五章 PX4-Pixhawk-GPS解析相信也不难理解吧。然后就是产生驱动首先还是以new的方式进行初始,然后成功后进行init函数第五章 PX4-Pixhawk-GPS解析这里的init函数就是gps的init,这个自己理解一下,所以这个初始化也在本文件中,找到init函数看到的是串口任务第五章 PX4-Pixhawk-GPS解析同样去追中函数第五章 PX4-Pixhawk-GPS解析找到task_main函数,首先是打开串口第五章 PX4-Pixhawk-GPS解析这里的_port在new的时候赋完值了哦。然后就是订阅和初始化数据转存,然后进入while中去执行。首先会判断_fake_gps参数,这个是虚拟的数据,真正场合肯定不会用的,所以我们看else的,这里是一个case语句是对模块的选择,我们今天只讲ublox,所以看到这里也是new GPSDriverUBX.然后是检测配置第五章 PX4-Pixhawk-GPS解析主要是波特率,这里的configure是一个虚函数,我们使用的ublox所以当然是到ubx.cpp中去找了。第五章 PX4-Pixhawk-GPS解析这里面的函数都不难,但是要对比手册来看,这里面的处理机制可以值得学习哦,通过轮询的方式来查找ublox的波特率,还有就是配置ublox。

接下来就是复位那些数据了,然后就是要接收数据了第五章 PX4-Pixhawk-GPS解析。找到ublox的receive函数第五章 PX4-Pixhawk-GPS解析,进入读取串口数据第五章 PX4-Pixhawk-GPS解析读取的数据暂存在buf中。这里的read函数大家不妨去找找,这个是一个重载到gps.cpp中的回掉函数第五章 PX4-Pixhawk-GPS解析,大家也能看到读取数据的case语句第五章 PX4-Pixhawk-GPS解析这里面就有对串口数据中断读取的函数,大家自己去理解一下。

然后进入数据解析阶段了第五章 PX4-Pixhawk-GPS解析这里我们贴出ublox的协议格式。

第五章 PX4-Pixhawk-GPS解析

所以从这里就可以看出帧头以0xb5,0x62开头。第一个case就是判断是0xb5和是否为rtcm格式第五章 PX4-Pixhawk-GPS解析

第五章 PX4-Pixhawk-GPS解析

完成帧头后需要进行校验了,看到没校验是从第三个数据开始的哦,第五章 PX4-Pixhawk-GPS解析ublox采用的是校验和的第五章 PX4-Pixhawk-GPS解析然后得到2个数据的长度第五章 PX4-Pixhawk-GPS解析

这里的_rx_payload_length就是长度了。接着就开始解析相关数据了,这里我们只解析SVINFO信息第五章 PX4-Pixhawk-GPS解析

看到没通过之前接收到的_rx_msg来判断接收到的是什么数据。首先我们还是来看看ublox的SVINFO数据帧,第五章 PX4-Pixhawk-GPS解析

进入到解析函数就可以看到这些数据的解析了,这里不做过多说明,只要对照手册就很容易读懂,这帧数据主要是卫星高度角、信噪比了。

第五章 PX4-Pixhawk-GPS解析

解析出数据后就要继续进行校验和了,从刚才ublox的数据帧也可以看出来校验和是占两个字符。

第五章 PX4-Pixhawk-GPS解析
当然校验完成了后还是要解析其他的数据了第五章 PX4-Pixhawk-GPS解析,这里面就有NAV_PVT、NAV_POSLLH等等,这些数据帧你就看到了经纬度、高度,ecef坐标了,这些解析的就没必要说了吧。

所有的数据在这里就算是接收完了,完了之后当然是要发布出去给需要的机制去订制。第五章 PX4-Pixhawk-GPS解析

第五章 PX4-Pixhawk-GPS解析大家也行看到的是_report_gps_pos,其实这个不难理解,大家还记得那个new吗?找到ublox的new初始化你能找到原因的。到这里GPS的驱动就基本上是完成了。