5.10 飞行控制——自稳飞行

news2024/9/25 15:24:16

文章目录

    • 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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录一个iOS工程添加文件的问题

遇到一个紧急问题,将工程copy了一份,然后需要将copy工程的一个文件夹 拖到现有的工程里面,由于事情紧急,就直接从工程目录中拖拽文件夹, 如下图 拖过之后,本地项目能跑了,但是远端自动化构建是…

World of Warcraft [CLASSIC][80][Grandel] Equipment Recovery

World of Warcraft [CLASSIC][80][Grandel] Equipment Recovery 魔兽世界怀旧服装备恢复流程 打开战网-服务-误删恢复 选择角色 恢复装备 选中自己不小心卖点的装备,例如我是2024.07.01卖掉T3肩膀 联系方式,描述,误操作时间 客服邮件 邮件中…

【性能优化】:探索系统瓶颈的根源(一)

背景 本次分享的这个项目是财务系统,众所周知,财务项目的特点是系统复杂、业务繁琐,开发一个完整的财务平台,开发周期长,参与人员多,且每月月初需要产出财务报表以供财务人员分析审核。 所以,财…

【大模型从入门到精通43】LLM部署运维(LLM Ops)使用Kubeflow Pipelines掌握LLM工作流5

这里写目录标题 实践练习 实践练习 设置Kubeflow Pipelines SDK # 导入Kubeflow Pipelines SDK中的必要模块 from kfp import dsl, compiler# 抑制来自Kubeflow Pipelines SDK的FutureWarning警告 import warnings warnings.filterwarnings("ignore", categoryFutu…

网络路由介绍,route指令,查询路由表的过程,默认路由

目录 路由 本地主机的路由功能 引入 route指令 查询路由表的过程 介绍 示例 默认路由 注意 路由 本地主机的路由功能 引入 报文经过多个路由器转发至公网,再从公网定位后转发至私网,最终到达目标主机 而报文肯定是要先经过本地主机的 所以本地主机也具有路由功能,也…

不平衡分类阈值移动的简单介绍

不平衡分类阈值移动的简单介绍 分类预测模型通常涉及预测类别标签。 尽管如此,许多机器学习算法能够预测类别成员的概率或得分,并且必须对其进行解释,然后才能将其映射到明确的类别标签。这是通过使用阈值(例如 0.5)…

redis面试(二十三)写锁释放

先加了写锁,后面再次加写锁或者读锁 anyLock: { “mode”: “write”, “UUID_01:threadId_01:write”: 2, “UUID_01:threadId_01”: 1 } 写锁的释放lua脚本在这里 RedissonWriteLock.unlockInnerAsync() 比如说现在的参数是这 KEYS[1] anyLock KEYS[2] redi…

计算机毕业设计选题推荐-摇滚音乐鉴赏网站-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

提示工程自动化实践

提示工程很糟糕。 这是使用大型语言模型最乏味的部分。这些模型非常挑剔,对提示进行看似无害的更改可能会导致截然不同的结果。我厌倦了手动调整、不系统的变化以及与手动提示工程相关的头痛…… 首先让我们统一认识,提示工程是指对 AI 模型给出的指令…

【jave】第一个JAVA程序,显示日期

<html> <script> function displayDate() { document.getElementById("demo").innerHTMLDate() } </script> <body> <p iddemo>这是学习的第一个程序 </p> <button typebutton οnclick"displayDate()">…

RabbitMQ练习(Publish/Subscribe)

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考&#xff1a;《RabbitMQ练习&#xff08;Hello World&#xff09;》和《RabbitMQ练习&#xff08;Work Queues&#xff09;》。 确保RabbitMQ、Sender、Receiver、Receiver2容器…

数据仓库系列8:如何设计一个高性能的数据仓库模型?

目录 为什么高性能数据仓库模型如此重要?设计高性能数据仓库模型的核心原则案例研究&#xff1a;电子商务数据仓库设计步骤1: 需求分析步骤2: 选择适当的模型步骤3: 定义事实表和维度表步骤4: 设计星型模式 实施星型模式&#xff1a;步骤和最佳实践优化查询性能的关键技术数据…

【C语言】函数(一)

函数的概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数 ykxb &#xff0c;k和b都是常数&#xff0c;给一个任意的x&#xff0c;就得到一个y值。 其实在C语言也引入函数&#xff08;function&#xff09;的概念&#xff0c;有些翻译为&#xff1a;子…

【uni-app】从零到一的项目搭建及环境配置

文章目录 简介环境配置Node环境配置安装 HBuilderX 开始创建项目项目结构开发指南插件管理运行项目调试测试发布 简介 uni-app 是一个使用 Vue.js 开发跨平台应用的框架&#xff0c;允许开发者编写一次代码&#xff0c;发布到 iOS、Android、Web&#xff08;包括 PC 和移动端浏…

【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

QtCreator错误:Qt没有被正确安装,请运行make install(适用Qt4、Qt5、Qt6)

一、问题环境 &#xff08;1&#xff09;Windows 10企业版&#xff0c;64位 &#xff08;2&#xff09;Visual Studio 2019 &#xff08;3&#xff09;Qt5.12.12 x64版本&#xff08;自己编译&#xff09; &#xff08;4&#xff09;Qt Creator 12.0.1 二、问题描述&#…

CM工作室发展史 上

&#xff0c;注&#xff1a;本文章未使用"无标题技术" 目录 &#xff08;超长文章&#xff01;&#xff09; 新手时期 初来乍到 第一篇文章 第一个专栏——沙雕程序 学习"块引用" 第一次修改用户名 学习"代码" "头文件风波"时期 头…

什么是大模型的位置编码Position Encoding?

1. 什么是位置编码 位置编码&#xff08;Positional Encoding&#xff09;是一种在处理序列数据时&#xff0c;用于向模型提供序列中每个元素位置信息的技术。 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;尤其是在使用Transformer模型时&#xff0c;位置编码尤…

科讯档案管理系统存在SQL注入漏洞(0day)

漏洞描述 安徽科迅教育装备20年来来始终坚持智慧校园集成方案产品的开发和部署应用&#xff0c;我们有完善的智慧校园和数字校园建设方案&#xff0c;根据不同的学校不同的实际情况量身定做系统集成方案。产品主要是为了实现校园的智慧网络、智慧OA、智慧教学、智慧学习、数字医…

【系统架构设计师-2018年】综合知识-答案及详解

文章目录 【第1题】【第2~3题】【第4题】【第5~6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16~17题】【第18~21题】【第22题】【第23题】【第24题】【第25题】【第26题】【第27~28题】【第29~30题】【第31题】【第32~3…