fix
This commit is contained in:
parent
d5029eefdf
commit
c522e563af
@ -155,17 +155,12 @@ static int8_t Chassis_SetMode(Chassis_t *c, Chassis_Mode_t mode) {
|
|||||||
Chassis_ResetControllers(c);
|
Chassis_ResetControllers(c);
|
||||||
Chassis_SelectYawZeroPoint(c);
|
Chassis_SelectYawZeroPoint(c);
|
||||||
|
|
||||||
/* RELAX -> BALANCE:根据 pitch 角度判断是否需要自起 */
|
/* RELAX -> BALANCE:pitch过大时保持RELAX,避免进入未实现的RECOVER */
|
||||||
if (mode == CHASSIS_MODE_WHELL_LEG_BALANCE && c->mode == CHASSIS_MODE_RELAX) {
|
if (mode == CHASSIS_MODE_WHELL_LEG_BALANCE && c->mode == CHASSIS_MODE_RELAX) {
|
||||||
float pitch = c->feedback.imu.euler.pit;
|
float pitch = c->feedback.imu.euler.pit;
|
||||||
/* pitch 绝对值大于 0.8rad(约46度)认为是倒地,需要自起 */
|
if (fabsf(pitch) > 0.8f) {
|
||||||
if (fabsf(pitch) > 0.2f) {
|
/* pitch过大,机体未扶正,保持RELAX */
|
||||||
/* 根据 theta 判断腿朝上还是朝下 */
|
Chassis_MotorRelax(c);
|
||||||
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;
|
|
||||||
return CHASSIS_OK;
|
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);
|
Chassis_VMCControl(c, c_cmd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// case CHASSIS_MODE_RECOVER:
|
case CHASSIS_MODE_RECOVER:
|
||||||
// Chassis_RecoverControl(c);
|
/* 自起功能未实现,安全放松电机 */
|
||||||
// break;
|
Chassis_MotorRelax(c);
|
||||||
|
break;
|
||||||
|
|
||||||
case CHASSIS_MODE_WHELL_LEG_BALANCE:
|
case CHASSIS_MODE_WHELL_LEG_BALANCE:
|
||||||
Chassis_LQRControl(c, c_cmd);
|
Chassis_LQRControl(c, c_cmd);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user