rm_balance/User/device/virtual_chassis.h
2025-10-04 21:49:19 +08:00

106 lines
3.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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