quaternion Jacobian

该文详细介绍了四元数在表示三维旋转中的应用,包括四元数的构造、乘法规则以及左右乘的区别。文章讨论了在优化过程中如何处理四元数的约束,提出了加法运算符`⊞`以及对应的雅克比矩阵,分别给出了左乘和右乘的加法雅克比矩阵表达式。此外,还定义了四元数误差计算及其雅克比矩阵,用于估计四元数之间的误差。
摘要由CSDN通过智能技术生成

Quaternion

  • q = [ w , x , y , z ] {q = [w,x,y,z]} q=[w,x,y,z] 其中, w w w为实部, x , y , z {x,y,z} x,y,z为虚部
  • 4维表示3维旋转,故Pose 7维,实际6维度。对于继承ceres:: LocalParameterization
    • virtual int GlobalSize() const { return 7; }
    • virtual int LocalSize() const { return 6; }
  • Eigen 四元数构造 inline Quaternion(const Scalar& w, const Scalar& x, const Scalar& y, const Scalar& z) : m_coeffs(x, y, z, w){}
    • 构造时, w w w 在前
    • 存储时, w w w 在后
  • 四元数乘积:
    • p ⊗ q = [ p ] L q = [ q ] R p {p \otimes q = [p]_{L}q = [q]_{R}p} pq=[p]Lq=[q]Rp
    • 由于 w 在前和后,对于左乘和右乘矩阵是不一样的,因此:
    • 在这里插入图片描述

四元数左右乘求解 Jacobian

  • 四元数表示旋转的空间维度是3,本身的维度为4,因此需要加入模为1的约束。在最优化时,如果对这四个维度都增加需要对四元数增加一个微小增量,会打破这个约束。最优方法是在流行空间进行优化,此时增量存在于正切空间(维度是3)。我们不断修正这个增量,从而得到修正后的四元数和cost function。这里定义一个广义的加 ⊞ {\boxplus} ,同时也需要对增量求导。
    • 左乘:
      • 加法 oplus
        • q ′ = q ⊞ Δ q = δ q ⊗ q {q'=q \boxplus \Delta q = \delta q \otimes q} q=qΔq=δqq
          • 其中, Δ q \Delta q Δq 是三维向量,我们定义的扰动叠加在单位四元数 q q q 的左边
          • Δ q = [ w 1 , w 2 , w 3 ] T {\Delta q = [w_1,w_2,w_3]^T} Δq=[w1,w2,w3]T
          • δ q = e x p ( [ 1 2 Δ q 0 ] ) = [ Δ q ∣ ∣ Δ q ∣ ∣ sin ⁡ ∣ ∣ Δ q ∣ ∣ 2 cos ⁡ ∣ ∣ Δ q ∣ ∣ 2 ] {\delta q = exp(\begin{bmatrix} \frac{1}{2}\Delta q \\ 0 \end{bmatrix}) = \begin{bmatrix} \frac{\Delta q}{||\Delta q||} \sin \frac{||\Delta q||}{2} \\ \cos{\frac{||\Delta q||}{2} } \end{bmatrix} } δq=exp([21Δq0])=[∣∣Δq∣∣Δqsin2∣∣Δq∣∣cos2∣∣Δq∣∣]
        • δ q ≈ [ 1 2 Δ q 0 ] {\delta q \approx \begin{bmatrix} \frac{1}{2}\Delta q \\ 0 \end{bmatrix}} δq[21Δq0]
      • 加法雅克比 oplusJacobian
        • q ′ = q + J 4 × 3 Δ q {q'=q + J_{4 \times 3} \Delta q} q=q+J4×3Δq
        • J 4 × 3 = d q ⃗ d v ⃗ = ∂ q ⊞ Δ q ∂ Δ q ∣ Δ q = 0 = ∂ δ q ⊗ q ∂ Δ q ∣ Δ q = 0 = ∂ δ q ⊗ q ∂ δ q ∂ δ q ∂ Δ q ∣ Δ q = 0 = 1 2 [ q ] R [ 1 0 0 0 1 0 0 0 1 0 0 0 ] = [ 1 2 [ q ] R ] c 1 : c 3 {J_{4\times3}= \frac{d \vec{q}}{d \vec{v}} = \left.\begin{matrix}\frac{\partial q \boxplus \Delta q}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0} = \left.\begin{matrix}\frac{\partial \delta q \otimes q}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0} = \left.\begin{matrix}\frac{\partial \delta q \otimes q}{\partial \delta q} \frac{\partial \delta q }{\partial \Delta q} \end{matrix}\right| _{\Delta q=0} = \frac{1}{2} [q]_R \begin{bmatrix} 1 & 0 &0 \\ 0& 1 &0 \\ 0& 0& 1\\ 0& 0 & 0\end{bmatrix} = [\frac{1}{2}[q]_R]_{c1:c3}} J4×3=dv dq =ΔqqΔq Δq=0=Δqδqq Δq=0=δqδqqΔqδq Δq=0=21[q]R 100001000010 =[21[q]R]c1:c3
    • 右乘:
      • 加法 oplus
        • q ′ = q ⊞ Δ q = q ⊗ δ q {q'=q \boxplus \Delta q = q \otimes \delta q } q=qΔq=qδq
        • δ q ≈ [ 1 2 Δ q 0 ] {\delta q \approx \begin{bmatrix} \frac{1}{2}\Delta q \\ 0 \end{bmatrix}} δq[21Δq0]
      • 加法雅克比 oplusJacobian
        • q ′ = q + J 4 × 3 Δ q {q'=q + J_{4 \times 3} \Delta q} q=q+J4×3Δq
        • J 4 × 3 = d q ⃗ d v ⃗ = ∂ q ⊞ Δ q ∂ Δ q ∣ Δ q = 0 = ∂ q ⊗ δ q ∂ Δ q ∣ Δ q = 0 = ∂ q ⊗ δ q ∂ δ q ∂ δ q ∂ Δ q ∣ Δ q = 0 = 1 2 [ q ] L [ 1 0 0 0 1 0 0 0 1 0 0 0 ] = [ 1 2 [ q ] L ] c 1 : c 3 {J_{4\times3}= \frac{d \vec{q}}{d \vec{v}} = \left.\begin{matrix}\frac{\partial q \boxplus \Delta q}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0} = \left.\begin{matrix}\frac{\partial q \otimes \delta q}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0} = \left.\begin{matrix}\frac{\partial q \otimes \delta q}{\partial \delta q} \frac{\partial \delta q }{\partial \Delta q} \end{matrix}\right| _{\Delta q=0} = \frac{1}{2} [q]_L \begin{bmatrix} 1 & 0 &0 \\ 0& 1 &0 \\ 0& 0& 1\\ 0& 0 & 0\end{bmatrix} = [\frac{1}{2}[q]_L]_{c1:c3}} J4×3=dv dq =ΔqqΔq Δq=0=Δqqδq Δq=0=δqqδqΔqδq Δq=0=21[q]L 100001000010 =[21[q]L]c1:c3
  • quaternion error
    • 给定两个四元数 p , q {p,q} p,q p p p 作为真值, q q q 作为估计值,需估计他们之间的误差,这是可定义误差为:
    • e ( q ) = 2 [ p ⊗ q − 1 ] r 1 : r 3 ≈ 2 [ 1 2 Δ e 1 ] r 1 : r 3 = Δ e {e(q)=2[p \otimes q^{-1}]_{r_1:r_3}\approx 2 \begin{bmatrix} \frac{1}{2}\Delta e \\ 1 \end{bmatrix}_{r_1:r_3} = \Delta e} e(q)=2[pq1]r1:r32[21Δe1]r1:r3=Δe
    • 求解雅克比:
      • e ( q ⊞ Δ q ) ≈ e ( q ) + J 3 × 3 Δ q {e(q \boxplus \Delta q) \approx e(q) + J_{3 \times 3} \Delta q } e(qΔq)e(q)+J3×3Δq
      • J 3 × 3 = ∂ q ⊞ Δ q ∂ Δ q ∣ Δ q = 0 = ∂ 2 [ p ⊗ ( δ q ⊗ q ) − 1 ] r 1 : r 3 ∂ Δ q ∣ Δ q = 0 {J_{3\times3}= \left.\begin{matrix}\frac{\partial q \boxplus \Delta q}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0} = \left.\begin{matrix}\frac{\partial 2[p \otimes(\delta q \otimes q)^{-1}]_{r_1:r_3}}{\partial \Delta q}\end{matrix}\right| _{\Delta q=0}} J3×3=ΔqqΔq Δq=0=Δq2[p(δqq)1]r1:r3 Δq=0 左乘
      • 也可以右乘。

Quaternion and Rotation Matrix

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值