学习IMU预积分(1)李群

本文介绍了IMU预积分的学习背景,主要聚焦于李群和李代数的基础概念。文章阐述了群的基本性质,如封闭性、结合律、幺元和逆元素,并通过旋转矩阵与矩阵乘法、整数与算术加法举例说明。接着,讨论了李群,特别是SLAM中常见的SO(3)和SE(3),它们分别表示三维空间中的旋转和刚体运动。下一部分将探讨李代数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:目前开始学习IMU的预积分与Christian Forster 与其组员的论文:IMU Preintegration on Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation。

 

这文章涉及到基础知识李群与李代数,此文章先铺垫一下基础知识,大部分东西都从《视觉SLAM十四讲》搬运过来。

 

1.什么是群

在普通的算术中,常数a,b 相乘,相加,相减, 运算结果仍拥有同样属性,即常数。但是有一些群体它们只有一种运算使得结果仍然保有同样属性。例如,旋转矩阵相加的结果不拥有旋转矩阵的属性,即正交性,但旋转矩阵相乘可以得到另一个旋转矩阵。

为了方便,我们把一些群体与一种运算给绑定在一起,并且称之为群。

所以,群=一个集合+一个运算。用数学去描述的话,我们可以这样描述:G = (A, * )G = ( A, * )。当然这里的星号不一定指的是乘号,也可以是任意一种运算。

除此之外,一个群的运算必须满足以下性质:

1. 封闭性:

### LIO-SAM 中 IMU 预积分推导过程及原理 #### 1. IMU 测量模型 IMU 提供加速度 \( \mathbf{a}_k \) 和角速度 \( \boldsymbol{\omega}_k \),这些数据可以用来估算物体的姿态、位置和速度。假设在时间戳 \( t_k \) 处有 IMU 的测量值,则状态向量表示为: \[ \mathbf{x}_{t_k} = [\mathbf{p}_{t_k}, \mathbf{v}_{t_k}, \mathbf{q}_{t_k}] \] 其中: - \( \mathbf{p}_{t_k} \) 是位置, - \( \mathbf{v}_{t_k} \) 是速度, - \( \mathbf{q}_{t_k} \) 是四元数形式的姿态。 #### 2. 连续时间下的动力学方程 连续时间内,姿态、速度和位置的变化由以下微分方程描述[^1]: \[ \dot{\mathbf{q}}(t) = \frac{1}{2}\mathbf{q}(t)\otimes[\boldsymbol{\omega}(t)]_\times, \\ \dot{\mathbf{v}}(t) = \mathbf{R}(\mathbf{q}) (\mathbf{a}(t)-\mathbf{g}), \\ \dot{\mathbf{p}}(t) = \mathbf{v}(t). \] #### 3. 离散化处理 为了便于数值计算,在离散的时间间隔内近似上述微分方程。设从时刻 \( t_j \) 到 \( t_{j+1} \),则有: \[ \Delta t = t_{j+1}-t_j, \] \[ \mathbf{q}_{j+1} = \mathbf{q}_j \oplus \int^{t_{j+1}}_{t_j} \frac{1}{2}\mathbf{q}(t)\otimes[\boldsymbol{\omega}(t)]_\times dt, \] \[ \mathbf{v}_{j+1} = \mathbf{v}_j + \int^{t_{j+1}}_{t_j} \mathbf{R}(\mathbf{q})(\mathbf{a}(t)-\mathbf{g})dt, \] \[ \mathbf{p}_{j+1} = \mathbf{p}_j + \int^{t_{j+1}}_{t_j} \mathbf{v}(t)dt. \] #### 4. 预积分定义 预积分是指在一个时间段内的累积效应。对于 IMU 来说,就是在这个时间段内所有测量值得累加效果。具体来说,如果已知初始条件 \( \mathbf{x}_0=[\mathbf{p}_0,\mathbf{v}_0,\mathbf{q}_0] \),那么可以通过下面的方式获得新的状态估计\( \mathbf{x}_n \)[^2]: \[ \delta \mathbf{x}=f(\mathbf{x}_0;\mathcal{M}), \] 这里的 \( f() \) 表示基于 IMU 测量序列 \( \mathcal{M}=\left\{\mathbf{m}_i|i=1,...,N\right\} \) 对应的状态转移函数;而 \( \delta \mathbf{x} \) 就是我们所说的“预积分”。 #### 5. 实现细节 实际应用中会涉及到噪声建模以及如何高效地存储并利用这些预积分数值来减少重复运算等问题。通常采用李群理论简化表达式,并引入零偏项以补偿传感器误差的影响[^3]。 ```cpp // C++ code snippet showing how to integrate IMU measurements using pre-integration theory void Integrate(const Vector3d &acc, const Vector3d &gyr, double delta_t){ // Update orientation quaternion with angular velocity measurement Quaterniond dq = DeltaQ(gyr * delta_t); q_.normalize(); // Compute relative rotation matrix from current attitude estimate Matrix3d R_wb = q_.toRotationMatrix(); // Propagate linear acceleration into velocity change considering gravity compensation v_ += (R_wb * acc - g_) * delta_t; // Accumulate position changes based on updated velocities p_ += v_ * delta_t; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值