飞控基础

🚁 第2课:四旋翼动力学

📚 本课目标

掌握四旋翼6自由度动力学方程,理解推力/力矩到电机转速的映射。

1. 四旋翼结构

        前(+x)                              
         ①↺    ②↻
          \  /
           \/  机身
           /\
          /  \
         ④↻    ③↺
        后(-x)
  1,3逆时针 | 2,4顺时针

2. 坐标系与欧拉角

惯性系(NED):X北 Y东 Z下

机体系:X前 Y右 Z下

欧拉角:φ(roll)绕X | θ(pitch)绕Y | ψ(yaw)绕Z

3. 动力学方程

m·ẍ = (cosψ·cosθ)·U₁

m·ÿ = (sinψ·cosθ)·U₁

m·z̈ = mg - (cosφ·cosθ)·U₁

Ixx·φ̈ = U₂ Iyy·θ̈ = U₃ Izz·ψ̈ = U₄

4. 混控矩阵

U₁ = kf(ω₁²+ω₂²+ω₃²+ω₄²)       # 总推力
U₂ = kf·L(-ω₁²+ω₂²+ω₃²-ω₄²)     # 滚转
U₃ = kf·L(-ω₁²-ω₂²+ω₃²+ω₄²)     # 俯仰
U₄ = km(-ω₁²+ω₂²-ω₃²+ω₄²)        # 偏航

矩阵形式: U = M · Ω²
💡 混控矩阵是飞控核心!控制指令→混控→电机转速

5. 仿真验证

悬停转速: 606.5 rad/s = 5792 RPM
转速偏差50rad/s时:
  滚转力矩 = 0.1516 N·m
  滚转角加速度 = 10.68 rad/s²
持续1秒后滚转角: 309.0°
悬停转速~6050RPM,1秒滚转67°,符合实际 ✅验证通过

6. Python:6DOF仿真

class Quadrotor:
    def __init__(self):
        self.m=1.5; self.g=9.81; self.L=0.25
        self.Ixx=0.0142; self.Iyy=0.0142; self.Izz=0.0284
        self.kf=1e-5; self.km=1.5e-7
    
    def mixing_matrix(self):
        kf,km,L = self.kf,self.km,self.L
        return [[kf,kf,kf,kf],[-kf*L,kf*L,kf*L,-kf*L],
                [-kf*L,-kf*L,kf*L,kf*L],[-km,km,-km,km]]
    
    def dynamics(self, state, omega_sq):
        x,y,z,vx,vy,vz,phi,theta,psi,p,q,r = state
        U = self.mixing_matrix() @ omega_sq
        # 平移 + 旋转动力学...
        return derivatives

7. 本课小结

✅ 6自由度运动由4个电机控制(欠驱动)

✅ 混控矩阵将虚拟控制量映射到电机转速

✅ 旋转动力学含陀螺耦合项

✅ RK4数值积分实现高精度仿真

🤔 课后练习

1. 推导混控矩阵的逆矩阵。

2. 10°pitch倾斜时观察轨迹变化。

3. 一个电机失效还能稳定吗?

🏆 成就解锁:动力学大师

掌握6DOF动力学与混控矩阵

8. 推力系数与扭矩系数测定

# 推力测试台实验
1. 固定电机+桨到测试台
2. 从0到最大油门采样20个点
3. 记录: PWM, RPM, 推力N, 扭矩N·m, 电流A, 电压V
4. 拟合: T = kf*ω², M = km*ω²

# 典型值(2212电机+9045桨):
kf ≈ 1.0e-5 N/(rad/s)²
km ≈ 1.5e-7 N·m/(rad/s)²
km/kf ≈ 0.015

9. 电机-电调-螺旋桨匹配

参数影响设计原则
KV值转速/扭矩大桨低KV, 小桨高KV
桨直径推力/效率越大效率越高但响应慢
桨螺距推力/速度大螺距推力大但效率低
电调电流最大电流≥电机最大电流×1.2

扩展阅读与实践

关键公式回顾

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

推荐实验

🔧 工程实践要点

📊 性能指标参考

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

10. 四旋翼设计实例

450mm轴距航拍机设计

部件型号参数
机架F450450mm轴距/350g
电机2212 920KV最大推力800g/个
电调30ABLHeli_S
螺旋桨90459寸/4.5螺距
电池4S 4000mAh25C/370g
飞控Pixhawk 4168MHz/512KB
遥控SBUS接收机16通道

总重约1.5kg,悬停时间约25分钟,推重比约2.1:1

11. 动力学建模高级主题

空气动力学效应

柔性体效应

碳纤维臂在大载荷下可能弯曲5-10mm,改变有效力臂长度。高精度控制需考虑:

# 柔性臂模型(简化)
# L_eff = L_0 - k_bend * (T^2 + tau^2)^0.5
# k_bend: 弯曲刚度系数,典型值0.001-0.005 m/(N^2)
# 高载荷时臂弯曲使控制增益偏移约5-10%

12. 四旋翼仿真环境搭建

SITL软件在环仿真

# PX4 SITL环境搭建
git clone https://github.com/PX4/PX4-Autopilot.git
cd PX4-Autopilot
make px4_sitl jmavsim  # 启动jMAVSim仿真

# 或使用Gazebo(更逼真)
make px4_sitl gazebo   # 启动Gazebo仿真

# 连接QGroundControl
# QGC自动连接UDP 14550端口

AirSim仿真

# 微软AirSim - 基于Unreal Engine的高保真仿真
# 支持多旋翼/固定翼/汽车
# 特点: 逼真视觉/物理/天气模拟
pip install airsim
# 启动Unreal环境后连接

Python动力学仿真

# 轻量级6DOF仿真(本课程使用)
# 优势: 快速验证算法,无需安装复杂环境
# 缺点: 精度有限,不含气动效应
# 适合: 控制算法开发和快速原型验证

import numpy as np
class QuadSim:
    def __init__(self):
        self.state = np.zeros(12)  # [pos,vel,attitude,rate]
        self.params = self.load_params()
    
    def step(self, motor_cmds, dt=0.005):
        # 1. 电机模型(一阶延迟)
        # 2. 推力/力矩计算
        # 3. 6DOF动力学
        # 4. RK4积分
        return self.state

13. 飞控硬件平台

平台CPU传感器价格
Pixhawk 4STM32F765IMU×3/Baro/Mag¥400
Pixhawk 6CSTM32H743IMU×3/Baro/Mag¥600
Cube OrangeSTM32H743IMU×3/Baro/Mag¥800
DJI N3专有集成IMU/GPS¥1500
SpeedyBee F405STM32F405IMU/Baro¥150

选择建议:研究开发选Pixhawk(开源+灵活),竞速穿越选F4/F7飞控(低延迟),商业产品选DJI(可靠性)。

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

算法复杂度分析

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

算法/模块时间复杂度空间复杂度典型耗时
互补滤波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)系统,设计时必须遵循以下原则: