「 SLAM lesson-3.6 」用四元数表示旋转,四元数到旋转矩阵的转换

结合 高翔老师的著作《视觉SLAM十四讲:从理论到实践》,加上小白的工程经验共同完成。建议作为笔记功能反复使用。


一、用四元数表示旋转

        把三维空间点用一个虚四元数来描述:

                           \begin{bmatrix} 0, &x, &y, &z \end{bmatrix} = \begin{bmatrix} 0, &v\end{bmatrix}.

        这相当于我们把四元数的三个虚部与空间中的三个轴相对应。,用四元数 q 表示这个旋转:

                           q = \begin{bmatrix} cos\frac{\theta }{2}, &nsin\frac{\theta }{2}\end{bmatrix}.

        那么,旋转后的点  p{}' = qpq^{-1}

        其三个虚部的分量表示旋转后 3D 点的坐标。

二、四元数到旋转矩阵的转换

        把四元数转换到矩阵的最直观方法,是先把四元数 q 转换为轴角 \theta 和 n ,然后再根据罗德里格斯公式转换为矩阵。不过那样要计算一个 arccos 函数,代价较大。

        下面直接给出四元数到旋转矩阵的转换公式。设四元数q = q_{0} + q_{1}i + q_{2}j + q_{3}k,对应的旋转矩阵 R 为:

                   R=\begin{bmatrix} 1 - 2q_{2}^{2} - 2q_{3}^{2} & 2q_{1}q_{2} +2q_{0}q_{3} & 2q_{1}q_{3} - 2q_{0}q_{2} \\ 2q_{1}q_{2} - 2q_{0}q_{3}&1 - 2q_{1}^{2} - 2q_{3}^{2} & 2q_{2}q_{3} +2q_{0}q_{1} \\ 2q_{1}q_{3} +2q_{0}q_{2} &2q_{2}q_{3} -2q_{0}q_{1} &1 - 2q_{1}^{2} - 2q_{2}^{2} \end{bmatrix}

        反之,由旋转矩阵到四元数的转换如下。假设矩阵为 R = \begin{Bmatrix} m_{ij} \end{Bmatrix},i,j\epsilon \begin{bmatrix} 1,&2,&3 \end{bmatrix},其对应的四元数q由下式给出:

                  q_{0}=\frac{\sqrt{tr(R)+1}}{2},q_{1}=\frac{m_{23}-m_{32}}{4q_{0}},q_{1}=\frac{m_{31}-m_{13}}{4q_{0}},q_{1}=\frac{m_{12}-m_{21}}{4q_{0}}

        由于 q 和 -q 表示同一个旋转,事实上一个 R 对应的四元数表示并不是唯一的。实际编程中,当 q_{0} 接近 0 时,其余三个分量会非常大,导致解不稳定,此时我们再考虑使用其他的方式进行转换。

        最后,无论是四元数、旋转矩阵还是轴角,他们都应该用来描述同一个旋转。我们应该在实际中选择对我们最为方便的形式,而不必拘泥于某种特定的样子。


《视觉SLAM十四讲:从理论到实践》 PDF资源

下载链接:Robot_Starscream的资源  仅供各位研究员试读,请购买纸质书籍。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值