本文
主要介绍惯导的实车调试
调试流程
主要围绕能不能启动
,能不能读到数据
,数据对不对
这三点展开。
启动gnss
首先在编译完gnss组件后,可以通过apollo自带的脚本启动它(在Apollo工作路径下)
bash scripts/gps.sh start_fe
通过后面加start_fe
选项可以打印输出信息到终端。
如果串口打开失败可以用chmod
为串口赋权限。
sudo chmod 777 /dev/ttyUSB0
调试数据读取
然后可以通过命令行工具cyber_monitor
来查看gnss的消息是否解析到了
cyber_monitor
频率飞了,看来程序改得还是有问题。
分析下感觉像是线程的运行频率,怀疑是raw_stream
的DataSpin()
线程一直在疯狂读取串口。但是读取串口后加延时,效果适得其反。
改了半天,突然想到会不会是一直在解析的循环里没出来,果然在data_parser.cc
文件里,看下ParseRawData()
这个函数的解析逻辑。
1 | void DataParser::ParseRawData(const std::string &msg) { |
原来是收到一帧数据就在反复解析它,给它做如下改动。
1 | void DataParser::ParseRawData(const std::string &msg) { |
然后编译完重新启动,看下cyber_monitor
的内容。
Nice,问题解决!
调试数据解析
然后看下消息内容,timestamp_sec
不对。
在data_parser.cc
文件里,把PublishOdometry()
这个函数的解析做如下修改。
1 | void DataParser::PublishOdometry(const MessagePtr message) { |
还有PublishCorrimu()
函数也做如下修改。
1 | void DataParser::PublishCorrimu(const MessagePtr message) { |
现在消息数据应该正常了,然后有网的话可以通过Apollo的Dreamview
在卫星地图上看下定位数据对不对。
首先在docker环境中通过如下命令启动它。
bash scripts/bootstrap.sh
然后在浏览器打开localhost:8888这个地址应该就能看到Dreamview
的界面。
选择Navigation
mode,就能在左上角看到百度地图提供的定位信息,然后也能看卫星地图。