MRobot/README.md
2026-02-21 01:33:19 +08:00

12 KiB
Raw Blame History

MRobot

MRobot Logo

更加高效快捷的机器人开发工具

诞生于 Robocon 和 Robomaster但绝不仅限于此

License Repo Size Last Commit Language PyQt STM32


📖 简介

提起嵌入式开发,大多数开发者都会感到每次繁琐的配置和查阅各种文档的枯燥。对于小型项目,创建优雅的架构又比较费时。有没有办法快速完成基础环境搭建后直接开始写逻辑代码呢?

这就是 MRobot —— 一个功能完善的机器人工程辅助平台,通过可视化界面简化嵌入式开发流程,帮助开发者高效管理代码、配置和资源,让开发更专注于核心逻辑。

核心优势

  • 🚀 快速开发: 自动化代码生成,从.ioc配置直接生成完整代码框架
  • 🎯 模块化设计: 清晰的分层架构,支持高度模块化和可扩展性
  • 🛡️ 用户代码保护: 智能识别并保留用户自定义代码区域
  • 🎨 现代化界面: 基于QFluentWidgets的现代化UI设计
  • 📦 丰富的组件库: 内置大量常用的BSP、组件、设备驱动和功能模块

🌟 主要特性

💻 代码生成系统

  • 智能配置解析: 自动解析STM32CubeMX的.ioc文件提取硬件配置信息
  • 模板驱动生成: 基于模板的代码生成机制,支持自定义模板
  • 依赖关系管理: 自动处理组件和设备之间的依赖关系
  • 用户代码保留: 使用/* USER ... BEGIN */ ... /* USER ... END */标记保护用户代码
  • 分层代码生成: 支持BSP→Component→Device→Module的完整代码生成流程

🎨 界面功能

  • 代码生成: 可视化配置界面,快速生成项目代码
  • 数据管理: 数据可视化和分析工具
  • 财务管理: 项目财务管理功能
  • AI辅助: 集成AI接口提供智能辅助
  • 机械设计: 零件库管理、批量导出等工具
  • 函数拟合: 数据拟合和分析工具
  • 小工具集合: 实用的小型工具集
  • 串口终端: 串口通信和调试工具
  • 零件库: 机械零件库管理

🔧 硬件支持

  • MCU系列: STM32F1、STM32F4、STM32H7系列
  • RTOS: FreeRTOS完整支持
  • 外设接口:
    • CAN/FDCAN 总线通信
    • UART/USART 串口通信
    • I2C/SPI 通信接口
    • GPIO 数字输入输出
    • PWM 脉宽调制输出
    • Flash 存储读写
    • DWT 高精度计时

📦 组件库

BSP层板级支持包

  • can: CAN/FDCAN总线驱动
  • gpio: GPIO驱动支持中断回调
  • uart: UART/USART驱动支持DMA和多种回调
  • i2c: I2C通信驱动
  • spi: SPI通信驱动
  • pwm: PWM输出驱动
  • dwt: DWT计时器
  • mm: 内存管理
  • time: 时间管理
  • flash: Flash读写驱动

Component层通用组件

  • pid: PID控制器支持多种模式
  • filter: 滤波器库
  • kalman_filter: 卡尔曼滤波
  • ahrs: 姿态解算算法
  • mixer: 混合控制器
  • limiter: 限幅器
  • capacity: 容量计算
  • crc8/crc16: 循环冗余校验
  • error_detect: 错误检测
  • cmd: 命令处理
  • freertos_cli: FreeRTOS命令行接口
  • ui: UI组件
  • user_math: 数学工具库

Device层设备驱动

  • 电机驱动:
    • motor_rm: RoboMaster电机M2006, M3508, GM6020
    • motor_dm: 大疆电机
    • motor_lk: 雷克电机
    • motor_lz: 雷智电机
    • motor_vesc: VESC电机
    • motor_odrive: ODrive电机
  • 传感器:
    • bmi088: BMI088 IMU
    • ist8310: IST8310磁力计
    • dm_imu: 大疆IMU
  • 通信:
    • dr16: DR16遥控器接收
    • rc_can: CAN遥控
    • vofa: VOFA+通信协议
  • 执行器:
    • servo: 舵机控制
    • buzzer: 蜂鸣器
    • led: LED灯控制
    • ws2812: WS2812灯带控制
  • 其他:
    • ops9: OPS9设备
    • oid: OID识别
    • lcd_driver: LCD显示驱动
    • mrobot: MRobot专用设备

Module层功能模块

  • config: 配置管理
  • cmd: 命令处理模块
  • gimbal: 云台控制模块
  • shoot: 发射机构控制模块

🏗️ 项目架构

系统架构图

MRobot
├── 应用层
│   ├── 主界面
│   ├── 代码生成界面
│   ├── 数据管理界面
│   ├── 财务管理界面
│   └── 工具集界面
├── 工具层
│   ├── 代码生成器
│   ├── IOC解析器
│   ├── 配置管理器
│   └── 更新管理器
├── 资源层
│   ├── 用户代码库
│   ├── 配置文件
│   └── 资源文件
└── 配置层
    └── 应用配置

用户代码架构

User_code/
├── BSP层 (板级支持包)
│   ├── 硬件抽象接口
│   └── 外设驱动
├── Component层 (通用组件)
│   ├── 算法库
│   └── 工具函数
├── Device层 (设备驱动)
│   ├── 传感器驱动
│   ├── 执行器驱动
│   └── 通信设备驱动
├── Module层 (功能模块)
│   ├── 业务逻辑
│   └── 功能集成
└── Task层 (任务模板)
    └── 任务框架

🚀 快速开始

环境要求

  • Python: 3.8 或更高版本
  • 操作系统: Windows / macOS / Linux
  • 依赖库:
    • PyQt6
    • QFluentWidgets
    • PyYAML
    • PyInstaller用于打包

安装步骤

  1. 克隆仓库
git clone https://github.com/goldenfishs/MRobot.git
cd MRobot
  1. 安装依赖
pip install -r requirements.txt
  1. 运行程序
python MRobot.py

构建可执行文件

使用PyInstaller将程序打包为单个可执行文件

pyinstaller MRobot.py --onefile --windowed --add-data "assets/logo;assets/logo" --add-data "app;app" --add-data "app/tools;app/tools"

构建完成后,可执行文件位于 `dist/MRobot.exe`。

---

## 📖 使用指南

### 代码生成流程

1. **准备.ioc文件**
   - 使用STM32CubeMX配置硬件
   - 保存.ioc文件到`assets/User_code/ioc/`目录

2. **配置代码生成**
   - 打开代码生成界面
   - 选择.ioc文件
   - 配置BSP、Component、Device、Module

3. **生成代码**
   - 点击生成按钮
   - 系统自动解析.ioc配置
   - 生成完整的代码框架

4. **导出代码**
   - 将生成的代码导出到目标项目
   - 开始编写业务逻辑

### 用户代码保护

在生成的代码中,使用以下标记来保护您的自定义代码:

```c
/* USER INCLUDE BEGIN */
// 您的自定义头文件
#include "my_custom_header.h"
/* USER INCLUDE END */

/* USER CODE BEGIN */
// 您的自定义代码
void my_custom_function(void) {
    // 您的代码逻辑
}
/* USER CODE END */

当重新生成代码时,这些区域内的内容将被保留。

配置文件说明

  • config.csv: 组件和设备配置列表
  • device/config.yaml: 设备详细配置
  • bsp/describe.csv: BSP描述信息
  • component/describe.csv: 组件描述信息
  • component/dependencies.csv: 组件依赖关系
  • module/describe.csv: 模块描述信息

🎯 应用案例

Robomaster

  • 全向轮步兵机器人
  • 英雄机器人
  • 哨兵机器人

Robocon

  • 各类竞赛机器人项目

其他应用

  • 教育机器人
  • 科研项目原型
  • 个人DIY项目

🔬 技术细节

代码生成原理

  1. 配置解析: analyzing_ioc.py解析.ioc文件提取硬件配置
  2. 模板处理: code_generator.py加载模板并执行替换
  3. 依赖处理: 根据依赖关系自动添加必要的文件
  4. 代码保护: 使用正则表达式识别并保留用户代码区域

支持的MCU系列

系列 示例型号 Flash RAM 特性
STM32F1 STM32F103C8T6 64KB 20KB Cortex-M3
STM32F4 STM32F407IGHx 1MB 192KB Cortex-M4, FPU
STM32H7 STM32H723VGT6 1MB 1MB Cortex-M7, 双精度FPU

外设配置示例

CAN配置

  • 支持标准CAN和FDCAN
  • 自动识别CAN总线和波特率
  • 支持多CAN总线管理

UART配置

  • 支持DMA传输
  • 多种回调类型(发送完成、接收完成、空闲检测等)
  • 自动处理中断向量表

GPIO配置

  • 支持输入、输出、外部中断模式
  • 自动生成中断回调函数
  • 支持多个GPIO实例

🛠️ 开发指南

添加新的BSP驱动

  1. assets/User_code/bsp/创建新目录
  2. 实现驱动代码(.c和.h文件
  3. bsp/describe.csv添加描述
  4. config.csv注册新BSP

添加新的组件

  1. assets/User_code/component/创建新目录
  2. 实现组件代码
  3. component/describe.csv添加描述
  4. component/dependencies.csv声明依赖
  5. config.csv注册新组件

添加新的设备驱动

  1. assets/User_code/device/创建新目录
  2. 实现设备驱动
  3. device/config.yaml添加配置
  4. config.csv注册新设备

自定义模板

  1. 创建模板文件,使用/* MARKER */标记替换位置
  2. 在代码生成器中注册模板路径
  3. 定义替换规则

📝 配置说明

应用配置

位于config/config.json:

{
    "QFluentWidgets": {
        "ThemeColor": "#fff18cb9",
        "ThemeMode": "Dark"
    }
}

IOC配置

将STM32CubeMX生成的.ioc文件放置在assets/User_code/ioc/目录。

设备配置

位于assets/User_code/device/config.yaml使用YAML格式定义设备参数。


🤝 贡献指南

我们欢迎任何形式的贡献!

如何贡献

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

贡献类型

  • 🐛 Bug修复
  • 新功能
  • 📝 文档改进
  • 🎨 代码优化
  • 性能提升
  • 测试用例

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。


🙏 致谢

  • PyQt6: 用于构建现代化GUI界面
  • QFluentWidgets: 提供现代化的UI组件
  • STM32CubeMX: 硬件配置工具
  • FreeRTOS: 实时操作系统
  • RoboMaster社区: 提供的技术支持和灵感

📮 联系方式


📊 项目统计

Code Style Version

Made with ❤️ by the MRobot Team

让机器人开发更简单、更高效