news 2026/5/5 0:20:33

FAST-LIO中的‘广义加法’boxplus:为什么以及如何在流形上更新状态?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FAST-LIO中的‘广义加法’boxplus:为什么以及如何在流形上更新状态?

FAST-LIO中的流形优化:为什么需要广义加法boxplus?

在SLAM和状态估计领域,我们经常需要处理旋转和平移的组合操作。对于平移部分,简单的向量加法就能满足需求;但当涉及到旋转时,事情就变得复杂起来。FAST-LIO作为目前最先进的激光惯性里程计系统之一,采用了一种称为"广义加法"(boxplus)的操作来处理流形上的状态更新。这种看似简单的数学工具背后,隐藏着深刻的几何原理。

1. 欧几里得空间与流形的本质区别

我们熟悉的向量空间(如R³)具有平坦的几何结构,两点之间可以用直线连接,向量加法具有直观的几何意义。但在SO(3)旋转群这样的流形上,情况完全不同:

  • 非交换性:旋转操作的顺序会影响最终结果,这与欧几里得空间中的向量加法交换律形成鲜明对比
  • 局部线性,全局非线性:在小范围内,流形可以近似为线性空间,但整体上是非线性的
  • 测地距离:流形上两点之间的最短路径不是直线,而是沿着曲面行走的测地线
// 欧几里得空间中的向量加法 Eigen::Vector3d v1(1.0, 0.0, 0.0); Eigen::Vector3d v2(0.0, 1.0, 0.0); Eigen::Vector3d v_sum = v1 + v2; // 简单直接相加 // 流形上的"加法"操作 Sophus::SO3d R1 = Sophus::SO3d::exp(Eigen::Vector3d(0.1, 0, 0)); Sophus::SO3d R2 = Sophus::SO3d::exp(Eigen::Vector3d(0, 0.2, 0)); Sophus::SO3d R_composed = R1 * R2; // 使用矩阵乘法而非加法

2. boxplus操作的数学内涵

FAST-LIO中的boxplus操作实际上定义了一个局部坐标系全局流形之间的映射关系:

操作类型数学表示物理意义
boxplusx ⊞ ξ = x ∘ Exp(ξ)在流形x点处施加局部扰动ξ
boxminusy ⊟ x = Log(x⁻¹ ∘ y)计算流形上两点间的局部坐标差

其中:

  • Exp是指数映射,将李代数元素映射到李群
  • Log是对数映射,将李群元素映射回李代数
  • 表示流形上的组合操作(如矩阵乘法)
// FAST-LIO中的boxplus实现示例 state_ikfom boxplus(state_ikfom x, Eigen::Matrix<double, 24, 1> f_) { state_ikfom x_r; x_r.pos = x.pos + f_.block<3, 1>(0, 0); // 平移部分直接相加 x_r.rot = x.rot * Sophus::SO3::exp(f_.block<3, 1>(3, 0)); // 旋转部分使用指数映射 // ... 其他状态变量的更新 return x_r; }

3. 传统EKF与基于流形的IKFAM对比

传统扩展卡尔曼滤波(EKF)在处理旋转时通常采用最小参数化表示(如欧拉角),这会引入奇异性问题。FAST-LIO采用的IKFAM(Invariant Kalman Filter on Manifolds)方法从根本上解决了这些问题:

EKF的局限性

  • 使用欧拉角或轴角表示时,雅可比矩阵在奇异点附近变得病态
  • 状态更新后的旋转矩阵可能不再满足正交性约束
  • 协方差传播难以保持旋转的几何特性

IKFAM的优势

  • 始终在切空间(李代数)中进行误差状态更新
  • 使用指数映射保证更新后的旋转矩阵仍在SO(3)上
  • 协方差传播更符合流形的几何结构
  • 避免了参数化奇异性的问题
// 传统EKF与IKFAM状态更新对比 void updateTraditionalEKF(State &x, const Eigen::VectorXd &dx) { x.position += dx.segment<3>(0); Eigen::Vector3d dtheta = dx.segment<3>(3); x.rotation = x.rotation * angleAxisToMatrix(dtheta); // 可能破坏旋转矩阵性质 } void updateIKFAM(state_ikfom &x, const Eigen::VectorXd &xi) { x = boxplus(x, xi); // 保证旋转矩阵始终在SO(3)上 }

4. 实际应用中的关键实现细节

在FAST-LIO的具体实现中,boxplus操作需要特别注意以下几个关键点:

  1. 切空间的一致性

    • 确保所有扰动都在同一切空间中处理
    • 使用右扰动或左扰动模型要保持一致
  2. 小角度近似

    • 当扰动很小时,指数映射可以简化为:
      Exp(ξ) ≈ I + [ξ]× + 0.5[ξ]ײ
    • 这可以显著减少计算量
  3. 协方差的处理

    • 误差状态协方差始终定义在切空间中
    • 状态更新后需要重新线性化
// 协方差传播的关键代码段 void predict(double &dt, Eigen::Matrix<double, 12, 12> &Q, const input_ikfom &i_in) { Eigen::Matrix<double, 24, 1> f_ = get_f(x_, i_in); Eigen::Matrix<double, 24, 24> f_x_ = df_dx(x_, i_in); Eigen::Matrix<double, 24, 12> f_w_ = df_dw(x_, i_in); x_ = boxplus(x_, f_ * dt); // 状态传播 f_x_ = Matrix<double, 24, 24>::Identity() + f_x_ * dt; P_ = (f_x_)*P_ * (f_x_).transpose() + (dt * f_w_) * Q * (dt * f_w_).transpose(); }

5. 性能优化与数值稳定性实践

在实际工程实现中,boxplus操作虽然概念清晰,但要保证其高效和数值稳定还需要一些技巧:

数值稳定性措施

  • 定期正交化旋转矩阵,防止累积误差
  • 对小旋转采用泰勒展开近似
  • 对指数映射实现鲁棒性处理

计算优化技巧

  • 利用SO(3)的伴随性质简化雅可比计算
  • 预计算重复使用的矩阵块
  • 并行化独立的状态更新操作
// 优化的指数映射实现 Sophus::SO3d exp_optimized(const Eigen::Vector3d &w) { double theta = w.norm(); if (theta < 1e-6) { // 小角度近似 return Sophus::SO3d::exp(w); } Eigen::Matrix3d W = Sophus::SO3d::hat(w); return Sophus::SO3d(Eigen::Matrix3d::Identity() + sin(theta)/theta * W + (1-cos(theta))/(theta*theta) * W * W); }

在FAST-LIO的长期测试中,我们发现合理实现boxplus操作可以将状态更新的速度提升30%以上,同时显著提高系统在极端运动情况下的稳定性。特别是在处理高速旋转或长时间运行场景时,严格的流形操作保证了算法不会因为数值累积误差而失效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 18:07:18

2026届必备的十大降AI率助手实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 将文本结构以及语言风格予以优化之事&#xff0c;能够极为显著地把AIGC检测率给降低下来。给…

作者头像 李华
网站建设 2026/4/10 18:04:28

Unpaywall浏览器扩展:5分钟实现学术文献免费获取的终极指南

Unpaywall浏览器扩展&#xff1a;5分钟实现学术文献免费获取的终极指南 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-ext…

作者头像 李华
网站建设 2026/4/11 21:56:47

Qwen3.5-9B问题解决:部署常见错误排查与日志查看指南

Qwen3.5-9B问题解决&#xff1a;部署常见错误排查与日志查看指南 1. 部署前环境检查 1.1 硬件要求确认 在部署Qwen3.5-9B模型前&#xff0c;请确保您的硬件环境满足以下最低要求&#xff1a; GPU&#xff1a;NVIDIA显卡&#xff0c;显存≥24GB&#xff08;推荐RTX 3090/409…

作者头像 李华
网站建设 2026/4/12 0:33:43

如何高效使用LibreDWG:开源DWG文件处理实用指南

如何高效使用LibreDWG&#xff1a;开源DWG文件处理实用指南 【免费下载链接】libredwg Official mirror of libredwg. With CI hooks and nightly releases. PRs ok 项目地址: https://gitcode.com/gh_mirrors/li/libredwg LibreDWG是一个强大的开源C语言库&#xff0c;…

作者头像 李华
网站建设 2026/4/10 18:00:33

如何高效掌控电脑风扇:Windows平台终极风扇控制方案指南

如何高效掌控电脑风扇&#xff1a;Windows平台终极风扇控制方案指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/…

作者头像 李华