docs/应用实践/开发调试教程/传感器接入实践/组合惯导接入Apollo.md
Apollo 自动驾驶开放平台主要为园区、教育、低速场景提供完整的解决方案。Apollo 目前虽然在 SLAM 支持上持续成长,但目前主要的场景仍然以高精地图与高精定位基础。目前 Apollo 已经支持华测、导远、博盛尚、星网宇达、Novatel 等品牌旗下的部分组合惯性导航设备。
目前应用于 L4 组自动驾驶的组合惯性导航成本依然较高,产品迭代较频繁,为了帮助厂商更快建立导航设备在在自动驾驶场景中的应用,本指导手册详细说明了 Apollo 组合惯性导航驱动开发、驱动测试、驱动代码贡献的方法。
根据本文指引,以及参考代码,完成驱动开发;
调度、运行代码,确认驱动输内容满足 Apollo 要求。
连接真实设备,运行代码,确认输出信息正确;
录制测试视频、驱动输出信息;
提供测试过程数据、开发者信息到 Apollo 团队;
提交代码到 Github,等待 Apollo 团队审核。
硬件设备进入 Apollo 生态支持清单;
作为贡献者,信息在 Apollo 官网展示。
modules/drivers/gnss下的华测、导远的驱动程序。Fork Apollo代码库:进入 https://github.com/ApolloAuto ,点击左上角 Fork 按钮;
以 novatel、华测、导远、博盛尚驱动为模板,开发新的组合惯导驱动;
通过 cyber tools 查看驱动输出信息;
提交代码,通过评审,合入代码。
驱动代码要求的输出信息和频率要求如下:
| Channel | 格式 | 说明 | 是否必须 | 频率要求 |
|---|---|---|---|---|
| /apollo/sensor/gnss/best_pose | RTK定位信息 | 是 | 不低于1HZ | |
| /apollo/sensor/gnss/corrected_imu | 校正惯导信息 | 是 | 100HZ(上下浮动不超过30%) | |
| /apollo/sensor/gnss/odometry | INS信息 | 是 | 100HZ(上下浮动不超过30%) | |
| /apollo/sensor/gnss/ins_stat | 状态信息 | 是 | 不低于1HZ | |
| /apollo/sensor/gnss/heading | Heading信息 | 否 | 不低于1HZ | |
| /apollo/sensor/gnss/imu | 原始IMU信息 | 否 | 100HZ(上下浮动不超过30%) |
gnss 驱动目录统一放在 apollo 源码的drivers/gnss目录下,结构为:
- conf:# gnss配置,所有厂家使用一份配置
- dag: # dag文件,所有厂家使用一个DAG
- launch: # launch文件,所有厂家使用一个Launch文件
- proto: # 存放conf格式定义,新增gnss需要改到这个proto配置
- parse: # 数据解析代码,新增gnss需要增加一个新的parser类型
- stream: # 数据流读入基础类,支持串口、tcp、udp、can协议,用户通常不需要修改
stream 目录是一个基础库,内置了 can、ntrip、serial、tcp、udp 各种协议支持,每个 stream 需要实现 Connect 和 read 方法,实际运行时会一直调用 read 方法获取数据,写到 parser/parser.h 里面定义的 Parser 类对象的 data_ 中。
parser 中负责各种厂商 gnss 数据解析,新惯导接入需要新增一个 parser 类型,必须继承 Parser 基类,需实现以下函数:
新的 gnss 驱动接入通常需求修改:
在 proto/config.proto 中 Stream.Format 中新增 gnss 类型;
在 parser 路径下实现自己类型的数据解析库:根据您的数据协议参考已有代码实现
在 parser/parser.h 里面的增加您的 CreateParser 函数;
修改 conf/gnss_conf.pb.txt 配置,添加新增 gnss 类型的使用说明,注意需要以注释的形式添加,不要修改默认生效值;
注意:尽量不要修改其他代码,尤其是 parser/data_parser.cc,如必须要修改,请联系 Apollo 团队,否则 PR 不会给予合入。
# 编译
bash apollo.sh build_opt_gpu drivers/gnss
# 修改 modules/drivers/gnss/conf/gnss_conf.pb.txt 中data配置为自己的惯导配置
vim modules/drivers/gnss/conf/gnss_conf.pb.txt
# 运行gnss驱动
mainboard -d /apollo/modules/drivers/gnss/dag/gnss.dag
# 启动cyber_monitor 观察是否正常输出以及频率是否满足上述要求
cyber_monitor
主要观察红框里面的 4 个 channel 频率是否符合要求,并查看里面的位置、时间等字段是否正确。如果您有 apollo 的地图,建议也启动 localization 模块查看车辆位置和地图中位置、朝向是否匹配,并通过加速、减速控制判断加减速度都是和预期一致。