本文主要是介绍5.10 飞行控制——自稳飞行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 5.10 飞行控制——自稳飞行
- 5.10.1 数学模型——三轴角度系统
- (1)三轴角度系统微分方程
- (2)状态空间方程的建立
- 5.10.2 A1软件设计
- 5.10.3 A1运行与调试
- 5.10.4 三轴角度串级PID控制器
- 5.10.5 A2软件设计
- 5.10.6 A2运行与调试
总目录:http://t.csdnimg.cn/YDe8m
5.10 飞行控制——自稳飞行
四旋翼无人机机通常具有三种基本的飞行模式,即自稳飞行、定高飞行、定点飞行。在自稳飞行模式下,可人为控制无人机三个姿态角的大小,并合其在无外部命令情况下三个姿态角都为零。
为了在Matlab上实现自稳飞行的仿真,首先,需要建立起四旋翼三轴角度系统状态空间方程形式的数据模式;其次,则需要设计一种可以同时控制四旋翼三轴角度与角速度的串级PID控制器。
5.10.1 数学模型——三轴角度系统
本小节第一个例程的功能为:建立四旋翼三轴角度系统状态空间方程形式的数学模型,并仿真其对初始状态的响应。其具体的原理如下。
(1)三轴角度系统微分方程
已知四旋翼x轴角度系统的数学模型,即:
I x A x ¨ ( t ) + K 1 A x ˙ ( t ) = M x ( 5.10.1. a ) I_x\ddot{A_x}(t) + K_1 \dot{A_x}(t) = M_x \qquad (5.10.1.a) IxAx¨(t)+K1Ax˙(t)=Mx(5.10.1.a)
y轴与z轴角度系统的数学模型与之类似,即:
I y A y ¨ ( t ) + K 2 A y ˙ ( t ) = M y ( 5.10.1. b ) I z A z ¨ ( t ) + K 3 A z ˙ ( t ) = M z ( 5.10.1. c ) \begin{aligned} I_y\ddot{A_y}(t) + K_2 \dot{A_y}(t) = M_y \qquad (5.10.1.b) \\ I_z\ddot{A_z}(t) + K_3 \dot{A_z}(t) = M_z \qquad (5.10.1.c) \end{aligned} IyAy¨(t)+K2Ay˙(t)=My(5.10.1.b)IzAz¨(t)+K3Az˙(t)=Mz(5.10.1.c)
其中:
I y 、 I z I_y、I_z Iy、Iz——机体坐标系下,四旋翼对y轴、z轴的转动惯量。
A y ( t ) 、 A z ( t ) A_y(t)、A_z(t) Ay(t)、Az(t)——y、z轴对应姿态角,也即俯仰角(pit)、横滚角(rol)。
K 2 、 K 3 K_2、K_3 K2、K3——y、z轴旋阻系数,与空气阻力相关。
M y 、 M z M_y、M_z My、Mz——电机产生的y、z轴力矩。
三式合在一直,便是四旋翼三轴角度系统微分方程形式的数学模型。
(2)状态空间方程的建立
1)设计输入量、状态变量、输出量
设计系统输入为:
u 1 ( t ) = M x ( t ) ( 5.10.2. a ) u 2 ( t ) = M y ( t ) ( 5.10.2. b ) u 3 ( t ) = M z ( t ) ( 5.10.2. c ) \begin{aligned} &u_1(t) = M_x(t) \qquad & (5.10.2.a) \\ &u_2(t) = M_y(t) \qquad & (5.10.2.b) \\ &u_3(t) = M_z(t) \qquad & (5.10.2.c) \\ \end{aligned} u1(t)=Mx(t)u2(t)=My(t)u3(t)=Mz(t)(5.10.2.a)(5.10.2.b)(5.10.2.c)
设计状态变量:
x 1 ( t ) = A x ( t ) ( 5.10.2. d ) x 2 ( t ) = W x ( t ) ( 5.10.2. e ) x 3 ( t ) = A y ( t ) ( 5.10.2. f ) x 4 ( t ) = W y ( t ) ( 5.10.2. g ) x 5 ( t ) = A z ( t ) ( 5.10.2. h ) x 6 ( t ) = W z ( t ) ( 5.10.2. i ) \begin{aligned} &x_1(t) = A_x(t) \qquad &(5.10.2.d) \\ &x_2(t) = W_x(t) \qquad &(5.10.2.e) \\ &x_3(t) = A_y(t) \qquad &(5.10.2.f) \\ &x_4(t) = W_y(t) \qquad &(5.10.2.g) \\ &x_5(t) = A_z(t) \qquad &(5.10.2.h) \\ &x_6(t) = W_z(t) \qquad &(5.10.2.i) \\ \end{aligned} x1(t)=Ax(t)x2(t)=Wx(t)x3(t)=Ay(t)x4(t)=Wy(t)x5(t)=Az(t)x6(t)=Wz(t)(5.10.2.d)(5.10.2.e)(5.10.2.f)(5.10.2.g)(5.10.2.h)(5.10.2.i)
设计输出量:
y 1 ( t ) = x 1 ( t ) ( 5.10.2. j ) y 2 ( t ) = x 2 ( t ) ( 5.10.2. k ) y 3 ( t ) = x 3 ( t ) ( 5.10.2. l ) y 4 ( t ) = x 4 ( t ) ( 5.10.2. m ) y 5 ( t ) = x 5 ( t ) ( 5.10.2. n ) y 6 ( t ) = x 6 ( t ) ( 5.10.2. o ) \begin{aligned} &y_1(t) = x_1(t) \qquad &(5.10.2.j) \\ &y_2(t) = x_2(t) \qquad &(5.10.2.k) \\ &y_3(t) = x_3(t) \qquad &(5.10.2.l) \\ &y_4(t) = x_4(t) \qquad &(5.10.2.m) \\ &y_5(t) = x_5(t) \qquad &(5.10.2.n) \\ &y_6(t) = x_6(t) \qquad &(5.10.2.o) \\ \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.10.2.j)(5.10.2.k)(5.10.2.l)(5.10.2.m)(5.10.2.n)(5.10.2.o)
2)列写一阶微分方程
式(5.10.1)可以拆分成一系列的一阶微分方程:
d A x ( t ) d t = W x ( t ) ( 5.10.3. a ) d W x ( t ) d t = − K 1 I x W x ( t ) + 1 I x u 1 ( t ) ( 5.10.3. b ) d A y ( t ) d t = W y ( t ) ( 5.10.3. e ) d W y ( t ) d t = − K 2 I y W y ( t ) + 1 I y u 1 ( t ) ( 5.10.3. f ) d A z ( t ) d t = W z ( t ) ( 5.10.3. g ) d W z ( t ) d t = − K 3 I z W z ( t ) + 1 I z u 1 ( t ) ( 5.10.3. h ) \begin{aligned} &\frac{\mathrm{d}A_x(t)}{\mathrm{d}t} = W_x(t) \qquad &(5.10.3.a) \\ & \frac{\mathrm{d}W_x(t)}{\mathrm{d}t} = - \frac{K_1}{I_x}W_x(t) + \frac{\mathrm{1}}{I_x} u_1(t) \qquad &(5.10.3.b) \\ &\frac{\mathrm{d}A_y(t)}{\mathrm{d}t} = W_y(t) \qquad &(5.10.3.e) \\ & \frac{\mathrm{d}W_y(t)}{\mathrm{d}t} = - \frac{K_2}{I_y}W_y(t) + \frac{\mathrm{1}}{I_y} u_1(t) \qquad &(5.10.3.f) \\ &\frac{\mathrm{d}A_z(t)}{\mathrm{d}t} = W_z(t) \qquad &(5.10.3.g) \\ & \frac{\mathrm{d}W_z(t)}{\mathrm{d}t} = - \frac{K_3}{I_z}W_z(t) + \frac{\mathrm{1}}{I_z} u_1(t) \qquad &(5.10.3.h) \\ \end{aligned} dtdAx(t)=Wx(t)dtdWx(t)=−IxK1Wx(t)+Ix1u1(t)dtdAy(t)=Wy(t)dtdWy(t)=−IyK2Wy(t)+Iy1u1(t)dtdAz(t)=Wz(t)dtdWz(t)=−IzK3Wz(t)+Iz1u1(t)(5.10.3.a)(5.10.3.b)(5.10.3.e)(5.10.3.f)(5.10.3.g)(5.10.3.h)
3)整理成标准形式
将式(5.10.2)代入式(5.10.3)得:
d x 1 ( t ) d t = x 2 ( t ) ( 5.10.4. a ) d x 2 ( t ) d t = − K 1 I x x 2 ( t ) + 1 I x u 1 ( t ) ( 5.10.4. b ) d x 3 ( t ) d t = x 4 ( t ) ( 5.10.4. e ) d x 4 ( t ) d t = − K 2 I y x 4 ( t ) + 1 I y u 1 ( t ) ( 5.10.4. f ) d x 5 ( t ) d t = x 6 ( t ) ( 5.10.4. g ) d x 6 ( t ) d t = − K 3 I z x 6 ( t ) + 1 I z u 1 ( t ) ( 5.10.4. h ) \begin{aligned} &\frac{\mathrm{d}x_1(t)}{\mathrm{d}t} = x_2(t) \qquad &(5.10.4.a) \\ & \frac{\mathrm{d}x_2(t)}{\mathrm{d}t} = - \frac{K_1}{I_x}x_2(t) + \frac{\mathrm{1}}{I_x} u_1(t) \qquad &(5.10.4.b) \\ &\frac{\mathrm{d}x_3(t)}{\mathrm{d}t} = x_4(t) \qquad &(5.10.4.e) \\ & \frac{\mathrm{d}x_4(t)}{\mathrm{d}t} = - \frac{K_2}{I_y}x_4(t) + \frac{\mathrm{1}}{I_y} u_1(t) \qquad &(5.10.4.f) \\ &\frac{\mathrm{d}x_5(t)}{\mathrm{d}t} = x_6(t) \qquad &(5.10.4.g) \\ & \frac{\mathrm{d}x_6(t)}{\mathrm{d}t} = - \frac{K_3}{I_z}x_6(t) + \frac{\mathrm{1}}{I_z} u_1(t) \qquad &(5.10.4.h) \\ \end{aligned} dtdx1(t)=x2(t)dtdx2(t)=−IxK1x2(t)+Ix1u1(t)dtdx3(t)=x4(t)dtdx4(t)=−IyK2x4(t)+Iy1u1(t)dtdx5(t)=x6(t)dtdx6(t)=−IzK3x6(t)+Iz1u1(t)(5.10.4.a)(5.10.4.b)(5.10.4.e)(5.10.4.f)(5.10.4.g)(5.10.4.h)
4)转化为矩阵形式
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 1 I x 0 1 0 − K 2 I y 0 1 0 − K 3 I z ] [ x 1 ( t ) x 2 ( t ) x 3 ( t ) x 4 ( t ) x 5 ( t ) x 6 ( t ) ] + [ 0 1 I x 0 1 I y 0 1 I z ] [ u 1 ( t ) u 2 ( t ) u 3 ( t ) u 4 ( t ) u 5 ( t ) u 6 ( t ) ] ( 5.10.5. 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 × 3 [ u 1 ( t ) u 2 ( t ) u 3 ( t ) u 4 ( t ) u 5 ( t ) u 6 ( t ) ] ( 5.10.5. 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_1}{I_x} \\ & &0 &1 && \\ & &0 &-\frac{K_2}{I_y} \\ &&& &0 &1 \\ &&& &0 &-\frac{K_3}{I_z} \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}}{I_x} & & \\ &0 & \\ &\frac{\mathrm{1}}{I_y} & \\ & &0 \\ & &\frac{\mathrm{1}}{I_z} \\ \end{bmatrix} \begin{bmatrix} u_1(t) \\ u_2(t) \\ u_3(t) \\ u_4(t) \\ u_5(t) \\ u_6(t) \end{bmatrix}&(5.10.5.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 3} \begin{bmatrix} u_1(t) \\ u_2(t) \\ u_3(t) \\ u_4(t) \\ u_5(t) \\ u_6(t) \end{bmatrix} &(5.10.5.b) \end{aligned} dtd x1(t)x2(t)x3(t)x4(t)x5(t)x6(t) = 001−IxK1001−IyK2001−IzK3 x1(t)x2(t)x3(t)x4(t)x5(t)x6(t) + 0Ix10Iy10Iz1 u1(t)u2(t)u3(t)u4(t)u5(t)u6(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×3 u1(t)u2(t)u3(t)u4(t)u5(t)u6(t) (5.10.5.a)(5.10.5.b)
式中,矩阵中空缺的部分为0; I 6 × 6 \boldsymbol{I}_{6\times 6} I6×6为 6 × 6 6\times6 6×6单位矩阵; O 6 × 3 \boldsymbol{O}_{6\times 3} O6×3为 6 × 3 6\times 3 6×3零矩阵。
5)提取矩阵
A = [ 0 1 0 − K 1 I x 0 1 0 − K 2 I y 0 1 0 − K 3 I z ] ( 5.10.6. a ) B = [ 0 1 I x 0 1 I y 0 1 I z ] ( 5.10.6. b ) C = I 6 × 6 ( 5.10.6. c ) D = O 6 × 3 ( 5.10.6. d ) u ( t ) = [ u 1 ( t ) u 2 ( t ) ⋯ u 6 ( t ) ] T ( 5.10.6. e ) x ( t ) = [ x 1 ( t ) x 2 ( t ) ⋯ x 6 ( t ) ] T ( 5.10.6. f ) d x ( t ) d t = A x ( t ) + B u ( t ) ( 5.10.6. g ) y ( t ) = C x ( t ) + D u ( t ) ( 5.10.6. h ) \begin{aligned} &\boldsymbol{A} = \begin{bmatrix} 0 &1 \\ 0 &-\frac{K_1}{I_x} \\ & &0 &1 && \\ & &0 &-\frac{K_2}{I_y} \\ &&& &0 &1 \\ &&& &0 &-\frac{K_3}{I_z} \end{bmatrix} &(5.10.6.a) \\ & \boldsymbol{B} = \begin{bmatrix} 0 & & \\ \frac{\mathrm{1}}{I_x} & & \\ &0 & \\ &\frac{\mathrm{1}}{I_y} & \\ & &0 \\ & &\frac{\mathrm{1}}{I_z} \\ \end{bmatrix} &(5.10.6.b) \\ & \boldsymbol{C} = \boldsymbol{I}_{6\times 6} & (5.10.6.c) \\ & \boldsymbol{D} = \boldsymbol{O}_{6\times 3} & (5.10.6.d) \\ &\boldsymbol{u}(t) = \begin{bmatrix} u_1(t) &u_2(t) &\cdots & u_6(t) \end{bmatrix}^{\mathrm{T}} & (5.10.6.e) \\ &\boldsymbol{x}(t) = \begin{bmatrix} x_1(t) & x_2(t) &\cdots &x_6(t) \end{bmatrix}^{\mathrm{T}} & (5.10.6.f) \\ &\frac{\mathrm{d}\boldsymbol{x}(t)}{\mathrm{d}t} = \boldsymbol{A}\boldsymbol{x}(t) + \boldsymbol{B}\boldsymbol{u}(t) & (5.10.6.g) \\ & \boldsymbol{y}(t) = \boldsymbol{C}\boldsymbol{x}(t) + \boldsymbol{D}\boldsymbol{u}(t) &(5.10.6.h) \end{aligned} A= 001−IxK1001−IyK2001−IzK3 B= 0Ix10Iy10Iz1 C=I6×6D=O6×3u(t)=[u1(t)u2(t)⋯u6(t)]Tx(t)=[x1(t)x2(t)⋯x6(t)]Tdtdx(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)(5.10.6.a)(5.10.6.b)(5.10.6.c)(5.10.6.d)(5.10.6.e)(5.10.6.f)(5.10.6.g)(5.10.6.h)
5.10.2 A1软件设计
本小节例程位于“2、飞控例程\Matlab\(3)飞行控制——自稳飞行\A1_三轴角度模型”中。
例程功能为:建立四旋翼三轴角度系统状态空间方程形式的数学模型,并仿真其对初始状态的响应。
例程中的文件如图5.10.1所示,主要修改了“M_Angle.m”、“P_plot_all.m”、“输入_系统参数.xlsx”等文件。
图5.10.1
M_Angle.m 文件
修改了初始化部分,运行部分不变。
%% 四旋转子 角度系统 动态模型% 输入:
% s_A.u 四旋转子 角度系统 输入
%
% 输出
% y 四旋转子 角度系统 输出%%
if init == 0 %未初始化%四旋转子 转速系统 系统参数 s_A.I = data_i(9, 4:6); %转动惯量s_A.K = data_i(11, 4:6); %旋阻系数%过程噪声方差、数学期望期望s_A.Q_d = [0 0 0 0 0 0]; %数学期望期望为0s_A.Q_c = data_i(13, 4:9); %过程噪声方差 角度、角速度s_A.Q_c = s_A.Q_c*pi/180; %转化单位为弧度% 定义系统状态与输出s_A.S_n = 6; %状态变量数s_A.S_m = 6; %输出变量数s_A.S_p = 3; %输入变量数s_A.x_last = zeros(s_A.S_n, 1); %上次状态变量s_A.x = zeros(s_A.S_n, 1); %当前状态变量s_A.x_last(:, 1) = [4; 3.5; 3; -2; 2; 1]; %初始状态 角度、角速度s_A.x_last = s_A.x_last.*pi/180; %转化单位为弧度s_A.y = zeros(s_A.S_n, 1); %系数输出% 定义状态空间方程s_A.A = zeros(s_A.S_n, s_A.S_n);s_A.B = zeros(s_A.S_n, s_A.S_p);s_A.C = eye(s_A.S_n); %生成一个 S_n 阶的单位矩阵s_A.D = zeros(s_A.S_m, s_A.S_p);s_A.A(1:2, 1:2) = [0, 1; 0, -s_A.K(1)/s_A.I(1)];s_A.A(3:4, 3:4) = [0, 1; 0, -s_A.K(2)/s_A.I(2)];s_A.A(5:6, 5:6) = [0, 1; 0, -s_A.K(3)/s_A.I(3)];s_A.B(2, 1) = 1/s_A.I(1);s_A.B(4, 2) = 1/s_A.I(2);s_A.B(6, 3) = 1/s_A.I(3);s_A.sys_d = c2d(ss(s_A.A, s_A.B, s_A.C, s_A.D),Ts);% 提取离散系统A矩阵s_A.A = s_A.sys_d.a;% 提取离散系统B矩阵s_A.B = s_A.sys_d.b;% 提取离散系统B矩阵s_A.C = s_A.sys_d.c;% 提取离散系统B矩阵s_A.D = s_A.sys_d.d;else %计算系统响应
......
end
- 行12~13
从Excel数组中获取三轴转动惯量、旋阻系数等参数。 - 行20~23
赋值输入、状态变量、输出的元素个数。 - 行39~41
对状态空间方程的A矩阵赋值,对应式(5.10.6.a)。 - 行43~45
对状态空间方程的B矩阵赋值,对应式(5.10.6.b)
P_plot_all.m 文件
%% 绘图文件......%% 四旋转子系统输入、输出,
......
% 三轴角度
subplot(3, 1, 2);plot(t, s_History.ya(:, 1), 'r');
hold on;
plot(t, s_History.ya(:, 3), 'g');
hold on;
plot(t, s_History.ya(:, 5), 'b');
hold on;legend('A_x', 'A_y', 'A_z');xlabel('时间(s)');
ylabel('角度(deg)');grid on;
hold off;% 三轴角速度
subplot(3, 1, 3);plot(t, s_History.ya(:, 2), 'r');
hold on;
plot(t, s_History.ya(:, 4), 'g');
hold on;
plot(t, s_History.ya(:, 6), 'b');
hold on;legend('W_x', 'W_y', 'W_z');xlabel('时间(s)');
ylabel('角速度(deg/s)');
grid on;
hold off;
-
行13~16
绘制y、z轴角度曲线图。 -
行31~34
绘制y、z轴角速度曲线图。
5.10.3 A1运行与调试
双击进入“A1_main.mlx”文件,点击上方“实时编辑器”中的“运行”按钮即可运行例程。运行结果如图5.10.2所示,例程当前只控制了x轴的角度与角速度,其它状态变量。
(a)
(b)
图 5.10.2
5.10.4 三轴角度串级PID控制器
y轴、z轴的串级PID控制与x轴类似,只是期望、测量值等变为了y、z轴,此处不再赘述。
5.10.5 A2软件设计
本小节例程位于“2、飞控例程\Matlab\(3)飞行控制——自稳飞行\A2_三轴串级PID控制角度”中。
例程功能为:使用3组(共6环)的串级PID对四旋翼三轴的角度、角速度进行控制。
例程中的文件如图5.10.3所示,主要修改了“C_Cascade_PID.m”文件。
图5.10.3
C_Cascade_PID.m 文件
%% 四旋翼 串级PID 控制器
% 输入:
% s_A.y 角度系统的输出
%
% 输出
% s_mot.u_all 四个电机的功率%% if init == 0 %未初始化% 变量默认顺序,Ax、Wx、Ay、Wy、Az、Wzs_pid.d = data_i(26, 4:9); %串级PID期望,三轴角度、角速度,单位:deg、deg/ss_pid.d = s_pid.d *pi/180; %转化单位为弧度s_pid.K_pid = data_i(14:19, 4:6); %PID参数 s_pid.e_last = zeros(6, 1);s_pid.Ei = zeros(6, 1);s_pid.y = zeros(6, 1);% 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;for PID_index = 1:3% % 角度环
% Sys_e(k) = Expect(PID_index) - y(k, 1); %角度 期望与测量误差
% [Sys_u(k), Sys_Ei(k)] = C_PID(Ts, K_pid(k, :), Sys_e(k), Sys_e_last(k), Sys_Ei(k));
% Sys_e_last(k) = Sys_e(k); %保存本次误差% 角速度环s_pid.e(k) = s_pid.d(k) - 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;
% % 角速度环
% Sys_e(k) = Sys_u(k-1) - y(k, 1); %角速度 角度环输入与测量误 之差
% [Sys_u(k), Sys_Ei(k)] = C_PID(Ts, K_pid(k, :), Sys_e(k), Sys_e_last(k), Sys_Ei(k));
% Sys_e_last(k) = Sys_e(k); %保存本次误差% 角速度环s_pid.e(k) = ( s_pid.d(k) + s_pid.y(k-1) ) - 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% % 角速度环
% s_pid.e(1) = s_pid.d(1) - s_A.y(3, 1); %角度 期望与测量误差
% [s_pid.y(1), s_pid.Ei(1)] = C_PID(Ts, s_pid.K_pid(1, :), s_pid.e(1), s_pid.e_last(1), s_pid.Ei(1));
% s_pid.e_last(1) = s_pid.e(1); %保存本次误差
%
% % 角速度环
% s_pid.e(2) = ( s_pid.d(2) + s_pid.y(1) ) - s_A.y(4, 1); %角速度 期望与测量误差
% [s_pid.y(2), s_pid.Ei(2)] = C_PID(Ts, s_pid.K_pid(2, :), s_pid.e(2), s_pid.e_last(2), s_pid.Ei(2));
% s_pid.e_last(2) = s_pid.e(2); %保存本次误差% PID输出转化为各电机功率s_pid.PID_out = [s_pid.y(2) s_pid.y(4) s_pid.y(6) 500]'; %x、y、z三轴角速度环输出、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
-
行12~14
读取角度、角速度控制期望值与各环PID参数。 -
行28~52
使用for循环,运行三轴角度环、角速度环PID。与单轴的串级PID类似。
5.10.6 A2运行与调试
双击进入“A1_main.mlx”文件,点击上方“实时编辑器”中的“运行”按钮即可运行例程。运行结果如图5.10.4所示,可以发现经过5秒后,三轴角度、角速度都接近了控制期望值。
(a)
(b)
图 5.10.4
这篇关于5.10 飞行控制——自稳飞行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!