diff --git a/CHANGELOGS.md b/CHANGELOGS.md
index 48d2ac0ba..fa36b85c2 100644
--- a/CHANGELOGS.md
+++ b/CHANGELOGS.md
@@ -1,10 +1,10 @@
-dragonpilot 0.9.8
+dragonpilot beta3 0.9.8
=======================
* Up to comma.ai openpilot master branch commit cbee4421da690fa7b260f62c4a2c72ccacc6c902 (2024-07-14)
* DP HIGHLIGHT:
* Fixed Lexus IS/GS crashed issue.
-dragonpilot [2024.07.13]
+dragonpilot beta3 [2024.07.13]
=======================
* Up to comma.ai openpilot master branch commit 01c2174d5968266b87f1d1fecefce5affaeaa624 (2024-07-02)
* DP HIGHLIGHT:
@@ -16,7 +16,7 @@ dragonpilot [2024.07.13]
* Device Auto Shutdown Toggle.
* Device Audible Alert Mode Toggle.
-dragonpilot [2024.07.01]
+dragonpilot beta3 [2024.07.01]
=======================
* Up to comma.ai openpilot master branch commit 442e9f4ae492901a5698b3188741c97c053026c4 (2024-06-21)
* DP HIGHLIGHT:
diff --git a/body/board/obj/body.bin b/body/board/obj/body.bin
index 893cae5b8..26d8f734c 100755
Binary files a/body/board/obj/body.bin and b/body/board/obj/body.bin differ
diff --git a/body/board/obj/body.bin.signed b/body/board/obj/body.bin.signed
index a3f3040e4..45f470598 100644
Binary files a/body/board/obj/body.bin.signed and b/body/board/obj/body.bin.signed differ
diff --git a/body/board/obj/body.elf b/body/board/obj/body.elf
index 0e0df9c73..f7f7771f8 100755
Binary files a/body/board/obj/body.elf and b/body/board/obj/body.elf differ
diff --git a/body/board/obj/bootstub.body.bin b/body/board/obj/bootstub.body.bin
index 1a5d7357f..0dd76eae0 100755
Binary files a/body/board/obj/bootstub.body.bin and b/body/board/obj/bootstub.body.bin differ
diff --git a/body/board/obj/bootstub.body.elf b/body/board/obj/bootstub.body.elf
index ef4c157fd..a843542c2 100755
Binary files a/body/board/obj/bootstub.body.elf and b/body/board/obj/bootstub.body.elf differ
diff --git a/body/board/obj/gitversion.h b/body/board/obj/gitversion.h
index 438ed5e91..efe487865 100644
--- a/body/board/obj/gitversion.h
+++ b/body/board/obj/gitversion.h
@@ -1 +1 @@
-const uint8_t gitversion[8] = "93068c73";
+const uint8_t gitversion[8] = "93031df2";
diff --git a/dp_ext/selfdrive/controls/lib/alt_driving_personality_controller.py b/dp_ext/selfdrive/controls/lib/alt_driving_personality_controller.py
index 89c0f4109..9fb4f00ad 100644
--- a/dp_ext/selfdrive/controls/lib/alt_driving_personality_controller.py
+++ b/dp_ext/selfdrive/controls/lib/alt_driving_personality_controller.py
@@ -6,8 +6,13 @@ from openpilot.common.params import Params
class AlternativeDrivingPersonalityController:
def __init__(self):
params = Params()
+ # try except to avoid issue in longitudinal testing
+ try:
+ self._speed = int(params.get("dp_long_alt_driving_personality_speed")) * CV.KPH_TO_MS
+ except:
+ self._speed = 0
+
self._mode = params.get_bool("dp_long_alt_driving_personality_mode")
- self._speed = int(params.get("dp_long_alt_driving_personality_speed")) * CV.KPH_TO_MS
self._active = False
def update(self, v_ego):
diff --git a/dp_ext/selfdrive/controls/lib/curve_speed_limiter.py b/dp_ext/selfdrive/controls/lib/curve_speed_limiter.py
index a8910dae6..fcdcbfdd1 100644
--- a/dp_ext/selfdrive/controls/lib/curve_speed_limiter.py
+++ b/dp_ext/selfdrive/controls/lib/curve_speed_limiter.py
@@ -15,6 +15,8 @@ class CurveSpeedLimiter:
pass
def update(self, v_ego, z, v):
+ if not self._enabled:
+ return
max_lat_accel = interp(v_ego, [5, 10, 20], [1.5, 2.0, 3.0])
curvatures = np.interp(T_IDXS_MPC, ModelConstants.T_IDXS, z) / np.clip(v, 0.3, 100.0)
max_v = np.sqrt(max_lat_accel / (np.abs(curvatures) + 1e-3)) - 2.0
diff --git a/dp_ext/selfdrive/controls/lib/personalized_accel_controller.py b/dp_ext/selfdrive/controls/lib/personalized_accel_controller.py
index deb24deaa..f7c935725 100644
--- a/dp_ext/selfdrive/controls/lib/personalized_accel_controller.py
+++ b/dp_ext/selfdrive/controls/lib/personalized_accel_controller.py
@@ -1,64 +1,60 @@
import numpy as np
-from collections import deque, defaultdict
import json
+import bisect
+from collections import deque
from openpilot.common.params import Params
class PersonalizedAccelController:
- def __init__(self, learning_rate=0.01, memory_size=10000, samples_per_range=100):
+ def __init__(self, learning_rate=0.01):
self.enabled = False
self._params = Params()
- # A high smoothing factor with a low learning rate will result in very stable, slow-changing behavior.
- # A low smoothing factor with a high learning rate will be very responsive to new data, potentially unstable.
self.learning_rate = learning_rate
- self.smoothing_factor = 0.9 # New parameter for smoothing
- self.memory_size = memory_size
- self.memory = deque(maxlen=memory_size)
+ self.smoothing_factor = 0.9
self.update_counter = 0
- self.samples_per_range = samples_per_range
- # Fixed BP size from 0 to 39 in steps of 3
- self.profile_size = 14 # (39 - 0) / 3 + 1
- self.A_MAX_BP = list(np.arange(0, 40, 3))
+ self.samples_per_range = self._initialize_variable_samples()
+ self.max_samples_per_range = 50
- # Default values (ensure non-negative)
- self.MAX_VALS = np.maximum(0, np.interp(self.A_MAX_BP, [0., 10.0, 25., 40.], [1.6, 1.2, 0.8, 0.6])).tolist()
+ self.A_MAX_BP = [0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 32.5, 35, 37.5, 40]
+ self.profile_size = len(self.A_MAX_BP)
- # Initialize profiles
+ original_bp = [0., 10.0, 25., 40.]
+ original_vals = [1.6, 1.2, 0.8, 0.6]
+
+ self.MAX_VALS = np.maximum(0, np.interp(self.A_MAX_BP, original_bp, original_vals)).tolist()
self.A_CRUISE_MAX_VALS = self.MAX_VALS.copy()
- # Initialize sample collectors
- self.cruise_samples = defaultdict(list)
+ self.speed_range_samples = {i: deque(maxlen=self.max_samples_per_range) for i in range(self.profile_size)}
- self.speed_range_samples = {i: [] for i in range(len(self.A_MAX_BP))}
-
- # Load saved model or use defaults
self.load_model()
+ def _initialize_variable_samples(self):
+ return [5, 5, 8, 8, 10, 10, 12, 12, 15, 15, 20, 20, 25, 30, 35, 35, 40, 40, 40]
+
def update(self, car_state, lead_present):
- blinker_off = not car_state.leftBlinker and not car_state.rightBlinker
- straight_road = abs(car_state.steeringAngleDeg) < 30
+ if (not lead_present and
+ not car_state.leftBlinker and
+ not car_state.rightBlinker and
+ car_state.gasPressed and
+ abs(car_state.steeringAngleDeg) < 30):
- if not lead_present and blinker_off and car_state.gasPressed and straight_road:
- speed = car_state.vEgo
- acceleration = car_state.aEgo
+ speed_index = self._get_speed_index(car_state.vEgo)
+ self.speed_range_samples[speed_index].append(car_state.aEgo)
- # Get the current speed range
- speed_index = self._get_speed_index(speed)
+ if speed_index < len(self.samples_per_range):
+ if len(self.speed_range_samples[speed_index]) >= self.samples_per_range[speed_index]:
+ self._update_cruise_profile_for_index(speed_index)
- # Update only the relevant speed range
- self.speed_range_samples[speed_index].append(acceleration)
-
- # Update this speed range if we have enough samples
- if len(self.speed_range_samples[speed_index]) >= self.samples_per_range:
- self._update_cruise_profile_for_index(speed_index)
-
- # Increment update counter and save model periodically
self.update_counter += 1
if self.update_counter % 1000 == 0:
self.save_model()
+ def _get_speed_index(self, speed):
+ index = bisect.bisect_right(self.A_MAX_BP, speed) - 1
+ return max(0, min(index, len(self.A_MAX_BP) - 1))
+
def _update_cruise_profile_for_index(self, index):
- samples = self.speed_range_samples[index]
+ samples = list(self.speed_range_samples[index])
if samples:
new_sample_val = max(0, float(np.percentile(samples, 95)))
@@ -67,43 +63,6 @@ class PersonalizedAccelController:
self.A_CRUISE_MAX_VALS[index] = previous_val * (1 - self.learning_rate) + smoothed_val * self.learning_rate
- self.speed_range_samples[index] = [] # Clear the samples after updating
-
- def _check_and_update_all_ranges(self):
- for i in range(len(self.A_MAX_BP)):
- if len(self.cruise_samples[i]) >= self.samples_per_range:
- self._update_cruise_profile_for_index(i)
-
- def _update_acceleration_profiles(self):
- for state, accel in self.memory:
- speed, lead_present = state
- speed_index = self._get_speed_index(speed)
-
- if not lead_present:
- self.cruise_samples[speed_index].append((speed, accel))
-
- # Update profiles if we have enough samples
- self._update_cruise_profile()
-
- def _get_speed_index(self, speed):
- return min(int(speed / 3), len(self.A_MAX_BP) - 1)
-
- def _update_cruise_profile(self):
- for i, bp in enumerate(self.A_MAX_BP):
- samples = self.cruise_samples[i]
- if len(samples) >= self.samples_per_range:
- speeds, accels = zip(*samples)
- new_sample_val = max(0, float(np.percentile(accels, 95)))
-
- # Consider the previous value
- previous_val = self.A_CRUISE_MAX_VALS[i]
- smoothed_val = self.smoothing_factor * previous_val + (1 - self.smoothing_factor) * new_sample_val
-
- # Apply learning rate
- self.A_CRUISE_MAX_VALS[i] = previous_val * (1 - self.learning_rate) + smoothed_val * self.learning_rate
-
- self.cruise_samples[i] = [] # Clear the samples after updating
-
def get_max_accel(self, v_ego, STOCK_BP, STOCK_VALS):
if self.enabled:
return np.interp(v_ego, self.A_MAX_BP, self.A_CRUISE_MAX_VALS)
@@ -112,21 +71,24 @@ class PersonalizedAccelController:
def set_profile_size(self, new_size):
self.profile_size = new_size
- # Reinitialize all acceleration profiles
self.A_CRUISE_MAX_VALS = list(np.linspace(1.6, 0.6, num=new_size))
- self._update_acceleration_profiles()
+ self.speed_range_samples = {i: deque(maxlen=self.max_samples_per_range) for i in range(self.profile_size)}
def set_enabled(self, enabled):
self.enabled = enabled
def save_model(self):
- self._params.put("dp_long_pac_vals", json.dumps(self._numpy_to_list(self.A_CRUISE_MAX_VALS)))
+ data = {
+ 'bp': self.A_MAX_BP,
+ 'vals': self._numpy_to_list(self.A_CRUISE_MAX_VALS)
+ }
+ self._params.put("dp_long_pac_vals", json.dumps(data))
def load_model(self):
params_val = self._params.get("dp_long_pac_vals")
if params_val is not None:
- self.A_CRUISE_MAX_VALS = json.loads(params_val)
- print(self.A_CRUISE_MAX_VALS)
+ data = json.loads(params_val)
+ self.A_CRUISE_MAX_VALS = np.maximum(0, np.interp(self.A_MAX_BP, data.get('bp'), data.get('vals'))).tolist()
def _numpy_to_list(self, obj):
if isinstance(obj, np.ndarray):
@@ -150,13 +112,12 @@ class PersonalizedAccelController:
while True:
sm.update()
if sm.updated['carState']:
- self.update(sm['carState'], sm['radarState'].leadOne.status and sm['carState'].vEgo > 0. and sm['radarState'].leadOne.dRel / sm['carState'].vEgo < 1.)
- print(self.A_CRUISE_MAX_VALS)
-
+ self.update(sm['carState'], sm['radarState'].leadOne.status and sm['carState'].vEgo > 0. and sm['radarState'].leadOne.dRel / sm['carState'].vEgo < 2.5)
+ # print(self.A_CRUISE_MAX_VALS)
def main():
- pac = PersonalizedAccelController(learning_rate=0.01, memory_size=10000)
+ pac = PersonalizedAccelController()
pac.pac_thread()
if __name__ == "__main__":
- main()
+ main()
\ No newline at end of file
diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.bin b/panda/board/jungle/obj/bootstub.panda_jungle.bin
index 84ba710d8..6bf614536 100755
Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.bin and b/panda/board/jungle/obj/bootstub.panda_jungle.bin differ
diff --git a/panda/board/jungle/obj/bootstub.panda_jungle.elf b/panda/board/jungle/obj/bootstub.panda_jungle.elf
index 67418fc9a..64e897cc5 100755
Binary files a/panda/board/jungle/obj/bootstub.panda_jungle.elf and b/panda/board/jungle/obj/bootstub.panda_jungle.elf differ
diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin
index 8754ddff0..2290f175e 100755
Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.bin differ
diff --git a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf
index d59481820..269aec58c 100755
Binary files a/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf and b/panda/board/jungle/obj/bootstub.panda_jungle_h7.elf differ
diff --git a/panda/board/jungle/obj/panda_jungle.bin b/panda/board/jungle/obj/panda_jungle.bin
index d426f88dd..98478ce89 100755
Binary files a/panda/board/jungle/obj/panda_jungle.bin and b/panda/board/jungle/obj/panda_jungle.bin differ
diff --git a/panda/board/jungle/obj/panda_jungle.bin.signed b/panda/board/jungle/obj/panda_jungle.bin.signed
index b741dadeb..2777d7052 100644
Binary files a/panda/board/jungle/obj/panda_jungle.bin.signed and b/panda/board/jungle/obj/panda_jungle.bin.signed differ
diff --git a/panda/board/jungle/obj/panda_jungle.elf b/panda/board/jungle/obj/panda_jungle.elf
index ce44222e3..a8a3691c4 100755
Binary files a/panda/board/jungle/obj/panda_jungle.elf and b/panda/board/jungle/obj/panda_jungle.elf differ
diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin b/panda/board/jungle/obj/panda_jungle_h7.bin
index cbdc42100..57d7a4850 100755
Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin and b/panda/board/jungle/obj/panda_jungle_h7.bin differ
diff --git a/panda/board/jungle/obj/panda_jungle_h7.bin.signed b/panda/board/jungle/obj/panda_jungle_h7.bin.signed
index 8abb1ef37..9c358c5b9 100644
Binary files a/panda/board/jungle/obj/panda_jungle_h7.bin.signed and b/panda/board/jungle/obj/panda_jungle_h7.bin.signed differ
diff --git a/panda/board/jungle/obj/panda_jungle_h7.elf b/panda/board/jungle/obj/panda_jungle_h7.elf
index 858ab0bf2..1f2128750 100755
Binary files a/panda/board/jungle/obj/panda_jungle_h7.elf and b/panda/board/jungle/obj/panda_jungle_h7.elf differ
diff --git a/panda/board/obj/bootstub.panda.bin b/panda/board/obj/bootstub.panda.bin
index 95f003461..e0261862f 100755
Binary files a/panda/board/obj/bootstub.panda.bin and b/panda/board/obj/bootstub.panda.bin differ
diff --git a/panda/board/obj/bootstub.panda.elf b/panda/board/obj/bootstub.panda.elf
index eec91afde..7fc69f763 100755
Binary files a/panda/board/obj/bootstub.panda.elf and b/panda/board/obj/bootstub.panda.elf differ
diff --git a/panda/board/obj/bootstub.panda_h7.bin b/panda/board/obj/bootstub.panda_h7.bin
index b78944f04..ce2d4fe1e 100755
Binary files a/panda/board/obj/bootstub.panda_h7.bin and b/panda/board/obj/bootstub.panda_h7.bin differ
diff --git a/panda/board/obj/bootstub.panda_h7.elf b/panda/board/obj/bootstub.panda_h7.elf
index fd50ea88d..ad682411b 100755
Binary files a/panda/board/obj/bootstub.panda_h7.elf and b/panda/board/obj/bootstub.panda_h7.elf differ
diff --git a/panda/board/obj/gitversion.h b/panda/board/obj/gitversion.h
index d1de87e98..761acd01e 100644
--- a/panda/board/obj/gitversion.h
+++ b/panda/board/obj/gitversion.h
@@ -1 +1 @@
-const uint8_t gitversion[] = "DEV-93068c73-DEBUG";
+const uint8_t gitversion[] = "DEV-93031df2-DEBUG";
diff --git a/panda/board/obj/panda.bin b/panda/board/obj/panda.bin
index 9e4cc4aeb..7610f8c54 100755
Binary files a/panda/board/obj/panda.bin and b/panda/board/obj/panda.bin differ
diff --git a/panda/board/obj/panda.bin.signed b/panda/board/obj/panda.bin.signed
index 59a226de4..7aad47f50 100644
Binary files a/panda/board/obj/panda.bin.signed and b/panda/board/obj/panda.bin.signed differ
diff --git a/panda/board/obj/panda.elf b/panda/board/obj/panda.elf
index fd59010c5..29d6c0aed 100755
Binary files a/panda/board/obj/panda.elf and b/panda/board/obj/panda.elf differ
diff --git a/panda/board/obj/panda_h7.bin b/panda/board/obj/panda_h7.bin
index 3133f8eba..e86a19765 100755
Binary files a/panda/board/obj/panda_h7.bin and b/panda/board/obj/panda_h7.bin differ
diff --git a/panda/board/obj/panda_h7.bin.signed b/panda/board/obj/panda_h7.bin.signed
index f4f4b6ed7..3c95153c3 100644
Binary files a/panda/board/obj/panda_h7.bin.signed and b/panda/board/obj/panda_h7.bin.signed differ
diff --git a/panda/board/obj/panda_h7.elf b/panda/board/obj/panda_h7.elf
index 45b9e570b..7950868d7 100755
Binary files a/panda/board/obj/panda_h7.elf and b/panda/board/obj/panda_h7.elf differ
diff --git a/panda/board/obj/version b/panda/board/obj/version
index 6bce7337a..43584ce80 100644
--- a/panda/board/obj/version
+++ b/panda/board/obj/version
@@ -1 +1 @@
-DEV-93068c73-DEBUG
\ No newline at end of file
+DEV-93031df2-DEBUG
\ No newline at end of file
diff --git a/selfdrive/controls/lib/longitudinal_planner.py b/selfdrive/controls/lib/longitudinal_planner.py
index 5380b517f..9ef6f8b6f 100755
--- a/selfdrive/controls/lib/longitudinal_planner.py
+++ b/selfdrive/controls/lib/longitudinal_planner.py
@@ -142,7 +142,7 @@ class LongitudinalPlanner:
prev_accel_constraint = not (reset_state or sm['carState'].standstill)
if self.mpc.mode == 'acc':
- self._pac.update(sm['carState'], sm['radarState'].leadOne.status and v_ego > 0. and sm['radarState'].leadOne.dRel / v_ego < 1.)
+ self._pac.update(sm['carState'], sm['radarState'].leadOne.status and v_ego > 0. and sm['radarState'].leadOne.dRel / v_ego < 2.5)
# accel_limits = [A_CRUISE_MIN, get_max_accel(v_ego)]
accel_limits = [A_CRUISE_MIN, self._pac.get_max_accel(v_ego, A_CRUISE_MAX_BP, A_CRUISE_MAX_VALS)]
accel_limits_turns = limit_accel_in_turns(v_ego, sm['carState'].steeringAngleDeg, accel_limits, self.CP)
diff --git a/selfdrive/pandad/tests/test_pandad_usbprotocol b/selfdrive/pandad/tests/test_pandad_usbprotocol
index 9e2cd8b8e..8959aeda1 100755
Binary files a/selfdrive/pandad/tests/test_pandad_usbprotocol and b/selfdrive/pandad/tests/test_pandad_usbprotocol differ
diff --git a/selfdrive/ui/installer/installers/installer_openpilot b/selfdrive/ui/installer/installers/installer_openpilot
index 9cefbb5fc..a208be657 100755
Binary files a/selfdrive/ui/installer/installers/installer_openpilot and b/selfdrive/ui/installer/installers/installer_openpilot differ
diff --git a/selfdrive/ui/installer/installers/installer_openpilot_internal b/selfdrive/ui/installer/installers/installer_openpilot_internal
index 356169816..56c72c929 100755
Binary files a/selfdrive/ui/installer/installers/installer_openpilot_internal and b/selfdrive/ui/installer/installers/installer_openpilot_internal differ
diff --git a/selfdrive/ui/installer/installers/installer_openpilot_nightly b/selfdrive/ui/installer/installers/installer_openpilot_nightly
index 006736498..de7de46dd 100755
Binary files a/selfdrive/ui/installer/installers/installer_openpilot_nightly and b/selfdrive/ui/installer/installers/installer_openpilot_nightly differ
diff --git a/selfdrive/ui/installer/installers/installer_openpilot_test b/selfdrive/ui/installer/installers/installer_openpilot_test
index 63603a660..5bdee9461 100755
Binary files a/selfdrive/ui/installer/installers/installer_openpilot_test and b/selfdrive/ui/installer/installers/installer_openpilot_test differ
diff --git a/selfdrive/ui/qt/setup/setup b/selfdrive/ui/qt/setup/setup
index ad00d1a4c..fb84e33ce 100755
Binary files a/selfdrive/ui/qt/setup/setup and b/selfdrive/ui/qt/setup/setup differ
diff --git a/selfdrive/ui/qt/setup/updater b/selfdrive/ui/qt/setup/updater
index fa32334e1..f2df67aa7 100755
Binary files a/selfdrive/ui/qt/setup/updater and b/selfdrive/ui/qt/setup/updater differ
diff --git a/selfdrive/ui/tests/test_translations b/selfdrive/ui/tests/test_translations
index 030f7d77d..fb38a44ee 100755
Binary files a/selfdrive/ui/tests/test_translations and b/selfdrive/ui/tests/test_translations differ
diff --git a/selfdrive/ui/tests/ui_snapshot b/selfdrive/ui/tests/ui_snapshot
index ae38eb39b..3e9be7210 100755
Binary files a/selfdrive/ui/tests/ui_snapshot and b/selfdrive/ui/tests/ui_snapshot differ
diff --git a/selfdrive/ui/translations/main_ar.ts b/selfdrive/ui/translations/main_ar.ts
index 640a2b80b..fce72583b 100644
--- a/selfdrive/ui/translations/main_ar.ts
+++ b/selfdrive/ui/translations/main_ar.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_de.ts b/selfdrive/ui/translations/main_de.ts
index e4e811f38..374b9ed38 100644
--- a/selfdrive/ui/translations/main_de.ts
+++ b/selfdrive/ui/translations/main_de.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_es.ts b/selfdrive/ui/translations/main_es.ts
index 9710c9196..514b198da 100644
--- a/selfdrive/ui/translations/main_es.ts
+++ b/selfdrive/ui/translations/main_es.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_fr.ts b/selfdrive/ui/translations/main_fr.ts
index 44146b5d6..62b5daff9 100644
--- a/selfdrive/ui/translations/main_fr.ts
+++ b/selfdrive/ui/translations/main_fr.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_ja.ts b/selfdrive/ui/translations/main_ja.ts
index 9ad89d4c8..18212764a 100644
--- a/selfdrive/ui/translations/main_ja.ts
+++ b/selfdrive/ui/translations/main_ja.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_ko.ts b/selfdrive/ui/translations/main_ko.ts
index 65496a0d9..d42ea3756 100644
--- a/selfdrive/ui/translations/main_ko.ts
+++ b/selfdrive/ui/translations/main_ko.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_pt-BR.ts b/selfdrive/ui/translations/main_pt-BR.ts
index 1902dfb58..c791a6d47 100644
--- a/selfdrive/ui/translations/main_pt-BR.ts
+++ b/selfdrive/ui/translations/main_pt-BR.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_th.ts b/selfdrive/ui/translations/main_th.ts
index 008bc9302..9abfe19e7 100644
--- a/selfdrive/ui/translations/main_th.ts
+++ b/selfdrive/ui/translations/main_th.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_tr.ts b/selfdrive/ui/translations/main_tr.ts
index e52c1a398..0f6cb7752 100644
--- a/selfdrive/ui/translations/main_tr.ts
+++ b/selfdrive/ui/translations/main_tr.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_zh-CHS.ts b/selfdrive/ui/translations/main_zh-CHS.ts
index 95113595a..9974c883f 100644
--- a/selfdrive/ui/translations/main_zh-CHS.ts
+++ b/selfdrive/ui/translations/main_zh-CHS.ts
@@ -197,32 +197,6 @@ Reboot required.
Ctrl - Longitudinal
-
- Enable Slow Down on Curve
-
-
-
- When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
-See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
-Reboot required.
-
-
-
- Enable Dynamic End-to-End Longitudinal Control
-
-
-
- When enabled, openpilot will dynamically change between End-to-End or ACC mode.
-
-
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
On-Screen Personality Button
diff --git a/selfdrive/ui/translations/main_zh-CHT.qm b/selfdrive/ui/translations/main_zh-CHT.qm
index 5f73e048a..c08b9b21c 100644
Binary files a/selfdrive/ui/translations/main_zh-CHT.qm and b/selfdrive/ui/translations/main_zh-CHT.qm differ
diff --git a/selfdrive/ui/translations/main_zh-CHT.ts b/selfdrive/ui/translations/main_zh-CHT.ts
index 99cbbae95..6e3ddeae8 100644
--- a/selfdrive/ui/translations/main_zh-CHT.ts
+++ b/selfdrive/ui/translations/main_zh-CHT.ts
@@ -187,19 +187,19 @@ Reboot required.
Enable Slow Down on Curve
- 啟用彎道減速
+ 啟用彎道減速
When enabled, openpilot will reduce vehicle speed on curve road using algorithm found in taco2 branch.
See https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7 for more information.
Reboot required.
- 啟用後,Openpilot將使用在 taco2 分支中找到的算法,在彎道上減少車輛速度。
+ 啟用後,Openpilot將使用在 taco2 分支中找到的算法,在彎道上減少車輛速度。
詳細信息請查看https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7。
需要重新啟動。
Enable Dynamic End-to-End Longitudinal Control
- 啟用動態端到端縱向控制
+ 啟用動態端到端縱向控制
When enabled, openpilot will dynamically change between End-to-End or ACC mode.
@@ -510,7 +510,7 @@ Auto - Change lane automatically.
When enabled, openpilot will dynamically change between End-to-End or ACC mode.
- 啟用後,openpilot 將動態切換端到端或 ACC 模式。
+ 啟用後,openpilot 將動態切換端到端或 ACC 模式。
Enable Automatic Brake Hold
@@ -559,14 +559,6 @@ Internet required.
When enabled, openpilot will display speed camera warning using offline database.
啟用後,openpilot 將使用離線資料庫顯示測速照相警告。
-
- Enable Road Condition Detection
-
-
-
- When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.
-
-
Enable Auto Shutdown
diff --git a/selfdrive/ui/ui b/selfdrive/ui/ui
index 7a591845f..93d687138 100755
Binary files a/selfdrive/ui/ui and b/selfdrive/ui/ui differ
diff --git a/selfdrive/ui/watch3 b/selfdrive/ui/watch3
index 1af744113..854b0b66f 100755
Binary files a/selfdrive/ui/watch3 and b/selfdrive/ui/watch3 differ
diff --git a/system/loggerd/tests/test_logger b/system/loggerd/tests/test_logger
index f10444b75..74bb1107f 100755
Binary files a/system/loggerd/tests/test_logger and b/system/loggerd/tests/test_logger differ
diff --git a/system/updated/updated.py b/system/updated/updated.py
index e753fd76f..c87f79e66 100755
--- a/system/updated/updated.py
+++ b/system/updated/updated.py
@@ -271,13 +271,18 @@ class Updater:
def get_commit_hash(self, path: str = OVERLAY_MERGED) -> str:
return run(["git", "rev-parse", "HEAD"], path).rstrip()
+ def filter_branches(self, branches, prefixes):
+ return [branch for branch in branches if any(branch.startswith(prefix) for prefix in prefixes)]
+
def set_params(self, update_success: bool, failed_count: int, exception: str | None) -> None:
self.params.put("UpdateFailedCount", str(failed_count))
self.params.put("UpdaterTargetBranch", self.target_branch)
self.params.put_bool("UpdaterFetchAvailable", self.update_available)
if len(self.branches):
- self.params.put("UpdaterAvailableBranches", ','.join(self.branches.keys()))
+ allowed_prefixes = ['beta3', 'release3']
+ filtered_branches = self.filter_branches(self.branches.keys(), allowed_prefixes)
+ self.params.put("UpdaterAvailableBranches", ','.join(filtered_branches))
last_update = datetime.datetime.now(datetime.UTC).replace(tzinfo=None)
if update_success: