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} p⊗q=[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=δq⊗q
- 其中, Δ 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]
-
q
′
=
q
⊞
Δ
q
=
δ
q
⊗
q
{q'=q \boxplus \Delta q = \delta q \otimes q}
q′=q⊞Δq=δq⊗q
- 加法雅克比
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=dvdq=∂Δq∂q⊞Δq Δq=0=∂Δq∂δq⊗q Δq=0=∂δq∂δq⊗q∂Δ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=dvdq=∂Δq∂q⊞Δq Δq=0=∂Δq∂q⊗δq Δq=0=∂δq∂q⊗δ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[p⊗q−1]r1:r3≈2[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=∂Δq∂q⊞Δq Δq=0=∂Δq∂2[p⊗(δq⊗q)−1]r1:r3 Δq=0 左乘
- 也可以右乘。