基于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/10/24 17:24:55 阅读更多 →
工程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/10/24 14:09:45 阅读更多 →
你的大脑里住着两个人

你的大脑里住着两个人

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

2026/10/24 11:33:53 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →