diff --git a/.gitignore b/.gitignore index 09c221c..a43e970 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,11 @@ MDK-ARM/RM-2026-Classis/ # ============================ .mxproject +# ============================ +# 废弃文件 +# ============================ +readme.txt + # ============================ # VS Code # ============================ diff --git a/A-Driver/BMI088Middleware.c b/00-Driver/BMI088Middleware.c similarity index 100% rename from A-Driver/BMI088Middleware.c rename to 00-Driver/BMI088Middleware.c diff --git a/A-Driver/BMI088Middleware.h b/00-Driver/BMI088Middleware.h similarity index 100% rename from A-Driver/BMI088Middleware.h rename to 00-Driver/BMI088Middleware.h diff --git a/A-Driver/BMI088driver.c b/00-Driver/BMI088driver.c similarity index 100% rename from A-Driver/BMI088driver.c rename to 00-Driver/BMI088driver.c diff --git a/A-Driver/BMI088driver.h b/00-Driver/BMI088driver.h similarity index 100% rename from A-Driver/BMI088driver.h rename to 00-Driver/BMI088driver.h diff --git a/A-Driver/BMI088reg.h b/00-Driver/BMI088reg.h similarity index 100% rename from A-Driver/BMI088reg.h rename to 00-Driver/BMI088reg.h diff --git a/A-Driver/BSP_CAN.c b/00-Driver/BSP_CAN.c similarity index 100% rename from A-Driver/BSP_CAN.c rename to 00-Driver/BSP_CAN.c diff --git a/A-Driver/BSP_CAN.h b/00-Driver/BSP_CAN.h similarity index 100% rename from A-Driver/BSP_CAN.h rename to 00-Driver/BSP_CAN.h diff --git a/A-Driver/BSP_USART.c b/00-Driver/BSP_USART.c similarity index 100% rename from A-Driver/BSP_USART.c rename to 00-Driver/BSP_USART.c diff --git a/A-Driver/BSP_USART.h b/00-Driver/BSP_USART.h similarity index 100% rename from A-Driver/BSP_USART.h rename to 00-Driver/BSP_USART.h diff --git a/A-Driver/Parameter.h b/00-Driver/Parameter.h similarity index 100% rename from A-Driver/Parameter.h rename to 00-Driver/Parameter.h diff --git a/A-DEvice/BMI088.c b/01-Device/BMI088.c similarity index 100% rename from A-DEvice/BMI088.c rename to 01-Device/BMI088.c diff --git a/A-DEvice/BMI088.h b/01-Device/BMI088.h similarity index 100% rename from A-DEvice/BMI088.h rename to 01-Device/BMI088.h diff --git a/A-DEvice/Motor.c b/01-Device/Motor.c similarity index 100% rename from A-DEvice/Motor.c rename to 01-Device/Motor.c diff --git a/A-DEvice/Motor.h b/01-Device/Motor.h similarity index 100% rename from A-DEvice/Motor.h rename to 01-Device/Motor.h diff --git a/A-DEvice/Remote.c b/01-Device/Remote.c similarity index 100% rename from A-DEvice/Remote.c rename to 01-Device/Remote.c diff --git a/A-DEvice/Remote.h b/01-Device/Remote.h similarity index 100% rename from A-DEvice/Remote.h rename to 01-Device/Remote.h diff --git a/A-APPlication/Chassis_CtoC.c b/02-Application/Chassis_CtoC.c similarity index 100% rename from A-APPlication/Chassis_CtoC.c rename to 02-Application/Chassis_CtoC.c diff --git a/A-APPlication/Chassis_CtoC.h b/02-Application/Chassis_CtoC.h similarity index 100% rename from A-APPlication/Chassis_CtoC.h rename to 02-Application/Chassis_CtoC.h diff --git a/A-APPlication/Chassis_Yaw_Big.c b/02-Application/Chassis_Yaw_Big.c similarity index 100% rename from A-APPlication/Chassis_Yaw_Big.c rename to 02-Application/Chassis_Yaw_Big.c diff --git a/A-APPlication/Chassis_Yaw_Big.h b/02-Application/Chassis_Yaw_Big.h similarity index 100% rename from A-APPlication/Chassis_Yaw_Big.h rename to 02-Application/Chassis_Yaw_Big.h diff --git a/A-APPlication/Classis_Wheels.c b/02-Application/Classis_Wheels.c similarity index 100% rename from A-APPlication/Classis_Wheels.c rename to 02-Application/Classis_Wheels.c diff --git a/A-APPlication/Classis_Wheels.h b/02-Application/Classis_Wheels.h similarity index 100% rename from A-APPlication/Classis_Wheels.h rename to 02-Application/Classis_Wheels.h diff --git a/A-APPlication/PID.c b/02-Application/PID.c similarity index 100% rename from A-APPlication/PID.c rename to 02-Application/PID.c diff --git a/A-APPlication/PID.h b/02-Application/PID.h similarity index 100% rename from A-APPlication/PID.h rename to 02-Application/PID.h diff --git a/MDK-ARM/RM-2026-Classis.uvprojx b/MDK-ARM/RM-2026-Classis.uvprojx index 86af01b..302ffb5 100644 --- a/MDK-ARM/RM-2026-Classis.uvprojx +++ b/MDK-ARM/RM-2026-Classis.uvprojx @@ -340,7 +340,7 @@ USE_HAL_DRIVER,STM32F407xx - ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../A-Driver;../A-DEvice;../A-APPlication + ../Core/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc;../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F4xx/Include;../Drivers/CMSIS/Include;../00-Driver;../01-Device;../02-Application @@ -1174,52 +1174,52 @@ BSP_USART.c 1 - ..\A-Driver\BSP_USART.c + ..\00-Driver\BSP_USART.c BSP_USART.h 5 - ..\A-Driver\BSP_USART.h + ..\00-Driver\BSP_USART.h BSP_CAN.c 1 - ..\A-Driver\BSP_CAN.c + ..\00-Driver\BSP_CAN.c BSP_CAN.h 5 - ..\A-Driver\BSP_CAN.h + ..\00-Driver\BSP_CAN.h Parameter.h 5 - ..\A-Driver\Parameter.h + ..\00-Driver\Parameter.h BMI088Middleware.c 1 - ..\A-Driver\BMI088Middleware.c + ..\00-Driver\BMI088Middleware.c BMI088Middleware.h 5 - ..\A-Driver\BMI088Middleware.h + ..\00-Driver\BMI088Middleware.h BMI088reg.h 5 - ..\A-Driver\BMI088reg.h + ..\00-Driver\BMI088reg.h BMI088driver.c 1 - ..\A-Driver\BMI088driver.c + ..\00-Driver\BMI088driver.c BMI088driver.h 5 - ..\A-Driver\BMI088driver.h + ..\00-Driver\BMI088driver.h @@ -1229,32 +1229,32 @@ Remote.c 1 - ..\A-DEvice\Remote.c + ..\01-Device\Remote.c Remote.h 5 - ..\A-DEvice\Remote.h + ..\01-Device\Remote.h Motor.c 1 - ..\A-DEvice\Motor.c + ..\01-Device\Motor.c Motor.h 5 - ..\A-DEvice\Motor.h + ..\01-Device\Motor.h BMI088.c 1 - ..\A-DEvice\BMI088.c + ..\01-Device\BMI088.c BMI088.h 5 - ..\A-DEvice\BMI088.h + ..\01-Device\BMI088.h @@ -1264,42 +1264,42 @@ PID.c 1 - ..\A-APPlication\PID.c + ..\02-Application\PID.c PID.h 5 - ..\A-APPlication\PID.h + ..\02-Application\PID.h Classis_Wheels.c 1 - ..\A-APPlication\Classis_Wheels.c + ..\02-Application\Classis_Wheels.c Classis_Wheels.h 5 - ..\A-APPlication\Classis_Wheels.h + ..\02-Application\Classis_Wheels.h Chassis_Yaw_Big.c 1 - ..\A-APPlication\Chassis_Yaw_Big.c + ..\02-Application\Chassis_Yaw_Big.c Chassis_Yaw_Big.h 5 - ..\A-APPlication\Chassis_Yaw_Big.h + ..\02-Application\Chassis_Yaw_Big.h Chassis_CtoC.c 1 - ..\A-APPlication\Chassis_CtoC.c + ..\02-Application\Chassis_CtoC.c Chassis_CtoC.h 5 - ..\A-APPlication\Chassis_CtoC.h + ..\02-Application\Chassis_CtoC.h diff --git a/readme.md b/readme.md index 810571e..b6971da 100644 --- a/readme.md +++ b/readme.md @@ -1,30 +1,114 @@ -@2026.1.23 +# RM-2026-Chassis -新建本工程,分成三个层级:Driver、Device、APPlication。 +RoboMaster 2026 赛季底盘控制固件,基于 STM32F407IGHx + Keil MDK 开发。 -其中: +## 项目概述 -Driver最底层,只实现“怎么做”,不关心“做什么”; +本项目为 RoboMaster 步兵/英雄机器人底盘控制器固件,支持麦克纳姆轮全向移动、多电机协同控制、遥控器/键鼠操控及 IMU 姿态反馈。 -Device中间层,依赖hardware,绑定到具体硬件; +| 项目信息 | 内容 | +|---------|------| +| MCU | STM32F407IGHx | +| 开发环境 | Keil MDK-ARM (UV5) | +| HAL 库 | STM32CubeF4 HAL | +| 遥控器 | DJI DT7 (SBUS 协议) | +| 电机 | DJI M3508 × 4 (底盘驱动) | +| IMU | BMI088 (加速度计 + 陀螺仪) | +| 通信 | CAN1 / CAN2 | -Application层,专注功能实现,不关心硬件。 +## 代码架构 -工作小结: +采用三层架构设计,职责分离: -弄完了底盘板子的轮子驱动代码,明天结合pid和遥控器实现基本运动控制 +``` +00-Driver/ // 底层驱动 —— "怎么做",不关心业务逻辑 +├── BSP_CAN.c/h CAN 总线底层封装 +├── BSP_USART.c/h 串口底层封装 +├── BMI088driver.c/h BMI088 寄存器级驱动 +└── Parameter.h 全局参数/宏定义 -@2026.1.24 +01-Device/ // 设备层 —— 绑定具体硬件,抽象硬件接口 +├── Motor.c/h DJI 电机 (M3508/GM6020/M2006) 管理与 CAN 数据解析 +├── Remote.c/h DT7 遥控器 SBUS 数据接收与解析 +└── BMI088.c/h BMI088 姿态数据处理与 CAN 转发 -写完了初步的麦轮转向移动逻辑,能用遥控器控制 +02-Application/ // 应用层 —— "做什么",专注功能与算法 +├── Classis_Wheels.c/h 麦轮底盘运动学解算与速度控制 +├── Chassis_CtoC.c/h 遥控器/键鼠数据映射与 CAN 转发 (Chassis to Chassis) +├── Chassis_Yaw_Big.c/h 底盘Yaw控制 (预留) +└── PID.c/h 位置式 / 增量式 PID 控制器 +``` -@2026.1.25 +### 架构原则 -1、加入了看门狗!非常重要,用于遥控器连接检测!**后面要加入软硬件结合的限功率**! +- **Driver 层**:仅实现硬件操作的“怎么做”,如寄存器读写、时序控制、总线收发。 +- **Device 层**:依赖 HAL/Driver,将硬件原始数据封装为可直接使用的设备状态(电机转速、遥控器通道值、IMU 姿态角)。 +- **Application 层**:专注功能算法与业务逻辑,完全不关心底层硬件细节。 -2、can线设备id有所变动 +## 硬件连接 -@2026.2.6 +| 功能模块 | 接口 | 说明 | +|---------|------|------| +| 底盘电机 (M3508 × 4) | CAN1 | ID: 0x201 ~ 0x204 | +| BMI088 | CAN2 | 姿态数据回传 | +| DT7 遥控器 | USART1 | SBUS 协议,100 Hz | +| 看门狗 (IWDG) | 内部 | 用于遥控器断连保护 | -1.简单保存一下,较为完善的代码 +## 核心功能 +### 1. 麦克纳姆轮运动控制 (`Classis_Wheels`) + +- 支持遥控器摇杆控制底盘前后、左右、旋转运动 +- 麦轮速度解算,输出到四个 M3508 电机 +- 基于增量式 PID 的闭环速度控制 + +### 2. 遥控器/键鼠输入 (`Remote` / `Chassis_CtoC`) + +- DT7 遥控器 SBUS 信号解析(16 通道 + 拨杆 + 鼠标 + 键盘) +- 支持键鼠操控模式(WASD 移动、鼠标控制) +- 将控制指令通过 CAN 转发给底盘各模块 + +### 3. 电机驱动 (`Motor`) + +- 支持 DJI M3508 / GM6020 / M2006 三种电机 +- 自动编码器圈数累加、角度/转速/电流换算 +- 标准 CAN 帧发送电流/电压控制指令 + +### 4. PID 控制器 (`PID`) + +- 位置式 PID:适用于角度/位置控制 +- 增量式 PID:适用于速度/电流控制 +- 支持输出限幅、误差死区、积分清零 + +### 5. IMU 姿态 (`BMI088`) + +- 读取加速度、陀螺仪原始数据 +- 计算 Yaw / Pitch / Roll 姿态角 +- 通过 CAN 转发给云台或上位机 + +## 开发日志 + +| 日期 | 内容 | +|------|------| +| 2026.01.23 | 新建工程,确立三层架构;完成底盘轮子驱动代码 | +| 2026.01.24 | 实现麦轮转向移动逻辑,接入遥控器控制 | +| 2026.01.25 | 加入独立看门狗 (IWDG) 用于遥控器断连检测;调整 CAN 设备 ID | +| 2026.02.06 | 代码阶段性整理,基础功能趋于完善 | + +## 编译与烧录 + +1. 使用 Keil MDK 打开 `MDK-ARM/RM-2026-Classis.uvprojx` +2. 确认 Debug 配置为 ST-Link / J-Link +3. 点击 **Build** 编译,**Download** 烧录 + +> 注意:`.uvguix.*` 和 `.uvoptx` 为用户本地配置文件,已加入 `.gitignore`,无需提交。 + +## 注意事项 + +- 看门狗用于检测遥控器连接状态,若遥控器断连将触发复位,**后续需加入软硬件结合的功率限制** +- CAN 总线终端电阻需根据实际布线确认 +- 电机 ID 与 `Motor.h` 中的枚举定义保持一致 + +## 许可证 + +本项目为 Simba Robotics 内部开发,仅供 RoboMaster 2026 赛季使用。 diff --git a/readme.txt b/readme.txt deleted file mode 100644 index 5d95654..0000000 --- a/readme.txt +++ /dev/null @@ -1,10 +0,0 @@ -2026.1.23 -新建本工程,分成三个层级:Driver、Device、APPlication。 -其中: -Driver最底层,只实现“怎么做”,不关心“做什么”; -Device中间层,依赖hardware,绑定到具体硬件; -Application层,专注功能实现,不关心硬件。 -工作小结: -弄完了底盘板子的轮子驱动代码,明天结合pid和遥控器实现基本运动控制 -2026.1.24 -写完了初步的麦轮转向移动逻辑,能用遥控器控制 \ No newline at end of file