MATLAB/Simulink — 建模与控制开发平台¶
MATLAB/Simulink 是 RflySim 工具链中建模与底层控制算法开发的核心平台,支持基于模型的设计(MBD)流程,覆盖从模型搭建到自动代码生成再到固件部署的完整链路。
在 RflySim 中的角色¶
graph LR
A[Simulink 建模] --> B[控制器设计]
B --> C[离线仿真验证]
C --> D[自动代码生成 C/C++]
D --> E[编译并上传至 Pixhawk]
E --> F[HITL 硬件在环仿真]
F --> G[真机部署]
- 运动建模:在 Simulink 中搭建多旋翼 / 固定翼 / 无人车等动力学模型
- 控制器设计:使用模块化拖拽方式设计姿态/位置控制器
- 自动代码生成:将 Simulink 模型自动转换为 C/C++ 代码
- 固件自动部署:生成的控制器作为
px4_simulink_app模块加载到 PX4 中
推荐版本与工具箱¶
| 要求 | 说明 |
|---|---|
| MATLAB 版本 | R2022b 或更高版本 |
| Simulink | 必装核心组件 |
关键工具箱¶
| 工具箱 | 功能 |
|---|---|
| Aerospace Blockset/Toolbox | 飞行器运动建模、任务规划、环境分析 |
| MATLAB Coder | MATLAB 代码 → C/C++ 转换 |
| Simulink Coder | Simulink 模型 → C/C++ 代码生成 |
| Embedded Coder | 嵌入式代码优化与下载 |
| UAV Toolbox | 无人机控制器设计与任务规划 |
| ROS/ROS 2 Toolbox | ROS 通信接口 |
安装提示
在安装 MATLAB 时,请勾选 Simulink、Aerospace 及所有相关工具箱,以确保 RflySim 工具链的完整功能。
Simulink 工具箱¶
RflySim 内置了两套 Simulink 工具箱:
SimulinkPSP(Pixhawk Target Blocks)¶
由 Simulink 官方提供,面向 Pixhawk/PX4 自驾仪的底层控制算法开发:
| 子库 | 功能 |
|---|---|
| ADC and Serial | ADC 模数转换读取、串口读写 |
| Miscellaneous Utility Blocks | 日志存储、打印函数、QGC 参数传递 |
| Sensors and Actuators | 电池监控、遥控器指令、电机控制、LED、传感器数据 |
| uORB Read and Write | PX4 uORB 消息的读取和写入 |
RflySimPSP¶
由 RflySim 团队扩展开发的高层功能库:
| 子库 | 功能 |
|---|---|
| RflySim APIs | 底层控制进阶库:姿态/速度/位置/力矩读写接口 |
| RflySim Model | 运动模型库:建模模块 + 外部通信 + 三维模型通信 |
| RflySim PHM | 故障建模与健康评估:电池/风/载荷/GPS/电机/传感器故障注入 |
| RflySim Swarm | 集群控制库:多机状态获取、动捕数据订阅、MAVLink 编解码 |
| RflySim Vision | 视觉控制库:Simulink 内订阅视觉图像,实现视觉闭环 |
MATLAB 命令行接口¶
RflySim 提供了专用的 MATLAB 命令行接口:
| 命令 | 功能 |
|---|---|
PX4Upload |
将编译好的固件上传到 Pixhawk |
PX4CMD |
切换 PX4 固件版本 |
PX4SitlSet |
生成 SITL 模式固件 |
PX4AppName |
重命名控制器模块(支持多控制器) |
自动代码生成流程¶
- 在 Simulink 中设计控制器:使用 RflySimPSP/SimulinkPSP 模块搭建控制逻辑
- Simulink Coder 生成 C/C++ 代码:自动转换为嵌入式代码
- 构建为
px4_simulink_app:作为 PX4 独立模块 - 通过 uORB 消息总线通信:订阅传感器数据、发布控制指令
- 上传至 Pixhawk:使用
PX4Upload命令 - 接管执行器控制权:替代 PX4 原生控制模块
关于 uORB
uORB(Micro Object Request Broker)是 PX4 系统中用于数据传输的核心"发布-订阅"式消息总线,类似于 ROS 的中间件机制。所有的传感器数据、控制指令、中间状态都通过 uORB 消息在模块间传递。
相关例程¶
| 例程 | 路径 |
|---|---|
| Simulink 模型搭建 | RflySimAPIs\4.VehicleModeling\ |
| 控制器设计与代码生成 | RflySimAPIs\5.RflySimFlyCtrl\1.BasicExps\e5-AttitudeCtrl |
| 自动代码生成实验 | RflySimAPIs\2.RflySimUsage\1.BasicExps\ |