# Simba-OmniInfantry 电机配置与 CAN 通信地址总表 本文档汇总整车(云台主控板 + 底盘主控板)所有电机的硬件拨码、通信总线分配、CAN 报文帧头(StdId)、数据槽位(Byte 位)、控制模式与发包上下限。 --- ## 1. 整车物理通信拓扑 整车采用双主控板(云台板 + 底盘板)分布式架构,物理走线分为三组总线回路: ```mermaid graph TD subgraph 云台主控板 G_CAN1[云台 CAN1 独立总线] G_CAN2[云台 CAN2 总线] end subgraph 底盘主控板 C_CAN1[底盘 CAN1 独立总线] C_CAN2[底盘 CAN2 总线] end G_CAN1 --- M_FL[左摩擦轮 M3508] G_CAN1 --- M_FR[右摩擦轮 M3508] G_CAN1 --- M_PIT[Pitch 轴 GM6020] C_CAN1 --- W_RF[右前轮 RF M3508] C_CAN1 --- W_LF[左前轮 LF M3508] C_CAN1 --- W_LR[左后轮 LR M3508] C_CAN1 --- W_RR[右后轮 RR M3508] G_CAN2 ===|跨板双绞线互联| C_CAN2 G_CAN2 --- M_YAW[Yaw 轴 GM6020] G_CAN2 --- M_RAM[拨弹盘 M2006] G_CAN2 -.- C_TOC[CToC 板间通讯数据帧] ``` - **云台 CAN1(独立总线)**:摩擦轮(2×M3508)+ 俯仰 Pitch(GM6020 电流环); - **底盘 CAN1(独立总线)**:四轮麦克纳姆轮驱动(4×M3508); - **云台 CAN2 ⟷ 底盘 CAN2(跨板直连互联总线)**:偏航 Yaw(GM6020 电流环)+ 拨弹(M2006)+ 底盘/云台板间通讯(CToC)。 --- ## 2. 各物理总线电机配置明细表 ### 2.1 【云台 CAN1】发射与俯仰机构 | 机构名称 | 电机型号 | 电调/电机拨码 | 反馈 ID (Rx StdId) | 控制帧头 (Tx StdId) | 控制数据槽位 (Bytes) | 控制模式 | 发包上下限 (数值) | 物理对应量程 | 代码发送函数 | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- | | **左摩擦轮** | M3508 | **ID 1** | `0x201` | **`0x200`** | 槽 1 (`DATA[0..1]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `shoot_send_cmd()` | | **右摩擦轮** | M3508 | **ID 2** | `0x202` | **`0x200`** | 槽 2 (`DATA[2..3]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `shoot_send_cmd()` | | **Pitch 轴** | GM6020 | **ID 2** | `0x206` | **`0x1FE`** | 槽 2 (`DATA[2..3]`) | **电流环** | **`[-16384, 16384]`** | $\pm 3.0\,\text{A}$ | `gimbal_control()` | > **云台 CAN1 下发报文打包格式**: > - **`0x200` 帧**:`[左摩擦轮电流 (int16), 右摩擦轮电流 (int16), 0, 0]`(2ms 周期) > - **`0x1FE` 帧**:`[0, Pitch轴电流 (int16), 0, 0]`(2ms 周期) --- ### 2.2 【底盘 CAN1】四轮底盘行走机构 | 机构名称 | 电机型号 | 电调拨码 | 反馈 ID (Rx StdId) | 控制帧头 (Tx StdId) | 控制数据槽位 (Bytes) | 控制模式 | 发包上下限 (数值) | 物理对应量程 | 代码发送函数 | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- | | **右前轮 (RF)** | M3508 | **ID 1** | `0x201` | **`0x200`** | 槽 1 (`DATA[0..1]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` | | **左前轮 (LF)** | M3508 | **ID 2** | `0x202` | **`0x200`** | 槽 2 (`DATA[2..3]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` | | **左后轮 (LR)** | M3508 | **ID 3** | `0x203` | **`0x200`** | 槽 3 (`DATA[4..5]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` | | **右后轮 (RR)** | M3508 | **ID 4** | `0x204` | **`0x200`** | 槽 4 (`DATA[6..7]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` | > **底盘 CAN1 下发报文打包格式**: > - **`0x200` 帧**:`[RF轮电流 (int16), LF轮电流 (int16), LR轮电流 (int16), RR轮电流 (int16)]`(2ms 周期) --- ### 2.3 【云台 CAN2 ⟷ 底盘 CAN2】互联总线(偏航、拨弹与板间通信) 此总线为**跨板物理直连**,挂载了 2 台电机以及板间双向通讯帧。所有报文 ID 全局唯一、互不干扰: | 通信对象 / 机构 | 设备类型 | 硬件拨码 ID | 报文帧 ID (StdId) | 方向 / 槽位 | 控制量限幅 (数值) | 报文功能与用途说明 | | :--- | :---: | :---: | :---: | :---: | :---: | :--- | | **拨弹盘控制** | M2006 | **ID 1** | **`0x200`** | 云台下发 / 槽 1 (`DATA[0..1]`) | `[-10000, 10000]` | **拨弹电流**($\pm 10.0\,\text{A}$) | | **Yaw 轴控制** | GM6020 | **ID 1** | **`0x1FE`** | 云台下发 / 槽 1 (`DATA[0..1]`) | **`[-16384, 16384]`** | **Yaw 电流**($\pm 3.0\,\text{A}$) | | **拨弹盘反馈** | M2006 | ID 1 | **`0x201`** | 电机回传 → 云台板 | — | M2006 角度、转速、转矩反馈 | | **Yaw 轴反馈** | GM6020 | ID 1 | **`0x205`** | 电机回传 → 双板接收 | — | GM6020 角度反馈(云台闭环 + 底盘跟随) | | **底盘状态回传** | CToC 数据 | — | **`0x019`** | 底盘板 → 云台板 | — | 发射机构上电状态、底盘离线/故障位 | | **遥控摇杆数据** | CToC 数据 | — | **`0x149`** | 云台板 → 底盘板 | — | DR16 遥控器四路摇杆通道量 | | **控制状态信号** | CToC 数据 | — | **`0x189`** | 云台板 → 底盘板 | — | 遥控状态、小陀螺使能、云台故障位 | | **世界系姿态角** | CToC 数据 | — | **`0x1A9`** | 云台板 → 底盘板 | — | 云台世界系 yaw(float)供底盘双 INS 跟随 | > **互联总线零冲突机制**: > - **控制下发**:M2006 接收 `0x200` 槽 1;GM6020 接收 `0x1FE` 槽 1,电调/电机内部硬件过滤器各自接收,互不干扰; > - **反馈回传**:M2006 回传 `0x201`;GM6020 回传 `0x205`;CToC 回传 `0x019`,仲裁 ID 全网唯一。 --- ## 3. 电机硬件拨码与接线操作防错清单 | 电机机构名称 | 电机型号 | 物理接线接口 | 硬件拨码开关设定 | 对应反馈 ID | 调车注意事项 | | :--- | :---: | :---: | :---: | :---: | :--- | | **左摩擦轮** | M3508 (C620) | 云台板 **CAN1** | **ID 1** | `0x201` | 保持不变 | | **右摩擦轮** | M3508 (C620) | 云台板 **CAN1** | **ID 2** | `0x202` | 保持不变 | | **Pitch 轴** | GM6020 | 云台板 **CAN1** | **ID 2** | `0x206` | 保持不变 | | **Yaw 轴** | GM6020 | 云台板 **CAN2** | **ID 1** | `0x205` | 保持不变 | | **拨弹盘** | M2006 (C610) | 云台板 **CAN2** | **ID 1** | `0x201` | ⚠️ **需修改:拨码从 7 改为 1,插头换插到云台 CAN2** | | **底盘右前 (RF)** | M3508 (C620) | 底盘板 **CAN1** | **ID 1** | `0x201` | 保持不变 | | **底盘左前 (LF)** | M3508 (C620) | 底盘板 **CAN1** | **ID 2** | `0x202` | 保持不变 | | **底盘左后 (LR)** | M3508 (C620) | 底盘板 **CAN1** | **ID 3** | `0x203` | 保持不变 | | **底盘右后 (RR)** | M3508 (C620) | 底盘板 **CAN1** | **ID 4** | `0x204` | 保持不变 | --- ## 4. 大疆 DJI 电机 CAN 协议控制帧标准速查 ### 4.1 控制帧标识符(StdId)与数据槽位定义 | 控制标识符 (StdId) | 目标电机类型与编号 | 槽 1 (`DATA[0..1]`) | 槽 2 (`DATA[2..3]`) | 槽 3 (`DATA[4..5]`) | 槽 4 (`DATA[6..7]`) | 数据取值范围 | | :---: | :--- | :---: | :---: | :---: | :---: | :---: | | **`0x200`** | M3508 / M2006 (ID 1 ~ 4) | 电机 ID 1 | 电机 ID 2 | 电机 ID 3 | 电机 ID 4 | `[-16384, 16384]` (电流) | | **`0x1FF`** | M3508 / M2006 (ID 5 ~ 8) | 电机 ID 5 | 电机 ID 6 | 电机 ID 7 | 电机 ID 8 | `[-16384, 16384]` (电流) | | **`0x1FE`** | **GM6020 (ID 1 ~ 4) 电流控制** | **GM6020 ID 1** | **GM6020 ID 2** | **GM6020 ID 3** | **GM6020 ID 4** | **`[-16384, 16384]` (电流)** | | **`0x2FE`** | **GM6020 (ID 5 ~ 7) 电流控制** | **GM6020 ID 5** | **GM6020 ID 6** | **GM6020 ID 7** | 保留 | **`[-16384, 16384]` (电流)** | | *`0x1FF`* | *GM6020 (ID 1 ~ 4) 旧电压控制* | *GM6020 ID 1* | *GM6020 ID 2* | *GM6020 ID 3* | *GM6020 ID 4* | *`[-25000, 25000]` (电压)* | | *`0x2FF`* | *GM6020 (ID 5 ~ 7) 旧电压控制* | *GM6020 ID 5* | *GM6020 ID 6* | *GM6020 ID 7* | *保留* | *`[-25000, 25000]` (电压)* | ### 4.2 电机反馈报文格式(Rx 反馈,全电机统一 DLC = 8) ```text DATA[0..1] : 机械角度 raw_angle (uint16_t, 0 ~ 8191 对应 0 ~ 360°) DATA[2..3] : 转子转速 rotor_speed (int16_t, 单位 RPM) DATA[4..5] : 实际转矩 raw_torque (int16_t, 反馈转矩电流值) DATA[6] : 电机温度 temperature (uint8_t, 单位 ℃) DATA[7] : 保留字节 (NULL) ``` --- ## 5. 代码实现与参数映射对照 ### 5.1 参数配置文件:`robot_param.h` - 拨弹盘 CAN 反馈 ID: ```c #define GIMBAL_RAMMER_CAN_ID 0x201 // M2006 反馈 ID (CAN2 0x200 帧槽 1) ``` - Pitch 轴电流环限幅: ```c #define GIMBAL_PITCH_SPEED_OUT_LIMIT 16384.0f // GM6020 电流满量程 (±3A) ``` - Yaw 轴电流环限幅: ```c #define GIMBAL_YAW_SPEED_OUT_LIMIT 16384.0f // GM6020 电流满量程 (±3A) ```