[飞控] 建模进阶 (一)-陀螺力矩

在从零开始建模系列中,我们用最简单的方式介绍了建模,但是随着我们水平的进步,之前的建模已经满足不了我们了,
所以让我们从新思考一个问题:在飞机发生姿态变化的时候,我们忽略了什么?

电机高速旋转的时候,相当于一个陀螺,陀螺可是一个非常稳定的个体,想象一下你推一下陀螺,陀螺会倒吗?

当然不会,他会继续稳定的旋转。

所以直观上可以很容易理解,想改变陀螺的转轴,并不是一件轻而易举的事情。

因为如果有外力想改变 陀螺转轴的方向,那么会产生一个陀螺力矩来抵抗这种改变 。

陀螺力矩的计算公式:

$$\boldsymbol { M } _ { g y r o } = \boldsymbol { J_{RP} \Omega } \times \boldsymbol { \omega }$$

其中

$$\Omega$$

为螺旋桨角速向量,

$$\omega$$

为电机转轴角速度
(我们可以认为转轴的角速度等于机体角速度)

当我们悬停时,电机的转轴是垂直地面的,但是当我们产生姿态变化时,电机的转轴也会变化,这就会产生陀螺力矩,而这部分力矩在我们之前介绍的建模中被忽略了。

显然我们已经不在是建模初期了,现在之前忽略的东西就要一点一点补回来。

我们就仔细分析一下如何计算陀螺力矩。

根据公式,电机(含螺旋桨)k的陀螺力矩为:

$$J_{RP} \Omega_k \boldsymbol{b_3} \times \boldsymbol{\omega}$$

其中b_3为螺旋桨角速方向,因为在机体坐标系中,电机只有z轴方向有角速度所以, b3为[0,0,1]^T , J{RP} 为电机转子和螺旋桨绕轴的总转动惯量。

因为:

$$\boldsymbol{b_3} \times \boldsymbol{ \omega } = - \boldsymbol{ \omega } \times \boldsymbol{b_3}$$

所以:

$$\boldsymbol { M } _ { g y r o } = \boldsymbol { J_{RP} \omega } \times \boldsymbol { \Omega } = -J_{RP} (\boldsymbol{ \omega } \times \boldsymbol {b_3} ) \Omega_{k}$$

又到了我最讨厌的向量叉乘计算了。你是否也想我一样看见叉乘就头疼不已,好消息,今天给大家介绍一个叉乘计算神器,斜对称矩阵。

一个向量可以通过特定位置的重新排列,变成一个矩阵。

$$\left[ \begin{array} { c } { \omega _ { x } } \\ { \omega _ { y } } \\ { \omega _ { z } } \end{array} \right] \iff \left[ \begin{array} { c c c } { 0 } & { - w_z } & { w_y } \\ { w_z } & { 0 } & { - w_x } \\ { - w_y } & { w_x } & { 0 } \end{array} \right] = \omega ^ \lor $$

计算向量叉乘的时候可以直接用这个矩阵参与运算,就可以把叉乘转换成矩阵乘向量。

所以单个螺旋桨产生的陀螺力矩为:

$$\begin{aligned}\boldsymbol{ \omega } \times \boldsymbol{b_3} & = \boldsymbol { \omega ^ \lor } \boldsymbol{b_3} \\ &= \left[ \begin{array} { c c c } { 0 } & { - w_z } & { w_y } \\ { w_z } & { 0 } & { - w_x } \\ { - w_y } & { w_x } & { 0 } \end{array} \right] \left[ \begin{array} { c } { 0 } \\ { 0 } \\ { 1 } \end{array} \right] \\ &= \left[ \begin{array} { c } { w_y } \\ { -w_x } \\ { 0 } \end{array} \right] \\ \end{aligned}$$

计算到这,我们把单个电机(含螺旋桨)的陀螺力矩,在三个轴上的大小都算出来了。

$$\boldsymbol { M } _ { g y r o } = - J_{RP} \Omega_{k}\left[ \begin{array} { c } { w_y } \\ { -w_x } \\ { 0 } \end{array} \right] $$

还有一个注意点,需要注意电机的旋转方向,这需要结合机体坐标系来进行判断。

如果使用常用的前右下机体坐标系定义,使用十字机型,电机的序号和旋转方向如图。

根据右手定则,机体z轴的旋转正方向为顺时针。
而1号电机为逆时针旋转。
所以当K=1时,螺旋桨角速度为负。

$$\Omega_{k}=-\Omega_{1}\\$$

同理可得3号螺旋桨为负,2,4号螺旋桨为正。
将四个螺旋桨的陀螺力矩相加可得:

$$\left\{ \begin{array} { l } { \tau _ { x } ^ { \prime } = J _ { RP } \omega _ { y } \left( \Omega _ { 1 } - \Omega _ { 2 } + \Omega _ { 3 } - \Omega _ { 4 } \right) } \\ { \tau _ { y } ^ { \prime } = J _ { RP } \omega _ { x } \left( -\Omega _ { 1 } + \Omega _ { 2 } - \Omega _ { 3 } + \Omega _ { 4 } \right) } \\ {\tau _ { z } = 0} \end{array} \right.$$

这个结果跟我们直观理解也是一致的,陀螺力矩来自于陀螺转轴的角速度,在飞机倾斜时,陀螺的转轴发生了变化,于是产生了一个陀螺力矩,但是机体yaw的变化时,电机的转轴不发生改变,所以不产生陀螺力矩。

又搞定一个知识点,美滋滋。我是 zing 一个有趣的飞控算法工程师,我们下期见。