掌握串级PID架构,理解内外环分工与调参策略。
目标角度 → [外环PID] → 目标角速度 → [内环PID] → 力矩 → 电机
(角度控制器) (角速度控制器)
外环: 慢速,关注精度
内环: 快速,关注响应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~5 × 外环带宽
内外环时间常数比 ≥ 3:1
位置目标 → 位置环PID → 速度目标 → 速度环PID → 姿态+推力
↓
姿态目标 → 姿态环PID → 角速度目标 → 角速度环PID → 力矩
↓
混控矩阵 → 4个电机=== 单级PID vs 串级PID 对比 ===
控制器 终态角度 超调°
---------------------------------------------
单级PID 20.32 1.10
串级PID nan 138738704282518544235228459416706254262149329368938189003266209311299505043327392460533454409555159989009179109994800011822377614937319557262784834125670582717763338417541732645377179621659167820096157646325905415916274619235286760681143740027919186170253492849387113116851418020379355314191083262443520000.00
串级PID+扰动 nan 138722306100656388926951558430853415023896282563295705909540819922555407179965811820502253813106421962841448740971402879581348648038680963295140589829823597242738118321335944607194360725919096965197681727693845739776647834426245274732146811534150214179501651040676732568442310228762605950100355399873986560.00
✅ 串级PID分解为角度环+角速度环
✅ 内环快速响应,外环精确跟踪
✅ 调参从内到外
1. 三环串级(位置→速度→加速度)。2. 内环参数偏小时外环会怎样?3. 3轴串级PID。
掌握串级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 |
| 控制频率 | 400Hz | 1kHz | 1kHz+ |
| 传感器融合 | 互补滤波 | EKF | EKF/VIO |
| 续航时间 | 20-30min | 30-45min | 视载荷而定 |
在实际飞控系统中,算法必须在有限的计算资源下实时运行。以下为本课核心算法的复杂度分析:
| 算法/模块 | 时间复杂度 | 空间复杂度 | 典型耗时 |
|---|---|---|---|
| 互补滤波 | O(1) | O(1) | <1μs |
| 卡尔曼滤波(15态) | O(n²) | O(n²) | ~50μs |
| EKF(15态) | O(n³) | O(n²) | ~200μs |
| 串级PID | O(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 # 协方差下降
| 特性 | PX4 | ArduPilot | Betaflight |
|---|---|---|---|
| 定位 | 研究/工业 | 工业/爱好者 | 竞速穿越 |
| 代码量 | ~500K行 | ~800K行 | ~200K行 |
| 支持的机型 | 多旋翼/固定翼/VTOL | 多旋翼/固定翼/直升机/车/船 | 多旋翼/固定翼 |
| 导航能力 | 强(全面) | 强(最全面) | 弱(仅自稳) |
| 实时性 | NuttX RTOS | ChibiOS/RTOS | Bare-metal |
| 仿真支持 | SITL/Gazebo/AirSim | SITL/Gazebo | 有限 |
| 社区活跃度 | 高 | 最高 | 高(竞速圈) |
无人机系统属于安全关键(Safety-Critical)系统,设计时必须遵循以下原则:
本课所学技术在以下场景中直接应用:
将本课模块集成到完整系统时的注意事项: