控制目标:
1、稳定/平衡 【最核心】:四旋翼微型飞行器的控制就是以地理坐标系为参考,做三维飞行姿态控制。控制目标是使其在 无动作指令时保持稳定悬停状态,有动作指令 时有效完成指定动作。
2、准确
3、快速
4、鲁棒
控制方法:
对于四轴飞行器平衡控制中,四个电机的转速并不是完全直接由遥控油门来决定,而是结合姿态控制指令和外部扰动综合了PID姿态控制输出算出来的。
飞行员只要将他想要的四轴整体动作(升降、三轴旋转)告诉飞控,飞控通过算法计算评估当前姿态与目标姿态的偏差,再通过这些偏差来修正四个电机的动作。
往深一步思考,遥控器如何控制了无人机:
四路使用:油门+三个姿态角(这也是PID控制系统中的几个控制对象);四路备用:
往深一步思考,电机具体是怎么控制的?
由四轴飞行力学可知,控制无人机的的平衡飞行
== 把四个电机的转向和转速 控制好
== 因4 路 PWM 驱动 4 个 NMOS 管来控制 4 个电机。
==最终是控制好四路PWM占空比和方向
再回味上面一段话,飞行员发出具体期望 角度/量 (升降、三轴旋转)的指令到飞控,那么就有了飞控通过算法计算评估当前姿态与目标姿态的偏差,再通过这些偏差来修正四个电机的动作。
PID控制理论
单级PID
串级PID
PID算法学习:
开环/闭环控制
开环:系统输出不反馈,输入不会受到输出的影响
温度水壶:是一个最简单的闭环系统,达到设定稳定,输入会被切断;并非PID,PID时随动系统控制(连续函数方式,而不时简单的阶跃函数)
PID数学表达公式
PID三种算法物理意义理解
Ek 就是 控制偏差;
对于P算法,比例算法;当前时刻系统误差越大,P算法贡献就越大,系统响应越剧烈,随着系统误差的减小,P算法贡献逐渐减小趋近于0;
对于D算法,微分算法,在dt时间内,如果系统响应缓慢的话,误差的差值就很小,阻尼就感受到很小。
对于 I算法:积分算法,数学上是误差曲线与坐标轴围成的面积,一个误差和的曲线,消除稳态误差
无人机定高调节---PID模拟调参网站
Webpack App (rossning92.github.io)https://rossning92.github.io/pid-simulation/
PID算法例子理解
PID调参
考虑现在你用一根手指来快速达到二轮小车的平衡状态;
【急先锋】首先就是P算法,发现快倒了,倒的比较多,就要施加个力触碰下。反馈传感器就是眼睛,你的大脑里只有简单的P算法,输入就是你的手指。
然后,你发现每次都要用手指左一下,右一下,尽管可能具体平衡态越来越近了,但是很慢,还需要不断左右碰。
【稳重的谋将】然后,你就想到了再上一根手指,这根手指在发现P算法手指用力过大的时候,做个反作用阻尼力,抵消过冲。
调参顺序:P D I,I不一定用的上;我们希望达到的调参效果是,P快速响应,发现P快速响应有过冲风险时,D又能审时度势出力,防止超调。
PID控制:
四轴单级PID单角度姿态控制
无人机的飞行姿态控制,我们的控制对象是无人机的三个角度。每个角度都考虑用一个PID环去控制,最终作用到执行机构上的还是四路电机的PWM信号。
四轴单级PID姿态控制
同理,三个角度。(三个角度的控制,最终作用到四路电机的PWM控制效果是线性叠加)
串级PID控制
主要是在角度控制的基础上,增加了角速度控制。期望姿态角与姿态结算出来的角度进行角度PID控制,输出的角度值,是离散型数据。又因为w(角速度)=a(角度)/t(时间)。所以可以认为输入的也是角速度。于是就实现了外环PID值作为内环PID的期望值目的。再结合陀螺仪比较精准的采集角速度的原理。内环的角速度控制可以保证飞行器测量值迅速的达到期望值。
这样一来就大大缓解了单角度环控制,由于飞机的电机转速与升力不成正比而出现的失衡(比如说在目标位置前后,左右偏移),跟随滞后等等问题。
————————————————
原文链接:https://blog.csdn.net/qq_60521516/article/details/123704887
PID计算结果的动力分配
PID计算的结果最终是要输出给电机的,所以我们要将三个姿态角的控制输出正确的分配给四个电机。顺时针开始,从第四象限开始,依次是M1,M2,M3,M4四个电机。(注意上面给的参考图片,左下侧是机头方向)
实现左右横滚运动的时候:(Roll) 需要M1,M4的转速增大。M2,M3电机的转速减少。(或者反着来,运动方向相反)并且为了使得飞行的稳定性。输出的增量和减少量是一致: MOTOR1 += + pidRateX.out MOTOR2 += - pidRateX.out MOTOR3 += - pidRateX.out MOTOR4 += + pidRateX.out
实现前后俯仰运动的时候:(Pitch) 需要M3,M4的转速增大。M1,M2电机的转速减少。(或者反着来,运动方向相反)同样的为了使得飞行的稳定性。输出的增量和减少量是一致: MOTOR1 += - pidRateY.out MOTOR2 += - pidRateY.out MOTOR3 += + pidRateY.out MOTOR4 += + pidRateY.out
实现偏航运动的时候:(Yaw) 需要M2,M4的转速增大。M1,M3电机的转速减少。(或者反着来,运动方向相反)同样的为了使得飞行的稳定性。输出的增量和减少量是一致: MOTOR1 += -pidRateZ.out; MOTOR2 += + pidRateZ.out; MOTOR3 += - pidRateZ.out; MOTOR4 += + pidRateZ.out ;
将三个式子加和:
MOTOR1 += + pidRateX.out - pidRateY.out -pidRateZ.out; MOTOR2 += - pidRateX.out - pidRateY.out + pidRateZ.out; MOTOR3 += - pidRateX.out + pidRateY.out - pidRateZ.out; MOTOR4 += + pidRateX.out + pidRateY.out + pidRateZ.out;
关于上面式子中的做一点说明:pidRateX.out这个应该是一个四维向量
————————————————
版权声明:本文为CSDN博主「Xiao |」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_60521516/article/details/123704887