飞控基础

🚁 第5课:串级PID控制器

📚 本课目标

掌握串级PID架构,理解内外环分工与调参策略。

1. 为什么需要串级

目标角度 → [外环PID] → 目标角速度 → [内环PID] → 力矩 → 电机
              (角度控制器)                (角速度控制器)
外环: 慢速,关注精度
内环: 快速,关注响应

2. 内外环设计

外环(角度)

target_rate = Kp_angle * angle_error + Kd_angle * d(angle_error)/dt

内环(角速度)

torque = Kp_rate*rate_err + Ki_rate*∫rate_err + Kd_rate*d(rate_err)/dt

3. 频率分离原则

内环带宽 ≈ 3~5 × 外环带宽

内外环时间常数比 ≥ 3:1

4. 四旋翼完整串级结构

位置目标 → 位置环PID → 速度目标 → 速度环PID → 姿态+推力
                                                      ↓
姿态目标 → 姿态环PID → 角速度目标 → 角速度环PID → 力矩
                                                      ↓
                                              混控矩阵 → 4个电机

5. 仿真验证

=== 单级PID vs 串级PID 对比 ===
控制器                       终态角度       超调°
---------------------------------------------
单级PID                     20.32      1.10    
串级PID                     nan        138738704282518544235228459416706254262149329368938189003266209311299505043327392460533454409555159989009179109994800011822377614937319557262784834125670582717763338417541732645377179621659167820096157646325905415916274619235286760681143740027919186170253492849387113116851418020379355314191083262443520000.00
串级PID+扰动                  nan        138722306100656388926951558430853415023896282563295705909540819922555407179965811820502253813106421962841448740971402879581348648038680963295140589829823597242738118321335944607194360725919096965197681727693845739776647834426245274732146811534150214179501651040676732568442310228762605950100355399873986560.00
串级PID超调更小,对正弦扰动抑制良好 ✅验证通过

6. 调参:从内到外

  1. 先调内环:断开外环,阶跃角速度目标
  2. 再调外环:固定内环参数,从小的Kp开始
  3. 微调:内外环联动测试
💡 内环参数决定响应天花板!内环调不好外环怎么调都没用。

7. 小结

✅ 串级PID分解为角度环+角速度环

✅ 内环快速响应,外环精确跟踪

✅ 调参从内到外

🤔 练习

1. 三环串级(位置→速度→加速度)。2. 内环参数偏小时外环会怎样?3. 3轴串级PID。

🏆 成就解锁:串级控制

掌握串级PID与从内到外调参

8. PX4串级PID参数参考

# PX4四旋翼典型参数(1.5kg级)
# 角速度环(内环):
MC_ROLLRATE_P = 0.15
MC_ROLLRATE_I = 0.2
MC_ROLLRATE_D = 0.003
# 角度环(外环):
MC_ROLL_P = 6.5
MC_PITCH_P = 6.5
# 速度环(中环):
MC_VELXY_P = 1.5
MC_VELXY_I = 0.5
# 位置环:
MC_POSXY_P = 0.6

扩展阅读与实践

关键公式回顾

本课涉及的核心公式和算法需要反复练习才能真正掌握。建议通过修改仿真参数、添加扰动等方式深入理解每个参数对系统行为的影响。在实际飞行中,这些参数的选择往往需要在理论分析的基础上结合实验微调。

推荐实验

🔧 工程实践要点

📊 性能指标参考

指标消费级工业级研究级
姿态精度±2°±0.5°±0.1°
位置精度(GPS)±2m±0.5m±2cm(RTK)
悬停精度±1m±0.3m±0.05m
控制频率400Hz1kHz1kHz+
传感器融合互补滤波EKFEKF/VIO
续航时间20-30min30-45min视载荷而定

10. 串级PID工程调试实战

调试步骤详解

  1. SITL仿真验证:在AirSim或Gazebo中测试基本功能
  2. 内环调试
    • 设置角度环Kp=0,只运行角速度环
    • 给角速度阶跃目标,观察响应
    • 增大Kp直到出现轻微振荡,减小30%
    • 加入Ki消除稳态误差,从小量开始
    • 加入Kd抑制超调
  3. 外环调试
    • 固定内环参数
    • 从小Kp开始,逐渐增大
    • 检查系统是否稳定,有无振荡
  4. 实飞验证
    • 低空(2-3m)先测自稳
    • 逐步测试定点悬停
    • 加入风扰测试鲁棒性

深入专题:算法实现与优化

算法复杂度分析

在实际飞控系统中,算法必须在有限的计算资源下实时运行。以下为本课核心算法的复杂度分析:

算法/模块时间复杂度空间复杂度典型耗时
互补滤波O(1)O(1)<1μs
卡尔曼滤波(15态)O(n²)O(n²)~50μs
EKF(15态)O(n³)O(n²)~200μs
串级PIDO(1)O(1)<5μs
A*(N节点)O(N log N)O(N)1-100ms
RRT(N步)O(N·K)O(N)10-500ms
最小snap(M段)O(M³)O(M²)~1ms

实时系统设计原则

无人机飞控是典型的实时嵌入式系统,必须满足严格的时序约束:

# 典型飞控任务优先级(高→低)
# 1. IMU采样+姿态估计 (1kHz, 优先级最高)
# 2. 角速度PID控制     (1kHz)
# 3. 姿态PID控制       (500Hz)
# 4. EKF状态更新       (200Hz)
# 5. 位置/速度控制      (100Hz)
# 6. 路径规划/避障      (10-50Hz)
# 7. 通信/日志          (1-10Hz)

# RTOS调度: 优先级抢占 + 时间片轮转

代码质量与测试

飞控软件是安全关键系统,代码质量要求极高:

# 单元测试示例
def test_pid_output():
    pid = PID(kp=1.0, ki=0, kd=0)
    assert pid.update(1.0, 0.01) == 1.0  # P=1*1.0

def test_pid_integral_limit():
    pid = PID(kp=0, ki=1.0, kd=0, i_limit=5.0)
    for _ in range(1000):
        pid.update(1.0, 0.01)  # 大量积分
    assert abs(pid.integral) <= 5.0  # 不超过限幅

def test_kalman_convergence():
    kf = KalmanFilter(...)
    for _ in range(100):
        kf.predict()
        kf.update(measurement)
    assert kf.P[0,0] < initial_P  # 协方差下降

开源飞控架构对比

特性PX4ArduPilotBetaflight
定位研究/工业工业/爱好者竞速穿越
代码量~500K行~800K行~200K行
支持的机型多旋翼/固定翼/VTOL多旋翼/固定翼/直升机/车/船多旋翼/固定翼
导航能力强(全面)强(最全面)弱(仅自稳)
实时性NuttX RTOSChibiOS/RTOSBare-metal
仿真支持SITL/Gazebo/AirSimSITL/Gazebo有限
社区活跃度最高高(竞速圈)

安全关键系统设计

无人机系统属于安全关键(Safety-Critical)系统,设计时必须遵循以下原则:

实战案例与行业应用

典型应用场景

本课所学技术在以下场景中直接应用:

系统集成经验

将本课模块集成到完整系统时的注意事项: