四旋翼飞行器的 Simulink 仿真与 PD 串级控制轨迹跟踪仿真之旅
在研究四旋翼飞行器时,理解坐标系是关键的第一步。通常会用到两种主要坐标系:惯性坐标系(也叫大地坐标系)和机体坐标系。惯性坐标系是固定在地球上的参考系,一般以地球表面某点为原点,X 轴指向正东,Y 轴指向正北,Z 轴垂直向上。而机体坐标系则固定在飞行器上,原点位于飞行器质心,X 轴沿飞行器机头方向,Y 轴沿飞行器右翼方向,Z 轴垂直于飞行器底面向上。这两个坐标系的转换关系对于飞行器的运动分析至关重要
四旋翼飞行器的simulink仿真与pd串级控制轨迹跟踪仿真项目 包括了飞行器坐标系介绍 四旋翼飞行器建模 控制器涉及 以及matlab仿真脚本书写 仅提供报告 供参考使用
嘿,大家好!今天来聊聊超有趣的四旋翼飞行器的 Simulink 仿真以及 PD 串级控制轨迹跟踪仿真项目。这个项目涉及到飞行器坐标系介绍、建模、控制器设计还有 Matlab 仿真脚本编写,满满的干货,咱们这就开始。
飞行器坐标系介绍
在研究四旋翼飞行器时,理解坐标系是关键的第一步。通常会用到两种主要坐标系:惯性坐标系(也叫大地坐标系)和机体坐标系。
惯性坐标系是固定在地球上的参考系,一般以地球表面某点为原点,X 轴指向正东,Y 轴指向正北,Z 轴垂直向上。而机体坐标系则固定在飞行器上,原点位于飞行器质心,X 轴沿飞行器机头方向,Y 轴沿飞行器右翼方向,Z 轴垂直于飞行器底面向上。
这两个坐标系的转换关系对于飞行器的运动分析至关重要。比如在 Simulink 仿真里,我们常常要在不同坐标系下对飞行器的位置、速度等参数进行计算和变换。
四旋翼飞行器建模
建模是整个项目的核心部分啦。四旋翼飞行器的动力学模型可以通过牛顿 - 欧拉方程来建立。简单来说,飞行器所受合力与合力矩分别决定了它的线加速度和角加速度。

假设飞行器质量为 $m$,重力加速度为 $g$,四个旋翼产生的升力分别为 $F1$、$F2$、$F3$、$F4$,总升力 $F = F1 + F2 + F3 + F4$。在惯性坐标系下,飞行器的线运动方程可表示为:
\[
\begin{cases}
m\ddot{x} = F\sin\theta\cos\phi \\

m\ddot{y} = F\sin\theta\sin\phi \\
四旋翼飞行器的simulink仿真与pd串级控制轨迹跟踪仿真项目 包括了飞行器坐标系介绍 四旋翼飞行器建模 控制器涉及 以及matlab仿真脚本书写 仅提供报告 供参考使用
m\ddot{z} = F\cos\theta - mg
\end{cases}

\]
这里 $\theta$ 是俯仰角,$\phi$ 是滚转角。
角运动方程稍微复杂点,涉及到转动惯量等参数,不过原理类似。在 Matlab 中,我们可以用代码来实现这些方程的计算,比如这样:
% 定义参数
m = 1; % 飞行器质量
g = 9.81; % 重力加速度
% 假设已经计算得到的总升力 F
F = 10;
theta = pi/4; % 俯仰角示例值
phi = pi/6; % 滚转角示例值
% 计算线加速度
xddot = (F * sin(theta) * cos(phi)) / m;
yddot = (F * sin(theta) * sin(phi)) / m;
zddot = (F * cos(theta) - m * g) / m;
这段代码简单地根据给定的参数,按照上面的运动方程计算了飞行器在三个方向上的线加速度。
控制器设计 - PD 串级控制
PD 串级控制是实现飞行器轨迹跟踪的有效方法。它分为外环和内环,外环通常负责位置控制,内环负责姿态控制。
外环 PD 控制器根据期望位置和当前位置的偏差来计算期望姿态。例如,位置偏差 $\Delta x = x{desired} - x{current}$,外环 PD 控制器输出 $u{out} = K{p{out}}\Delta x + K{d{out}}\dot{\Delta x}$,这里 $K{p{out}}$ 和 $K{d_{out}}$ 分别是外环的比例和微分系数。

内环 PD 控制器则根据期望姿态和当前姿态的偏差来计算控制输入,即四个旋翼的升力。类似地,姿态偏差 $\Delta \theta = \theta{desired} - \theta{current}$,内环 PD 控制器输出 $u{in} = K{p{in}}\Delta \theta + K{d_{in}}\dot{\Delta \theta}$。
在 Simulink 中搭建 PD 串级控制器模型大概是这样的(这里简单示意模块连接关系):
- 首先有位置输入模块,输入期望位置信息。
- 与当前位置信息做差,连接到外环 PD 控制模块,设置好 $K{p{out}}$ 和 $K{d{out}}$ 参数。
- 外环输出作为内环的期望姿态输入,与当前姿态做差,再连接到内环 PD 控制模块,设置好 $K{p{in}}$ 和 $K{d{in}}$ 参数。
- 内环最终输出控制信号给四旋翼模型,以调整旋翼升力。
Matlab 仿真脚本编写
最后就是编写 Matlab 仿真脚本来把前面的模型和控制器整合起来啦。以下是一个简单的仿真脚本框架示例:
% 初始化参数
m = 1; % 飞行器质量
g = 9.81; % 重力加速度
% 定义 PD 控制器参数
Kp_out = 10;
Kd_out = 5;
Kp_in = 50;
Kd_in = 20;
% 仿真时间设置
tspan = 0:0.01:10; % 仿真时间从 0 到 10 秒,步长 0.01 秒
% 初始条件
x0 = [0; 0; 0; 0; 0; 0]; % 初始位置和速度
% 定义仿真函数
function dxdt = quadrotor_model(t, x, m, g, Kp_out, Kd_out, Kp_in, Kd_in)
% 提取状态变量
x_pos = x(1); y_pos = x(2); z_pos = x(3);
x_vel = x(4); y_vel = x(5); z_vel = x(6);
% 假设的期望位置
x_des = 1; y_des = 1; z_des = 1;
% 外环 PD 控制
u_out_x = Kp_out * (x_des - x_pos) - Kd_out * x_vel;
u_out_y = Kp_out * (y_des - y_pos) - Kd_out * y_vel;
u_out_z = Kp_out * (z_des - z_pos) - Kd_out * z_vel;
% 内环 PD 控制(这里简单示意,实际更复杂涉及姿态角)
% 假设姿态角为 0
u_in_x = Kp_in * u_out_x;
u_in_y = Kp_in * u_out_y;
u_in_z = Kp_in * u_out_z;
% 计算合力
F = u_in_x + u_in_y + u_in_z;
% 运动方程
xddot = (F * sin(0) * cos(0)) / m;
yddot = (F * sin(0) * sin(0)) / m;
zddot = (F * cos(0) - m * g) / m;
% 状态变量导数
dxdt = [x_vel; y_vel; z_vel; xddot; yddot; zddot];
end
% 进行仿真
[t, x] = ode45(@(t, x) quadrotor_model(t, x, m, g, Kp_out, Kd_out, Kp_in, Kd_in), tspan, x0);
% 绘制结果
figure;
subplot(3,1,1);
plot(t, x(:,1));
title('X 位置');
xlabel('时间 (s)');
ylabel('位置 (m)');
subplot(3,1,2);
plot(t, x(:,2));
title('Y 位置');
xlabel('时间 (s)');
ylabel('位置 (m)');
subplot(3,1,3);
plot(t, x(:,3));
title('Z 位置');
xlabel('时间 (s)');
ylabel('位置 (m)');
这个脚本首先初始化了飞行器和 PD 控制器的参数,设置了仿真时间和初始条件。然后定义了一个描述飞行器模型和控制过程的函数 quadrotor_model,在这个函数里实现了 PD 控制算法和飞行器动力学方程。最后使用 ode45 函数进行仿真,并绘制出飞行器在三个方向上的位置随时间变化的曲线。
好啦,以上就是四旋翼飞行器的 Simulink 仿真与 PD 串级控制轨迹跟踪仿真项目的大致内容。希望这篇博文能给大家在相关研究或学习上带来一些启发。如果有疑问,欢迎在评论区留言交流呀!
更多推荐
所有评论(0)