#pragma once #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include "device/device.h" #include "device/motor.h" #include "component/ahrs.h" #include "bsp/can.h" /* Exported constants ------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ /* 电机反馈数据结构体 */ typedef struct { MOTOR_Feedback_t joint[4]; // 4个电机反馈数据 struct { DEVICE_Header_t header; // 设备通用头部 AHRS_Accl_t accl; // 加速度计数据 AHRS_Gyro_t gyro; // 陀螺仪数据 AHRS_Eulr_t euler; // 欧拉角数据 AHRS_Quaternion_t quat; // 四元数数据 } imu; } Virtual_Chassis_Feedback_t; typedef struct { float joint_torque[4]; // 4个电机目标力矩 } Virtual_Chassis_Output_t; /* 电机CAN参数结构体 */ typedef struct { BSP_CAN_t can; // 电机所在CAN总线 uint16_t Enable_id; // 电机使能命令CAN ID uint16_t MIT_id; // 电机力矩控制命令CAN ID uint16_t feedback_id; // 电机反馈数据CAN ID } Virtual_Chassis_MotorParam_t; /* IMU参数结构体 */ typedef struct { BSP_CAN_t can; // 电机所在CAN总线 uint16_t accl_id; // 加速度计数据CAN ID uint16_t gyro_id; // 陀螺仪数据CAN ID uint16_t euler_id; // 欧拉角数据CAN ID uint16_t quat_id; // 四元数数据CAN ID } Virtual_Chassis_IMUParam_t; /* 虚拟底盘参数配置结构体 */ typedef struct { Virtual_Chassis_MotorParam_t motors; // 4个电机CAN参数 Virtual_Chassis_IMUParam_t imu; // IMU CAN参数 } Virtual_Chassis_Param_t; /* 虚拟底盘设备结构体 */ typedef struct { DEVICE_Header_t header; // 设备通用头部 Virtual_Chassis_Param_t param; // 参数配置 Virtual_Chassis_Feedback_t data; // 反馈数据 Virtual_Chassis_Output_t output; // 控制输出 } Virtual_Chassis_t; /* Exported functions prototypes -------------------------------------------- */ /** * @brief 初始化虚拟底盘设备 * @param chassis 虚拟底盘设备结构体指针 * @param param 虚拟底盘参数配置指针 * @return DEVICE_OK 成功,其他值失败 */ int8_t Virtual_Chassis_Init(Virtual_Chassis_t *chassis, Virtual_Chassis_Param_t *param); /** * @brief 更新虚拟底盘数据(包括电机和IMU数据) * @param chassis 虚拟底盘设备结构体指针 * @return DEVICE_OK 成功,其他值失败 */ int8_t Virtual_Chassis_Update(Virtual_Chassis_t *chassis); /** * @brief 发送电机使能命令 * @param chassis 虚拟底盘设备结构体指针 * @return DEVICE_OK 成功,其他值失败 */ int8_t Virtual_Chassis_Enable(Virtual_Chassis_t *chassis); /** * @brief 使能电机并发送命令 * @param chassis 虚拟底盘设备结构体指针 * @return DEVICE_OK 成功,其他值失败 */ int8_t Virtual_Chassis_Enable(Virtual_Chassis_t *chassis); /** * @brief 检查虚拟底盘是否在线 * @param chassis 虚拟底盘设备结构体指针 * @return true 在线,false 离线 */ bool Virtual_Chassis_IsOnline(Virtual_Chassis_t *chassis); #ifdef __cplusplus } #endif