基于HI600的低成本最小RTK系统详细搭建过程

本文详细介绍了如何使用HI600R模块搭建最小RTK系统,包括基站定位、设置指令、RTK数据接入与验证,以及无线数传模块的波特率配置。通过C++读取和处理GGA输出信息,确定基站位置,并展示了RTCM数据接入后的NMEA数据变化。在无线模式下,确保UART2波特率与数传模块匹配,实现无线定位。
摘要由CSDN通过智能技术生成

搭建过程参考博文链接:基于HI600R的差分GPS设搭建过程介绍_进击的益达的博客-CSDN博客

        项目要求使用国产设备进行实验,看到上述博文后果断入手超核HI600模块,购买链接在上述博文中有所提到,这里不再赘述。值得注意的是,无线数传模块对波特率有限制,在传输9600波特率以上的信息流会出现问题,所以如果对无线模式下的波特率有要求可以选择功能更强的无线数传模组。在博文中提到的蘑菇头天线受限与成本,搜星数量较少,增益效果较弱,定位精度可能受到影响,有更高需求的话可以更换。本文搭建过程中采用的天线如图1.

 图1 四星多频GNSS天线

        搭建过程涉及到调试内容均在SSCOM串口助手中进行,初始波特率为115200

        搭建最小RTK系统第一步即定位基站实际位置,思路为在串口助手中观察GGA输出信息,得到多组经度,维度和海拔高度信息求取平均值。在串口助手中有“保存数据”选项(图2),可以将调试窗口中所有数据输出为txt文件,本人采用C++进行读取,给出读取部分代码,其中文件位置需要修改为txt所在位置,copy后可自行修改输出内容,操作较为简单,不再赘述。

 图2 串口助手保存数据选项

#include <iostream>
#include <sstream>
#include <vector>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
    string line;

    vector < string > v1;
    vector < string > v2;
    vector < string > v3;

    ifstream fin;

    fin.open("C:\\Users\\Administrator\\Desktop\\SaveWindows.txt");

    if (fin.is_open())
    {
        int count = 0;
        int col =0;
        while (getline(fin, line))
        {
            stringstream ss(line);
            if (col%16==1)
                {
                    //cout<<col<<endl;
                    //cout<<line<<endl;
                    while (getline(ss, line, ','))
                    {
                        if(count%15==2)
                        {   
                            v1.push_back((line));
                            //v3.push_back(stod(line.c_str()));
                        }
                        if (count % 15 == 4)
                        {
                            v2.push_back((line));
                        }
                        if (count % 15 == 9)
                        {
                            v3.push_back((line));
                        }
                        ++count;
                    }
                }
            col++;
        }
        /*double Latitude=0; double longitude=0; double altitude=0; 
        double num_Latitude = 0;double num_longitude = 0;double num_altitude = 0;
        for (auto x : v1) {Latitude+=x;num_Latitude++;}
        cout << Latitude/num_Latitude<<endl;
        for (auto x : v2) {longitude+=x;num_longitude++;}
        cout << longitude/num_longitude<<endl;
        for (auto x : v3) {altitude+=x;num_altitude++;}
        cout << altitude/num_altitude<<endl;*/

        for (auto x : v1) cout << x << endl;
        cout << endl;
        for (auto x : v2) cout << x << endl;
        cout << endl;
        for (auto x : v3) cout << x << endl;
        cout << endl;

    }
}

        按照官方手册“设置为基站”部分,需要通过https://nmeachecksum.eq th.net/进行指令校验,保证输入指令的有效性,若指令发送后无接收,可能是Checksum指令错误,检查无误后可正常输入指令,例如:$PAIR604,1,1,40.0018246,116.2122758,49.21*06。在输入指令时要加回车换行,否则无效。设置基站位置成功后需要保存所有配置,重新上电后可生效。

        第二步需要检验流动站输出的RTMC数据是否正常,即是否可以正常接入RTK数据。对流动站输入指令:$PAIR862,0,0,239*22(设置UART0只输出RTCM),若输出结果如图3所示,则代表接入RTK数据。

图3 RTK数据的接入

        若数据正常后,可输入$PAIR862,0,0,237*2C(设置UART0只输出NMEA(默认) ),此时可以看到GGA数据发生变化:E后第一位字符由1或2变为4或5,4为固定解,可达到3cm左右精度,5为浮动解,可到到分米级精度(0:无效解;1:单点定位解;2:伪距差分;4:固定解;5:浮动解),校内实验环境遮挡情况相对较多,大多数情况下为5状态。

图4 RTK数据接入后NMEA数据变化情况

        其中ENU信息是只有在RTK数据接入的情况下才会出现,差分站台ID相同

        以上情况均基于有线模式下完成,在接入无线数传模块后,调整至合适的波特率即可在数传范围内实现无线传输,基站位置固定不动的情况下,流动站可以安放在机器人上进行实时定位。基站和流动站通讯是通过UART2接口进行的,所以要保证UART2_TX(基站)和UART2_RX(流动站)的波特率一致,UART0和UART2相互独立,可以设置不同的波特率。在进行波特率修改时,只有修改UART0的波特率才会在串口助手显示出来,修改UART2的波特率是不会显示的

        至此最小RTK系统搭建完成,后续有问题将继续更新,在此感谢超核电子杨工与中科院动力史博士的帮助支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值