/* 视觉与电控通信协议 */ #pragma once #include #include #ifdef __cplusplus extern "C" { #endif #define NUC_HEAD (0xFF) #define NUC_END (0xFE) #define NUC_ID (0x09) #define NUC_CTRL (0x01) #define IMU_ID (0x01) #define CMD_ID (0x02) /* 电控 -> 视觉 IMU数据结构体*/ typedef struct __attribute__((packed)) { struct __attribute__((packed)) { float x; float y; float z; } gyro; /* 陀螺仪数据 */ struct __attribute__((packed)) { float x; float y; float z; } accl; /* 四元数 */ struct __attribute__((packed)) { float q0; float q1; float q2; float q3; } quat; /* 四元数 */ } Protocol_UpDataIMU_t; /* 电控 -> 视觉 控制数据结构体*/ typedef struct __attribute__((packed)) { int8_t cmd; /* 控制命令 */ } Protocol_UpDataCMD_t; /* 视觉 -> 电控 数据结构体*/ typedef struct __attribute__((packed)) { struct __attribute__((packed)) { float vx; /* x轴移动速度 */ float vy; /* y轴移动速度 */ float wz; /* z轴转动速度 */ } chassis_move_vec; /* 底盘移动向量 */ float distance; /* 距离(单位:米) */ float angle; /* 角度(单位:弧度) */ bool notice; /* 控制命令 */ } Protocol_DownData_t; typedef struct __attribute__((packed)) { uint8_t head; uint8_t id; /* 数据包ID */ uint8_t ctrl; /* 控制字 */ Protocol_UpDataIMU_t data; uint8_t end; /* 数据包结束符 */ } Protocol_UpPackageIMU_t; typedef struct __attribute__((packed)) { uint8_t head; uint8_t id; uint8_t ctrl; Protocol_UpDataCMD_t data; uint8_t end; } Protocol_UpPackageCMD_t; typedef struct __attribute__((packed)) { Protocol_DownData_t data; uint16_t crc16; } Protocol_DownPackage_t; #ifdef __cplusplus } #endif