129 lines
4.1 KiB
C
129 lines
4.1 KiB
C
/*
|
||
* @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 rad,24位有符号)
|
||
* 字节5-7:速度 (精度0.001 rad/s,24位有符号)
|
||
*/
|
||
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 |