机器人与计算机视觉领域优化库
GTSAM 是面向机器人与计算机视觉领域的开源 C++ 库,依托因子图与贝叶斯网络实现建图与位姿跟踪。该库同时提供 Python、MATLAB 接口,支持多语言调用。借助它,你无需从零开发,就可以搭建精度更高、效率更优的导航、SLAM、惯性测量单元(IMU)数据处理系统。
GTSAM(全称 Georgia Tech Smoothing and Mapping Library)是机器人与计算机视觉领域极具影响力的开源 C++ 状态估计与非线性优化库。
它最初由美国佐治亚理工学院(Georgia Tech)著名的 Frank Dellaert 教授团队(Borg Lab)开发,是解决 SLAM(同步定位与建图)、传感器融合 和 SFM(运动恢复结构) 问题的工业级基石。
1. 它的核心理念:因子图(Factor Graph)传统的状态估计(如卡尔曼滤波 EKF)通常只维护当前状态与协方差,容易丢失历史约束,且对非线性问题容易发散。
GTSAM 的底层范式是因子图(Factor Graph)与贝叶斯网络(Bayes Network):
变量节点(Variables): 你想求解的未知量,例如机器人随时间变化的轨迹位姿(SE(3)SE(3)SE(3))、路标点坐标(3D Landmarks)、IMU 零偏(Bias)等。因子节点(Factors): 传感器观测带来的概率约束,例如激光雷达匹配残差、视觉重投影误差、GPS 位置读数、轮式里程计位移等。求解机制: 将定位与建图问题形式化为一个最大后验概率估计(MAP)问题,通过非线性最小二乘算法(高斯-牛顿法、列文伯格-马夸特 LM、Powell 狗腿法等)在李代数/流形(Manifold)上迭代求解最优状态。
2. 核心功能与杀手级特性李群与流形优化(Manifold Optimization): 原生支持 SO(3)SO(3)SO(3)、SE(3)SE(3)SE(3) 等旋转与位姿的流形运算,无需手动处理奇异性(如欧拉角死锁),求导与更新都在切空间(Tangent Space)完成。IMU 预积分(IMU Preintegration): 实现了 Foster/Carlone 等人提出的著名 IMU 流形预积分算法(包括连续时间积分、协方差传递与 Bias 更新),是现代 VIO(如 VINS-Mono)和 LIO(如 LIO-SAM)最常用的 IMU 处理后端。增量式平滑与建图(iSAM2): 配合 Bayes Tree 数据结构,当有新传感器数据到来时,无需重新优化整条历史轨迹,只需局部更新受影响的子树,实现极高帧率的实时在线 SLAM。跨语言支持: 底层为高效的 C++(支持 Eigen、TBB 多线程加速),同时提供了成熟的 Python 和 MATLAB 绑定(Wrapper),方便快速进行算法原型验证。3. 常见应用场景与代表开源项目领域
常见应用
基于 GTSAM 的著名开源项目
激光 SLAM
激光雷达 + IMU + GPS 多传感器紧耦合融合
LIO-SAM、LeGO-LOAM 后端、FAST-LIO2(常用作后端优化扩展)
视觉 SLAM / VIO
单/双目相机 + IMU 的位姿跟踪与地图构建
视觉里程计紧耦合后端、大规模 Bundle Adjustment (BA)
机器人多源融合
轮速计、UWB、GPS、磁力计的多传感器融合定位
各类移动机器人导航系统定位框架
4. 适合什么时候用它?如果你需要做一个机器人多传感器融合系统(例如同时融合轮速计、IMU、GPS、激光雷达/视觉位姿);如果你在做 SLAM 后端优化,需要高效求解大尺度的非线性最小二乘问题;相比于 Google 的 Ceres Solver(更偏通用的数值优化库),GTSAM 专门针对机器人几何学、流形表示、位姿图与增量优化做了更高级别的语义封装。Github搜索gtsam