四元数求导

四元数微分学在误差状态卡尔曼滤波中的应用

q=q0+q1i+q2j+q3k{q}=q_{0}+q_{1} i+q_{2} j+q_{3} kq=q0+q1i+q2j+q3k

q˙=q˙0+q˙1i+q˙2j+q˙3k\dot{q}=\dot{q}_{0}+\dot{q}_{1} i+\dot{q}_{2} j+\dot{q}_{3} kq˙=q˙0+q˙1i+q˙2j+q˙3k

lim⁡t→0q(t+δt)−q(t)δt\quad\lim _{t \rightarrow 0} \frac{\mathrm{q}(t+\delta t)-\mathrm{q}(t)}{\delta t}limt0δtq(t+δt)q(t)

=lim⁡t→0δq⊗q(t)−q(t)δt=\lim _{t \rightarrow 0} \frac{\delta \mathbf{q} \otimes \mathbf{q}(t)-\mathbf{q}(t)}{\delta t}=limt0δtδqq(t)q(t)

=lim⁡t→0(δq−1)⊗q(t)δt=\lim _{t \rightarrow 0} \frac{(\delta \mathbf{q}-1) \otimes \mathbf{q}(t)}{\delta t}=limt0δt(δq1)q(t)

=lim⁡t→0[0δθ2]⊗q(t)δt=\lim _{t \rightarrow 0}\frac{\left[\begin{array}{l}0 \\ \frac{\delta \theta}{2}\end{array}\right] \otimes \mathbf{q}(t)}{\delta t}=limt0δt[02δθ]q(t)

ω=lim⁡t→0δθδt\omega=\lim _{t \rightarrow 0} \frac{\delta \theta}{\delta t}ω=limt0δtδθ

ω=[0ωxωyωz]⊤\omega=\begin{bmatrix} 0 & \omega_{x} & \omega_{y} & \omega_{z}\end{bmatrix}^\topω=[0ωxωyωz]

q˙=12[0ω]⊗q=12Ω(ω)q\dot{q}=\frac{1}{2}\left[\begin{array}{c}0 \\ \omega\end{array}\right] \otimes \mathbf{q}=\frac{1}{2} \Omega(\omega) qq˙=21[0ω]q=21Ω(ω)q

⌊ω]×=[0−ωzωyωz0−ωx−ωyωx0]\lfloor\omega]_{\times}=\left[\begin{array}{ccc}0 & -\omega_{z} & \omega_{y} \\ \omega_{z} & 0 & -\omega_{x} \\ -\omega_{y} & \omega_{x} & 0\end{array}\right]ω]×=0ωzωyωz0ωxωyωx0

Ω(ω)=[−⌊ω⌋×ω−ωT0]=[0ωz−ωyωx−ωz0ωxωyωy−ωx0ωz−ωx−ωy−ωz0]\Omega(\omega)=\left[\begin{array}{cc}-\lfloor\omega\rfloor_{\times} & \omega \\ -\omega^{T} & 0\end{array}\right]=\left[\begin{array}{cccc}0 & \omega_{z} & -\omega_{y} & \omega_{x} \\ -\omega_{z} & 0 & \omega_{x} & \omega_{y} \\ \omega_{y} & -\omega_{x} & 0 & \omega_{z} \\ -\omega_{x} & -\omega_{y} & -\omega_{z} & 0\end{array}\right]Ω(ω)=[ω×ωTω0]=0ωzωyωxωz0ωxωyωyωx0ωzωxωyωz0

Sola, J., 2017. Quaternion kinematics for the error-state Kalman filter. arXiv preprint arXiv:1711.02508.

### 四元数乘积对其中一个四元数的导数推导 在数学和图形学中,四元数常用于表示旋转。对于两个四元数 $ p $ 和 $ q $ 的乘积 $ pq $,如果需要计算该乘积对其中一个四元数(例如 $ p $)的导数,则可以按照以下方式进行推导。 #### 1. 四元数定义 一个四元数通常表示为: $$ p = a + bi + cj + dk $$ 其中 $ a, b, c, d $ 是实数,$ i, j, k $ 是虚部单位[^1]。 #### 2. 四元数乘法公式 两个四元数 $ p = a + bi + cj + dk $ 和 $ q = e + fi + gj + hk $ 的乘积定义为: $$ pq = (ae - bf - cg - dh) + (af + be + ch - dg)i + (ag - bh + ce + df)j + (ah + bg - cf + de)k $$ 这是一个非交换运算,即 $ pq \neq qp $[^1]。 #### 3. 导数定义 假设 $ p $ 是一个关于某个参数 $ t $ 的函数,即 $ p(t) = a(t) + b(t)i + c(t)j + d(t)k $。那么,四元数乘积 $ pq $ 对 $ p $ 的导数可以通过链式法则来计算。 #### 4. 推导过程 为了求 $ \frac{\partial (pq)}{\partial p} $,我们需要分别对 $ p $ 的每个分量 $ a, b, c, d $ 求偏导数。设 $ q = e + fi + gj + hk $ 是固定的四元数,则有: $$ \frac{\partial (pq)}{\partial p} = \frac{\partial}{\partial p} \left[ (ae - bf - cg - dh) + (af + be + ch - dg)i + (ag - bh + ce + df)j + (ah + bg - cf + de)k \right] $$ 对 $ a, b, c, d $ 分别求导后,结果为: $$ \frac{\partial (pq)}{\partial p} = q $$ 这是因为 $ q $ 在右侧固定不变,而 $ p $ 的变化仅影响其线性项[^1]。 #### 5. 结果验证 从推导中可以看出,四元数乘积 $ pq $ 对 $ p $ 的导数实际上是 $ q $。这与矩阵微分中的类似规则一致,即当右乘矩阵固定时,导数等于该矩阵[^2]。 #### 6. 注意事项 - 如果需要对 $ q $ 求导,则结果为 $ p $。 - 如果 $ p $ 和 $ q $ 都是关于某个参数的函数,则需要使用全导数公式进行计算[^3]。 ```python # 示例代码:四元数乘法实现 class Quaternion: def __init__(self, a, b, c, d): self.a = a self.b = b self.c = c self.d = d def multiply(self, other): a1, b1, c1, d1 = self.a, self.b, self.c, self.d a2, b2, c2, d2 = other.a, other.b, other.c, other.d return Quaternion( a1*a2 - b1*b2 - c1*c2 - d1*d2, a1*b2 + b1*a2 + c1*d2 - d1*c2, a1*c2 - b1*d2 + c1*a2 + d1*b2, a1*d2 + b1*c2 - c1*b2 + d1*a2 ) # 测试 p = Quaternion(1, 0, 0, 0) q = Quaternion(0, 1, 0, 0) result = p.multiply(q) print(f"p * q = {result.a} + {result.b}i + {result.c}j + {result.d}k") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值