【飞控】 从零开始建模 (一)-牛顿欧拉方程

无人机建模对新手无疑是个大难题,我需要急需模型帮助我们分析问题,但是却不知从哪开始,毫无头绪,一个月前我也备受困扰。
上知乎查了一下如何对四旋翼飞行器进行精确的数学建模?
得到的是这样的答案

file

我的天!完全看不懂呀,这些公式都是哪来的呀?
查阅资料后发现建模还是有迹可循的,你只需要一点点物理知识即可。ok,让我们忘记复杂的公式从零开始。

0.建模的目的

不少同学容易把整个控制系统的搭建和被控对象建模搞混,我们常说的建模通常都是对被控对象建模,建模后再进行控制系统搭建,控制系统除了有模型,还有动力分配,状态更新的过程。

file

我们先来讲讲建模,建模的目的是希望得到模型的受力分析,我们给它一个力,它会出现什么状态

1.从F=ma开始

所以我们很早其实就接触过建模了,翻开你从初中物理。

$$F=ma$$

这个公式其实就可以代表一个模型,假设有一个理想的小车,你告诉的它的质量m,根据这个公式我就知道我给一个力F,会产生一个a,有了这个a根据下面的公式你就可以知道小车的速度和位移,我的天!只要我们知道了小车的质量我们几乎知道了小车的一切。

$$\begin{aligned} & v=v_0+at \\ & s=v_0t+1/2at^2 \end{aligned}$$

所以建模是一个跟力有关的过程,你看其实很简单吧。

2.平移过程

对四旋翼建模也是同样的思路,只不过四旋翼有三个运动方向,前,右,上。

$$F_{all}=m\left[\begin{matrix} a_x \\ a_y \\ a_z \end{matrix}\right]$$

很好理解吧,有个地方注意一下,这里的加速度a是相对于地理坐标系的,那么飞机受到的有哪些力呢?我们先只考虑最重要的重力,还有四个电机产生的力f1,f2,f3,f4,如果我们假设z轴向上为正,可以得到:

$$\left[\begin{matrix} 0 \\0 \\f_1+f_2+f_3+f_4 \end{matrix}\right]-\left[\begin{matrix} 0 \\0 \\mg \end{matrix}\right]=m\left[\begin{matrix} a_x \\a_y \\a_z \end{matrix}\right]$$

这样是不是很简单,四个电机的力都是在z轴方向的,重力也是z轴方向的,但是电机产生的力是机体坐标系下的,我们分析的加速度是在地理坐标系下的所有我们需要加一步坐标变换,还记得我们的好朋友机体坐标系转地理坐标系的旋转矩阵吗?(c表示cos,s表示sin)

$$C_b^n=\left[\begin{matrix} c\psi c\theta & c\psi s\theta s\phi-s\psi c\phi & c\psi s\theta c\phi +s\psi s\phi\\ s\psi c\theta & s\psi s\theta s\phi + c\phi c\psi & s\psi s\theta c\phi -c\psi s\phi \\ -s\theta & c\theta s\phi & c\theta c\phi \end{matrix} \right]$$$$C_b^n\left[\begin{matrix} 0 \\0 \\f_1+f_2+f_3+f_4 \end{matrix}\right]-\left[\begin{matrix} 0 \\0 \\mg \end{matrix}\right]=m\left[\begin{matrix} a_x \\a_y \\a_z \end{matrix}\right]$$

然后我们就得到书上的公式了,什么?不太像!,简写一下就一样了,你看变成一个专业的微分方程了。

$$m\ddot{x}=C_b^n\left[\begin{matrix} 0 \\0 \\u_1 \end{matrix}\right]-\left[\begin{matrix} 0 \\0 \\mg \end{matrix}\right]$$

聪明的你可以继续得到

$$\begin{aligned} & m\ddot{x} = (\cos\phi\sin\theta\cos\psi+\sin\phi\sin\psi)u_1 \\ & m\ddot{y} = (\cos\phi\sin\theta\sin\psi-\sin\phi\cos\psi)u_1 \\ & m\ddot{z} = \cos\phi\cos\theta*u_1-mg \end{aligned}$$

搞定了,看吧,建模本质上还是个F=ma

3.旋转过程

这个移动过程就是这么简单,但是四旋翼不光能移动还能旋转那可怎么办?这个旋转过程就需要翻开你的大学物理了,记住关键词刚体的旋转,搜索它所有的问题都能迎刃而解。
物体如何旋转跟力矩有关,力矩与力F和距离l有如下公式:
$$M=F*l$$
(这里的力矩与机型有关)如果是‘十’字型的飞机
file
我们通常认为机头方向为x轴正方向,x,y,z轴的力矩为

$$\left[\begin{matrix} d(f_2-f_4) \\ d(f_1-f_3)\\ b(f_1-f_2+f_3-f_4) \end{matrix}\right]$$

d是机体中心到每个螺旋桨的距离,b是一个系数
具体推导过程参考

《Quadcopter Dynamics, Simulation, and Control》

进而根据欧拉方程

$$M=J\varepsilon+\omega\times{J}\omega$$

其中J是惯量矩阵,ω是角速度,ε是角加速度,这里的运算是叉乘

通常我们假设四旋翼进行小角度运动,那么角速度为:

$$\left[\begin{matrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{matrix}\right]$$

所以角加速度为:

$$\left[\begin{matrix} \ddot{\phi} \\ \ddot{\theta} \\ \ddot{\psi} \end{matrix}\right]$$

惯量矩阵为:

$$\left[\begin{matrix} J_{xx} & 0 &0 \\ 0 & J_{yy} &0 \\ 0 & 0 &J_{zz} \end{matrix}\right]$$

整理上述公式可得:

$$\begin{aligned} & J_{xx}\ddot{\phi} = \dot{\theta}\dot{\psi}(J_{yy}-J_{zz})+d(f_2-f_4) \\ & J_{yy}\ddot{\theta} = \dot{\phi}\dot{\psi(J_{zz}-J_{xx})}+d(f_1-f_3) \\ & J_{zz}\ddot{\psi} = \dot{\theta}\dot{\phi}(J_{xx}-J_{yy})+b(f_1-f_2+f_3-f_4) \end{aligned}$$

4.牛顿-欧拉方程

可以看到建模的其实就是为了得到输入的力与加速度的关系,通过牛顿方程可以得到平动的加速度,通过欧拉方程可以得到角加速度,所以这种建模方法也叫牛顿-欧拉方程

$$\begin{aligned} & m\ddot{x} = (\cos\phi\sin\theta\cos\psi+\sin\phi\sin\psi)u_1 \\ & m\ddot{y} = (\cos\phi\sin\theta\sin\psi-\sin\phi\cos\psi)u_1 \\ & m\ddot{z} = \cos\phi\cos\theta*u_1-mg\\ & J_{xx}\ddot{\phi} = \dot{\theta}\dot{\psi}(J_{yy}-J_{zz})+d(f_2-f_4) \\ & J_{yy}\ddot{\theta} = \dot{\phi}\dot{\psi(J_{zz}-J_{xx})}+d(f_1-f_3) \\ & J_{zz}\ddot{\psi} = \dot{\theta}\dot{\phi}(J_{xx}-J_{yy})+b(f_1-f_2+f_3-f_4) \end{aligned}$$

建模到这里已经完成了大部分工作,现在还剩下两个问题

  • 电机产生的力f1,f2,f3,f4怎么求
  • 这个方程里有很多参数如何确定,比如系数b,转动惯量矩阵等等

电机产生的力这部分叫做动力系统建模,是跟你的电机,电调有关,通常可以认为

$$f=C_Tw^2$$

C_T为升力系数,w为螺旋桨的转速,带入模型中可得

$$\begin{aligned} & m\ddot{x} = (\cos\phi\sin\theta\cos\psi+\sin\phi\sin\psi)C_T(w_1^2+w_2^2+w_3^2+w_4^2) \\ & m\ddot{y} = (\cos\phi\sin\theta\sin\psi-\sin\phi\cos\psi)C_T(w_1^2+w_2^2+w_3^2+w_4^2) \\ & m\ddot{z} = \cos\phi\cos\theta*C_T(w_1^2+w_2^2+w_3^2+w_4^2)-mg\\ & J_{xx}\ddot{\phi} = \dot{\theta}\dot{\psi}(J_{yy}-J_{zz})+dC_T(w_2^2-w_4^2) \\ & J_{yy}\ddot{\theta} = \dot{\phi}\dot{\psi(J_{zz}-J_{xx})}+dC_T(w_1^2-w_3^2) \\ & J_{zz}\ddot{\psi} = \dot{\theta}\dot{\phi}(J_{xx}-J_{yy})+C_M(w_1^2-w_2^2+w_3^2-w_4^2) \end{aligned}$$

转动惯量J,升力系数C_T,扭力系数C_M,要确定模型里这些未知的参数需要用到系统辨识的相关知识。但是目前我们可以使用一种简单的方法来确定。
北航可靠飞行控制研究组飞行测评软件
只要我们选择想要的机型
file
就可以得到想要的参数
file

5.总结

对四旋翼进行建模,使用了刚体运动的知识,质心平动用牛顿方程描述,绕质心的转动用欧拉方程定义。最后得到一组牛顿欧拉方程,通过系统辨识等工具得到方程中的参数,有了方程,有了参数,只要给我电机产生的力就可以得到加速度和角加速度了。
但是我们想要的状态不仅仅包括加速度,我们还想得到速度,位置,角速度,姿态等信息。
file
下一篇为大家介绍,状态更新。
欢迎加我的个人微信交流,听说加我的人不用建模也有对象哦^_^
file
关注微信公众号【zinghd的思考】,回复【建模】为您提供超经典的建模资料。
file