无人机MATLAB建模与仿真:完整指南
本指南将分为以下几个核心部分:

- 理论基础:理解无人机的基本物理模型。
- 数学建模:建立无人机的运动学和动力学方程。
- MATLAB/Simulink 实现:将数学模型转化为可仿真的代码和模块。
- 控制器设计:设计能让无人机稳定飞行的控制器(PID)。
- 3D 可视化:使用 MATLAB 3D 工具箱实现逼真的飞行仿真。
- 扩展与进阶:介绍更高级的仿真技术。
理论基础:四旋翼无人机
我们以最常见的四旋翼无人机为例,它有四个旋翼,通过改变四个电机的转速,产生不同的升力和力矩,从而实现六个自由度的运动(三个平移:x, y, z;三个旋转:滚转、俯仰、偏航)。
- 结构:通常为“X”型或“+”型布局。
- 自由度:6个自由度,但在悬停时主要控制3个。
- 控制:
- 垂直:同时增加/减小四个电机的转速。
- 俯仰:增加后侧两个电机的转速,减小前侧两个电机的转速(或反之)。
- 滚转:增加右侧两个电机的转速,减小左侧两个电机的转速(或反之)。
- 偏航:利用反扭矩实现,对角线上的两个电机转向相同,另一对相反,增加一对电机的转速,其反扭矩会使无人机向另一对电机方向偏航。
数学建模:建立无人机动力学方程
建模是仿真的核心,我们通常使用牛顿-欧拉方程来描述无人机的运动。
A. 坐标系定义
- 惯性坐标系:固定在地球上的坐标系,记为
I = (X_I, Y_I, Z_I),Z_I指向地心。 - 机体坐标系:固定在无人机上的坐标系,记为
B = (X_B, Y_B, Z_B)。X_B:指向机头(俯仰轴)。Y_B:指向右侧(滚转轴)。Z_B:指向机身下方(垂直轴)。
B. 状态变量
- 位置:
p = [x, y, z]^T(在惯性坐标系中) - 速度:
v = [u, v, w]^T(在机体坐标系中) - 姿态角:
- (滚转角 Roll)
- (俯仰角 Pitch)
- (偏航角 Yaw)
- 角速度:
ω = [p, q, r]^T(在机体坐标系中)
C. 动力学方程
根据牛顿第二定律,在机体坐标系中,合外力 F 和合力矩 可以表示为:
平移动力学 (力方程)
m * dv/dt = R * F_gravity + F_thrust

m: 无人机质量v = [u, v, w]^T: 机体坐标系下的速度R: 从机体坐标系到惯性坐标系的旋转矩阵F_gravity = [0, 0, -mg]^T: 重力F_thrust: 旋翼产生的总推力,方向沿机体Z_B轴负方向,即F_thrust = [0, 0, -T]^T,T是总推力大小。
旋转动力学 (力矩方程)
I * dω/dt + ω × (I * ω) = τ
I: 无人机的转动惯量矩阵 (3x3)ω = [p, q, r]^T: 机体坐标系下的角速度τ = [τ_φ, τ_θ, τ_ψ]^T: 旋翼产生的总力矩(滚转、俯仰、偏航)
D. 运动学方程
位置运动学
dp/dt = R * v
- 它将机体坐标系下的速度
v转换到惯性坐标系下的位置变化率dp/dt。
姿态运动学
d[φ, θ, ψ]^T/dt = E(φ, θ) * ω
E(φ, θ)是一个将机体角速度 转换为姿态角变化率的矩阵,对于小角度,可以简化。
E. 输入与输出的关系
电机输入 U = [U_1, U_2, U_3, U_4]^T 与力和力矩的转换关系:
- 总推力:
T = U_1 = k_f * (ω_1^2 + ω_2^2 + ω_3^2 + ω_4^2) - 滚转力矩:
τ_φ = U_2 = k_f * l * (ω_4^2 - ω_2^2) - 俯仰力矩:
τ_θ = U_3 = k_f * l * (ω_3^2 - ω_1^2) - 偏航力矩:
τ_ψ = U_4 = k_m * (ω_1^2 - ω_2^2 + ω_3^2 - ω_4^2)
k_f 是升力系数,k_m 是力矩系数,l 是电机到中心的距离。
MATLAB/Simulink 实现
有两种主流方法:脚本编程 和 Simulink 框图,Simulink 更直观,适合处理连续时间动态系统。
Simulink 实现 (推荐)
-
创建新模型:打开 MATLAB,在命令窗口输入
simulink,创建一个空白模型。 -
搭建模块:
- 无人机模型 (Plant):
- 使用
MATLAB Function模块,将上面推导的动力学和运动学方程编写成 MATLAB 函数,这是最核心的部分。 - 输入:总推力
T和力矩τ_φ, τ_θ, τ_ψ。 - 输出:位置
p、速度v、姿态角[φ, θ, ψ]、角速度 。 - 注意:这个函数需要求解微分方程组,在函数内部,使用
ode45等求解器来更新状态,或者,更简单的方法是,将整个模型分解为积分器模块。
- 使用
- 积分器:
- 将
dv/dt,dp/dt,d[φ,θ,ψ]/dt等表达式分别用 Simulink 的数学模块(加法器、增益、三角函数等)构建出来。 - 将这些输出连接到 Integrator 模块的输入端,积分器的输出就是
v,p,[φ,θ,ψ]等状态变量。
- 将
- 旋转矩阵
R:- 用
Trigonometric Function模块计算cos和sin,然后构建R矩阵。
- 用
- 传感器模型:
- 为了模拟真实传感器,可以添加噪声,使用
Band-Limited White Noise和Transfer Fcn模块来模拟 IMU(陀螺仪、加速度计)和 GPS 的噪声和动态特性。
- 为了模拟真实传感器,可以添加噪声,使用
- 控制器:
暂时留空,后面再添加。
- 无人机模型 (Plant):
-
基本模型结构:
控制器设计:PID 控制器
PID 是最经典、最易于实现的控制器,我们的目标是让无人机悬停在某个设定点 [x_d, y_d, z_d, φ_d, θ_d, ψ_d]。
A. 分层控制结构
- 位置环 (外环):
- 目标:控制无人机的位置
(x, y, z)。 - 输入:期望位置
(x_d, y_d, z_d)和实际位置(x, y, z)。 - 输出:期望的姿态角
(φ_d, θ_d, z_d)和总推力T_d。
- 目标:控制无人机的位置
