作者 | 你说得很对 编辑 | 3D视觉之心
原文链接:https://www.zhihu.com/question/422718770
点击下方卡片,关注“自动驾驶之心”公众号
戳我-> 领取自动驾驶近15个方向学习路线
本文只做学术分享,如有侵权,联系删文
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的约束)。
一些球面差值的表达式更简洁。
投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!重磅,自动驾驶之心科研论文辅导来啦,申博、CCF系列、SCI、EI、毕业论文、比赛辅导等多个方向,欢迎联系我们!
① 全网独家视频课程
BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、车道线检测、轨迹预测、在线高精地图、世界模型、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、大模型与自动驾驶、Nerf、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习)
② 国内首个自动驾驶学习社区
国内最大最专业,近3000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知(2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

③【自动驾驶之心】技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)
④【自动驾驶之心】全平台矩阵