1、姿态控制概述:无人机姿态控制的基本概念、控制架构与PID控制原理
大家好,欢迎来到这门实战课程。我是你们的老朋友,一个在飞控领域摸爬滚打了十来年的工程师。
今天咱们聊聊姿态控制。说白了,就是让无人机老老实实听你的话。你让它悬停,它就得纹丝不动;你让它前飞,它就得乖乖低头。嗯,这背后就是姿态控制在起作用。
1.1 姿态控制到底在控制什么?
先问大家一个问题:无人机在空中,有几个自由度?答案是六个——三个位置(x、y、z),三个姿态(横滚、俯仰、偏航)。姿态控制,管的就是后面这三个角度。
我刚开始做飞控时,总觉得姿态控制很简单。不就是调几个PID参数嘛。直到有一次,我调了一整天,飞机还是像喝醉了酒一样晃来晃去。后来才发现,是我对姿态控制的理解太浅了。
姿态控制的核心目标,说白了就三个字:稳、准、快。
- 稳:抗干扰能力强,风来了不慌
- 准:角度误差小,指哪打哪
- 快:响应迅速,不拖泥带水
但你要知道,这三个目标往往是互相矛盾的。想稳,可能就慢了;想快,可能就抖了。这就是我们做调优时最头疼的地方。
1.2 控制架构:内环与外环
无人机姿态控制,最经典的结构就是串级PID。你想想看,为什么不用单环?
我给大家打个比方。你开车时,想保持车道(外环),你得先控制方向盘的角度(内环)。如果方向盘反应慢半拍,车早就跑偏了。这就是内环要快、外环要准的道理。
具体到飞控里:
- 外环(姿态角环):输入是期望角度,输出是期望角速度。它负责“指方向”。
- 内环(角速度环):输入是期望角速度,输出是电机控制量。它负责“执行”。
我个人的习惯是,先调内环,再调外环。为什么?因为内环是基础。内环调不好,外环再努力也是白搭。记得有一次,我在项目里急着赶进度,直接调外环,结果飞机一离地就翻了个跟头。嗯,从那以后我再也不敢跳过内环了。
核心要点:内环角速度环的带宽,至少要达到外环姿态角环的3-5倍。这样才能保证内外环不打架。
1.3 PID控制原理简介
PID,比例-积分-微分。这三个字母,做飞控的没人不知道。但你真的理解它们吗?
我简单说说:
| 参数 | 作用 | 我踩过的坑 |
|---|---|---|
| P(比例) | 根据当前误差,给出即时响应。误差越大,输出越大。 | P太大,飞机会高频抖动。我曾经把P调得过高,结果飞机像筛糠一样抖,差点炸机。 |
| I(积分) | 消除稳态误差。说白了,就是纠正“差那么一点点”的问题。 | I太大,飞机会出现“低频振荡”,也就是慢慢晃。我见过有人把I设得特别大,结果飞机像荡秋千。 |
| D(微分) | 预测误差趋势,提供阻尼效果。让系统更“稳”。 | D对噪声特别敏感。有一次我用了个便宜的IMU,D一加上去,飞机直接乱跳。后来加了低通滤波才搞定。 |
你可能会问:这三个参数怎么调?
我的经验是:先P,再D,最后I。具体来说:
- 先把I和D设为0,只调P。让飞机能勉强稳住,但会有静差。
- 加一点D,消除振荡。你会发现飞机变得“黏糊糊”的,很稳。
- 最后加I,消除静差。注意I不要太大,否则会引入低频振荡。
小技巧:调参时,用手轻轻拨动飞机,感受它的“手感”。如果感觉飞机很“硬”,说明P偏大;如果感觉“软绵绵”,说明P偏小。这个手感,我练了两年才找到感觉。
1.4 一个简单的角速度环PID代码示例
光说不练假把式。我给大家看一段实际飞控里的角速度环代码。这是简化版,但核心逻辑都在。
// 角速度环PID计算
float angular_velocity_pid(float target_rate, float current_rate, float dt) {
float error = target_rate - current_rate;
// 比例项
float p_term = Kp * error;
// 积分项(带限幅)
integral += error * dt;
integral = constrain(integral, -integral_limit, integral_limit);
float i_term = Ki * integral;
// 微分项(注意:这里用的是测量值的微分,不是误差的微分)
float derivative = (current_rate - last_rate) / dt;
float d_term = Kd * derivative;
// 保存上一次值
last_rate = current_rate;
// 输出限幅
float output = p_term + i_term - d_term;
return constrain(output, -output_limit, output_limit);
}
注意看,微分项我用了-Kd * derivative。为什么是负号?因为我们要抑制角速度的变化。如果角速度在增大,我们就得反向输出,把它压下去。这个细节,很多新手会搞反。
警告:积分项一定要加限幅!我曾经在项目里忘了加,结果积分项越积越大,最后电机直接满油门,飞机差点窜上天。嗯,那次之后我养成了检查积分限幅的习惯。
1.5 小结
好了,这一章我们聊了:
- 姿态控制就是管横滚、俯仰、偏航三个角度
- 串级PID架构:内环角速度环 + 外环姿态角环
- PID三个参数的作用和调参顺序
下一章,我会带大家深入角速度环的调优实战。到时候咱们拿真实数据说话,看看怎么把参数调到“手感丝滑”。
记住一句话:飞控调参,七分靠理论,三分靠手感。多动手,多试错,你也能成为老司机。
咱们下章见。