SLC Cleanup

Fix three SLC bugs:
1. Auto-accept limits when not engaged to keep previous_target current.
2. Gate Vision out of the limits dict when not a configured priority slot.
3. Replace mapdOut fallback with 0 when filler has no data to prevent stale OSM speed limits from leaking in.
This commit is contained in:
whoisdomi
2026-04-28 08:04:05 -05:00
parent d0c19745c3
commit feb9d49c93
@@ -254,8 +254,12 @@ class SpeedLimitController:
self.speed_limit_changed_timer += DT_MDL
had_override = self.override_active(v_ego, sm["carState"].gasPressed)
speed_limit_accepted = (sm["starpilotCarState"].accelPressed and sm["carControl"].longActive) or self.starpilot_planner.params_memory.get_bool("SpeedLimitAccepted")
speed_limit_denied = sm["starpilotCarState"].decelPressed or (self.speed_limit_changed_timer >= 30)
long_active = sm["carControl"].longActive
speed_limit_accepted = (sm["starpilotCarState"].accelPressed and long_active) or self.starpilot_planner.params_memory.get_bool("SpeedLimitAccepted")
speed_limit_denied = sm["starpilotCarState"].decelPressed or (self.speed_limit_changed_timer >= 30 and long_active)
if not long_active and not sm["selfdriveState"].enabled:
speed_limit_accepted = True
if speed_limit_accepted:
self.source = desired_source
@@ -296,11 +300,16 @@ class SpeedLimitController:
self.update_map_speed_limit(v_ego, sm)
self.vision_limit = self.starpilot_planner.params_memory.get_float("VisionSpeedLimit") if getattr(self.starpilot_toggles, "vision_speed_limit_detection", False) else 0
configured_priorities = {
self.starpilot_toggles.speed_limit_priority1,
self.starpilot_toggles.speed_limit_priority2,
}
limits = {
"Dashboard": dashboard_speed_limit,
"Map Data": self.map_speed_limit,
"Vision": self.vision_limit,
}
if "Vision" in configured_priorities:
limits["Vision"] = self.vision_limit
filtered_limits = {source: limit for source, limit in limits.items() if limit >= 1}
if self.starpilot_toggles.speed_limit_priority_highest:
@@ -393,11 +402,11 @@ class SpeedLimitController:
current_longitude = self.starpilot_planner.gps_position.get("longitude")
next_speed_limit_distance = calculate_distance_to_point(current_latitude, current_longitude, next_latitude, next_longitude)
else:
self.map_speed_limit = sm["mapdOut"].speedLimit
self.next_speed_limit = sm["mapdOut"].nextSpeedLimit
self.map_speed_limit = 0
self.next_speed_limit = 0
else:
self.map_speed_limit = sm["mapdOut"].speedLimit
self.next_speed_limit = sm["mapdOut"].nextSpeedLimit
self.map_speed_limit = 0
self.next_speed_limit = 0
if self.next_speed_limit > 0:
if self.map_speed_limit < self.next_speed_limit: