视觉SLAM十四讲——第四讲李群与李代数

@ 《视觉SLAM十四讲》知识点与习题

《视觉SLAM十四讲》第四讲知识点整理+习题

正在学习SLAM相关知识,将一些关键点及时记录下来。

知识点整理

本讲主要解决**什么样的相机位姿最符合当前观测数据**问题。一种典型的方法是把它构建成一个优化问题,求解最优的R,t,使得误差最小化。通过李群-李代数间的转换关系,可以将位姿估计变成无约束的优化问题,简化求解方式

  1. :一种集合加上一种运算的代数结构。满足以下条件“封结幺逆”
  2. 特殊正交群SO(3): 三维空间的旋转矩阵,是一个正交阵,且行列式为1,即旋转矩阵群
  3. 特殊欧氏群SE(3): 包含三维空间旋转矩阵R,平移向量t,0^T 和1的四维空间变换矩阵。即3维欧式变换群
  4. 李群: 具有连续(光滑)性质的群。每个李群都有对应的李代数
  5. 反对称矩阵: A = -A_T。对于一个向量,可以将其变成反对称矩阵;对于任意反对称矩阵,亦可以找到一个与之对应的向量
    在这里插入图片描述
  6. Φ叫做:在SO(3)原点附近的正切空间。R(t) = exp(Φ^ t),这里Φ是指Φ0. 其中^是指将Φ0向量变成其对应的反对称矩阵的操作。所以,每对旋转矩阵求一次导数,只需要左侧乘以Φ(t0)即可
    在这里插入图片描述
### 关于 SLAM李群代数的代码实现 在《视觉SLAM十四》中提到,为了处理旋转平移操作中的微分问题,引入了李群代数的概念。由于李群上的运算仅限于乘法而缺乏加法规则,这使得在其上定义导数变得困难[^3]。 针对这一挑战,在实际编程实践中通常会通过指数映射将李群转换至其对应的代数空间内进行计算,因为后者是一个线性的向量空间,允许执行诸如求导这样的操作。下面给出一段简单的 Python 实现例子用于展示如何利用 Sophus 库来进行 SE(3) 的基本操作: ```python import sophus as sp from scipy.spatial.transform import Rotation as R def se3_exp_map(w,u): """Compute the exponential map from Lie algebra to Lie group. Args: w (numpy.ndarray): A 3D vector representing angular velocity. u (numpy.ndarray): A 3D vector representing linear velocity. Returns: sophus.SE3: An element of SE(3). """ omega_hat = sp.so3.exp(sp.Vector3d(*w)) v = sp.Vector3d(*u) return sp.SE3(omega_hat, v) if __name__ == "__main__": # Example usage with random values for demonstration purposes only rotation_velocity = [0.1, 0.2, 0.3] translation_velocity = [0.4, 0.5, 0.6] transformation_matrix = se3_exp_map(rotation_velocity, translation_velocity) print(transformation_matrix.matrix()) ``` 上述代码片段展示了怎样创建一个 `sophus` 类型的对象并打印出相应的变换矩阵。这里使用的是 Sophus 这一专门设计用来高效表示 SO(3)/SE(3) 及其对应代数 so(3)/se(3) 的 C++/Python 库[^4]。 对于更复杂的场景比如轨迹绘制,则可能涉及到读取外部文件以及调用图形库如 Pangolin 来可视化结果。这部分工作往往依赖具体的应用需求个人偏好来决定具体的实施方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值