5.11 飞行控制——定点飞行

2024-08-31 20:12
文章标签 定点 控制 飞行 5.11

本文主要是介绍5.11 飞行控制——定点飞行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 5.11 飞行控制——定点飞行
      • 5.11.1 加入三轴位置的飞行硬件系统 FLY(s)
      • 5.11.2 数学模型——三轴位置系统
        • (1)x、y轴位置系统的微分方程
        • (2)z轴位置系统的微分方程
        • (3)三轴位置系统的状态空间方程
      • 5.11.2 A1软件设计
      • 5.11.3 A1运行与调试
      • 5.11.4 三轴位置串级PID控制器
      • 5.11.5 A2软件设计
      • 5.11.6 A2运行与调试
      • 5.11.7 期望误差限伏
      • 5.11.8 A3软件设计
      • 5.11.9 A3运行与调试

总目录:http://t.csdnimg.cn/YDe8m

5.11 飞行控制——定点飞行

   实现定点飞行基本上也就对无人机所有的运动状态进行地了控制,定高飞行相当于半定点飞行。

5.11.1 加入三轴位置的飞行硬件系统 FLY(s)

   四旋翼硬件系统可以大体分为三轴角度系统、三轴位置系统、电机系统。根据状态空间方程的性质,我们自然地想到角度、位置系统可以列写为一个状态空间方程,该状态空间方程具有12个状态变量与输出,分别为三轴角速度、角度、线速度、位置;具有4个输入,分别为三轴力矩、电机合力。
   然而实际建立时会发生困难,在位置系统部分,有些项与角度、电机合力同时相关,系统将是非定常的。非线性系统可以在某点近似线性化,但限于本人水平,非定常系统的状态空间方程表示,作者一直没找到方法,闻道在先的同志如果了解的话,欢迎联系与指正。
   对于上述非定常系统表达的问题,作者想到了这样一种方法:利用之前求解得到的电机系统,将飞行硬件系统 FLY(s)划分为电机系统、角度系统、位置系统,这样三个子系统,其运行原理如图5.11.1所示:

在这里插入图片描述

图 5.11.1 FLY(s)飞行硬件系统

   1)飞行硬件系统 FLY(s),其总输入为 u 1 ∼ u 4 u_1 \sim u_4 u1u4 四个电机功率,这也是控制器的输出。

   2)电机系统的输入分为两部分,一部分是四个电机的功率 u 1 ∼ u 4 u_1 \sim u_4 u1u4,一部分则是四旋翼当前的角度状态 A x ∼ A z A_x \sim A_z AxAz
   其输出也分为两部分,其一为三轴力矩 M x ∼ M z M_x \sim M_z MxMz,其二为东北天坐标系下各轴的分力 F x ∼ F z F_x \sim F_z FxFz(可由北东地坐标系下分力进行转换),其中第二部分的求解综合使用了 u 1 ∼ u 4 u_1\sim u_4 u1u4 A x ∼ A z A_x \sim Az AxAz,涉及到之前所讲的旋转矩阵。

   3)在末端,角度系统的输入为三轴力矩 M x ∼ M y M_x \sim M_y MxMy,输出为三轴角度、角速度 A x ∼ A z A_x \sim A_z AxAz W x ∼ W z W_x\sim W_z WxWz 。其中角度 A x ∼ A z A_x \sim A_z AxAz 又被电机系统M(s) 所使用。
   4)在末端,位置系统的输入有两部分,其一为东北天坐标系下各轴的分力 F x ∼ F z F_x\sim F_z FxFz, 其二为重力加速度g,至于为什么有个g,之后会具体讲解。位置系统输出为:三轴位置、线速度,即 P x ∼ P z 、 W x ∼ W z P_x\sim P_z、W_x\sim W_z PxPzWxWz,注意,其方向都是取自东北天坐标系的。

5.11.2 数学模型——三轴位置系统

(1)x、y轴位置系统的微分方程

   对于四旋翼在东北天坐标系x轴上位置系统的微分方程,按照5.4.1 小节的步骤进行建立:

   1)确定系统输入、输出
   结合图5.11.1 与控制目的,设置x轴位置系统的输入为 F x F_x Fx,即电机合力在x轴上的分力。由于优先控制的状态为四旋翼在x轴上的位置 P x P_x Px, 设置输出为 P x P_x Px
   2)细分系统环节
   在x轴位置系统内,作用有电机合力分力 F x F_x Fx、空气阻力 F D x F_{Dx} FDx、惯性力 F m x F_{mx} Fmx,三者之合为零:
F x + F D x + F m x = 0 ( 5.11.1 ) F_x + F_{Dx}+F_{mx} = 0 \qquad (5.11.1) Fx+FDx+Fmx=0(5.11.1)
   3)各一节微分方程
   可知 F x F_x Fx 为输入, F D x 、 F m x F_{Dx}、F_{mx} FDxFmx有:
F D x = − K 4 P x ˙ ( 5.11.2. a ) F m x = − m P x ¨ ( 5.11.2. b ) \begin{aligned} &F_{Dx} = -K_4\dot{P_x} \qquad &(5.11.2.a) \\ &F_{mx} = -m\ddot{P_x} \qquad &(5.11.2.b) \end{aligned} FDx=K4Px˙Fmx=mPx¨(5.11.2.a)(5.11.2.b)
   K 4 K_4 K4——四旋翼在x方向移动时所受空气阻力的移阻系数。
   m m m——四旋翼无人机的质量。
   式中的负号表示两个力的方向与 F x F_x Fx的方向相反。对于空气阻力 F D x F_{Dx} FDx,此处已经线性化,原理与5.9 小节相同。

   4)各环节合并并整理
   式(5.11.1)与式(5.11.2)联立,即得:
m P x ¨ + K 4 P x ˙ = F x ( 5.11.3. a ) m\ddot{P_x} + K_4 \dot{P_x} = F_x \qquad (5.11.3.a) mPx¨+K4Px˙=Fx(5.11.3.a)
   y轴位置系统的微分方程与x轴类似,即:
m P y ¨ + K 5 P y ˙ = F y ( 5.11.3. b ) m\ddot{P_y} + K_5 \dot{P_y} = F_y \qquad (5.11.3.b) mPy¨+K5Py˙=Fy(5.11.3.b)

(2)z轴位置系统的微分方程

   与x、y轴不同的是,z轴方向上还作用有四旋翼的重力 F g F_g Fg = m g =mg =mg),方向与电机分力 F z F_z Fz的方向相反,则其微分方程可写为:
m P z ¨ + K 6 P z ˙ = F z − m g ( 5.11.3. c ) m \ddot{P_z} + K_6 \dot{P_z} = F_z - mg \qquad (5.11.3.c) mPz¨+K6Pz˙=Fzmg(5.11.3.c)

(3)三轴位置系统的状态空间方程

   1)设计输入量、状态变量、输出量
   式(5.11.3)三式的左侧都为输入项,很明显的,输入有 F x ∼ F z F_x\sim F_z FxFz三个分力,可作为 u 1 ∼ u 3 u_1 \sim u_3 u1u3。但式(5.11.3.c)有些特殊,其输入有两项,除分力 F z F_z Fz外,还 m g mg mg项。为了满足状态空间方程的标准形式,这里设计输入 u 4 = g u_4 = g u4=g

   设计输入:
u 1 ( t ) = F x ( 5.11.4. a ) u 2 ( t ) = F y ( 5.11.4. b ) u 3 ( t ) = F z ( 5.11.4. c ) u 4 ( t ) = g ( 5.11.4. d ) \begin{aligned} &u_1(t) = F_x \qquad & (5.11.4.a) \\ &u_2(t) = F_y \qquad & (5.11.4.b) \\ &u_3(t) = F_z \qquad & (5.11.4.c) \\ &u_4(t) = g \qquad & (5.11.4.d) \end{aligned} u1(t)=Fxu2(t)=Fyu3(t)=Fzu4(t)=g(5.11.4.a)(5.11.4.b)(5.11.4.c)(5.11.4.d)

   设计状态变量:
x 1 ( t ) = P x ( 5.11.5. a ) x 2 ( t ) = V x ( 5.11.5. b ) x 3 ( t ) = P y ( 5.11.5. c ) x 4 ( t ) = V y ( 5.11.5. d ) x 5 ( t ) = P z ( 5.11.5. e ) x 6 ( t ) = V z ( 5.11.5. f ) \begin{aligned} &x_1(t) = P_x \qquad &(5.11.5.a) \\ &x_2(t) = V_x \qquad &(5.11.5.b) \\ &x_3(t) = P_y \qquad &(5.11.5.c) \\ &x_4(t) = V_y \qquad &(5.11.5.d) \\ &x_5(t) = P_z \qquad &(5.11.5.e) \\ &x_6(t) = V_z \qquad &(5.11.5.f) \\ \end{aligned} x1(t)=Pxx2(t)=Vxx3(t)=Pyx4(t)=Vyx5(t)=Pzx6(t)=Vz(5.11.5.a)(5.11.5.b)(5.11.5.c)(5.11.5.d)(5.11.5.e)(5.11.5.f)

   设计输出:
y 1 ( t ) = x 1 ( t ) ( 5.11.6. a ) y 2 ( t ) = x 2 ( t ) ( 5.11.6. b ) y 3 ( t ) = x 3 ( t ) ( 5.11.6. c ) y 4 ( t ) = x 4 ( t ) ( 5.11.6. d ) y 5 ( t ) = x 5 ( t ) ( 5.11.6. e ) y 6 ( t ) = x 6 ( t ) ( 5.11.6. f ) \begin{aligned} &y_1(t) = x_1(t) \qquad &(5.11.6.a) \\ &y_2(t) = x_2(t) \qquad &(5.11.6.b) \\ &y_3(t) = x_3(t) \qquad &(5.11.6.c) \\ &y_4(t) = x_4(t) \qquad &(5.11.6.d) \\ &y_5(t) = x_5(t) \qquad &(5.11.6.e) \\ &y_6(t) = x_6(t) \qquad &(5.11.6.f) \\ \end{aligned} y1(t)=x1(t)y2(t)=x2(t)y3(t)=x3(t)y4(t)=x4(t)y5(t)=x5(t)y6(t)=x6(t)(5.11.6.a)(5.11.6.b)(5.11.6.c)(5.11.6.d)(5.11.6.e)(5.11.6.f)

   2)列写一队微分方程
   式(5.11.3)可拆解成一系列一阶微分方程,即:
P x ˙ = V x ( 5.11.7. a ) V x ˙ = − K 4 m V x + 1 m F x ( 5.11.7. b ) P y ˙ = V y ( 5.11.7. c ) V y ˙ = − K 5 m V y + 1 m F y ( 5.11.7. d ) P z ˙ = V z ( 5.11.7. e ) V z ˙ = − K 6 m V z + 1 m F z − g ( 5.11.7. f ) \begin{aligned} &\dot{P_x} = V_x \qquad &(5.11.7.a) \\ &\dot{V_x} = -\frac{K_4}{m}V_x + \frac{\mathrm{1}}{m} F_x \qquad &(5.11.7.b) \\ &\dot{P_y} = V_y \qquad &(5.11.7.c) \\ &\dot{V_y} = -\frac{K_5}{m}V_y + \frac{\mathrm{1}}{m} F_y \qquad &(5.11.7.d) \\ &\dot{P_z} = V_z \qquad &(5.11.7.e) \\ &\dot{V_z} = -\frac{K_6}{m}V_z + \frac{\mathrm{1}}{m} F_z - g \qquad &(5.11.7.f) \\ \end{aligned} Px˙=VxVx˙=mK4Vx+m1FxPy˙=VyVy˙=mK5Vy+m1FyPz˙=VzVz˙=mK6Vz+m1Fzg(5.11.7.a)(5.11.7.b)(5.11.7.c)(5.11.7.d)(5.11.7.e)(5.11.7.f)

   3)整理并转化为矩阵形式
d d t [ x 1 ( t ) x 2 ( t ) x 3 ( t ) x 4 ( t ) x 5 ( t ) x 6 ( t ) ] = [ 0 1 0 − K 4 m 0 1 0 − K 5 m 0 1 0 − K 6 m ] [ x 1 ( t ) x 2 ( t ) x 3 ( t ) x 4 ( t ) x 5 ( t ) x 6 ( t ) ] + [ 0 1 m 0 1 m 0 0 1 m − 1 ] [ u 1 ( t ) u 2 ( t ) u 3 ( t ) u 4 ( t ) ] ( 5.11.8. a ) [ y 1 ( t ) y 2 ( t ) y 3 ( t ) y 4 ( t ) y 5 ( t ) y 6 ( t ) ] = I 6 × 6 [ x 1 ( t ) x 2 ( t ) x 3 ( t ) x 4 ( t ) x 5 ( t ) x 6 ( t ) ] + O 6 × 4 [ u 1 ( t ) u 2 ( t ) u 3 ( t ) u 4 ( t ) ] ( 5.11.8. b ) \begin{aligned} &\frac{\mathrm{d}}{\mathrm{d}t} \begin{bmatrix} x_1(t) \\ x_2(t) \\ x_3(t) \\ x_4(t) \\ x_5(t) \\ x_6(t) \end{bmatrix} = \begin{bmatrix} 0 &1 \\ 0 &-\frac{K_4}{m} \\ & &0 &1 && \\ & &0 &-\frac{K_5}{m} \\ &&& &0 &1 \\ &&& &0 &-\frac{K_6}{m} \end{bmatrix} \begin{bmatrix} x_1(t)\\ x_2(t)\\ x_3(t)\\ x_4(t)\\ x_5(t)\\ x_6(t) \end{bmatrix} + \begin{bmatrix} 0 & & \\ \frac{\mathrm{1}}{m} & & \\ &0 & \\ &\frac{\mathrm{1}}{m} & \\ & &0 &0\\ & &\frac{\mathrm{1}}{m} &-\mathrm{1}\\ \end{bmatrix} \begin{bmatrix} u_1(t) \\ u_2(t) \\ u_3(t) \\ u_4(t) \end{bmatrix}&(5.11.8.a) \\ &\begin{bmatrix} y_1(t) \\ y_2(t) \\ y_3(t) \\ y_4(t) \\ y_5(t) \\ y_6(t) \end{bmatrix} = \boldsymbol{I}_{6\times 6} \begin{bmatrix} x_1(t)\\ x_2(t)\\ x_3(t)\\ x_4(t)\\ x_5(t)\\ x_6(t) \end{bmatrix} + \boldsymbol{O}_{6\times 4} \begin{bmatrix} u_1(t) \\ u_2(t) \\ u_3(t) \\ u_4(t) \end{bmatrix} &(5.11.8.b) \end{aligned} dtd x1(t)x2(t)x3(t)x4(t)x5(t)x6(t) = 001mK4001mK5001mK6 x1(t)x2(t)x3(t)x4(t)x5(t)x6(t) + 0m10m10m101 u1(t)u2(t)u3(t)u4(t) y1(t)y2(t)y3(t)y4(t)y5(t)y6(t) =I6×6 x1(t)x2(t)x3(t)x4(t)x5(t)x6(t) +O6×4 u1(t)u2(t)u3(t)u4(t) (5.11.8.a)(5.11.8.b)

   式中,矩阵中空缺的部分为0; I 6 × 6 \boldsymbol{I}_{6\times 6} I6×6 6 × 6 6\times6 6×6单位矩阵; O 6 × 4 \boldsymbol{O}_{6\times 4} O6×4 6 × 4 6\times 4 6×4零矩阵。

   5)提取矩阵

A = [ 0 1 0 − K 4 m 0 1 0 − K 5 m 0 1 0 − K 6 m ] ( 5.11.9. a ) B = [ 0 1 m 0 1 m 0 0 1 m − 1 ] ( 5.11.9. b ) C = I 6 × 6 ( 5.11.9. c ) D = O 6 × 4 ( 5.11.9. d ) u ( t ) = [ u 1 ( t ) u 2 ( t ) u 3 ( t ) u 4 ( t ) ] T ( 5.11.9. e ) x ( t ) = [ x 1 ( t ) x 2 ( t ) ⋯ x 6 ( t ) ] T ( 5.11.9. f ) d x ( t ) d t = A x ( t ) + B u ( t ) ( 5.11.9. g ) y ( t ) = C x ( t ) + D u ( t ) ( 5.11.9. h ) \begin{aligned} &\boldsymbol{A} = \begin{bmatrix} 0 &1 \\ 0 &-\frac{K_4}{m} \\ & &0 &1 && \\ & &0 &-\frac{K_5}{m} \\ &&& &0 &1 \\ &&& &0 &-\frac{K_6}{m} \end{bmatrix} &(5.11.9.a) \\ & \boldsymbol{B} = \begin{bmatrix} 0 & & \\ \frac{\mathrm{1}}{m} & & \\ &0 & \\ &\frac{\mathrm{1}}{m} & \\ & &0 &0\\ & &\frac{\mathrm{1}}{m} &-\mathrm{1}\\ \end{bmatrix} &(5.11.9.b) \\ & \boldsymbol{C} = \boldsymbol{I}_{6\times 6} & (5.11.9.c) \\ & \boldsymbol{D} = \boldsymbol{O}_{6\times 4} & (5.11.9.d) \\ &\boldsymbol{u}(t) = \begin{bmatrix} u_1(t) &u_2(t) &u_3(t) & u_4(t) \end{bmatrix}^{\mathrm{T}} & (5.11.9.e) \\ &\boldsymbol{x}(t) = \begin{bmatrix} x_1(t) & x_2(t) &\cdots &x_6(t) \end{bmatrix}^{\mathrm{T}} & (5.11.9.f) \\ &\frac{\mathrm{d}\boldsymbol{x}(t)}{\mathrm{d}t} = \boldsymbol{A}\boldsymbol{x}(t) + \boldsymbol{B}\boldsymbol{u}(t) & (5.11.9.g) \\ & \boldsymbol{y}(t) = \boldsymbol{C}\boldsymbol{x}(t) + \boldsymbol{D}\boldsymbol{u}(t) &(5.11.9.h) \end{aligned} A= 001mK4001mK5001mK6 B= 0m10m10m101 C=I6×6D=O6×4u(t)=[u1(t)u2(t)u3(t)u4(t)]Tx(t)=[x1(t)x2(t)x6(t)]Tdtdx(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)(5.11.9.a)(5.11.9.b)(5.11.9.c)(5.11.9.d)(5.11.9.e)(5.11.9.f)(5.11.9.g)(5.11.9.h)

5.11.2 A1软件设计

   本小节例程位于“2、飞控例程\Matlab\(4)飞行控制——定点飞行\A1_四旋翼位置系统”中。
   例程功能为建立四旋翼三轴位置系统状态空间方程形式的数学模型,并仿真其对初始状态的响应。
   例程中的文件如图5.11.2所示,主要增加了“M_Position.m”文件,修改了“A1_main.mlx”、“P_plot_all.m”、“输入_系统参数.xlsx”等文件。

在这里插入图片描述

图5.11.2

M_Position.m文件

   该文件分为初始化(行8~56)、具体运行(行59~65)两个部分。

%%   四旋翼位置系统 动态模型%    注意,位置系统及相关PID使用的坐标为东北天坐标系,
%,x、y坐标在零初始时与机体坐标反向,机头与x轴重合%%
if init == 0    %未初始化% 矩阵中元素的默认顺序: Px、Vx、Py、Vy、Pz、Vz%四旋翼位置系统 系统参数 s_P.m = data_i(27, 4);      % 重量s_P.g = 9.8;  % 重力加速度s_P.K = data_i(28, 4:6);    % 位阻系数%过程噪声方差、数学期望期望s_P.Q_d = [0 0 0 0 0 0];                             %数学期望期望为0s_P.Q_c = data_i(29, 4:9);% 定义矩阵s_P.S_n = 6;      %状态变量数s_P.S_m = 6;      %输出变量数s_P.S_p = 4;      %输入变量数s_P.u = zeros(s_P.S_p, 1);           %位置系统输入 s_P.y = zeros(s_P.S_m, 1);           %位置系数输出s_P.x_last = zeros(s_P.S_n, 1);     %上次状态变量s_P.x = zeros(s_P.S_n, 1);          %当前状态变量s_P.x_last(:, 1) =  data_i(30:35, 4);       %初始状态  位置、速度s_P.A = zeros(s_P.S_n, s_P.S_n);s_P.B = zeros(s_P.S_n, s_P.S_p);s_P.C = eye(s_P.S_n);               %生成一个 Sp_n 阶的单位矩阵s_P.D = zeros(s_P.S_m, s_P.S_p);s_P.A(1:2, 1:2) = [0, 1; 0, -s_P.K(1)/s_P.m];s_P.A(3:4, 3:4) = [0, 1; 0, -s_P.K(2)/s_P.m];s_P.A(5:6, 5:6) = [0, 1; 0, -s_P.K(3)/s_P.m];s_P.B(2, 1) = 1/s_P.m;s_P.B(4, 2) = 1/s_P.m;s_P.B(6, 3) = 1/s_P.m;s_P.B(6, 4) = -1;% 获取离散化状态空间方程sys_d = c2d(ss(s_P.A, s_P.B, s_P.C, s_P.D),Ts);% 提取离散系统A矩阵s_P.A = sys_d.a;% 提取离散系统B矩阵s_P.B = sys_d.b;% 提取离散系统C矩阵s_P.C = sys_d.c;% 提取离散系统D矩阵s_P.D = sys_d.d;else            %计算系统响应 % 动态系统响应w_noise = normrnd(s_P.Q_d, s_P.Q_c)';     %过程噪声s_P.x  = s_P.A*s_P.x_last + s_P.B*s_P.u;           %求当前状态s_P.x  = s_P.x + w_noise;                 %添加过程噪声,式(6.3.1.a)s_P.y  = s_P.C*s_P.x + s_P.D*s_P.u;                 %求输出,y有不同,式(2.2.6)s_P.x_last = s_P.x;
end
  • 行10~35
    建立“s_P”位置系统参数结构体变量,并将Excel数据赋值给位置系统相关参数。
  • 行37~44
    构建状态空间方程的特征矩阵 A 、 B \boldsymbol{A}、\boldsymbol{B} AB,对应式(5.11.9.a)、(5.11.9.b)
  • 行47~56
    建立状态空间方程及对其离散化,最终获得四个离散状态空间方程的特征矩阵。
  • 行60~65
    三轴位置系统的具体运行部分,与三轴角度系统相似。

A1_main.mlx 文件

  主要添加了三轴位置系统的运行部分,及对其输出数据的保存。

......init = 1;   %已初始化完毕
for i = 1:(Num)% 串级PID控制C_Cascade_PID;% 动态系统响应M_Motor;    %电机s_A.u = s_mot.M_xyz;          %赋值角度系统输入M_Angle;                  %四旋翼角度系统s_P.u(1:3, 1) = s_mot.F_xyz;  %赋值位置系统输入s_P.u(4, 1) = s_P.g;M_Position;               %四旋翼位置系统%保存电机模型输入输出数据s_History.u_all(i, :) = s_mot.u_all';s_History.F_xyz(i, :) = s_mot.F_xyz';s_History.M_xyz(i, :) = s_mot.M_xyz';%保存角度系统输出数据s_History.ya(i, :) = s_A.y.*180/pi;  %角度,单位(deg) %保存位置系统输出数据s_History.yp(i, :) = s_P.y;  %位置,单位(m) ......
  • 行14~16
    赋值位置系统的输入并运行三轴位置系统。
  • 行27
    保存位置系统的输出到s_History 结构体的yp 元素。

P_plot_all.m 文件

  主要添加了位置系统相关曲线图,包括三轴分力曲线图、三轴位置曲线图、三轴线速度曲线图。

%% 绘图文件......%% 位置系统% 输入三轴力
figure(3);
subplot(3, 1, 1);plot(t, s_History.F_xyz(:, 1), 'r');
hold on;
plot(t, s_History.F_xyz(:, 2), 'g');
hold on;
plot(t, s_History.F_xyz(:, 3), 'b');
hold on;
legend('F_x', 'F_y', 'F_z');xlabel('时间(s)', 'Color', 'k', "FontSize", 15);
ylabel('力(N)', 'Color', 'k', "FontSize", 15);
title('四旋翼 位置系统')
grid on;
hold off;% 三轴位置(东北天坐标系,机头x轴, x、y坐标在零初始时与机体坐标反向)
subplot(3, 1, 2);plot(t, s_History.yp(:, 1), 'r');
hold on;
plot(t, s_History.yp(:, 3), 'g');
hold on;
plot(t, s_History.yp(:, 5), 'b');
hold on;
legend('P_x', 'P_y', 'P_z');xlabel('时间(s)', 'Color', 'k', "FontSize", 15);
ylabel('位置(m)', 'Color', 'k', "FontSize", 15);
grid on;
hold off;% 三轴速度
subplot(3, 1, 3);plot(t, s_History.yp(:, 2), 'r');
hold on;
plot(t, s_History.yp(:, 4), 'g');
hold on;
plot(t, s_History.yp(:, 6), 'b');
hold on;
legend('V_x', 'V_y', 'V_z');xlabel('时间(s)', 'Color', 'k', "FontSize", 15);
ylabel('速度(m/s)', 'Color', 'k', "FontSize", 15);
grid on;
hold off;

5.11.3 A1运行与调试

   双击进入“A1_main.mlx”文件,点击上方“实时编辑器”中的“运行”按钮即可运行例程。运行结果如图5.11.3所示,其中(c)图为位置系统相关曲线图,由于未使用控制器进行控制,位置等参数呈发散状态。
在这里插入图片描述

(a)
在这里插入图片描述

(b)
在这里插入图片描述

(c)

图 5.11.3

5.11.4 三轴位置串级PID控制器

  与角度系统的串级PID控制器类似,此处不再赘述。

5.11.5 A2软件设计

   本小节例程位于“2、飞控例程\Matlab\(4)飞行控制——定点飞行\A2_位置系统串级PID”中。
   例程功能为:使用4组(共12环)的串级PID对四旋翼三轴的位置、速度、角度、角速度进行控制。
   例程主要修改了“C_Cascade_PID.m”、“输入_系统参数.xlsx”等文件。

C_Cascade_PID.m 文件

%% 四旋翼 串级PID 控制器
% 输入:
%   s_A.y   角度系统的输出
%
% 输出
%   s_mot.u_all   四个电机的功率%% if init == 0    %未初始化% 角度系统PID相关,变量默认顺序,Ax、Wx、Ay、Wy、Az、Wzs_pid.d = data_i(20, 4:9);       %串级PID期望,三轴角度、角速度,单位:deg、deg/ss_pid.A_max = data_i(43, 4);     %x、y角度环的期望最大值s_pid.d = s_pid.d *pi/180;       %转化单位为弧度s_pid.A_max = s_pid.A_max *pi/180; s_pid.K_pid = data_i(14:19, 4:6);    % 角度系统相关PID参数(*6) s_pid.e =  zeros(6, 1);s_pid.e_last = zeros(6, 1);s_pid.Ei = zeros(6, 1);s_pid.y = zeros(6, 1);% 位置系统PID相关,变量默认顺序,Px、Vx、Py、Vy、Pz、Vzs_pid.p_d = data_i(42, 4:9);      % 位置、速度PID 期望s_pid.Kp_pid = data_i(36:41, 4:6);    % 位置系统相关PID参数(*6)                         s_pid.p_e =  zeros(6, 1);s_pid.p_e_last = zeros(6, 1);s_pid.p_Ei = zeros(6, 1);s_pid.p_y = zeros(6, 1);%PID临时期望存储s_pid.short_d = 0;      % PID输出转电机功率 矩阵s_pid.Out_M = [ -1  -1  1  1;-1   1 -1  1;1  -1 -1  1;1   1  1  1;];      % PID输出转电机功率 矩阵     else            %进行控制    k = 1;kp = 1;%%%%%%%%%%%%%%%%%%%%%% 位置系统PIDfor PID_index = 1:3% 位置环s_pid.short_d = s_pid.p_d(kp);s_pid.p_e(kp) = s_pid.short_d - s_P.y(kp, 1);     %角速度 期望与测量误差  [s_pid.p_y(kp), s_pid.p_Ei(kp)] = C_PID(Ts, s_pid.Kp_pid(kp, :), s_pid.p_e(kp), s_pid.p_e_last(kp), s_pid.p_Ei(kp));s_pid.p_e_last(kp) = s_pid.p_e(kp);     %保存本次误差kp = kp+1;%速度环s_pid.short_d = s_pid.p_d(kp) + s_pid.p_y(kp-1);s_pid.p_e(kp) = s_pid.short_d - s_P.y(kp, 1);     %角速度 期望与测量误差  [s_pid.p_y(kp), s_pid.p_Ei(kp)] = C_PID(Ts, s_pid.Kp_pid(kp, :), s_pid.p_e(kp), s_pid.p_e_last(kp), s_pid.p_Ei(kp));s_pid.p_e_last(kp) = s_pid.p_e(kp);     %保存本次误差kp = kp+1;end%%%%%%%%%%%%%%%%%%%%%% 角度系统PIDfor PID_index = 1:3% 角速度环if PID_index ~= 3       %不为z轴时,进行角度期望限制if (PID_index == 1)       % 为x轴角度控制s_pid.short_d = s_pid.d(k) - s_pid.p_y(4);       % x轴角度PID 期望(叠加y轴速度环输出) elseif (PID_index == 2)   % 为y轴角度控制s_pid.short_d = s_pid.d(k) - s_pid.p_y(2);       % y轴角度PID 期望(叠加x轴速度环输出)  ends_pid.short_d = min(s_pid.short_d, s_pid.A_max);s_pid.short_d = max(s_pid.short_d, -s_pid.A_max);elses_pid.short_d = s_pid.d(k);     % z轴角度环PID 期望ends_pid.e(k) = s_pid.short_d - s_A.y(k, 1);     %角度 期望与测量误差  [s_pid.y(k), s_pid.Ei(k)] = C_PID(Ts, s_pid.K_pid(k, :), s_pid.e(k), s_pid.e_last(k), s_pid.Ei(k));s_pid.e_last(k) = s_pid.e(k);     %保存本次误差k = k+1;% 角速度环s_pid.short_d = s_pid.d(k) + s_pid.y(k-1);s_pid.e(k) = s_pid.short_d - s_A.y(k, 1);     %角速度 期望与测量误差  [s_pid.y(k), s_pid.Ei(k)] = C_PID(Ts, s_pid.K_pid(k, :), s_pid.e(k), s_pid.e_last(k), s_pid.Ei(k));s_pid.e_last(k) = s_pid.e(k);     %保存本次误差k = k+1;end% PID输出转化为各电机功率s_pid.PID_out(1:3, 1) = [s_pid.y(2) s_pid.y(4) s_pid.y(6)]';                    % x、y、z三轴角速度环输出s_pid.PID_out(4, 1) = s_P.m*s_P.g*s_mot.u_max/(4*s_mot.F_max) + s_pid.p_y(6);   % z轴速度环输出s_mot.u_all = s_pid.Out_M*s_pid.PID_out;      %PID输出 转 电机控制功率% 电机功率限幅s_mot.u_all = min(s_mot.u_all, s_mot.u_max);s_mot.u_all = max(s_mot.u_all, 0);
end
  • 行26~33
    将Excel中位置系统相关参数赋值给相关变量。
  • 行49~26
    添加三轴位置环、线速度环PID

5.11.6 A2运行与调试

   双击进入“A1_main.mlx”文件,点击上方“实时编辑器”中的“运行”按钮即可运行例程。运行结果如图5.11.4所示,其中(c)图为位置系统相关曲线图,经过一定时间,各轴线速度与位置都达到期望。
在这里插入图片描述

(a)
在这里插入图片描述

(b)
在这里插入图片描述
(c)

图 5.11.4

5.11.7 期望误差限伏

   对于四旋翼控制器来说,有些期望值的大小是不合理的,如x轴的角度期望,用于定点飞行时,其期望应在 − 3 0 ∘ ∼ 3 0 ∘ -30^{\circ} \sim 30^{\circ} 3030间浮动,若期望为270 ∘ ^{\circ} 等,是不合理的。由于外环PID的输出将成为内环PID期望的一部分,期望幅度过大的情况在串级PID中是常见的,故对期望要采取限幅。

   而误差是PID的直接输入,PID控制器的参数常只对一定范围内的输入控制效果较好。例如,若PID能很好对初始误差 e 0 = 1000 e_0 = 1000 e0=1000的系统进行控制,那么其对 e 0 = 1 e_0=1 e0=1系统控制就会是迟顿的。故也要对串级PID各环的误差进行限幅。

5.11.8 A3软件设计

   本小节例程位于“2、飞控例程\Matlab\(4)飞行控制——定点飞行\A3_期望_误差限幅”中。
   例程功能为:加入期望与误差限幅,并进行串PID控制。
   例程中的文件如图5.11.5所示,主要增加了“F_Limiter.m”文件,修改了“输入_系统参数.xlsx”、“C_Cascade_PID.m”等文件。

在这里插入图片描述

图5.11.5

F_Limiter.m

5.11.9 A3运行与调试

这篇关于5.11 飞行控制——定点飞行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124885

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【电机控制】数字滤波算法(持续更新)

文章目录 前言1. 数字低通滤波 前言 各种数字滤波原理,离散化公式及代码。 1. 数字低通滤波 滤波器公式 一阶低通滤波器的输出 y [ n ] y[n] y[n] 可以通过以下公式计算得到: y [ n ] = α x [ n ] + ( 1 − α ) y [ n − 1 ] y[n] = \alpha x[n] + (1 - \alpha) y[n-1]

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—10.控制节点-Heat服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版