3. 神经网络控制入门
在PX4机载神经网络控制实验中,神经网络并不是一个抽象的数学黑箱,而是直接参与姿态控制、位置控制或自适应补偿的计算模块。理解它的基础结构、前馈计算过程、激活函数的作用、损失函数的训练目标,以及最终如何映射为控制器输出,是后续在机载端部署模型的前提。本节从工程视角梳理这条链路,帮助建立“网络结构—数值计算—控制量”之间的对应关系。
一、神经网络基础:从神经元到前馈网络
神经网络的基本单元是神经元。一个神经元接收若干输入 x₁, x₂, …, xₙ,对每个输入乘以权重 wᵢ,加上偏置 b,得到加权和 z = Σwᵢxᵢ + b,再经过激活函数 σ(·) 得到输出 a = σ(z)。单个神经元只能表达线性可分关系,而将多个神经元按层组织起来,就形成了前馈网络(Feedforward Neural Network,FNN)。
前馈网络通常由输入层、若干隐藏层和输出层组成。信息从输入层单向流向输出层,层与层之间全连接。对于PX4控制任务,输入层往往接收姿态误差、角速度、速度、位置偏差、电机转速等状态量;隐藏层负责非线性特征提取;输出层则给出控制增量、力矩指令或参数修正量。网络层数、每层神经元数量、激活函数类型共同决定了模型的表达能力和机载推理开销。
a⁽⁰⁾ = xz⁽ˡ⁾ = 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执行机构
神经网络训练完成后,需要将输出映射为PX4可执行的控制量。这一映射关系是机载神经网络控制的核心环节。典型链路如下:
- 传感器获取状态量:姿态角、角速度、位置、速度等。
- 状态量归一化后输入神经网络。
- 网络前向推理得到输出
ŷ。 - 根据输出类型进行反归一化或缩放。
- 映射为PX4控制量:力矩、推力、姿态角速率指令或电机PWM。
- 通过uORB消息发布到对应控制模块。
例如,若网络输出为三轴力矩增量 Δτ = [Δτx, Δτy, Δτz],则可将其叠加到PX4姿态控制器的输出上:
τ_cmd = τ_px4 + K·Δτ
其中:
τ_px4 = PX4原生姿态控制器输出
K = 映射增益,需根据机型调试
Δτ = 神经网络输出
若网络直接输出电机PWM增量,则需注意PWM饱和限制和电机混控矩阵的约束。无论哪种方式,都必须保证网络输出在安全范围内,并设置限幅和故障回退逻辑。
五、案例场景:姿态自适应补偿
假设四旋翼在阵风干扰下出现姿态振荡,传统PID控制器参数固定,难以适应变化。此时可训练一个前馈网络,输入为姿态误差和角速度,输出为力矩补偿量。训练数据来自高保真仿真或飞行日志,损失函数采用MSE。训练完成后,将网络部署到机载计算机,通过uORB订阅姿态数据,推理后发布力矩补偿消息。实验表明,该方法可有效抑制阵风引起的姿态波动。
六、常见误区与复盘
- 误区一:激活函数随意选。 输出层使用ReLU可能导致控制量无法为负,应根据控制量范围选择Tanh或线性。
- 误区二:损失函数与控制目标脱节。 仅拟合电机PWM而不关注姿态误差,可能导致控制性能下降。
- 误区三:忽略归一化。 输入输出未归一化会导致训练困难,机载推理时也需保持一致。
- 误区四:无安全限幅。 网络输出可能超出执行机构范围,必须加入限幅和回退逻辑。
综上,神经网络控制入门的关键在于理解“输入状态—前馈计算—激活非线性—损失优化—控制映射”这条完整链路。只有把每个环节与PX4的实际控制量对应起来,才能在后续实验中正确设计网络结构、训练目标和部署接口。