dragonpilot beta3

date: 2024-07-13T18:45:35
commit: c25d768a9e
This commit is contained in:
dragonpilot
2024-07-13 18:44:15 +08:00
committed by Comma Device
parent 0094c9ac06
commit cbd22eca29
228 changed files with 13037 additions and 2770 deletions
+14 -29
View File
@@ -4,35 +4,6 @@ from openpilot.selfdrive.car.chrysler.values import CAR
Ecu = car.CarParams.Ecu
FW_VERSIONS = {
CAR.CHRYSLER_PACIFICA_2017_HYBRID: {
(Ecu.combinationMeter, 0x742, None): [
b'68239262AH',
b'68239262AI',
b'68239262AJ',
b'68239263AH',
b'68239263AJ',
],
(Ecu.srs, 0x744, None): [
b'68238840AH',
],
(Ecu.fwdRadar, 0x753, None): [
b'68226356AI',
],
(Ecu.eps, 0x75a, None): [
b'68288309AC',
b'68288309AD',
],
(Ecu.engine, 0x7e0, None): [
b'68277480AV ',
b'68277480AX ',
b'68277480AZ ',
],
(Ecu.hybrid, 0x7e2, None): [
b'05190175BF',
b'05190175BH',
b'05190226AK',
],
},
CAR.CHRYSLER_PACIFICA_2018: {
(Ecu.combinationMeter, 0x742, None): [
b'68227902AF',
@@ -181,26 +152,39 @@ FW_VERSIONS = {
},
CAR.CHRYSLER_PACIFICA_2018_HYBRID: {
(Ecu.combinationMeter, 0x742, None): [
b'68239262AH',
b'68239262AI',
b'68239262AJ',
b'68239263AH',
b'68239263AJ',
b'68358439AE',
b'68358439AG',
],
(Ecu.srs, 0x744, None): [
b'68238840AH',
b'68358990AC',
b'68405939AA',
],
(Ecu.fwdRadar, 0x753, None): [
b'04672758AA',
b'68226356AI',
],
(Ecu.eps, 0x75a, None): [
b'68288309AC',
b'68288309AD',
b'68525339AA',
],
(Ecu.engine, 0x7e0, None): [
b'68277480AV ',
b'68277480AX ',
b'68277480AZ ',
b'68366580AI ',
b'68366580AK ',
b'68366580AM ',
],
(Ecu.hybrid, 0x7e2, None): [
b'05190175BF',
b'05190175BH',
b'05190226AI',
b'05190226AK',
b'05190226AM',
@@ -245,6 +229,7 @@ FW_VERSIONS = {
b'68416680AE ',
b'68416680AF ',
b'68416680AG ',
b'68444228AC ',
b'68444228AD ',
b'68444228AE ',
b'68444228AF ',
+2 -2
View File
@@ -35,8 +35,8 @@ class CarInterface(CarInterfaceBase):
ret.flags |= ChryslerFlags.HIGHER_MIN_STEERING_SPEED.value
# Chrysler
if candidate in (CAR.CHRYSLER_PACIFICA_2017_HYBRID, CAR.CHRYSLER_PACIFICA_2018, CAR.CHRYSLER_PACIFICA_2018_HYBRID, \
CAR.CHRYSLER_PACIFICA_2019_HYBRID, CAR.CHRYSLER_PACIFICA_2020, CAR.DODGE_DURANGO):
if candidate in (CAR.CHRYSLER_PACIFICA_2018, CAR.CHRYSLER_PACIFICA_2018_HYBRID, CAR.CHRYSLER_PACIFICA_2019_HYBRID,
CAR.CHRYSLER_PACIFICA_2020, CAR.DODGE_DURANGO):
ret.lateralTuning.init('pid')
ret.lateralTuning.pid.kpBP, ret.lateralTuning.pid.kiBP = [[9., 20.], [9., 20.]]
ret.lateralTuning.pid.kpV, ret.lateralTuning.pid.kiV = [[0.15, 0.30], [0.03, 0.05]]
+6 -10
View File
@@ -32,34 +32,30 @@ class ChryslerCarSpecs(CarSpecs):
class CAR(Platforms):
# Chrysler
CHRYSLER_PACIFICA_2017_HYBRID = ChryslerPlatformConfig(
[ChryslerCarDocs("Chrysler Pacifica Hybrid 2017")],
ChryslerCarSpecs(mass=2242., wheelbase=3.089, steerRatio=16.2),
)
CHRYSLER_PACIFICA_2018_HYBRID = ChryslerPlatformConfig(
[ChryslerCarDocs("Chrysler Pacifica Hybrid 2018")],
CHRYSLER_PACIFICA_2017_HYBRID.specs,
[ChryslerCarDocs("Chrysler Pacifica Hybrid 2017-18")],
ChryslerCarSpecs(mass=2242., wheelbase=3.089, steerRatio=16.2),
)
CHRYSLER_PACIFICA_2019_HYBRID = ChryslerPlatformConfig(
[ChryslerCarDocs("Chrysler Pacifica Hybrid 2019-24")],
CHRYSLER_PACIFICA_2017_HYBRID.specs,
CHRYSLER_PACIFICA_2018_HYBRID.specs,
)
CHRYSLER_PACIFICA_2018 = ChryslerPlatformConfig(
[ChryslerCarDocs("Chrysler Pacifica 2017-18")],
CHRYSLER_PACIFICA_2017_HYBRID.specs,
CHRYSLER_PACIFICA_2018_HYBRID.specs,
)
CHRYSLER_PACIFICA_2020 = ChryslerPlatformConfig(
[
ChryslerCarDocs("Chrysler Pacifica 2019-20"),
ChryslerCarDocs("Chrysler Pacifica 2021-23", package="All"),
],
CHRYSLER_PACIFICA_2017_HYBRID.specs,
CHRYSLER_PACIFICA_2018_HYBRID.specs,
)
# Dodge
DODGE_DURANGO = ChryslerPlatformConfig(
[ChryslerCarDocs("Dodge Durango 2020-21")],
CHRYSLER_PACIFICA_2017_HYBRID.specs,
CHRYSLER_PACIFICA_2018_HYBRID.specs,
)
# Jeep
+2 -1
View File
@@ -130,7 +130,8 @@ MIGRATION = {
# Removal of platform_str, see https://github.com/commaai/openpilot/pull/31868/
"COMMA BODY": BODY.COMMA_BODY,
"CHRYSLER PACIFICA HYBRID 2017": CHRYSLER.CHRYSLER_PACIFICA_2017_HYBRID,
"CHRYSLER PACIFICA HYBRID 2017": CHRYSLER.CHRYSLER_PACIFICA_2018_HYBRID,
"CHRYSLER_PACIFICA_2017_HYBRID": CHRYSLER.CHRYSLER_PACIFICA_2018_HYBRID,
"CHRYSLER PACIFICA HYBRID 2018": CHRYSLER.CHRYSLER_PACIFICA_2018_HYBRID,
"CHRYSLER PACIFICA HYBRID 2019": CHRYSLER.CHRYSLER_PACIFICA_2019_HYBRID,
"CHRYSLER PACIFICA 2018": CHRYSLER.CHRYSLER_PACIFICA_2018,
+3 -3
View File
@@ -15,7 +15,7 @@ class CarState(CarStateBase):
super().__init__(CP)
can_define = CANDefine(DBC[CP.carFingerprint]["pt"])
if CP.transmissionType == TransmissionType.automatic:
self.shifter_values = can_define.dv["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"]
self.shifter_values = can_define.dv["PowertrainData_10"]["TrnRng_D_Rq"]
self.vehicle_sensors_valid = False
@@ -69,7 +69,7 @@ class CarState(CarStateBase):
# gear
if self.CP.transmissionType == TransmissionType.automatic:
gear = self.shifter_values.get(cp.vl["Gear_Shift_by_Wire_FD1"]["TrnRng_D_RqGsm"])
gear = self.shifter_values.get(cp.vl["PowertrainData_10"]["TrnRng_D_Rq"])
ret.gearShifter = self.parse_gear_shifter(gear)
elif self.CP.transmissionType == TransmissionType.manual:
ret.clutchPressed = cp.vl["Engine_Clutch_Data"]["CluPdlPos_Pc_Meas"] > 0
@@ -139,7 +139,7 @@ class CarState(CarStateBase):
if CP.transmissionType == TransmissionType.automatic:
messages += [
("Gear_Shift_by_Wire_FD1", 10),
("PowertrainData_10", 10),
]
elif CP.transmissionType == TransmissionType.manual:
messages += [
+1
View File
@@ -529,6 +529,7 @@ FW_VERSIONS = {
b'28102-5MX-A900\x00\x00',
b'28102-5MX-A910\x00\x00',
b'28102-5MX-C001\x00\x00',
b'28102-5MX-C610\x00\x00',
b'28102-5MX-C910\x00\x00',
b'28102-5MX-D001\x00\x00',
b'28102-5MX-D710\x00\x00',
+2
View File
@@ -585,6 +585,7 @@ FW_VERSIONS = {
b'\xf1\x00DL3 MDPS C 1.00 1.02 56310-L7220 4DLHC102',
],
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.01 99210-L2000 191022',
b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.02 99210-L2000 200309',
b'\xf1\x00DL3HMFC AT KOR LHD 1.00 1.04 99210-L2000 210527',
],
@@ -595,6 +596,7 @@ FW_VERSIONS = {
b'\xf1\x00OS IEB \x02 210 \x02\x14 58520-K4000',
b'\xf1\x00OS IEB \x02 212 \x11\x13 58520-K4000',
b'\xf1\x00OS IEB \x03 210 \x02\x14 58520-K4000',
b'\xf1\x00OS IEB \x03 211 \x04\x02 58520-K4000',
b'\xf1\x00OS IEB \x03 212 \x11\x13 58520-K4000',
b'\xf1\x00OS IEB \r 105\x18\t\x18 58520-K4000',
],
+1 -1
View File
@@ -39,7 +39,7 @@ routes = [
CarTestRoute("0c94aa1e1296d7c6|2021-05-05--19-48-37", CHRYSLER.JEEP_GRAND_CHEROKEE),
CarTestRoute("91dfedae61d7bd75|2021-05-22--20-07-52", CHRYSLER.JEEP_GRAND_CHEROKEE_2019),
CarTestRoute("420a8e183f1aed48|2020-03-05--07-15-29", CHRYSLER.CHRYSLER_PACIFICA_2017_HYBRID),
CarTestRoute("420a8e183f1aed48|2020-03-05--07-15-29", CHRYSLER.CHRYSLER_PACIFICA_2018_HYBRID), # 2017
CarTestRoute("43a685a66291579b|2021-05-27--19-47-29", CHRYSLER.CHRYSLER_PACIFICA_2018),
CarTestRoute("378472f830ee7395|2021-05-28--07-38-43", CHRYSLER.CHRYSLER_PACIFICA_2018_HYBRID),
CarTestRoute("8190c7275a24557b|2020-01-29--08-33-58", CHRYSLER.CHRYSLER_PACIFICA_2019_HYBRID),
@@ -62,6 +62,7 @@ class TestCarInterfaces:
car_params = CarInterface.get_params(car_name, args['fingerprints'], args['car_fw'],
experimental_long=args['experimental_long'], docs=False)
car_params = car_params.as_reader()
car_interface = CarInterface(car_params, CarController, CarState)
assert car_params
assert car_interface
-1
View File
@@ -7,7 +7,6 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
"CHEVROLET_VOLT" = [1.5961527626411784, 1.8422651988094612, 0.1572393918005158]
"CHRYSLER_PACIFICA_2018" = [2.07140, 1.3366521181047952, 0.13776367250652022]
"CHRYSLER_PACIFICA_2020" = [1.86206, 1.509076559398423, 0.14328246159386085]
"CHRYSLER_PACIFICA_2017_HYBRID" = [1.79422, 1.06831764583744, 0.116237]
"CHRYSLER_PACIFICA_2018_HYBRID" = [2.08887, 1.2943025830995154, 0.114818]
"CHRYSLER_PACIFICA_2019_HYBRID" = [1.90120, 1.1958788168371808, 0.131520]
"GENESIS_G70" = [3.8520195946707947, 2.354697063349854, 0.06830285485626221]
+2
View File
@@ -441,6 +441,7 @@ FW_VERSIONS = {
b'\x01896630ZU8000\x00\x00\x00\x00',
b'\x01896630ZU9000\x00\x00\x00\x00',
b'\x01896630ZX4000\x00\x00\x00\x00',
b'\x01896630ZX7100\x00\x00\x00\x00',
b'\x018966312L8000\x00\x00\x00\x00',
b'\x018966312M0000\x00\x00\x00\x00',
b'\x018966312M9000\x00\x00\x00\x00',
@@ -516,6 +517,7 @@ FW_VERSIONS = {
b'\x018965B1254000\x00\x00\x00\x00',
b'\x018965B1255000\x00\x00\x00\x00',
b'\x018965B1256000\x00\x00\x00\x00',
b'\x018965B1270000\x00\x00\x00\x00',
b'8965B12361\x00\x00\x00\x00\x00\x00',
b'8965B12451\x00\x00\x00\x00\x00\x00',
b'8965B16011\x00\x00\x00\x00\x00\x00',
+1 -3
View File
@@ -72,9 +72,7 @@ class Controls:
if CI is None:
cloudlog.info("controlsd is waiting for CarParams")
with car.CarParams.from_bytes(self.params.get("CarParams", block=True)) as msg:
# TODO: this shouldn't need to be a builder
self.CP = msg.as_builder()
self.CP = messaging.log_from_bytes(self.params.get("CarParams", block=True), car.CarParams)
cloudlog.info("controlsd got CarParams")
# Uses car interface helper functions, altering state won't be considered by card for actuation
+1 -1
View File
@@ -25,7 +25,7 @@ LOW_SPEED_Y = [15, 13, 10, 5]
class LatControlTorque(LatControl):
def __init__(self, CP, CI):
super().__init__(CP, CI)
self.torque_params = CP.lateralTuning.torque
self.torque_params = CP.lateralTuning.torque.as_builder()
self.pid = PIDController(self.torque_params.kp, self.torque_params.ki,
k_f=self.torque_params.kf, pos_limit=self.steer_max, neg_limit=-self.steer_max)
self.torque_from_lateral_accel = CI.torque_from_lateral_accel()
@@ -0,0 +1,538 @@
{
"acados_include_path": "/data/openpilot/third_party/acados/include",
"acados_lib_path": "/data/openpilot/third_party/acados/lib",
"code_export_directory": "/data/openpilot/selfdrive/controls/lib/lateral_mpc_lib/c_generated_code",
"constraints": {
"C": [],
"C_e": [],
"D": [],
"constr_type": "BGH",
"constr_type_e": "BGH",
"idxbu": [],
"idxbx": [
2,
3
],
"idxbx_0": [
0,
1,
2,
3
],
"idxbx_e": [],
"idxbxe_0": [
0,
1,
2,
3
],
"idxsbu": [],
"idxsbx": [],
"idxsbx_e": [],
"idxsg": [],
"idxsg_e": [],
"idxsh": [],
"idxsh_e": [],
"idxsphi": [],
"idxsphi_e": [],
"lbu": [],
"lbx": [
-1.5707963267948966,
-0.8726646259971648
],
"lbx_0": [
0.0,
0.0,
0.0,
0.0
],
"lbx_e": [],
"lg": [],
"lg_e": [],
"lh": [],
"lh_e": [],
"lphi": [],
"lphi_e": [],
"lsbu": [],
"lsbx": [],
"lsbx_e": [],
"lsg": [],
"lsg_e": [],
"lsh": [],
"lsh_e": [],
"lsphi": [],
"lsphi_e": [],
"ubu": [],
"ubx": [
1.5707963267948966,
0.8726646259971648
],
"ubx_0": [
0.0,
0.0,
0.0,
0.0
],
"ubx_e": [],
"ug": [],
"ug_e": [],
"uh": [],
"uh_e": [],
"uphi": [],
"uphi_e": [],
"usbu": [],
"usbx": [],
"usbx_e": [],
"usg": [],
"usg_e": [],
"ush": [],
"ush_e": [],
"usphi": [],
"usphi_e": []
},
"cost": {
"Vu": [],
"Vu_0": [],
"Vx": [],
"Vx_0": [],
"Vx_e": [],
"Vz": [],
"Vz_0": [],
"W": [
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
]
],
"W_0": [
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
]
],
"W_e": [
[
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0
]
],
"Zl": [],
"Zl_e": [],
"Zu": [],
"Zu_e": [],
"cost_ext_fun_type": "casadi",
"cost_ext_fun_type_0": "casadi",
"cost_ext_fun_type_e": "casadi",
"cost_type": "NONLINEAR_LS",
"cost_type_0": "NONLINEAR_LS",
"cost_type_e": "NONLINEAR_LS",
"yref": [
0.0,
0.0,
0.0,
0.0,
0.0
],
"yref_0": [
0.0,
0.0,
0.0,
0.0,
0.0
],
"yref_e": [
0.0,
0.0,
0.0
],
"zl": [],
"zl_e": [],
"zu": [],
"zu_e": []
},
"cython_include_dirs": [
"/usr/local/pyenv/versions/3.11.4/lib/python3.11/site-packages/numpy/core/include",
"/usr/local/pyenv/versions/3.11.4/include/python3.11"
],
"dims": {
"N": 32,
"nbu": 0,
"nbx": 2,
"nbx_0": 4,
"nbx_e": 0,
"nbxe_0": 4,
"ng": 0,
"ng_e": 0,
"nh": 0,
"nh_e": 0,
"np": 2,
"nphi": 0,
"nphi_e": 0,
"nr": 0,
"nr_e": 0,
"ns": 0,
"ns_e": 0,
"nsbu": 0,
"nsbx": 0,
"nsbx_e": 0,
"nsg": 0,
"nsg_e": 0,
"nsh": 0,
"nsh_e": 0,
"nsphi": 0,
"nsphi_e": 0,
"nu": 1,
"nx": 4,
"ny": 5,
"ny_0": 5,
"ny_e": 3,
"nz": 0
},
"json_file": "/data/openpilot/selfdrive/controls/lib/lateral_mpc_lib/acados_ocp_lat.json",
"model": {
"con_h_expr": null,
"con_h_expr_e": null,
"con_phi_expr": null,
"con_phi_expr_e": null,
"con_r_expr": null,
"con_r_expr_e": null,
"con_r_in_phi": null,
"con_r_in_phi_e": null,
"cost_conl_custom_outer_hess": null,
"cost_conl_custom_outer_hess_0": null,
"cost_conl_custom_outer_hess_e": null,
"cost_expr_ext_cost": null,
"cost_expr_ext_cost_0": null,
"cost_expr_ext_cost_custom_hess": null,
"cost_expr_ext_cost_custom_hess_0": null,
"cost_expr_ext_cost_custom_hess_e": null,
"cost_expr_ext_cost_e": null,
"cost_psi_expr": null,
"cost_psi_expr_0": null,
"cost_psi_expr_e": null,
"cost_r_in_psi_expr": null,
"cost_r_in_psi_expr_0": null,
"cost_r_in_psi_expr_e": null,
"cost_y_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegjaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaajhpffghgpgegdaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgkaaaaaaaegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegdaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpgegdaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaaahdhjgpfbgdgdgfgmgpffghgpgegeaaaaaaaaaaaaaaachjaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaachkjjjjjjjjjjjjlpd",
"cost_y_expr_0": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegjaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaajhpffghgpgegdaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgkaaaaaaaegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegdaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpgegdaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaaahdhjgpfbgdgdgfgmgpffghgpgegeaaaaaaaaaaaaaaachjaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaachkjjjjjjjjjjjjlpd",
"cost_y_expr_e": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaajhpffghgpgegdaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgkaaaaaaaegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegdaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpg",
"disc_dyn_expr": null,
"dyn_disc_fun": null,
"dyn_disc_fun_jac": null,
"dyn_disc_fun_jac_hess": null,
"dyn_ext_fun_type": "casadi",
"dyn_generic_source": null,
"f_expl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegoaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegdaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaapaaaaaaachpgehbgehjgpgogpfchbgegjgfhdhegnaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpgegbaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegnaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaachfaaaaaaaaaaaaaaaegoaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaachiaaaaaaaaaaaaaaachiaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaaahdhjgpfbgdgdgfgmgpffghgpg",
"f_impl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegcaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegoaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegdaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaapaaaaaaachpgehbgehjgpgogpfchbgegjgfhdhegnaaaaaaaaaaaaaaachdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaajhpffghgpgpfegpgehegbaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaachcaaaaaaaaaaaaaaaegnaaaaaaaaaaaaaaachdaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaachgaaaaaaaaaaaaaaaegoaaaaaaaaaaaaaaachdaaaaaaaaaaaaaaachjaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaalaaaaaaaahdhjgpffghgpgpfegpgehchjaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaaabaaaaaaahdhjgpfchbgehfgpffghgpgpfegpgehegpcaaaaaaaaaaaaaanaaaaaaaahdhjgpfbgdgdgfgmgpffghgpg",
"gnsf": {
"nontrivial_f_LO": 1,
"purely_linear": 0
},
"name": "lat",
"p": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeggaaaaaaaaaaaaaaacaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegpcaaaaaaaaaaaaaapaaaaaaachpgehbgehjgpgogpfchbgegjgfhdh",
"u": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegfaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaaahdhjgpfbgdgdgfgmgpffghgpg",
"x": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegpcaaaaaaaaaaaaaafaaaaaaajhpffghgpgegpcaaaaaaaaaaaaaahaaaaaaaahdhjgpffghgpgegpcaaaaaaaaaaaaaamaaaaaaaahdhjgpfchbgehfgpffghgpg",
"xdot": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegpcaaaaaaaaaaaaaajaaaaaaajhpffghgpgpfegpgehegpcaaaaaaaaaaaaaalaaaaaaaahdhjgpffghgpgpfegpgehegpcaaaaaaaaaaaaaaabaaaaaaahdhjgpfchbgehfgpffghgpgpfegpgeh",
"z": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"parameter_values": [
0.0,
0.0
],
"problem_class": "OCP",
"shared_lib_ext": ".so",
"solver_options": {
"Tsim": 0.009765625,
"alpha_min": 0.05,
"alpha_reduction": 0.7,
"collocation_type": "GAUSS_LEGENDRE",
"custom_templates": [],
"custom_update_copy": true,
"custom_update_filename": "",
"custom_update_header_filename": "",
"eps_sufficient_descent": 0.0001,
"exact_hess_constr": 1,
"exact_hess_cost": 1,
"exact_hess_dyn": 1,
"ext_cost_num_hess": 0,
"ext_fun_compile_flags": "-O2",
"full_step_dual": 0,
"globalization": "FIXED_STEP",
"globalization_use_SOC": 0,
"hessian_approx": "GAUSS_NEWTON",
"hpipm_mode": "BALANCE",
"initialize_t_slacks": 0,
"integrator_type": "ERK",
"levenberg_marquardt": 0.0,
"line_search_use_sufficient_descent": 0,
"model_external_shared_lib_dir": null,
"model_external_shared_lib_name": null,
"nlp_solver_ext_qp_res": 0,
"nlp_solver_max_iter": 100,
"nlp_solver_step_length": 1.0,
"nlp_solver_tol_comp": 1e-06,
"nlp_solver_tol_eq": 1e-06,
"nlp_solver_tol_ineq": 1e-06,
"nlp_solver_tol_stat": 1e-06,
"nlp_solver_type": "SQP_RTI",
"print_level": 0,
"qp_solver": "PARTIAL_CONDENSING_HPIPM",
"qp_solver_cond_N": 1,
"qp_solver_cond_ric_alg": 1,
"qp_solver_iter_max": 1,
"qp_solver_ric_alg": 1,
"qp_solver_tol_comp": null,
"qp_solver_tol_eq": null,
"qp_solver_tol_ineq": null,
"qp_solver_tol_stat": null,
"qp_solver_warm_start": 0,
"regularize_method": null,
"shooting_nodes": [
0.0,
0.009765625,
0.0390625,
0.087890625,
0.15625,
0.244140625,
0.3515625,
0.478515625,
0.625,
0.791015625,
0.9765625,
1.181640625,
1.40625,
1.650390625,
1.9140625,
2.197265625,
2.5,
2.822265625,
3.1640625,
3.525390625,
3.90625,
4.306640625,
4.7265625,
5.166015625,
5.625,
6.103515625,
6.6015625,
7.119140625,
7.65625,
8.212890625,
8.7890625,
9.384765625,
10.0
],
"sim_method_jac_reuse": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"sim_method_newton_iter": 3,
"sim_method_newton_tol": 0.0,
"sim_method_num_stages": [
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4
],
"sim_method_num_steps": [
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
"tf": 10.0,
"time_steps": [
0.009765625,
0.029296875,
0.048828125,
0.068359375,
0.087890625,
0.107421875,
0.126953125,
0.146484375,
0.166015625,
0.185546875,
0.205078125,
0.224609375,
0.244140625,
0.263671875,
0.283203125,
0.302734375,
0.322265625,
0.341796875,
0.361328125,
0.380859375,
0.400390625,
0.419921875,
0.439453125,
0.458984375,
0.478515625,
0.498046875,
0.517578125,
0.537109375,
0.556640625,
0.576171875,
0.595703125,
0.615234375
]
}
}
@@ -0,0 +1,524 @@
{
"acados_include_path": "/data/openpilot/third_party/acados/include",
"acados_lib_path": "/data/openpilot/third_party/acados/lib",
"code_export_directory": "/data/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/c_generated_code",
"constraints": {
"C": [],
"C_e": [],
"D": [],
"constr_type": "BGH",
"constr_type_e": "BGH",
"idxbu": [],
"idxbx": [],
"idxbx_0": [
0,
1,
2
],
"idxbx_e": [],
"idxbxe_0": [
0,
1,
2
],
"idxsbu": [],
"idxsbx": [],
"idxsbx_e": [],
"idxsg": [],
"idxsg_e": [],
"idxsh": [
0,
1,
2,
3
],
"idxsh_e": [],
"idxsphi": [],
"idxsphi_e": [],
"lbu": [],
"lbx": [],
"lbx_0": [
0.0,
0.0,
0.0
],
"lbx_e": [],
"lg": [],
"lg_e": [],
"lh": [
0.0,
0.0,
0.0,
0.0
],
"lh_e": [],
"lphi": [],
"lphi_e": [],
"lsbu": [],
"lsbx": [],
"lsbx_e": [],
"lsg": [],
"lsg_e": [],
"lsh": [
0.0,
0.0,
0.0,
0.0
],
"lsh_e": [],
"lsphi": [],
"lsphi_e": [],
"ubu": [],
"ubx": [],
"ubx_0": [
0.0,
0.0,
0.0
],
"ubx_e": [],
"ug": [],
"ug_e": [],
"uh": [
10000.0,
10000.0,
10000.0,
10000.0
],
"uh_e": [],
"uphi": [],
"uphi_e": [],
"usbu": [],
"usbx": [],
"usbx_e": [],
"usg": [],
"usg_e": [],
"ush": [
0.0,
0.0,
0.0,
0.0
],
"ush_e": [],
"usphi": [],
"usphi_e": []
},
"cost": {
"Vu": [],
"Vu_0": [],
"Vx": [],
"Vx_0": [],
"Vx_e": [],
"Vz": [],
"Vz_0": [],
"W": [
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
],
"W_0": [
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
]
],
"W_e": [
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
],
[
0.0,
0.0,
0.0,
0.0,
0.0
]
],
"Zl": [
0.0,
0.0,
0.0,
0.0
],
"Zl_e": [],
"Zu": [
0.0,
0.0,
0.0,
0.0
],
"Zu_e": [],
"cost_ext_fun_type": "casadi",
"cost_ext_fun_type_0": "casadi",
"cost_ext_fun_type_e": "casadi",
"cost_type": "NONLINEAR_LS",
"cost_type_0": "NONLINEAR_LS",
"cost_type_e": "NONLINEAR_LS",
"yref": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"yref_0": [
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
],
"yref_e": [
0.0,
0.0,
0.0,
0.0,
0.0
],
"zl": [
0.0,
0.0,
0.0,
0.0
],
"zl_e": [],
"zu": [
0.0,
0.0,
0.0,
0.0
],
"zu_e": []
},
"cython_include_dirs": [
"/usr/local/pyenv/versions/3.11.4/lib/python3.11/site-packages/numpy/core/include",
"/usr/local/pyenv/versions/3.11.4/include/python3.11"
],
"dims": {
"N": 12,
"nbu": 0,
"nbx": 0,
"nbx_0": 3,
"nbx_e": 0,
"nbxe_0": 3,
"ng": 0,
"ng_e": 0,
"nh": 4,
"nh_e": 0,
"np": 6,
"nphi": 0,
"nphi_e": 0,
"nr": 0,
"nr_e": 0,
"ns": 4,
"ns_e": 0,
"nsbu": 0,
"nsbx": 0,
"nsbx_e": 0,
"nsg": 0,
"nsg_e": 0,
"nsh": 4,
"nsh_e": 0,
"nsphi": 0,
"nsphi_e": 0,
"nu": 1,
"nx": 3,
"ny": 6,
"ny_0": 6,
"ny_e": 5,
"nz": 0
},
"json_file": "/data/openpilot/selfdrive/controls/lib/longitudinal_mpc_lib/acados_ocp_long.json",
"model": {
"con_h_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegiaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpfngjgogegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpfngbgihchcaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaacbaaaaaamgfgbgegpfegbgoghgfgchpfggbgdgehpgchegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhchbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaachbaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaa",
"con_h_expr_e": null,
"con_phi_expr": null,
"con_phi_expr_e": null,
"con_r_expr": null,
"con_r_expr_e": null,
"con_r_in_phi": null,
"con_r_in_phi_e": null,
"cost_conl_custom_outer_hess": null,
"cost_conl_custom_outer_hess_0": null,
"cost_conl_custom_outer_hess_e": null,
"cost_expr_ext_cost": null,
"cost_expr_ext_cost_0": null,
"cost_expr_ext_cost_custom_hess": null,
"cost_expr_ext_cost_custom_hess_0": null,
"cost_expr_ext_cost_custom_hess_e": null,
"cost_expr_ext_cost_e": null,
"cost_psi_expr": null,
"cost_psi_expr_0": null,
"cost_psi_expr_e": null,
"cost_r_in_psi_expr": null,
"cost_r_in_psi_expr_0": null,
"cost_r_in_psi_expr_e": null,
"cost_y_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaaahchfgghpfbgegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
"cost_y_expr_0": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaaahchfgghpfbgegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
"cost_y_expr_e": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegjaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegbaaaaaaaaaaaaaaaegbaaaaaaaaaaaaaaaegeaaaaaaaaaaaaaaaeglaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegmcaaaaaaaaaaaaaajgfaaaaaaaegdaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhcheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajggaaaaaaaegbaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegmcaaaaaaaaaaaaaajgkaaaaaaachcaaaaaaaaaaaaaaacheaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaachbbaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaagaaaaaaaahchfgghpfbg",
"disc_dyn_expr": null,
"dyn_disc_fun": null,
"dyn_disc_fun_jac": null,
"dyn_disc_fun_jac_hess": null,
"dyn_ext_fun_type": "casadi",
"dyn_generic_source": null,
"f_expl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
"f_impl_expr": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaghpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpgegcaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaabgpffghgpgpfegpgehegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
"gnsf": {
"nontrivial_f_LO": 1,
"purely_linear": 0
},
"name": "long",
"p": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegkaaaaaaaaaaaaaaagaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaafaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaabgpfngjgogegpcaaaaaaaaaaaaaafaaaaaaabgpfngbgihegpcaaaaaaaaaaaaaakaaaaaaaihpfpgcgdhehbgdgmgfgegpcaaaaaaaaaaaaaagaaaaaaaahchfgghpfbgegpcaaaaaaaaaaaaaanaaaaaaamgfgbgegpfehpfggpgmgmgpghhegpcaaaaaaaaaaaaaacbaaaaaamgfgbgegpfegbgoghgfgchpfggbgdgehpgch",
"u": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegfaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaakgpffghgpg",
"x": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaafaaaaaaaihpffghgpgegpcaaaaaaaaaaaaaafaaaaaaaghpffghgpgegpcaaaaaaaaaaaaaafaaaaaaabgpffghgpg",
"xdot": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaeghaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaegpcaaaaaaaaaaaaaajaaaaaaaihpffghgpgpfegpgehegpcaaaaaaaaaaaaaajaaaaaaaghpffghgpgpfegpgehegpcaaaaaaaaaaaaaajaaaaaaabgpffghgpgpfegpgeh",
"z": "jhpnnagiieahaaaadaaaaaaaaaaaaaaaaaegdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"parameter_values": [
-1.2,
1.2,
0.0,
0.0,
1.45,
0.75
],
"problem_class": "OCP",
"shared_lib_ext": ".so",
"solver_options": {
"Tsim": 0.06944444444444445,
"alpha_min": 0.05,
"alpha_reduction": 0.7,
"collocation_type": "GAUSS_LEGENDRE",
"custom_templates": [],
"custom_update_copy": true,
"custom_update_filename": "",
"custom_update_header_filename": "",
"eps_sufficient_descent": 0.0001,
"exact_hess_constr": 1,
"exact_hess_cost": 1,
"exact_hess_dyn": 1,
"ext_cost_num_hess": 0,
"ext_fun_compile_flags": "-O2",
"full_step_dual": 0,
"globalization": "FIXED_STEP",
"globalization_use_SOC": 0,
"hessian_approx": "GAUSS_NEWTON",
"hpipm_mode": "BALANCE",
"initialize_t_slacks": 0,
"integrator_type": "ERK",
"levenberg_marquardt": 0.0,
"line_search_use_sufficient_descent": 0,
"model_external_shared_lib_dir": null,
"model_external_shared_lib_name": null,
"nlp_solver_ext_qp_res": 0,
"nlp_solver_max_iter": 100,
"nlp_solver_step_length": 1.0,
"nlp_solver_tol_comp": 1e-06,
"nlp_solver_tol_eq": 1e-06,
"nlp_solver_tol_ineq": 1e-06,
"nlp_solver_tol_stat": 1e-06,
"nlp_solver_type": "SQP_RTI",
"print_level": 0,
"qp_solver": "PARTIAL_CONDENSING_HPIPM",
"qp_solver_cond_N": 1,
"qp_solver_cond_ric_alg": 1,
"qp_solver_iter_max": 10,
"qp_solver_ric_alg": 1,
"qp_solver_tol_comp": 0.001,
"qp_solver_tol_eq": 0.001,
"qp_solver_tol_ineq": 0.001,
"qp_solver_tol_stat": 0.001,
"qp_solver_warm_start": 0,
"regularize_method": null,
"shooting_nodes": [
0.0,
0.06944444444444445,
0.2777777777777778,
0.625,
1.1111111111111112,
1.7361111111111114,
2.5,
3.4027777777777786,
4.444444444444445,
5.625,
6.9444444444444455,
8.402777777777777,
10.0
],
"sim_method_jac_reuse": [
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"sim_method_newton_iter": 3,
"sim_method_newton_tol": 0.0,
"sim_method_num_stages": [
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4
],
"sim_method_num_steps": [
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
"tf": 10.0,
"time_steps": [
0.06944444444444445,
0.20833333333333334,
0.3472222222222222,
0.48611111111111116,
0.6250000000000002,
0.7638888888888886,
0.9027777777777786,
1.041666666666666,
1.1805555555555554,
1.3194444444444455,
1.4583333333333313,
1.5972222222222232
]
}
}
@@ -21,7 +21,7 @@ class TestLatControl:
CI = CarInterface(CP, CarController, CarState)
VM = VehicleModel(CP)
controller = controller(CP, CI)
controller = controller(CP.as_reader(), CI)
CS = car.CarState.new_message()
CS.vEgo = 30
+1 -2
View File
@@ -12,8 +12,7 @@ def plannerd_thread():
cloudlog.info("plannerd is waiting for CarParams")
params = Params()
with car.CarParams.from_bytes(params.get("CarParams", block=True)) as msg:
CP = msg
CP = messaging.log_from_bytes(params.get("CarParams", block=True), car.CarParams)
cloudlog.info("plannerd got CarParams: %s", CP.carName)
longitudinal_planner = LongitudinalPlanner(CP)
+1 -2
View File
@@ -288,8 +288,7 @@ def main():
# wait for stats about the car to come in from controls
cloudlog.info("radard is waiting for CarParams")
with car.CarParams.from_bytes(Params().get("CarParams", block=True)) as msg:
CP = msg
CP = messaging.log_from_bytes(Params().get("CarParams", block=True), car.CarParams)
cloudlog.info("radard got CarParams")
# import the radar from the fingerprint
+1 -1
View File
@@ -38,7 +38,7 @@ class PointBuckets:
def is_calculable(self) -> bool:
return all(len(v) > 0 for v in self.buckets.values())
def add_point(self, x: float, y: float, bucket_val: float) -> None:
def add_point(self, x: float, y: float) -> None:
raise NotImplementedError
def get_points(self, num_points: int = None) -> Any:
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_4405245383551283102) {
out_4405245383551283102[0] = delta_x[0] + nom_x[0];
out_4405245383551283102[1] = delta_x[1] + nom_x[1];
out_4405245383551283102[2] = delta_x[2] + nom_x[2];
out_4405245383551283102[3] = delta_x[3] + nom_x[3];
out_4405245383551283102[4] = delta_x[4] + nom_x[4];
out_4405245383551283102[5] = delta_x[5] + nom_x[5];
out_4405245383551283102[6] = delta_x[6] + nom_x[6];
out_4405245383551283102[7] = delta_x[7] + nom_x[7];
out_4405245383551283102[8] = delta_x[8] + nom_x[8];
void err_fun(double *nom_x, double *delta_x, double *out_7683831691601887608) {
out_7683831691601887608[0] = delta_x[0] + nom_x[0];
out_7683831691601887608[1] = delta_x[1] + nom_x[1];
out_7683831691601887608[2] = delta_x[2] + nom_x[2];
out_7683831691601887608[3] = delta_x[3] + nom_x[3];
out_7683831691601887608[4] = delta_x[4] + nom_x[4];
out_7683831691601887608[5] = delta_x[5] + nom_x[5];
out_7683831691601887608[6] = delta_x[6] + nom_x[6];
out_7683831691601887608[7] = delta_x[7] + nom_x[7];
out_7683831691601887608[8] = delta_x[8] + nom_x[8];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_6814225357492049644) {
out_6814225357492049644[0] = -nom_x[0] + true_x[0];
out_6814225357492049644[1] = -nom_x[1] + true_x[1];
out_6814225357492049644[2] = -nom_x[2] + true_x[2];
out_6814225357492049644[3] = -nom_x[3] + true_x[3];
out_6814225357492049644[4] = -nom_x[4] + true_x[4];
out_6814225357492049644[5] = -nom_x[5] + true_x[5];
out_6814225357492049644[6] = -nom_x[6] + true_x[6];
out_6814225357492049644[7] = -nom_x[7] + true_x[7];
out_6814225357492049644[8] = -nom_x[8] + true_x[8];
void inv_err_fun(double *nom_x, double *true_x, double *out_2772021370076241199) {
out_2772021370076241199[0] = -nom_x[0] + true_x[0];
out_2772021370076241199[1] = -nom_x[1] + true_x[1];
out_2772021370076241199[2] = -nom_x[2] + true_x[2];
out_2772021370076241199[3] = -nom_x[3] + true_x[3];
out_2772021370076241199[4] = -nom_x[4] + true_x[4];
out_2772021370076241199[5] = -nom_x[5] + true_x[5];
out_2772021370076241199[6] = -nom_x[6] + true_x[6];
out_2772021370076241199[7] = -nom_x[7] + true_x[7];
out_2772021370076241199[8] = -nom_x[8] + true_x[8];
}
void H_mod_fun(double *state, double *out_8873206987470723373) {
out_8873206987470723373[0] = 1.0;
out_8873206987470723373[1] = 0;
out_8873206987470723373[2] = 0;
out_8873206987470723373[3] = 0;
out_8873206987470723373[4] = 0;
out_8873206987470723373[5] = 0;
out_8873206987470723373[6] = 0;
out_8873206987470723373[7] = 0;
out_8873206987470723373[8] = 0;
out_8873206987470723373[9] = 0;
out_8873206987470723373[10] = 1.0;
out_8873206987470723373[11] = 0;
out_8873206987470723373[12] = 0;
out_8873206987470723373[13] = 0;
out_8873206987470723373[14] = 0;
out_8873206987470723373[15] = 0;
out_8873206987470723373[16] = 0;
out_8873206987470723373[17] = 0;
out_8873206987470723373[18] = 0;
out_8873206987470723373[19] = 0;
out_8873206987470723373[20] = 1.0;
out_8873206987470723373[21] = 0;
out_8873206987470723373[22] = 0;
out_8873206987470723373[23] = 0;
out_8873206987470723373[24] = 0;
out_8873206987470723373[25] = 0;
out_8873206987470723373[26] = 0;
out_8873206987470723373[27] = 0;
out_8873206987470723373[28] = 0;
out_8873206987470723373[29] = 0;
out_8873206987470723373[30] = 1.0;
out_8873206987470723373[31] = 0;
out_8873206987470723373[32] = 0;
out_8873206987470723373[33] = 0;
out_8873206987470723373[34] = 0;
out_8873206987470723373[35] = 0;
out_8873206987470723373[36] = 0;
out_8873206987470723373[37] = 0;
out_8873206987470723373[38] = 0;
out_8873206987470723373[39] = 0;
out_8873206987470723373[40] = 1.0;
out_8873206987470723373[41] = 0;
out_8873206987470723373[42] = 0;
out_8873206987470723373[43] = 0;
out_8873206987470723373[44] = 0;
out_8873206987470723373[45] = 0;
out_8873206987470723373[46] = 0;
out_8873206987470723373[47] = 0;
out_8873206987470723373[48] = 0;
out_8873206987470723373[49] = 0;
out_8873206987470723373[50] = 1.0;
out_8873206987470723373[51] = 0;
out_8873206987470723373[52] = 0;
out_8873206987470723373[53] = 0;
out_8873206987470723373[54] = 0;
out_8873206987470723373[55] = 0;
out_8873206987470723373[56] = 0;
out_8873206987470723373[57] = 0;
out_8873206987470723373[58] = 0;
out_8873206987470723373[59] = 0;
out_8873206987470723373[60] = 1.0;
out_8873206987470723373[61] = 0;
out_8873206987470723373[62] = 0;
out_8873206987470723373[63] = 0;
out_8873206987470723373[64] = 0;
out_8873206987470723373[65] = 0;
out_8873206987470723373[66] = 0;
out_8873206987470723373[67] = 0;
out_8873206987470723373[68] = 0;
out_8873206987470723373[69] = 0;
out_8873206987470723373[70] = 1.0;
out_8873206987470723373[71] = 0;
out_8873206987470723373[72] = 0;
out_8873206987470723373[73] = 0;
out_8873206987470723373[74] = 0;
out_8873206987470723373[75] = 0;
out_8873206987470723373[76] = 0;
out_8873206987470723373[77] = 0;
out_8873206987470723373[78] = 0;
out_8873206987470723373[79] = 0;
out_8873206987470723373[80] = 1.0;
void H_mod_fun(double *state, double *out_2876076255899625510) {
out_2876076255899625510[0] = 1.0;
out_2876076255899625510[1] = 0;
out_2876076255899625510[2] = 0;
out_2876076255899625510[3] = 0;
out_2876076255899625510[4] = 0;
out_2876076255899625510[5] = 0;
out_2876076255899625510[6] = 0;
out_2876076255899625510[7] = 0;
out_2876076255899625510[8] = 0;
out_2876076255899625510[9] = 0;
out_2876076255899625510[10] = 1.0;
out_2876076255899625510[11] = 0;
out_2876076255899625510[12] = 0;
out_2876076255899625510[13] = 0;
out_2876076255899625510[14] = 0;
out_2876076255899625510[15] = 0;
out_2876076255899625510[16] = 0;
out_2876076255899625510[17] = 0;
out_2876076255899625510[18] = 0;
out_2876076255899625510[19] = 0;
out_2876076255899625510[20] = 1.0;
out_2876076255899625510[21] = 0;
out_2876076255899625510[22] = 0;
out_2876076255899625510[23] = 0;
out_2876076255899625510[24] = 0;
out_2876076255899625510[25] = 0;
out_2876076255899625510[26] = 0;
out_2876076255899625510[27] = 0;
out_2876076255899625510[28] = 0;
out_2876076255899625510[29] = 0;
out_2876076255899625510[30] = 1.0;
out_2876076255899625510[31] = 0;
out_2876076255899625510[32] = 0;
out_2876076255899625510[33] = 0;
out_2876076255899625510[34] = 0;
out_2876076255899625510[35] = 0;
out_2876076255899625510[36] = 0;
out_2876076255899625510[37] = 0;
out_2876076255899625510[38] = 0;
out_2876076255899625510[39] = 0;
out_2876076255899625510[40] = 1.0;
out_2876076255899625510[41] = 0;
out_2876076255899625510[42] = 0;
out_2876076255899625510[43] = 0;
out_2876076255899625510[44] = 0;
out_2876076255899625510[45] = 0;
out_2876076255899625510[46] = 0;
out_2876076255899625510[47] = 0;
out_2876076255899625510[48] = 0;
out_2876076255899625510[49] = 0;
out_2876076255899625510[50] = 1.0;
out_2876076255899625510[51] = 0;
out_2876076255899625510[52] = 0;
out_2876076255899625510[53] = 0;
out_2876076255899625510[54] = 0;
out_2876076255899625510[55] = 0;
out_2876076255899625510[56] = 0;
out_2876076255899625510[57] = 0;
out_2876076255899625510[58] = 0;
out_2876076255899625510[59] = 0;
out_2876076255899625510[60] = 1.0;
out_2876076255899625510[61] = 0;
out_2876076255899625510[62] = 0;
out_2876076255899625510[63] = 0;
out_2876076255899625510[64] = 0;
out_2876076255899625510[65] = 0;
out_2876076255899625510[66] = 0;
out_2876076255899625510[67] = 0;
out_2876076255899625510[68] = 0;
out_2876076255899625510[69] = 0;
out_2876076255899625510[70] = 1.0;
out_2876076255899625510[71] = 0;
out_2876076255899625510[72] = 0;
out_2876076255899625510[73] = 0;
out_2876076255899625510[74] = 0;
out_2876076255899625510[75] = 0;
out_2876076255899625510[76] = 0;
out_2876076255899625510[77] = 0;
out_2876076255899625510[78] = 0;
out_2876076255899625510[79] = 0;
out_2876076255899625510[80] = 1.0;
}
void f_fun(double *state, double dt, double *out_3688990143768374912) {
out_3688990143768374912[0] = state[0];
out_3688990143768374912[1] = state[1];
out_3688990143768374912[2] = state[2];
out_3688990143768374912[3] = state[3];
out_3688990143768374912[4] = state[4];
out_3688990143768374912[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_3688990143768374912[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_3688990143768374912[7] = state[7];
out_3688990143768374912[8] = state[8];
void f_fun(double *state, double dt, double *out_711338878401685436) {
out_711338878401685436[0] = state[0];
out_711338878401685436[1] = state[1];
out_711338878401685436[2] = state[2];
out_711338878401685436[3] = state[3];
out_711338878401685436[4] = state[4];
out_711338878401685436[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_711338878401685436[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_711338878401685436[7] = state[7];
out_711338878401685436[8] = state[8];
}
void F_fun(double *state, double dt, double *out_6095431430690537089) {
out_6095431430690537089[0] = 1;
out_6095431430690537089[1] = 0;
out_6095431430690537089[2] = 0;
out_6095431430690537089[3] = 0;
out_6095431430690537089[4] = 0;
out_6095431430690537089[5] = 0;
out_6095431430690537089[6] = 0;
out_6095431430690537089[7] = 0;
out_6095431430690537089[8] = 0;
out_6095431430690537089[9] = 0;
out_6095431430690537089[10] = 1;
out_6095431430690537089[11] = 0;
out_6095431430690537089[12] = 0;
out_6095431430690537089[13] = 0;
out_6095431430690537089[14] = 0;
out_6095431430690537089[15] = 0;
out_6095431430690537089[16] = 0;
out_6095431430690537089[17] = 0;
out_6095431430690537089[18] = 0;
out_6095431430690537089[19] = 0;
out_6095431430690537089[20] = 1;
out_6095431430690537089[21] = 0;
out_6095431430690537089[22] = 0;
out_6095431430690537089[23] = 0;
out_6095431430690537089[24] = 0;
out_6095431430690537089[25] = 0;
out_6095431430690537089[26] = 0;
out_6095431430690537089[27] = 0;
out_6095431430690537089[28] = 0;
out_6095431430690537089[29] = 0;
out_6095431430690537089[30] = 1;
out_6095431430690537089[31] = 0;
out_6095431430690537089[32] = 0;
out_6095431430690537089[33] = 0;
out_6095431430690537089[34] = 0;
out_6095431430690537089[35] = 0;
out_6095431430690537089[36] = 0;
out_6095431430690537089[37] = 0;
out_6095431430690537089[38] = 0;
out_6095431430690537089[39] = 0;
out_6095431430690537089[40] = 1;
out_6095431430690537089[41] = 0;
out_6095431430690537089[42] = 0;
out_6095431430690537089[43] = 0;
out_6095431430690537089[44] = 0;
out_6095431430690537089[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_6095431430690537089[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_6095431430690537089[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_6095431430690537089[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_6095431430690537089[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_6095431430690537089[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_6095431430690537089[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_6095431430690537089[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_6095431430690537089[53] = -9.8000000000000007*dt;
out_6095431430690537089[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_6095431430690537089[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_6095431430690537089[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_6095431430690537089[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_6095431430690537089[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_6095431430690537089[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_6095431430690537089[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_6095431430690537089[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_6095431430690537089[62] = 0;
out_6095431430690537089[63] = 0;
out_6095431430690537089[64] = 0;
out_6095431430690537089[65] = 0;
out_6095431430690537089[66] = 0;
out_6095431430690537089[67] = 0;
out_6095431430690537089[68] = 0;
out_6095431430690537089[69] = 0;
out_6095431430690537089[70] = 1;
out_6095431430690537089[71] = 0;
out_6095431430690537089[72] = 0;
out_6095431430690537089[73] = 0;
out_6095431430690537089[74] = 0;
out_6095431430690537089[75] = 0;
out_6095431430690537089[76] = 0;
out_6095431430690537089[77] = 0;
out_6095431430690537089[78] = 0;
out_6095431430690537089[79] = 0;
out_6095431430690537089[80] = 1;
void F_fun(double *state, double dt, double *out_782397592704791785) {
out_782397592704791785[0] = 1;
out_782397592704791785[1] = 0;
out_782397592704791785[2] = 0;
out_782397592704791785[3] = 0;
out_782397592704791785[4] = 0;
out_782397592704791785[5] = 0;
out_782397592704791785[6] = 0;
out_782397592704791785[7] = 0;
out_782397592704791785[8] = 0;
out_782397592704791785[9] = 0;
out_782397592704791785[10] = 1;
out_782397592704791785[11] = 0;
out_782397592704791785[12] = 0;
out_782397592704791785[13] = 0;
out_782397592704791785[14] = 0;
out_782397592704791785[15] = 0;
out_782397592704791785[16] = 0;
out_782397592704791785[17] = 0;
out_782397592704791785[18] = 0;
out_782397592704791785[19] = 0;
out_782397592704791785[20] = 1;
out_782397592704791785[21] = 0;
out_782397592704791785[22] = 0;
out_782397592704791785[23] = 0;
out_782397592704791785[24] = 0;
out_782397592704791785[25] = 0;
out_782397592704791785[26] = 0;
out_782397592704791785[27] = 0;
out_782397592704791785[28] = 0;
out_782397592704791785[29] = 0;
out_782397592704791785[30] = 1;
out_782397592704791785[31] = 0;
out_782397592704791785[32] = 0;
out_782397592704791785[33] = 0;
out_782397592704791785[34] = 0;
out_782397592704791785[35] = 0;
out_782397592704791785[36] = 0;
out_782397592704791785[37] = 0;
out_782397592704791785[38] = 0;
out_782397592704791785[39] = 0;
out_782397592704791785[40] = 1;
out_782397592704791785[41] = 0;
out_782397592704791785[42] = 0;
out_782397592704791785[43] = 0;
out_782397592704791785[44] = 0;
out_782397592704791785[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_782397592704791785[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_782397592704791785[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_782397592704791785[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_782397592704791785[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_782397592704791785[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_782397592704791785[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_782397592704791785[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_782397592704791785[53] = -9.8000000000000007*dt;
out_782397592704791785[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_782397592704791785[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_782397592704791785[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_782397592704791785[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_782397592704791785[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_782397592704791785[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_782397592704791785[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_782397592704791785[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_782397592704791785[62] = 0;
out_782397592704791785[63] = 0;
out_782397592704791785[64] = 0;
out_782397592704791785[65] = 0;
out_782397592704791785[66] = 0;
out_782397592704791785[67] = 0;
out_782397592704791785[68] = 0;
out_782397592704791785[69] = 0;
out_782397592704791785[70] = 1;
out_782397592704791785[71] = 0;
out_782397592704791785[72] = 0;
out_782397592704791785[73] = 0;
out_782397592704791785[74] = 0;
out_782397592704791785[75] = 0;
out_782397592704791785[76] = 0;
out_782397592704791785[77] = 0;
out_782397592704791785[78] = 0;
out_782397592704791785[79] = 0;
out_782397592704791785[80] = 1;
}
void h_25(double *state, double *unused, double *out_2085281169667296275) {
out_2085281169667296275[0] = state[6];
void h_25(double *state, double *unused, double *out_2211854499255104178) {
out_2211854499255104178[0] = state[6];
}
void H_25(double *state, double *unused, double *out_1623550404401847017) {
out_1623550404401847017[0] = 0;
out_1623550404401847017[1] = 0;
out_1623550404401847017[2] = 0;
out_1623550404401847017[3] = 0;
out_1623550404401847017[4] = 0;
out_1623550404401847017[5] = 0;
out_1623550404401847017[6] = 1;
out_1623550404401847017[7] = 0;
out_1623550404401847017[8] = 0;
void H_25(double *state, double *unused, double *out_2676605904450648455) {
out_2676605904450648455[0] = 0;
out_2676605904450648455[1] = 0;
out_2676605904450648455[2] = 0;
out_2676605904450648455[3] = 0;
out_2676605904450648455[4] = 0;
out_2676605904450648455[5] = 0;
out_2676605904450648455[6] = 1;
out_2676605904450648455[7] = 0;
out_2676605904450648455[8] = 0;
}
void h_24(double *state, double *unused, double *out_953773106991605179) {
out_953773106991605179[0] = state[4];
out_953773106991605179[1] = state[5];
void h_24(double *state, double *unused, double *out_3020119525027846586) {
out_3020119525027846586[0] = state[4];
out_3020119525027846586[1] = state[5];
}
void H_24(double *state, double *unused, double *out_4462623414451625302) {
out_4462623414451625302[0] = 0;
out_4462623414451625302[1] = 0;
out_4462623414451625302[2] = 0;
out_4462623414451625302[3] = 0;
out_4462623414451625302[4] = 1;
out_4462623414451625302[5] = 0;
out_4462623414451625302[6] = 0;
out_4462623414451625302[7] = 0;
out_4462623414451625302[8] = 0;
out_4462623414451625302[9] = 0;
out_4462623414451625302[10] = 0;
out_4462623414451625302[11] = 0;
out_4462623414451625302[12] = 0;
out_4462623414451625302[13] = 0;
out_4462623414451625302[14] = 1;
out_4462623414451625302[15] = 0;
out_4462623414451625302[16] = 0;
out_4462623414451625302[17] = 0;
void H_24(double *state, double *unused, double *out_3521602513234343854) {
out_3521602513234343854[0] = 0;
out_3521602513234343854[1] = 0;
out_3521602513234343854[2] = 0;
out_3521602513234343854[3] = 0;
out_3521602513234343854[4] = 1;
out_3521602513234343854[5] = 0;
out_3521602513234343854[6] = 0;
out_3521602513234343854[7] = 0;
out_3521602513234343854[8] = 0;
out_3521602513234343854[9] = 0;
out_3521602513234343854[10] = 0;
out_3521602513234343854[11] = 0;
out_3521602513234343854[12] = 0;
out_3521602513234343854[13] = 0;
out_3521602513234343854[14] = 1;
out_3521602513234343854[15] = 0;
out_3521602513234343854[16] = 0;
out_3521602513234343854[17] = 0;
}
void h_30(double *state, double *unused, double *out_4081832870303838028) {
out_4081832870303838028[0] = state[4];
void h_30(double *state, double *unused, double *out_1936660436970598289) {
out_1936660436970598289[0] = state[4];
}
void H_30(double *state, double *unused, double *out_5293139937089769738) {
out_5293139937089769738[0] = 0;
out_5293139937089769738[1] = 0;
out_5293139937089769738[2] = 0;
out_5293139937089769738[3] = 0;
out_5293139937089769738[4] = 1;
out_5293139937089769738[5] = 0;
out_5293139937089769738[6] = 0;
out_5293139937089769738[7] = 0;
out_5293139937089769738[8] = 0;
void H_30(double *state, double *unused, double *out_5194938862957897082) {
out_5194938862957897082[0] = 0;
out_5194938862957897082[1] = 0;
out_5194938862957897082[2] = 0;
out_5194938862957897082[3] = 0;
out_5194938862957897082[4] = 1;
out_5194938862957897082[5] = 0;
out_5194938862957897082[6] = 0;
out_5194938862957897082[7] = 0;
out_5194938862957897082[8] = 0;
}
void h_26(double *state, double *unused, double *out_4050923066687483124) {
out_4050923066687483124[0] = state[7];
void h_26(double *state, double *unused, double *out_667744883838099362) {
out_667744883838099362[0] = state[7];
}
void H_26(double *state, double *unused, double *out_966696340291535113) {
out_966696340291535113[0] = 0;
out_966696340291535113[1] = 0;
out_966696340291535113[2] = 0;
out_966696340291535113[3] = 0;
out_966696340291535113[4] = 0;
out_966696340291535113[5] = 0;
out_966696340291535113[6] = 0;
out_966696340291535113[7] = 1;
out_966696340291535113[8] = 0;
void H_26(double *state, double *unused, double *out_1064897414423407769) {
out_1064897414423407769[0] = 0;
out_1064897414423407769[1] = 0;
out_1064897414423407769[2] = 0;
out_1064897414423407769[3] = 0;
out_1064897414423407769[4] = 0;
out_1064897414423407769[5] = 0;
out_1064897414423407769[6] = 0;
out_1064897414423407769[7] = 1;
out_1064897414423407769[8] = 0;
}
void h_27(double *state, double *unused, double *out_7086954437328141920) {
out_7086954437328141920[0] = state[3];
void h_27(double *state, double *unused, double *out_7553721735141134741) {
out_7553721735141134741[0] = state[3];
}
void H_27(double *state, double *unused, double *out_3927652663345511998) {
out_3927652663345511998[0] = 0;
out_3927652663345511998[1] = 0;
out_3927652663345511998[2] = 0;
out_3927652663345511998[3] = 1;
out_3927652663345511998[4] = 0;
out_3927652663345511998[5] = 0;
out_3927652663345511998[6] = 0;
out_3927652663345511998[7] = 0;
out_3927652663345511998[8] = 0;
void H_27(double *state, double *unused, double *out_7418532934141840299) {
out_7418532934141840299[0] = 0;
out_7418532934141840299[1] = 0;
out_7418532934141840299[2] = 0;
out_7418532934141840299[3] = 1;
out_7418532934141840299[4] = 0;
out_7418532934141840299[5] = 0;
out_7418532934141840299[6] = 0;
out_7418532934141840299[7] = 0;
out_7418532934141840299[8] = 0;
}
void h_29(double *state, double *unused, double *out_6929767768977012775) {
out_6929767768977012775[0] = state[1];
void h_29(double *state, double *unused, double *out_9074940202310252514) {
out_9074940202310252514[0] = state[1];
}
void H_29(double *state, double *unused, double *out_1242658007230694903) {
out_1242658007230694903[0] = 0;
out_1242658007230694903[1] = 1;
out_1242658007230694903[2] = 0;
out_1242658007230694903[3] = 0;
out_1242658007230694903[4] = 0;
out_1242658007230694903[5] = 0;
out_1242658007230694903[6] = 0;
out_1242658007230694903[7] = 0;
out_1242658007230694903[8] = 0;
void H_29(double *state, double *unused, double *out_5705170207272289266) {
out_5705170207272289266[0] = 0;
out_5705170207272289266[1] = 1;
out_5705170207272289266[2] = 0;
out_5705170207272289266[3] = 0;
out_5705170207272289266[4] = 0;
out_5705170207272289266[5] = 0;
out_5705170207272289266[6] = 0;
out_5705170207272289266[7] = 0;
out_5705170207272289266[8] = 0;
}
void h_28(double *state, double *unused, double *out_6358116368720564051) {
out_6358116368720564051[0] = state[0];
void h_28(double *state, double *unused, double *out_2552048467480289096) {
out_2552048467480289096[0] = state[0];
}
void H_28(double *state, double *unused, double *out_720972264334631348) {
out_720972264334631348[0] = 1;
out_720972264334631348[1] = 0;
out_720972264334631348[2] = 0;
out_720972264334631348[3] = 0;
out_720972264334631348[4] = 0;
out_720972264334631348[5] = 0;
out_720972264334631348[6] = 0;
out_720972264334631348[7] = 0;
out_720972264334631348[8] = 0;
void H_28(double *state, double *unused, double *out_622771190202758692) {
out_622771190202758692[0] = 1;
out_622771190202758692[1] = 0;
out_622771190202758692[2] = 0;
out_622771190202758692[3] = 0;
out_622771190202758692[4] = 0;
out_622771190202758692[5] = 0;
out_622771190202758692[6] = 0;
out_622771190202758692[7] = 0;
out_622771190202758692[8] = 0;
}
void h_31(double *state, double *unused, double *out_1552168358586726075) {
out_1552168358586726075[0] = state[8];
void h_31(double *state, double *unused, double *out_5159580489610589139) {
out_5159580489610589139[0] = state[8];
}
void H_31(double *state, double *unused, double *out_1592904442524886589) {
out_1592904442524886589[0] = 0;
out_1592904442524886589[1] = 0;
out_1592904442524886589[2] = 0;
out_1592904442524886589[3] = 0;
out_1592904442524886589[4] = 0;
out_1592904442524886589[5] = 0;
out_1592904442524886589[6] = 0;
out_1592904442524886589[7] = 0;
out_1592904442524886589[8] = 1;
void H_31(double *state, double *unused, double *out_2707251866327608883) {
out_2707251866327608883[0] = 0;
out_2707251866327608883[1] = 0;
out_2707251866327608883[2] = 0;
out_2707251866327608883[3] = 0;
out_2707251866327608883[4] = 0;
out_2707251866327608883[5] = 0;
out_2707251866327608883[6] = 0;
out_2707251866327608883[7] = 0;
out_2707251866327608883[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_4405245383551283102) {
err_fun(nom_x, delta_x, out_4405245383551283102);
void car_err_fun(double *nom_x, double *delta_x, double *out_7683831691601887608) {
err_fun(nom_x, delta_x, out_7683831691601887608);
}
void car_inv_err_fun(double *nom_x, double *true_x, double *out_6814225357492049644) {
inv_err_fun(nom_x, true_x, out_6814225357492049644);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_2772021370076241199) {
inv_err_fun(nom_x, true_x, out_2772021370076241199);
}
void car_H_mod_fun(double *state, double *out_8873206987470723373) {
H_mod_fun(state, out_8873206987470723373);
void car_H_mod_fun(double *state, double *out_2876076255899625510) {
H_mod_fun(state, out_2876076255899625510);
}
void car_f_fun(double *state, double dt, double *out_3688990143768374912) {
f_fun(state, dt, out_3688990143768374912);
void car_f_fun(double *state, double dt, double *out_711338878401685436) {
f_fun(state, dt, out_711338878401685436);
}
void car_F_fun(double *state, double dt, double *out_6095431430690537089) {
F_fun(state, dt, out_6095431430690537089);
void car_F_fun(double *state, double dt, double *out_782397592704791785) {
F_fun(state, dt, out_782397592704791785);
}
void car_h_25(double *state, double *unused, double *out_2085281169667296275) {
h_25(state, unused, out_2085281169667296275);
void car_h_25(double *state, double *unused, double *out_2211854499255104178) {
h_25(state, unused, out_2211854499255104178);
}
void car_H_25(double *state, double *unused, double *out_1623550404401847017) {
H_25(state, unused, out_1623550404401847017);
void car_H_25(double *state, double *unused, double *out_2676605904450648455) {
H_25(state, unused, out_2676605904450648455);
}
void car_h_24(double *state, double *unused, double *out_953773106991605179) {
h_24(state, unused, out_953773106991605179);
void car_h_24(double *state, double *unused, double *out_3020119525027846586) {
h_24(state, unused, out_3020119525027846586);
}
void car_H_24(double *state, double *unused, double *out_4462623414451625302) {
H_24(state, unused, out_4462623414451625302);
void car_H_24(double *state, double *unused, double *out_3521602513234343854) {
H_24(state, unused, out_3521602513234343854);
}
void car_h_30(double *state, double *unused, double *out_4081832870303838028) {
h_30(state, unused, out_4081832870303838028);
void car_h_30(double *state, double *unused, double *out_1936660436970598289) {
h_30(state, unused, out_1936660436970598289);
}
void car_H_30(double *state, double *unused, double *out_5293139937089769738) {
H_30(state, unused, out_5293139937089769738);
void car_H_30(double *state, double *unused, double *out_5194938862957897082) {
H_30(state, unused, out_5194938862957897082);
}
void car_h_26(double *state, double *unused, double *out_4050923066687483124) {
h_26(state, unused, out_4050923066687483124);
void car_h_26(double *state, double *unused, double *out_667744883838099362) {
h_26(state, unused, out_667744883838099362);
}
void car_H_26(double *state, double *unused, double *out_966696340291535113) {
H_26(state, unused, out_966696340291535113);
void car_H_26(double *state, double *unused, double *out_1064897414423407769) {
H_26(state, unused, out_1064897414423407769);
}
void car_h_27(double *state, double *unused, double *out_7086954437328141920) {
h_27(state, unused, out_7086954437328141920);
void car_h_27(double *state, double *unused, double *out_7553721735141134741) {
h_27(state, unused, out_7553721735141134741);
}
void car_H_27(double *state, double *unused, double *out_3927652663345511998) {
H_27(state, unused, out_3927652663345511998);
void car_H_27(double *state, double *unused, double *out_7418532934141840299) {
H_27(state, unused, out_7418532934141840299);
}
void car_h_29(double *state, double *unused, double *out_6929767768977012775) {
h_29(state, unused, out_6929767768977012775);
void car_h_29(double *state, double *unused, double *out_9074940202310252514) {
h_29(state, unused, out_9074940202310252514);
}
void car_H_29(double *state, double *unused, double *out_1242658007230694903) {
H_29(state, unused, out_1242658007230694903);
void car_H_29(double *state, double *unused, double *out_5705170207272289266) {
H_29(state, unused, out_5705170207272289266);
}
void car_h_28(double *state, double *unused, double *out_6358116368720564051) {
h_28(state, unused, out_6358116368720564051);
void car_h_28(double *state, double *unused, double *out_2552048467480289096) {
h_28(state, unused, out_2552048467480289096);
}
void car_H_28(double *state, double *unused, double *out_720972264334631348) {
H_28(state, unused, out_720972264334631348);
void car_H_28(double *state, double *unused, double *out_622771190202758692) {
H_28(state, unused, out_622771190202758692);
}
void car_h_31(double *state, double *unused, double *out_1552168358586726075) {
h_31(state, unused, out_1552168358586726075);
void car_h_31(double *state, double *unused, double *out_5159580489610589139) {
h_31(state, unused, out_5159580489610589139);
}
void car_H_31(double *state, double *unused, double *out_1592904442524886589) {
H_31(state, unused, out_1592904442524886589);
void car_H_31(double *state, double *unused, double *out_2707251866327608883) {
H_31(state, unused, out_2707251866327608883);
}
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_4405245383551283102);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_6814225357492049644);
void car_H_mod_fun(double *state, double *out_8873206987470723373);
void car_f_fun(double *state, double dt, double *out_3688990143768374912);
void car_F_fun(double *state, double dt, double *out_6095431430690537089);
void car_h_25(double *state, double *unused, double *out_2085281169667296275);
void car_H_25(double *state, double *unused, double *out_1623550404401847017);
void car_h_24(double *state, double *unused, double *out_953773106991605179);
void car_H_24(double *state, double *unused, double *out_4462623414451625302);
void car_h_30(double *state, double *unused, double *out_4081832870303838028);
void car_H_30(double *state, double *unused, double *out_5293139937089769738);
void car_h_26(double *state, double *unused, double *out_4050923066687483124);
void car_H_26(double *state, double *unused, double *out_966696340291535113);
void car_h_27(double *state, double *unused, double *out_7086954437328141920);
void car_H_27(double *state, double *unused, double *out_3927652663345511998);
void car_h_29(double *state, double *unused, double *out_6929767768977012775);
void car_H_29(double *state, double *unused, double *out_1242658007230694903);
void car_h_28(double *state, double *unused, double *out_6358116368720564051);
void car_H_28(double *state, double *unused, double *out_720972264334631348);
void car_h_31(double *state, double *unused, double *out_1552168358586726075);
void car_H_31(double *state, double *unused, double *out_1592904442524886589);
void car_err_fun(double *nom_x, double *delta_x, double *out_7683831691601887608);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_2772021370076241199);
void car_H_mod_fun(double *state, double *out_2876076255899625510);
void car_f_fun(double *state, double dt, double *out_711338878401685436);
void car_F_fun(double *state, double dt, double *out_782397592704791785);
void car_h_25(double *state, double *unused, double *out_2211854499255104178);
void car_H_25(double *state, double *unused, double *out_2676605904450648455);
void car_h_24(double *state, double *unused, double *out_3020119525027846586);
void car_H_24(double *state, double *unused, double *out_3521602513234343854);
void car_h_30(double *state, double *unused, double *out_1936660436970598289);
void car_H_30(double *state, double *unused, double *out_5194938862957897082);
void car_h_26(double *state, double *unused, double *out_667744883838099362);
void car_H_26(double *state, double *unused, double *out_1064897414423407769);
void car_h_27(double *state, double *unused, double *out_7553721735141134741);
void car_H_27(double *state, double *unused, double *out_7418532934141840299);
void car_h_29(double *state, double *unused, double *out_9074940202310252514);
void car_H_29(double *state, double *unused, double *out_5705170207272289266);
void car_h_28(double *state, double *unused, double *out_2552048467480289096);
void car_H_28(double *state, double *unused, double *out_622771190202758692);
void car_h_31(double *state, double *unused, double *out_5159580489610589139);
void car_H_31(double *state, double *unused, double *out_2707251866327608883);
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);
Binary file not shown.
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_8605358087906380768);
void live_err_fun(double *nom_x, double *delta_x, double *out_7536170868467214378);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_2595613781234485125);
void live_H_mod_fun(double *state, double *out_8460251824602801486);
void live_f_fun(double *state, double dt, double *out_6356829281411656445);
void live_F_fun(double *state, double dt, double *out_8639720302372924628);
void live_h_4(double *state, double *unused, double *out_5024870629752735468);
void live_H_4(double *state, double *unused, double *out_1752310950812596014);
void live_h_9(double *state, double *unused, double *out_2675503251996688187);
void live_H_9(double *state, double *unused, double *out_1511121304183005369);
void live_h_10(double *state, double *unused, double *out_7370746392053236487);
void live_H_10(double *state, double *unused, double *out_7385579306469280005);
void live_h_12(double *state, double *unused, double *out_3987271481309322321);
void live_H_12(double *state, double *unused, double *out_1131211925765002347);
void live_h_35(double *state, double *unused, double *out_387267383515705374);
void live_H_35(double *state, double *unused, double *out_1614351106560011362);
void live_h_32(double *state, double *unused, double *out_8661748451588242164);
void live_H_32(double *state, double *unused, double *out_7415655478767623920);
void live_h_13(double *state, double *unused, double *out_4888723774468744577);
void live_H_13(double *state, double *unused, double *out_1203933476290211087);
void live_h_14(double *state, double *unused, double *out_2675503251996688187);
void live_H_14(double *state, double *unused, double *out_1511121304183005369);
void live_h_33(double *state, double *unused, double *out_8061952833475180318);
void live_H_33(double *state, double *unused, double *out_4764908111198868966);
void live_H(double *in_vec, double *out_3996265270042170641);
void live_err_fun(double *nom_x, double *delta_x, double *out_3461674683723829337);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_7385553611252329077);
void live_H_mod_fun(double *state, double *out_8192941733470122092);
void live_f_fun(double *state, double dt, double *out_3557410023905793232);
void live_F_fun(double *state, double dt, double *out_8557837785947457076);
void live_h_4(double *state, double *unused, double *out_1179371322125232753);
void live_H_4(double *state, double *unused, double *out_7315580968579262055);
void live_h_9(double *state, double *unused, double *out_7267185231670305086);
void live_H_9(double *state, double *unused, double *out_7556770615208852700);
void live_h_10(double *state, double *unused, double *out_5095924145481726408);
void live_H_10(double *state, double *unused, double *out_5645866099687886483);
void live_h_12(double *state, double *unused, double *out_2512392799571043135);
void live_H_12(double *state, double *unused, double *out_6111706697098327766);
void live_h_35(double *state, double *unused, double *out_7549588061413473025);
void live_H_35(double *state, double *unused, double *out_3366143664773314057);
void live_h_32(double *state, double *unused, double *out_1075397825167574537);
void live_H_32(double *state, double *unused, double *out_5548874522593978030);
void live_h_13(double *state, double *unused, double *out_5119914902696682383);
void live_H_13(double *state, double *unused, double *out_8634591391102879904);
void live_h_14(double *state, double *unused, double *out_7267185231670305086);
void live_H_14(double *state, double *unused, double *out_7556770615208852700);
void live_h_33(double *state, double *unused, double *out_834113502876921908);
void live_H_33(double *state, double *unused, double *out_215586660134456453);
void live_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
+2 -4
View File
@@ -5,8 +5,7 @@ import json
import numpy as np
import cereal.messaging as messaging
from cereal import car
from cereal import log
from cereal import car, log
from openpilot.common.params import Params
from openpilot.common.realtime import config_realtime_process, DT_MDL
from openpilot.common.numpy_fast import clip
@@ -129,8 +128,7 @@ def main():
params_reader = Params()
# wait for stats about the car to come in from controls
cloudlog.info("paramsd is waiting for CarParams")
with car.CarParams.from_bytes(params_reader.get("CarParams", block=True)) as msg:
CP = msg
CP = messaging.log_from_bytes(params_reader.get("CarParams", block=True), car.CarParams)
cloudlog.info("paramsd got CarParams")
min_sr, max_sr = 0.5 * CP.steerRatio, 2.0 * CP.steerRatio
+24 -13
View File
@@ -36,8 +36,8 @@ ALLOWED_CARS = ['toyota', 'hyundai']
def slope2rot(slope):
sin = np.sqrt(slope**2 / (slope**2 + 1))
cos = np.sqrt(1 / (slope**2 + 1))
sin = np.sqrt(slope ** 2 / (slope ** 2 + 1))
cos = np.sqrt(1 / (slope ** 2 + 1))
return np.array([[cos, -sin], [sin, cos]])
@@ -50,9 +50,10 @@ class TorqueBuckets(PointBuckets):
class TorqueEstimator(ParameterEstimator):
def __init__(self, CP, decimated=False):
def __init__(self, CP, decimated=False, track_all_points=False):
self.hist_len = int(HISTORY / DT_MDL)
self.lag = CP.steerActuatorDelay + .2 # from controlsd
self.lag = CP.steerActuatorDelay + .2 # from controlsd
self.track_all_points = track_all_points # for offline analysis, without max lateral accel or max steer torque filters
if decimated:
self.min_bucket_points = MIN_BUCKET_POINTS / 10
self.min_points_total = MIN_POINTS_TOTAL_QLOG
@@ -119,7 +120,8 @@ class TorqueEstimator(ParameterEstimator):
for param in initial_params:
self.filtered_params[param] = FirstOrderFilter(initial_params[param], self.decay, DT_MDL)
def get_restore_key(self, CP, version):
@staticmethod
def get_restore_key(CP, version):
a, b = None, None
if CP.lateralTuning.which() == 'torque':
a = CP.lateralTuning.torque.friction
@@ -135,6 +137,7 @@ class TorqueEstimator(ParameterEstimator):
min_points_total=self.min_points_total,
points_per_bucket=POINTS_PER_BUCKET,
rowsize=3)
self.all_torque_points = []
def estimate_params(self):
points = self.filtered_points.get_points(self.fit_points)
@@ -159,25 +162,32 @@ class TorqueEstimator(ParameterEstimator):
def handle_log(self, t, which, msg):
if which == "carControl":
self.raw_points["carControl_t"].append(t + self.lag)
self.raw_points["active"].append(msg.latActive)
self.raw_points["lat_active"].append(msg.latActive)
elif which == "carOutput":
self.raw_points["carOutput_t"].append(t + self.lag)
self.raw_points["steer_torque"].append(-msg.actuatorsOutput.steer)
elif which == "carState":
self.raw_points["carState_t"].append(t + self.lag)
# TODO: check if high aEgo affects resulting lateral accel
self.raw_points["vego"].append(msg.vEgo)
self.raw_points["steer_override"].append(msg.steeringPressed)
# calculate lateral accel from past steering torque
elif which == "liveLocationKalman":
if len(self.raw_points['steer_torque']) == self.hist_len:
yaw_rate = msg.angularVelocityCalibrated.value[2]
roll = msg.orientationNED.value[0]
active = np.interp(np.arange(t - MIN_ENGAGE_BUFFER, t, DT_MDL), self.raw_points['carControl_t'], self.raw_points['active']).astype(bool)
lat_active = np.interp(np.arange(t - MIN_ENGAGE_BUFFER, t, DT_MDL), self.raw_points['carControl_t'], self.raw_points['lat_active']).astype(bool)
steer_override = np.interp(np.arange(t - MIN_ENGAGE_BUFFER, t, DT_MDL), self.raw_points['carState_t'], self.raw_points['steer_override']).astype(bool)
vego = np.interp(t, self.raw_points['carState_t'], self.raw_points['vego'])
steer = np.interp(t, self.raw_points['carOutput_t'], self.raw_points['steer_torque'])
lateral_acc = (vego * yaw_rate) - (np.sin(roll) * ACCELERATION_DUE_TO_GRAVITY)
if all(active) and (not any(steer_override)) and (vego > MIN_VEL) and (abs(steer) > STEER_MIN_THRESHOLD) and (abs(lateral_acc) <= LAT_ACC_THRESHOLD):
self.filtered_points.add_point(float(steer), float(lateral_acc))
steer = np.interp(t, self.raw_points['carOutput_t'], self.raw_points['steer_torque']).item()
lateral_acc = (vego * yaw_rate) - (np.sin(roll) * ACCELERATION_DUE_TO_GRAVITY).item()
if all(lat_active) and not any(steer_override) and (vego > MIN_VEL) and (abs(steer) > STEER_MIN_THRESHOLD):
if abs(lateral_acc) <= LAT_ACC_THRESHOLD:
self.filtered_points.add_point(steer, lateral_acc)
if self.track_all_points:
self.all_torque_points.append([steer, lateral_acc])
def get_msg(self, valid=True, with_points=False):
msg = messaging.new_message('liveTorqueParameters')
@@ -223,8 +233,7 @@ def main(demo=False):
sm = messaging.SubMaster(['carControl', 'carOutput', 'carState', 'liveLocationKalman'], poll='liveLocationKalman')
params = Params()
with car.CarParams.from_bytes(params.get("CarParams", block=True)) as CP:
estimator = TorqueEstimator(CP)
estimator = TorqueEstimator(messaging.log_from_bytes(params.get("CarParams", block=True), car.CarParams))
while True:
sm.update()
@@ -243,8 +252,10 @@ def main(demo=False):
msg = estimator.get_msg(valid=sm.all_checks(), with_points=True)
params.put_nonblocking("LiveTorqueParameters", msg.to_bytes())
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='Process the --demo argument.')
parser.add_argument('--demo', action='store_true', help='A boolean for demo mode.')
args = parser.parse_args()
+2 -2
View File
@@ -172,8 +172,8 @@ def main(demo=False):
if demo:
CP = get_demo_car_params()
else:
with car.CarParams.from_bytes(params.get("CarParams", block=True)) as msg:
CP = msg
CP = messaging.log_from_bytes(params.get("CarParams", block=True), car.CarParams)
cloudlog.info("modeld got CarParams: %s", CP.carName)
# TODO this needs more thought, use .2s extra for now to estimate other delays
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1 +1 @@
8737e368e17f859291164286feb4246e00c0b4a5
f6ff3601bd0496e78d8bc3b019d58bb7739f096b
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
+2 -1
View File
@@ -44,7 +44,8 @@ private:
PersonalityButton *personality_btn;
KnightScanner *knight_scanner;
RainbowPath *rainbow_path;
ChevronExt * chevron_ext;
ChevronExt *chevron_ext;
TeTooIndicator *tt_indicator;
#endif
protected:
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+13 -1
View File
@@ -12,6 +12,7 @@ from openpilot.common.retry import retry
from openpilot.common.swaglog import cloudlog
from openpilot.system import micd
from openpilot.common.params import Params
SAMPLE_RATE = 48000
SAMPLE_BUFFER = 4096 # (approx 100ms)
@@ -62,6 +63,10 @@ class Soundd:
self.spl_filter_weighted = FirstOrderFilter(0, 2.5, FILTER_DT, initialized=False)
params = Params()
self._dp_device_audible_alert_mode = int(params.get("dp_device_audible_alert_mode"))
def load_sounds(self):
self.loaded_sounds: dict[int, np.ndarray] = {}
@@ -82,6 +87,13 @@ class Soundd:
ret = np.zeros(frames, dtype=np.float32)
# dp - set vol to 0 instead
mute = False
if self._dp_device_audible_alert_mode == 2:
mute = True
elif self._dp_device_audible_alert_mode == 1 and self.current_alert in [AudibleAlert.engage, AudibleAlert.disengage]:
mute = True
if self.current_alert != AudibleAlert.none:
num_loops = sound_list[self.current_alert][1]
sound_data = self.loaded_sounds[self.current_alert]
@@ -97,7 +109,7 @@ class Soundd:
written_frames += frames_to_write
self.current_sound_frame += frames_to_write
return ret * self.current_volume
return ret * (self.current_volume if not mute else 0)
def callback(self, data_out: np.ndarray, frames: int, time, status) -> None:
if status:
Binary file not shown.
+1 -1
View File
@@ -116,7 +116,7 @@ CASES = {
TEST_DIR = pathlib.Path(__file__).parent
TEST_OUTPUT_DIR = TEST_DIR / "report"
TEST_OUTPUT_DIR = TEST_DIR / "report_1"
SCREENSHOTS_DIR = TEST_OUTPUT_DIR / "screenshots"
BIN
View File
Binary file not shown.
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
+80
View File
@@ -215,6 +215,14 @@ Reboot required.</source>
<source>When enabled, openpilot will dynamically change between End-to-End or ACC mode.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>On-Screen Personality Button</source>
<translation type="unfinished"></translation>
@@ -371,6 +379,34 @@ This does not work in China.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Road Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Toyota / Lexus</source>
<translation type="unfinished"></translation>
@@ -486,6 +522,50 @@ Reboot required.</source>
This will also reboot your device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DeclinePage</name>
Binary file not shown.
+95 -7
View File
@@ -224,7 +224,7 @@ Your vehicle must support openpilot longitudinal control.</source>
Once activate, the lead vehicle indicator will display an &quot;A&quot;</source>
<translation>當速度低於設定值時,openpilot將會切換到指定的「駕駛風格」。
1 km/h = 0.62 mph。
一旦啟用,前車指示將顯示一個「A」。</translation>
一旦啟用,前車指示將顯示一個「A」</translation>
</message>
<message>
<source>OFF</source>
@@ -527,12 +527,100 @@ Reboot Required.</source>
</message>
<message>
<source>Enable Stop and Go (SnG) Hack</source>
<translation type="unfinished"></translation>
<translation>啟用 Stop and Go (SnG) 修正</translation>
</message>
<message>
<source>When enabled, openpilot will stop sending standstill signal when the car is fully stopped.
ONLY WORK ON SOME VEHICLES.
Reboot Required.</source>
<translation>啟用後,openpilot 在車輛完全停止時將不再發送停止信號。
僅適用於部分車輛。
需要重新啟動。</translation>
</message>
<message>
<source>Display Road Name</source>
<translation>顯示道路名稱</translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
Internet required.</source>
<translation type="vanished">啟用後,openpilot 將使用 OpenStreetMap 資料顯示即時道路名稱。
需要網路連線。</translation>
</message>
<message>
<source>Display Speed Camera Warning (Taiwan)</source>
<translation>顯示測速照相警告(台灣)</translation>
</message>
<message>
<source>Tē-Tôo (Map)</source>
<translation>地圖</translation>
</message>
<message>
<source>When enabled, openpilot will display speed camera warning using offline database.</source>
<translation>啟用後,openpilot 將使用離線資料庫顯示測速照相警告。</translation>
</message>
<message>
<source>Enable Road Condition Detection</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, Dynamic End-to-End will check road condition such as traffic signals, large curve, stop sign.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speed Camera Warning Threshold</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only show the warning when the speed camera limit is within threshold (+/-) % of the vehicle speed or cruise speed or road limit speed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> %</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable Auto Shutdown</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will shutdown the device automatically.
Reboot required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Auto Shutdown In</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Adjust your shutdown waiting period.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>When enabled, openpilot will display live road name using OpenStreetMap data.
DO NOT USE IT WITH COMMA PRIME SUBSCRIPTION.
Internet required.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Off</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audible Alert Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning - Only emits sound when there is a warning.
Off - Does not emit any sound at all.</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -1334,23 +1422,23 @@ This may take up to a minute.</source>
</message>
<message>
<source>Onroad/Offroad Mode</source>
<translation type="unfinished"></translation>
<translation>上線/離線 模式</translation>
</message>
<message>
<source>Go Offroad</source>
<translation type="unfinished"></translation>
<translation>切換到離線</translation>
</message>
<message>
<source>Are you sure you want to switch driving mode?</source>
<translation type="unfinished"></translation>
<translation>您確定要切換模式嗎?</translation>
</message>
<message>
<source>CONFIRM</source>
<translation type="unfinished"></translation>
<translation>確認</translation>
</message>
<message>
<source>Go Onroad</source>
<translation type="unfinished"></translation>
<translation>切換到上線</translation>
</message>
</context>
<context>
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.