106 lines
3.4 KiB
C
106 lines
3.4 KiB
C
#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 |