1. 项目概述:从单环到串级,四轴飞控PID的进阶之路
玩四轴,或者说搞无人机飞控的兄弟,绕不开的一个坎就是PID。这东西听起来玄乎,什么比例积分微分,但说白了,它就是一套让机器“听话”的算法。你想让它悬停,它就稳稳地定在那儿;你想让它前倾飞走,它就麻溜地执行。在四轴飞行器上,PID是实现稳定飞行和精准操控的基石。今天我们不扯那些高深的理论推导,就从一个一线开发者的角度,掰开揉碎了讲讲两种最常用、也最核心的PID控制方案:角度单环PID和角度-角速度串级PID。如果你是刚接触飞控的新手,或者对PID调参感到头疼的老鸟,希望这篇从实战中总结出来的笔记,能给你一些不一样的思路。
为什么是这两种?因为这是从“能飞”到“飞得稳”的必经之路。单环PID结构简单,理解容易,是入门和验证基础框架的绝佳选择。但你想让飞机在有点风的环境下也能纹丝不动,或者做出快速、精准的机动动作,单环就有点力不从心了。这时候,串级PID的价值就体现出来了。它通过内外环的配合,能显著提升系统的抗干扰能力和动态响应品质。接下来,我会结合具体的框图、伪代码,以及大量调参时“炸机”换来的血泪经验,把这两种算法的原理、实现和调参门道讲清楚。我们不光要知其然,更要知其所以然,明白每一个参数变动背后,飞机为什么会那样“反应”。
2. 核心控制思路解析:为什么需要PID?
在深入两种PID结构之前,我们得先统一思想:PID到底在四轴上控制什么?控制它的姿态,核心就是控制它的角度。飞机在空中的任何动作,翻滚(Roll)、俯仰(Pitch)、偏航(Yaw),最终都归结为机体坐标系相对于水平面或目标方向的角度变化。我们的目标,就是让飞机的实际角度,尽可能快地、稳地跟踪上我们通过遥控器或者自动驾驶程序给出的期望角度。
PID控制器就是干这个跟踪活的“大脑”。它不断地计算“期望角度”和“实际角度”之间的误差(Error),然后根据这个误差的大小(P)、历史累积(I)和变化趋势(D),综合计算出一个控制量(通常是电机的PWM占空比)。这个控制量作用到电机上,改变电机的转速和升力,从而驱动飞机改变姿态,减小误差。这是一个典型的闭环负反馈系统。P(比例)项决定了系统对当前误差的反应力度,好比开车时看到偏离车道,你立刻打方向盘的幅度;I(积分)项用来消除静态误差,比如车子因为路面倾斜总是往一边偏,你需要持续给一个固定的方向盘修正量来抵消它;D(微分)项则预判了误差的变化趋势,起到阻尼作用,防止车子在回正时冲过头而左右摇摆。
理解了PID在四轴上的根本任务,我们就能更好地评判不同结构的优劣。单环PID直接对这个角度误差进行运算,简单粗暴。而串级PID则认为,直接控制角度这个“结果”还不够精细,我们应该深入到控制产生角度的“原因”——角速度上去。角速度是角度变化的速率,控制住了角速度,就能更平滑、更抗干扰地达到目标角度。这就好比你要把一杯水端平,单环PID是盯着水面的倾斜度来调整手部动作;而串级PID则是同时关注水面的倾斜度(角度)和水晃动的快慢(角速度),通过控制手部转动的速度(角速度环)来最终让水面平稳(角度环),显然后者更稳,更不容易洒出来。
3. 角度单环PID:简洁明了的入门之选
3.1 原理与系统框图
角度单环PID,顾名思义,整个控制系统只有一个PID环。它的输入是期望角度(angle_set)和由姿态解算模块(融合了陀螺仪和加速度计数据)得到的当前实际角度(angle_now),输出直接是控制电机转速的PWM值。其系统框图可以清晰地展示这一过程。
[期望角度] --> (+) --> | PID控制器 | --> [PWM输出] --> [电机/四轴动力学] --> [当前角度] ^ | | | +--------------------------------------+ (姿态传感器反馈)从框图中可以看到,这是一个最经典的闭环。PID控制器根据角度误差(angle_set - angle_now)进行计算。这里的“单环”体现在PID的输出直接作用于被控对象(电机),中间没有其他控制回路。
这种结构的优点非常突出:简单。代码量小,逻辑清晰,参数(Kp, Ki, Kd)少,对于初学者理解PID在四轴上的应用极为友好。在理想情况下(模型准确、干扰小),它完全能够实现基本的自稳和姿态控制。很多开源飞控的初版或教学代码都采用这种结构。
3.2 伪代码实现与解读
光有框图还不够,我们得把它变成代码。下面是一段高度概括但完全可用的角度单环PID伪代码,适用于一个轴(如俯仰轴)的控制:
// 单环PID结构体定义 typedef struct { float kp, ki, kd; // PID参数 float integral; // 积分项累加值 float prev_error; // 上一次的误差,用于计算微分 float output_limit; // 输出限幅,防止积分饱和和过冲 } Single_PID_t; // 单环PID计算函数 float Single_PID_Calculate(Single_PID_t *pid, float setpoint, float measurement) { float error = setpoint - measurement; // 计算当前误差 float p_out = pid->kp * error; // 比例项输出 pid->integral += error; // 积分项累加 // 积分限幅,防止积分饱和(非常重要!) if (pid->integral > INTEGRAL_LIMIT) pid->integral = INTEGRAL_LIMIT; if (pid->integral < -INTEGRAL_LIMIT) pid->integral = -INTEGRAL_LIMIT; float i_out = pid->ki * pid->integral; // 积分项输出 float derivative = error - pid->prev_error; // 计算微分(误差的差分) float d_out = pid->kd * derivative; // 微分项输出 pid->prev_error = error; // 更新上一次误差 float output = p_out + i_out + d_out; // PID总输出 // 总输出限幅 if (output > pid->output_limit) output = pid->output_limit; if (output < -pid->output_limit) output = -pid->output_limit; return output; } // 在主循环中调用(例如每5ms执行一次) void Control_Loop() { // 1. 读取传感器数据,进行姿态解算,得到当前角度 angle_roll, angle_pitch // 2. 读取遥控器输入,得到期望角度 target_roll, target_pitch // 3. 分别计算两个轴的PID输出 float roll_pwm_offset = Single_PID_Calculate(&pid_roll, target_roll, angle_roll); float pitch_pwm_offset = Single_PID_Calculate(&pid_pitch, target_pitch, angle_pitch); // 4. 将PID输出叠加到各电机的基础油门PWM上,并执行混控 // 5. 输出PWM到电调 }代码关键点解读:
- 积分限幅(Anti-windup):这是PID实现中至关重要的一环。当误差持续存在时(比如飞机被手按住),积分项会不断累加到一个巨大的值。一旦误差反向,这个巨大的积分值需要很长时间才能“消化”掉,导致系统严重超调甚至振荡。因此,必须对积分项的和(
integral)进行限幅。 - 微分项计算:这里使用的是最简单的“后向差分”,即本次误差减上次误差。它近似代表了误差的变化率。需要注意的是,直接对误差求微分会放大传感器噪声,在实际应用中,常常对测量值(
measurement)求微分,即derivative = -(measurement - prev_measurement),这被称为“微分先行”,能有效减少设定值突变带来的微分冲击。 - 输出限幅:最终的控制量(PWM偏移量)必须限制在合理的物理范围内,这个范围取决于你的电机-电调-桨叶组合能产生的最大力矩。
- 控制周期:PID计算必须在一个固定的、较短的周期内进行(通常2-10ms)。周期太长会导致控制不及时,周期太短可能加重CPU负担且对传感器数据更新率要求过高。
3.3 单环PID的局限性
尽管简单有效,但单环PID在四轴这种快速、多干扰的系统中也暴露出明显的缺点:
- 抗干扰性差:当有外力突然干扰(如一阵风)时,飞机角度发生突变。单环PID需要等到角度误差产生后,才开始计算并输出纠正力矩。这个纠正动作存在滞后,导致飞机被吹歪后,需要更长时间和更大的摆动才能恢复。
- 动态响应与稳定性矛盾:为了提高响应速度(让飞机快速回中),需要增大P值。但P值过大,系统容易在平衡点附近振荡,甚至发散。为了抑制振荡、增加阻尼,需要增大D值。但D值对噪声极其敏感,容易引入高频抖动。在单环结构中,P和D的调节常常相互掣肘。
- 对内部动力学变化敏感:单环PID将整个四轴(包括电机响应、机体惯性等)视为一个“黑箱”。当电池电压下降、桨叶有破损或重量变化时,这个“黑箱”的特性变了,原先调好的PID参数可能就不再最优,需要重新调整。
正是这些局限性,催生了性能更优的串级PID结构。
4. 角度-角速度串级PID:追求极致稳定的进阶方案
4.1 原理与系统框图
串级PID的核心思想是“分层控制”。它把姿态控制这个任务分解成两层:
- 外环(角度环):负责“战略”目标。输入是期望角度,输出是期望角速度。它的任务是告诉内环:“我希望机体以多快的角速度向目标角度转动”。
- 内环(角速度环):负责“战术”执行。输入是外环给出的期望角速度,以及陀螺仪直接测量的当前角速度,输出是直接控制电机的PWM。它的任务是快速、准确地跟踪外环下达的角速度指令。
两个环“串”起来,外环的输出作为内环的输入。系统框图如下:
[期望角度] --> | 外环P控制器 | --> [期望角速度] --> (+) --> | 内环PID控制器 | --> [PWM输出] --> [电机/四轴动力学] --> [当前角速度] --> [当前角度] (角度环) ^ | (角速度环) | | | | | | | | +---------|-----------------------------------------------+ | | | | +---------------------------------------------------------------------------------------------+ (姿态传感器反馈:陀螺仪->角速度, 融合->角度)为什么串级PID更优?
- 抗干扰能力增强:当一阵风吹来,飞机角速度会立刻发生变化。内环角速度PID能瞬间感知到这个变化(因为陀螺仪响应极快),并立即输出反力矩来抵抗这个角速度变化,从而将角度变化扼杀在萌芽状态。外环角度环甚至可能还没察觉到明显的角度误差。这就好比高级轿车的主动悬挂系统,在车轮刚压到颠簸时就开始动作,而不是等车身晃动了再调整。
- 解耦了响应与稳定:外环P主要决定飞机转向目标角度的“速度感”和“侵略性”。内环PID则专注于让飞机“稳如老狗”,快速抑制一切不必要的转动。你可以独立地调节:想要飞机机动性强、反应快,就调大外环P;想要飞机在任何状态下都镇定自若,就精心调节内环PID。两者调节的耦合性比单环低很多。
- 对系统变化更鲁棒:内环PID直接控制角速度,而电机力矩与角加速度直接相关(牛顿第二定律旋转形式)。内环实际上是在控制飞机的“转动惯性”,这部分动力学相对更简单、更线性。即使电池电量变化,内环也能较好地维持其控制性能。
4.2 伪代码实现与解读
串级PID的伪代码比单环稍复杂,但结构非常清晰:
// 串级PID结构体定义(内环) typedef struct { float kp, ki, kd; float integral; float prev_measurement; // 注意:这里通常对测量值微分,存储上一次的测量值 float output_limit; } Cascade_Inner_PID_t; // 角速度环PID // 外环通常只需要一个比例项(P) float outer_kp = 1.5; // 外环比例系数 // 串级PID计算函数 float Cascade_PID_Calculate(Cascade_Inner_PID_t *inner_pid, float angle_set, float angle_now, float gyro_rate) { // **外环计算:角度环 P控制器** float rate_set = outer_kp * (angle_set - angle_now); // 外环输出:期望角速度 // 可对外环输出进行限幅,例如最大角速度不超过 300度/秒 if (rate_set > MAX_RATE_SET) rate_set = MAX_RATE_SET; if (rate_set < -MAX_RATE_SET) rate_set = -MAX_RATE_SET; // **内环计算:角速度环 PID控制器** float rate_error = rate_set - gyro_rate; // 角速度误差 float p_out = inner_pid->kp * rate_error; inner_pid->integral += rate_error; // 内环积分限幅 if (inner_pid->integral > INNER_INTEGRAL_LIMIT) inner_pid->integral = INNER_INTEGRAL_LIMIT; if (inner_pid->integral < -INNER_INTEGRAL_LIMIT) inner_pid->integral = -INNER_INTEGRAL_LIMIT; float i_out = inner_pid->ki * inner_pid->integral; // 微分项:对测量值(角速度)微分,而非误差。更抗设定值突变。 float derivative = -(gyro_rate - inner_pid->prev_measurement); float d_out = inner_pid->kd * derivative; inner_pid->prev_measurement = gyro_rate; float output = p_out + i_out + d_out; // 内环输出限幅 if (output > inner_pid->output_limit) output = inner_pid->output_limit; if (output < -inner_pid->output_limit) output = -inner_pid->output_limit; return output; // 最终的PWM控制量 } // 在主循环中调用 void Control_Loop_Cascade() { // 1. 读取传感器:加速度计、陀螺仪 // 2. 姿态解算,得到当前角度 angle_roll, angle_pitch // 3. 读取陀螺仪原始数据或滤波后数据,得到当前角速度 gyro_roll, gyro_pitch // 4. 读取遥控器输入,得到期望角度 target_roll, target_pitch // 5. 串级PID计算 float roll_pwm = Cascade_PID_Calculate(&inner_pid_roll, target_roll, angle_roll, gyro_roll); float pitch_pwm = Cascade_PID_Calculate(&inner_pid_pitch, target_pitch, angle_pitch, gyro_pitch); // 6. 混控并输出PWM }代码关键点解读:
- 外环通常只用P:在绝大多数四轴应用中,外环(角度环)只需要一个比例项(P)就足够了。积分项(I)可能会引入不必要的延迟和超调,微分项(D)则完全没必要,因为内环已经提供了强大的阻尼。外环P的作用就像一个“灵敏度”调节器。
- 内环微分处理:代码中内环微分项是对角速度测量值(
gyro_rate)进行差分。derivative = -(gyro_rate - prev_measurement)。负号是因为当角速度增加时(gyro_rate - prev_measurement > 0),我们需要一个负的控制量来抑制这个增加的趋势。这种方式避免了期望角速度(rate_set)突变时微分项的剧烈冲击。 - 数据源分离:注意,角度信息来自姿态解算(融合了加速度计和陀螺仪),而角速度信息直接来自陀螺仪(通常经过低通滤波)。角速度环要求极高的实时性,使用延迟更小的陀螺仪数据是关键。角度环可以容忍稍大的延迟,使用更稳定、经过融合的姿态角。
4.3 串级PID的调参经验与心法
调参是PID应用的灵魂,尤其是串级PID。遵循“先内后外,先P后I再D”的黄金法则。
第一步:整定内环(角速度环)PID
内环P(比例):
- 操作:将内环I和D设为0,外环P设为一个很小的值(如0.5)。逐渐增大内环P。
- 现象与解读:
- P很小:飞机软绵绵的,用手轻轻一拨就能轻易转动,感觉不到阻力。
- P适中:用手拨动飞机,能感觉到明显的“回弹力”,松手后飞机会快速回正,且没有振荡。这是理想状态。
- P过大:飞机开始高频自震(肉眼可见电机或桨叶高频抖动)。这是因为P过大导致系统响应过快,对微小的角速度噪声也产生剧烈反应,引发了高频振荡。继续增大,飞机会剧烈发散翻机。
- 口诀:从小到大,感觉飞机从“顺从”变得“抵抗”,再到“自嗨”(振荡),最后“崩溃”(发散)。
内环I(积分):
- 操作:保持调好的内环P,逐步增加内环I。
- 现象与解读:
- 只有P时,飞机在受到恒定干扰(如一侧电机效率略低)时,会有一个固定的角度偏差(静差)。加入I后,I会逐渐累积这个误差,输出一个补偿量,最终消除静差,使飞机在无遥控输入时能稳定在水平位置。
- I值合适:飞机可以稳定悬停在一个角度,不漂移。
- I值过大:飞机变得“僵硬”。用手扳动它感觉像在扳一个钉死的钉子,很费力。但一旦用大力扳动后松开,飞机可能会因为积分项累积过大而产生严重的反向超调,甚至振荡发散。这是一种危险的“虚假稳定”。
- 心得:内环I的主要目的是消除角速度静差(对应到角度环就是角速度环的静差)。通常不需要很大的值。如果P调得足够好,有时甚至可以省略I。
内环D(微分):
- 操作:最后调整内环D。
- 现象与解读:
- D项提供阻尼。适当增加D,可以使飞机回中的过程更平滑,像有“油液阻尼”一样,减少过冲。
- D值过大:会放大陀螺仪的高频噪声,导致电机发出“滋滋”的高频声,甚至引起机体共振。如果机架震动本来就大,噪声严重,加D反而有害。
- 建议:如果飞机回中时有些许振荡,可以尝试加入很小的D。务必对陀螺仪数据进行有效的低通滤波(如一阶IIR滤波)后再用于微分计算。很多情况下,内环可以只用PI控制器。
特别注意:内环是系统稳定的根本。内环调得好,飞机拿在手里通电,你会感觉它像一个稳定的陀螺,很难被随意扭动,松手后迅速回正且毫无晃动。内环没调好,外环再怎么调都白搭。
第二步:整定外环(角度环)P
- 操作:内环PID调好后,保持不动。逐渐增大外环P。
- 现象与解读:
- 外环P很小:打舵时飞机响应缓慢,像“慢动作”。松杆后,飞机慢悠悠地回到水平。
- 外环P适中:打舵响应跟手,指哪打哪。松杆后,飞机快速且平稳地回中。这是理想状态。
- 外环P过大:飞机变得“神经质”,异常敏感。微小的摇杆输入就导致飞机剧烈动作。悬停时可能自己出现低频的左右或前后摆动(区别于内环P过大引起的高频震动)。这是外环过冲,内环来不及抑制导致的低频振荡。
- 口诀:外环P控制“手感”。它决定了你是开一辆稳重的大轿车,还是一辆灵敏的方程式赛车。
5. 超越PID:系统稳定性的基石——传感器与安装
很多朋友调PID调到怀疑人生,飞机还是飘来飘去无法悬停,问题可能不出在算法,而出在源头——传感器数据。PID再厉害,它也是根据“当前角度”和“当前角速度”来计算的。如果这些数据本身不准、有延迟或者有偏差,那就像蒙着眼睛开车,再好的司机也白搭。
5.1 加速度计:姿态解算的“定海神针”
在姿态解算中,陀螺仪和加速度计扮演着互补的角色。陀螺仪测量角速度,积分得到角度,但存在漂移,时间一长角度误差会累积到无法接受。加速度计测量比力,在静止或匀速运动时,能感知重力方向,从而提供绝对的水平基准,但它动态响应差,容易受机体线性加速度干扰。
所有融合算法(互补滤波、Mahony、Madgwick、卡尔曼滤波)的核心思想都是:用加速度计的低频稳定特性,去校正陀螺仪的高频漂移。因此,加速度计数据的质量,尤其是静态精度,直接决定了融合后姿态角的长期稳定性。
为什么飞机飘、无法垂直起飞?PID控制器努力的目标,是让“当前角度”等于“期望角度”。而这个“当前角度”,是算法根据加速度计和陀螺仪数据算出来的。PID实际上是在控制“加速度计感知到的平面”水平,而不是机架水平!
想象一下,你的飞控板上的加速度计芯片和飞机机架平面不是平行的,有一个夹角。PID会拼命工作,直到把加速度计调到水平位置。此时,机架其实是倾斜的!起飞后,升力是垂直机架向上的,这个力有一个水平分量,就会导致飞机朝倾斜的方向漂移。这就是无法垂直起飞或单向漂移的首要机械原因。
5.2 加速度计的校准与安装校正
软件六面校准(零偏与标度因数):
- 目的:消除加速度计三轴的零位误差(零偏)和各轴灵敏度不一致(标度因数误差)。
- 方法(六位置法):将飞控板依次朝六个方向(+X, -X, +Y, -Y, +Z, -Z)静止放置,记录每个方向上静止时的原始ADC读数。理想情况下,每个轴在正反两个方向读数的绝对值应相等,且等于1g。通过计算这些数据的平均值和差值,可以拟合出每个轴的零偏和标度因数。很多飞控地面站都提供一键六面校准功能。
- 重要性:这是必须做的基础工作。未经校准的加速度计,其数据是扭曲的,任何高级算法都无法补救。
机械安装水平校正:
- 理想情况:保证加速度计芯片的敏感轴与机架的理论水平面严格平行。这需要精密的加工和安装。
- 现实校正:如果安装后存在固定夹角,可以通过软件进行补偿。
- 方法一(推荐):在飞控代码中增加一个安装误差旋转矩阵。在姿态解算之前,将原始加速度计数据乘上这个矩阵,进行坐标变换,从“飞控板坐标系”校正到“机体坐标系”。
- 方法二(临时):利用遥控器的微调(Trim)功能。如果飞机总是朝一个方向漂,你可以通过遥控器给那个方向的反方向一个微小的常值角度偏移。这相当于在软件上修改了“期望角度”的零点。但这只是权宜之计,会损失一部分打舵范围。
5.3 一个完整的调试逻辑链
当你遇到飞行问题时,可以按以下逻辑链排查,这能节省大量时间:
- 飞机完全不受控,乱翻:检查电机顺序、转向、桨叶安装是否正确。检查姿态解算输出的欧拉角符号是否正确(前倾是正还是负?)。
- 飞机剧烈高频震动(“果冻”效应):这是内环P过大的典型症状。也可能是机架刚性不足、电机/桨叶动平衡极差,产生了强烈的机械振动,被陀螺仪感知并放大。
- 飞机低频左右或前后摇摆(“钟摆”效应):这是外环P过大的典型症状。内环已经无法抑制外环产生的过冲。
- 飞机可以自稳,但缓慢向一个方向漂移:
- 首先,进行完善的加速度计六面校准。
- 其次,检查加速度计安装是否水平。可通过将飞机放在绝对水平的平面上,查看地面站显示的姿态角是否接近0度来验证。
- 再次,尝试微调内环I值,看是否能消除静差。
- 最后,考虑是否有机架不对称、电机推力不一致等硬件问题。
- 飞机反应迟钝,感觉“很肉”:外环P过小。增大外环P,直到获得跟手的响应。
- 打舵后松手,飞机要滑行一段才停下(“抬轿子”感):这是系统“过阻尼”或外环响应不足的表现。可能的原因是内环P太强(或D太强)导致系统过于“僵硬”,而外环P又太小,无法提供足够的恢复力矩。解决方法:适当降低内环P或D,或者增大外环P。通常调整外环P效果更直接。
6. 从理论到实践:一个完整的调参实录与问题排查
让我们模拟一次完整的串级PID调参过程,并记录下可能遇到的问题和解决方案。
准备工作:
- 硬件:组装好的四轴,确保电机、电调、桨叶、机架无硬件问题。
- 软件:飞控固件已烧录,具备参数调节接口(如通过蓝牙/Wi-Fi连接地面站)。
- 安全:卸掉桨叶,在空旷、安全的地面进行初步调试。
调参步骤实录:
- 参数初始化:将所有PID参数设为0。外环P设一个很小的值,如0.5。确保遥控器能正确控制模式(解锁、自稳模式)。
- 内环P调试(持握测试):
- 解锁电机,保持低油门。用手握住飞机。
- 缓慢增加内环P(Roll轴和Pitch轴通常设相同值)。你会感觉到飞机逐渐变得“紧实”,试图保持当前角度。轻轻扭动机身,会感受到一个反向的“回弹力”。
- 继续增加P,直到感觉到机身开始出现高频的、细微的震动(通过手感知),或者听到电机发出高频啸叫。此时将P值往回减小一点,直到震动消失。记录下这个P值为
P_inner_max,实际工作值取P_inner_max * 0.6 ~ 0.8。这个值让飞机既有足够的刚度,又远离振荡点。
- 内环I调试(静态误差测试):
- 将飞机放在水平面上。在代码中让飞机进入“角度锁定”模式(期望角度为0)。
- 观察地面站姿态角。如果角度有固定偏差(如始终偏向Roll 2度)。
- 逐渐增加内环I。你会发现这个固定偏差逐渐减小,直至为0。
- 注意:I值宁小勿大。从0.001这样的小值开始尝试。如果I值过大,在步骤2的持握测试中,你会感觉飞机像被“焊死”一样,但用力扭动后松手,它会剧烈振荡。一旦出现此现象,立即大幅减小I值。
- 内环D调试(阻尼感测试):
- 保持持握飞机。快速小幅度地来回扭动机身,然后突然停止。
- 增加内环D(从0.0001量级开始)。理想的效果是,飞机在停止扭动后,能迅速静止,没有任何“余震”。如果增加D后电机出现高频噪音,说明D值过大或陀螺仪噪声太大。如果效果不明显,可以暂时不加D。
- 外环P调试(动态响应测试):
- 装回桨叶,在绝对安全、空旷的户外进行!
- 将飞机起飞至离地1米左右悬停。
- 缓慢增加外环P。观察打舵时飞机的响应速度。目标是打舵跟手,松杆回中快且稳。
- 如果出现低频摇摆(像钟摆),说明外环P过大,需减小。
- 如果感觉飞机反应迟钝,松杆后慢悠悠回来,说明外环P过小,需增大。
常见问题排查速查表:
| 现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 起飞即翻车 | 1. 电机顺序/转向错误 2. 飞控板安装方向设置错误 3. PID输出符号错误(正反馈) 4. 传感器数据未校准 | 1. 检查电机映射和转向。 2. 检查飞控板相对于机头的安装角度,并在软件中设置正确的偏航角(如0°,90°,180°)。 3. 检查PID输出混控到电机时,正负号是否正确。 4. 执行陀螺仪和加速度计校准。 |
| 高频震动(“果冻”) | 1. 内环P过大 2. 机架刚性差/电机/桨叶不平衡 3. 陀螺仪数据噪声大,未滤波 | 1. 降低内环P。 2. 加固机架,做动平衡(贴胶带)。 3. 对陀螺仪数据施加合适的低通滤波(如一阶IIR)。 |
| 低频摇摆 | 1. 外环P过大 2. 内环D过小(阻尼不足) 3. 电池电量不足,动力响应变慢 | 1. 降低外环P。 2. 尝试适当增加内环D(需配合滤波)。 3. 检查电池电压,满电测试。 |
| 单向持续漂移 | 1. 加速度计未校准或安装不水平 2. 存在持续的物理干扰(如风、不平整的起落架) 3. 遥控器中立点有偏移 | 1. 执行六面校准。检查飞控安装水平度,或用遥控器微调补偿。 2. 在无风环境测试,检查起落架。 3. 校准遥控器,确保摇杆回中时通道输出为1500us(中点)。 |
| 反应迟钝 | 1. 外环P过小 2. 内环P过小 3. 控制周期过长 4. 电机/电调响应慢 | 1. 增大外环P。 2. 检查并适当增大内环P。 3. 检查主循环频率,确保PID计算周期在5ms以内。 4. 检查电调是否已校准,或尝试提高电调刷新频率。 |
| 松杆后滑行一段 | 1. 外环P过小 2. 内环P/I过大,系统过阻尼 | 1. 增大外环P。 2. 尝试适当减小内环P或I。 |
调参是一个需要耐心和细致观察的过程。没有一套参数能适应所有机架。每次更换桨叶、电机、电池甚至改变重心,都可能需要微调。最好的方法是每次只改动一个参数,小步快跑,仔细观察飞机的反应,并做好记录。当你对每一个参数的变化所带来的物理效应了然于胸时,你就能真正驾驭你的四轴飞行器了。