多旋翼无人机在当今社会的应用已经渗透到各个领域,从最初的航拍摄影到如今的精准农业、三维测绘、基础设施巡检,甚至医疗物资运输等关键场景。在这些应用中,无人机的飞行性能直接决定了任务执行的效率和质量。而飞行性能的核心指标之一,就是无人机能否在最短时间内完成既定轨迹,同时保持稳定可控。
传统PID控制虽然能够实现基本的轨迹跟踪,但在面对复杂机动任务时往往显得力不从心。特别是在需要快速避障或执行高动态动作的场景下,单纯的位置控制难以充分发挥无人机的性能潜力。这就引出了我们今天要探讨的核心问题——如何为多旋翼无人机规划时间最优的飞行轨迹。
时间最优轨迹规划的本质,是在满足无人机动力学约束的前提下,找到从起点到终点耗时最短的运动路径。这听起来简单,实则涉及复杂的数学建模和优化计算。我们需要同时考虑无人机的物理限制(如最大推力、角速度限制)和运动学约束(如速度、加速度边界),还要处理各种非线性因素。
多旋翼无人机通常采用四旋翼或六旋翼配置,其完整动力学模型包含12个状态变量(位置、速度、姿态角、角速度)。但为了简化问题,我们可以将三维空间运动解耦,单独分析横向运动。这就引出了我们的第一个简化模型——不考虑旋转动力学的平面运动模型。
在这个简化模型中,我们主要关注四个状态变量:
对应的动力学方程可以表示为:
code复制ẋ = vx
ż = vz
v̇x = -(uT/m)sinθ
v̇z = (uT/m)cosθ - g
θ̇ = ω
其中uT为总推力,m为无人机质量,g为重力加速度,ω为角速度。
虽然简化模型便于分析,但忽略了电机响应延迟和机身转动惯量等实际因素。为此,我们引入第二个模型——考虑旋转动力学的增强模型。这个模型在原有基础上增加了角速度状态变量θ̇,并引入旋转控制输入uR。
增强后的动力学方程为:
code复制θ̈ = uR/Iyy
其中Iyy表示绕y轴的转动惯量。这个新增的方程捕捉了无人机姿态变化的动态过程,使模型更接近真实物理系统。
要解决时间最优控制问题,我们需要借助庞特里亚金极小值原理这一强大工具。该原理将最优控制问题转化为一组微分方程求解问题,通过引入协状态变量(costate variables)构建哈密顿函数。
对于我们的系统,哈密顿函数定义为:
code复制H = 1 + λ1*vx + λ2*vz + λ3*(-(uT/m)sinθ) + λ4*((uT/m)cosθ - g) + λ5*ω
其中λ1-λ5为协状态变量,满足:
code复制λ̇i = -∂H/∂xi
根据极小值原理,最优控制输入应使哈密顿函数取极小值。通过对H关于uT和uR求导并令导数为零,我们可以得到最优控制律:
code复制uT* = {
uT_max, 当S < 0
uT_min, 当S > 0
}
其中S = -λ3*sinθ + λ4*cosθ
类似地,对于旋转控制输入:
code复制uR* = {
uR_max, 当λ5 < 0
-uR_max, 当λ5 > 0
}
这种"bang-bang"控制形式是时间最优控制的典型特征,控制输入总是在其边界值之间切换。
为了数值求解最优控制问题,我们需要将连续时间问题离散化。采用欧拉离散化方法,将时间划分为N个区间,每个区间长度为Δt(也是优化变量之一)。这样,原问题就转化为一个非线性规划(NLP)问题。
在MATLAB中,我们使用fmincon函数求解这个NLP问题。关键步骤包括:
matlab复制X = [x1,...,xN; vx1,...,vxN; z1,...,zN; vz1,...,vzN; θ1,...,θN];
U = [uT1,...,uTN; uR1,...,uRN];
matlab复制objective = @(vars) sum(vars.dt);
matlab复制for k = 1:N-1
ceq = [ceq; x(k+1)-(x(k)+vx(k)*dt(k))];
ceq = [ceq; vx(k+1)-(vx(k)-(uT(k)/m)*sin(θ(k))*dt(k))];
% 其他状态变量类似...
end
当考虑旋转动力学时,需要在状态变量中增加θ̇,并添加对应的动力学约束:
matlab复制if rot_dyn == 1
X = [X; thetadot1,...,thetadotN];
for k = 1:N-1
ceq = [ceq; thetadot(k+1)-(thetadot(k)+uR(k)/Iyy*dt(k))];
end
end
仿真完成后,我们可以绘制状态轨迹和控制输入曲线:
matlab复制figure(1)
plot(tt, px, 'linewidth', 2);
hold on
plot(tt, vx, 'linewidth', 2);
% 其他状态变量...
legend({'$x^*$','$\dot{x}^*$','$z^*$'},...
'Interpreter','latex','Fontsize',15);
在简单模型中,无人机可以瞬时改变姿态角θ。仿真结果显示,控制输入uT和uR呈现典型的bang-bang特性,状态轨迹平滑但存在突变点。这种理想化模型虽然计算简单,但实际无人机由于转动惯量限制无法实现这种瞬时响应。
引入旋转动力学后,姿态角变化率θ̇成为状态变量,控制输入uR直接影响θ̇而非直接控制θ。仿真结果显示:
特别值得注意的是,在考虑旋转动力学后,最大俯仰角的到达时间明显延后,这与实际飞行体验一致——无人机需要时间来完成姿态调整。
本文介绍的方法可以扩展到更复杂的场景:
在MATLAB实现上,这些扩展主要涉及约束条件的增加和目标函数的修改,核心优化框架保持不变。例如,多机避碰可以通过添加如下约束实现:
matlab复制for i = 1:N_drones
for j = i+1:N_drones
ceq = [ceq; norm(pos_i-pos_j) > safe_distance];
end
end
可能原因及解决方案:
解决方案:
优化策略:
matlab复制% 不佳实现
for k = 1:N-1
x(k+1) = x(k) + vx(k)*dt(k);
end
% 优化实现
x(2:N) = x(1:N-1) + vx(1:N-1).*dt(1:N-1);
matlab复制rot_dyn = 0; % 简化模型
scenario = 1; % 垂直运动
initial_guess.x = linspace(0, 10, N);
initial_guess.z = linspace(0, 5, N);
matlab复制rot_dyn = 1; % 完整模型
scenario = 2; % 水平运动
% 添加障碍物约束
for k = 1:N
ceq = [ceq; (x(k)-obs_x)^2 + (z(k)-obs_z)^2 - obs_r^2];
end
在实际应用中,我发现将理论最优轨迹与实测数据进行比对非常重要。通过记录实际飞行数据并反推等效模型参数,可以不断修正理论模型,使规划结果更加准确。这个过程通常需要3-5次迭代才能获得满意的匹配精度。