/* * Gimbal IMU Device - 接收来自云台的CAN IMU数据 */ #pragma once #include #ifdef __cplusplus extern "C" { #endif /* Includes ----------------------------------------------------------------- */ #include #include #include "bsp/can.h" #include "component/ahrs.h" #include "device/device.h" /* Exported constants ------------------------------------------------------- */ /* 数据范围定义(与发送端保持一致) */ #define GIMBAL_IMU_ACCEL_MAX (58.8f) #define GIMBAL_IMU_ACCEL_MIN (-58.8f) #define GIMBAL_IMU_GYRO_MAX (34.88f) #define GIMBAL_IMU_GYRO_MIN (-34.88f) #define GIMBAL_IMU_PITCH_MAX (90.0f) #define GIMBAL_IMU_PITCH_MIN (-90.0f) #define GIMBAL_IMU_ROLL_MAX (180.0f) #define GIMBAL_IMU_ROLL_MIN (-180.0f) #define GIMBAL_IMU_YAW_MAX (180.0f) #define GIMBAL_IMU_YAW_MIN (-180.0f) #define GIMBAL_IMU_QUAT_MIN (-1.0f) #define GIMBAL_IMU_QUAT_MAX (1.0f) /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ /* Gimbal IMU参数配置 */ typedef struct { BSP_CAN_t can; /* 使用的CAN总线 */ uint16_t accl_id; uint16_t gyro_id; uint16_t eulr_id; uint16_t quat_id; } GIMBAL_IMU_Param_t; typedef struct { AHRS_Accl_t accl; /* 加速度计数据 */ AHRS_Gyro_t gyro; /* 陀螺仪数据 */ AHRS_Eulr_t eulr; /* 欧拉角数据 */ AHRS_Quaternion_t quat; /* 四元数数据 */ float temp; /* 温度数据 (摄氏度) */ } GIMBAL_IMU_Data_t; /* Gimbal IMU完整数据结构 */ typedef struct { DEVICE_Header_t header; GIMBAL_IMU_Param_t param; /* 参数配置 */ GIMBAL_IMU_Data_t data; /* IMU数据 */ } GIMBAL_IMU_t; /* Exported functions prototypes -------------------------------------------- */ /** * @brief 初始化Gimbal IMU设备 * @param gimbal_imu Gimbal IMU结构体指针 * @param param 参数配置 * @return 初始化结果 * - DEVICE_OK: 成功 * - DEVICE_ERR_NULL: 参数为空 */ int8_t GIMBAL_IMU_Init(GIMBAL_IMU_t *gimbal_imu, const GIMBAL_IMU_Param_t *param); /** * @brief 更新Gimbal IMU设备状态 * @param gimbal_imu Gimbal IMU结构体指针 * @return 更新结果 * - DEVICE_OK: 成功 * - DEVICE_ERR_NULL: 参数为空 */ int8_t GIMBAL_IMU_Update(GIMBAL_IMU_t *gimbal_imu); #ifdef __cplusplus } #endif