Merge branch 'MC_02' of ssh://gitea.qutrobot.top:222/robofish/rm_balance into MC_02
# Conflicts: # User/module/cmd/cmd.c # User/module/config.c
This commit is contained in:
commit
5139f4ad6a
@ -4,6 +4,7 @@
|
||||
#include "cmd.h"
|
||||
#include "bsp/time.h"
|
||||
#include "module/cmd/cmd_types.h"
|
||||
#include "module/gimbal.h"
|
||||
#include "module/shoot.h"
|
||||
#include "module/gimbal.h"
|
||||
#include <stdint.h>
|
||||
|
||||
@ -545,8 +545,7 @@ Config_RobotParam_t robot_config = {
|
||||
// .balance_sw_mid = CHASSIS_MODE_RELAX,
|
||||
// .balance_sw_down = CHASSIS_MODE_RELAX,
|
||||
.balance_sw_mid =CHASSIS_MODE_WHELL_LEG_BALANCE,
|
||||
.balance_sw_down = CHASSIS_MODE_LEG_TEST,
|
||||
// .balance_sw_down = CHASSIS_MODE_WHELL_LEG_BALANCE,
|
||||
.balance_sw_down = CHASSIS_MODE_WHELL_LEG_BALANCE,
|
||||
#endif
|
||||
},
|
||||
},
|
||||
|
||||
@ -277,6 +277,52 @@ static bool Shoot_DetectShotByRpmDrop(Shoot_t *s)
|
||||
return false;
|
||||
}
|
||||
|
||||
static float Shoot_ResolveHeatThreshold(float cfg, float Hmax)
|
||||
{
|
||||
if (cfg <= 0.0f) {
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
if (cfg <= 1.0f) {
|
||||
return cfg * Hmax;
|
||||
}
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
static uint16_t Shoot_ResolveSafeShots(Shoot_t *s)
|
||||
{
|
||||
if (s == NULL) {
|
||||
return 0U;
|
||||
}
|
||||
|
||||
float cfg = s->param->heatControl.safe_shots;
|
||||
if (cfg <= 0.0f) {
|
||||
return 0U;
|
||||
}
|
||||
|
||||
if (cfg <= 1.0f) {
|
||||
if (s->heatcontrol.Hmax <= 0.0f || s->heatcontrol.Hgen <= 0.0f) {
|
||||
return 0U;
|
||||
}
|
||||
|
||||
float total_shots = s->heatcontrol.Hmax / s->heatcontrol.Hgen;
|
||||
float safe = ceilf(cfg * total_shots);
|
||||
if (safe < 1.0f) {
|
||||
safe = 1.0f;
|
||||
}
|
||||
if (safe > (float)UINT16_MAX) {
|
||||
safe = (float)UINT16_MAX;
|
||||
}
|
||||
return (uint16_t)safe;
|
||||
}
|
||||
|
||||
if (cfg > (float)UINT16_MAX) {
|
||||
cfg = (float)UINT16_MAX;
|
||||
}
|
||||
return (uint16_t)cfg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief 热量数据融合:用裁判系统数据修正自主估计
|
||||
@ -469,9 +515,9 @@ static float Shoot_CaluFreqByHeat(Shoot_t *s)
|
||||
}
|
||||
|
||||
float Hres = s->heatcontrol.Hres;
|
||||
float Hwarn = s->param->heatControl.Hwarn;
|
||||
float Hsatu = s->param->heatControl.Hsatu;
|
||||
float Hthres = s->param->heatControl.Hthres;
|
||||
float Hwarn = Shoot_ResolveHeatThreshold(s->param->heatControl.Hwarn, s->heatcontrol.Hmax);
|
||||
float Hsatu = Shoot_ResolveHeatThreshold(s->param->heatControl.Hsatu, s->heatcontrol.Hmax);
|
||||
float Hthres = Shoot_ResolveHeatThreshold(s->param->heatControl.Hthres, s->heatcontrol.Hmax);
|
||||
float nmax = s->param->heatControl.nmax;
|
||||
float ncd = s->heatcontrol.ncd;
|
||||
|
||||
@ -533,10 +579,11 @@ int8_t Shoot_CaluTargetAngle(Shoot_t *s, Shoot_CMD_t *cmd)
|
||||
|
||||
/* 根据热量控制计算实际射频 */
|
||||
float actual_freq = Shoot_CaluFreqByHeat(s);
|
||||
uint16_t safe_shots = Shoot_ResolveSafeShots(s);
|
||||
|
||||
/* 检查可发射弹丸数是否满足安全余量 */
|
||||
if (s->param->heatControl.enable &&
|
||||
s->heatcontrol.shots_available <= s->param->heatControl.safe_shots) {
|
||||
s->heatcontrol.shots_available <= safe_shots) {
|
||||
actual_freq = 0.0f; /* 禁止发弹 */
|
||||
}
|
||||
|
||||
@ -938,7 +985,7 @@ int8_t Shoot_Init(Shoot_t *s, Shoot_Params_t *param, float target_freq)
|
||||
KPID_MODE_CALC_D,
|
||||
target_freq,
|
||||
¶m->pid.fric_follow);
|
||||
PID_Init(&s->pid.fric_err[i],
|
||||
PID_Init(&s->pid.fric_err[i],
|
||||
KPID_MODE_CALC_D,
|
||||
target_freq,
|
||||
¶m->pid.fric_err);
|
||||
|
||||
@ -102,7 +102,7 @@ typedef struct {
|
||||
}Shoot_JamDetection_t;
|
||||
|
||||
typedef struct {
|
||||
bool ref_online; /* 裁判系统数据是否在线 */
|
||||
bool ref_online; /* 裁判系统在线标志:在线才启用热量限制 */
|
||||
/* 从裁判系统读取的常量 */
|
||||
float Hmax; // 热量上限
|
||||
float Hcd; // 热量冷却速度
|
||||
@ -165,11 +165,11 @@ typedef struct {
|
||||
}jamDetection;/* 卡弹检测参数 */
|
||||
struct {
|
||||
bool enable; /* 是否启用热量控制 */
|
||||
uint16_t safe_shots;/* 安全余量,当shots_available小于等于该值时禁止发弹 */
|
||||
float safe_shots;/* 安全余量:<=1按总可发弹数比例,>1按绝对发弹数 */
|
||||
float nmax;//最大射频
|
||||
float Hwarn;//热量预警值
|
||||
float Hsatu;//热量饱和值
|
||||
float Hthres;//热量阈值,超过这个值将无法射击
|
||||
float Hwarn;//预警阈值:<=1按Hmax比例,>1按绝对热量
|
||||
float Hsatu;//饱和阈值:<=1按Hmax比例,>1按绝对热量
|
||||
float Hthres;//停射阈值:<=1按Hmax比例,>1按绝对热量
|
||||
}heatControl;/* 热量控制参数 */
|
||||
struct {
|
||||
Shoot_MOTOR_RM_Param_t fric[MAX_FRIC_NUM];
|
||||
|
||||
Loading…
Reference in New Issue
Block a user