IMU预积分-旋转残差求雅可比

目录

[1. 残差定义](#1. 残差定义)

[2. 雅可比推导](#2. 雅可比推导)

[3. 右乘BCH近似雅可比的逆的实现](#3. 右乘BCH近似雅可比的逆的实现)


1. 残差定义

根据IMU预积分(VINS)中的推导,帧间imu积分项的残差定义如下:

其中,旋转残差项的形式来源为:

中的q代表四元数。假设为旋转误差对应的旋转向量,则:

等于虚部的2倍:

IMU预积分(VINS)中以四元数 的形式对残差的雅可比进行了推导,本篇笔记该用以旋转矩阵R李群)的形式推导该残差对下述扰动量的雅可比:

推导过程会用到李群的BCH公式与伴随性质:

(1)BCH公式

其中,分别代表两个旋转向量(李代数),代表对李代数进行指数映射得到李群(旋转矩阵),分别代表左乘BCH近似雅可比的逆和右乘BCH近似雅可比的逆。

(2)伴随

其中,代表旋转矩阵。

2. 雅可比推导

**求导过程采用右乘扰动模型,因为误差(扰动)定义在载体b系。**雅可比的推导过程如下:

1. 对 i 时刻无关量求导

2. 对 i 时刻旋转误差向量求导

3. 对 i 时刻陀螺仪bias误差求导

4. 对 j 时刻无关量求导

5. 对 j 时刻旋转误差向量求导

3. 右乘BCH近似雅可比的逆的实现

右雅可比

其中,代表一个旋转向量,代表将旋转向量转为反对称矩阵,代表旋转角的大小(旋转向量的模长)。

右雅可比的逆

代码实现:

cpp 复制代码
#include <Eigen/Core>
#include <Eigen/Geometry>

/**
 * @brief 计算 SO(3) 右雅可比的逆 J_r^{-1}(phi)
 * @param phi 旋转向量 (李代数 so3)
 * @return 3x3 的右雅可比逆矩阵
 */
Eigen::Matrix3d RightJacobianInv(const Eigen::Vector3d& phi) {
    const double theta = phi.norm();
    Eigen::Matrix3d I = Eigen::Matrix3d::Identity();
    
    // 1. 计算反对称矩阵 phi^
    Eigen::Matrix3d phi_hat;
    phi_hat << 0, -phi(2), phi(1),
               phi(2), 0, -phi(0),
               -phi(1), phi(0), 0;

    // 2. 根据角度大小选择计算方式
    if (theta < 1e-6) {
        // 小角度近似:J_r^{-1} ≈ I + 0.5 * phi^
        return I + 0.5 * phi_hat;
    } else {
        // 正常角度:使用闭式公式
        double theta2 = theta * theta;
        double sin_theta = sin(theta);
        double cos_theta = cos(theta);

        // 计算系数: [1/theta^2 - (1+cos(theta))/(2*theta*sin(theta))]
        double coeff = (1.0 / theta2) - (1.0 + cos_theta) / (2.0 * theta * sin_theta);

        // 组合公式: I + 0.5*phi^ + coeff * (phi^)^2
        return I + 0.5 * phi_hat + coeff * phi_hat * phi_hat;
    }
}

代码中对数值稳定性进行了处理。当旋转角很小,趋近于0时,直接使用上面的闭式公式会导致分母为 0 或数值不稳定。此时需要使用泰勒展开近似

相关推荐
酸梅果茶10 天前
【7】lightning_lm项目-LIO 前端 -IVox 局部地图
前端·slam
a11177610 天前
机器人导航入门指南(从 0 到 1)
笔记·学习·slam
酸梅果茶11 天前
【6】lightning_lm项目-LIO 前端 -点云预处理模块
前端·slam
酸梅果茶11 天前
【2】lightning_lm项目-阶段1-基础理解
slam
daad77713 天前
记录ros2的slam环境搭建搭配思岚C1激光雷达
slam
消失的旧时光-194314 天前
第七篇:RTK + 地图 + 机器人:完整定位系统架构解析
android·系统架构·机器人·imu·rtk
bing_feilong17 天前
FAST_LIO2(2): 运行记录
机器学习·slam
大江东去浪淘尽千古风流人物19 天前
【SLAM】slam高动态位姿估计全链路拆解
算法·面试·职场和发展·视觉里程计·slam·vio·大疆
Agilex松灵机器人20 天前
UMR × NAVIS:移动机器人行业级通用一体化底盘与3D导航解决方案
人工智能·3d·机器人·ros·slam·vla·松灵机器人
a11177621 天前
SLAM 如何一步步迭代到 SE(3)
slam