这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 聊聊四轴飞行器的建模分析和控制器设计

共6条 1/1 1 跳转至

聊聊四轴飞行器的建模分析和控制器设计

菜鸟
2019-08-07 19:13:00     打赏

随着无人机价格不断降低,操控性也越来越容易,消费级无人机已经逐渐飞入了寻常百姓家。但是对于消费级无人机的最常见形态——四轴飞行器,它们究竟是怎么打造出来的,绝大部分都不太了解,今天小编分享点技术干货,聊聊四轴飞行器的建模分析和控制器设计问题。smpeizi.com

有关四轴飞行器是否需要建模,笔者认为看各自的需求。比如追求将飞行器飞行功能实现,简单的PID控制算法则不需要建模,实际上,相信大部分做飞行器的都是如此。

还有一小部分,需要以飞行器为载体,在此基础上验证某些高级控制算法,则不可避免的需要对飞行器建模,以此实现基于模型的控制算法设计(常见的就是LQ、滑模)。

商控的控制算法:大部分继承开源飞控而来,因此基本应该都是PID算法。在商控上采用基于模型的控制算法,有个不便之处,就是模型是变化的,用户需要自行调整模型参数(早期接触某家的飞控,可以自行写入飞行器的重量,轴距等参数,从而不需要调整控制参数),相对比较麻烦,基于模型的控制算法的通病就是模型一旦差别较大,控制效果不如意,反而还是PID简单明了。aiidol.com

但是为了达到更高精度的控制性能,建模分析是非常必要的。四轴飞行器是一个欠驱动系统,模型方程是一组非线性方程,给建模和控制器设计带来很大难度,但是可以进行适当简化来实现。

# 建模分析

__四轴飞行器的原理__

四轴飞行器通过调节四个电机的转速实现空间六自由度的运动。设飞行器前方为X轴方向,右侧为Y轴方向,下方为Z轴方向,则无人机的6个自由度分别为:

1. X轴前后运动;

2. Y轴侧向运动;

3. Z轴垂直运动;

4. 滚转运动Roll;

5. 俯仰运动Pitch;

6. 偏航运动Yaw。

X轴和Y轴方向上的运动是由飞行器的Pitch和Roll运动连带产生,因此可以通过4路控制信号实现无人机的6个自由度的控制。3sjtw.com

具体的飞行原理如下图所示:图(A)是飞行器的Roll运动示意图,通过将4号电机和2号电机分别加速、减速,使得飞行器在绕X轴方向上产生转矩,从而产生Roll运动,并连带产生Y方向上的运动。

同理,1号电机加速,3号电机减速,飞行器则会产生Pitch运动和X方向上的运动,如图(B)。电机1号、3号与电机2号、4号的转向相反。通过调节这两组电机的转速差,就可生绕Z轴的扭矩,控制飞行器的偏航运动,如图(C)。

Z方向的高度控制则通过调节4个电机的整体转速实现,如图(D)




__变量定义__




坐标系定义如图所示,机体坐标系b和全局坐标系(NED)G。假设:

Ø 四轴飞行器为一个刚体、在飞行时忽略机体形变和弹性振动;

Ø 飞行器的外形与质量分布是均匀对称的;

Ø 忽略外部干扰、忽略旋翼旋转时气流之间的相互干扰;

Ø 飞行器在飞行过程中机体质量及转动惯量不变。

变量如下:




__转换矩阵__

全局坐标系的位置与机体系测量的位置之间需要通过一个转换矩阵进行转换。




由于角速度是机体系下定义测量的,而欧拉角则是全局坐标系下的,所以可以通过上面的转换矩阵进行变换,得到角速度与欧拉角变化率之间的关系,如下图所示。角速度是沿着每个轴旋转的矢量,而欧拉角的变化率则不是。




如果欧拉角认为比较小,在0度附近的话,S矩阵即单位矩阵,也就是说认为角速度约等于欧拉角变化率。

__电机模型__

四轴飞行器一般使用无刷电机,电调接受飞控输出的电机转速指令,然后输出电流给电机,执行转速指令。




先推导电机的转矩与功率之间的关系。假设电机的电阻为0,一般一个飞行器使用同一种电机,所以这里的模型适用4个电机。idiancai.com




接下来是电机转速与推力之间的关系。




其实只用记住结论,转矩与转速的平方成正比关系。

__动力学方程__

__平移__

飞行器的线性运动主要是指在全局坐标系下的,三个轴向的加速度分量之和包括重力加速度、电机的推力、平移运动的阻力。





__旋转__





所得模型:

得到机体系和全局坐标系下的加速度方程。




得到模型后,如何处理呢?

需要模型辨识,简单来说就是要知道每个变量的值。

具体过程不详细描述,介绍几个参数的获取方法。

转动惯量:




电机辨识:

模型的输入是电压,输出螺旋桨转速。




所以近似看成一个一阶环节。

# 如何设计控制器?

在设计导向控制器之前,需要先对电机进行调速控制,说白了就是我让电机一分钟转多少圈,它就得转多少圈(实际不做调速控制时,这个是有误差的)。那接下来如何做呢?

首先是先想办法获得系统的数学模型,建模需要数据,数据又如何获取?获取什么数据?

一般需要一个上位机能够接收数据,并最好能够记录(普通的串口助手、或者做四轴的很多都用匿名上位机等)。在本设计中,我们需要建立电机转速模型,因此输入设为转速指令、输出为实际转速,因此需要获取这两个数据,获得的数据如下图所示:




URev为输入的电机转速指令,YRev中蓝色曲线为由输入指令经量纲变化所转换的转速值,红色曲线为实际的转速值。图中可以清晰的看到输出并未很好的跟踪输入变化。

__1.建立数学模型:__

使用matlab系统辨识工具箱对电机速度模型进行系统辨识,在命令窗口输入:ident。在Matlab的主控窗口中调出系统辨识工具箱,进入工具箱图形交互用户界面。3sjtw.com




在本系统中,因为采样数据是离散的,所以选择时域信号,在Import Data界面选择恰当的输入输出信号,在此处输入变量Input为电机目标转速URev,输出变量Output为电机实际转速YRev,起始时间Starting time可以设置为0,采样间隔是最重要的数据之一,其决定了系统辨识模型的精度,在此处,我们根据实际数据采集周期设置采样时间Sampling interval为0.02ms。点击Import,导入数据。




导入数据后,开始进行辨识参数,先选择模型阶次等。




一般认为电机转速模型为一阶惯性环节,当然也可以选择二阶模型进行对比,模型结构设计完成后,点击Estimate进行估计,看拟合效果。3sjtw.com





蓝色是一阶惯性模型,绿色是二阶模型,两者拟合效果几乎一致,因此为便于编程设计,采用一阶惯性模型参数。




根据输入,经过辨识的模型重新输出,与实际输出进行比较:




模型输出与实际输出比较




电机模型bode图

__2.设计控制器:__

对电机模型采用简单的PI控制

G=k1+k2/s=(k1*s+k2)/s




取k1=0.1,k2=0.1时可以取得良好的性能,有改进效果(模型的幅频特性改变)

对应的bode图为

K1=0.1;k2=0.1




对PI参数进行调整

增大比例系数k1可使转折频率后移

K1=0.5;k2=0.1




积分常数k2对转折频率影响不大,但继续增大k2,幅频特性会上翘,在这个频率点容易震荡。

K1=0.1;k2=0.5




通过参数的选择,对其闭环模型频域的分析,可以大致选定合适的参数。当然,也可以利用simulink搭建仿真,通过阶跃响应曲线,直观的判定控制器性能(时域分析更为直观)。




K1=0.1;k2=0.1

此时,调节时间约为4s,时间较长,且有超调。




K1=0.5;k2=0.1

此时,调节时间约为2s,时间较短,且无超调。




K1=0.1;k2=0.5

此时,调节时间约为4s,时间较长,且超调增大,震荡更为剧烈。




因此最终所选定的控制参数为K1=0.5;k2=0.1

__3.编写嵌入式代码,写入程序中__




助工
2019-08-07 21:20:15     打赏
2楼

很牛逼的分析 


高工
2019-08-09 21:18:14     打赏
3楼

学习学习


工程师
2019-08-11 20:39:09     打赏
4楼

看来很多时候还是得用到数学知识


工程师
2019-08-12 22:22:04     打赏
5楼

数字信号处理


工程师
2019-09-18 16:06:50     打赏
6楼

厉害了  学习学习


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]