作品:基于RL-MPC融合控制的位姿优化与集群巡检数字样机
学校:江苏大学/重庆大学/四川大学
QuadrotorModel — 四旋翼无人机建模与控制仿真实验平台
基于 Modelica / MWORKS 的四旋翼无人机高保真动力学模型 · PID / MPC / RL-MPC 全谱系控制器 · 纯 Julia PPO 强化学习训练环境 · 系统性对比评测体系
第十五届"中国软件杯"大学生软件设计大赛 · A8 四旋翼无人机位姿控制系统设计优化 · 国一作品
目录
- 1. 项目简介
- 2. 设计文档:《仿真分析报告》
- 3. 核心特性
- 4. 系统架构
- 5. 控制器体系
- 6. 模型库结构
- 7. 快速开始
- 8. RL 训练环境
- 9. 对比实验与评测结果
- 10. 工程应用:三机协同输电线路巡检
- 11. 目录结构总览
- 12. 依赖与环境要求
- 13. 注意事项
1. 项目简介
QuadrotorModel 是一个面向四旋翼无人机控制算法研究与工程验证的完整仿真实验平台。项目以 Modelica 多领域统一建模语言构建四旋翼高保真物理模型(多体动力学、电机、传感器、风扰、地面接触),在 MWORKS.Sysplorer 环境中实现了从经典 PID 到模型预测控制(MPC)、再到**强化学习与 MPC 融合(RL-MPC)**的四代控制器,并配套提供了:
- 与 Sysplorer 模型逐位等价的纯 Julia 快速训练环境(PPO 残差策略训练);
- 覆盖 5 类标准轨迹 × 多档风速 × 参数摄动的自动化对比评测流水线(Julia 分析脚本 + 指标计算 + 图表生成);
- 三机协同输电线路巡检编队应用示例(安全降落、重新入队等编队机动)。
平台物理参数取自实测整机:质量 0.163 kg,三轴惯量 1.0556×10⁻⁴ kg·m²,X 型布局,旋翼臂偏移 0.04243 m,升力系数 0.002(F = k·ω²),控制回路运行频率 50 Hz。
2. 设计文档:《仿真分析报告》
项目根目录下的 仿真分析报告.pdf(120 页)是本项目的完整设计与分析文档,为第十五届"中国软件杯"大学生软件设计大赛 A8「四旋翼无人机位姿控制系统设计优化」 赛题的参赛报告。
| 项目 | 信息 |
|---|---|
| 报告名称 | 《四旋翼无人机控制算法与智能巡检系统仿真分析报告》 |
| 参赛团队 | 理越时代团队:张岭(队长)、李铸铭、苏智 |
| 参赛院校 | 江苏大学、重庆大学、四川大学 |
| 指导教师 | 刘建帮 |
| 编制日期 | 2026 年 8 月 |
章节结构
| 章节 | 内容 |
|---|---|
| 1 引言 | 研究背景、主要工作与贡献 |
| 2 系统建模与仿真平台 | MWORKS/Sysplorer 平台架构、四旋翼非线性动力学建模、面向控制的线性化模型 |
| 3 基准 PID 控制器性能分析与不足 | 串级 PID 整定、三类轨迹上的性能表现与系统性归因 |
| 4 优化控制算法设计:单点 MPC 与多点 MPC | 预测模型推导、批量预测方程、二次型代价与闭式滚动控制律、轨迹预览设计 |
| 5 对比实验与定量分析 | 单点 MPC / 多点 MPC / PID 同口径对比与消融量化 |
| 6 参数摄动鲁棒性分析 | 质量、惯量、升力系数 ±5% 整体摄动实验 |
| 7 RL-MPC 融合控制器设计 | 融合架构、状态/动作/奖励要素、域随机化训练与 sim-to-sim 迁移、工程实现 |
| 8 RL-MPC 风扰鲁棒性对比验证 | 0–4 m/s 未知风扰下 40 工况实测 |
| 9 智能巡检应用 | "一主二从"协同编队、虚拟巡检相机、无线图传建模、图像异常识别、任务监督与编队重构、150 s 故障注入闭环验证 |
| 10 结论与展望 | 主要结论、控制器家族选型建议、不足与展望 |
报告核心结论
- 多点 MPC 相对 PID:阶梯爬升、横 8 字、平滑多航点轨迹的三维 RMSE 分别改善 77.1% / 58.3% / 99.8%;
- 参数摄动鲁棒性:质量、惯量与升力系数同步 ±5% 摄动下,多点 MPC 的性能改善率保持在约 79% 区间,验证了轨迹预览与滚动反馈对模型失配的吸收能力;
- RL-MPC 风扰实测(40 工况):有风胜率 15/15,RMSE 平均改善 28.96%,平均性能保持率由 61.82% 提升至 84.85%,抗风敏感度降低 98.5%;
- 极端工况:4 m/s 强风螺旋圆下传统 MPC 被吹离并触地(RMSE 34.8 m),RL-MPC 仍保持 0.70 m 跟踪(改善 98.0%);无风工况两者逐点一致,实证残差融合的性能下界保证。
3. 核心特性
| 特性 | 说明 |
|---|---|
| 高保真物理模型 | Modelica MultiBody 多体动力学(机身/机臂/旋翼)、电机一阶滞后、传感器测量链、定常风 + 双正弦阵风扰动、地面接触模型 |
| 四代控制器 | PID → 单点 MPC → 多点 MPC(20 点预览)→ RL-MPC(PPO 残差策略叠加 MPC 骨架) |
| 解析式 MPC | 双积分器预测模型离线解析求解增益 K = (ΦᵀQΦ + R)⁻¹ΦᵀQ,运行时仅需一次矩阵乘 |
| RL-MPC 融合 | 35 维观测 → MLP(64×64) 残差策略,输出 [Δθ, Δφ, Δω_base] 叠加于 MPC 指令,兼顾最优性与鲁棒性 |
| 零依赖训练环境 | 纯 Julia 标准库实现 Gym 风格环境 + PPO(含 GAE、KL 早停、EMA 策略、对偶基线奖励),无需任何第三方包 |
| 系统化评测 | 5 类轨迹(阶梯爬升/螺旋圆周/八字/平滑多航点/三维变频扫频)× 4 档风速 × ±5% 参数摄动,RMSE/超调/调节时间等全套指标自动出图 |
| 工程应用闭环 | 三机编队协同巡检示例,含安全降落与失效机重新入队机动 |
4. 系统架构
┌──────────────────────────────────────────────┐
│ QuadrotorModel (Modelica) │
└──────────────────────────────────────────────┘
┌──────────────┐ ┌───────────┐ ┌───────────┐ ┌────────────┐ ┌──────────────┐
│ PathPlanning │─────▶│ 控制器 │──▶│ Electrical│──▶│ Mechanics │──┬──▶│ Sensors │
│ 轨迹/预览20点 │ │ PID / MPC │ │ Actuator │ │ QuadChassis│ │ │ 位姿/速度测量 │
└──────────────┘ │ / RL-MPC │ │ 电机×4 │ │ 多体动力学 │ │ └──────┬───────┘
└───────────┘ └───────────┘ └────────────┘ │ │
▲ │ │ 反馈
┌──────┴───────┐ ▼ │
│ Disturbances │◀───────────────────────────────┘ ◀────────┘
│ 风扰(不可知) │ GroundModel 地面接触
└──────────────┘
离线侧:RL训练环境(Julia, 与模型逐位等价) ──PPO训练──▶ policy_stage3_best.json
│ 权重内嵌
▼
Blocks.RLResidualPolicy (Sysplorer 块)
5. 控制器体系
四种控制器均以 「位置控制 → 姿态控制 → 控制分配」 三级串级结构实现,差异在外环位置控制律:
| 控制器 | 模型文件 | 位置外环 | 说明 |
|---|---|---|---|
| PID | Examples 内 PID 示例 |
三环 PID | 基线控制器 |
| 单点 MPC | One_MPC.mo |
仅跟踪当前目标点 | 结构最简,无前馈预览 |
| 多点 MPC | MPC_Controller.mo |
预览未来 20 个轨迹点 | 内嵌 JuliaFunction 解析求解,预见性最优 |
| RL-MPC | RLMPC_Controller.mo |
多点 MPC + PPO 残差策略 | RL 输出 [Δθ, Δφ, Δω_base] 补偿模型失配/风扰 |
| 控制分配(X 型布局,与 Sysblock 实现一致): |
m1 = ωb − r − p + y m2 = ωb + r − p − y
m3 = ωb − r + p − y m4 = ωb + r + p + y
其中 ωb 为基准转速(油门通道),r / p / y 分别为滚转 / 俯仰 / 偏航通道增量。
RL-MPC 融合原理
RL-MPC 在多点 MPC 骨架上叠加一个 PPO 训练出的残差策略(Blocks.RLResidualPolicy):
- 观测(35 维):位置/姿态测量、三轴速度、未来 20 点参考轨迹关键点、姿态指令、基准转速及误差积分项;
- 动作(3 维):
[Δθ, Δφ, Δω_base]∈ [-1,1]³,叠加到 MPC 输出的姿态指令与基准转速上; - 训练目标:直接优化「相对同条件纯 MPC 的 RMSE 比值」,采用 CRN 对偶基线奖励消除场景难度方差;
- 部署方式:训练收敛后权重以常量形式内嵌进 Sysplorer JuliaFunction 块,推理零外部依赖。
6. 模型库结构
package.mo(约 63 万字节)为完整的 Modelica 包,顶层结构如下:
| 包 | 说明 |
|---|---|
Examples |
22 个开箱即用的仿真实例(见第 7 节) |
PathPlanning |
轨迹生成:当前目标点模型 + MPC 预览 20 点模型(阶梯爬升 / 螺旋圆周 / 八字 / 平滑多航点 / 变频扫频),含解析轨迹函数 |
Applications.CooperativeInspection |
三机协同输电线路巡检系统(编队 + 巡检任务逻辑) |
Mechanics |
QuadrotorBody 机身、Rotor 旋翼、Arm 机臂、QuadChassis 整机(含地面) |
Blocks.ControlMethod |
控制算法库(含 RLResidualPolicy PPO 残差策略块) |
Blocks.Controller |
控制器组件 |
Electricals |
Actuator 电机模型 |
GroundModel |
TouchModel 地面接触模型 |
Sensors |
姿态角 / 位置 / 转速传感器测量链 |
Disturbances |
WindDisturbance 未知风扰(定常风 + 双正弦阵风,只施力不测量,控制器不可知) |
Utilities.Functions |
工具函数库 |
此外随库附带三个独立控制器顶层模型:MPC_Controller.mo(多点 MPC)、One_MPC.mo(单点 MPC)、RLMPC_Controller.mo(RL-MPC),均为 Sysplorer Embedded Coder 用户模型块(50 Hz 采样),可直接拖入任意系统模型复用。
7. 快速开始
7.1 环境准备
- 安装 MWORKS 2026(Sysplorer + Syslab),版本 ≥ 26.3.0;
- 在 Sysplorer 中通过「文件 → 打开库」加载本目录下的
package.mo; - 依赖的
SysplorerEmbeddedCoder、TYUtility等库已随附于mw_mol/目录。
7.2 运行仿真实例
QuadrotorModel.Examples 下提供 22 个完整实验模型,覆盖「控制器 × 轨迹 × 应用」组合,打开后点击仿真即可:
| 类别 | 模型 |
|---|---|
| 多点 MPC | MultiPointMPC_StepClimb / _HelicalClimb / _FigureEightTracking / _SmoothWaypointTracking |
| 单点 MPC | SinglePointMPC_StepClimb / _HelicalClimb / _FigureEightTracking / _SmoothWaypointTracking / _FrequencySweepTracking |
| PID | PID_StepClimb / _HelicalClimb / _FigureEightTracking / _SmoothWaypointTracking / _FrequencySweepTracking |
| RL-MPC | RLMPC_CirclePath / RLMPC_EightPath / RLMPC_ClimbPath / RLMPC_FrequencySweepTracking / RLMPC_SmoothWaypoint |
| 协同巡检 | PID_ / SinglePointMPC_ / MultiPointMPC_ / RLMPC_CooperativePowerLineInspection |
典型模型默认求解器为 Dassl(容差 1e-4,输出间隔 0.01 s),示例内置 4 m/s 风扰(WindDisturbance,可通过 windSpeed / windOn 参数调节)。
7.3 自定义实验
- 从
Examples复制一个最接近的实例; - 替换
PathPlanning中的轨迹模型(所有轨迹均受PartialCurrentPath/PartialPreviewPath约束,可插拔); - 拖入
MPC_Controller/One_MPC/RLMPC_Controller之一作为控制器; - 按需配置
Disturbances.WindDisturbance风速与开关。
8. RL 训练环境
RL训练环境/ 是与 Sysplorer 模型逐位等价(经 Python 镜像闭环验证)的纯 Julia 快速训练环境,用于训练 RL-MPC 中的残差策略。
8.1 环境特性
- 被控对象:6DOF 刚体 + 电机一阶滞后 + 风扰 + 传感器噪声(
Dynamics.jl); - MPC 基线:多点 MPC 的 Julia 复现,权重支持 RL 在线调节(
MPCBaseline.jl); - Gym 风格接口:
reset!(env; scenario, randomize, wind)/step!(env, a)(EnvAPI.jl); - 域随机化:质量/惯量/升力系数/风扰等参数逐 episode 随机化;
- 6 类训练场景:circle / climb / eight / sweep / waypoint / circle_step。
8.2 训练 PPO 残差策略
# 在 MWORKS Syslab 或标准 Julia 1.10+ 中:
cd("RL训练环境")
include("scripts/train_ppo.jl") # 修改文件顶部 STAGE = 1/2/3 依次推进课程式训练
- 网络:Actor MLP 35→64→64→3(tanh 头),Critic MLP 35→64→64→1,纯标准库实现;
- 关键技术:GAE 优势估计、学习率线性退火、探索 σ 退火、PPO 近似 KL 早停、梯度范数裁剪、策略权重 EMA(Polyak 平均)、选模早停、CRN 对偶基线奖励(直接度量残差相对纯 MPC 的逐步因果收益);
- 输出:
policies/policy_stageX_best.json(最优检查点,嵌入 Sysplorer 用)及定期存档。
8.3 其他脚本
| 脚本 | 用途 |
|---|---|
scripts/demo_rollout.jl |
策略演示 rollout |
scripts/eval_checkpoints.jl |
检查点批量评估 |
scripts/eval_wind.jl |
带风鲁棒性评估 |
scripts/validate_equivalence.jl |
与 Sysplorer 模型的等价性验证 |
8.4 训练过程可视化
上图展示了 stage3 训练过程:左上为每 episode 相对纯 MPC 的 RMSE 比(<1 即优于纯 MPC),右上为「6 轨迹 × 有无风」混合评分与 EMA 评分(收敛至 ≈0.79),左下为坠机次数(全程仅 2 次),右下为探索标准差退火。最终策略在全部轨迹、有无风条件下均优于纯 MPC 基线。
9. 对比实验与评测结果
analysis/legacy_comparisons/ 下为系统化的对比实验套件,每组实验包含原始 CSV 数据、Julia 分析脚本(src/metrics.jl 指标计算、src/visualization.jl 出图)与完整报告(result.txt + output/*.png)。评测指标涵盖 RMSE / MAE / 最大误差 / 超调量 / 上升时间 / 调节时间 / 稳态误差。
9.1 为什么需要 MPC:PID 的固有不足
螺旋圆周轨迹(阶跃入环压力测试)下,PID 的 3D RMSE 达 0.464 m,最大瞬时偏差 3.005 m,X 轴超调 118%,出现明显振荡:
9.2 MPC vs PID:平滑多航点轨迹
多航点轨迹下 PID 在 X 轴出现 ±45 m 级发散振荡,而多点 MPC 全程紧贴参考轨迹:
9.3 RL-MPC vs 多点 MPC:残差策略的增量收益
在多点 MPC 已经很强的基线上,RL-MPC 残差策略仍带来稳定提升——三维 RMSE 在爬升 / 八字轨迹上分别提升 +7.4% / +8.2%,最大跟踪误差分别降低 +13.1% / +19.5%:
RL-MPC 相对 PID 的优势更为显著(平滑多航点场景):3D RMSE 0.275 m → 0.063 m(提升 77.1%),最大误差 1.369 m → 0.320 m(提升 76.7%)。
9.4 鲁棒性:风扰与参数摄动
- 风扰对比(
风扰对比分析/):5 类轨迹 × 0 / 1 / 2 / 4 m/s 四档风速,MPC 与 RL-MPC 全量数据(*_W0/W1/W2/W4.csv)及逐场景三维轨迹图; - 参数摄动(
整体参数摄动±0.05/):整机参数 ±5% 摄动下 MPC 与 PID 的对比,验证模型失配鲁棒性。
9.5 实验清单
| 实验目录 | 内容 |
|---|---|
PID分析不足 |
PID 在三类轨迹上的缺陷定量分析 |
对比分析(单点MPC-PID) / (多点MPC-PID) / (RLMPC-PID) |
三种控制器对 PID 的逐项指标对比 |
对比分析(单点MPC-多点MPC) |
预览机制的收益分析 |
对比分析(多点MPC-RLMPC) |
RL 残差的增量收益 |
…整体参数摄动±0.05 |
±5% 参数失配鲁棒性 |
风扰对比分析 |
0–4 m/s 风速鲁棒性 |
编队对比分析(多点MPC-单点MPC)安全降落 / 重新入队 |
编队机动对比 |
每组实验可通过目录内 run_comparison.jl / run_wind_robustness.jl 复现(依赖 Julia + 绘图库)。
10. 工程应用:三机协同输电线路巡检
Applications.CooperativeInspection 与 Examples.*_CooperativePowerLineInspection 实现了三机编队协同输电线路巡检的完整仿真:
- 四种控制器(PID / 单点 MPC / 多点 MPC / RL-MPC)均可作为单机飞控接入;
- 支持安全降落(单机失效后编队重组降落)与重新入队(失效机恢复后重新加入编队)两类典型编队机动;
- 配套编队对比分析(
编队对比分析…安全降落 / 重新入队)给出多点 MPC 与单点 MPC 在编队场景下的定量差异; - 巡检系统的完整设计(虚拟相机、无线图传、图像异常识别、任务监督器)详见《仿真分析报告》第 9 章。
11. 目录结构总览
QuadrotorModel/
├── package.mo # Modelica 主库(示例/路径/应用/机械/控制/电气/传感器/扰动)
├── package.order # 包加载顺序
├── 仿真分析报告.pdf # 设计文档:120 页完整设计与分析报告(见第 2 节)
├── MPC_Controller.mo # 多点 MPC 控制器(20 点预览,独立可复用块)
├── MPC_Controller_fixed.mo # 多点 MPC 修正版
├── One_MPC.mo # 单点 MPC 控制器
├── RLMPC_Controller.mo # RL-MPC 融合控制器(内嵌 PPO 残差策略权重)
├── Resources/
│ ├── Images/ # 无人机结构图、示意图
│ ├── Visualization/ # 三维可视化模型(STL/HSF/OBJ:机身/旋翼/机场)
│ ├── Python/ # vision_fault_detector.py(视觉故障检测)
│ └── C-Sources/
├── RL训练环境/ # 纯 Julia PPO 训练环境(与 Sysplorer 模型逐位等价)
│ ├── src/ # 环境核心(动力学/MPC基线/奖励/轨迹/接口/参数)
│ ├── scripts/ # 训练、评估、等价性验证脚本
│ ├── policies/ # 各 stage 策略检查点(policy_stageX_best.json)
│ ├── plots/ # 训练曲线与轨迹效果图
│ └── tools/ # 策略权重注入工具(inject_residual.py)及未注入基线备份
├── analysis/
│ ├── legacy_comparisons/ # 12 组对比实验(数据+脚本+报告+图表)
│ └── legacy_data/ # 历史导出数据
├── mw_mol/ # 随附依赖库(SysplorerEmbeddedCoder、TYUtility)
└── BitAnswer/ # 许可管理组件(MWORKS 授权)
12. 依赖与环境要求
| 组件 | 要求 |
|---|---|
| 建模仿真 | MWORKS 2026(Sysplorer + Syslab)≥ 26.3.0,Modelica 4.0.0.TY.1 |
| RL 训练 | MWORKS Syslab 或标准 Julia ≥ 1.10(纯标准库,无第三方依赖);出图需 TyPlot |
| 对比分析 | Julia + 数据/绘图库(各实验目录内 verify_env.jl 可自检环境) |
| 权重注入 | Python 3(RL训练环境/tools/inject_residual.py,将重训策略嵌入 RLMPC_Controller.mo) |
13. 注意事项
- 风扰对控制器不可知:
WindDisturbance只对机体施力、不产生测量信号,用于检验控制器的真实抗扰能力; - 等价性已验证:RL 训练环境经 Python 镜像与 Sysplorer 模型逐位闭环比对,训练所得策略可直接嵌入部署;
- 待辨识参数:反扭矩系数
k_yaw、电机滞后tau_motor等标注「【假设】」的参数建议通过实验辨识标定(注意电机滞后 >0.1 s 会使现有姿态 PID 内环失稳); - 许可:
BitAnswer/为 MWORKS 授权管理组件,请勿改动。
QuadrotorModel · 四旋翼无人机建模与控制仿真实验平台