mirror of
https://gitee.com/dlmu-cone/tronone-h7-scaffold
synced 2026-07-24 03:27:45 +08:00
81 lines
2.5 KiB
C
81 lines
2.5 KiB
C
#ifndef CHASSIS_OMNI_H
|
||
#define CHASSIS_OMNI_H
|
||
|
||
#include "stdint.h"
|
||
#include "dji_motor.h"
|
||
#include "pid.h"
|
||
|
||
// 定义底盘控制命令结构体 (由于chassis_ctrl.h为空,在此定义以适配逻辑)
|
||
typedef struct
|
||
{
|
||
float speed[3]; // x, y, z (旋转) 速度设定值
|
||
float follow_angle; // 跟随角度 (底盘与云台夹角)
|
||
float yaw_speed; // 当前Yaw轴角速度 (作为前馈或反馈)
|
||
float real_angle; // 底盘当前实际角度 (用于坐标系转换)
|
||
uint8_t if_enable; // 底盘使能标志
|
||
uint8_t if_free; // 底盘自由模式标志 (不跟随)
|
||
} Chassis_Ctrl_Cmd_s;
|
||
|
||
// 定义功率控制所需的外部数据结构
|
||
typedef struct
|
||
{
|
||
uint16_t chassis_power_limit; // 来自裁判系统的功率限制
|
||
float remain_energy; // 来自超级电容的剩余能量
|
||
uint16_t chassis_power_buffer; // 缓冲能量 (可选)
|
||
} Chassis_Power_Info_s;
|
||
|
||
// 全向轮底盘对象结构体
|
||
typedef struct
|
||
{
|
||
// 电机实例指针 (LF, RF, LB, RB)
|
||
DJIMotorInstance *moto_chassis[4];
|
||
|
||
// 速度环PID实例 (每个轮子一个)
|
||
PIDInstance pid_speed[4];
|
||
|
||
// 跟随环串级PID实例
|
||
PIDInstance pid_follow_angle_outer; // 外环 (角度)
|
||
PIDInstance pid_follow_angle_inner; // 内环 (角速度)
|
||
|
||
// 控制数据
|
||
Chassis_Ctrl_Cmd_s cmd;
|
||
|
||
// 内部计算状态变量
|
||
float offset_angle;
|
||
float offset_speed;
|
||
float follow_increment;
|
||
|
||
// 功率控制参数
|
||
struct {
|
||
float super_power_health;
|
||
float super_power_week;
|
||
uint16_t chassis_normal_speed_limit;
|
||
} power_config;
|
||
|
||
} Chassis_Omni_t;
|
||
|
||
/**
|
||
* @brief 初始化全向轮底盘对象
|
||
* @param chassis 底盘对象指针
|
||
* @param lf 左前电机指针
|
||
* @param rf 右前电机指针
|
||
* @param lb 左后电机指针
|
||
* @param rb 右后电机指针
|
||
*/
|
||
void Chassis_Omni_Init(Chassis_Omni_t *chassis, DJIMotorInstance *lf, DJIMotorInstance *rf, DJIMotorInstance *lb, DJIMotorInstance *rb);
|
||
|
||
/**
|
||
* @brief 底盘控制任务函数,建议在RTOS任务中周期调用
|
||
* @param chassis 底盘对象指针
|
||
*/
|
||
void Chassis_Omni_Update(Chassis_Omni_t *chassis);
|
||
|
||
/**
|
||
* @brief 功率控制逻辑,根据裁判系统和超电状态限制目标速度
|
||
* @param chassis 底盘对象指针
|
||
* @param power_info 功率状态信息
|
||
* @param raw_cmd 原始控制命令 (通常来自上层FSM)
|
||
*/
|
||
void Chassis_Omni_PowerControl(Chassis_Omni_t *chassis, Chassis_Power_Info_s *power_info, Chassis_Ctrl_Cmd_s *raw_cmd);
|
||
|
||
#endif // CHASSIS_OMNI_H
|