基于SLAM十四讲经典Sophus示例代码对应李代公式
本文基于SLAM十四讲经典Sophus示例代码Sophus代码逐模块拆解SO(3)、SE(3)李群李代数对应数学公式把每一行代码和李群、李代数数学公式一一对应方便学习SLAM位姿表示与扰动模型。符号约定与Sophus库保持一致SO(3)\boldsymbol{SO}(3)SO(3)三维旋转矩阵群群元素为旋转矩阵R\boldsymbol{R}Rso(3)\mathfrak{so}(3)so(3)SO(3)\boldsymbol{SO}(3)SO(3)对应的李代数元素为三维旋转向量ϕ\boldsymbol{\phi}ϕSE(3)\boldsymbol{SE}(3)SE(3)三维刚体变换群群元素为齐次变换矩阵T[Rt0⊤1] \boldsymbol{T} \begin{bmatrix} \boldsymbol{R} \boldsymbol{t} \\ \boldsymbol{0}^\top 1 \end{bmatrix}T[R0⊤​t1​]se(3)\mathfrak{se}(3)se(3)SE(3)\boldsymbol{SE}(3)SE(3)对应的李代数六维向量ξ[ρϕ] \boldsymbol{\xi} \begin{bmatrix} \boldsymbol{\rho} \\ \boldsymbol{\phi} \end{bmatrix}ξ[ρϕ​]ρ\boldsymbol{\rho}ρ为平移对应部分ϕ\boldsymbol{\phi}ϕ为旋转对应部分∧\wedge∧Hat算子向量→反对称矩阵∨\vee∨Vee算子反对称矩阵→向量exp⁡(⋅)\exp(\cdot)exp(⋅)指数映射李代数→\to→李群log⁡(⋅)\log(\cdot)log(⋅)对数映射李群→\to→李代数1. 初始化旋转、平移基础数据代码数学含义Matrix3d R AngleAxisd(M_PI / 2, Vector3d(0, 0, 1)).toRotationMatrix();构造绕ZZZ轴旋转90∘90^\circ90∘的旋转矩阵Rexp⁡((θn)∧),θπ2,n(0,0,1)⊤\boldsymbol{R}\exp\big((\theta \boldsymbol{n})^\wedge\big),\quad \theta\frac{\pi}{2},\boldsymbol{n}(0,0,1)^\topRexp((θn)∧),θ2π​,n(0,0,1)⊤Quaterniond q(R);旋转矩阵转为单位四元数q[cos⁡(θ/2)nsin⁡(θ/2)]\boldsymbol{q}\begin{bmatrix}\cos(\theta/2) \\ \boldsymbol{n}\sin(\theta/2)\end{bmatrix}q[cos(θ/2)nsin(θ/2)​]Vector3d t(1, 0, 0);平移向量t(1,0,0)⊤\boldsymbol{t}(1,0,0)^\topt(1,0,0)⊤2.SO(3)\boldsymbol{SO}(3)SO(3)李群元素构造代码数学公式Sophus::SO3d SO3_R(R);由旋转矩阵直接构造李群元素R∈SO(3)\boldsymbol{R}\in \boldsymbol{SO}(3)R∈SO(3)Vector3d v(0, 0, M_PI / 2);brSophus::SO3d SO3_v Sophus::SO3d::exp(v);李代数通过指数映射得到李群Rvexp⁡(v∧),v(0,0,π/2)⊤\boldsymbol{R}_v\exp\big(\boldsymbol{v}^\wedge\big),\quad \boldsymbol{v}(0,0,\pi/2)^\topRv​exp(v∧),v(0,0,π/2)⊤Sophus::SO3d SO3_q(q);由单位四元数构造旋转矩阵得到SO(3)\boldsymbol{SO}(3)SO(3)元素3.SO(3)\boldsymbol{SO}(3)SO(3)核心运算对数映射、Hat/Vee、扰动更新代码数学公式SO3_R.matrix()输出旋转矩阵本身R∈R3×3\boldsymbol{R}\in\mathbb{R}^{3\times3}R∈R3×3。Vector3d so3 SO3_R.log();对数映射李群→\to→李代数ϕ(log⁡(R))∨\boldsymbol{\phi}\big(\log(\boldsymbol{R})\big)^\veeϕ(log(R))∨得到旋转向量满足Rexp⁡(ϕ∧)\boldsymbol{R}\exp\big(\boldsymbol{\phi}^\wedge\big)Rexp(ϕ∧)。Sophus::SO3double::hat(so3)∧\wedge∧(Hat) 算子向量→\to→反对称矩阵ϕ∧[0−ϕ3ϕ2ϕ30−ϕ1−ϕ2ϕ10]∈so(3)\boldsymbol{\phi}^\wedge\begin{bmatrix}0 -\phi_3 \phi_2 \\\phi_3 0 -\phi_1 \\-\phi_2 \phi_1 0\end{bmatrix}\in\mathfrak{so}(3)ϕ∧​0ϕ3​−ϕ2​​−ϕ3​0ϕ1​​ϕ2​−ϕ1​0​​∈so(3)Sophus::SO3double::vee(...)∨\vee∨(Vee) 算子反对称矩阵→\to→向量(ϕ∧)∨ϕ\big(\boldsymbol{\phi}^\wedge\big)^\vee\boldsymbol{\phi}(ϕ∧)∨ϕ是 Hat 算子的逆运算。Vector3d update_so3(1e-4, 0, 0);SO3_updated Sophus::SO3double::exp(update_so3) * SO3_R;左乘扰动模型微积分中的“扰动更新”Rnewexp⁡(δϕ∧)⋅R\boldsymbol{R}_{new}\exp\big(\delta\boldsymbol{\phi}^\wedge\big)\cdot\boldsymbol{R}Rnew​exp(δϕ∧)⋅R此处δϕ(10−4,0,0)⊤\delta\boldsymbol{\phi}(10^{-4},0,0)^\topδϕ(10−4,0,0)⊤。4.SE(3)\boldsymbol{SE}(3)SE(3)李群元素构造代码数学公式Sophus::SE3d SE3_Rt(R, t);由旋转矩阵R\boldsymbol{R}R、平移t\boldsymbol{t}t构造SE(3)\boldsymbol{SE}(3)SE(3)变换矩阵T[Rt0⊤1]∈SE(3)\boldsymbol{T}\begin{bmatrix}\boldsymbol{R} \boldsymbol{t} \\\boldsymbol{0}^\top 1\end{bmatrix}\in\boldsymbol{SE}(3)T[R0⊤​t1​]∈SE(3)Sophus::SE3d SE3_qt(q, t);由四元数q\boldsymbol{q}q和平移t\boldsymbol{t}t构造变换矩阵四元数内部转为R\boldsymbol{R}R5.SE(3)\boldsymbol{SE}(3)SE(3)核心运算对数映射、Hat/Vee、扰动更新代码数学公式SE3_Rt.matrix()输出4×4齐次变换矩阵T\boldsymbol{T}TVector6d se3 SE3_Rt.log();对数映射得到se(3)\mathfrak{se}(3)se(3)李代数ξ(log⁡(T))∨[ρϕ]∈se(3)\boldsymbol{\xi}\big(\log(\boldsymbol{T})\big)^\vee\begin{bmatrix}\boldsymbol{\rho}\\\boldsymbol{\phi}\end{bmatrix}\in\mathfrak{se}(3)ξ(log(T))∨[ρϕ​]∈se(3)Sophus::SE3d::vee(...)Vee算子(ξ∧)∨ξ\big(\boldsymbol{\xi}^\wedge\big)^\vee\boldsymbol{\xi}(ξ∧)∨ξVector6d update_se3; update_se3.setZero(); update_se3(0,0) 1e-4d;brSophus::SE3d SE3_updated Sophus::SE3d::exp(update_se3) * SE3_Rt;SE(3)\boldsymbol{SE}(3)SE(3)左乘扰动模型Tnewexp⁡(δξ∧)⋅T\boldsymbol{T}_{new}\exp\big(\delta\boldsymbol{\xi}^\wedge\big)\cdot\boldsymbol{T}Tnew​exp(δξ∧)⋅T 核心公式汇总SLAM后端高频指数映射李代数 → 李群Rexp⁡(ϕ∧),Texp⁡(ξ∧) \boldsymbol{R}\exp(\boldsymbol{\phi}^\wedge),\quad \boldsymbol{T}\exp(\boldsymbol{\xi}^\wedge)Rexp(ϕ∧),Texp(ξ∧)对数映射李群 → 李代数ϕ(log⁡(R))∨,ξ(log⁡(T))∨ \boldsymbol{\phi}\big(\log(\boldsymbol{R})\big)^\vee,\quad \boldsymbol{\xi}\big(\log(\boldsymbol{T})\big)^\veeϕ(log(R))∨,ξ(log(T))∨左乘扰动更新位姿优化主流形式R←exp⁡(δϕ∧)R,T←exp⁡(δξ∧)T \boldsymbol{R}\leftarrow\exp(\delta\boldsymbol{\phi}^\wedge)\boldsymbol{R},\quad \boldsymbol{T}\leftarrow\exp(\delta\boldsymbol{\xi}^\wedge)\boldsymbol{T}R←exp(δϕ∧)R,T←exp(δξ∧)T补充说明旧版Sophus(version0)SO3 / SE3新版Sophus(master)SO3d / SE3d头文件为.hppSophus中se(3)\mathfrak{se}(3)se(3)向量排布平移ρ\boldsymbol{\rho}ρ在前旋转ϕ\boldsymbol{\phi}ϕ在后不要记反顺序

相关新闻

灰狼优化与AdaBoost混合CNN训练方法解析

灰狼优化与AdaBoost混合CNN训练方法解析

1. 项目背景与核心价值在深度学习领域,优化算法的选择直接影响模型性能。传统梯度下降法容易陷入局部最优,而群体智能算法虽具全局搜索能力却收敛缓慢。这项研究创新性地将灰狼优化(GWO)与AdaBoost集成到CNN训练中,形成混合优化器&#xff0c…

2026/7/23 4:32:57 阅读更多 →
工程POM引入mybatis-plus-boot-starter后启动依赖冲突解决

工程POM引入mybatis-plus-boot-starter后启动依赖冲突解决

好问题!这是因为 mybatis-plus-boot-starter 本身并不直接依赖 mybatis-spring-boot-starter,它内部已经内联了 MyBatis 相关的核心依赖。让我解释一下为什么需要显式引入它:MyBatis-Plus 3.4.2 的依赖结构mybatis-plus-boot-starter:3.4.2 的…

2026/7/23 4:31:57 阅读更多 →
你的大脑里住着两个人

你的大脑里住着两个人

01 你的大脑中,其实住着两个人一个叫“冲动的小红人”, 他是个不懂事的三岁小孩,一看到有感觉的商品,多巴胺瞬间分泌,他立马兴奋起来——“哇,好漂亮!我想要!”“太酷了,我好喜欢&am…

2026/7/23 4:31:57 阅读更多 →

最新新闻

AI如何降低科研计算复杂度:从基因比到材料模拟的实战指南

AI如何降低科研计算复杂度:从基因比到材料模拟的实战指南

如果你是一位科研工作者,最近可能感受到了这样的变化:过去需要花费数周时间进行数据清洗、模型调参和结果分析的复杂研究流程,现在通过AI工具可以在几小时内完成初步探索。这不仅仅是效率的提升,更是研究范式的根本转变。传统学术…

2026/7/23 5:12:11 阅读更多 →
实战测试10款降AIGC网站:只选真正管用的那一款!

实战测试10款降AIGC网站:只选真正管用的那一款!

随着AI写作工具的普及,越来越多的学生和职场人士开始依赖它来提升论文写作效率和内容创作速度。然而,问题也随之而来:高校、平台和期刊对AI生成内容的检测标准越来越严格,许多人在提交论文或稿件时发现,自己的文字被系…

2026/7/23 5:12:11 阅读更多 →
深入解析I2C与CAN总线寄存器配置及中断处理实战

深入解析I2C与CAN总线寄存器配置及中断处理实战

1. 项目概述与核心价值在嵌入式系统开发中,I2C和CAN总线是两种绕不开的通信协议。我接触过不少项目,从简单的传感器数据采集到复杂的车载网络,这两种接口几乎无处不在。很多工程师在初期配置时,往往对着数据手册里密密麻麻的寄存器…

2026/7/23 5:12:11 阅读更多 →
Tiva™ TM4C ADC核心寄存器解析:从数据流健康到多通道同步采样的实战指南

Tiva™ TM4C ADC核心寄存器解析:从数据流健康到多通道同步采样的实战指南

1. 项目概述在嵌入式系统开发中,模数转换器(ADC)的配置与调试往往是项目成败的关键一环。很多工程师在初次接触像Tiva™ TM4C这类功能强大的微控制器时,面对动辄几十页的ADC寄存器手册,常常感到无从下手。我们往往只关…

2026/7/23 5:12:11 阅读更多 →
C++文件操作实战:从基础逐行读取到CSV解析与性能优化

C++文件操作实战:从基础逐行读取到CSV解析与性能优化

1. 项目概述:为什么文件操作是C的必修课? 如果你正在为期末大作业或者毕业设计发愁,尤其是那些需要处理数据文件、日志分析或者配置读取的任务,那么“文件操作”这个坎儿你大概率是绕不过去的。我见过太多同学,C语法学…

2026/7/23 5:12:11 阅读更多 →
架构实战第3篇:三个文件消灭90%重复代码-泛型CRUD架构解析

架构实战第3篇:三个文件消灭90%重复代码-泛型CRUD架构解析

摘要:在Java企业级开发中,单表CRUD是最常见也是最枯燥的代码。每新增一个业务实体,就要写一套几乎相同的Controller、Service——结构雷同,却又不得不写。《鹿鲸项目管理工具》仅用三个文件——IOneEntityService接口、OneEntityServiceImpl抽…

2026/7/23 5:11:11 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻