3. 神经网络控制入门

在PX4机载神经网络控制实验中,神经网络并不是一个抽象的数学黑箱,而是直接参与姿态控制、位置控制或自适应补偿的计算模块。理解它的基础结构、前馈计算过程、激活函数的作用、损失函数的训练目标,以及最终如何映射为控制器输出,是后续在机载端部署模型的前提。本节从工程视角梳理这条链路,帮助建立“网络结构—数值计算—控制量”之间的对应关系。

一、神经网络基础:从神经元到前馈网络

神经网络的基本单元是神经元。一个神经元接收若干输入 x₁, x₂, …, xₙ,对每个输入乘以权重 wᵢ,加上偏置 b,得到加权和 z = Σwᵢxᵢ + b,再经过激活函数 σ(·) 得到输出 a = σ(z)。单个神经元只能表达线性可分关系,而将多个神经元按层组织起来,就形成了前馈网络(Feedforward Neural Network,FNN)。

前馈网络通常由输入层、若干隐藏层和输出层组成。信息从输入层单向流向输出层,层与层之间全连接。对于PX4控制任务,输入层往往接收姿态误差、角速度、速度、位置偏差、电机转速等状态量;隐藏层负责非线性特征提取;输出层则给出控制增量、力矩指令或参数修正量。网络层数、每层神经元数量、激活函数类型共同决定了模型的表达能力和机载推理开销。

前馈网络的核心计算可概括为:
a⁽⁰⁾ = x
z⁽ˡ⁾ = W⁽ˡ⁾a⁽ˡ⁻¹⁾ + b⁽ˡ⁾
a⁽ˡ⁾ = σ⁽ˡ⁾(z⁽ˡ⁾)
ŷ = a⁽ᴸ⁾

二、激活函数:引入非线性控制能力

如果没有激活函数,多层网络等价于一个线性变换,无法拟合无人机动力学中的非线性映射。激活函数的作用是引入非线性,使网络能够逼近复杂的控制律。常见激活函数包括Sigmoid、Tanh、ReLU、Leaky ReLU等,它们在输出范围、梯度特性和计算成本上各有差异。

激活函数 表达式 输出范围 适用场景
Sigmoid 1/(1+e⁻ᶻ) (0, 1) 概率输出、门控信号
Tanh (eᶻ-e⁻ᶻ)/(eᶻ+e⁻ᶻ) (-1, 1) 姿态误差、归一化控制量
ReLU max(0, z) [0, +∞) 隐藏层、机载实时推理
Leaky ReLU max(αz, z) (-∞, +∞) 避免神经元死亡

在PX4机载部署中,ReLU因计算简单、梯度稳定而常用于隐藏层;输出层则根据控制量范围选择Tanh或线性函数。例如,若网络输出为归一化的力矩增量,使用Tanh可将输出限制在[-1, 1],再乘以最大力矩系数映射到实际执行机构。

三、损失函数:定义“学得好不好”

损失函数衡量网络预测值与期望值之间的差距,是训练过程的优化目标。控制任务中,损失函数的设计直接决定网络学习到的控制策略。常见损失函数包括均方误差(MSE)、平均绝对误差(MAE)和自定义控制代价。

对于姿态控制,若期望网络输出为力矩修正量,MSE可写为:

L_MSE = (1/N) Σ (y_i - ŷ_i)²
其中:
  y_i  = 期望控制量(来自专家控制器或最优轨迹)
  ŷ_i  = 网络预测控制量
  N    = 样本数量

若更关注跟踪误差的绝对大小,可使用MAE;若希望抑制大误差,可对MSE加权。实际训练中,还会加入正则项防止过拟合:

L_total = L_MSE + λ·||W||²
λ 为正则化系数,W 为网络权重
在PX4实验中,损失函数应尽量与控制性能指标对齐。例如,若最终评价指标是姿态角跟踪误差,则训练损失中应包含姿态误差项,而不是仅拟合电机PWM。

四、控制器映射关系:从网络输出到PX4执行机构

神经网络训练完成后,需要将输出映射为PX4可执行的控制量。这一映射关系是机载神经网络控制的核心环节。典型链路如下:

  1. 传感器获取状态量:姿态角、角速度、位置、速度等。
  2. 状态量归一化后输入神经网络。
  3. 网络前向推理得到输出 ŷ。
  4. 根据输出类型进行反归一化或缩放。
  5. 映射为PX4控制量:力矩、推力、姿态角速率指令或电机PWM。
  6. 通过uORB消息发布到对应控制模块。

例如,若网络输出为三轴力矩增量 Δτ = [Δτx, Δτy, Δτz],则可将其叠加到PX4姿态控制器的输出上:

τ_cmd = τ_px4 + K·Δτ
其中:
  τ_px4 = PX4原生姿态控制器输出
  K     = 映射增益,需根据机型调试
  Δτ    = 神经网络输出

若网络直接输出电机PWM增量,则需注意PWM饱和限制和电机混控矩阵的约束。无论哪种方式,都必须保证网络输出在安全范围内,并设置限幅和故障回退逻辑。

五、案例场景:姿态自适应补偿

假设四旋翼在阵风干扰下出现姿态振荡,传统PID控制器参数固定,难以适应变化。此时可训练一个前馈网络,输入为姿态误差和角速度,输出为力矩补偿量。训练数据来自高保真仿真或飞行日志,损失函数采用MSE。训练完成后,将网络部署到机载计算机,通过uORB订阅姿态数据,推理后发布力矩补偿消息。实验表明,该方法可有效抑制阵风引起的姿态波动。

六、常见误区与复盘

  • 误区一:激活函数随意选。 输出层使用ReLU可能导致控制量无法为负,应根据控制量范围选择Tanh或线性。
  • 误区二:损失函数与控制目标脱节。 仅拟合电机PWM而不关注姿态误差,可能导致控制性能下降。
  • 误区三:忽略归一化。 输入输出未归一化会导致训练困难,机载推理时也需保持一致。
  • 误区四:无安全限幅。 网络输出可能超出执行机构范围,必须加入限幅和回退逻辑。
机载部署前,务必在仿真中验证网络输出的幅值和频率特性,避免因推理延迟或输出振荡导致飞行事故。
PX4机载神经网络控制映射链路 输入层 姿态角误差 角速度 速度偏差 位置偏差 电机转速 归一化处理 x ∈ Rⁿ 隐藏层 全连接层 1 ReLU 激活 全连接层 2 ReLU 激活 全连接层 3 Tanh 激活 z = W·a + b a = σ(z) 输出层 力矩增量 Δτx 力矩增量 Δτy 力矩增量 Δτz 推力修正 ΔT ŷ ∈ [-1, 1] 反归一化 PX4控制器 τ_cmd = τ_px4 + K·Δτ 限幅保护 混控矩阵 电机PWM uORB发布 执行机构 损失函数 L = (1/N)Σ(y - ŷ)² + λ||W||² → 反向传播更新权重 状态感知 非线性映射 控制增量 执行输出

综上,神经网络控制入门的关键在于理解“输入状态—前馈计算—激活非线性—损失优化—控制映射”这条完整链路。只有把每个环节与PX4的实际控制量对应起来,才能在后续实验中正确设计网络结构、训练目标和部署接口。