gtsam 原理学习

gtsam一个高效的后端图优化库。

  1. 基础知识

先要理解三个概念,因子图、贝叶斯网络、贝叶斯树。

  1. 1因子图

具有多变量的全局函数因子分解,得到几个局部函数的乘积,以此为基础得到的一个双向图叫做因子图.


用图表示


其对应因子图为:
顶点:变量节点或函数节点,边线表示它们之间的函数关系。

因子图,无向图,与雅克比矩阵对应。

马尔科夫随机场,与信息矩阵对应。

  1. 2贝叶斯网络

贝叶斯网络(Bayesian network),又称信念网络(Belief Network),或有向无环图模型(directed acyclic graphical model),是一种概率图模型,于1985年由Judea Pearl首先提出。它是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓朴结构是一个有向无环图(DAG)。

因子图通过消元算法,生成贝叶斯网络和平方根信息矩阵R。

灰色的为被消去的变量,红色为新产生的因子。 消元顺序为l1、l2、x1、x2、x3。

 这里用的方法为多波前乔里斯基分解,其实就是QR分解加舒尔补。

    消元顺序l1、l2、x1、x2、x3。

R矩阵可以增量分解,可以很容易进行边缘化。

固定滞后平滑器,只维护最后N个状态,其它的都边缘化掉。

  1. 3 贝叶斯树

同时消元的过程也伴随着贝叶斯树的生成。贝叶斯树的生成原理,请查下如下博客https://blog.youkuaiyun.com/deepbodhi/article/details/119877754。

       非线性滤波与平滑:每添加一个因子,贝叶斯树只需要部分需要更新(增量更新)。当前端新加入一个观察或者关键帧时,产生一个新的因子f(xi, xj),首先找到所有受影响的团,为起点是包含xi或 xj的团,终点是根团。含xi或 xj的团以下的支树,以及任何不包含含xi或 xj的支树不受影响。

    2 工作原理

        图优化,维护的是一个由节点和边组成的连接图。当前端新加入一个观察或者关键帧时,向图中添加一个边、或一个边和一个节点。此时图中需要判断是否产生了新的回环,如果产生,则构建最小二乘法,优化此回环。但此回环中的节点可能也处在别的环路中,因此需要将图中所有回环都进行一次优化。计算量可观。

        gtsam维护的一颗贝叶斯树。当前端新加入一个观察或者关键帧时,产生一个新的因子f(xi, xj),首先找到所有受影响的团,为起点是包含xi或 xj的团,终点是根团。含xi或 xj的团以下的支树,以及任何不包含含xi或 xj的支树不受影响。

        然后更新贝叶斯树,将树中受影响的部分转换回因子图,将新的因子添加进去。再将这些临时因子图通过消元算法重新消元,生产成新的贝叶斯树,且之前没有受影响的支树也可以重新添加回去。

         里程计添加关键帧时,回环添加新的观测时,不区分,一样进行上面的处理找到贝叶斯树中需要更新的部分。然后重新因子化,添加新的因子,再消元。消元的过程产生平方根信息矩阵,求解更新量。但不是每添加一个因子都需要进行上述过程,在新加因子少时,可以用R矩阵的增量分解方法直接求解更新量。固定滞后平滑滤波,感觉对里程计添加顺序节点很有用。

        求解出的更新量,如要更新到每个节点的位姿吗?在每一个团上,我们都可以检测变量估计之间的差值,解的更新向下传播,直到差值小于一定的阈值,传播才停止。

     3. 部分细节

      3.1   消元顺序

近似最小度算法。度是指图中节点连接边的数量。最小度算法,指消元优先消去连接边最少的节点。这种方法,可以尽量减少边的填充(消元过程中相互独立的节点产生新的依赖)。

同时为了保证未来更新贝叶斯树时,受影响的部分尽量少,强制将最近访问的节点放到靠近尾部的地方即根团。具体原理请阅读论文《An_Approximate_Minimum_Degree_Ordering_Algorithm》。

     3.2   整体优化和增量优化

    整体优化和增量优化切换,固定N步,就整体优化一次。

### 关于 LIO-SLAM 和 GTSAM 的使用教程及常见问题解决方案 #### LIO-SLAM 基础概念与安装指南 LIO-SLAM 是一种紧耦合激光雷达惯性里程计同步定位与建图方法,旨在提供高精度的三维地图构建和实时定位功能。对于新手而言,在理解并掌握该系统的原理之后再进行实际操作会更加顺利[^1]。 为了成功部署 LIO-SLAM,建议按照官方文档中的说明完成依赖项安装以及源码编译过程。通常情况下,这涉及到设置 ROS 工作空间、克隆仓库到指定位置,并执行 catkin_make 或 colcon build 来构建整个工程。 ```bash cd ~/catkin_ws/src/ git clone https://github.com/TixiaoShan/LIO-SAM.git cd .. colcon build --symlink-install source devel/setup.bash ``` #### 集成GTSAM库实现更优性能表现 GTSAM (Georgia Tech Smoothing and Mapping Library) 提供了一套强大的工具集用于解决非线性最小二乘估计等问题,在 SLAM 应用中有广泛的应用场景。当希望增强 LIO-SLAM 中的状态估计准确性时,可以通过引入 GTSAM 实现更为精确的结果计算。 具体来说,可以在原有基础上添加对 GTSAM 的支持,修改 CMakeLists.txt 文件来链接相应的头文件路径和库目录;同时调整代码逻辑部分以适应新的求解器接口调用方式: ```cmake find_package(gtsam REQUIRED) include_directories(${GTSAM_INCLUDE_DIRS}) target_link_libraries(your_target_name ${GTSAM_LIBRARIES}) ``` 此外还需要注意版本兼容性和 API 变化带来的影响,确保所使用的 GTSAM 版本与现有项目相匹配。 #### 解决常见的错误提示信息 在实践过程中难免会出现各种各样的报错情况,这里列举了一些典型的例子及其对应的排查思路: - **缺少必要的依赖包**:如果遇到找不到特定函数定义或者类声明的情况,则可能是由于未正确安装某些第三方库所致。此时应仔细核对 README.md 文档里提到的所有前置条件是否均已满足。 - **传感器数据不同步**:当发现生成的地图存在明显偏差或是轨迹漂移严重的时候,可能是因为 IMU 数据与其他感知设备之间的时间戳差异过大造成的。对此可尝试调节参数配置使得两者尽可能保持一致。 - **内存泄漏或溢出异常**:长时间运行后程序崩溃往往是由资源管理不当引起的。定期检查是否有对象忘记释放等情况发生,并考虑采用智能指针等方式简化生命周期控制机制。 #### 结论 综上所述,针对 lio_slam_gtsam 技术栈的学习不仅需要扎实的基础理论支撑,同时也离不开丰富的实战经验积累。面对可能出现的各种挑战,持续关注社区动态和技术发展前沿有助于及时获取有效的帮助和支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值