BetaFlight深入传感设计之六:四元数计算方法
Posted lida2003
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BetaFlight深入传感设计之六:四元数计算方法相关的知识,希望对你有一定的参考价值。
BetaFlight深入传感设计之六:四元数计算方法
BetaFlight和iNavFlight都是出自CleanFlight分支,两者的侧重点不太一样。从四元数应用的角度来看,iNav不仅代码比较完整,且对四元数操作进行了相应的数学逻辑封装。
我们这里针对四元数的应用,结合代码进行一次整理和理解。
1. 四元数理论
1.1 定义
- 矢量式
Q → = q 0 + q → \\overrightarrowQ = q_0 + \\overrightarrowq Q=q0+q
- 复数式
Q → = q 0 + q 1 ⋅ i + q 2 ⋅ j + q 3 ⋅ k \\overrightarrowQ = q_0 + q_1 \\cdot i + q_2 \\cdot j + q_3 \\cdot k Q=q0+q1⋅i+q2⋅j+q3⋅k
注:高中课本的复数就是超复数的一种特殊情况,其中 q 2 = q 3 = 0 q_2 = q_3 = 0 q2=q3=0。
- 三角式
Q → = c o s θ 2 + u → s i n θ 2 \\overrightarrowQ = cos \\cfrac\\theta2 + \\overrightarrowu sin \\cfrac\\theta2 Q=cos2θ+usin2θ
1.2 基本运算
1.2.1 矢量加减
P → ± Q → = ( p 0 + p 1 ⋅ i + p 2 ⋅ j + p 3 ⋅ k ) ± ( q 0 + q 1 ⋅ i + q 2 ⋅ j + q 3 ⋅ k ) = ( p 0 ± q 0 ) + ( p 1 ± q 1 ) ⋅ i + ( p 2 ± q 2 ) ⋅ j + ( p 3 ± q 3 ) ⋅ k \\overrightarrowP \\pm \\overrightarrowQ = (p_0 + p_1 \\cdot i + p_2 \\cdot j + p_3 \\cdot k) \\pm (q_0 + q_1 \\cdot i + q_2 \\cdot j + q_3 \\cdot k) = (p_0 \\pm q_0) + (p_1 \\pm q_1) \\cdot i + (p_2 \\pm q_2) \\cdot j + (p_3 \\pm q_3) \\cdot k P±Q=(p0+p1⋅i+p2⋅j+p3⋅k)±(q0+q1⋅i+q2⋅j+q3⋅k)=(p0±q0)+(p1±q1)⋅i+(p2±q2)⋅j+(p3±q3)⋅k
1.2.2 标量乘法
a ⋅ Q → = a ⋅ q 0 + a ⋅ q 1 ⋅ i + a ⋅ q 2 ⋅ j + a ⋅ q 3 ⋅ k a \\cdot \\overrightarrowQ = a \\cdot q_0 + a \\cdot q_1 \\cdot i + a \\cdot q_2 \\cdot j + a \\cdot q_3 \\cdot k a⋅Q=a⋅q0+a⋅q1⋅i+a⋅q2⋅j+a⋅q3⋅k
1.3 矢量点叉乘
1.3.1 矢量点乘
P → ⋅ Q → = ∣ P ∣ ∣ Q ∣ c o s θ P Q \\overrightarrowP \\cdot \\overrightarrowQ = \\rvert P \\rvert \\rvert Q \\rvert cos \\theta_PQ P⋅Q=∣P∣∣Q∣cosθPQ
P
→
⋅
Q
→
=
(
p
0
+
p
1
⋅
i
+
p
2
⋅
j
+
p
3
⋅
k
)
⋅
(
q
0
+
q
1
⋅
i
+
q
2
⋅
j
+
q
3
⋅
k
)
=
p
0
q
0
+
p
1
q
1
+
p
2
q
2
+
p
3
q
3
\\overrightarrowP \\cdot \\overrightarrowQ = (p_0 + p_1 \\cdot i + p_2 \\cdot j + p_3 \\cdot k) \\cdot (q_0 + q_1 \\cdot i + q_2 \\cdot j + q_3 \\cdot k) = p_0 q_0 + p_1 q_1 + p_2 q_2 + p_3 q_3
P⋅Q=(p0+p1⋅i+p2 以上是关于BetaFlight深入传感设计之六:四元数计算方法的主要内容,如果未能解决你的问题,请参考以下文章