5.10 飞行控制——自稳飞行


详细资料见Q群:531905626

对该项目感兴趣的同志,想要一起深入开发拓展可以联系本人邮箱:2560198277@qq.com。限于本人精力,在PCB设计、3D建模、嵌入式开发方面都有较大的需求。

书籍总目录: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 IyIz——机体坐标系下,四旋翼对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 K2K3——y、z轴旋阻系数,与空气阻力相关。
   M y 、 M z M_y、M_z MyMz——电机产生的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) = 001IxK1001IyK2001IzK3 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= 001IxK1001IyK2001IzK3 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];       %数学期望期望为0
    s_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、Wz
    s_pid.d = data_i(26, 4:9);       %串级PID期望,三轴角度、角速度,单位:deg、deg/s
    s_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值