mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-10-01 03:43:42 +08:00
committed by
Comma Device
parent
65561d9eae
commit
9d48733d53
+3
-3
@@ -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:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
const uint8_t gitversion[8] = "93068c73";
|
||||
const uint8_t gitversion[8] = "93031df2";
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
const uint8_t gitversion[] = "DEV-93068c73-DEBUG";
|
||||
const uint8_t gitversion[] = "DEV-93031df2-DEBUG";
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
DEV-93068c73-DEBUG
|
||||
DEV-93031df2-DEBUG
|
||||
@@ -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)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
@@ -197,32 +197,6 @@ Reboot required.</source>
|
||||
<source>Ctrl - Longitudinal</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>On-Screen Personality Button</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
Binary file not shown.
@@ -187,19 +187,19 @@ Reboot required.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Slow Down on Curve</source>
|
||||
<translation>啟用彎道減速</translation>
|
||||
<translation type="vanished">啟用彎道減速</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>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.</source>
|
||||
<translation>啟用後,Openpilot將使用在 taco2 分支中找到的算法,在彎道上減少車輛速度。
|
||||
<translation type="vanished">啟用後,Openpilot將使用在 taco2 分支中找到的算法,在彎道上減少車輛速度。
|
||||
詳細信息請查看https://github.com/commaai/openpilot/commit/7b97ddb3aacb222bfaf0b978c49cb5b756903ef7。
|
||||
需要重新啟動。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Dynamic End-to-End Longitudinal Control</source>
|
||||
<translation>啟用動態端到端縱向控制</translation>
|
||||
<translation type="vanished">啟用動態端到端縱向控制</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.
|
||||
@@ -510,7 +510,7 @@ Auto - Change lane automatically.</source>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
|
||||
<translation>啟用後,openpilot 將動態切換端到端或 ACC 模式。</translation>
|
||||
<translation type="vanished">啟用後,openpilot 將動態切換端到端或 ACC 模式。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Automatic Brake Hold</source>
|
||||
@@ -559,14 +559,6 @@ Internet required.</source>
|
||||
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
|
||||
<translation>啟用後,openpilot 將使用離線資料庫顯示測速照相警告。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Road Condition Detection</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enable Auto Shutdown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user