欧拉角速度与角速度的关系推导——欧拉运动方程
最近研究欧拉角速度与角速度之间的关系,特别折磨,网上的资料要不就是地理学的进动——章动——自转那一套欧拉角与角速度的关系,要不就是陀螺仪那一套欧拉角与角速度的关系,不具有普遍性,因此在大干三天后,将自己的心得写上来供大家参考。
欧拉角
欧拉角的定义不再赘述,简单来说它是确定定点转动刚体位置的3个一组独立角参量。这个东西坏就坏在它有太多种了。绕轴转动的顺序不同(如x-y-z和x-z-y),绕轴转动的类型不同(指绕惯性坐标系x-y-z或刚体固连坐标系x-y’-z’‘),两次转动绕同一轴如(z-x’-z’‘)等等,都会产生不同的欧拉角。而且不同学科不同场合使用的欧拉角不同,甚至同一欧拉角的俗称也不同,带来了非常大的不便。在机器人学中,常用的是以下两种欧拉角:
RPY角 :指绕惯性坐标系旋转(即绕的轴在整个旋转中是固定不变的),依次绕X轴(roll角),Y轴(pitch角),Z轴(yaw角)进行旋转。
ZYX角:指绕刚体固连坐标系旋转(即绕的轴会随着旋转变化而变化),依次绕z轴(yaw角),旋转后的y’轴(pitch角),两次旋转后的x’‘轴(roll)角进行旋转。
注意,这两种旋转是完全等价的,即若roll,pitch,yaw取相同的值,按这两种过程进行旋转,得到的结果相同。
在一些设计仿真软件(如adams)中,它们的Eular Angel指的是ZYZ角,即绕刚体固连系的z轴,y’轴,z’'轴进行旋转。
角速度
角速度很简单,初中生都知道。但是具体使用起来却容易出错。因为角速度有两种表示方式,一种表示在惯性坐标系,为全局角速度。常用在机器人运动学求解等领域。另一种表示在刚体固连坐标系,为随体角速度。常用在陀螺仪、惯导等领域。这两种角速度在于欧拉角之间进行转换时,思路是不同的。
全局角速度与ZYX欧拉角速率之间的转换
角速度w是表示在惯性坐标系的,可分解为
w
=
w
x
i
+
w
y
j
+
w
z
k
w=w_{x}i+w_{y}j+w_{z}k
w=wxi+wyj+wzk
同时,有可以将它分解到刚体固连坐标系三次旋转的转轴上:
w
=
d
r
⋅
e
1
+
d
p
⋅
e
2
+
d
y
⋅
e
3
w=dr·e_{1}+dp·e_{2}+dy·e_{3}
w=dr⋅e1+dp⋅e2+dy⋅e3
dr、dp、dy即为roll、pitch、yaw角速度的值.
(1)首先,绕着固连系z轴(也是惯性系z轴)旋转dy完成了第一次旋转,其值为
d
y
⋅
e
3
=
[
1
0
0
0
1
0
0
0
1
]
⋅
[
d
r
0
0
]
dy·e_{3}=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{array}\right] \cdot\left[\begin{array}{c} dr \\ 0 \\ 0 \end{array}\right]
dy⋅e3=⎣⎡100010001⎦⎤⋅⎣⎡dr00⎦⎤
(2)其次,绕着固连系(这里的固连系并非狭义上的固连系,而是值进行过一次roll旋转的坐标系,注意是roll旋转而不是上文提到的dr旋转)的y’轴进行第二次旋转,旋转量为dp,固连系的y’轴与惯性系的y轴之间存在
R
y
a
w
R_{yaw}
Ryaw的变换,即
d
p
⋅
e
2
=
[
c
o
s
(
y
a
w
)
−
s
i
n
(
y
a
w
)
0
s
i
n
(
y
a
w
)
c
o
s
(
y
a
w
)
0
0
0
1
]
⋅
[
0
d
p
0
]
dp·e_{2}=\left[\begin{array}{ccc} cos(yaw) & -sin(yaw) & 0 \\ sin(yaw) & cos(yaw) & 0 \\ 0 & 0 & 1 \\ \end{array}\right] \cdot\left[\begin{array}{c} 0 \\ dp \\ 0 \end{array}\right]
dp⋅e2=⎣⎡cos(yaw)sin(yaw)0−sin(yaw)cos(yaw)0001⎦⎤⋅⎣⎡0dp0⎦⎤
(3) 最后,绕着固连系的x’‘轴轴旋转dr。此时的x’'轴和惯性系的x轴之间存在
R
y
a
w
R
p
i
t
c
h
R_{yaw}R_{pitch}
RyawRpitch的变换,即
d
p
⋅
e
2
=
[
c
o
s
(
y
a
w
)
−
s
i
n
(
y
a
w
)
0
s
i
n
(
y
a
w
)
c
o
s
(
y
a
w
)
0
0
0
1
]
[
c
o
s
(
p
i
t
c
h
)
0
s
i
n
(
p
i
t
c
h
)
1
0
−
s
i
n
(
p
i
t
c
h
)
0
c
o
s
(
p
i
t
c
h
)
]
⋅
[
0
0
d
y
]
dp·e_{2}=\left[\begin{array}{ccc} cos(yaw) & -sin(yaw) & 0 \\ sin(yaw) & cos(yaw) & 0 \\ 0 & 0 & 1 \\ \end{array}\right] \left[\begin{array}{ccc} cos(pitch) & 0 & sin(pitch) \\ & 1 & 0 \\ -sin(pitch) & 0 & cos(pitch) \\ \end{array}\right] \cdot\left[\begin{array}{c} 0 \\ 0 \\ dy \end{array}\right]
dp⋅e2=⎣⎡cos(yaw)sin(yaw)0−sin(yaw)cos(yaw)0001⎦⎤⎣⎡cos(pitch)−sin(pitch)010sin(pitch)0cos(pitch)⎦⎤⋅⎣⎡00dy⎦⎤
将三者相加,就可得到角速度与欧拉角速度率的关系:
换,即
[
w
x
w
y
w
z
]
=
[
c
o
s
(
p
i
t
c
h
)
∗
c
o
s
(
y
a
w
)
−
s
i
n
(
y
a
w
)
0
c
o
s
(
p
i
t
c
h
)
∗
s
i
n
(
y
a
w
)
c
o
s
(
y
a
w
)
0
−
s
i
n
(
p
i
t
c
h
)
0
1
]
⋅
[
d
r
d
p
d
y
]
\left[\begin{array}{c} wx \\ wy \\ wz \end{array}\right]=\left[\begin{array}{ccc} cos(pitch)*cos(yaw) & -sin(yaw) & 0 \\ cos(pitch)*sin(yaw) & cos(yaw) & 0 \\ -sin(pitch) & 0 & 1 \\ \end{array}\right] \cdot\left[\begin{array}{c} dr \\ dp \\ dy \end{array}\right]
⎣⎡wxwywz⎦⎤=⎣⎡cos(pitch)∗cos(yaw)cos(pitch)∗sin(yaw)−sin(pitch)−sin(yaw)cos(yaw)0001⎦⎤⋅⎣⎡drdpdy⎦⎤
若要求得随体角速度和ZYX角速度的关系,方法与上面类似,但要注意顺序是反过来的,即dr是绕随体坐标系中的x轴,无需进行变换,dp需要进行
R
y
a
w
R_{yaw}
Ryaw的逆变换等等。结果如下:
w
=
d
r
+
R
r
o
l
l
′
⋅
d
p
+
R
r
o
l
l
′
R
p
i
t
c
h
′
⋅
d
y
w=dr+ R_{roll}'·dp+R_{roll}'R_{pitch}'·dy
w=dr+Rroll′⋅dp+Rroll′Rpitch′⋅dy
即:
[
w
x
w
y
w
z
]
=
[
1
0
−
s
i
n
(
p
i
t
c
h
)
0
c
o
s
(
r
o
l
l
)
c
o
s
(
p
i
t
c
h
)
∗
s
i
n
(
r
o
l
l
)
0
−
s
i
n
(
r
o
l
l
)
c
o
s
(
p
i
t
c
h
)
∗
c
o
s
(
r
o
l
l
)
]
⋅
[
d
r
d
p
d
y
]
\left[\begin{array}{c} wx \\ wy \\ wz \end{array}\right]=\left[\begin{array}{ccc} 1 & 0 & -sin(pitch) \\ 0 & cos(roll) & cos(pitch)*sin(roll) \\ 0 & -sin(roll) & cos(pitch)*cos(roll) \\ \end{array}\right] \cdot\left[\begin{array}{c} dr \\ dp \\ dy \end{array}\right]
⎣⎡wxwywz⎦⎤=⎣⎡1000cos(roll)−sin(roll)−sin(pitch)cos(pitch)∗sin(roll)cos(pitch)∗cos(roll)⎦⎤⋅⎣⎡drdpdy⎦⎤
对于全局RPY角,由于其与ZYX角等效,结果完全相同,推导方法也类似。至于其他的欧拉角种类,推导方法也是相似的,朋友们可以自己尝试一下。