从零开始构建定制八旋翼无人机,无需硬件经验
摘要
从零开始构建容错强化学习八旋翼无人机,使用MuJoCo仿真和PPO训练,通过域随机化处理电机故障。该项目旨在通过强化学习策略直接控制电机,无需PID回路,重点关注六类故障情形。
暂无内容
查看缓存全文
缓存时间: 2026/06/30 12:35
# 容错强化学习八旋翼无人机 — Karolina Dubiel
来源:https://karolina.mgdubiel.com/drone/
自从在X上发布以来,我收到了许多私信,询问我具体打算如何推进这个项目的下一阶段:让无人机通过强化学习飞行。以下是我目前的计划。
---
最重要的是,强化学习策略将直接以50Hz频率通过串行链路命令所有8个电机连接到飞控,路径中没有任何传统PID回路。这是唯一能让策略在电机失效时完全重新分配推力的架构。我专注于六种独特的故障类别(忽略旋转对称性):单个电机、相邻对(45°,混合顺时针/逆时针)、90°同类型、135°混合型、180°同类型,以及完全电调丢失(每个电调控制自己的四轴单元)。最困难的情况是90°同类型故障,因为它是唯一同时遇到两个问题的故障:偏航扭矩不平衡(两个死电机旋转方向相同)以及剩余推力几何结构中的空间不对称性。
我画的电路图,用于接线
我想要支持的单电机和双电机故障,以及电调丢失
丢失两个同向旋转的电机后,剩下2个顺时针和4个逆时针电机运行(或反之),在等油门时偏航扭矩不平衡比例为2:1。要平衡它们,顺时针电机必须以2倍于逆时针电机单位推力的推力运行。每个电机最大推力为1393克力,偏航平衡的推力上限为5572克力——足以在无人机重量约2.8公斤(我们目前是1公斤)时维持2:1的推重比。剩下的6个电机跨越270°弧,因此横滚和俯仰控制仍然存在。最坏情况是可存活的——无人机会旋转,但仍能悬停并软着陆。
| 条件 | 全8电机 | 90°同类型(6个电机) |
|------|---------|---------------------|
| 最大总推力 | 11,144 gf | 5,572 gf(偏航平衡) |
| 悬停时CW电机负载 | ~9% | ~18% |
| 2:1推重比下最大无人机重量 | ~5.6 kg | ~2.8 kg |
| 偏航控制能力 | 完全 | 接近零 |
**仿真**
我正在MuJoCo中构建仿真,因为它在CPU上运行很快,而且我使用的是Mac电脑,这排除了Isaac Lab和几乎所有其他NVIDIA相关工具。对于单个刚体加8个推力点,MuJoCo绰绰有余,在我的笔记本电脑上可以并行运行约128个环境。
模型本身来自实际测量,而非CAD。我将收集以下数据:
- 总质量
- 通过双摆法测得的惯性张量
- 电机推力曲线
- 电机时间常数
- 悬停油门点
我还在仿真环境中添加了两项我经常读到是导致电机级控制从仿真到现实迁移失败的因素:
**1.** 电机延迟:真实电机需要20-50毫秒才能达到指令速度。如果不建模,仿真中推力会瞬间变化。一个在瞬态电机下学到的策略会学会抖动。
**2.** 循环延迟:在真实无人机上,从IMU读数到推力实际改变之间有大约15-30毫秒(串行读取、推理、串行写入、电调响应)。如果我用零延迟训练,策略一接触硬件就会振荡。这一点最让我担心,因此我会激进地随机化(策略训练时面对每一集变化的延迟,且延迟在集内也会抖动)。
现在的前进方向高层计划
> puffer. 就选puffer. 相信我。一个月后你会感谢我的。 — Chris von Csefalvay 🔜 CVPR26 (@epichrisis)
> 2026年6月7日 (https://x.com/epichrisis/status/2063476053038039278?ref_src=twsrc%5Etfw)
其他所有物理量也会被随机化:质量±10%,每个电机的推力常数±15%(廉价电机并不完全相同,我自己就有八个数据点证明),重心,飞行中电池电压下降,传感器噪声[\[4\]](https://karolina.mgdubiel.com/drone/#day14-ref-4)。
**训练**
使用 PPO[\[1\]](https://karolina.mgdubiel.com/drone/#day14-ref-1) 通过 PufferLib (https://github.com/PufferAI/PufferLib)。我考虑过SAC,因为它样本效率更高,但样本效率解决的问题我并不存在——我的仿真步骤几乎是免费的。PPO配合大量并行环境几乎是我读过的每一篇关于仿真到现实飞行的论文实际采用的方案,而且它更适合大量随机化。(另外:X上有人回复我说“puffer. 就选puffer. 相信我。”)
我从仿真到现实文献中借鉴了两个决策:
**1.** 评论家可以作弊。训练期间,价值网络能看到真实无人机永远不会有的真实情况,比如哪些电机失效、精确的推力常数以及真实速度。演员网络只能看到真实传感器提供的信息。训练结束后评论家会被丢弃,因此在部署时不会增加任何成本。(这被称为不对称演员-评论家[\[2\]](https://karolina.mgdubiel.com/drone/#day14-ref-2),我读到过当物理随机化如此剧烈时,这种方法会产生巨大影响。)
**2.** 暂时不设故障检测器。策略会看到最近5个观测/动作帧,并从它指令与无人机实际表现之间的差距中自行推断出故障。
在同类双电机故障下,无人机物理上无法保持航向——在任何油门组合下扭矩都无法平衡。正确的行为是放弃偏航,绕垂直轴缓慢旋转,保持水平。如果奖励函数惩罚旋转,策略就会为了追求无法达到的航向而牺牲横滚和俯仰。Mueller & D'Andrea 在四旋翼失去一个电机时展示了同样的现象[\[3\]](https://karolina.mgdubiel.com/drone/#day14-ref-3)——他们恢复中的四旋翼一直在旋转。我的无人机也会如此,而且是故意为之。
**部署**
如果策略在仿真中显示出有希望的存活率,将被导出为ONNX并在RPi 4上运行(我想知道大家对RPi 4与其他微控制器选项的看法?)。网络大约有45k参数,推理时间不到一毫秒,因此Pi不是瓶颈。50Hz循环将通过串行读取姿态和陀螺仪数据,运行策略,然后写入8个电机命令。
然后,实际实验:飞行,从遥控器上关闭电机,然后看看数百万次模拟坠毁是否教会了它什么!
---
1. J. Schulman, F. Wolski, P. Dhariwal, A. Radford, and O. Klimov, "Proximal Policy Optimization Algorithms," *arXiv:1707.06347*, 2017.
2. L. Pinto, M. Andrychowicz, P. Welinder, W. Zaremba, and P. Abbeel, "Asymmetric Actor Critic for Image-Based Robot Learning," *RSS*, 2018.
3. M. W. Mueller and R. D'Andrea, "Stability and control of a quadrocopter despite the complete loss of one, two, or three propellers," *IEEE ICRA*, 2014.
4. J. Tobin, R. Fong, A. Ray, J. Schneider, W. Zaremba, and P. Abbeel, "Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World," *IROS*, 2017.
相似文章
无人机自主性速成课
简要介绍四旋翼建模、状态估计、运动规划和控制,为新手提供入门起点。
MuJoCo-Drones-Gym:用于控制与强化学习的GPU加速多无人机仿真器
本文介绍MuJoCo-Drones-Gym,一个基于MuJoCo的GPU加速多无人机仿真器,支持灵活的物理模型、动作接口和观测空间,适用于强化学习与控制研究。
我用 Ollama 构建了一个本地自主编码代理——微调灵魂模型,40轮代理循环,MiniMax M3 处理重活
一位开发者使用 Ollama 构建了一个本地自主编码代理,结合了微调个性模型(Eve)进行对话和 MiniMax M3 处理重活,实现了 40 轮代理循环,包含 16 个工具,9 个测试全部一次通过。
NOML-NOML:分层TD3 + 锚定策略用于飞行控制[P]
介绍了NOML,一种用于连续飞行控制的自定义强化学习算法,它采用分层actor、锚定策略和镜像学习来防止振荡并提高稳定性。该代码已在GitHub上开源。
DiffAero:一个用于高效四旋翼策略学习的GPU加速可微仿真框架
DiffAero 是一个面向四旋翼控制策略学习的GPU加速、完全可微仿真框架,支持环境级与智能体级并行、多种动力学模型以及可定制传感器。它能够在消费级硬件上数小时内完成鲁棒飞行策略的学习,并以开源形式发布。