基于QGroundControl的RTK数据接收及转发
一、相关说明
- 1.地面站:基于QGC编译的Android地面站。
- 2.需求:RTK接入,地面站接收RTK基准站数据,然后将数据打包通过MavLink转发至飞控。
- 3.需求目的:为无人机提供RTK高精度定位提供数据支持。
- 4.基准站数据格式:RTCM数据流。
二、开发方案
目前海星达RTK支持BlueTooth及Wifi传输数据,但是 BlueTooth收到的数据并非RTCM数据流,无法满足我们的需求。经过与厂家技术开发沟通,Wifi发送的数据是RTCM流数据,那么下面开始通过TCP连接接收数据。
该RTK基准站提供IP及端口,能够支持TCP连接,通过TCP接入开发,实现了以xD3开头的RTCM数据的接收:
\xD3\x00\x16""C\x01)3\xF9""B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDD\x84P
\xD3\x00\x16""C\xC0\x01""B\x93.\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xE4\x99k
\xD3\x00\x16""F@\x01)3\x1E\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x93\xC5
\xD3\x00\x15>\xE0\x01\x03z\x93 \x9F\xC9\f\x8Eyo#\x05\xC3?[|\x00\x00\xC7`3\
xD3\x00\x04HXHDP\xBC$
\xD3\x00\x06?\x00\x01\x00\x00\x00\xAF,\x98
RTCM 3.1数据格式:
三、数据处理关键流程分析
1.创建TCP通信类TCPLink
该类作为TCP连接的客户端。主要任务是实现TCP通信连接,接收服务端(RTK基准站)的数据,再通过“信号-槽”机制将数据转发至MAVLinkProtocal类中的receiveBytes函数。
TCP通信具体实现流程略,后期会发表“QT创建TCP Socket通信”的文章进行详细阐述。
2.MAVLinkProtocal接收RTCM数据的函数receiveBytes
其中参数link表示当前的TCPLink,参数b表示RTCM数据。
(注:限于篇幅,后文均只展示关键代码,并非全部)
void MAVLinkProtocol::receiveBytes(LinkInterface* link, QByteArray b)
{
//...
if (!_linkMgr->containsLink(link)) {
return;
}
QmlObjectListModel& vehicles = *_toolbox->multiVehicleManager()->vehicles();
//RTK Data
if (b[0