无人机飞控基础:四旋翼飞行原理、PWM/ESC控制、姿态角与坐标系定义

四旋翼无人机是TinyML视觉识别与飞控联动的最佳载体。要理解后续IMU数据如何驱动电机、视觉识别结果如何转化为飞行动作,必须先建立三个核心认知:四旋翼如何通过差速产生力矩、PWM信号如何通过ESC驱动无刷电机、以及姿态角在机体坐标系与地面坐标系之间如何定义与换算。本章将围绕这三条主线展开,为后续的传感器融合与视觉避障打下坚实的工程基础。

四旋翼飞控核心链路:从姿态感知到电机执行 地面坐标系 (NED) X_N → 北 Y_N → 东 Z_N → 向下(重力方向) 用于导航、定位、视觉目标映射 机体坐标系 (FRD) X_B → 机头方向 Y_B → 右翼方向 Z_B → 向下(机体垂直) IMU直接测量、姿态角定义基准 姿态角 (欧拉角) 俯仰 Pitch (θ) 横滚 Roll (φ) 偏航 Yaw (ψ) 机体→地面的旋转映射 旋转矩阵 R(θ,φ,ψ) 欧拉角解算 IMU 传感器 加速度计 + 陀螺仪 (+ 磁力计) 飞控 MCU 姿态解算 + PID控制 (STM32/ESP32) ESC 电调 PWM → 三相驱动 (50Hz~500Hz) 无刷电机 4× 独立 转速控制 I²C/SPI PWM 三相AC 反馈闭环:IMU测量 → 姿态误差 → PID修正 电机布局(X型) M1 M2 M3 M4 红=顺时针 绿=逆时针

2.1 四旋翼飞行原理:差速控制与力矩平衡

四旋翼无人机通过四个独立电机的转速差实现全部六个自由度的运动控制(三个平移、三个旋转)。其核心在于力矩平衡与推力矢量合成。四个电机分为两组:M1/M3为顺时针旋转(CW),M2/M4为逆时针旋转(CCW),这种正反桨配置用于抵消反扭矩——当四个电机转速相同时,总反扭矩为零,无人机保持航向稳定。

飞行控制的基本逻辑如下:

  • 垂直升降(油门):四个电机同时增加或减少转速,改变总升力。当总升力大于重力时上升,小于重力时下降。
  • 俯仰控制(前后运动):前侧电机(M1/M4)与后侧电机(M2/M3)产生转速差。前快后慢时,机头下俯,产生向前推力分量。
  • 横滚控制(左右运动):左侧电机(M1/M2)与右侧电机(M3/M4)产生转速差。左快右慢时,机体向左倾斜,产生向左推力分量。
  • 偏航控制(旋转):利用正反桨的反扭矩差。顺时针组(M1/M3)加速、逆时针组(M2/M4)减速时,机体绕Z轴顺时针旋转。
运动方向电机转速变化物理原理对应姿态角
上升/下降M1=M2=M3=M4 同步增减总推力与重力差无(高度变化)
前倾/后仰M1+M4 与 M2+M3 差速俯仰力矩产生俯仰角 θ
左倾/右倾M1+M2 与 M3+M4 差速横滚力矩产生横滚角 φ
左旋/右旋CW组与CCW组差速反扭矩不平衡偏航角 ψ
工程经验:在TinyML项目中,视觉识别结果(如目标物偏移量)通常转换为期望姿态角增量。例如,目标在画面右侧时,飞控输出横滚角指令让无人机右倾,从而产生水平位移。这个转换逻辑在PID控制器之前完成,属于"外环位置控制"的范畴。

2.2 PWM与ESC控制:从数字信号到电机转速

飞控MCU无法直接驱动无刷电机,必须通过电子调速器(ESC)将PWM信号转换为三相交流驱动。PWM(脉冲宽度调制)信号通过改变高电平占空比来传递控制信息。对于大多数无人机ESC,标准PWM周期为2.5ms(400Hz),其中高电平时间1ms~2ms对应油门0%~100%。

ESC的三种主流控制协议对比如下:

协议信号频率分辨率适用场景
传统PWM50Hz~500Hz约1000级入门级、兼容性好
Oneshot1252kHz~4kHz约250级穿越机、响应快
DShot600数字信号12bit (2048级)高端竞速、抗干扰强

在TinyML无人机项目中,推荐使用传统PWM或Oneshot125,因为ESP32等MCU的定时器资源有限,且视觉识别本身占用大量CPU。PWM信号生成的关键参数包括:

// ESP32 Arduino 示例:PWM初始化与油门输出
const int freq = 400;          // 400Hz PWM频率
const int resolution = 10;     // 10位分辨率 (0-1023)
const int ch[4] = {0,1,2,3};   // 4个PWM通道

void setup() {
  ledcSetup(ch[0], freq, resolution);
  ledcAttachPin(13, ch[0]);    // M1 → GPIO13
  // ... 其余三个电机类似
}

void setMotorSpeed(int motorId, float throttle) {
  // throttle: 0.0 ~ 1.0
  int duty = (int)(throttle * 1023);
  ledcWrite(ch[motorId], duty);
}
关键风险:ESC上电时要求PWM信号为最低油门(通常1ms),否则会进入编程模式或拒绝启动。在飞控初始化阶段,必须先输出最低油门并延时2~3秒,待ESC发出"确认音"后再输出实际控制信号。这在TinyML项目中尤为重要,因为视觉模型加载可能耗时数秒,若此时PWM输出异常,可能导致电机意外启动。

2.3 姿态角与坐标系定义:IMU数据解算的基础

姿态角描述的是机体坐标系(Body Frame)相对于地面坐标系(Earth Frame)的旋转关系。采用NED(北-东-下)地面坐标系和FRD(前-右-下)机体坐标系是航空领域的标准约定。三个欧拉角的定义如下:

  • 俯仰角 θ (Pitch):绕机体Y轴旋转,机头上仰为正。范围 -90°~+90°。
  • 横滚角 φ (Roll):绕机体X轴旋转,右翼下倾为正。范围 -180°~+180°。
  • 偏航角 ψ (Yaw):绕机体Z轴旋转,机头右偏为正。范围 -180°~+180°。

IMU中的加速度计测量的是比力(重力与惯性力的矢量和),陀螺仪测量的是角速度。从IMU原始数据到姿态角的解算流程为:

  1. 数据预处理:对加速度计和陀螺仪数据进行低通滤波(去除高频噪声)和零偏校准。
  2. 初始姿态确定:利用加速度计在静止时测量重力方向,计算初始俯仰角和横滚角:θ = atan2(-ax, sqrt(ay²+az²)),φ = atan2(ay, az)。
  3. 陀螺仪积分:将陀螺仪角速度乘以时间步长,累加得到姿态增量。
  4. 数据融合:使用互补滤波或卡尔曼滤波,将加速度计的低频姿态估计与陀螺仪的高频积分结果融合,消除漂移。
坐标系转换的工程意义:在TinyML视觉识别中,摄像头通常安装在机头方向(X_B轴),识别到的目标像素坐标需要先转换到机体坐标系,再通过旋转矩阵R(θ,φ,ψ)映射到地面坐标系,才能计算目标相对于无人机的真实水平距离。忽略姿态补偿会导致视觉定位误差随倾斜角度急剧增大。

2.4 案例拆解:基于IMU姿态反馈的悬停控制调试

以一个典型的TinyML无人机悬停调试过程为例,说明姿态角与PWM控制的联动关系。

背景与约束:无人机重量350g,使用4个1306无刷电机,ESC为Oneshot125协议,飞控为ESP32。目标:实现室内无GPS环境下的稳定悬停(姿态角误差小于±2°)。

初始现象:首次上电后,无人机在离地30cm高度出现持续振荡,俯仰角在±8°范围内波动,无法稳定悬停。

关键数据分析:

  • IMU日志显示陀螺仪零偏为0.02 rad/s(约1.15°/s),积分10秒后姿态漂移达11.5°。
  • 加速度计噪声标准差为0.05g,直接用于姿态估计时抖动明显。
  • PID控制器中P=1.8,I=0.02,D=12,响应速度足够但阻尼不足。

分析判断:振荡频率约2Hz,与陀螺仪积分漂移周期吻合。判断为姿态估计中的陀螺仪零偏未完全补偿,导致反馈信号存在低频漂移,PID控制器为纠正虚假误差而持续输出修正量,形成振荡。

实际操作步骤:

  1. 在飞控启动时采集1000个静止样本,计算陀螺仪平均零偏,并在每次积分前减去该值。
  2. 将互补滤波系数从0.02调整为0.05,增加加速度计对低频姿态的修正权重。
  3. 将PID的D项从12提高到18,增加阻尼,抑制振荡。
  4. 在PWM输出端增加50Hz低通滤波(软件实现),平滑电机响应。

结果对比:调整后,悬停姿态角误差从±8°降至±1.5°,振荡完全消除。飞行时间从4分30秒略微降至4分10秒(滤波增加功耗),但稳定性显著提升。

风险与代价:D项过大会导致电机响应迟钝,在快速机动时出现"滞后感"。互补滤波权重过高会使姿态估计对振动敏感,在强风环境下可能引入高频抖动。

复盘经验:姿态控制调试应遵循"先校准传感器,再调PID"的顺序。TinyML项目中,视觉识别算法运行时会占用CPU,导致IMU采样间隔抖动,建议将IMU读取放在高优先级任务中,并使用DMA传输减少延迟。

总结要点:四旋翼飞行的本质是力矩控制,PWM/ESC是执行链路,姿态角是反馈链路。在TinyML无人机中,视觉识别结果作为外环控制输入,最终通过改变四个电机的PWM占空比实现期望运动。理解坐标系转换关系,是正确融合视觉与IMU数据的前提。