专栏名称: 3DCV
关注工业3D视觉、SLAM、自动驾驶技术,更专注3D视觉产业的信息传播和产品价值的创造,深度聚焦于3D视觉传感器、SLAM产品,使行业产品快速连接消费者。
目录
相关文章推荐
绝对现场  ·  名医到院区 | ... ·  2 天前  
共同体Community  ·  深圳市第三儿童医院,开业时间定了! ·  2 天前  
共同体Community  ·  深圳市第三儿童医院,开业时间定了! ·  2 天前  
闽南日报  ·  延时门诊!漳州市医院最新通知 ·  3 天前  
51好读  ›  专栏  ›  3DCV

为什么SLAM中很多使用四元数而不使用李代数?优势是什么?

3DCV  · 公众号  ·  · 2024-08-07 11:00

正文

点击下方 卡片 ,关注 「3DCV」 公众号
选择 星标 ,干货第一时间送达

添加小助理:dddvision,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。

扫描下方二维码,加入 3D视觉知识星球 ,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料: 近20门视频课程(星球成员免费学习) 最新顶会论文 、计算机视觉书籍 优质3D视觉算法源码 等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!

以下文章来源于3D视觉之心, 作者: 你说得很对,原文链接:

https://www.zhihu.com/question/422718770

wuRDmemory

楼主的问题不太对吧?

楼主应该问为什么用四元数而不是李群吧?李代数是李群在幺元处的切空间,其实本质上也是矩阵([a]^组成的空间),虽然很多书都说可以把李代数看做一个向量空间,但是实际上李代数是一个反对称矩阵组成的空间,只不过两者一一对应;

而通常SLAM中优化问题解得增量是旋转向量,可不是真正意义上的李代数,而旋转向量与四元数之间的转换关系更简单,仅仅就是除2并进行三角函数运算;

那么退一步,如果楼主问的是为什么不用旋转向量而是用四元数?

个人认为是说

  1. 旋转向量虽然是最小表示,但真正在做向量旋转时候还是要用旋转矩阵,所以还是要把旋转向量通过罗德里格斯公式变为旋转矩阵,而四元数有现成的运算;
  2. 求得增量之后四元数的更新也比李群表示的更新方便快捷很多,同时四元数仅仅存四个数就可以,比存储李群那样的矩阵要方便一些;
  3. 从便于理解的角度来说,我们最容易感受的其实是欧拉角,而不是旋转向量表示的给你一个旋转轴和旋转角度,那么从这个角度出发,四元数依旧是直接的公式,而旋转向量依旧需要一步罗德里格斯公式;

总结来说,我个人认为两者皆可表示旋转,只不过四元数有更多现成的运算,不必像旋转向量(或者楼主所说的李代数)一样处处罗德里格斯。

最后还需要说明一下的是,李代数必须是李群(也就是旋转矩阵)在幺元处的切空间,如果用李代数就意味着你算法后续的扰动都是在global系下的,而不能是local系下的,这点要特别注意。

马丁当

如果使用角轴表示旋转,每次新的角速度测量来了之后,你需要:

  1. 把角轴转换成旋转矩阵,罗德里格斯公式。
  2. 把角速度测量转换成旋转矩阵,可以罗德里格斯公式,也可以一阶近似。
  3. 旋转矩阵相乘。
  4. 把矩阵正则化(SVD分解,或者转换成四元数正则化,暂时不知道比较高效的方式)。
  5. 矩阵转变成角轴表达(反三角函数)。

如果使用四元数表达,则需要:

  1. 角速度转换成四元数,可以用三角函数得到相对精确的表达,也可以直接一阶近似。
  2. 四元数相乘。
  3. 四元数正则化,直接除以模即可,非常简单。

另外一种使用旋转矩阵表达的方式,占用储存空间多,好在不用频繁调用罗德里格斯公式。正则化的时候还是需要转换成四元数正则化,那么不如直接四元数表达。

IMU测量又比较频繁,100Hz到1000Hz不等,又多在嵌入式系统里,所以最终选择下来大家都用四元数了。

刘一梦

1、在非线性优化问题里,一般使用李代数会好一些。这是因为优化问题最终就是求H,从而也就是要求雅克比矩阵J。在李代数下,J的扰动求导是很方便且现成的,而用四元数求导比较麻烦,在计算精度上李代数也更高。一般优化得到增量的估计(李代数)之后,先指数映射转到李群,然后在李群上做乘法。

2、在滤波问题上,首先KF不能用四元数,因为四元数是非线性的。可以用EKF,但是以四元数为状态变量的话其雅克比矩阵也比较复杂(有没有用四元数为状态量进行EKF的呢?其实是有的,是在无人机里常出现的,直接用全量而不是误差量进行建模的情况,比如 直接用姿态的四元数做状态量),最常用的是ESKF的形式 。为什么要用errorState呢,errorState有很多优点,但我觉得最重要的是 误差状态方程是近似线性的 ,所以可以 直接用卡尔曼滤波 (注意,eskf并不是扩展卡尔曼滤波,而是KF),而且测量更新部分的雅克比矩阵的计算也非常简单计算,因为errorState总是很小的,所以高阶项可以忽略。

008

主要原因是。

对于最优化问题,我们需要对参数Θ不断做加减法,去迭代一个Θ,使得损失函数 F(Θ)最小。

而四元素自身是带有约束,不能简单地做加减法。它作为优化变量时,会引入额外的约束,使得优化变得困难。通过李群和李代数之间的转换关系,可以把位姿估计变为无约束的优化问题,简化求解方式。

李代数只能以增量Δ的形式作为优化变量,利用李代数的优化,要优化的参数,是一个增量Δ。李代数的逻辑R没法对李代数φ雅可比,而要用R*ΔR李代数φ雅可比。比如说我想得到一个R使得F(R)最小,李代数的思路是求一个增量ΔR对应的李代数,不断迭代ΔR对应的李代数φ,使得R = R.ΔR、F(R)最小。

基于李代数只优化增量的尿性,对于普通的EKF这种,直接利用李代数没法做,因为李代数的逻辑R没法对李代数φ雅可比,而要用R*ΔR李代数φ雅可比。用李代数做卡尔曼滤波的话得用ESKF这种增量表达式的方法。

但四元素可以直接R对q求导,就适合直接使用EKF,同样ESKF也可以使用四元素。

总结就是,使用普通EKF做位姿优化李代数干不了四元素能干,ESKF的话李代数和四元素都能干,最优化的话李代数能干但四元素不能干。

当然,在可以保证处理好旋转顺归和可以避免万向锁的情况下,欧拉角用着可谓是一个爽。

BigWaterMelon

在工程上,四元数和矩阵形式相比有以下好处:

  1. 仅需四个浮点数表示。占用内存比旋转矩阵更小,乘积操作更快。
  2. 可以用向量形式表征。适合集成在卡尔曼滤波类算法中,更新时可使用计算成本较低的加和操作(仍需一步矫正,使其满足模长为1的约束)。
  3. 一些球面差值的表达式更简洁。


本文仅做学术分享,如有侵权,请联系删文。

3D视觉交流群,成立啦!

目前我们已经建立了3D视觉方向多个社群,包括2D计算机视觉最前沿工业3D视觉SLAM自动驾驶三维重建无人机等方向,细分群包括:

工业3D视觉:相机标定、立体匹配、三维点云、结构光、机械臂抓取、缺陷检测、6D位姿估计、相位偏折术、Halcon、摄影测量、阵列相机、光度立体视觉等。

SLAM:视觉SLAM、激光SLAM、语义SLAM、滤波算法、多传感器融合、多传感器标定、动态SLAM、MOT SLAM、NeRF SLAM、机器人导航等。

自动驾驶:深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器、多传感器标定、多传感器融合、自动驾驶综合群等、3D目标检测、路径规划、轨迹预测、3D点云分割、模型部署、车道线检测、Occupancy、目标跟踪等。

三维重建:3DGS、NeRF、多视图几何、OpenMVS、MVSNet、colmap、纹理贴图等

无人机:四旋翼建模、无人机飞控等

2D计算机视觉:图像分类/分割、目标/检测、医学影像、GAN、OCR、2D缺陷检测、遥感测绘、超分辨率、人脸检测、行为识别、模型量化剪枝、迁移学习、人体姿态估计等

最前沿:具身智能、大模型、Mamba、扩散模型等

除了这些,还有求职硬件选型视觉产品落地、产品、行业新闻等交流群

添加小助理: dddvision,备注:研究方向+学校/公司+昵称(如3D点云+清华+小草莓), 拉你入群。

▲长按扫码添加助理:cv3d008

3D视觉从入门到精通知识星球

3D视觉从入门到精通」知识星球,已沉淀6年,星球内资料包括:秘制视频课程近20门(包括结构光三维重建、相机标定、SLAM、深度估计、3D目标检测、3DGS顶会带读课程、三维点云等)、项目对接







请到「今天看啥」查看全文