过去工作总结#

不太确定具体哪些可能存在潜在的比较能缝的内容,就都写一下吧,正好也对过去干的事做个梳理。

其实也没啥太多的东西,大部分时间都在复现、跑开源、对特定场景毫无泛化价值的目标导向的小小小优化、调包调参。

总体概述#

整体上就是激光雷达SLAM一整套,主要是:

预建图 重定位 感知 规划 决策
FastLio2 ICP+FastLio2,自定义了relocalization模式 CMU terrain_analysis + 2.5D地形分析,能识别出坡道为可通过 Nav2 Theta*+MPPI Behavior Tree + 自定义节点

整个框架的 视频展示

确实像老师说的,建图和重定位最核心的部分其实都是在做点云配准,然后在具体怎么配的更快更好上各种开源算法折腾出来一堆思路

目前能想到比较值得缝的大概也就在建图和重定位这里?

  • 结合点云构建出来的地图共同搭建场景图这种?算是比较经典的多源融合思路了,把视觉语义投射在几何地图上这种,可能会对场景的逻辑结构构建有帮助?

  • 回环检测:纠正视觉里程计,在回环的时候拉正自身位姿偏差和语义标签位置这种,也是经典的多源融合方向,据了解视觉里程计累计偏差好像还挺大的,但没太详细看过不确定有没有什么已经做了的优化

  • 几何纠正模型识别结果:有一个模糊的想法不确定可行性以及有没有人做过,就是视觉图像中看到了镜子或者照片这种,可能会有误识别,但点云实打实的物理距离会告诉你这就是个墙,但感觉也算是比较经典的多源融合思路了可能也不新

  • 长时记忆:3D激光点云在大场景的维护上已经很成熟了,室外都能跑,不确定VLN这边有没有类似的需求,把语义标签贴进体素网格里一起维护之类的

  • 结合点云共同做语义分割?点云信息量太少且数据量也摆在这里,感觉从语义信息上来讲远不如视觉图像,印象中之前看到过一篇做点云->语义的,说实话个人感觉意义有限

具体工作#

建图#

这里其实主要就是跑开源()手搓建图算法这种还是太超过了

介绍一下我了解的主流算法吧(如果可能有用的话

  • FastLio2:非常优越的前端框架,利用了ikd-tree做高效的最近邻搜索,结合了imu预积分做运动畸变补偿,还有两次卡尔曼,整体速度和精度都很不错,回环效果略差,但过于稳定高效的增量更新让人完全可以忽视这一点回环重影

  • Fast-Lio-SAM:在FastLio的基础上加了后端优化,结合了回环检测和闭环优化,速度有所下降,而且疑似反而因为后端优化引入了一些不稳定性,实测下来定位跑飞时有发生

  • PointLio:逐点输出的框架,对高速运动场景有格外的优势,建图效果一般,但用PointLio的里程计来定位效果很不错,但官方最初给的代码效果并没有演示那么震撼,需要做一些额外的优化,对时间同步要求很高

重定位#

基本上重定位算法都是点云配准,要么全程都在配一边配一边纠正map2odom,要么配好初始位姿然后完全信任里程计让他自己跑去

之前做的重定位方案是对FastLio2动刀了,用ICP获得初始位姿之后后续的配准由FastLio2自己完成,主要是基于以下几个考量:

  • ICP占用问题:经典效率和精度不可兼得,参没调好的话占用能飞到100%,准是真准,慢是真慢

  • 建图和重定位其实本质上都在做差不多的事情,也就是点云配准,为什么非要用两套算法呢?毕竟建图实际上就是扫当前帧点云配到此前构建的地图上,然后增量式更新一点点拼出来一个完整的地图,那把target改成先验地图和当前帧进行配准那不就是重定位嘛

  • FastLio2太好用了,拿来主义借用一下这么优秀的框架(

感知#

基本就是CMU terrain_analysis,基于体素网格高程差优化了一点点坡面识别的问题,区分通过性

其实主要还是调参 :)

导航#

Nav2完善的工业框架,一站式解决导航问题(

全局规划测了A*、Dijkstra、Theta*,局部规划测了DWB、TEB、MPPI,最后选了Theta*+MPPI,做了一点点点小小的禁用了MPPI的Z轴,只考虑平面位置不关注转向

然后还是调参 :)

决策#

Behavior Tree,本质上其实就是一个高级一点的if-else。

自定义了一些节点实现特定功能,比如对视觉目标的跟随和自身在地图中的位置判断(用于决定是否要执行某个行为