1. 面向对象
1.1. Apollo
- 低版本: 面向封闭场所的无人驾驶
- 高版本: 面向城市区域的无人驾驶为主
1.2. AutoWare 1.0
- 主要面向封闭区域
2. 项目架构
2.1. 基本架构
2.1.1. Apollo(完善但复杂)
2.1.2. AutoWare1.0(简化但Main)
3. 功能实现
3.1. Localization
3.1.1. 技术简介
3.1.1.1. Apollo中的定位技术
- RTK模式: 为了方便调试,Apollo自行实现了一套RTK解算,只使用RTK的定位信息。
现在惯导芯片一般都会配一个板卡(NovAtel也卖这样的板卡),直接集成了RTK的定位结果。为什么我们还需要自己开发GNSS-RTK呢? 从系统的角度考虑,需要每个子模块都是可控的,举一个简单的例子,当给出一个定位结果偏了,但给出的方差很小,也就是置信度很高。我们是没办法知道原因的。
MSF(Multiple Sensor Fusion)模式: 采用Kalman滤波器,对位置、姿态和速度进行融合。
- IMU: 惯导解算
- LIDAR: NDT匹配算法
- GPS: RTK解算
使用松耦合的方式把惯性导航解算、GNSS定位、点云定位三个子模块融合在一起。(松耦合and紧耦合: 松耦合的数据只有位置、速度、姿态,紧耦合会包括GNSS的导航参数、定位中的伪距、距离变化等。)
使用了一个误差卡尔曼滤波器,惯性导航解算的结果用于kalman滤波器的时间更新,也就是预测;而GNSS、点云定位结果用于kalman滤波器的量测更新
3.1.1.2. Autoware(ROS)中的定位技术
- 基于3D Lidar的定位: 采用NDT点云配准算法进行定位,分别实现了
- 基于PCL的NDT算法
- 自行实现的NDT算法
- 改进的NDT算法:NDT-TKU
- GNSS: 借助ROS社区,直接使用ROS开源的GNSS驱动,读取GPS-RTK的定位信息
参考文档
3.1.2. 技术成熟度
3.1.2.1. Apollo
Apollo实现的RTK解算、MSF传感器融合定位,都有成熟的理论指导,成熟度较高。并且从Apollo最近的几个版本来看,定位模块的改动不大。
3.1.2.2. Autoware
Autoware采用的NDT定位算法是2009年的一篇博士论文,目前仍被广泛应用,技术相对成熟,并且名古屋大学教授对此进行了改进,即NDT-TKU算法
3.1.3. 技术前沿性
从定位技术的前沿性来看,Apollo比Autoware领先,并且更加完善
3.1.3.1. Apollo
从目前现有的代码来看,Apollo的RTK、MSF定位都是基于传统技术如:
- RTK解算
- GNSS/IMU解算
- NDT点云匹配
- ESKF误差卡尔曼
的堆叠,但是实际上Apollo提出了许多新的算法,如基于深度学习的点云匹配,基于深度学习的定位融合,虽然目前没有直接在Apollo代码中实现,不排除后续升级版本对定位模块的改进。
3.1.3.2. Autoware
Autoware主要面向封闭环境,因此其认为,使用3D Lidar SLAM足以解决封闭环境的定位问题,而没有像Apollo那样实现GPS/IMU的融合解算,只是使用了EKF来对3D激光点云定位和GPS定位进行了融合,其GPS定位信息转换模块
值得学习一下。
3.1.4. 源码开放度
3.1.4.1. Apollo
Apollo虽说开源,但是核心部分还是抓的死死的,其中包括
- rtk解算
gnss_solver
- 点云定位
lidar_locator
- 惯导解算
sins.h
证据如下:
在modules/localization/msf/local_integ/localization_gnss_process.h
文件中,引用了
1 |
在modules/localization/msf/local_integ/localization_lidar.h
文件中,引用了
1 |
在modules/localization/msf/local_integ/localization_integ_process.h
文件中,引用了
1 |
当然还有其他一些,上面引用的文件在源码中是找不到其影子的,因为这些头文件打包在Apollo的docker镜像中,至于对应CPP
实现,那是不会给你哒,放心好了,早已编译成.so
文件了
1 | liblocalization_msf.so -> liblocalization_msf.so.1 |
关于这部分的内容,更加具体的可参见文档:
3.1.4.2. Autoware
Autoware毕竟是基金组织,也没什么人投钱,基本上实现了的都开了
- 点云定位: NDT算法,有pcl版本的,也有自行实现版本的,有cpu版本的也有gpu版本的,最后,还有改进版本的
- GNSS: 直接使用ROS社区开源驱动
证据如下:
3.1.5. 可移植性
3.1.5.1. Apollo
向内移植
Apollo实现了一整套的底层接口、驱动,向内移植定位算法理论上可行。
前提是:
- 掌握Apollo的关于
Localization
协议栈,数据内容以及格式 - 掌握相关底层设备的消息回调处理流程
- 你得自己有算法
- 掌握Apollo的关于
向外移植
向外移植也不是不可以,但核心技术并不掌握在手中,谁会干这种事呢?
前提工作:
- 掌握Apollo的关于
Localization
协议栈,API接口,数据内容以及格式 - 关于
Localization
部分所有输入输出关系全部掌握
- 掌握Apollo的关于
3.1.5.2. Autoware
完全基于ROS,移植性不言而喻。
3.1.6. 总结
总结就是,还是要有自己的核心算法呀。