Compare commits

..

1 Commits

Author SHA1 Message Date
Jason Wen fae5b7b914 sunnypilot v0.9.5.3 2023-12-24 20:30:25 +00:00
63 changed files with 4437 additions and 3528 deletions
+20 -5
View File
@@ -1,10 +1,22 @@
sunnypilot - 0.9.6.1 (2023-xx-xx)
sunnypilot - 0.9.5.3 (2023-12-24)
========================
* UPDATED: Dynamic Experimental Control (DEC)
* Synced with dragonpilot-community/dragonpilot:beta3 commit dd4c663
* Synced with dragonpilot-community/dragonpilot:lp-dp-beta2 commit 578d38b
* UPDATED: Driving Model Selector v2
* Driving models sort in descending order based on availability date
* Experimental/unmerged driving models are only available in "dev-c3" branch
* To select and use experimental driving models, navigate to "Software" panel, select the "dev-c3" branch, and check for update
* UPDATED: Vision-based Turn Speed Control (V-TSC) implementation
* Refactored implementation thanks to pfeiferj!
* More accurate and consistent velocity calculation to achieve smoother longitudinal control in curves
* NEW❗: Speed Limit Warning
* Display alert and/or chime to warn the driver when the cruising speed is faster than the speed limit plus the Warning Offset
* Customizable Warning Offset, independent of Speed Limit Control (SLC)'s Limit Offset
* UPDATED: Speed Limit Source Policy
* Selectable speed limit source for Speed Limit Control and Speed Limit Warning
* Applicable to: Speed Limit Control, Speed Limit Warning
* UPDATED: Speed Limit Control (SLC)
* Engage Mode: Removed "Warning Only" mode - this has been replaced by the new Speed Limit Warning sub-menu
* UPDATED: OpenStreetMap (OSM) implementation
* Refactored implementation thanks to pfeiferj!
* Less resource impact
@@ -15,12 +27,15 @@ sunnypilot - 0.9.6.1 (2023-xx-xx)
* C3X-specific changes
* Altitude (ALT.) display on Developer UI
* Current street name on top of driving screen when "OSM Debug UI" is enabled
* DISABLED: Map-based Turn Speed Control (M-TSC)
* Reimplementation in near future updates
* UPDATED: Map-based Turn Speed Control (M-TSC) implementation
* Only available in "staging-c3" and "dev-c3" branches. If you are using "release-c3" branch, navigate to "Software" panel, select the desired target branch, and check for update
* Refactored implementation thanks to pfeiferj!
* Based on the new OpenStreetMap implementation
* Improved predicted curvature calculations from OpenStreetMap data
* UI updates
* RE-ENABLED: Navigation: Full screen support
* Display the map view in full screen
* To switch back to driving view, tap on the border edge\
* To switch back to driving view, tap on the border edge
* Hyundai Bayon Non-SCC 2019 support thanks to polein78!
sunnypilot - 0.9.5.2 (2023-12-07)
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
#define COMMA_VERSION "0.9.6.1-staging"
#define COMMA_VERSION "0.9.5.3-release"
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.
+5 -2
View File
@@ -5,7 +5,8 @@ from openpilot.common.params import Params, put_bool_nonblocking
from openpilot.common.realtime import DT_CTRL
from openpilot.selfdrive.car import apply_meas_steer_torque_limits
from openpilot.selfdrive.car.chrysler import chryslercan
from openpilot.selfdrive.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags
from openpilot.selfdrive.car.chrysler.values import RAM_CARS, RAM_DT, CarControllerParams, ChryslerFlags, ChryslerFlagsSP
from openpilot.selfdrive.car.interfaces import FORWARD_GEARS
from openpilot.selfdrive.controls.lib.drive_helpers import FCA_V_CRUISE_MIN
BUTTONS_STATES = ["accelCruise", "decelCruise", "cancel", "resumeCruise"]
@@ -93,7 +94,7 @@ class CarController:
lkas_active = CC.latActive and CS.madsEnabled
if self.frame % 10 == 0 and self.CP.carFingerprint not in RAM_CARS:
can_sends.append(chryslercan.create_lkas_heartbit(self.packer, CS.madsEnabled, CS.lkas_heartbit))
can_sends.append(chryslercan.create_lkas_heartbit(self.packer, CS.lkas_disabled, CS.lkas_heartbit))
ram_cars = self.CP.carFingerprint in RAM_CARS
@@ -151,6 +152,8 @@ class CarController:
lkas_control_bit = True
if (self.CP.minEnableSpeed >= 14.5) and (CS.out.gearShifter != 2):
lkas_control_bit = False
elif self.CP.spFlags & ChryslerFlagsSP.SP_WP_S20:
lkas_control_bit = CC.latActive and CS.out.gearShifter in FORWARD_GEARS
elif CS.out.vEgo > self.CP.minSteerSpeed:
lkas_control_bit = True
elif self.CP.flags & ChryslerFlags.HIGHER_MIN_STEERING_SPEED:
+3
View File
@@ -24,6 +24,7 @@ class CarState(CarStateBase):
self.lkas_enabled = False
self.prev_lkas_enabled = False
self.lkas_heartbit = None
self.lkas_disabled = False
self.buttonStates = BUTTON_STATES.copy()
self.buttonStatesPrev = BUTTON_STATES.copy()
@@ -99,6 +100,8 @@ class CarState(CarStateBase):
else:
self.lkas_enabled = cp.vl["TRACTION_BUTTON"]["TOGGLE_LKAS"] == 1
self.lkas_heartbit = cp_cam.vl["LKAS_HEARTBIT"]
if not self.control_initialized:
self.lkas_disabled = bool(cp_cam.vl["LKAS_HEARTBIT"]["LKAS_DISABLED"])
ret.steerFaultTemporary = cp.vl["EPS_2"]["LKAS_TEMPORARY_FAULT"] == 1
ret.steerFaultPermanent = cp.vl["EPS_2"]["LKAS_STATE"] == 4
+2 -2
View File
@@ -81,8 +81,8 @@ def create_cruise_buttons(packer, frame, bus, CP, cruise_buttons_msg=None, butto
return packer.make_can_msg("CRUISE_BUTTONS", bus, values)
def create_lkas_heartbit(packer, mads_enabled, lkas_heartbit):
def create_lkas_heartbit(packer, lkas_disabled, lkas_heartbit):
# LKAS_HEARTBIT (697) LKAS heartbeat
values = lkas_heartbit.copy() # forward what we parsed
values["LKAS_DISABLED"] = 0 if mads_enabled else 1
values["LKAS_DISABLED"] = 1 if lkas_disabled else 0
return packer.make_can_msg("LKAS_HEARTBIT", 0, values)
+7 -1
View File
@@ -89,11 +89,15 @@ class CarInterface(CarInterfaceBase):
if ret.flags & ChryslerFlags.HIGHER_MIN_STEERING_SPEED:
# TODO: allow these cars to steer down to 13 m/s if already engaged.
ret.minSteerSpeed = 0.0 # m/s 17 on the way up, 13 on the way down once engaged.
ret.minSteerSpeed = 17.5 # m/s 17 on the way up, 13 on the way down once engaged.
ret.centerToFront = ret.wheelbase * 0.44
ret.enableBsm = 720 in fingerprint[0]
if 0x4FF in fingerprint[0]:
ret.spFlags |= ChryslerFlagsSP.SP_WP_S20.value
ret.minSteerSpeed = 0.0
return ret
def _update(self, c):
@@ -124,9 +128,11 @@ class CarInterface(CarInterfaceBase):
self.CS.madsEnabled = True
if self.CS.prev_lkas_enabled != 1 and self.CS.lkas_enabled == 1:
self.CS.madsEnabled = not self.CS.madsEnabled
self.CS.lkas_disabled = not self.CS.lkas_disabled
self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled)
else:
self.CS.madsEnabled = False
self.CS.madsEnabled = self.get_sp_started_mads(ret, self.CS)
if not self.CP.pcmCruise or (self.CP.pcmCruise and self.CP.minEnableSpeed > 0) or not self.CP.pcmCruiseSpeed:
if any(b.type == ButtonType.cancel for b in buttonEvents):
+1
View File
@@ -18,6 +18,7 @@ class ChryslerFlags(IntFlag):
class ChryslerFlagsSP(IntFlag):
SP_RAM_HD_PARAMSD_IGNORE = 1
SP_WP_S20 = 2
class CAR(StrEnum):
+24 -9
View File
@@ -40,6 +40,8 @@ TORQUE_NN_MODEL_PATH = os.path.join(BASEDIR, 'selfdrive/car/torque_data/lat_mode
ACTIVATION_FUNCTION_NAMES = {'σ': 'sigmoid'}
GAC_DICT = {1: 1, 2: 2, 3: 3}
FORWARD_GEARS = [GearShifter.drive, GearShifter.low, GearShifter.eco,
GearShifter.sport, GearShifter.manumatic, GearShifter.brake]
def similarity(s1: str, s2: str) -> float:
@@ -160,10 +162,10 @@ def get_nn_model_path(_car, eps_firmware) -> Tuple[Optional[str], float]:
else:
check_model = _car
model_path, max_similarity = check_nn_path(check_model)
if 0.0 <= max_similarity < 0.9:
if _car not in model_path or 0.0 <= max_similarity < 0.9:
check_model = _car
model_path, max_similarity = check_nn_path(check_model)
if 0.0 <= max_similarity < 0.9:
if _car not in model_path or 0.0 <= max_similarity < 0.9:
model_path = None
return model_path, max_similarity
@@ -268,8 +270,15 @@ class CarInterfaceBase(ABC):
eps_firmware = str(next((fw.fwVersion for fw in car_fw if fw.ecu == "eps"), ""))
model, similarity_score = get_nn_model_path(candidate, eps_firmware)
if model is not None:
ret.lateralTuning.torque.nnModelName = os.path.splitext(os.path.basename(model))[0]
ret.lateralTuning.torque.nnModelName = nn_model_name = os.path.splitext(os.path.basename(model))[0]
ret.lateralTuning.torque.nnModelFuzzyMatch = (similarity_score < 0.99)
if 'b\'' in nn_model_name:
nn_model, _ = nn_model_name.split('b\'')
else:
nn_model = nn_model_name
params.put("NNFFCarModel", nn_model)
else:
ret.lateralTuning.torque.nnModelName = "mock"
# Vehicle mass is published curb weight plus assumed payload such as a human driver; notCars have no assumed payload
if not ret.notCar:
@@ -552,19 +561,25 @@ class CarInterfaceBase(ABC):
return mads_enabled
def get_sp_started_mads(self, mads_enabled, cruiseState_available):
def get_sp_started_mads(self, cs_out, CS):
if not cs_out.cruiseState.available and CS.out.cruiseState.available:
self.madsEnabledInit = False
self.madsEnabledInitPrev = False
return False
if not self.mads_main_toggle or self.prev_acc_mads_combo:
return mads_enabled
if not self.madsEnabledInit and mads_enabled:
return CS.mads_enabled
if not self.madsEnabledInit and CS.mads_enabled:
self.madsEnabledInit = True
self.last_mads_init = time.monotonic()
if self.madsEnabledInit and not self.madsEnabledInitPrev:
if cs_out.gearShifter not in FORWARD_GEARS:
self.last_mads_init = time.monotonic()
if self.madsEnabledInit and (not self.madsEnabledInitPrev or cs_out.gearShifter not in FORWARD_GEARS):
if time.monotonic() < self.last_mads_init + 1.:
return False
self.madsEnabledInitPrev = True
return cruiseState_available
return cs_out.cruiseState.available
else:
return mads_enabled
return CS.mads_enabled
def get_sp_common_state(self, cs_out, CS, min_enable_speed_pcm=False, gear_allowed=True, gap_button=False):
cs_out.cruiseState.enabled = CS.accEnabled if not self.CP.pcmCruise or not self.CP.pcmCruiseSpeed or min_enable_speed_pcm else \
+3 -3
View File
@@ -50,7 +50,7 @@ class CarController:
actuators = CC.actuators
hud_control = CC.hudControl
pcm_cancel_cmd = CC.cruiseControl.cancel
lat_active = CC.latActive and abs(CS.out.steeringTorque) < MAX_USER_TORQUE
lat_active = CC.latActive and abs(CS.out.steeringTorque) < MAX_USER_TORQUE and abs(CS.out.steeringAngleDeg) < MAX_USER_TORQUE
# *** control msgs ***
can_sends = []
@@ -88,7 +88,7 @@ class CarController:
# toyota can trace shows this message at 42Hz, with counter adding alternatively 1 and 2;
# sending it at 100Hz seem to allow a higher rate limit, as the rate limit seems imposed
# on consecutive messages
can_sends.append(toyotacan.create_steer_command(self.packer, apply_steer, apply_steer_req))
can_sends.append(toyotacan.create_steer_command(self.packer, apply_steer, apply_steer_req and lat_active))
if self.frame % 2 == 0 and self.CP.carFingerprint in TSS2_CAR:
lta_active = lat_active and self.CP.steerControlType == SteerControlType.angle
full_torque_condition = (abs(CS.out.steeringTorqueEps) < self.params.STEER_MAX and
@@ -173,7 +173,7 @@ class CarController:
if self.frame % 20 == 0 or send_ui:
can_sends.append(toyotacan.create_ui_command(self.packer, steer_alert, pcm_cancel_cmd, hud_control.leftLaneVisible,
hud_control.rightLaneVisible, hud_control.leftLaneDepart,
hud_control.rightLaneDepart, CC.latActive, CS.lkas_hud, CS.madsEnabled))
hud_control.rightLaneDepart, CC.latActive and lat_active, CS.lkas_hud, CS.madsEnabled))
if (self.frame % 100 == 0 or send_ui) and (self.CP.enableDsu or self.CP.flags & ToyotaFlags.DISABLE_RADAR.value):
can_sends.append(toyotacan.create_fcw_command(self.packer, fcw_alert))
+1 -1
View File
@@ -263,9 +263,9 @@ class CarInterface(CarInterfaceBase):
self.CS.madsEnabled = True
self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled)
ret, self.CS = self.toggle_gac(ret, self.CS, bool(self.CS.gap_dist_button), 1, 3, 3, "-")
self.CS.madsEnabled = self.get_sp_started_mads(self.CS.madsEnabled, ret.cruiseState.available)
else:
self.CS.madsEnabled = False
self.CS.madsEnabled = self.get_sp_started_mads(ret, self.CS)
if not self.CP.pcmCruise or (self.CP.pcmCruise and self.CP.minEnableSpeed > 0) or not self.CP.pcmCruiseSpeed:
if any(b.type == ButtonType.cancel for b in buttonEvents):
@@ -21,7 +21,7 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# Version = 0.1.2
# Version = 2023-12-13
from common.numpy_fast import interp
from openpilot.selfdrive.controls.lib.lateral_planner import TRAJECTORY_SIZE
@@ -38,13 +38,16 @@ SLOWNESS_PROB = 0.6
SLOWNESS_CRUISE_OFFSET = 1.05
DANGEROUS_TTC_WINDOW_SIZE = 5
DANGEROUS_TTC = 1.55
DANGEROUS_TTC = 2.0
HIGHWAY_CRUISE_KPH = 75
STOP_AND_GO_FRAME = 500
STOP_AND_GO_FRAME = 60
MODE_SWITCH_DELAY_FRAME = 500
SET_MODE_TIMEOUT = 10
MPC_FCW_WINDOW_SIZE = 5
MPC_FCW_PROB = 0.6
class SNG_State:
@@ -80,8 +83,6 @@ class DynamicExperimentalController:
self._is_enabled = False
self._mode = 'acc'
self._mode_prev = 'acc'
self._mode_switch_allowed = True
self._mode_switch_frame = 0
self._frame = 0
self._lead_gmac = GenericMovingAverageCalculator(window_size=LEAD_WINDOW_SIZE)
@@ -90,41 +91,45 @@ class DynamicExperimentalController:
self._slow_down_gmac = GenericMovingAverageCalculator(window_size=SLOW_DOWN_WINDOW_SIZE)
self._has_slow_down = False
self._has_slow_down_prev = False
self._has_blinkers = False
self._has_blinkers_prev = False
self._slowness_gmac = GenericMovingAverageCalculator(window_size=SLOWNESS_WINDOW_SIZE)
self._has_slowness = False
self._has_slowness_prev = False
self._has_nav_enabled = False
self._has_nav_enabled_prev = False
self._dangerous_ttc_gmac = GenericMovingAverageCalculator(window_size=DANGEROUS_TTC_WINDOW_SIZE)
self._has_dangerous_ttc = False
self._has_dangerous_ttc_prev = False
self._v_ego_kph = 0.
self._v_cruise_kph = 0.
self._has_lead = False
self._has_lead_prev = False
self._has_standstill = False
self._has_standstill_prev = False
self._sng_transit_frame = 0
self._sng_state = SNG_State.off
self._mpc_fcw_gmac = GenericMovingAverageCalculator(window_size=MPC_FCW_WINDOW_SIZE)
self._has_mpc_fcw = False
self._mpc_fcw_crash_cnt = 0
self._set_mode_timeout = 0
pass
def _update(self, car_state, lead_one, md, controls_state, radar_unavailable):
def _update(self, car_state, lead_one, md, controls_state):
self._v_ego_kph = car_state.vEgo * 3.6
self._v_cruise_kph = controls_state.vCruise
self._has_lead = lead_one.status
self._has_standstill = car_state.standstill
# fcw detection
self._mpc_fcw_gmac.add_data(self._mpc_fcw_crash_cnt > 0)
self._has_mpc_fcw = self._mpc_fcw_gmac.get_moving_average() >= MPC_FCW_PROB
# nav enable detection
self._has_nav_enabled = md.navEnabled
@@ -154,8 +159,9 @@ class DynamicExperimentalController:
self._sng_transit_frame -= 1
# slowness detection
self._slowness_gmac.add_data(self._v_ego_kph <= (self._v_cruise_kph*SLOWNESS_CRUISE_OFFSET))
self._has_slowness = self._slowness_gmac.get_moving_average() >= SLOWNESS_PROB
if not self._has_standstill:
self._slowness_gmac.add_data(self._v_ego_kph <= (self._v_cruise_kph*SLOWNESS_CRUISE_OFFSET))
self._has_slowness = self._slowness_gmac.get_moving_average() >= SLOWNESS_PROB
# dangerous TTC detection
if not self._has_lead_filtered and self._has_lead_filtered_prev:
@@ -169,86 +175,94 @@ class DynamicExperimentalController:
# keep prev values
self._has_standstill_prev = self._has_standstill
self._has_slowness_prev = self._has_slowness
self._has_slow_down_prev = self._has_slow_down
self._has_lead_filtered_prev = self._has_lead_filtered
self._frame += 1
def _blended_priority_mode(self):
# when mpc fcw crash prob is high
# use blended to slow down quickly
if self._has_mpc_fcw:
self._set_mode('blended')
return
# when blinker is on and speed is driving below highway cruise speed: blended
# we don't want it to switch mode at higher speed, blended may trigger hard brake
# we dont want it to switch mode at higher speed, blended may trigger hard brake
if self._has_blinkers and self._v_ego_kph < HIGHWAY_CRUISE_KPH:
self._mode = 'blended'
self._set_mode('blended')
return
# when at highway cruise and SNG: blended
# ensuring blended mode is used because acc is bad at catching SNG lead car
# especially those that accel very fast and then brake very hard.
# especially those who accel very fast and then brake very hard.
if self._sng_state == SNG_State.going and self._v_cruise_kph >= HIGHWAY_CRUISE_KPH:
self._mode = 'blended'
self._set_mode('blended')
return
# when standstill: blended
# in case of lead car suddenly move away under traffic light, acc mode won't brake at traffic light.
# in case of lead car suddenly move away under traffic light, acc mode wont brake at traffic light.
if self._has_standstill:
self._mode = 'blended'
self._set_mode('blended')
return
# when detecting slow down scenario: blended
# e.g. traffic light, curve, stop sign etc.
if self._has_slow_down:
self._mode = 'blended'
self._set_mode('blended')
return
# when detecting lead slow down: blended
# use blended for higher braking capability
if self._has_dangerous_ttc:
self._mode = 'blended'
self._set_mode('blended')
return
# car driving at speed lower than set speed: acc
if self._has_slowness:
self._mode = 'acc'
self._set_mode('acc')
return
self._mode = 'blended'
self._set_mode('blended')
def _acc_priority_mode(self):
# when mpc fcw crash prob is high
# use blended to slow down quickly
if self._has_mpc_fcw:
self._set_mode('blended')
return
# If there is a filtered lead, the vehicle is not in standstill, and the lead vehicle's yRel meets the condition,
#if self._has_lead_filtered and not self._has_standstill:
# self._mode = 'acc'
# self._set_mode('acc')
# return
# when blinker is on and speed is driving below highway cruise speed: blended
# we don't want it to switch mode at higher speed, blended may trigger hard brake
# we dont want it to switch mode at higher speed, blended may trigger hard brake
if self._has_blinkers and self._v_ego_kph < HIGHWAY_CRUISE_KPH:
self._mode = 'blended'
self._set_mode('blended')
return
# when standstill: blended
# in case of lead car suddenly move away under traffic light, acc mode won't brake at traffic light.
# in case of lead car suddenly move away under traffic light, acc mode wont brake at traffic light.
if self._has_standstill:
self._mode = 'blended'
self._set_mode('blended')
return
# when detecting slow down scenario: blended
# e.g. traffic light, curve, stop sign etc.
if self._has_slow_down:
self._mode = 'blended'
self._set_mode('blended')
return
# car driving at speed lower than set speed: acc
if self._has_slowness:
self._mode = 'acc'
self._set_mode('acc')
return
self._mode = 'acc'
self._set_mode('acc')
def get_mpc_mode(self, radar_unavailable, car_state, lead_one, md, controls_state):
if self._is_enabled:
self._update(car_state, lead_one, md, controls_state, radar_unavailable)
if self._frame > self._mode_switch_frame:
self._mode_switch_allowed = True
self._update(car_state, lead_one, md, controls_state)
if radar_unavailable:
self._blended_priority_mode()
else:
@@ -262,3 +276,15 @@ class DynamicExperimentalController:
def is_enabled(self):
return self._is_enabled
def set_mpc_fcw_crash_cnt(self, crash_cnt):
self._mpc_fcw_crash_cnt = crash_cnt
def _set_mode(self, mode):
if self._set_mode_timeout == 0:
self._mode = mode
if mode == "blended":
self._set_mode_timeout = SET_MODE_TIMEOUT
if self._set_mode_timeout > 0:
self._set_mode_timeout -= 1
+1 -1
View File
@@ -261,7 +261,7 @@ def no_gps_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, m
def torque_nn_load_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int) -> Alert:
model_name = CP.lateralTuning.torque.nnModelName
if model_name == "":
if model_name in ("", "mock"):
return Alert(
"NN Lateral Controller Not Loaded",
'⚙️ -> "sunnypilot" for more details',
@@ -78,7 +78,7 @@ class LongitudinalPlanner:
self.cruise_source = 'cruise'
self.vision_turn_controller = VisionTurnController(CP)
self.speed_limit_controller = SpeedLimitController()
self.speed_limit_controller = SpeedLimitController(CP)
self.events = Events()
self.turn_speed_controller = TurnSpeedController()
self.dynamic_experimental_controller = DynamicExperimentalController()
@@ -229,9 +229,7 @@ class LongitudinalPlanner:
longitudinalPlanSP.events = self.events.to_msg()
longitudinalPlanSP.turnSpeedControlState = self.turn_speed_controller.state
longitudinalPlanSP.turnSpeed = float(self.turn_speed_controller.speed_limit)
longitudinalPlanSP.distToTurn = float(self.turn_speed_controller.distance)
longitudinalPlanSP.turnSign = int(self.turn_speed_controller.turn_sign)
longitudinalPlanSP.turnSpeed = float(self.turn_speed_controller.v_target)
longitudinalPlanSP.personality = self.personality
@@ -243,8 +241,8 @@ class LongitudinalPlanner:
# Update controllers
self.vision_turn_controller.update(enabled, v_ego, v_cruise, sm)
self.events = Events()
self.speed_limit_controller.update(enabled, v_ego, a_ego, sm, v_cruise, self.CP, self.events)
self.turn_speed_controller.update(enabled, v_ego, a_ego, sm)
self.speed_limit_controller.update(enabled, v_ego, a_ego, sm, v_cruise, self.events)
self.turn_speed_controller.update(enabled, v_ego, sm, v_cruise)
# Pick solution with the lowest velocity target.
v_solutions = {'cruise': v_cruise}
@@ -256,7 +254,7 @@ class LongitudinalPlanner:
v_solutions['limit'] = self.speed_limit_controller.speed_limit_offseted
if self.turn_speed_controller.is_active:
v_solutions['turnlimit'] = self.turn_speed_controller.speed_limit
v_solutions['turnlimit'] = self.turn_speed_controller.v_target
source = min(v_solutions, key=v_solutions.get)
@@ -16,3 +16,14 @@ class Policy(IntEnum):
map_data_priority = 4
car_state_priority = 5
combined = 6
class Engage(IntEnum):
auto = 0
user_confirm = 1
class OffsetType(IntEnum):
default = 0
fixed = 1
percentage = 2
@@ -1,13 +1,12 @@
import time
from common.numpy_fast import clip, interp
from common.conversions import Conversions as CV
from common.params import Params
from openpilot.common.conversions import Conversions as CV
from openpilot.common.numpy_fast import clip, interp
from openpilot.common.params import Params
from openpilot.selfdrive.controls.lib.sunnypilot import LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V, \
PARAMS_UPDATE_PERIOD, TEMP_INACTIVE_GUARD_PERIOD, EventName, SpeedLimitControlState
from openpilot.selfdrive.controls.lib.drive_helpers import LIMIT_MIN_ACC, LIMIT_MAX_ACC, LIMIT_SPEED_OFFSET_TH, \
CONTROL_N
from openpilot.selfdrive.controls.lib.drive_helpers import LIMIT_SPEED_OFFSET_TH, CONTROL_N
from openpilot.selfdrive.controls.lib.events import Events, ET
from openpilot.selfdrive.controls.lib.sunnypilot.common import Source, Policy
from openpilot.selfdrive.controls.lib.sunnypilot.common import Source, Policy, Engage, OffsetType
from openpilot.selfdrive.controls.lib.sunnypilot.helpers import description_for_state, debug
from openpilot.selfdrive.controls.lib.sunnypilot.speed_limit_resolver import SpeedLimitResolver
from openpilot.selfdrive.modeld.constants import ModelConstants
@@ -16,8 +15,9 @@ ACTIVE_STATES = (SpeedLimitControlState.active, SpeedLimitControlState.adapting)
class SpeedLimitController:
def __init__(self):
def __init__(self, CP):
self._params = Params()
self._CP = CP
self._policy = Policy(int(self._params.get("SpeedLimitControlPolicy", encoding='utf8')))
self._resolver = SpeedLimitResolver(self._policy)
self._last_params_update = 0.0
@@ -41,16 +41,21 @@ class SpeedLimitController:
self._state = SpeedLimitControlState.inactive
self._state_prev = SpeedLimitControlState.inactive
self._gas_pressed = False
self._pcm_cruise_op_long = CP.openpilotLongitudinalControl and CP.pcmCruise
self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8'))
self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8'))
self._engage_type = int(self._params.get("SpeedLimitEngageType", encoding='utf8'))
self._warning_type_type = int(self._params.get("SpeedLimitWarningType", encoding='utf8'))
self._warning_offset_type = int(self._params.get("SpeedLimitWarningOffsetType", encoding='utf8'))
self._warning_offset_value = float(self._params.get("SpeedLimitWarningValueOffset", encoding='utf8'))
self._engage_type = clip(int(self._params.get("SpeedLimitEngageType", encoding='utf8')), Engage.auto, Engage.user_confirm)
self._brake_pressed = False
self._brake_pressed_prev = False
self._current_time = 0.
self._v_cruise_rounded = 0.
self._v_cruise_prev_rounded = 0.
self._speed_limit_offsetted_rounded = 0.
self._speed_limit_warning_offsetted_rounded = 0.
self._ms_to_local = CV.MS_TO_KPH if self._is_metric else CV.MS_TO_MPH
# Mapping functions to state transitions
@@ -99,14 +104,24 @@ class SpeedLimitController:
@property
def speed_limit_offset(self):
if self._offset_type == 0:
if self._offset_type == OffsetType.default:
return interp(self._speed_limit, LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V) * self._speed_limit
elif self._offset_type == 1:
elif self._offset_type == OffsetType.fixed:
return self._offset_value * (CV.KPH_TO_MS if self._is_metric else CV.MPH_TO_MS)
elif self._offset_type == 2:
elif self._offset_type == OffsetType.percentage:
return self._offset_value * 0.01 * self._speed_limit
return 0.
@property
def speed_limit_warning_offset(self):
if self._warning_offset_type == OffsetType.default:
return interp(self._speed_limit, LIMIT_PERC_OFFSET_BP, LIMIT_PERC_OFFSET_V) * self._speed_limit
elif self._warning_offset_type == OffsetType.fixed:
return self._warning_offset_value * (CV.KPH_TO_MS if self._is_metric else CV.MPH_TO_MS)
elif self._warning_offset_type == OffsetType.percentage:
return self._warning_offset_value * 0.01 * self._speed_limit
return 0.
@property
def speed_limit(self):
return self._speed_limit
@@ -122,18 +137,19 @@ class SpeedLimitController:
def _update_v_cruise_setpoint_prev(self):
self._v_cruise_setpoint_prev = self._v_cruise_setpoint
def _update_params(self, CP):
def _update_params(self):
if self._current_time > self._last_params_update + PARAMS_UPDATE_PERIOD:
self._is_enabled = self._params.get_bool("EnableSlc")
self._offset_type = int(self._params.get("SpeedLimitOffsetType", encoding='utf8'))
self._offset_value = float(self._params.get("SpeedLimitValueOffset", encoding='utf8'))
self._warning_type_type = int(self._params.get("SpeedLimitWarningType", encoding='utf8'))
self._warning_offset_type = int(self._params.get("SpeedLimitWarningOffsetType", encoding='utf8'))
self._warning_offset_value = float(self._params.get("SpeedLimitWarningValueOffset", encoding='utf8'))
self._policy = Policy(int(self._params.get("SpeedLimitControlPolicy", encoding='utf8')))
self._is_metric = self._params.get_bool("IsMetric")
self._ms_to_local = CV.MS_TO_KPH if self._is_metric else CV.MS_TO_MPH
self._resolver.change_policy(self._policy)
pcm_cruise_op_long = CP.openpilotLongitudinalControl and CP.pcmCruise
self._engage_type = clip(int(self._params.get("SpeedLimitEngageType", encoding='utf8')), 0, 1) if pcm_cruise_op_long else \
int(self._params.get("SpeedLimitEngageType", encoding='utf8'))
self._engage_type = Engage.auto if self._pcm_cruise_op_long else clip(int(self._params.get("SpeedLimitEngageType", encoding='utf8')), Engage.auto, Engage.user_confirm)
debug(f'Updated Speed limit params. enabled: {self._is_enabled}, with offset: {self._offset_type}')
self._last_params_update = self._current_time
@@ -152,7 +168,7 @@ class SpeedLimitController:
self._speed_limit_changed = self._speed_limit != self._speed_limit_prev
self._v_cruise_setpoint_changed = self._v_cruise_setpoint != self._v_cruise_setpoint_prev
self._speed_limit_prev = self._speed_limit
if self._engage_type != 2:
if self._engage_type != Engage.user_confirm:
self._update_v_cruise_setpoint_prev()
self._op_enabled_prev = self._op_enabled
self._brake_pressed_prev = self._brake_pressed
@@ -160,16 +176,17 @@ class SpeedLimitController:
self._v_cruise_rounded = int(round(self._v_cruise_setpoint * self._ms_to_local))
self._v_cruise_prev_rounded = int(round(self._v_cruise_setpoint_prev * self._ms_to_local))
self._speed_limit_offsetted_rounded = int(0) if self._speed_limit == 0 else int(round((self._speed_limit + self.speed_limit_offset) * self._ms_to_local))
self._speed_limit_warning_offsetted_rounded = int(0) if self._speed_limit == 0 else int(round((self._speed_limit + self.speed_limit_warning_offset) * self._ms_to_local))
def transition_state_from_inactive(self):
""" Make state transition from inactive state """
if self._engage_type == 2:
if self._engage_type == Engage.user_confirm:
if (((self._last_op_enabled_time + 7.) >= self._current_time >= (self._last_op_enabled_time + 2.)) or
self._speed_limit_changed):
if self._speed_limit_changed:
self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation
self.state = SpeedLimitControlState.preActive
elif self._engage_type == 1:
elif self._engage_type == Engage.auto:
if self._v_offset < LIMIT_SPEED_OFFSET_TH:
self.state = SpeedLimitControlState.adapting
else:
@@ -178,10 +195,10 @@ class SpeedLimitController:
def transition_state_from_temp_inactive(self):
""" Make state transition from temporary inactive state """
if self._speed_limit_changed:
if self._engage_type == 2:
if self._engage_type == Engage.user_confirm:
self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation
self.state = SpeedLimitControlState.preActive
elif self._engage_type == 1:
elif self._engage_type == Engage.auto:
self.state = SpeedLimitControlState.inactive
def transition_state_from_pre_active(self):
@@ -207,14 +224,14 @@ class SpeedLimitController:
def transition_state_from_active(self):
""" Make state transition from active state """
if self._engage_type == 2:
if self._engage_type == Engage.user_confirm:
if self._state_prev == SpeedLimitControlState.active:
if self._v_cruise_setpoint_changed and self._v_cruise_rounded != self._speed_limit_offsetted_rounded:
self.state = SpeedLimitControlState.tempInactive
elif self._speed_limit_changed:
self._last_op_enabled_time = self._current_time - 2. # immediately prompt confirmation
self.state = SpeedLimitControlState.preActive
elif self._engage_type == 1:
elif self._engage_type == Engage.auto:
if self._v_offset < LIMIT_SPEED_OFFSET_TH:
self.state = SpeedLimitControlState.adapting
@@ -223,22 +240,22 @@ class SpeedLimitController:
# In any case, if op is disabled, or speed limit control is disabled
# or the reported speed limit is 0 or gas is pressed, deactivate.
if (not self._op_enabled or not self._is_enabled or self._speed_limit == 0 or
(self._gas_pressed and self._disengage_on_accelerator)) or self._engage_type == 0:
if not self._op_enabled or not self._is_enabled or self._speed_limit == 0 or \
(self._gas_pressed and self._disengage_on_accelerator):
self.state = SpeedLimitControlState.inactive
return
# In any case, we deactivate the speed limit controller temporarily if the user changes the cruise speed.
# Ignore if a minimum amount of time has not passed since activation. This is to prevent temp inactivations
# due to controlsd logic changing cruise setpoint when going active.
if self._engage_type == 1 and self._v_cruise_setpoint_changed and \
if self._engage_type == Engage.auto and self._v_cruise_setpoint_changed and \
self._current_time > (self._last_op_enabled_time + TEMP_INACTIVE_GUARD_PERIOD):
self.state = SpeedLimitControlState.tempInactive
return
self.state_transition_strategy[self.state]()
if self._engage_type == 2:
if self._engage_type == Engage.user_confirm:
self._update_v_cruise_setpoint_prev()
def get_current_acceleration_as_target(self):
@@ -257,22 +274,26 @@ class SpeedLimitController:
return self._v_offset / ModelConstants.T_IDXS[CONTROL_N]
def _update_events(self, events):
if self._speed_limit > 0 and self._warning_type_type == 2 and \
self._speed_limit_warning_offsetted_rounded < int(round(self._v_ego * self._ms_to_local)):
events.add(EventName.speedLimitPreActive)
if not self.is_active:
if self._state == SpeedLimitControlState.preActive and self._state_prev != SpeedLimitControlState.preActive and \
self._v_cruise_rounded != self._speed_limit_offsetted_rounded:
events.add(EventName.speedLimitPreActive)
else:
if self._engage_type == 2:
if self._engage_type == Engage.user_confirm:
if self._state_prev == SpeedLimitControlState.preActive:
events.add(EventName.speedLimitConfirmed)
events.add(EventName.speedLimitActive)
elif self._engage_type == 1:
elif self._engage_type == Engage.auto:
if self._state_prev not in ACTIVE_STATES:
events.add(EventName.speedLimitActive)
elif self._speed_limit_changed != 0:
events.add(EventName.speedLimitValueChange)
def update(self, enabled, v_ego, a_ego, sm, v_cruise_setpoint, CP, events=Events()):
def update(self, enabled, v_ego, a_ego, sm, v_cruise_setpoint, events=Events()):
_car_state = sm['carState']
self._op_enabled = sm['controlsState'].enabled and _car_state.cruiseState.enabled and \
not (_car_state.brakePressed and (not self._brake_pressed_prev or not _car_state.standstill)) and \
@@ -286,7 +307,7 @@ class SpeedLimitController:
self._speed_limit, self._distance, self._source = self._resolver.resolve(v_ego, self.speed_limit, sm)
self._update_params(CP)
self._update_params()
self._update_calculations()
self._state_transition()
self._update_events(events)
+181 -170
View File
@@ -1,56 +1,63 @@
import numpy as np
import json
import math
import time
from common.params import Params
from cereal import custom
from selfdrive.controls.lib.drive_helpers import LIMIT_ADAPT_ACC, LIMIT_MIN_SPEED, LIMIT_MAX_MAP_DATA_AGE, \
LIMIT_SPEED_OFFSET_TH, CONTROL_N, LIMIT_MIN_ACC, LIMIT_MAX_ACC
from openpilot.selfdrive.modeld.constants import ModelConstants
from openpilot.common.params import Params
from openpilot.system.version import is_release_sp_branch
R = 6373000.0 # approximate radius of earth in meters
TO_RADIANS = math.pi / 180
TO_DEGREES = 180 / math.pi
TARGET_JERK = -0.6 # m/s^3 There's some jounce limits that are not consistent so we're fudging this some
TARGET_ACCEL = -1.2 # m/s^2 should match up with the long planner limit
TARGET_OFFSET = 1.0 # seconds - This controls how soon before the curve you reach the target velocity. It also helps
# reach the target velocity when innacuracies in the distance modeling logic would cause overshoot.
# The value is multiplied against the target velocity to determine the additional distance. This is
# done to keep the distance calculations consistent but results in the offset actually being less
# time than specified depending on how much of a speed diffrential there is between v_ego and the
# target velocity.
_ACTIVE_LIMIT_MIN_ACC = -0.5 # m/s^2 Maximum deceleration allowed while active.
_ACTIVE_LIMIT_MAX_ACC = 0.5 # m/s^2 Maximum acelration allowed while active.
def calculate_accel(t, target_jerk, a_ego):
return a_ego + target_jerk * t
_DEBUG = False
def calculate_velocity(t, target_jerk, a_ego, v_ego):
return v_ego + a_ego * t + target_jerk/2 * (t ** 2)
def calculate_distance(t, target_jerk, a_ego, v_ego):
return t * v_ego + a_ego/2 * (t ** 2) + target_jerk/6 * (t ** 3)
PARAMS_UPDATE_PERIOD = 5.
TurnSpeedControlState = custom.LongitudinalPlanSP.SpeedLimitControlState
def _debug(msg):
if not _DEBUG:
return
print(msg)
# points should be in radians
# output is meters
def distance_to_point(ax, ay, bx, by):
a = math.sin((bx-ax)/2)*math.sin((bx-ax)/2) + math.cos(ax) * math.cos(bx)*math.sin((by-ay)/2)*math.sin((by-ay)/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
return R * c # in meters
def _description_for_state(turn_speed_control_state):
if turn_speed_control_state == TurnSpeedControlState.inactive:
return 'INACTIVE'
if turn_speed_control_state == TurnSpeedControlState.tempInactive:
return 'TEMP INACTIVE'
if turn_speed_control_state == TurnSpeedControlState.adapting:
return 'ADAPTING'
if turn_speed_control_state == TurnSpeedControlState.active:
return 'ACTIVE'
class TurnSpeedController():
class TurnSpeedController:
def __init__(self):
self._params = Params()
self._last_params_update = 0.
self._is_enabled = self._params.get_bool("TurnSpeedControl")
self.params = Params()
self.mem_params = Params("/dev/shm/params")
self.enabled = self.params.get_bool("TurnSpeedControl") and not is_release_sp_branch()
self.last_params_update = 0
self._op_enabled = False
self._v_ego = 0.
self._a_ego = 0.
self._v_cruise_setpoint = 0.
self._v_offset = 0.
self._speed_limit = 0.
self._speed_limit_temp_inactive = 0.
self._distance = 0.
self._turn_sign = 0
self._gas_pressed = False
self._state = TurnSpeedControlState.inactive
self._next_speed_limit_prev = 0.
self._v_cruise = 0
self._min_v = 0
self.target_lat = 0.0
self.target_lon = 0.0
self.target_v = 0.0
@property
def state(self):
@@ -58,18 +65,6 @@ class TurnSpeedController():
@state.setter
def state(self, value):
if value != self._state:
_debug(f'Turn Speed Controller state: {_description_for_state(value)}')
if value == TurnSpeedControlState.adapting:
_debug('TSC: Enteriing Adapting as speed offset is below threshold')
_debug(f'_v_offset: {self._v_offset * 3.6}\nspeed_limit: {self.speed_limit * 3.6}')
_debug(f'_v_ego: {self._v_ego * 3.6}\ndistance: {self.distance}')
if value == TurnSpeedControlState.tempInactive:
# Track the speed limit value when controller was set to temp inactive.
self._speed_limit_temp_inactive = self._speed_limit
self._state = value
@property
@@ -77,140 +72,156 @@ class TurnSpeedController():
return self.state > TurnSpeedControlState.tempInactive
@property
def speed_limit(self):
return max(self._speed_limit, LIMIT_MIN_SPEED) if self._speed_limit > 0. else 0.
def v_target(self):
return self._min_v
@property
def distance(self):
return max(self._distance, 0.)
@property
def turn_sign(self):
return self._turn_sign
def _get_limit_from_map_data(self, sm):
"""Provides the speed limit, distance and turn sign to it for turns based on map data.
"""
# Ignore if no live map data
sock = 'liveMapDataSP'
if sm.logMonoTime[sock] is None:
_debug('TS: No map data for turn speed limit')
return 0., 0., 0
# Load map_data and initialize
map_data = sm[sock]
speed_limit = 0.
# Calculate the age of the gps fix. Ignore if too old.
gps_fix_age = time.time() - map_data.lastGpsTimestamp * 1e-3
if gps_fix_age > LIMIT_MAX_MAP_DATA_AGE:
_debug(f'TS: Ignoring map data as is too old. Age: {gps_fix_age}')
return 0., 0., 0
# Load turn ahead sections info from map_data with distances corrected by gps_fix_age
distance_since_fix = self._v_ego * gps_fix_age
distances_to_sections_ahead = np.maximum(0., np.array(map_data.turnSpeedLimitsAheadDistances) - distance_since_fix)
speed_limit_in_sections_ahead = map_data.turnSpeedLimitsAhead
turn_signs_in_sections_ahead = map_data.turnSpeedLimitsAheadSigns
# Ensure current speed limit is considered only if we are inside the section.
if map_data.turnSpeedLimitValid and self._v_ego > 0.:
speed_limit_end_time = (map_data.turnSpeedLimitEndDistance / self._v_ego) - gps_fix_age
if speed_limit_end_time > 0.:
speed_limit = map_data.turnSpeedLimit
# When we have no ahead speed limit to consider or all are greater than current speed limit
# or car has stopped, then provide current value and reset tracking.
turn_sign = map_data.turnSpeedLimitSign if map_data.turnSpeedLimitValid else 0
if len(speed_limit_in_sections_ahead) == 0 or self._v_ego <= 0. or \
(speed_limit > 0 and np.amin(speed_limit_in_sections_ahead) > speed_limit):
self._next_speed_limit_prev = 0.
return speed_limit, 0., turn_sign
# Calculated the time needed to adapt to the limits ahead and the corresponding distances.
adapt_times = (np.maximum(speed_limit_in_sections_ahead, LIMIT_MIN_SPEED) - self._v_ego) / LIMIT_ADAPT_ACC
adapt_distances = self._v_ego * adapt_times + 0.5 * LIMIT_ADAPT_ACC * adapt_times**2
distance_gaps = distances_to_sections_ahead - adapt_distances
# We select as next speed limit, the one that have the lowest distance gap.
next_idx = np.argmin(distance_gaps)
next_speed_limit = speed_limit_in_sections_ahead[next_idx]
distance_to_section_ahead = distances_to_sections_ahead[next_idx]
next_turn_sign = turn_signs_in_sections_ahead[next_idx]
distance_gap = distance_gaps[next_idx]
# When we have a next_speed_limit value that has not changed from a provided next speed limit value
# in previous resolutions, we keep providing it along with the updated distance to it.
if next_speed_limit == self._next_speed_limit_prev:
return next_speed_limit, distance_to_section_ahead, next_turn_sign
# Reset tracking
self._next_speed_limit_prev = 0.
# When we detect we are close enough, we provide the next limit value and track it.
if distance_gap <= 0.:
self._next_speed_limit_prev = next_speed_limit
return next_speed_limit, distance_to_section_ahead, next_turn_sign
# Otherwise we just provide the calculated speed_limit
return speed_limit, 0., turn_sign
def _update_params(self):
def update_params(self):
t = time.monotonic()
if t > self._last_params_update + 5.0:
self._is_enabled = self._params.get_bool("TurnSpeedControl")
self._last_params_update = t
if t > self.last_params_update + PARAMS_UPDATE_PERIOD:
self.enabled = self.params.get_bool("TurnSpeedControl") and not is_release_sp_branch()
self.last_params_update = t
def _update_calculations(self):
# Update current velocity offset (error)
self._v_offset = self.speed_limit - self._v_ego
def target_speed(self, v_ego, a_ego) -> float:
if not self.enabled:
return 0.0
def _state_transition(self, sm):
# In any case, if op is disabled, or turn speed limit control is disabled
# or the reported speed limit is 0, deactivate.
if not self._op_enabled or not self._is_enabled or self.speed_limit == 0.:
lat = 0.0
lon = 0.0
try:
position = json.loads(self.mem_params.get("LastGPSPosition"))
lat = position["latitude"]
lon = position["longitude"]
except: return 0.0
try:
target_velocities = json.loads(self.mem_params.get("MapTargetVelocities"))
except: return 0.0
min_dist = 1000
min_idx = 0
distances = []
# find our location in the path
for i in range(len(target_velocities)):
target_velocity = target_velocities[i]
tlat = target_velocity["latitude"]
tlon = target_velocity["longitude"]
d = distance_to_point(lat * TO_RADIANS, lon * TO_RADIANS, tlat * TO_RADIANS, tlon * TO_RADIANS)
distances.append(d)
if d < min_dist:
min_dist = d
min_idx = i
# only look at values from our current position forward
forward_points = target_velocities[min_idx:]
forward_distances = distances[min_idx:]
# find velocities that we are within the distance we need to adjust for
valid_velocities = []
for i in range(len(forward_points)):
target_velocity = forward_points[i]
tlat = target_velocity["latitude"]
tlon = target_velocity["longitude"]
tv = target_velocity["velocity"]
if tv > v_ego:
continue
d = forward_distances[i]
a_diff = (a_ego - TARGET_ACCEL)
accel_t = abs(a_diff / TARGET_JERK)
min_accel_v = calculate_velocity(accel_t, TARGET_JERK, a_ego, v_ego)
max_d = 0
if tv > min_accel_v:
# calculate time needed based on target jerk
a = 0.5 * TARGET_JERK
b = a_ego
c = v_ego - tv
t_a = -1 * ((b**2 - 4 * a * c) ** 0.5 + b) / 2 * a
t_b = ((b**2 - 4 * a * c) ** 0.5 - b) / 2 * a
if not isinstance(t_a, complex) and t_a > 0:
t = t_a
else:
t = t_b
if isinstance(t, complex):
continue
max_d = max_d + calculate_distance(t, TARGET_JERK, a_ego, v_ego)
else:
t = accel_t
max_d = calculate_distance(t, TARGET_JERK, a_ego, v_ego)
# calculate additional time needed based on target accel
t = abs((min_accel_v - tv) / TARGET_ACCEL)
max_d += calculate_distance(t, 0, TARGET_ACCEL, min_accel_v)
if d < max_d + tv * TARGET_OFFSET:
valid_velocities.append((float(tv), tlat, tlon))
# Find the smallest velocity we need to adjust for
min_v = 100.0
target_lat = 0.0
target_lon = 0.0
for tv, lat, lon in valid_velocities:
if tv < min_v:
min_v = tv
target_lat = lat
target_lon = lon
if self.target_v < min_v and not (self.target_lat == 0 and self.target_lon == 0):
for i in range(len(forward_points)):
target_velocity = forward_points[i]
tlat = target_velocity["latitude"]
tlon = target_velocity["longitude"]
tv = target_velocity["velocity"]
if tv > v_ego:
continue
if tlat == self.target_lat and tlon == self.target_lon and tv == self.target_v:
return float(self.target_v)
# not found so lets reset
self.target_v = 0.0
self.target_lat = 0.0
self.target_lon = 0.0
self.target_v = min_v
self.target_lat = target_lat
self.target_lon = target_lon
return min_v
def _state_transition(self):
if not self._op_enabled or not self.enabled:
self.state = TurnSpeedControlState.inactive
return
# In any case, we deactivate the speed limit controller temporarily
# if gas is pressed (to support gas override implementations).
if sm['carState'].gasPressed:
if self._gas_pressed:
self.state = TurnSpeedControlState.tempInactive
return
# inactive
# INACTIVE
if self.state == TurnSpeedControlState.inactive:
# If the limit speed offset is negative (i.e. reduce speed) and lower than threshold and distanct to turn limit
# is positive (not in turn yet) we go to adapting state to reduce speed, otherwise we go directly to active
if self._v_offset < LIMIT_SPEED_OFFSET_TH and self.distance > 0.:
self.state = TurnSpeedControlState.adapting
else:
if self._v_cruise > self._min_v != 0:
self.state = TurnSpeedControlState.active
# tempInactive
# TEMP INACTIVE
elif self.state == TurnSpeedControlState.tempInactive:
# if the speed limit recorded when going to temp Inactive changes
# then set to inactive, activation will happen on next cycle
if self._speed_limit != self._speed_limit_temp_inactive:
self.state = TurnSpeedControlState.inactive
# adapting
elif self.state == TurnSpeedControlState.adapting:
# Go to active once the speed offset is over threshold or the distance to turn is now 0.
if self._v_offset >= LIMIT_SPEED_OFFSET_TH or self.distance == 0.:
if self._v_cruise > self._min_v != 0:
self.state = TurnSpeedControlState.active
# active
else:
self.state = TurnSpeedControlState.inactive
# ACTIVE
elif self.state == TurnSpeedControlState.active:
# Go to adapting if the speed offset goes below threshold as long as the distance to turn is still positive.
if self._v_offset < LIMIT_SPEED_OFFSET_TH and self.distance > 0.:
self.state = TurnSpeedControlState.adapting
if not (self._v_cruise > self._min_v != 0):
self.state = TurnSpeedControlState.inactive
def update(self, enabled, v_ego, a_ego, sm):
self._op_enabled = enabled
self._v_ego = v_ego
self._a_ego = a_ego
def update(self, op_enabled, v_ego, sm, v_cruise):
self.update_params()
self._op_enabled = op_enabled
self._gas_pressed = sm['carState'].gasPressed
self._v_cruise = v_cruise
self._min_v = self.target_speed(v_ego, sm['carState'].aEgo)
# Get the speed limit from Map Data
self._speed_limit, self._distance, self._turn_sign = self._get_limit_from_map_data(sm)
self._update_params()
self._update_calculations()
self._state_transition(sm)
self._state_transition()
Binary file not shown.
+342 -342
View File
@@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
void err_fun(double *nom_x, double *delta_x, double *out_5539204589909662238) {
out_5539204589909662238[0] = delta_x[0] + nom_x[0];
out_5539204589909662238[1] = delta_x[1] + nom_x[1];
out_5539204589909662238[2] = delta_x[2] + nom_x[2];
out_5539204589909662238[3] = delta_x[3] + nom_x[3];
out_5539204589909662238[4] = delta_x[4] + nom_x[4];
out_5539204589909662238[5] = delta_x[5] + nom_x[5];
out_5539204589909662238[6] = delta_x[6] + nom_x[6];
out_5539204589909662238[7] = delta_x[7] + nom_x[7];
out_5539204589909662238[8] = delta_x[8] + nom_x[8];
void err_fun(double *nom_x, double *delta_x, double *out_1027636603068461502) {
out_1027636603068461502[0] = delta_x[0] + nom_x[0];
out_1027636603068461502[1] = delta_x[1] + nom_x[1];
out_1027636603068461502[2] = delta_x[2] + nom_x[2];
out_1027636603068461502[3] = delta_x[3] + nom_x[3];
out_1027636603068461502[4] = delta_x[4] + nom_x[4];
out_1027636603068461502[5] = delta_x[5] + nom_x[5];
out_1027636603068461502[6] = delta_x[6] + nom_x[6];
out_1027636603068461502[7] = delta_x[7] + nom_x[7];
out_1027636603068461502[8] = delta_x[8] + nom_x[8];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_6836761615042086214) {
out_6836761615042086214[0] = -nom_x[0] + true_x[0];
out_6836761615042086214[1] = -nom_x[1] + true_x[1];
out_6836761615042086214[2] = -nom_x[2] + true_x[2];
out_6836761615042086214[3] = -nom_x[3] + true_x[3];
out_6836761615042086214[4] = -nom_x[4] + true_x[4];
out_6836761615042086214[5] = -nom_x[5] + true_x[5];
out_6836761615042086214[6] = -nom_x[6] + true_x[6];
out_6836761615042086214[7] = -nom_x[7] + true_x[7];
out_6836761615042086214[8] = -nom_x[8] + true_x[8];
void inv_err_fun(double *nom_x, double *true_x, double *out_2498107869525935257) {
out_2498107869525935257[0] = -nom_x[0] + true_x[0];
out_2498107869525935257[1] = -nom_x[1] + true_x[1];
out_2498107869525935257[2] = -nom_x[2] + true_x[2];
out_2498107869525935257[3] = -nom_x[3] + true_x[3];
out_2498107869525935257[4] = -nom_x[4] + true_x[4];
out_2498107869525935257[5] = -nom_x[5] + true_x[5];
out_2498107869525935257[6] = -nom_x[6] + true_x[6];
out_2498107869525935257[7] = -nom_x[7] + true_x[7];
out_2498107869525935257[8] = -nom_x[8] + true_x[8];
}
void H_mod_fun(double *state, double *out_5300350899020605715) {
out_5300350899020605715[0] = 1.0;
out_5300350899020605715[1] = 0;
out_5300350899020605715[2] = 0;
out_5300350899020605715[3] = 0;
out_5300350899020605715[4] = 0;
out_5300350899020605715[5] = 0;
out_5300350899020605715[6] = 0;
out_5300350899020605715[7] = 0;
out_5300350899020605715[8] = 0;
out_5300350899020605715[9] = 0;
out_5300350899020605715[10] = 1.0;
out_5300350899020605715[11] = 0;
out_5300350899020605715[12] = 0;
out_5300350899020605715[13] = 0;
out_5300350899020605715[14] = 0;
out_5300350899020605715[15] = 0;
out_5300350899020605715[16] = 0;
out_5300350899020605715[17] = 0;
out_5300350899020605715[18] = 0;
out_5300350899020605715[19] = 0;
out_5300350899020605715[20] = 1.0;
out_5300350899020605715[21] = 0;
out_5300350899020605715[22] = 0;
out_5300350899020605715[23] = 0;
out_5300350899020605715[24] = 0;
out_5300350899020605715[25] = 0;
out_5300350899020605715[26] = 0;
out_5300350899020605715[27] = 0;
out_5300350899020605715[28] = 0;
out_5300350899020605715[29] = 0;
out_5300350899020605715[30] = 1.0;
out_5300350899020605715[31] = 0;
out_5300350899020605715[32] = 0;
out_5300350899020605715[33] = 0;
out_5300350899020605715[34] = 0;
out_5300350899020605715[35] = 0;
out_5300350899020605715[36] = 0;
out_5300350899020605715[37] = 0;
out_5300350899020605715[38] = 0;
out_5300350899020605715[39] = 0;
out_5300350899020605715[40] = 1.0;
out_5300350899020605715[41] = 0;
out_5300350899020605715[42] = 0;
out_5300350899020605715[43] = 0;
out_5300350899020605715[44] = 0;
out_5300350899020605715[45] = 0;
out_5300350899020605715[46] = 0;
out_5300350899020605715[47] = 0;
out_5300350899020605715[48] = 0;
out_5300350899020605715[49] = 0;
out_5300350899020605715[50] = 1.0;
out_5300350899020605715[51] = 0;
out_5300350899020605715[52] = 0;
out_5300350899020605715[53] = 0;
out_5300350899020605715[54] = 0;
out_5300350899020605715[55] = 0;
out_5300350899020605715[56] = 0;
out_5300350899020605715[57] = 0;
out_5300350899020605715[58] = 0;
out_5300350899020605715[59] = 0;
out_5300350899020605715[60] = 1.0;
out_5300350899020605715[61] = 0;
out_5300350899020605715[62] = 0;
out_5300350899020605715[63] = 0;
out_5300350899020605715[64] = 0;
out_5300350899020605715[65] = 0;
out_5300350899020605715[66] = 0;
out_5300350899020605715[67] = 0;
out_5300350899020605715[68] = 0;
out_5300350899020605715[69] = 0;
out_5300350899020605715[70] = 1.0;
out_5300350899020605715[71] = 0;
out_5300350899020605715[72] = 0;
out_5300350899020605715[73] = 0;
out_5300350899020605715[74] = 0;
out_5300350899020605715[75] = 0;
out_5300350899020605715[76] = 0;
out_5300350899020605715[77] = 0;
out_5300350899020605715[78] = 0;
out_5300350899020605715[79] = 0;
out_5300350899020605715[80] = 1.0;
void H_mod_fun(double *state, double *out_2880487860269583385) {
out_2880487860269583385[0] = 1.0;
out_2880487860269583385[1] = 0;
out_2880487860269583385[2] = 0;
out_2880487860269583385[3] = 0;
out_2880487860269583385[4] = 0;
out_2880487860269583385[5] = 0;
out_2880487860269583385[6] = 0;
out_2880487860269583385[7] = 0;
out_2880487860269583385[8] = 0;
out_2880487860269583385[9] = 0;
out_2880487860269583385[10] = 1.0;
out_2880487860269583385[11] = 0;
out_2880487860269583385[12] = 0;
out_2880487860269583385[13] = 0;
out_2880487860269583385[14] = 0;
out_2880487860269583385[15] = 0;
out_2880487860269583385[16] = 0;
out_2880487860269583385[17] = 0;
out_2880487860269583385[18] = 0;
out_2880487860269583385[19] = 0;
out_2880487860269583385[20] = 1.0;
out_2880487860269583385[21] = 0;
out_2880487860269583385[22] = 0;
out_2880487860269583385[23] = 0;
out_2880487860269583385[24] = 0;
out_2880487860269583385[25] = 0;
out_2880487860269583385[26] = 0;
out_2880487860269583385[27] = 0;
out_2880487860269583385[28] = 0;
out_2880487860269583385[29] = 0;
out_2880487860269583385[30] = 1.0;
out_2880487860269583385[31] = 0;
out_2880487860269583385[32] = 0;
out_2880487860269583385[33] = 0;
out_2880487860269583385[34] = 0;
out_2880487860269583385[35] = 0;
out_2880487860269583385[36] = 0;
out_2880487860269583385[37] = 0;
out_2880487860269583385[38] = 0;
out_2880487860269583385[39] = 0;
out_2880487860269583385[40] = 1.0;
out_2880487860269583385[41] = 0;
out_2880487860269583385[42] = 0;
out_2880487860269583385[43] = 0;
out_2880487860269583385[44] = 0;
out_2880487860269583385[45] = 0;
out_2880487860269583385[46] = 0;
out_2880487860269583385[47] = 0;
out_2880487860269583385[48] = 0;
out_2880487860269583385[49] = 0;
out_2880487860269583385[50] = 1.0;
out_2880487860269583385[51] = 0;
out_2880487860269583385[52] = 0;
out_2880487860269583385[53] = 0;
out_2880487860269583385[54] = 0;
out_2880487860269583385[55] = 0;
out_2880487860269583385[56] = 0;
out_2880487860269583385[57] = 0;
out_2880487860269583385[58] = 0;
out_2880487860269583385[59] = 0;
out_2880487860269583385[60] = 1.0;
out_2880487860269583385[61] = 0;
out_2880487860269583385[62] = 0;
out_2880487860269583385[63] = 0;
out_2880487860269583385[64] = 0;
out_2880487860269583385[65] = 0;
out_2880487860269583385[66] = 0;
out_2880487860269583385[67] = 0;
out_2880487860269583385[68] = 0;
out_2880487860269583385[69] = 0;
out_2880487860269583385[70] = 1.0;
out_2880487860269583385[71] = 0;
out_2880487860269583385[72] = 0;
out_2880487860269583385[73] = 0;
out_2880487860269583385[74] = 0;
out_2880487860269583385[75] = 0;
out_2880487860269583385[76] = 0;
out_2880487860269583385[77] = 0;
out_2880487860269583385[78] = 0;
out_2880487860269583385[79] = 0;
out_2880487860269583385[80] = 1.0;
}
void f_fun(double *state, double dt, double *out_7290139574394395979) {
out_7290139574394395979[0] = state[0];
out_7290139574394395979[1] = state[1];
out_7290139574394395979[2] = state[2];
out_7290139574394395979[3] = state[3];
out_7290139574394395979[4] = state[4];
out_7290139574394395979[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
out_7290139574394395979[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
out_7290139574394395979[7] = state[7];
out_7290139574394395979[8] = state[8];
void f_fun(double *state, double dt, double *out_8985245024092687483) {
out_8985245024092687483[0] = state[0];
out_8985245024092687483[1] = state[1];
out_8985245024092687483[2] = state[2];
out_8985245024092687483[3] = state[3];
out_8985245024092687483[4] = state[4];
out_8985245024092687483[5] = dt*((-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]))*state[6] - 9.8000000000000007*state[8] + stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*state[1]) + (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*state[4])) + state[5];
out_8985245024092687483[6] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*state[4])) + state[6];
out_8985245024092687483[7] = state[7];
out_8985245024092687483[8] = state[8];
}
void F_fun(double *state, double dt, double *out_3369922846592360961) {
out_3369922846592360961[0] = 1;
out_3369922846592360961[1] = 0;
out_3369922846592360961[2] = 0;
out_3369922846592360961[3] = 0;
out_3369922846592360961[4] = 0;
out_3369922846592360961[5] = 0;
out_3369922846592360961[6] = 0;
out_3369922846592360961[7] = 0;
out_3369922846592360961[8] = 0;
out_3369922846592360961[9] = 0;
out_3369922846592360961[10] = 1;
out_3369922846592360961[11] = 0;
out_3369922846592360961[12] = 0;
out_3369922846592360961[13] = 0;
out_3369922846592360961[14] = 0;
out_3369922846592360961[15] = 0;
out_3369922846592360961[16] = 0;
out_3369922846592360961[17] = 0;
out_3369922846592360961[18] = 0;
out_3369922846592360961[19] = 0;
out_3369922846592360961[20] = 1;
out_3369922846592360961[21] = 0;
out_3369922846592360961[22] = 0;
out_3369922846592360961[23] = 0;
out_3369922846592360961[24] = 0;
out_3369922846592360961[25] = 0;
out_3369922846592360961[26] = 0;
out_3369922846592360961[27] = 0;
out_3369922846592360961[28] = 0;
out_3369922846592360961[29] = 0;
out_3369922846592360961[30] = 1;
out_3369922846592360961[31] = 0;
out_3369922846592360961[32] = 0;
out_3369922846592360961[33] = 0;
out_3369922846592360961[34] = 0;
out_3369922846592360961[35] = 0;
out_3369922846592360961[36] = 0;
out_3369922846592360961[37] = 0;
out_3369922846592360961[38] = 0;
out_3369922846592360961[39] = 0;
out_3369922846592360961[40] = 1;
out_3369922846592360961[41] = 0;
out_3369922846592360961[42] = 0;
out_3369922846592360961[43] = 0;
out_3369922846592360961[44] = 0;
out_3369922846592360961[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
out_3369922846592360961[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_3369922846592360961[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_3369922846592360961[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_3369922846592360961[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
out_3369922846592360961[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_3369922846592360961[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_3369922846592360961[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_3369922846592360961[53] = -9.8000000000000007*dt;
out_3369922846592360961[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
out_3369922846592360961[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_3369922846592360961[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3369922846592360961[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3369922846592360961[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
out_3369922846592360961[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_3369922846592360961[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
out_3369922846592360961[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3369922846592360961[62] = 0;
out_3369922846592360961[63] = 0;
out_3369922846592360961[64] = 0;
out_3369922846592360961[65] = 0;
out_3369922846592360961[66] = 0;
out_3369922846592360961[67] = 0;
out_3369922846592360961[68] = 0;
out_3369922846592360961[69] = 0;
out_3369922846592360961[70] = 1;
out_3369922846592360961[71] = 0;
out_3369922846592360961[72] = 0;
out_3369922846592360961[73] = 0;
out_3369922846592360961[74] = 0;
out_3369922846592360961[75] = 0;
out_3369922846592360961[76] = 0;
out_3369922846592360961[77] = 0;
out_3369922846592360961[78] = 0;
out_3369922846592360961[79] = 0;
out_3369922846592360961[80] = 1;
void F_fun(double *state, double dt, double *out_135664326016666632) {
out_135664326016666632[0] = 1;
out_135664326016666632[1] = 0;
out_135664326016666632[2] = 0;
out_135664326016666632[3] = 0;
out_135664326016666632[4] = 0;
out_135664326016666632[5] = 0;
out_135664326016666632[6] = 0;
out_135664326016666632[7] = 0;
out_135664326016666632[8] = 0;
out_135664326016666632[9] = 0;
out_135664326016666632[10] = 1;
out_135664326016666632[11] = 0;
out_135664326016666632[12] = 0;
out_135664326016666632[13] = 0;
out_135664326016666632[14] = 0;
out_135664326016666632[15] = 0;
out_135664326016666632[16] = 0;
out_135664326016666632[17] = 0;
out_135664326016666632[18] = 0;
out_135664326016666632[19] = 0;
out_135664326016666632[20] = 1;
out_135664326016666632[21] = 0;
out_135664326016666632[22] = 0;
out_135664326016666632[23] = 0;
out_135664326016666632[24] = 0;
out_135664326016666632[25] = 0;
out_135664326016666632[26] = 0;
out_135664326016666632[27] = 0;
out_135664326016666632[28] = 0;
out_135664326016666632[29] = 0;
out_135664326016666632[30] = 1;
out_135664326016666632[31] = 0;
out_135664326016666632[32] = 0;
out_135664326016666632[33] = 0;
out_135664326016666632[34] = 0;
out_135664326016666632[35] = 0;
out_135664326016666632[36] = 0;
out_135664326016666632[37] = 0;
out_135664326016666632[38] = 0;
out_135664326016666632[39] = 0;
out_135664326016666632[40] = 1;
out_135664326016666632[41] = 0;
out_135664326016666632[42] = 0;
out_135664326016666632[43] = 0;
out_135664326016666632[44] = 0;
out_135664326016666632[45] = dt*(stiffness_front*(-state[2] - state[3] + state[7])/(mass*state[1]) + (-stiffness_front - stiffness_rear)*state[5]/(mass*state[4]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[6]/(mass*state[4]));
out_135664326016666632[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_135664326016666632[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_135664326016666632[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_135664326016666632[49] = dt*((-1 - (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*pow(state[4], 2)))*state[6] - (-stiffness_front*state[0] - stiffness_rear*state[0])*state[5]/(mass*pow(state[4], 2)));
out_135664326016666632[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_135664326016666632[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_135664326016666632[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_135664326016666632[53] = -9.8000000000000007*dt;
out_135664326016666632[54] = dt*(center_to_front*stiffness_front*(-state[2] - state[3] + state[7])/(rotational_inertia*state[1]) + (-center_to_front*stiffness_front + center_to_rear*stiffness_rear)*state[5]/(rotational_inertia*state[4]) + (-pow(center_to_front, 2)*stiffness_front - pow(center_to_rear, 2)*stiffness_rear)*state[6]/(rotational_inertia*state[4]));
out_135664326016666632[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_135664326016666632[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_135664326016666632[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_135664326016666632[58] = dt*(-(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])*state[5]/(rotational_inertia*pow(state[4], 2)) - (-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])*state[6]/(rotational_inertia*pow(state[4], 2)));
out_135664326016666632[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_135664326016666632[60] = dt*(-pow(center_to_front, 2)*stiffness_front*state[0] - pow(center_to_rear, 2)*stiffness_rear*state[0])/(rotational_inertia*state[4]) + 1;
out_135664326016666632[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_135664326016666632[62] = 0;
out_135664326016666632[63] = 0;
out_135664326016666632[64] = 0;
out_135664326016666632[65] = 0;
out_135664326016666632[66] = 0;
out_135664326016666632[67] = 0;
out_135664326016666632[68] = 0;
out_135664326016666632[69] = 0;
out_135664326016666632[70] = 1;
out_135664326016666632[71] = 0;
out_135664326016666632[72] = 0;
out_135664326016666632[73] = 0;
out_135664326016666632[74] = 0;
out_135664326016666632[75] = 0;
out_135664326016666632[76] = 0;
out_135664326016666632[77] = 0;
out_135664326016666632[78] = 0;
out_135664326016666632[79] = 0;
out_135664326016666632[80] = 1;
}
void h_25(double *state, double *unused, double *out_213866987500689272) {
out_213866987500689272[0] = state[6];
void h_25(double *state, double *unused, double *out_1339936627130384923) {
out_1339936627130384923[0] = state[6];
}
void H_25(double *state, double *unused, double *out_8338833395014389035) {
out_8338833395014389035[0] = 0;
out_8338833395014389035[1] = 0;
out_8338833395014389035[2] = 0;
out_8338833395014389035[3] = 0;
out_8338833395014389035[4] = 0;
out_8338833395014389035[5] = 0;
out_8338833395014389035[6] = 1;
out_8338833395014389035[7] = 0;
out_8338833395014389035[8] = 0;
void H_25(double *state, double *unused, double *out_8541205388556229655) {
out_8541205388556229655[0] = 0;
out_8541205388556229655[1] = 0;
out_8541205388556229655[2] = 0;
out_8541205388556229655[3] = 0;
out_8541205388556229655[4] = 0;
out_8541205388556229655[5] = 0;
out_8541205388556229655[6] = 1;
out_8541205388556229655[7] = 0;
out_8541205388556229655[8] = 0;
}
void h_24(double *state, double *unused, double *out_6813311767306827479) {
out_6813311767306827479[0] = state[4];
out_6813311767306827479[1] = state[5];
void h_24(double *state, double *unused, double *out_7843416543337357224) {
out_7843416543337357224[0] = state[4];
out_7843416543337357224[1] = state[5];
}
void H_24(double *state, double *unused, double *out_3470018529986682183) {
out_3470018529986682183[0] = 0;
out_3470018529986682183[1] = 0;
out_3470018529986682183[2] = 0;
out_3470018529986682183[3] = 0;
out_3470018529986682183[4] = 1;
out_3470018529986682183[5] = 0;
out_3470018529986682183[6] = 0;
out_3470018529986682183[7] = 0;
out_3470018529986682183[8] = 0;
out_3470018529986682183[9] = 0;
out_3470018529986682183[10] = 0;
out_3470018529986682183[11] = 0;
out_3470018529986682183[12] = 0;
out_3470018529986682183[13] = 0;
out_3470018529986682183[14] = 1;
out_3470018529986682183[15] = 0;
out_3470018529986682183[16] = 0;
out_3470018529986682183[17] = 0;
void H_24(double *state, double *unused, double *out_4983279789753906519) {
out_4983279789753906519[0] = 0;
out_4983279789753906519[1] = 0;
out_4983279789753906519[2] = 0;
out_4983279789753906519[3] = 0;
out_4983279789753906519[4] = 1;
out_4983279789753906519[5] = 0;
out_4983279789753906519[6] = 0;
out_4983279789753906519[7] = 0;
out_4983279789753906519[8] = 0;
out_4983279789753906519[9] = 0;
out_4983279789753906519[10] = 0;
out_4983279789753906519[11] = 0;
out_4983279789753906519[12] = 0;
out_4983279789753906519[13] = 0;
out_4983279789753906519[14] = 1;
out_4983279789753906519[15] = 0;
out_4983279789753906519[16] = 0;
out_4983279789753906519[17] = 0;
}
void h_30(double *state, double *unused, double *out_3161592977856174233) {
out_3161592977856174233[0] = state[4];
void h_30(double *state, double *unused, double *out_7253669653801133296) {
out_7253669653801133296[0] = state[4];
}
void H_30(double *state, double *unused, double *out_3811137064886780837) {
out_3811137064886780837[0] = 0;
out_3811137064886780837[1] = 0;
out_3811137064886780837[2] = 0;
out_3811137064886780837[3] = 0;
out_3811137064886780837[4] = 1;
out_3811137064886780837[5] = 0;
out_3811137064886780837[6] = 0;
out_3811137064886780837[7] = 0;
out_3811137064886780837[8] = 0;
void H_30(double *state, double *unused, double *out_6022872430048981028) {
out_6022872430048981028[0] = 0;
out_6022872430048981028[1] = 0;
out_6022872430048981028[2] = 0;
out_6022872430048981028[3] = 0;
out_6022872430048981028[4] = 1;
out_6022872430048981028[5] = 0;
out_6022872430048981028[6] = 0;
out_6022872430048981028[7] = 0;
out_6022872430048981028[8] = 0;
}
void h_26(double *state, double *unused, double *out_4105102830757836668) {
out_4105102830757836668[0] = state[7];
void h_26(double *state, double *unused, double *out_7856985538477610813) {
out_7856985538477610813[0] = state[7];
}
void H_26(double *state, double *unused, double *out_4597330076140332811) {
out_4597330076140332811[0] = 0;
out_4597330076140332811[1] = 0;
out_4597330076140332811[2] = 0;
out_4597330076140332811[3] = 0;
out_4597330076140332811[4] = 0;
out_4597330076140332811[5] = 0;
out_4597330076140332811[6] = 0;
out_4597330076140332811[7] = 1;
out_4597330076140332811[8] = 0;
void H_26(double *state, double *unused, double *out_5236679418795429054) {
out_5236679418795429054[0] = 0;
out_5236679418795429054[1] = 0;
out_5236679418795429054[2] = 0;
out_5236679418795429054[3] = 0;
out_5236679418795429054[4] = 0;
out_5236679418795429054[5] = 0;
out_5236679418795429054[6] = 0;
out_5236679418795429054[7] = 1;
out_5236679418795429054[8] = 0;
}
void h_27(double *state, double *unused, double *out_8017746421296364907) {
out_8017746421296364907[0] = state[3];
void h_27(double *state, double *unused, double *out_3661736640530460722) {
out_3661736640530460722[0] = state[3];
}
void H_27(double *state, double *unused, double *out_1636373753086355926) {
out_1636373753086355926[0] = 0;
out_1636373753086355926[1] = 0;
out_1636373753086355926[2] = 0;
out_1636373753086355926[3] = 1;
out_1636373753086355926[4] = 0;
out_1636373753086355926[5] = 0;
out_1636373753086355926[6] = 0;
out_1636373753086355926[7] = 0;
out_1636373753086355926[8] = 0;
void H_27(double *state, double *unused, double *out_3799278358865037811) {
out_3799278358865037811[0] = 0;
out_3799278358865037811[1] = 0;
out_3799278358865037811[2] = 0;
out_3799278358865037811[3] = 1;
out_3799278358865037811[4] = 0;
out_3799278358865037811[5] = 0;
out_3799278358865037811[6] = 0;
out_3799278358865037811[7] = 0;
out_3799278358865037811[8] = 0;
}
void h_29(double *state, double *unused, double *out_3764908862532651750) {
out_3764908862532651750[0] = state[1];
void h_29(double *state, double *unused, double *out_2211105247901577555) {
out_2211105247901577555[0] = state[1];
}
void H_29(double *state, double *unused, double *out_4321368409201173021) {
out_4321368409201173021[0] = 0;
out_4321368409201173021[1] = 1;
out_4321368409201173021[2] = 0;
out_4321368409201173021[3] = 0;
out_4321368409201173021[4] = 0;
out_4321368409201173021[5] = 0;
out_4321368409201173021[6] = 0;
out_4321368409201173021[7] = 0;
out_4321368409201173021[8] = 0;
void H_29(double *state, double *unused, double *out_5512641085734588844) {
out_5512641085734588844[0] = 0;
out_5512641085734588844[1] = 1;
out_5512641085734588844[2] = 0;
out_5512641085734588844[3] = 0;
out_5512641085734588844[4] = 0;
out_5512641085734588844[5] = 0;
out_5512641085734588844[6] = 0;
out_5512641085734588844[7] = 0;
out_5512641085734588844[8] = 0;
}
void h_28(double *state, double *unused, double *out_8845296254147321726) {
out_8845296254147321726[0] = state[0];
void h_28(double *state, double *unused, double *out_8663409908191306367) {
out_8663409908191306367[0] = state[0];
}
void H_28(double *state, double *unused, double *out_6284998680766499272) {
out_6284998680766499272[0] = 1;
out_6284998680766499272[1] = 0;
out_6284998680766499272[2] = 0;
out_6284998680766499272[3] = 0;
out_6284998680766499272[4] = 0;
out_6284998680766499272[5] = 0;
out_6284998680766499272[6] = 0;
out_6284998680766499272[7] = 0;
out_6284998680766499272[8] = 0;
void H_28(double *state, double *unused, double *out_7851703970905432198) {
out_7851703970905432198[0] = 1;
out_7851703970905432198[1] = 0;
out_7851703970905432198[2] = 0;
out_7851703970905432198[3] = 0;
out_7851703970905432198[4] = 0;
out_7851703970905432198[5] = 0;
out_7851703970905432198[6] = 0;
out_7851703970905432198[7] = 0;
out_7851703970905432198[8] = 0;
}
void h_31(double *state, double *unused, double *out_7667405663253359913) {
out_7667405663253359913[0] = state[8];
void h_31(double *state, double *unused, double *out_5201620103558886575) {
out_5201620103558886575[0] = state[8];
}
void H_31(double *state, double *unused, double *out_3971121973906981335) {
out_3971121973906981335[0] = 0;
out_3971121973906981335[1] = 0;
out_3971121973906981335[2] = 0;
out_3971121973906981335[3] = 0;
out_3971121973906981335[4] = 0;
out_3971121973906981335[5] = 0;
out_3971121973906981335[6] = 0;
out_3971121973906981335[7] = 0;
out_3971121973906981335[8] = 1;
void H_31(double *state, double *unused, double *out_1464530138044412402) {
out_1464530138044412402[0] = 0;
out_1464530138044412402[1] = 0;
out_1464530138044412402[2] = 0;
out_1464530138044412402[3] = 0;
out_1464530138044412402[4] = 0;
out_1464530138044412402[5] = 0;
out_1464530138044412402[6] = 0;
out_1464530138044412402[7] = 0;
out_1464530138044412402[8] = 1;
}
#include <eigen3/Eigen/Dense>
#include <iostream>
@@ -518,68 +518,68 @@ void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_31, H_31, NULL, in_z, in_R, in_ea, MAHA_THRESH_31);
}
void car_err_fun(double *nom_x, double *delta_x, double *out_5539204589909662238) {
err_fun(nom_x, delta_x, out_5539204589909662238);
void car_err_fun(double *nom_x, double *delta_x, double *out_1027636603068461502) {
err_fun(nom_x, delta_x, out_1027636603068461502);
}
void car_inv_err_fun(double *nom_x, double *true_x, double *out_6836761615042086214) {
inv_err_fun(nom_x, true_x, out_6836761615042086214);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_2498107869525935257) {
inv_err_fun(nom_x, true_x, out_2498107869525935257);
}
void car_H_mod_fun(double *state, double *out_5300350899020605715) {
H_mod_fun(state, out_5300350899020605715);
void car_H_mod_fun(double *state, double *out_2880487860269583385) {
H_mod_fun(state, out_2880487860269583385);
}
void car_f_fun(double *state, double dt, double *out_7290139574394395979) {
f_fun(state, dt, out_7290139574394395979);
void car_f_fun(double *state, double dt, double *out_8985245024092687483) {
f_fun(state, dt, out_8985245024092687483);
}
void car_F_fun(double *state, double dt, double *out_3369922846592360961) {
F_fun(state, dt, out_3369922846592360961);
void car_F_fun(double *state, double dt, double *out_135664326016666632) {
F_fun(state, dt, out_135664326016666632);
}
void car_h_25(double *state, double *unused, double *out_213866987500689272) {
h_25(state, unused, out_213866987500689272);
void car_h_25(double *state, double *unused, double *out_1339936627130384923) {
h_25(state, unused, out_1339936627130384923);
}
void car_H_25(double *state, double *unused, double *out_8338833395014389035) {
H_25(state, unused, out_8338833395014389035);
void car_H_25(double *state, double *unused, double *out_8541205388556229655) {
H_25(state, unused, out_8541205388556229655);
}
void car_h_24(double *state, double *unused, double *out_6813311767306827479) {
h_24(state, unused, out_6813311767306827479);
void car_h_24(double *state, double *unused, double *out_7843416543337357224) {
h_24(state, unused, out_7843416543337357224);
}
void car_H_24(double *state, double *unused, double *out_3470018529986682183) {
H_24(state, unused, out_3470018529986682183);
void car_H_24(double *state, double *unused, double *out_4983279789753906519) {
H_24(state, unused, out_4983279789753906519);
}
void car_h_30(double *state, double *unused, double *out_3161592977856174233) {
h_30(state, unused, out_3161592977856174233);
void car_h_30(double *state, double *unused, double *out_7253669653801133296) {
h_30(state, unused, out_7253669653801133296);
}
void car_H_30(double *state, double *unused, double *out_3811137064886780837) {
H_30(state, unused, out_3811137064886780837);
void car_H_30(double *state, double *unused, double *out_6022872430048981028) {
H_30(state, unused, out_6022872430048981028);
}
void car_h_26(double *state, double *unused, double *out_4105102830757836668) {
h_26(state, unused, out_4105102830757836668);
void car_h_26(double *state, double *unused, double *out_7856985538477610813) {
h_26(state, unused, out_7856985538477610813);
}
void car_H_26(double *state, double *unused, double *out_4597330076140332811) {
H_26(state, unused, out_4597330076140332811);
void car_H_26(double *state, double *unused, double *out_5236679418795429054) {
H_26(state, unused, out_5236679418795429054);
}
void car_h_27(double *state, double *unused, double *out_8017746421296364907) {
h_27(state, unused, out_8017746421296364907);
void car_h_27(double *state, double *unused, double *out_3661736640530460722) {
h_27(state, unused, out_3661736640530460722);
}
void car_H_27(double *state, double *unused, double *out_1636373753086355926) {
H_27(state, unused, out_1636373753086355926);
void car_H_27(double *state, double *unused, double *out_3799278358865037811) {
H_27(state, unused, out_3799278358865037811);
}
void car_h_29(double *state, double *unused, double *out_3764908862532651750) {
h_29(state, unused, out_3764908862532651750);
void car_h_29(double *state, double *unused, double *out_2211105247901577555) {
h_29(state, unused, out_2211105247901577555);
}
void car_H_29(double *state, double *unused, double *out_4321368409201173021) {
H_29(state, unused, out_4321368409201173021);
void car_H_29(double *state, double *unused, double *out_5512641085734588844) {
H_29(state, unused, out_5512641085734588844);
}
void car_h_28(double *state, double *unused, double *out_8845296254147321726) {
h_28(state, unused, out_8845296254147321726);
void car_h_28(double *state, double *unused, double *out_8663409908191306367) {
h_28(state, unused, out_8663409908191306367);
}
void car_H_28(double *state, double *unused, double *out_6284998680766499272) {
H_28(state, unused, out_6284998680766499272);
void car_H_28(double *state, double *unused, double *out_7851703970905432198) {
H_28(state, unused, out_7851703970905432198);
}
void car_h_31(double *state, double *unused, double *out_7667405663253359913) {
h_31(state, unused, out_7667405663253359913);
void car_h_31(double *state, double *unused, double *out_5201620103558886575) {
h_31(state, unused, out_5201620103558886575);
}
void car_H_31(double *state, double *unused, double *out_3971121973906981335) {
H_31(state, unused, out_3971121973906981335);
void car_H_31(double *state, double *unused, double *out_1464530138044412402) {
H_31(state, unused, out_1464530138044412402);
}
void car_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
+21 -21
View File
@@ -9,27 +9,27 @@ void car_update_27(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void car_update_29(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_28(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_31(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_err_fun(double *nom_x, double *delta_x, double *out_5539204589909662238);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_6836761615042086214);
void car_H_mod_fun(double *state, double *out_5300350899020605715);
void car_f_fun(double *state, double dt, double *out_7290139574394395979);
void car_F_fun(double *state, double dt, double *out_3369922846592360961);
void car_h_25(double *state, double *unused, double *out_213866987500689272);
void car_H_25(double *state, double *unused, double *out_8338833395014389035);
void car_h_24(double *state, double *unused, double *out_6813311767306827479);
void car_H_24(double *state, double *unused, double *out_3470018529986682183);
void car_h_30(double *state, double *unused, double *out_3161592977856174233);
void car_H_30(double *state, double *unused, double *out_3811137064886780837);
void car_h_26(double *state, double *unused, double *out_4105102830757836668);
void car_H_26(double *state, double *unused, double *out_4597330076140332811);
void car_h_27(double *state, double *unused, double *out_8017746421296364907);
void car_H_27(double *state, double *unused, double *out_1636373753086355926);
void car_h_29(double *state, double *unused, double *out_3764908862532651750);
void car_H_29(double *state, double *unused, double *out_4321368409201173021);
void car_h_28(double *state, double *unused, double *out_8845296254147321726);
void car_H_28(double *state, double *unused, double *out_6284998680766499272);
void car_h_31(double *state, double *unused, double *out_7667405663253359913);
void car_H_31(double *state, double *unused, double *out_3971121973906981335);
void car_err_fun(double *nom_x, double *delta_x, double *out_1027636603068461502);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_2498107869525935257);
void car_H_mod_fun(double *state, double *out_2880487860269583385);
void car_f_fun(double *state, double dt, double *out_8985245024092687483);
void car_F_fun(double *state, double dt, double *out_135664326016666632);
void car_h_25(double *state, double *unused, double *out_1339936627130384923);
void car_H_25(double *state, double *unused, double *out_8541205388556229655);
void car_h_24(double *state, double *unused, double *out_7843416543337357224);
void car_H_24(double *state, double *unused, double *out_4983279789753906519);
void car_h_30(double *state, double *unused, double *out_7253669653801133296);
void car_H_30(double *state, double *unused, double *out_6022872430048981028);
void car_h_26(double *state, double *unused, double *out_7856985538477610813);
void car_H_26(double *state, double *unused, double *out_5236679418795429054);
void car_h_27(double *state, double *unused, double *out_3661736640530460722);
void car_H_27(double *state, double *unused, double *out_3799278358865037811);
void car_h_29(double *state, double *unused, double *out_2211105247901577555);
void car_H_29(double *state, double *unused, double *out_5512641085734588844);
void car_h_28(double *state, double *unused, double *out_8663409908191306367);
void car_H_28(double *state, double *unused, double *out_7851703970905432198);
void car_h_31(double *state, double *unused, double *out_5201620103558886575);
void car_H_31(double *state, double *unused, double *out_1464530138044412402);
void car_predict(double *in_x, double *in_P, double *in_Q, double dt);
void car_set_mass(double x);
void car_set_rotational_inertia(double x);
+362 -362
View File
@@ -17,354 +17,354 @@ const static double MAHA_THRESH_21 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
void err_fun(double *nom_x, double *delta_x, double *out_3532684675618107860) {
out_3532684675618107860[0] = delta_x[0] + nom_x[0];
out_3532684675618107860[1] = delta_x[1] + nom_x[1];
out_3532684675618107860[2] = delta_x[2] + nom_x[2];
out_3532684675618107860[3] = delta_x[3] + nom_x[3];
out_3532684675618107860[4] = delta_x[4] + nom_x[4];
out_3532684675618107860[5] = delta_x[5] + nom_x[5];
out_3532684675618107860[6] = delta_x[6] + nom_x[6];
out_3532684675618107860[7] = delta_x[7] + nom_x[7];
out_3532684675618107860[8] = delta_x[8] + nom_x[8];
out_3532684675618107860[9] = delta_x[9] + nom_x[9];
out_3532684675618107860[10] = delta_x[10] + nom_x[10];
void err_fun(double *nom_x, double *delta_x, double *out_7759149317582249240) {
out_7759149317582249240[0] = delta_x[0] + nom_x[0];
out_7759149317582249240[1] = delta_x[1] + nom_x[1];
out_7759149317582249240[2] = delta_x[2] + nom_x[2];
out_7759149317582249240[3] = delta_x[3] + nom_x[3];
out_7759149317582249240[4] = delta_x[4] + nom_x[4];
out_7759149317582249240[5] = delta_x[5] + nom_x[5];
out_7759149317582249240[6] = delta_x[6] + nom_x[6];
out_7759149317582249240[7] = delta_x[7] + nom_x[7];
out_7759149317582249240[8] = delta_x[8] + nom_x[8];
out_7759149317582249240[9] = delta_x[9] + nom_x[9];
out_7759149317582249240[10] = delta_x[10] + nom_x[10];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_4040997643746645524) {
out_4040997643746645524[0] = -nom_x[0] + true_x[0];
out_4040997643746645524[1] = -nom_x[1] + true_x[1];
out_4040997643746645524[2] = -nom_x[2] + true_x[2];
out_4040997643746645524[3] = -nom_x[3] + true_x[3];
out_4040997643746645524[4] = -nom_x[4] + true_x[4];
out_4040997643746645524[5] = -nom_x[5] + true_x[5];
out_4040997643746645524[6] = -nom_x[6] + true_x[6];
out_4040997643746645524[7] = -nom_x[7] + true_x[7];
out_4040997643746645524[8] = -nom_x[8] + true_x[8];
out_4040997643746645524[9] = -nom_x[9] + true_x[9];
out_4040997643746645524[10] = -nom_x[10] + true_x[10];
void inv_err_fun(double *nom_x, double *true_x, double *out_9118422902961757933) {
out_9118422902961757933[0] = -nom_x[0] + true_x[0];
out_9118422902961757933[1] = -nom_x[1] + true_x[1];
out_9118422902961757933[2] = -nom_x[2] + true_x[2];
out_9118422902961757933[3] = -nom_x[3] + true_x[3];
out_9118422902961757933[4] = -nom_x[4] + true_x[4];
out_9118422902961757933[5] = -nom_x[5] + true_x[5];
out_9118422902961757933[6] = -nom_x[6] + true_x[6];
out_9118422902961757933[7] = -nom_x[7] + true_x[7];
out_9118422902961757933[8] = -nom_x[8] + true_x[8];
out_9118422902961757933[9] = -nom_x[9] + true_x[9];
out_9118422902961757933[10] = -nom_x[10] + true_x[10];
}
void H_mod_fun(double *state, double *out_5907768448464933327) {
out_5907768448464933327[0] = 1.0;
out_5907768448464933327[1] = 0;
out_5907768448464933327[2] = 0;
out_5907768448464933327[3] = 0;
out_5907768448464933327[4] = 0;
out_5907768448464933327[5] = 0;
out_5907768448464933327[6] = 0;
out_5907768448464933327[7] = 0;
out_5907768448464933327[8] = 0;
out_5907768448464933327[9] = 0;
out_5907768448464933327[10] = 0;
out_5907768448464933327[11] = 0;
out_5907768448464933327[12] = 1.0;
out_5907768448464933327[13] = 0;
out_5907768448464933327[14] = 0;
out_5907768448464933327[15] = 0;
out_5907768448464933327[16] = 0;
out_5907768448464933327[17] = 0;
out_5907768448464933327[18] = 0;
out_5907768448464933327[19] = 0;
out_5907768448464933327[20] = 0;
out_5907768448464933327[21] = 0;
out_5907768448464933327[22] = 0;
out_5907768448464933327[23] = 0;
out_5907768448464933327[24] = 1.0;
out_5907768448464933327[25] = 0;
out_5907768448464933327[26] = 0;
out_5907768448464933327[27] = 0;
out_5907768448464933327[28] = 0;
out_5907768448464933327[29] = 0;
out_5907768448464933327[30] = 0;
out_5907768448464933327[31] = 0;
out_5907768448464933327[32] = 0;
out_5907768448464933327[33] = 0;
out_5907768448464933327[34] = 0;
out_5907768448464933327[35] = 0;
out_5907768448464933327[36] = 1.0;
out_5907768448464933327[37] = 0;
out_5907768448464933327[38] = 0;
out_5907768448464933327[39] = 0;
out_5907768448464933327[40] = 0;
out_5907768448464933327[41] = 0;
out_5907768448464933327[42] = 0;
out_5907768448464933327[43] = 0;
out_5907768448464933327[44] = 0;
out_5907768448464933327[45] = 0;
out_5907768448464933327[46] = 0;
out_5907768448464933327[47] = 0;
out_5907768448464933327[48] = 1.0;
out_5907768448464933327[49] = 0;
out_5907768448464933327[50] = 0;
out_5907768448464933327[51] = 0;
out_5907768448464933327[52] = 0;
out_5907768448464933327[53] = 0;
out_5907768448464933327[54] = 0;
out_5907768448464933327[55] = 0;
out_5907768448464933327[56] = 0;
out_5907768448464933327[57] = 0;
out_5907768448464933327[58] = 0;
out_5907768448464933327[59] = 0;
out_5907768448464933327[60] = 1.0;
out_5907768448464933327[61] = 0;
out_5907768448464933327[62] = 0;
out_5907768448464933327[63] = 0;
out_5907768448464933327[64] = 0;
out_5907768448464933327[65] = 0;
out_5907768448464933327[66] = 0;
out_5907768448464933327[67] = 0;
out_5907768448464933327[68] = 0;
out_5907768448464933327[69] = 0;
out_5907768448464933327[70] = 0;
out_5907768448464933327[71] = 0;
out_5907768448464933327[72] = 1.0;
out_5907768448464933327[73] = 0;
out_5907768448464933327[74] = 0;
out_5907768448464933327[75] = 0;
out_5907768448464933327[76] = 0;
out_5907768448464933327[77] = 0;
out_5907768448464933327[78] = 0;
out_5907768448464933327[79] = 0;
out_5907768448464933327[80] = 0;
out_5907768448464933327[81] = 0;
out_5907768448464933327[82] = 0;
out_5907768448464933327[83] = 0;
out_5907768448464933327[84] = 1.0;
out_5907768448464933327[85] = 0;
out_5907768448464933327[86] = 0;
out_5907768448464933327[87] = 0;
out_5907768448464933327[88] = 0;
out_5907768448464933327[89] = 0;
out_5907768448464933327[90] = 0;
out_5907768448464933327[91] = 0;
out_5907768448464933327[92] = 0;
out_5907768448464933327[93] = 0;
out_5907768448464933327[94] = 0;
out_5907768448464933327[95] = 0;
out_5907768448464933327[96] = 1.0;
out_5907768448464933327[97] = 0;
out_5907768448464933327[98] = 0;
out_5907768448464933327[99] = 0;
out_5907768448464933327[100] = 0;
out_5907768448464933327[101] = 0;
out_5907768448464933327[102] = 0;
out_5907768448464933327[103] = 0;
out_5907768448464933327[104] = 0;
out_5907768448464933327[105] = 0;
out_5907768448464933327[106] = 0;
out_5907768448464933327[107] = 0;
out_5907768448464933327[108] = 1.0;
out_5907768448464933327[109] = 0;
out_5907768448464933327[110] = 0;
out_5907768448464933327[111] = 0;
out_5907768448464933327[112] = 0;
out_5907768448464933327[113] = 0;
out_5907768448464933327[114] = 0;
out_5907768448464933327[115] = 0;
out_5907768448464933327[116] = 0;
out_5907768448464933327[117] = 0;
out_5907768448464933327[118] = 0;
out_5907768448464933327[119] = 0;
out_5907768448464933327[120] = 1.0;
void H_mod_fun(double *state, double *out_1633358768098501879) {
out_1633358768098501879[0] = 1.0;
out_1633358768098501879[1] = 0;
out_1633358768098501879[2] = 0;
out_1633358768098501879[3] = 0;
out_1633358768098501879[4] = 0;
out_1633358768098501879[5] = 0;
out_1633358768098501879[6] = 0;
out_1633358768098501879[7] = 0;
out_1633358768098501879[8] = 0;
out_1633358768098501879[9] = 0;
out_1633358768098501879[10] = 0;
out_1633358768098501879[11] = 0;
out_1633358768098501879[12] = 1.0;
out_1633358768098501879[13] = 0;
out_1633358768098501879[14] = 0;
out_1633358768098501879[15] = 0;
out_1633358768098501879[16] = 0;
out_1633358768098501879[17] = 0;
out_1633358768098501879[18] = 0;
out_1633358768098501879[19] = 0;
out_1633358768098501879[20] = 0;
out_1633358768098501879[21] = 0;
out_1633358768098501879[22] = 0;
out_1633358768098501879[23] = 0;
out_1633358768098501879[24] = 1.0;
out_1633358768098501879[25] = 0;
out_1633358768098501879[26] = 0;
out_1633358768098501879[27] = 0;
out_1633358768098501879[28] = 0;
out_1633358768098501879[29] = 0;
out_1633358768098501879[30] = 0;
out_1633358768098501879[31] = 0;
out_1633358768098501879[32] = 0;
out_1633358768098501879[33] = 0;
out_1633358768098501879[34] = 0;
out_1633358768098501879[35] = 0;
out_1633358768098501879[36] = 1.0;
out_1633358768098501879[37] = 0;
out_1633358768098501879[38] = 0;
out_1633358768098501879[39] = 0;
out_1633358768098501879[40] = 0;
out_1633358768098501879[41] = 0;
out_1633358768098501879[42] = 0;
out_1633358768098501879[43] = 0;
out_1633358768098501879[44] = 0;
out_1633358768098501879[45] = 0;
out_1633358768098501879[46] = 0;
out_1633358768098501879[47] = 0;
out_1633358768098501879[48] = 1.0;
out_1633358768098501879[49] = 0;
out_1633358768098501879[50] = 0;
out_1633358768098501879[51] = 0;
out_1633358768098501879[52] = 0;
out_1633358768098501879[53] = 0;
out_1633358768098501879[54] = 0;
out_1633358768098501879[55] = 0;
out_1633358768098501879[56] = 0;
out_1633358768098501879[57] = 0;
out_1633358768098501879[58] = 0;
out_1633358768098501879[59] = 0;
out_1633358768098501879[60] = 1.0;
out_1633358768098501879[61] = 0;
out_1633358768098501879[62] = 0;
out_1633358768098501879[63] = 0;
out_1633358768098501879[64] = 0;
out_1633358768098501879[65] = 0;
out_1633358768098501879[66] = 0;
out_1633358768098501879[67] = 0;
out_1633358768098501879[68] = 0;
out_1633358768098501879[69] = 0;
out_1633358768098501879[70] = 0;
out_1633358768098501879[71] = 0;
out_1633358768098501879[72] = 1.0;
out_1633358768098501879[73] = 0;
out_1633358768098501879[74] = 0;
out_1633358768098501879[75] = 0;
out_1633358768098501879[76] = 0;
out_1633358768098501879[77] = 0;
out_1633358768098501879[78] = 0;
out_1633358768098501879[79] = 0;
out_1633358768098501879[80] = 0;
out_1633358768098501879[81] = 0;
out_1633358768098501879[82] = 0;
out_1633358768098501879[83] = 0;
out_1633358768098501879[84] = 1.0;
out_1633358768098501879[85] = 0;
out_1633358768098501879[86] = 0;
out_1633358768098501879[87] = 0;
out_1633358768098501879[88] = 0;
out_1633358768098501879[89] = 0;
out_1633358768098501879[90] = 0;
out_1633358768098501879[91] = 0;
out_1633358768098501879[92] = 0;
out_1633358768098501879[93] = 0;
out_1633358768098501879[94] = 0;
out_1633358768098501879[95] = 0;
out_1633358768098501879[96] = 1.0;
out_1633358768098501879[97] = 0;
out_1633358768098501879[98] = 0;
out_1633358768098501879[99] = 0;
out_1633358768098501879[100] = 0;
out_1633358768098501879[101] = 0;
out_1633358768098501879[102] = 0;
out_1633358768098501879[103] = 0;
out_1633358768098501879[104] = 0;
out_1633358768098501879[105] = 0;
out_1633358768098501879[106] = 0;
out_1633358768098501879[107] = 0;
out_1633358768098501879[108] = 1.0;
out_1633358768098501879[109] = 0;
out_1633358768098501879[110] = 0;
out_1633358768098501879[111] = 0;
out_1633358768098501879[112] = 0;
out_1633358768098501879[113] = 0;
out_1633358768098501879[114] = 0;
out_1633358768098501879[115] = 0;
out_1633358768098501879[116] = 0;
out_1633358768098501879[117] = 0;
out_1633358768098501879[118] = 0;
out_1633358768098501879[119] = 0;
out_1633358768098501879[120] = 1.0;
}
void f_fun(double *state, double dt, double *out_8719739038902116923) {
out_8719739038902116923[0] = dt*state[3] + state[0];
out_8719739038902116923[1] = dt*state[4] + state[1];
out_8719739038902116923[2] = dt*state[5] + state[2];
out_8719739038902116923[3] = state[3];
out_8719739038902116923[4] = state[4];
out_8719739038902116923[5] = state[5];
out_8719739038902116923[6] = dt*state[7] + state[6];
out_8719739038902116923[7] = dt*state[8] + state[7];
out_8719739038902116923[8] = state[8];
out_8719739038902116923[9] = state[9];
out_8719739038902116923[10] = state[10];
void f_fun(double *state, double dt, double *out_436651591053660649) {
out_436651591053660649[0] = dt*state[3] + state[0];
out_436651591053660649[1] = dt*state[4] + state[1];
out_436651591053660649[2] = dt*state[5] + state[2];
out_436651591053660649[3] = state[3];
out_436651591053660649[4] = state[4];
out_436651591053660649[5] = state[5];
out_436651591053660649[6] = dt*state[7] + state[6];
out_436651591053660649[7] = dt*state[8] + state[7];
out_436651591053660649[8] = state[8];
out_436651591053660649[9] = state[9];
out_436651591053660649[10] = state[10];
}
void F_fun(double *state, double dt, double *out_6368958041110140577) {
out_6368958041110140577[0] = 1;
out_6368958041110140577[1] = 0;
out_6368958041110140577[2] = 0;
out_6368958041110140577[3] = dt;
out_6368958041110140577[4] = 0;
out_6368958041110140577[5] = 0;
out_6368958041110140577[6] = 0;
out_6368958041110140577[7] = 0;
out_6368958041110140577[8] = 0;
out_6368958041110140577[9] = 0;
out_6368958041110140577[10] = 0;
out_6368958041110140577[11] = 0;
out_6368958041110140577[12] = 1;
out_6368958041110140577[13] = 0;
out_6368958041110140577[14] = 0;
out_6368958041110140577[15] = dt;
out_6368958041110140577[16] = 0;
out_6368958041110140577[17] = 0;
out_6368958041110140577[18] = 0;
out_6368958041110140577[19] = 0;
out_6368958041110140577[20] = 0;
out_6368958041110140577[21] = 0;
out_6368958041110140577[22] = 0;
out_6368958041110140577[23] = 0;
out_6368958041110140577[24] = 1;
out_6368958041110140577[25] = 0;
out_6368958041110140577[26] = 0;
out_6368958041110140577[27] = dt;
out_6368958041110140577[28] = 0;
out_6368958041110140577[29] = 0;
out_6368958041110140577[30] = 0;
out_6368958041110140577[31] = 0;
out_6368958041110140577[32] = 0;
out_6368958041110140577[33] = 0;
out_6368958041110140577[34] = 0;
out_6368958041110140577[35] = 0;
out_6368958041110140577[36] = 1;
out_6368958041110140577[37] = 0;
out_6368958041110140577[38] = 0;
out_6368958041110140577[39] = 0;
out_6368958041110140577[40] = 0;
out_6368958041110140577[41] = 0;
out_6368958041110140577[42] = 0;
out_6368958041110140577[43] = 0;
out_6368958041110140577[44] = 0;
out_6368958041110140577[45] = 0;
out_6368958041110140577[46] = 0;
out_6368958041110140577[47] = 0;
out_6368958041110140577[48] = 1;
out_6368958041110140577[49] = 0;
out_6368958041110140577[50] = 0;
out_6368958041110140577[51] = 0;
out_6368958041110140577[52] = 0;
out_6368958041110140577[53] = 0;
out_6368958041110140577[54] = 0;
out_6368958041110140577[55] = 0;
out_6368958041110140577[56] = 0;
out_6368958041110140577[57] = 0;
out_6368958041110140577[58] = 0;
out_6368958041110140577[59] = 0;
out_6368958041110140577[60] = 1;
out_6368958041110140577[61] = 0;
out_6368958041110140577[62] = 0;
out_6368958041110140577[63] = 0;
out_6368958041110140577[64] = 0;
out_6368958041110140577[65] = 0;
out_6368958041110140577[66] = 0;
out_6368958041110140577[67] = 0;
out_6368958041110140577[68] = 0;
out_6368958041110140577[69] = 0;
out_6368958041110140577[70] = 0;
out_6368958041110140577[71] = 0;
out_6368958041110140577[72] = 1;
out_6368958041110140577[73] = dt;
out_6368958041110140577[74] = 0;
out_6368958041110140577[75] = 0;
out_6368958041110140577[76] = 0;
out_6368958041110140577[77] = 0;
out_6368958041110140577[78] = 0;
out_6368958041110140577[79] = 0;
out_6368958041110140577[80] = 0;
out_6368958041110140577[81] = 0;
out_6368958041110140577[82] = 0;
out_6368958041110140577[83] = 0;
out_6368958041110140577[84] = 1;
out_6368958041110140577[85] = dt;
out_6368958041110140577[86] = 0;
out_6368958041110140577[87] = 0;
out_6368958041110140577[88] = 0;
out_6368958041110140577[89] = 0;
out_6368958041110140577[90] = 0;
out_6368958041110140577[91] = 0;
out_6368958041110140577[92] = 0;
out_6368958041110140577[93] = 0;
out_6368958041110140577[94] = 0;
out_6368958041110140577[95] = 0;
out_6368958041110140577[96] = 1;
out_6368958041110140577[97] = 0;
out_6368958041110140577[98] = 0;
out_6368958041110140577[99] = 0;
out_6368958041110140577[100] = 0;
out_6368958041110140577[101] = 0;
out_6368958041110140577[102] = 0;
out_6368958041110140577[103] = 0;
out_6368958041110140577[104] = 0;
out_6368958041110140577[105] = 0;
out_6368958041110140577[106] = 0;
out_6368958041110140577[107] = 0;
out_6368958041110140577[108] = 1;
out_6368958041110140577[109] = 0;
out_6368958041110140577[110] = 0;
out_6368958041110140577[111] = 0;
out_6368958041110140577[112] = 0;
out_6368958041110140577[113] = 0;
out_6368958041110140577[114] = 0;
out_6368958041110140577[115] = 0;
out_6368958041110140577[116] = 0;
out_6368958041110140577[117] = 0;
out_6368958041110140577[118] = 0;
out_6368958041110140577[119] = 0;
out_6368958041110140577[120] = 1;
void F_fun(double *state, double dt, double *out_7304280096771648861) {
out_7304280096771648861[0] = 1;
out_7304280096771648861[1] = 0;
out_7304280096771648861[2] = 0;
out_7304280096771648861[3] = dt;
out_7304280096771648861[4] = 0;
out_7304280096771648861[5] = 0;
out_7304280096771648861[6] = 0;
out_7304280096771648861[7] = 0;
out_7304280096771648861[8] = 0;
out_7304280096771648861[9] = 0;
out_7304280096771648861[10] = 0;
out_7304280096771648861[11] = 0;
out_7304280096771648861[12] = 1;
out_7304280096771648861[13] = 0;
out_7304280096771648861[14] = 0;
out_7304280096771648861[15] = dt;
out_7304280096771648861[16] = 0;
out_7304280096771648861[17] = 0;
out_7304280096771648861[18] = 0;
out_7304280096771648861[19] = 0;
out_7304280096771648861[20] = 0;
out_7304280096771648861[21] = 0;
out_7304280096771648861[22] = 0;
out_7304280096771648861[23] = 0;
out_7304280096771648861[24] = 1;
out_7304280096771648861[25] = 0;
out_7304280096771648861[26] = 0;
out_7304280096771648861[27] = dt;
out_7304280096771648861[28] = 0;
out_7304280096771648861[29] = 0;
out_7304280096771648861[30] = 0;
out_7304280096771648861[31] = 0;
out_7304280096771648861[32] = 0;
out_7304280096771648861[33] = 0;
out_7304280096771648861[34] = 0;
out_7304280096771648861[35] = 0;
out_7304280096771648861[36] = 1;
out_7304280096771648861[37] = 0;
out_7304280096771648861[38] = 0;
out_7304280096771648861[39] = 0;
out_7304280096771648861[40] = 0;
out_7304280096771648861[41] = 0;
out_7304280096771648861[42] = 0;
out_7304280096771648861[43] = 0;
out_7304280096771648861[44] = 0;
out_7304280096771648861[45] = 0;
out_7304280096771648861[46] = 0;
out_7304280096771648861[47] = 0;
out_7304280096771648861[48] = 1;
out_7304280096771648861[49] = 0;
out_7304280096771648861[50] = 0;
out_7304280096771648861[51] = 0;
out_7304280096771648861[52] = 0;
out_7304280096771648861[53] = 0;
out_7304280096771648861[54] = 0;
out_7304280096771648861[55] = 0;
out_7304280096771648861[56] = 0;
out_7304280096771648861[57] = 0;
out_7304280096771648861[58] = 0;
out_7304280096771648861[59] = 0;
out_7304280096771648861[60] = 1;
out_7304280096771648861[61] = 0;
out_7304280096771648861[62] = 0;
out_7304280096771648861[63] = 0;
out_7304280096771648861[64] = 0;
out_7304280096771648861[65] = 0;
out_7304280096771648861[66] = 0;
out_7304280096771648861[67] = 0;
out_7304280096771648861[68] = 0;
out_7304280096771648861[69] = 0;
out_7304280096771648861[70] = 0;
out_7304280096771648861[71] = 0;
out_7304280096771648861[72] = 1;
out_7304280096771648861[73] = dt;
out_7304280096771648861[74] = 0;
out_7304280096771648861[75] = 0;
out_7304280096771648861[76] = 0;
out_7304280096771648861[77] = 0;
out_7304280096771648861[78] = 0;
out_7304280096771648861[79] = 0;
out_7304280096771648861[80] = 0;
out_7304280096771648861[81] = 0;
out_7304280096771648861[82] = 0;
out_7304280096771648861[83] = 0;
out_7304280096771648861[84] = 1;
out_7304280096771648861[85] = dt;
out_7304280096771648861[86] = 0;
out_7304280096771648861[87] = 0;
out_7304280096771648861[88] = 0;
out_7304280096771648861[89] = 0;
out_7304280096771648861[90] = 0;
out_7304280096771648861[91] = 0;
out_7304280096771648861[92] = 0;
out_7304280096771648861[93] = 0;
out_7304280096771648861[94] = 0;
out_7304280096771648861[95] = 0;
out_7304280096771648861[96] = 1;
out_7304280096771648861[97] = 0;
out_7304280096771648861[98] = 0;
out_7304280096771648861[99] = 0;
out_7304280096771648861[100] = 0;
out_7304280096771648861[101] = 0;
out_7304280096771648861[102] = 0;
out_7304280096771648861[103] = 0;
out_7304280096771648861[104] = 0;
out_7304280096771648861[105] = 0;
out_7304280096771648861[106] = 0;
out_7304280096771648861[107] = 0;
out_7304280096771648861[108] = 1;
out_7304280096771648861[109] = 0;
out_7304280096771648861[110] = 0;
out_7304280096771648861[111] = 0;
out_7304280096771648861[112] = 0;
out_7304280096771648861[113] = 0;
out_7304280096771648861[114] = 0;
out_7304280096771648861[115] = 0;
out_7304280096771648861[116] = 0;
out_7304280096771648861[117] = 0;
out_7304280096771648861[118] = 0;
out_7304280096771648861[119] = 0;
out_7304280096771648861[120] = 1;
}
void h_6(double *state, double *sat_pos, double *out_2271110864362118697) {
out_2271110864362118697[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6];
void h_6(double *state, double *sat_pos, double *out_4764504202269866901) {
out_4764504202269866901[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6];
}
void H_6(double *state, double *sat_pos, double *out_1862672885827164935) {
out_1862672885827164935[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_1862672885827164935[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_1862672885827164935[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_1862672885827164935[3] = 0;
out_1862672885827164935[4] = 0;
out_1862672885827164935[5] = 0;
out_1862672885827164935[6] = 1;
out_1862672885827164935[7] = 0;
out_1862672885827164935[8] = 0;
out_1862672885827164935[9] = 0;
out_1862672885827164935[10] = 0;
void H_6(double *state, double *sat_pos, double *out_4085363850207817832) {
out_4085363850207817832[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_4085363850207817832[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_4085363850207817832[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_4085363850207817832[3] = 0;
out_4085363850207817832[4] = 0;
out_4085363850207817832[5] = 0;
out_4085363850207817832[6] = 1;
out_4085363850207817832[7] = 0;
out_4085363850207817832[8] = 0;
out_4085363850207817832[9] = 0;
out_4085363850207817832[10] = 0;
}
void h_20(double *state, double *sat_pos, double *out_4324669159508799845) {
out_4324669159508799845[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9];
void h_20(double *state, double *sat_pos, double *out_6801986365944636663) {
out_6801986365944636663[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9];
}
void H_20(double *state, double *sat_pos, double *out_2084788552121881515) {
out_2084788552121881515[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_2084788552121881515[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_2084788552121881515[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_2084788552121881515[3] = 0;
out_2084788552121881515[4] = 0;
out_2084788552121881515[5] = 0;
out_2084788552121881515[6] = 1;
out_2084788552121881515[7] = 0;
out_2084788552121881515[8] = 0;
out_2084788552121881515[9] = 1;
out_2084788552121881515[10] = sat_pos[3];
void H_20(double *state, double *sat_pos, double *out_7866410108663176377) {
out_7866410108663176377[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_7866410108663176377[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_7866410108663176377[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_7866410108663176377[3] = 0;
out_7866410108663176377[4] = 0;
out_7866410108663176377[5] = 0;
out_7866410108663176377[6] = 1;
out_7866410108663176377[7] = 0;
out_7866410108663176377[8] = 0;
out_7866410108663176377[9] = 1;
out_7866410108663176377[10] = sat_pos[3];
}
void h_7(double *state, double *sat_pos_vel, double *out_5010606036331411486) {
out_5010606036331411486[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
void h_7(double *state, double *sat_pos_vel, double *out_4005211607259102508) {
out_4005211607259102508[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
void H_7(double *state, double *sat_pos_vel, double *out_3676152182946046175) {
out_3676152182946046175[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[6] = 0;
out_3676152182946046175[7] = 1;
out_3676152182946046175[8] = 0;
out_3676152182946046175[9] = 0;
out_3676152182946046175[10] = 0;
void H_7(double *state, double *sat_pos_vel, double *out_2701243593729319356) {
out_2701243593729319356[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[6] = 0;
out_2701243593729319356[7] = 1;
out_2701243593729319356[8] = 0;
out_2701243593729319356[9] = 0;
out_2701243593729319356[10] = 0;
}
void h_21(double *state, double *sat_pos_vel, double *out_5010606036331411486) {
out_5010606036331411486[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
void h_21(double *state, double *sat_pos_vel, double *out_4005211607259102508) {
out_4005211607259102508[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
void H_21(double *state, double *sat_pos_vel, double *out_3676152182946046175) {
out_3676152182946046175[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_3676152182946046175[6] = 0;
out_3676152182946046175[7] = 1;
out_3676152182946046175[8] = 0;
out_3676152182946046175[9] = 0;
out_3676152182946046175[10] = 0;
void H_21(double *state, double *sat_pos_vel, double *out_2701243593729319356) {
out_2701243593729319356[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_2701243593729319356[6] = 0;
out_2701243593729319356[7] = 1;
out_2701243593729319356[8] = 0;
out_2701243593729319356[9] = 0;
out_2701243593729319356[10] = 0;
}
#include <eigen3/Eigen/Dense>
#include <iostream>
@@ -506,44 +506,44 @@ void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_21, H_21, NULL, in_z, in_R, in_ea, MAHA_THRESH_21);
}
void gnss_err_fun(double *nom_x, double *delta_x, double *out_3532684675618107860) {
err_fun(nom_x, delta_x, out_3532684675618107860);
void gnss_err_fun(double *nom_x, double *delta_x, double *out_7759149317582249240) {
err_fun(nom_x, delta_x, out_7759149317582249240);
}
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_4040997643746645524) {
inv_err_fun(nom_x, true_x, out_4040997643746645524);
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_9118422902961757933) {
inv_err_fun(nom_x, true_x, out_9118422902961757933);
}
void gnss_H_mod_fun(double *state, double *out_5907768448464933327) {
H_mod_fun(state, out_5907768448464933327);
void gnss_H_mod_fun(double *state, double *out_1633358768098501879) {
H_mod_fun(state, out_1633358768098501879);
}
void gnss_f_fun(double *state, double dt, double *out_8719739038902116923) {
f_fun(state, dt, out_8719739038902116923);
void gnss_f_fun(double *state, double dt, double *out_436651591053660649) {
f_fun(state, dt, out_436651591053660649);
}
void gnss_F_fun(double *state, double dt, double *out_6368958041110140577) {
F_fun(state, dt, out_6368958041110140577);
void gnss_F_fun(double *state, double dt, double *out_7304280096771648861) {
F_fun(state, dt, out_7304280096771648861);
}
void gnss_h_6(double *state, double *sat_pos, double *out_2271110864362118697) {
h_6(state, sat_pos, out_2271110864362118697);
void gnss_h_6(double *state, double *sat_pos, double *out_4764504202269866901) {
h_6(state, sat_pos, out_4764504202269866901);
}
void gnss_H_6(double *state, double *sat_pos, double *out_1862672885827164935) {
H_6(state, sat_pos, out_1862672885827164935);
void gnss_H_6(double *state, double *sat_pos, double *out_4085363850207817832) {
H_6(state, sat_pos, out_4085363850207817832);
}
void gnss_h_20(double *state, double *sat_pos, double *out_4324669159508799845) {
h_20(state, sat_pos, out_4324669159508799845);
void gnss_h_20(double *state, double *sat_pos, double *out_6801986365944636663) {
h_20(state, sat_pos, out_6801986365944636663);
}
void gnss_H_20(double *state, double *sat_pos, double *out_2084788552121881515) {
H_20(state, sat_pos, out_2084788552121881515);
void gnss_H_20(double *state, double *sat_pos, double *out_7866410108663176377) {
H_20(state, sat_pos, out_7866410108663176377);
}
void gnss_h_7(double *state, double *sat_pos_vel, double *out_5010606036331411486) {
h_7(state, sat_pos_vel, out_5010606036331411486);
void gnss_h_7(double *state, double *sat_pos_vel, double *out_4005211607259102508) {
h_7(state, sat_pos_vel, out_4005211607259102508);
}
void gnss_H_7(double *state, double *sat_pos_vel, double *out_3676152182946046175) {
H_7(state, sat_pos_vel, out_3676152182946046175);
void gnss_H_7(double *state, double *sat_pos_vel, double *out_2701243593729319356) {
H_7(state, sat_pos_vel, out_2701243593729319356);
}
void gnss_h_21(double *state, double *sat_pos_vel, double *out_5010606036331411486) {
h_21(state, sat_pos_vel, out_5010606036331411486);
void gnss_h_21(double *state, double *sat_pos_vel, double *out_4005211607259102508) {
h_21(state, sat_pos_vel, out_4005211607259102508);
}
void gnss_H_21(double *state, double *sat_pos_vel, double *out_3676152182946046175) {
H_21(state, sat_pos_vel, out_3676152182946046175);
void gnss_H_21(double *state, double *sat_pos_vel, double *out_2701243593729319356) {
H_21(state, sat_pos_vel, out_2701243593729319356);
}
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
+13 -13
View File
@@ -5,18 +5,18 @@ void gnss_update_6(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void gnss_update_20(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_err_fun(double *nom_x, double *delta_x, double *out_3532684675618107860);
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_4040997643746645524);
void gnss_H_mod_fun(double *state, double *out_5907768448464933327);
void gnss_f_fun(double *state, double dt, double *out_8719739038902116923);
void gnss_F_fun(double *state, double dt, double *out_6368958041110140577);
void gnss_h_6(double *state, double *sat_pos, double *out_2271110864362118697);
void gnss_H_6(double *state, double *sat_pos, double *out_1862672885827164935);
void gnss_h_20(double *state, double *sat_pos, double *out_4324669159508799845);
void gnss_H_20(double *state, double *sat_pos, double *out_2084788552121881515);
void gnss_h_7(double *state, double *sat_pos_vel, double *out_5010606036331411486);
void gnss_H_7(double *state, double *sat_pos_vel, double *out_3676152182946046175);
void gnss_h_21(double *state, double *sat_pos_vel, double *out_5010606036331411486);
void gnss_H_21(double *state, double *sat_pos_vel, double *out_3676152182946046175);
void gnss_err_fun(double *nom_x, double *delta_x, double *out_7759149317582249240);
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_9118422902961757933);
void gnss_H_mod_fun(double *state, double *out_1633358768098501879);
void gnss_f_fun(double *state, double dt, double *out_436651591053660649);
void gnss_F_fun(double *state, double dt, double *out_7304280096771648861);
void gnss_h_6(double *state, double *sat_pos, double *out_4764504202269866901);
void gnss_H_6(double *state, double *sat_pos, double *out_4085363850207817832);
void gnss_h_20(double *state, double *sat_pos, double *out_6801986365944636663);
void gnss_H_20(double *state, double *sat_pos, double *out_7866410108663176377);
void gnss_h_7(double *state, double *sat_pos_vel, double *out_4005211607259102508);
void gnss_H_7(double *state, double *sat_pos_vel, double *out_2701243593729319356);
void gnss_h_21(double *state, double *sat_pos_vel, double *out_4005211607259102508);
void gnss_H_21(double *state, double *sat_pos_vel, double *out_2701243593729319356);
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
Binary file not shown.
File diff suppressed because it is too large Load Diff
+24 -24
View File
@@ -10,29 +10,29 @@ void live_update_32(double *in_x, double *in_P, double *in_z, double *in_R, doub
void live_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_H(double *in_vec, double *out_4549882242449710464);
void live_err_fun(double *nom_x, double *delta_x, double *out_8967192143908981963);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_27256379367550061);
void live_H_mod_fun(double *state, double *out_4824081692195624245);
void live_f_fun(double *state, double dt, double *out_2925287045854594900);
void live_F_fun(double *state, double dt, double *out_3843924678963003983);
void live_h_4(double *state, double *unused, double *out_4595523822163121539);
void live_H_4(double *state, double *unused, double *out_4041185209348209430);
void live_h_9(double *state, double *unused, double *out_8234121719314103006);
void live_H_9(double *state, double *unused, double *out_115982527006568053);
void live_h_10(double *state, double *unused, double *out_7026349636546874626);
void live_H_10(double *state, double *unused, double *out_9081879764692710014);
void live_h_12(double *state, double *unused, double *out_5365386081988364470);
void live_H_12(double *state, double *unused, double *out_4662284234395803097);
void live_h_35(double *state, double *unused, double *out_6678787183634411294);
void live_H_35(double *state, double *unused, double *out_7407847266720816806);
void live_h_32(double *state, double *unused, double *out_2417329670678050885);
void live_H_32(double *state, double *unused, double *out_3367483271847903307);
void live_h_13(double *state, double *unused, double *out_5805477272828296767);
void live_H_13(double *state, double *unused, double *out_1027302974098499320);
void live_h_14(double *state, double *unused, double *out_8234121719314103006);
void live_H_14(double *state, double *unused, double *out_115982527006568053);
void live_h_33(double *state, double *unused, double *out_7147939535237127299);
void live_H_33(double *state, double *unused, double *out_7888339802349877206);
void live_H(double *in_vec, double *out_6543170510918427396);
void live_err_fun(double *nom_x, double *delta_x, double *out_9062015891362533785);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_4758141739877846608);
void live_H_mod_fun(double *state, double *out_2686832696856623219);
void live_f_fun(double *state, double dt, double *out_3822263192861325508);
void live_F_fun(double *state, double dt, double *out_6455895415279509978);
void live_h_4(double *state, double *unused, double *out_3494769867212102904);
void live_H_4(double *state, double *unused, double *out_1451768599627278965);
void live_h_9(double *state, double *unused, double *out_6878791664417266905);
void live_H_9(double *state, double *unused, double *out_1210578952997688320);
void live_h_10(double *state, double *unused, double *out_4380493807452258420);
void live_H_10(double *state, double *unused, double *out_1918065783372193268);
void live_h_12(double *state, double *unused, double *out_1827589486894337029);
void live_H_12(double *state, double *unused, double *out_830669574579685298);
void live_h_35(double *state, double *unused, double *out_8082777464406159763);
void live_H_35(double *state, double *unused, double *out_1914893457745328411);
void live_h_32(double *state, double *unused, double *out_3678648917755286173);
void live_H_32(double *state, double *unused, double *out_7716197829952940969);
void live_h_13(double *state, double *unused, double *out_2018478861536013333);
void live_H_13(double *state, double *unused, double *out_3066565144776721745);
void live_h_14(double *state, double *unused, double *out_6878791664417266905);
void live_H_14(double *state, double *unused, double *out_1210578952997688320);
void live_h_33(double *state, double *unused, double *out_5620049043069576208);
void live_H_33(double *state, double *unused, double *out_5065450462384186015);
void live_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
+12 -1
View File
@@ -23,7 +23,7 @@ from openpilot.selfdrive.athena.registration import register, UNREGISTERED_DONGL
from openpilot.system.swaglog import cloudlog, add_file_handler
from openpilot.system.version import is_dirty, get_commit, get_version, get_origin, get_short_branch, \
get_normalized_origin, terms_version, training_version, \
is_tested_branch, is_release_branch
is_tested_branch, is_release_branch, is_release_sp_branch
sys.path.append(os.path.join(BASEDIR, "third_party/mapd"))
@@ -80,6 +80,7 @@ def manager_init() -> None:
("LkasToggle", "0"),
("MadsIconToggle", "1"),
("MaxTimeOffroad", "9"),
("NNFF", "0"),
("OnroadScreenOff", "-2"),
("OnroadScreenOffBrightness", "50"),
("OnroadScreenOffEvent", "1"),
@@ -91,6 +92,9 @@ def manager_init() -> None:
("SpeedLimitEngageType", "0"),
("SpeedLimitValueOffset", "0"),
("SpeedLimitOffsetType", "0"),
("SpeedLimitWarningType", "0"),
("SpeedLimitWarningValueOffset", "0"),
("SpeedLimitWarningOffsetType", "0"),
("StandStillTimer", "0"),
("StockLongToyota", "0"),
("TorqueDeadzoneDeg", "0"),
@@ -145,6 +149,7 @@ def manager_init() -> None:
params.put("GitRemote", get_origin(default=""))
params.put_bool("IsTestedBranch", is_tested_branch())
params.put_bool("IsReleaseBranch", is_release_branch())
params.put_bool("IsReleaseSPBranch", is_release_sp_branch())
# set dongle id
reg_res = register(show_spinner=True)
@@ -153,6 +158,12 @@ def manager_init() -> None:
else:
serial = params.get("HardwareSerial")
raise Exception(f"Registration failed for device {serial}")
if params.get("HardwareSerial") is None:
try:
serial = HARDWARE.get_serial()
params.put("HardwareSerial", serial)
except Exception:
cloudlog.exception("Error getting serial for device")
os.environ['DONGLE_ID'] = dongle_id # Needed for swaglog
if not is_dirty():
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -1
View File
@@ -97,7 +97,9 @@ def get_properties() -> Tuple[str, str]:
params = Params()
dongle_id = params.get("DongleId", encoding='utf-8')
if dongle_id in (None, UNREGISTERED_DONGLE_ID):
dongle_id = UNREGISTERED_DONGLE_ID
hardware_serial = params.get("HardwareSerial", encoding='utf-8')
hardware_serial = "" if hardware_serial is None else hardware_serial
dongle_id = UNREGISTERED_DONGLE_ID + hardware_serial
gitname = params.get("GithubUsername", encoding='utf-8')
if gitname is None:
gitname = ""
+2 -1
View File
@@ -33,7 +33,8 @@ widgets_src += ["qt/offroad/sunnypilot/display_settings.cc", "qt/offroad/sunnypi
"qt/offroad/sunnypilot/lane_change_settings.cc", "qt/offroad/sunnypilot/speed_limit_control_settings.cc",
"qt/offroad/sunnypilot/monitoring_settings.cc", "qt/offroad/sunnypilot/osm_settings.cc",
"qt/offroad/sunnypilot/custom_offsets_settings.cc", "qt/widgets/sunnypilot/drive_stats.cc",
"qt/offroad/sunnypilot/software_settings_sp.cc", "qt/offroad/sunnypilot/models_fetcher.cc"]
"qt/offroad/sunnypilot/software_settings_sp.cc", "qt/offroad/sunnypilot/models_fetcher.cc",
"qt/offroad/sunnypilot/speed_limit_warning_settings.cc", "qt/offroad/sunnypilot/speed_limit_policy_settings.cc"]
qt_env['CPPDEFINES'] = []
if maps:
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+157 -79
View File
@@ -1332,10 +1332,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1361,83 +1357,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1554,6 +1484,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1619,7 +1673,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1635,7 +1689,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1666,6 +1720,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1674,10 +1732,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1754,6 +1808,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1766,12 +1828,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1779,7 +1857,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1315,10 +1315,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1344,83 +1340,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1538,6 +1468,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1603,7 +1657,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1619,7 +1673,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1650,6 +1704,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1658,10 +1716,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1738,6 +1792,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1750,12 +1812,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1763,7 +1841,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1316,10 +1316,6 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1345,83 +1341,17 @@ Cela peut prendre jusqu&apos;à une minute.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1538,6 +1468,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1603,7 +1657,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1619,7 +1673,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1650,6 +1704,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1658,10 +1716,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1738,6 +1792,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1750,12 +1812,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1763,7 +1841,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1310,10 +1310,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1339,83 +1335,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1532,6 +1462,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1597,7 +1651,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1613,7 +1667,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1644,6 +1698,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1652,10 +1710,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1732,6 +1786,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1744,12 +1806,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1757,7 +1835,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1312,10 +1312,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1341,83 +1337,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1534,6 +1464,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1599,7 +1653,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1615,7 +1669,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1646,6 +1700,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1654,10 +1712,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1734,6 +1788,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1746,12 +1808,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1759,7 +1837,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1316,10 +1316,6 @@ Isso pode levar até um minuto.</translation>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1345,83 +1341,17 @@ Isso pode levar até um minuto.</translation>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1538,6 +1468,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1603,7 +1657,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1619,7 +1673,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1650,6 +1704,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1658,10 +1716,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1738,6 +1792,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1750,12 +1812,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1763,7 +1841,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1312,10 +1312,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1341,83 +1337,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1534,6 +1464,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1599,7 +1653,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1615,7 +1669,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1646,6 +1700,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1654,10 +1712,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1734,6 +1788,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1746,12 +1808,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1759,7 +1837,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1310,10 +1310,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1339,83 +1335,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1532,6 +1462,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1597,7 +1651,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1613,7 +1667,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1644,6 +1698,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1652,10 +1710,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1732,6 +1786,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1744,12 +1806,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1757,7 +1835,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1312,10 +1312,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1341,83 +1337,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1534,6 +1464,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1599,7 +1653,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1615,7 +1669,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1646,6 +1700,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1654,10 +1712,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1734,6 +1788,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1746,12 +1808,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1759,7 +1837,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
+157 -79
View File
@@ -1312,10 +1312,6 @@ This may take up to a minute.</source>
</context>
<context>
<name>SlcSettings</name>
<message>
<source>Warning Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto</source>
<translation type="unfinished"></translation>
@@ -1341,83 +1337,17 @@ This may take up to a minute.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Offset</source>
<source>Limit Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set speed limit slightly higher than actual speed limit for a more natural drive.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources used to adapt cruise speed to road limits:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired mode to set the cruising speed to the speed limit:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Only: Warn the driver when the vehicle is driven faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto: Automatic speed adjustment on motorways based on speed limit data.</source>
<translation type="unfinished"></translation>
@@ -1534,6 +1464,130 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitPolicySettings</name>
<message>
<source>Speed Limit Source Policy</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
Only</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car
First</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the precedence order of sources. Utilized by Speed Limit Control and Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav Only: Data from Mapbox active navigation only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map Only: Data from OpenStreetMap only.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car Only: Data from the car&apos;s built-in sources (if available).</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Nav First: Nav -&gt; Map -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Map First: Map -&gt; Nav -&gt; Car</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Car First: Car -&gt; Nav -&gt; Map</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SpeedLimitWarningSettings</name>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning with speed limit flash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When Speed Limit Warning is enabled, the speed limit sign will alert the driver when the cruising speed is faster than then speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Default</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Fixed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Percentage</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning Offset</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select the desired offset to warn the driver when the vehicle is driving faster than the speed limit.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off: When the cruising speed is faster than the speed limit plus the offset, there will be no warning.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display: The speed on the speed limit sign turns red to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chime: The speed on the speed limit sign turns red and chimes to alert the driver when the cruising speed is faster than the speed limit plus the offset.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SshControl</name>
<message>
@@ -1599,7 +1653,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Speed Limit Control (SLC)</source>
<source>Speed Limit Control (SLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1615,7 +1669,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Map Data Turn Speed Control (M-TSC)</source>
<source>Enable Map Data Turn Speed Control (M-TSC) (Beta)</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1646,6 +1700,10 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Add custom offsets to Camera and Path in sunnypilot.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enforce Torque Lateral Control</source>
<translation type="unfinished"></translation>
@@ -1654,10 +1712,6 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Enable this to enforce sunnypilot to steer with Torque lateral control.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Neural Network Lateral Control (NNLC)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Self-Tune</source>
<translation type="unfinished"></translation>
@@ -1734,6 +1788,14 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Customize Speed Limit Control</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Customize Source</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Laneful</source>
<translation type="unfinished"></translation>
@@ -1746,12 +1808,28 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<source>Auto</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Limit Assist</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>NNLC is currently not available on this platform.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>([Match = Exact] is ideal, but [Match = Fuzzy] is fine too. Contact @twilsonco in the sunnypilot Discord server if there are any issues.)</source>
<source>Match: &quot;Exact&quot; is ideal, but &quot;Fuzzy&quot; is fine too. Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/font&gt; if there are any issues.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; Start the car to check car compatibility&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=&apos;yellow&apos;&gt; NNLC Not Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;font color=#00ff00&gt; NNLC Loaded&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -1759,7 +1837,7 @@ We STRONGLY suggest you to reset calibration, would you like to do that now?</so
<translation type="unfinished"></translation>
</message>
<message>
<source>Contact @twilsonco in the sunnypilot Discord server with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<source>Reach out to the sunnypilot team in the &lt;font color=&apos;white&apos;&gt;&lt;b&gt;#tuning-nnlc channel at the sunnypilot Discord server&lt;/b&gt;&lt;/font&gt; with feedback, or to provide log data for your car if your car is currently unsupported.</source>
<translation type="unfinished"></translation>
</message>
</context>
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.
+6 -1
View File
@@ -8,7 +8,8 @@ from openpilot.common.basedir import BASEDIR
from openpilot.system.swaglog import cloudlog
RELEASE_BRANCHES = ['release3-staging', 'dashcam3-staging', 'release3', 'dashcam3', 'nightly']
TESTED_BRANCHES = RELEASE_BRANCHES + ['devel', 'devel-staging', 'staging-c3', 'release-c3']
RELEASE_SP_BRANCHES = ['release-c3']
TESTED_BRANCHES = RELEASE_BRANCHES + RELEASE_SP_BRANCHES + ['devel', 'devel-staging', 'staging-c3']
training_version: bytes = b"0.2.0"
terms_version: bytes = b"2"
@@ -101,6 +102,10 @@ def is_tested_branch() -> bool:
def is_release_branch() -> bool:
return get_short_branch() in RELEASE_BRANCHES
@cache
def is_release_sp_branch() -> bool:
return get_short_branch() in RELEASE_SP_BRANCHES
@cache
def is_dirty() -> bool:
origin = get_origin()