# 工程机械臂与底盘
**Repository Path**: ibst/engineering-robotic-arm
## Basic Information
- **Project Name**: 工程机械臂与底盘
- **Description**: 工程机械臂工程+底盘工程SDK,通过双层CAN总线通信,本项目论文已被第38届中国控制与决策会议 (CCDC 2026) 接收
- **Primary Language**: Unknown
- **License**: MIT-0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2025-09-27
- **Last Updated**: 2026-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 机械臂, RoboMaster, 麦克纳姆轮, 机器人, stm32
## README
工程机器臂+底盘 机器人SDK
🏆 本项目论文已被第38届中国控制与决策会议 (CCDC 2026) 接收
[](https://www.keil.com/)
[]()
[]()
[]()
[](https://opensource.org/licenses/GPL-3.0)
## 1. 项目简介
本项目是专门针对 RoboMaster 赛场工程机器人 开发的底层固件。不同于竞速型兵种,工程机器人强调重载控制的稳定性与多关节协同的精准度。
系统深度集成了达妙 (DM) 电机 MIT 控制协议、三轴机械臂逆运动学 (Inverse Kinematics) 以及基于电流反馈的吸盘自动初始化逻辑,旨在提供一套从感知到执行的完整闭环方案。
---
## 2. 核心算法与模块详解
### 2.1 机械臂逆运动学引擎 (`arm.c` / `joint.c`)
* **坐标系控制**:通过几何法实现 3-DoF 机械臂逆解。用户只需通过遥控器下发笛卡尔坐标系的增量 $(dX, dY, dZ)$,系统自动解算各关节目标角度 $\theta$。
* **计算逻辑**:
* 通过 $atan2f(Y, X)$ 确定基座偏航角。
* 利用余弦定理通过 $L_1, L_2$ 臂长及目标点距离,解算大臂与小臂的俯仰角。
* **安全限位**:内置 `BACKARM_LIM` 与 `FOREARM_LIM` 软限位,防止机械臂自激或发生机械碰撞。
### 2.2 混合动力驱动层 (`dm_motor.c` / `rm_motor.c`)
* **达妙 MIT 模式**:驱动主关节电机。支持下发位置、速度以及力矩增益 $K_p, K_d$。该模式提供了极高的控制带宽,能让机械臂在抓取瞬间表现出类似“弹簧”的柔性阻尼。
* **大疆 PID 控制**:驱动底盘与末端执行器。采用位置-速度双环 PID,确保底盘平移的稳健性。
### 2.3 智能末端吸盘 (`sucker.c`)
* **电流辅助寻位**:系统通过实时监测 `M3508` 电机的反馈电流(阈值 6500mA)。当吸盘触碰机构边界时,电流瞬间激增,系统自动触发 `sucker_init_flag` 并记录物理零点。
* **自动化归位**:一键完成 Roll 与 Pitch 轴的校准。
### 2.4 全向底盘解算 (`omni_wheel_cal.c`)
* **运动学模型**:支持 4 轮全向轮布局。通过 `Robot_Velocity_To_Wheel_Speed` 函数将三自由度速度 $(V_x, V_y, V_w)$ 映射至轮组转速。
* **坐标系切换**:支持通过 `World_To_Self` 将世界坐标系下的指令转化为机身坐标系指令,配合 IMU 实现全场定向。
---
## 3. 软件架构设计
项目采用**分层解耦架构**,大幅提升了代码的可维护性:
| 层级 | 涉及文件 | 职能描述 |
| :--- | :--- | :--- |
| **应用层 (App)** | `joint.c`, `sucker.c`, `interface.c` | 管理业务流程、状态机切换、遥控器逻辑映射。 |
| **算法层 (Alg)** | `arm.c`, `omni_wheel_cal.c`, `pid.c` | 处理高密度的数学运算,如逆解、坐标转换、PID 闭环。 |
| **驱动层 (Drv)** | `dm_motor.c`, `rm_motor.c`, `bmi088.c` | CAN 帧封装、SPI 传感器通讯协议解析。 |
| **硬件层 (BSP)** | `bsp_can.c`, `bsp_tim.c`, `dbus.c` | 底层硬件外设配置、中断服务函数维护。 |
---
## 4. 硬件参数规范
| 模块 | 硬件型号 | 挂载总线 | ID 范围 |
| :--- | :--- | :--- | :--- |
| **主控板** | STM32F407IGHx | - | RoboMaster C型主控 |
| **关节电机** | 达妙 DM4340 | CAN1 | 0x04, 0x05, 0x06 |
| **底盘电机** | 大疆 M3508 | CAN2 | 0x201 - 0x204 |
| **吸盘电机** | 大疆 M3508/2006 | CAN1 | 0x201, 0x202 |
| **传感器** | 博世 BMI088 | SPI1 | - |
---
## 5. 操作与调试手册
### 5.1 编译建议
* **环境**:Keil uVision 5.3x。
* **编译器**:建议使用 **ARM Compiler V6** 以获得最佳浮点运算效率。
* **注意**:必须在项目中开启 `FPU` 硬件支持,否则 `arm.c` 中的三角函数运算会导致 CPU 溢出。
### 5.2 状态切换 (遥控器 S1)
1. **位置 1 (UP)**:安全模式,电机无输出。
2. **位置 2 (MID)**:**机械臂调试模式**。通过右摇杆控制末端 $(X, Z)$ 坐标。此时吸盘执行自检逻辑。
3. **位置 3 (DOWN)**:**底盘交互模式**。通过左摇杆控制底盘全向平移。
### 5.3 故障排查
* **电机保护**:若电机反馈电流持续超过限值,系统会自动降低输出力矩以保护齿轮箱。
* **通讯掉线**:检查 `bsp_can.c` 中的 `filter` 配置。若 CAN2 无数据,确认 ID 掩码是否匹配。
---
## 6. 联系方式







