第一章:轨迹控制概述

大家好,我是老张。在飞行器控制这个行当摸爬滚打了十几年,今天咱们聊聊轨迹控制的那些事儿。

轨迹控制,说白了就是让飞行器按照我们规划的路径飞。你想想看,无人机要送快递、战斗机要做机动、火箭要入轨,本质上都是同一个问题——怎么让飞行器听话地走完预定路线。

1.1 飞行器动力学基础

搞轨迹控制,动力学是躲不开的坎。我记得刚入行那会儿,总觉得动力学方程太复杂,想绕过去。结果呢?仿真跑得挺好,一上真机就炸。嗯,后来老老实实补课了。

飞行器动力学,核心就是牛顿第二定律和欧拉方程:

m * a = F_ext          // 平动动力学
I * ω_dot + ω × Iω = M  // 转动动力学

这里我特别想强调一点:千万别把动力学和运动学搞混了。动力学研究的是力和运动的关系,运动学只关心位置、速度、加速度的几何关系。我在项目中遇到过不少新人,拿着运动学方程当动力学用,结果控制律设计出来根本推不动飞机。

核心要点:动力学方程中的力F和力矩M,才是我们控制器的输出。运动学只是描述状态变化,不涉及力的计算。

实际工程中,我们通常把动力学模型简化处理。比如四旋翼,我们一般忽略空气阻力、陀螺效应这些小项。为什么?因为控制器有鲁棒性,能扛得住这些未建模动态。但要注意,简化要有度——我见过有人把重力项都省了,那肯定不行。

1.2 坐标系定义

坐标系这东西,看着简单,坑却不少。我刚开始做项目时,就因为坐标系搞反了,让飞机在天上翻了几个跟头...还好是仿真。

常用的坐标系有三个:

坐标系 符号 原点 用途
地固坐标系 E系 地面某点 导航、规划
机体坐标系 B系 飞行器质心 控制、传感器
航迹坐标系 W系 飞行器质心 轨迹跟踪

我个人习惯用欧拉角来描述姿态,虽然它有万向锁的问题,但物理意义直观。做轨迹控制时,我们经常需要在不同坐标系之间转换。这里有个避坑指南:转换矩阵一定要验证正交性。我曾经因为手算的旋转矩阵精度不够,导致导航解算发散,查了三天bug。

工程小技巧:写代码时,把坐标系转换封装成独立函数,每次调用后做单位检测。这样能避免很多低级错误。

1.3 控制算法工程化全流程概览

从算法到真机,中间隔着十万八千里。我见过太多人在仿真里跑得飞起,一上真机就各种问题。为什么会这样?因为工程化不只是写代码。

完整的工程化流程是这样的:

  1. 需求分析——搞清楚飞行器要飞什么轨迹,精度要求多少
  2. 模型建立——根据飞行器参数建立动力学模型
  3. 算法设计——选择控制策略,比如PID、LQR、MPC
  4. 仿真验证——在MATLAB/Simulink里跑通
  5. 代码实现——用C++或Python写嵌入式代码
  6. 硬件在环测试——接上真实飞控板跑
  7. 真机试飞——从悬停到简单轨迹,逐步推进

这里我想重点说说第5步。很多新手觉得仿真通过了,代码随便写写就行。大错特错!嵌入式代码和仿真代码完全是两码事。仿真里你可以用double,嵌入式里可能只能用float;仿真里你可以随便malloc,嵌入式里内存是稀缺资源。

警告:千万不要把MATLAB代码直接翻译成C代码就跑。数值精度、计算效率、内存管理,每个环节都可能出问题。我见过最惨的一次,就因为浮点精度不够,导致积分漂移,飞机直接侧翻。

下面这张图,是我总结的轨迹控制工程化知识体系:

轨迹控制工程化知识体系 理论基础 坐标系与变换 控制算法 动力学模型 牛顿-欧拉方程 空气动力学简化 模型参数辨识 坐标变换 E系↔B系转换 欧拉角/四元数 旋转矩阵正交性 控制策略 PID/LQR/MPC 串级控制结构 鲁棒性设计 工程实现 仿真验证 → 嵌入式编码 → 硬件在环 → 真机试飞 ⚠ 避坑指南:数值精度、内存管理、坐标系一致性

这张图把整个知识体系串起来了。你会发现,从理论到工程,每一步都有坑。但别怕,后面我会带着大家一步步踩过去。

我的建议:刚开始做轨迹控制时,别追求高大上的算法。先把PID调明白,把坐标系搞对,把仿真和真机的差异摸清楚。这些基本功打扎实了,后面学LQR、MPC就是水到渠成的事。

好了,第一章就聊到这儿。记住一句话:轨迹控制,七分在工程,三分在算法。后面咱们慢慢展开。


公众号:蓝海资料掘金营,微信deep3321