1.0
This commit is contained in:
@@ -857,12 +857,17 @@ void GlobalNav_Update(const CorridorObs_t* obs,
|
|||||||
s_nav.link_d_front_valid = true;
|
s_nav.link_d_front_valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool odom_ok = odom_since_entry() >= s_nav.cfg.link_distance * 0.85f;
|
/* 连接段入口判定原则:
|
||||||
|
* 用“看到开口”的那一刻作为唯一锚点,然后固定前冲一小段再转向。
|
||||||
|
* 这样每次到沟入口的位置更一致,不再混用多套主触发条件。
|
||||||
|
*/
|
||||||
|
bool odom_guard_ok = odom_since_entry() >= s_nav.cfg.link_distance * 0.55f;
|
||||||
|
|
||||||
|
/* 前激光仅保留为兜底,不再参与主触发。 */
|
||||||
bool laser_ok = false;
|
bool laser_ok = false;
|
||||||
if (s_nav.link_d_front_valid && front_valid) {
|
if (s_nav.link_d_front_valid && front_valid) {
|
||||||
float d_front_delta = s_nav.link_d_front_start - obs->d_front;
|
float d_front_delta = s_nav.link_d_front_start - obs->d_front;
|
||||||
laser_ok = (d_front_delta >= s_nav.cfg.link_distance * 0.85f);
|
laser_ok = (d_front_delta >= s_nav.cfg.link_distance * 1.05f);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gap_confirmed = false;
|
bool gap_confirmed = false;
|
||||||
@@ -875,7 +880,7 @@ void GlobalNav_Update(const CorridorObs_t* obs,
|
|||||||
}
|
}
|
||||||
gap_confirmed = (s_nav.link_gap_count >= 5U);
|
gap_confirmed = (s_nav.link_gap_count >= 5U);
|
||||||
|
|
||||||
if (gap_confirmed && !s_nav.link_gap_seen) {
|
if (odom_guard_ok && gap_confirmed && !s_nav.link_gap_seen) {
|
||||||
s_nav.link_gap_seen = true;
|
s_nav.link_gap_seen = true;
|
||||||
s_nav.link_gap_seen_odom = s_nav.odom_distance_accum;
|
s_nav.link_gap_seen_odom = s_nav.odom_distance_accum;
|
||||||
}
|
}
|
||||||
@@ -887,7 +892,10 @@ void GlobalNav_Update(const CorridorObs_t* obs,
|
|||||||
>= s_nav.cfg.link_gap_runout;
|
>= s_nav.cfg.link_gap_runout;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (odom_ok && (laser_ok || (s_nav.link_gap_seen && gap_runout_ok))) {
|
if (s_nav.link_gap_seen && gap_runout_ok) {
|
||||||
|
transition_to(GNAV_TURN_INTO_NEXT, board);
|
||||||
|
} else if (!s_nav.link_gap_seen && laser_ok) {
|
||||||
|
/* 极端兜底:如果开口检测失效,才允许前激光变化量接管。 */
|
||||||
transition_to(GNAV_TURN_INTO_NEXT, board);
|
transition_to(GNAV_TURN_INTO_NEXT, board);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -530,9 +530,9 @@ extern "C" {
|
|||||||
/* --- 连接段 --- */
|
/* --- 连接段 --- */
|
||||||
/* 在纵向端部通道里北行,从一条垄沟入口到下一条入口,距离=垄沟宽40cm+垄背宽30cm=70cm */
|
/* 在纵向端部通道里北行,从一条垄沟入口到下一条入口,距离=垄沟宽40cm+垄背宽30cm=70cm */
|
||||||
#define PARAM_GNAV_LINK_V 0.10f /* m/s — 连接段速度 (纵向通道内,IMU航向保持) */
|
#define PARAM_GNAV_LINK_V 0.10f /* m/s — 连接段速度 (纵向通道内,IMU航向保持) */
|
||||||
#define PARAM_GNAV_LINK_DISTANCE 0.90f /* m — 连接段标称距离 (沟间距) */
|
#define PARAM_GNAV_LINK_DISTANCE 0.70f /* m — 连接段标称距离 (沟间距中心到中心) */
|
||||||
#define PARAM_GNAV_LINK_TIMEOUT 8000U /* ms — 连接段超时 */
|
#define PARAM_GNAV_LINK_TIMEOUT 8000U /* ms — 连接段超时 */
|
||||||
#define PARAM_GNAV_LINK_GAP_RUNOUT 0.06f /* m — 看到下一个沟口后继续前冲距离 */
|
#define PARAM_GNAV_LINK_GAP_RUNOUT 0.08f /* m — 看到下一个沟口后继续前冲距离 */
|
||||||
#define PARAM_GNAV_LINK_WALL_TARGET 0.10f /* m — 连接段最小离墙距离(小于10cm才触发保底修正) */
|
#define PARAM_GNAV_LINK_WALL_TARGET 0.10f /* m — 连接段最小离墙距离(小于10cm才触发保底修正) */
|
||||||
#define PARAM_GNAV_LINK_WALL_KP 3.0f /* — 连接段离墙保底增益 */
|
#define PARAM_GNAV_LINK_WALL_KP 3.0f /* — 连接段离墙保底增益 */
|
||||||
#define PARAM_GNAV_LINK_WALL_BLEND 0.5f /* — 预留给其他通道状态,连接段本身不再使用融合 */
|
#define PARAM_GNAV_LINK_WALL_BLEND 0.5f /* — 预留给其他通道状态,连接段本身不再使用融合 */
|
||||||
|
|||||||
Reference in New Issue
Block a user