rm_balance/virtual_chassis_protocol.h
2025-10-05 12:04:46 +08:00

129 lines
4.1 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @file virtual_chassis_protocol.h
* @brief 虚拟底盘通信协议定义
* @details 定义虚拟底盘与平衡底盘模块的CAN通信协议
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/* CAN通信协议定义 --------------------------------------------------------- */
/**
* 控制命令CAN ID定义控制端→底盘端
*/
#define VIRTUAL_CHASSIS_CAN_CMD_ENABLE 121 // 关节电机使能命令
#define VIRTUAL_CHASSIS_CAN_CMD_JOINT 122 // 关节力矩控制命令
#define VIRTUAL_CHASSIS_CAN_CMD_WHEEL_LEFT 128 // 左轮控制命令
#define VIRTUAL_CHASSIS_CAN_CMD_WHEEL_RIGHT 129 // 右轮控制命令
/**
* 反馈数据CAN ID定义底盘端→控制端
*/
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_JOINT_0 124 // 关节电机0反馈
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_JOINT_1 125 // 关节电机1反馈
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_JOINT_2 126 // 关节电机2反馈
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_JOINT_3 127 // 关节电机3反馈
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_WHEEL_LEFT 130 // 左轮电机反馈
#define VIRTUAL_CHASSIS_CAN_FEEDBACK_WHEEL_RIGHT 131 // 右轮电机反馈
/**
* IMU数据CAN ID定义底盘端→控制端
*/
#define VIRTUAL_CHASSIS_CAN_IMU_ACCL 0x301 // 加速度计数据 (769)
#define VIRTUAL_CHASSIS_CAN_IMU_GYRO 0x302 // 陀螺仪数据 (770)
#define VIRTUAL_CHASSIS_CAN_IMU_EULER 0x303 // 欧拉角数据 (771)
#define VIRTUAL_CHASSIS_CAN_IMU_QUAT 0x304 // 四元数数据 (772)
/* 数据格式定义 ----------------------------------------------------------- */
/**
* 关节电机控制命令数据格式 (ID: 122)
* 数据长度8字节
* 格式4个电机的力矩值每个电机2字节有符号整数
* 精度0.01 Nm
* 范围:-327.68 ~ +327.67 Nm
*/
typedef struct {
int16_t joint_torque[4]; // 关节电机目标力矩 * 100
} Virtual_Chassis_JointCommand_t;
/**
* 关节电机反馈数据格式 (ID: 124-127)
* 数据长度8字节
* 字节0-1转矩电流 (精度0.01 Nm)
* 字节2-4位置 (精度0.0001 rad24位有符号)
* 字节5-7速度 (精度0.001 rad/s24位有符号)
*/
typedef struct {
int16_t torque_current; // 转矩电流 * 100
int32_t position; // 位置 * 10000 (仅使用低24位)
int32_t velocity; // 速度 * 1000 (仅使用低24位)
} Virtual_Chassis_JointFeedback_t;
/**
* 轮子电机反馈数据格式 (ID: 130-131)
* 数据长度8字节
* 字节0-1角度 (精度0.01度)
* 字节2-3速度 (精度1dps)
* 字节4-5力矩电流
* 字节6-7编码器值
*/
typedef struct {
int16_t angle_deg; // 角度 * 100 (度)
int16_t velocity_dps; // 速度 (度/秒)
int16_t torque_current; // 力矩电流
uint16_t encoder; // 编码器值
} Virtual_Chassis_WheelFeedback_t;
/**
* 加速度计数据格式 (ID: 0x301)
* 数据长度6字节
* 精度0.01g
*/
typedef struct {
int16_t x; // X轴加速度 * 100
int16_t y; // Y轴加速度 * 100
int16_t z; // Z轴加速度 * 100
} Virtual_Chassis_AcclData_t;
/**
* 陀螺仪数据格式 (ID: 0x302)
* 数据长度6字节
* 精度0.01°/s
*/
typedef struct {
int16_t x; // X轴角速度 * 100 (°/s)
int16_t y; // Y轴角速度 * 100 (°/s)
int16_t z; // Z轴角速度 * 100 (°/s)
} Virtual_Chassis_GyroData_t;
/**
* 欧拉角数据格式 (ID: 0x303)
* 数据长度6字节
* 精度0.01°
*/
typedef struct {
int16_t yaw; // 偏航角 * 100 (°)
int16_t pitch; // 俯仰角 * 100 (°)
int16_t roll; // 横滚角 * 100 (°)
} Virtual_Chassis_EulerData_t;
/**
* 四元数数据格式 (ID: 0x304)
* 数据长度8字节
* 精度1/32000
*/
typedef struct {
int16_t q0; // q0 * 32000
int16_t q1; // q1 * 32000
int16_t q2; // q2 * 32000
int16_t q3; // q3 * 32000
} Virtual_Chassis_QuatData_t;
#ifdef __cplusplus
}
#endif