zoukankan      html  css  js  c++  java
  • Rotation Kinematics

    问题来源是 IMU 中 Gyroscope 测量的角速度实际含义,从而帮助理解 IMU 预积分过程中 Rotation Matrix 的积分过程(即文献 [1] 中公式 (30) 的第一个等式)。

    解决这个问题,参考文献 [2] State Estimation for Robotics 的 6.2.4 Rotational Kinematics6.4.4 Inertial Measurement Unit

    1. 角速度测量值含义

    在对文献 [2] 6.2.4 有基本印象之后,阅读文献[2] 6.4.4

    在文献 [2] 6.4.4 中,图 Figure 6.14 有三个坐标系——惯性(世界)坐标系 (underrightarrow{mathcal{F}_i})、载具坐标系 (underrightarrow{mathcal{F}_v})、IMU 坐标系 (underrightarrow{mathcal{F}_s})

    IMU 坐标系与载具坐标系不重合,所以 IMU 的测量值不能直接在载具坐标系在使用,需要进行转换。

    文献[2]公式 (6.149) 给出了 Gyroscope 测量值 (mathbf{omega}) 与所需要的载具角速度 (mathbf{omega}^{vi}_v) 的关系:

    [mathbf{omega} = mathbf{C}_{sv}mathbf{omega}^{vi}_v, ]

    由文献 [2] 公式 (6.3)

    [underrightarrow{mathcal{F}_1}^T = underrightarrow{mathcal{F}_2}^T mathbf{C}_{21} ]

    [mathbf{omega} = underrightarrow{mathcal{F}_s}underrightarrow{mathcal{F}_v}^Tmathbf{omega}^{vi}_v, ]

    由文献 [2] 公式 (6.40)

    [underrightarrow{omega}_{21} = underrightarrow{mathcal{F}_2}^T mathbf{omega}^{21}_2 ]

    [egin{align} mathbf{omega} &= underrightarrow{mathcal{F}_s}underrightarrow{mathbf{omega}}_{vi} otag \ underrightarrow{mathcal{F}_s}^T mathbf{omega} &= underrightarrow{mathbf{omega}}_{vi} end{align},]

    因为 IMU 与载具之间形成刚体,不存在相对运动,所以从角速度的空间向量(注意,并不是向量在某基底下的向量坐标)角度看,IMU 与载具的角速度相同。即

    [underrightarrow{mathbf{omega}}_{si} = underrightarrow{mathbf{omega}}_{vi}。 ]

    所以,认为角速度测量值

    [mathbf{omega} = mathbf{omega}^{si}_s。 ]

    注意 (underrightarrow{omega}_{21}) 的含义,在 6.2.4 有一句话引用如下

    The angular velocity of frame 2 with respect to frame 1 is denoted by (underrightarrow{omega}_{21}).

    所以 (underrightarrow{mathbf{omega}}_{si}) 理解为 IMU 坐标系 (underrightarrow{mathcal{F}_s}) 相对惯性坐标系 (underrightarrow{mathcal{F}_i}) 的角速度向量,(mathbf{omega}^{si}_s) 符号理解为IMU 坐标系 (underrightarrow{mathcal{F}_s}) 相对惯性坐标系 (underrightarrow{mathcal{F}_i}) 的角速度向量在 IMU 坐标系 (underrightarrow{mathcal{F}_s}) 下的坐标。

    2. 从角速度积分

    参考 6.2.4 仔细理解公式 (6.36)。这是从向量的角度理解角速度,而不是从向量坐标角度理解。

    将此处的 (underrightarrow{mathcal{F}_1}) 对应惯性坐标系 (underrightarrow{mathcal{F}_i})(underrightarrow{mathcal{F}_2}) 对应 IMU 坐标系 (underrightarrow{mathcal{F}_s})

    角速度在空间中可以表示为一个向量,按照右手螺旋的习惯,此向量方向标明了旋转方向,此向量的长度标明了角速度标量。

    在某一时刻 (underrightarrow{mathcal{F}_1}, underrightarrow{mathcal{F}_2}) 之间存在角速度 (underrightarrow{omega}_{21}),考虑 (underrightarrow{mathcal{F}_2}) 各轴(也就是该坐标系基底所在的向量) (underrightarrow{2_1}, underrightarrow{2_2}, underrightarrow{2_3}) 对时间的变化率(当然是在 (underrightarrow{mathcal{F}_1}) 下观察的结果,在 (underrightarrow{mathcal{F}_2}) 下结果为 0,所谓相对运动)。得到以下结果(参考图理解):

    [egin{align} underrightarrow{2^{ullet}_1} = underrightarrow{omega}_{21} imes underrightarrow{2_1} \ underrightarrow{2^{ullet}_2} = underrightarrow{omega}_{21} imes underrightarrow{2_2} \ underrightarrow{2^{ullet}_3} = underrightarrow{omega}_{21} imes underrightarrow{2_3} end{align}]

    现在考虑经过足够短的时间 (Delta t),坐标系 (underrightarrow{mathcal{F}_2}) 经过 (Delta t) 时间移动到 (underrightarrow{mathcal{F}_2}^{prime})

    [egin{align} underrightarrow{2^{prime}_1} &= underrightarrow{2^{ullet}_1} Delta t + underrightarrow{2_1} otag \ &= (underrightarrow{omega}_{21} Delta t) imes underrightarrow{2_1} + underrightarrow{2_1} \ underrightarrow{2^{prime}_2} &= underrightarrow{2^{ullet}_2} Delta t + underrightarrow{2_2} otag \ &= (underrightarrow{omega}_{21} Delta t) imes underrightarrow{2_2} + underrightarrow{2_2} \ underrightarrow{2^{prime}_3} &= underrightarrow{2^{ullet}_3} Delta t + underrightarrow{2_3} otag \ &= (underrightarrow{omega}_{21} Delta t) imes underrightarrow{2_3} + underrightarrow{2_3} end{align}]

    合并,写作

    [underrightarrow{mathcal{F}^T_2}^{prime} = (underrightarrow{omega}_{21} Delta t) imes underrightarrow{mathcal{F}^T_2} + underrightarrow{mathcal{F}^T_2} ]

    其中

    [egin{align} underrightarrow{omega}_{21} &= underrightarrow{mathcal{F}^T_2} mathbf{omega}^{21}_2 \ underrightarrow{omega}_{21} &= underrightarrow{mathcal{F}^T_1} mathbf{omega}^{21}_1 end{align}]

    考虑 (underrightarrow{mathcal{F}_1}, underrightarrow{mathcal{F}_2}) 之间的旋转矩阵 (mathbf{C}_{12}),在经过时间 (Delta t) 之后变化成 (mathbf{C}_{12}^{prime})

    则有

    [egin{align} mathbf{C}_{12} &= underrightarrow{mathcal{F}_1}underrightarrow{mathcal{F}^T_2} \ {mathbf{C}_{12}^{prime}} &= underrightarrow{mathcal{F}_1}underrightarrow{mathcal{F}^T_2}^{prime} end{align}]

    对于 ({mathbf{C}_{21}^{prime}}^T) 的计算比较困难。假设在这个空间中有一组单位正交基,为了简单起见将这组基设定在 (underrightarrow{mathcal{F}_1}) 的各条轴上(同时也是在 (underrightarrow{mathcal{F}_1}) 上求对时间的变化率),长度都为 1 。将以上这些向量都用它们在这组单位正交基下的坐标表示,考虑各个向量的坐标维度:

    1. (underrightarrow{mathcal{F}_1}, underrightarrow{mathcal{F}_2})(3 imes 3)(underrightarrow{mathcal{F}_1}=egin{bmatrix} underrightarrow{1_1} \ underrightarrow{1_2} \ underrightarrow{1_3} end{bmatrix}, underrightarrow{mathcal{F}_2}=egin{bmatrix} underrightarrow{2_1} \ underrightarrow{2_2} \ underrightarrow{2_3} end{bmatrix}),矩阵的每一行都是对应坐标系基底在该坐标系下的坐标;
    2. (underrightarrow{mathcal{F}^T_1}, underrightarrow{mathcal{F}^T_2})(3 imes 3)(underrightarrow{mathcal{F}^T_1}=egin{bmatrix} underrightarrow{1_1} & underrightarrow{1_2} & underrightarrow{1_3} end{bmatrix}, underrightarrow{mathcal{F}^T_2}=egin{bmatrix} underrightarrow{2_1} & underrightarrow{2_2} & underrightarrow{2_3} end{bmatrix}),矩阵的每一列都是对应坐标系基底在该坐标系下的坐标;
    3. (underrightarrow{omega}_{21})(3 imes 1),并且 ({underrightarrow{omega}_{21}}_{3 imes 1} = underrightarrow{mathcal{F}^T_2}_{3 imes 3} {mathbf{omega}^{21}_2}_{3 imes 1})

    [egin{align} mathbf{C}_{12} &= underrightarrow{mathcal{F}_1}underrightarrow{mathcal{F}^T_2} otag \ &= mathbf{I} underrightarrow{mathcal{F}^T_2} otag \ &= underrightarrow{mathcal{F}^T_2} end{align}]

    于是 (mathbf{C}_{12}) 的每一列都是 (underrightarrow{mathcal{F}_2}) 对应坐标系基底在 (underrightarrow{mathcal{F}_1}) 坐标系下的坐标。

    [egin{align} mathbf{C}_{12}^{prime} &= underrightarrow{mathcal{F}_1}underrightarrow{mathcal{F}^T_2}^{prime} otag \ &= underrightarrow{mathcal{F}_1}((underrightarrow{omega}_{21} Delta t) imes underrightarrow{mathcal{F}^T_2} + underrightarrow{mathcal{F}^T_2}) otag \ &= mathbf{I}((mathbf{omega}^{21}_1Delta t)^{wedge} mathbf{C}_{12} + mathbf{C}_{12}) otag \ &= mathbf{C}_{12} + (mathbf{omega}^{21}_1 Delta t)^{wedge} mathbf{C}_{12} otag \ &= mathbf{C}_{12} + mathbf{C}_{12} mathbf{C}_{12}^T (mathbf{omega}^{21}_1Delta t)^{wedge} mathbf{C}_{12} otag \ &= mathbf{C}_{12} + mathbf{C}_{12} (mathbf{C}_{12}^T mathbf{omega}^{21}_1 Delta t)^{wedge} otag \ &= mathbf{C}_{12} + mathbf{C}_{12} (mathbf{omega}^{21}_2 Delta t)^{wedge} otag \ &= mathbf{C}_{12} (mathbf{I} + (mathbf{omega}^{21}_2 Delta t)^{wedge}) otag \ &= mathbf{C}_{12} ext{Exp}(mathbf{omega}^{21}_2 Delta t) end{align}]

    以上第三个等号,可以看做是将所有向量都投影到 (underrightarrow{mathcal{F}_1}) 坐标系下进行后续的运算。因为旋转矩阵不是坐标系中的坐标,所以上式的第一个等号没有错。

    变换一下坐标系的表示方式,并且将 ({mathbf{C}_{12}^{prime}}) 写作 (mathbf{C}_{12}(t+Delta t))(mathbf{omega}^{si}_s) 对应 (mathbf{omega}^{21}_2),所以上式可以写作:

    [egin{align} {mathbf{C}_{is}(t+Delta t)} &= mathbf{C}_{is}(t) ext{Exp}(mathbf{omega}^{si}_s Delta t)label{eq1:R} end{align}]

    至此,得到 IMU 姿态积分公式。

    3. 微分方程

    3.1. 旋转矩阵的微分

    旋转矩阵微分 (dot{mathbf{C}_{is}}(t)) 的定义是:

    [egin{align} {mathbf{C}_{is}(t+Delta t)} &= mathbf{C}_{is}(t) + dot{mathbf{C}_{is}}(t) Delta t end{align}]

    所以现在从公式 (( ef{eq1:R})) 出发,凑出以上公式,所以需要分解 ( ext{Exp}(mathbf{omega}^{si}_s Delta t)),要求 (mathbf{omega}^{si}_s Delta t) 很小,可以做以下分解:

    [egin{align} {mathbf{C}_{is}(t+Delta t)} &= mathbf{C}_{is}(t) ext{Exp}(mathbf{omega}^{si}_s Delta t) otag \ &= mathbf{C}_{is}(t) (mathbf{I} + {mathbf{omega}^{si}_s}^{wedge} Delta t) otag \ &= mathbf{C}_{is}(t) + mathbf{C}_{is}(t) {mathbf{omega}^{si}_s}^{wedge} Delta t end{align}]

    得到微分 (dot{mathbf{C}_{is}}(t))

    [egin{align} dot{mathbf{C}_{is}}(t) = mathbf{C}_{is}(t) {mathbf{omega}^{si}_s}^{wedge} label{eq3.1.3} end{align}]

    3.2. 四元数的微分

    以下使用 Hamilton 形式四元数。

    从语义上理解,公式 (( ef{eq1:R})) 表示 Rotation Matrix (mathbf{C}_{is}) 在时刻 (t) 的值为 (mathbf{C}_{is}(t)),在此基础上经过 (Delta t) 的时间,在时刻 (t + Delta t) 的值为 (mathbf{C}_{is}(t) ext{Exp}(mathbf{omega}^{si}_s(t) Delta t)),即在 (mathbf{C}_{is}(t)) 的基础上被右乘了一个矩阵 ( ext{Exp}(mathbf{omega}^{si}_s Delta t)),这个矩阵表示的旋转轴角为 (mathbf{omega}^{si}_s(t) Delta t)。(注意,不是在 (mathbf{C}_{is}(t)) 的基础上继续旋转 (mathbf{omega}^{si}_s(t) Delta t),因为此处 (mathbf{C}_{is}(t)) 是被右乘。)按照这个旋转的含义,将公式中的 Rotation Matrix 换成 quaternion 。

    [egin{align} mathbf{q}_{is}(t + Delta t) &= mathbf{q}_{is}(t) otimes q{ mathbf{omega}^{si}_s(t) Delta t } otag \ &= mathbf{q}_{is}(t) otimes egin{bmatrix} 1 \ {1 over 2}mathbf{omega}^{si}_s(t) Delta t end{bmatrix} otag \ &= left(mathbf{I} + egin{bmatrix} 0 & - {1 over 2}{mathbf{omega}^{si}_s(t)}^T Delta t \ {1 over 2}mathbf{omega}^{si}_s(t) Delta t & -{1 over 2}{mathbf{omega}^{si}_s(t)}^{wedge} Delta t end{bmatrix} ight) mathbf{q}_{is}(t) phantom{ } phantom{ } phantom{ } (论文 [3] 公式 (19)) otag \ &= mathbf{q}_{is}(t) + {1 over 2}egin{bmatrix} 0 & - {mathbf{omega}^{si}_s(t)}^T \ mathbf{omega}^{si}_s(t) & -{mathbf{omega}^{si}_s(t)}^{wedge} end{bmatrix} mathbf{q}_{is}(t) Delta t end{align}]

    由定义可以得到 quaternion 的微分方程。

    [egin{align} dot{mathbf{q}_{is}}(t) &= {1 over 2}egin{bmatrix} 0 & - {mathbf{omega}^{si}_s(t)}^T \ mathbf{omega}^{si}_s(t) & -{mathbf{omega}^{si}_s(t)}^{wedge} end{bmatrix} mathbf{q}_{is}(t) otag \ &= {1 over 2} mathbf{q}_{is}(t) otimes egin{bmatrix} 0 \ mathbf{omega}^{si}_s(t) end{bmatrix} otag \ &= {1 over 2} mathbf{q}_{is}(t) otimes mathbf{omega}^{si}_s(t) end{align}]

    4. 附录:角速度的方向

    上文中使用到了角速度 (mathbf{omega}^{si}_s),理解为IMU 坐标系 (underrightarrow{mathcal{F}_s}) 相对惯性坐标系 (underrightarrow{mathcal{F}_i}) 的角速度向量在 IMU 坐标系 (underrightarrow{mathcal{F}_s}) 下的坐标。

    (mathbf{omega}^{is}_s)(mathbf{omega}^{si}_s) 都是在 (underrightarrow{mathcal{F}_s}) 下的坐标,只不过相对关系相反。相对关系相反,表示它们所表示的这个向量在空间中反向,而在量值上他们相等,所以这两个向量是反向量关系。反向量在同一个坐标系下的坐标是相反数,(mathbf{omega}^{is}_s = -mathbf{omega}^{si}_s)

    角速度的推导参考 [4] 4.1.2 李代数的引出( ef{eq3.1.3}) 省略时间 (t),变形得到以下。

    [egin{align} mathbf{C}_{is}^Tdot{mathbf{C}_{is}} = {mathbf{omega}^{si}_s}^{wedge} end{align}]

    然而上式并不能与 [4] 的公式对应。但是它能与 [3] 的公式 (67) 对应,所以通过上式我们能够得到 [3] 中旋转向量的方向。

    正常情况下一般如同 [4] 一样,从 (mathbf{C}mathbf{C}^T=mathbf{I}) 两边对时间取微分做;而不是同 [3] 一样,从 (mathbf{C}^Tmathbf{C}=mathbf{I}) 做。

    参考文献

    [1] Forster, Christian, Luca Carlone, Frank Dellaert, and Davide Scaramuzza. "On-Manifold Preintegration for Real-Time Visual--Inertial Odometry." IEEE Transactions on Robotics 33, no. 1 (2016): 1-21.

    [2] Barfoot, Timothy D. State Estimation for Robotics. Cambridge University Press, 2017.

    [3] Sola, Joan. "Quaternion kinematics for the error-state KF." Laboratoire dAnalyse et dArchitecture des Systemes-Centre national de la recherche scientifique (LAAS-CNRS), Toulouse, France, Tech. Rep (2012).

    [4] 视觉SLAM十四讲.

  • 相关阅读:
    [CF1398A-E] Codeforces Round 93
    bzoj3758 数数和bzoj3798 特殊的质数
    P4234 最小差值生成树
    [UOJ274] P6664 温暖会指引我们前行
    P4172 [WC2006]水管局长
    bzoj2959 长跑
    bzoj4998 星球联盟(lct+并查集维护动态双连通性)
    P1501 [国家集训队]Tree II
    link-cut-tree
    fhq-treap,splay 模板
  • 原文地址:https://www.cnblogs.com/JingeTU/p/11332513.html
Copyright © 2011-2022 走看看