Resolve lane change timing bug and improve state handling

Fix lane change flag activation and conditions for state transitions.
This commit is contained in:
janpoo6427
2026-06-06 18:29:14 +09:00
committed by GitHub
parent 2e44f69513
commit 803f386fe6

View File

@@ -469,8 +469,8 @@ class DesireHelper:
# ── laneChangeStarting 상태 ────────────────────────────── # ── laneChangeStarting 상태 ──────────────────────────────
elif self.lane_change_state == LaneChangeState.laneChangeStarting: elif self.lane_change_state == LaneChangeState.laneChangeStarting:
if self.lane_change_timer == 0.0: # [수정] 프레임 타이밍 버그 해결: 상태 진입 시 조건 없이 즉시 플래그 가동
self.lane_change_completed_on_blinker = True self.lane_change_completed_on_blinker = True
# 후측방 사각지대 차량 감지 상태 정의 # 후측방 사각지대 차량 감지 상태 정의
bsd_active = (side is not None) and (side.bsd_hold_counter > 0) and (self.lane_change_bsd >= 0) bsd_active = (side is not None) and (side.bsd_hold_counter > 0) and (self.lane_change_bsd >= 0)
@@ -492,6 +492,7 @@ class DesireHelper:
self.unsafe_cancel_timer, self.unsafe_cancel_timer,
max(self.bsd_clear_sec, self.object_clear_sec, 1.5) max(self.bsd_clear_sec, self.object_clear_sec, 1.5)
) )
# 위험 상황으로 인한 취소 시에는 플래그를 꺼서 재시도 허용
self.lane_change_completed_on_blinker = False self.lane_change_completed_on_blinker = False
else: else:
@@ -505,11 +506,12 @@ class DesireHelper:
else: else:
self.lane_change_ll_prob = max(self.lane_change_ll_prob - 2 * DT_MDL, 0.0) self.lane_change_ll_prob = max(self.lane_change_ll_prob - 2 * DT_MDL, 0.0)
if lane_change_prob < 0.02 and self.lane_change_ll_prob < 0.01: if lane_change_prob < 0.02 and self.lane_change_ll_prob < 0.01:
# [수정] 조기 수렴 안정화 조건 만족 시에도 완료된 방향을 백업한 뒤 finishing으로 전환 # 조기 수렴 안정화 조건 만족 시에도 완료된 방향을 백업한 뒤 finishing으로 전환
self.completed_direction = self.lane_change_direction self.completed_direction = self.lane_change_direction
self.lane_change_direction = LaneChangeDirection.none self.lane_change_direction = LaneChangeDirection.none
self.lane_change_state = LaneChangeState.laneChangeFinishing self.lane_change_state = LaneChangeState.laneChangeFinishing
# ── laneChangeFinishing 상태 ───────────────────────────── # ── laneChangeFinishing 상태 ─────────────────────────────
elif self.lane_change_state == LaneChangeState.laneChangeFinishing: elif self.lane_change_state == LaneChangeState.laneChangeFinishing:
self.lane_change_ll_prob = min(self.lane_change_ll_prob + DT_MDL, 1.0) self.lane_change_ll_prob = min(self.lane_change_ll_prob + DT_MDL, 1.0)