# 过去工作总结

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

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

## 总体概述

整体上就是激光雷达SLAM一整套，主要是：

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

整个框架的 [视频展示](https://www.bilibili.com/video/BV1hEdsYAENt/?share_source=copy_web&vd_source=39b6d1d3c9ea7d9c3748b1b07ca91aeb)

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

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

- **结合点云构建出来的地图共同搭建场景图这种**？算是比较经典的多源融合思路了，把视觉语义投射在几何地图上这种，可能会对场景的逻辑结构构建有帮助？
- **回环检测**：纠正视觉里程计，在回环的时候拉正自身位姿偏差和语义标签位置这种，也是经典的多源融合方向，据了解视觉里程计累计偏差好像还挺大的，但没太详细看过不确定有没有什么已经做了的优化
- **几何纠正模型识别结果**：有一个模糊的想法不确定可行性以及有没有人做过，就是视觉图像中看到了镜子或者照片这种，可能会有误识别，但点云实打实的物理距离会告诉你这就是个墙，但感觉也算是比较经典的多源融合思路了可能也不新
- **长时记忆**：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。

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



