点击下方
卡片
,关注
「3DCV」
公众号
选择
星标
,干货第一时间送达
添加小助理:dddvision,备注:方向+学校/公司+昵称,拉你入群。文末附3D视觉行业细分群。
扫描下方二维码,加入
3D视觉知识星球
,星球内凝聚了众多3D视觉实战问题,以及各个模块的学习资料:
近20门视频课程(星球成员免费学习)
、
最新顶会论文
、计算机视觉书籍
、
优质3D视觉算法源码
等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!
以下文章来源于3D视觉之心,
作者:
你说得很对,原文链接:
https://www.zhihu.com/question/422718770
wuRDmemory
楼主的问题不太对吧?
楼主应该问为什么用四元数而不是李群吧?李代数是李群在幺元处的切空间,其实本质上也是矩阵([a]^组成的空间),虽然很多书都说可以把李代数看做一个向量空间,但是实际上李代数是一个反对称矩阵组成的空间,只不过两者一一对应;
而通常SLAM中优化问题解得增量是旋转向量,可不是真正意义上的李代数,而旋转向量与四元数之间的转换关系更简单,仅仅就是除2并进行三角函数运算;
那么退一步,如果楼主问的是为什么不用旋转向量而是用四元数?
个人认为是说
-
旋转向量虽然是最小表示,但真正在做向量旋转时候还是要用旋转矩阵,所以还是要把旋转向量通过罗德里格斯公式变为旋转矩阵,而四元数有现成的运算;
-
求得增量之后四元数的更新也比李群表示的更新方便快捷很多,同时四元数仅仅存四个数就可以,比存储李群那样的矩阵要方便一些;
-
从便于理解的角度来说,我们最容易感受的其实是欧拉角,而不是旋转向量表示的给你一个旋转轴和旋转角度,那么从这个角度出发,四元数依旧是直接的公式,而旋转向量依旧需要一步罗德里格斯公式;
总结来说,我个人认为两者皆可表示旋转,只不过四元数有更多现成的运算,不必像旋转向量(或者楼主所说的李代数)一样处处罗德里格斯。
最后还需要说明一下的是,李代数必须是李群(也就是旋转矩阵)在幺元处的切空间,如果用李代数就意味着你算法后续的扰动都是在global系下的,而不能是local系下的,这点要特别注意。
马丁当
如果使用角轴表示旋转,每次新的角速度测量来了之后,你需要:
-
-
把角速度测量转换成旋转矩阵,可以罗德里格斯公式,也可以一阶近似。
-
-
把矩阵正则化(SVD分解,或者转换成四元数正则化,暂时不知道比较高效的方式)。
-
如果使用四元数表达,则需要:
-
角速度转换成四元数,可以用三角函数得到相对精确的表达,也可以直接一阶近似。
-
-
另外一种使用旋转矩阵表达的方式,占用储存空间多,好在不用频繁调用罗德里格斯公式。正则化的时候还是需要转换成四元数正则化,那么不如直接四元数表达。
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的约束)。
-
本文仅做学术分享,如有侵权,请联系删文。

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顶会带读课程、三维点云等)、项目对接