GTSAM核心概念解析:流形、群与向量空间
前言
在机器人学、计算机视觉和传感器融合领域,GTSAM(Georgia Tech Smoothing and Mapping)是一个强大的因子图优化库。理解GTSAM的核心概念对于有效使用这个库至关重要。本文将深入解析GTSAM中的三大核心数学概念:流形(Manifold)、群(Group)和向量空间(Vector Space),以及它们之间的关系和实现方式。
流形(Manifold)概念
流形的基本理解
在GTSAM中,流形是优化连续类型的基础概念。从数学角度看,流形是一种可以在每一点局部近似为向量空间(称为切空间)的连续空间。想象地球表面:虽然整体是弯曲的,但在每个点附近,我们都可以用平面地图(切空间)来近似表示。
GTSAM中的流形实现
在GTSAM中,所有类型的属性和操作都通过模板特化gtsam::traits
结构体来定义。流形概念要求定义以下内容:
-
维度信息:
dimension
:表示流形的维度n,可以是编译时常量或运行时确定(设为-1)
-
类型定义:
TangentVector
:切空间中的向量类型,通常是Eigen::Matrix<double,n,1>
ChartJacobian
:可选雅可比矩阵类型ManifoldType
:指向自身类型的指针structure_category
:定义类型满足哪些要求的标签
-
关键操作:
Local(p,q)
:将流形上的点q映射到点p的切空间(类似于q-p)Retract(p,v)
:将切空间中的向量v映射回流形(类似于p+v)
-
不变性要求:
Retract(p, Local(p,q)) == q
Local(p, Retract(p, v)) == v
流形分类
GTSAM将流形分为几个层次,每个层次有不同的要求:
- 基础流形(manifold_tag):仅需满足上述基本要求
- 群(group_tag):额外满足群的要求
- 李群(lie_group_tag):满足流形和群的要求,并额外满足李群的要求
- 向量空间(vector_space_tag):满足所有要求,且操作简化为向量加减
群(Group)概念
群的基本性质
群是代数学中的基本概念,具有以下性质:
- 封闭性:群运算结果仍在群内
- 结合律:群运算满足结合律
- 单位元:存在单位元素
- 逆元:每个元素都有逆元
GTSAM中的群实现
在GTSAM中,群概念要求定义以下内容:
-
基本操作:
Compose(p,q)
:群元素的组合运算Inverse(p)
:求逆运算Between(p,q)
:计算p到q的相对变换
-
静态成员:
Identity
:群的单位元素
-
群运算类型:
group_multiplicative_tag
:乘法运算语法group_additive_tag
:加法运算语法
不变性要求
Compose(p,Inverse(p)) == Identity
Compose(p,Between(p,q)) == q
Between(p,q) == Compose(Inverse(p),q)
李群(Lie Group)概念
李群的双重性质
李群既是流形又是群,因此需要同时满足两者的要求。此外,李群还需要能够计算组合和逆运算的导数。
额外要求
-
带导数的操作:
Compose(p,q,Hp,Hq)
:带雅可比矩阵的组合运算Inverse(p,Hp)
:带雅可比矩阵的逆运算Between(p,q,Hp,Hq)
:带雅可比矩阵的相对变换
-
指数映射和对数映射:
Logmap(p,Hp)
:对数映射(流形→切空间)Expmap(v,Hv)
:指数映射(切空间→流形)
实现辅助
GTSAM提供了LieGroup
CRTP辅助类,可以自动生成部分李群方法。使用该类需要实现:
- 运算符
*
:实现群运算 inverse
:实现群逆运算AdjointMap
:根据群元素映射切向量Expmap/Logmap
:指数映射及其逆ChartAtOrigin
:定义在原点处的Retract/Local操作
向量空间(Vector Space)概念
简化特性
向量空间本质上是流形,但操作可以简化为向量加减:
Identity == 0
Inverse(p) == -p
Compose(p,q) == p+q
Between(p,q) == q-p
Local(q) == p-q
Retract(v) == p+v
GTSAM实现
GTSAM提供了VectorSpace
超类来实现这些特性。典型的向量空间类型包括:
Matrix
和Vector
- 任何固定或动态的Eigen矩阵
Point2
和Point3
可测试性(Testable)概念
单元测试基础
GTSAM中的单元测试依赖于两个基本函数:
Print(p,s)
:打印类型实例,可选带字符串前缀Equals(p,q,tol)
:比较两个实例是否相等,可选带容差
实现机制
特性(Traits)系统
GTSAM使用特性系统来关联类型与概念,类似于Eigen或STL的风格。关键点包括:
- 类型命名:GTSAM类型以大写字母开头,如
gtsam::Point2
- 概念模型:这些类型是TESTABLE、MANIFOLD、GROUP、LIE_GROUP和VECTOR_SPACE概念的模型
- 内部类型:对于GTSAM类型,关联类型可以作为内部类型定义,而不必总是使用特性
概念检查
GTSAM使用Boost风格的概念检查来验证类型是否满足特定概念,例如:
GTSAM_CONCEPT_ASSERT(IsVectorSpace<Point2>)
未来概念展望
群作用(Group Action)
群可以作用于另一个空间,例如循环群可以旋转2D向量。GTSAM计划支持以下操作:
Act(g,p)
:群元素g作用于空间元素pAct(g,p,Hp)
:当作用空间是流形时,提供关于p的雅可比矩阵
李群作用(Lie Group Action)
当李群作用于空间时,需要考虑两个导数:
- 关于空间元素的导数(通常简单,如旋转矩阵)
- 关于群元素的导数(通常更复杂)
结语
理解GTSAM中的这些核心概念对于有效使用该库至关重要。流形提供了优化的数学基础,群概念支持变换的组合,而向量空间则简化了线性情况下的操作。这些抽象概念使得GTSAM能够统一处理各种几何类型,从简单的2D点到复杂的3D刚体变换。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考