From c522e563afadf7758b5986e7736184169c0be2da Mon Sep 17 00:00:00 2001 From: Robofish <1683502971@qq.com> Date: Sun, 15 Mar 2026 15:10:55 +0800 Subject: [PATCH] fix --- User/module/balance_chassis.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/User/module/balance_chassis.c b/User/module/balance_chassis.c index bebb653..7a2efce 100644 --- a/User/module/balance_chassis.c +++ b/User/module/balance_chassis.c @@ -155,17 +155,12 @@ static int8_t Chassis_SetMode(Chassis_t *c, Chassis_Mode_t mode) { Chassis_ResetControllers(c); Chassis_SelectYawZeroPoint(c); - /* RELAX -> BALANCE:根据 pitch 角度判断是否需要自起 */ + /* RELAX -> BALANCE:pitch过大时保持RELAX,避免进入未实现的RECOVER */ if (mode == CHASSIS_MODE_WHELL_LEG_BALANCE && c->mode == CHASSIS_MODE_RELAX) { float pitch = c->feedback.imu.euler.pit; - /* pitch 绝对值大于 0.8rad(约46度)认为是倒地,需要自起 */ - if (fabsf(pitch) > 0.2f) { - /* 根据 theta 判断腿朝上还是朝下 */ - float theta_l = c->vmc_[0].leg.theta; - float theta_r = c->vmc_[1].leg.theta; - c->recover.state[0] = (fabsf(theta_l) > (float)M_PI_2) ? RECOVER_FLIP : RECOVER_STRETCH; - c->recover.state[1] = (fabsf(theta_r) > (float)M_PI_2) ? RECOVER_FLIP : RECOVER_STRETCH; - c->mode = CHASSIS_MODE_RECOVER; + if (fabsf(pitch) > 0.8f) { + /* pitch过大,机体未扶正,保持RELAX */ + Chassis_MotorRelax(c); return CHASSIS_OK; } /* 否则直接进入平衡模式 */ @@ -704,9 +699,10 @@ int8_t Chassis_Control(Chassis_t *c, const Chassis_CMD_t *c_cmd) { Chassis_VMCControl(c, c_cmd); break; - // case CHASSIS_MODE_RECOVER: - // Chassis_RecoverControl(c); - // break; + case CHASSIS_MODE_RECOVER: + /* 自起功能未实现,安全放松电机 */ + Chassis_MotorRelax(c); + break; case CHASSIS_MODE_WHELL_LEG_BALANCE: Chassis_LQRControl(c, c_cmd);