1. 项目概述
这个项目实现了一个基于LQR控制的四旋翼无人机系统,用于监控受限空域并拦截入侵无人机。系统需要完成三个核心任务:稳定悬停、追踪拦截未知无人机、以及在干扰环境下携带捕获的无人机返航。四旋翼无人机凭借其垂直起降能力和灵活机动性,非常适合这类任务,但其复杂的非线性动力学特性也给控制带来了挑战。
我在实际无人机控制系统开发中发现,LQR控制器的关键在于如何在线性化处理时保留足够的非线性特性信息。项目中采用的泰勒级数展开法虽然常见,但需要特别注意工作点的选择。当无人机处于高速追踪状态时,简单的悬停点线性化会导致控制器性能下降。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统建模与线性化
2.1 四旋翼动力学模型
四旋翼的六自由度动力学模型可以用以下方程描述:
code复制位置动力学:
m·d²x/dt² = (cosφsinθcosψ + sinφsinψ)·U₁
m·d²y/dt² = (cosφsinθsinψ - sinφcosψ)·U₁
m·d²z/dt² = (cosφcosθ)·U₁ - mg
姿态动力学:
I·dω/dt + ω×(I·ω) = [l(U₂-U₄); l(U₃-U₁); κ(U₁-U₂+U₃-U₄)]
其中U₁到U₄是四个电机的控制输入,l是电机到质心的距离,κ是反扭矩系数。这个强耦合的非线性系统需要经过适当处理才能应用LQR控制。
注意:建模时需要考虑电机动力学延迟,实际项目中我测得典型响应时间约为50-100ms,这需要在控制器设计中预留足够的相位裕度。
2.2 线性化处理
在悬停状态(φ=θ=ψ≈0)附近进行泰勒展开,得到线性化模型:
code复制ẋ = Ax + Bu
其中状态向量x包含位置、姿态及其导数共12个变量。通过Matlab符号计算得到的雅可比矩阵:
matlab复制A = jacobian(f, z);
B = jacobian(f, u);
A = subs(A, u(i), mg/4); % 悬停点线性化
B = subs(B, u(i), mg/4);
在实际调试中,我发现当俯仰角超过15°时,线性模型的误差会显著增大。因此建议在轨迹规划时将姿态角限制在±12°以内。
3. LQR控制器设计
3.1 代价函数设计
LQR的核心是设计二次
