第一章:轨迹控制概述
大家好,我是老张。在飞行器控制这个行当摸爬滚打了十几年,今天咱们聊聊轨迹控制的那些事儿。
轨迹控制,说白了就是让飞行器按照我们规划的路径飞。你想想看,无人机要送快递、战斗机要做机动、火箭要入轨,本质上都是同一个问题——怎么让飞行器听话地走完预定路线。
1.1 飞行器动力学基础
搞轨迹控制,动力学是躲不开的坎。我记得刚入行那会儿,总觉得动力学方程太复杂,想绕过去。结果呢?仿真跑得挺好,一上真机就炸。嗯,后来老老实实补课了。
飞行器动力学,核心就是牛顿第二定律和欧拉方程:
m * a = F_ext // 平动动力学
I * ω_dot + ω × Iω = M // 转动动力学
这里我特别想强调一点:千万别把动力学和运动学搞混了。动力学研究的是力和运动的关系,运动学只关心位置、速度、加速度的几何关系。我在项目中遇到过不少新人,拿着运动学方程当动力学用,结果控制律设计出来根本推不动飞机。
核心要点:动力学方程中的力F和力矩M,才是我们控制器的输出。运动学只是描述状态变化,不涉及力的计算。
实际工程中,我们通常把动力学模型简化处理。比如四旋翼,我们一般忽略空气阻力、陀螺效应这些小项。为什么?因为控制器有鲁棒性,能扛得住这些未建模动态。但要注意,简化要有度——我见过有人把重力项都省了,那肯定不行。
1.2 坐标系定义
坐标系这东西,看着简单,坑却不少。我刚开始做项目时,就因为坐标系搞反了,让飞机在天上翻了几个跟头...还好是仿真。
常用的坐标系有三个:
| 坐标系 | 符号 | 原点 | 用途 |
|---|---|---|---|
| 地固坐标系 | E系 | 地面某点 | 导航、规划 |
| 机体坐标系 | B系 | 飞行器质心 | 控制、传感器 |
| 航迹坐标系 | W系 | 飞行器质心 | 轨迹跟踪 |
我个人习惯用欧拉角来描述姿态,虽然它有万向锁的问题,但物理意义直观。做轨迹控制时,我们经常需要在不同坐标系之间转换。这里有个避坑指南:转换矩阵一定要验证正交性。我曾经因为手算的旋转矩阵精度不够,导致导航解算发散,查了三天bug。
工程小技巧:写代码时,把坐标系转换封装成独立函数,每次调用后做单位检测。这样能避免很多低级错误。
1.3 控制算法工程化全流程概览
从算法到真机,中间隔着十万八千里。我见过太多人在仿真里跑得飞起,一上真机就各种问题。为什么会这样?因为工程化不只是写代码。
完整的工程化流程是这样的:
- 需求分析——搞清楚飞行器要飞什么轨迹,精度要求多少
- 模型建立——根据飞行器参数建立动力学模型
- 算法设计——选择控制策略,比如PID、LQR、MPC
- 仿真验证——在MATLAB/Simulink里跑通
- 代码实现——用C++或Python写嵌入式代码
- 硬件在环测试——接上真实飞控板跑
- 真机试飞——从悬停到简单轨迹,逐步推进
这里我想重点说说第5步。很多新手觉得仿真通过了,代码随便写写就行。大错特错!嵌入式代码和仿真代码完全是两码事。仿真里你可以用double,嵌入式里可能只能用float;仿真里你可以随便malloc,嵌入式里内存是稀缺资源。
警告:千万不要把MATLAB代码直接翻译成C代码就跑。数值精度、计算效率、内存管理,每个环节都可能出问题。我见过最惨的一次,就因为浮点精度不够,导致积分漂移,飞机直接侧翻。
下面这张图,是我总结的轨迹控制工程化知识体系:
这张图把整个知识体系串起来了。你会发现,从理论到工程,每一步都有坑。但别怕,后面我会带着大家一步步踩过去。
我的建议:刚开始做轨迹控制时,别追求高大上的算法。先把PID调明白,把坐标系搞对,把仿真和真机的差异摸清楚。这些基本功打扎实了,后面学LQR、MPC就是水到渠成的事。
好了,第一章就聊到这儿。记住一句话:轨迹控制,七分在工程,三分在算法。后面咱们慢慢展开。
公众号:蓝海资料掘金营,微信deep3321