This commit is contained in:
2026-04-04 23:24:36 +08:00
parent 5e0901a4d9
commit 7c2396a282
11 changed files with 132 additions and 57 deletions

View File

@@ -220,8 +220,18 @@ static void execute_turn(const CorridorObs_t* obs,
uint32_t now_ms,
GlobalNavOutput_t* out)
{
float imu_yaw = board->imu_yaw_continuous.is_valid
? board->imu_yaw_continuous.value : 0.0f;
/* [改进G] IMU 失效安全保护: 没有 IMU 数据时立即停车,不盲转。
* 超时后会被外部超时保护捕获,进入 GNAV_ERROR。 */
if (!board->imu_yaw_continuous.is_valid) {
out->override_v = 0.0f;
out->override_w = 0.0f;
out->use_override = true;
out->request_corridor = false;
out->safety_mode = SAFETY_MODE_IDLE;
return;
}
float imu_yaw = board->imu_yaw_continuous.value;
/* 已转过的角度 (取绝对值) */
float delta = (imu_yaw - s_nav.turn_start_yaw_deg) * s_nav.turn_sign;
@@ -438,8 +448,9 @@ void GlobalNav_Update(const CorridorObs_t* obs,
s_last_odom_vx = odom_vx;
}
/* [改进G] IMU yaw 提取: 失效时使用参考值,保持航向不变而不是跳到 0 */
float imu_yaw_deg = board->imu_yaw_continuous.is_valid
? board->imu_yaw_continuous.value : 0.0f;
? board->imu_yaw_continuous.value : s_nav.heading_ref_deg;
/* 默认输出 */
out->use_override = true;