这篇是接着前文“主流VIO/VSLAM系统改造与工程化落地”和“关于VIO零速更新(ZUPT)与控制三种约束的工程实践”的,有时候想一出是一出,导致写的东西还是太分散了。
要做VINS改造首先要熟悉VSLAM和数学基础那一堆的东西,前文“关于机器人状态估计(4)-成长路径与能力提升”和相关系列已经详述了,团队能力不足的话需要好好学习。深入掌握C++,了解多核体系如CPU+NPU, CPU+DSP, CPU+GPU+NPU,熟悉可见光相机所有特性,熟悉IMU特性(包括常用滤波方法等),熟悉Kalibr,了解部分深度相机特性,粗略了解CUDA。这些都是基础。如果已经有了这些基础,可以往下看。
VINS部分比较简单,前文也大概提到了,这个系统在硬件非常强势的情况下(全局快门+硬件MCU同步对时+室内)是很给力的,新工程也做到了极大鲁棒,收敛了绝大部分可以通过工程化和零速更新ZUPT解决的事项,现在已经做到除了常见的5-6类问题(见ZUPT前文),即使动态障碍物同步遮挡也能鲁棒一小段时间的水准。
第一个缺陷就是只能提供精确的位置姿态,不能建出直观和半稠密地图。
另外一个更大的缺陷就是开销很重,前端Feature tracker的特征提取与匹配的开销很高,在稍微弱一些的嵌入式系统上运行算不过来,A76-4核以下跑640x480分辨率都无法及时跟踪。这样就会导致无法工程化,需要依赖i7后端或者高版本的Nividia-Jetson,算力平台成本很高。同时后端优化的Estimater开销也不小,尤其是在ARM系统上的表现较差。再加上闭环约束,基本在绝大部分嵌入式系统上运行的可能性就没有了。
因为VINS的基础架构正统,代码规范,也比较好维护,我们已经开始了更加深入的改造工作。如果要对其进行工程化,基础思路是对前后端进行大改:
1. 移除RVIZ和Pangolin, 在主系统上只保留位姿和点云数据输出,建立工程版的人机界面。(前文“主流VIO/VSLAM系统改造与工程化落地”已详述)
2. 完成编码输出和使用OSD硬件算子叠点。(前文“主流VIO/VSLAM系统改造与工程化落地”已详述)
3. 拆解所有代码,Review所有涉及重复内存搬运的部分,批量加入指针。这块工作比较繁重,我们也没有做完,基础思路就是这个。最近小组工作太忙,全部做完了再发。
4. VINS-MONO是很依赖传感端硬件的,如果使用的是卷帘快门需要精确掌握曝光时间,并完成MCU硬件同步对时。
5. 建图侧直接放弃依赖V相机建图,加入距离稍大的(0-8米)深度相机,通过位姿松耦合进行同步建图。这块的点云处理用CUDA结合GPU做即可。
6. 针对建图,如果不想按照5来实现有更简单的做法就是加入单点激光(室内),完成栅格矢量地图,建立二维地图的全局先验。室外的话用高德/百度/Google地图切片做全局先验。有能力的话可以和轮速计或者GPS/RTK耦合一下,或者用轮速计+IMU做个简单的DR(卡尔曼滤波),再耦合一下。