This commit is contained in:
1okko
2025-04-15 23:34:51 +08:00
parent cd20b841b9
commit 66b4e8fd9c
51 changed files with 13633 additions and 13082 deletions
+12041 -11572
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -201,6 +201,7 @@ class Controls:
# carControl
cc_send = messaging.new_message('carControl')
cc_send.valid = CS.canValid
CC.currentCurvature = cs.curvature
cc_send.carControl = CC
self.pm.send('carControl', cc_send)
+5 -9
View File
@@ -6,6 +6,7 @@ from typing import Any
import capnp
from cereal import messaging, log, car
from openpilot.common.filter_simple import FirstOrderFilter
from openpilot.common.params import Params
from openpilot.common.realtime import DT_MDL, Priority, config_realtime_process
from openpilot.common.swaglog import cloudlog
@@ -51,7 +52,7 @@ class Track:
def __init__(self, identifier: int, v_lead: float, kalman_params: KalmanParams):
self.identifier = identifier
self.cnt = 0
self.aLeadTau = _LEAD_ACCEL_TAU
self.aLeadTau = FirstOrderFilter(_LEAD_ACCEL_TAU, 0.45, DT_MDL)
self.K_A = kalman_params.A
self.K_C = kalman_params.C
self.K_K = kalman_params.K
@@ -74,17 +75,12 @@ class Track:
# Learn if constant acceleration
if abs(self.aLeadK) < 0.5:
self.aLeadTau = _LEAD_ACCEL_TAU
self.aLeadTau.x = _LEAD_ACCEL_TAU
else:
self.aLeadTau *= 0.9
self.aLeadTau.update(0.0)
self.cnt += 1
def reset_a_lead(self, aLeadK: float, aLeadTau: float):
self.kf = KF1D([[self.vLead], [aLeadK]], self.K_A, self.K_C, self.K_K)
self.aLeadK = aLeadK
self.aLeadTau = aLeadTau
def get_RadarState(self, model_prob: float = 0.0):
return {
"dRel": float(self.dRel),
@@ -93,7 +89,7 @@ class Track:
"vLead": float(self.vLead),
"vLeadK": float(self.vLeadK),
"aLeadK": float(self.aLeadK),
"aLeadTau": float(self.aLeadTau),
"aLeadTau": float(self.aLeadTau.x),
"status": True,
"fcw": self.is_potential_fcw(model_prob),
"modelProb": model_prob,
+16 -8
View File
@@ -2,6 +2,7 @@
import argparse
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
from typing import NamedTuple
from openpilot.tools.lib.logreader import LogReader
from openpilot.selfdrive.locationd.models.pose_kf import EARTH_G
@@ -75,16 +76,23 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Find max lateral acceleration events",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("route")
parser.add_argument("route", nargs='+')
args = parser.parse_args()
lr = LogReader(args.route, sort_by_time=True)
qlog = args.route.endswith('/q')
if qlog:
print('WARNING: Treating route as qlog!')
events = []
for route in tqdm(args.route):
try:
lr = LogReader(route, sort_by_time=True)
except Exception:
print(f'Skipping {route}')
continue
print('Finding events...')
events = find_events(lr, qlog=qlog)
qlog = route.endswith('/q')
if qlog:
print('WARNING: Treating route as qlog!')
print('Finding events...')
events += find_events(lr, qlog=qlog)
print()
print(f'Found {len(events)} events')
@@ -97,7 +105,7 @@ if __name__ == '__main__':
plt.ion()
plt.clf()
plt.suptitle(f'{CP.carFingerprint} - Max lateral acceleration events')
plt.title(args.route)
plt.title(', '.join(args.route))
plt.scatter([ev.speed for ev in events], [ev.lateral_accel for ev in events], label='max lateral accel events')
plt.plot([0, 35], [3, 3], c='r', label='ISO 11270 - 3 m/s^2')
+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_7345504276725310336) {
out_7345504276725310336[0] = delta_x[0] + nom_x[0];
out_7345504276725310336[1] = delta_x[1] + nom_x[1];
out_7345504276725310336[2] = delta_x[2] + nom_x[2];
out_7345504276725310336[3] = delta_x[3] + nom_x[3];
out_7345504276725310336[4] = delta_x[4] + nom_x[4];
out_7345504276725310336[5] = delta_x[5] + nom_x[5];
out_7345504276725310336[6] = delta_x[6] + nom_x[6];
out_7345504276725310336[7] = delta_x[7] + nom_x[7];
out_7345504276725310336[8] = delta_x[8] + nom_x[8];
void err_fun(double *nom_x, double *delta_x, double *out_2404323163298862836) {
out_2404323163298862836[0] = delta_x[0] + nom_x[0];
out_2404323163298862836[1] = delta_x[1] + nom_x[1];
out_2404323163298862836[2] = delta_x[2] + nom_x[2];
out_2404323163298862836[3] = delta_x[3] + nom_x[3];
out_2404323163298862836[4] = delta_x[4] + nom_x[4];
out_2404323163298862836[5] = delta_x[5] + nom_x[5];
out_2404323163298862836[6] = delta_x[6] + nom_x[6];
out_2404323163298862836[7] = delta_x[7] + nom_x[7];
out_2404323163298862836[8] = delta_x[8] + nom_x[8];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_1483419534327179826) {
out_1483419534327179826[0] = -nom_x[0] + true_x[0];
out_1483419534327179826[1] = -nom_x[1] + true_x[1];
out_1483419534327179826[2] = -nom_x[2] + true_x[2];
out_1483419534327179826[3] = -nom_x[3] + true_x[3];
out_1483419534327179826[4] = -nom_x[4] + true_x[4];
out_1483419534327179826[5] = -nom_x[5] + true_x[5];
out_1483419534327179826[6] = -nom_x[6] + true_x[6];
out_1483419534327179826[7] = -nom_x[7] + true_x[7];
out_1483419534327179826[8] = -nom_x[8] + true_x[8];
void inv_err_fun(double *nom_x, double *true_x, double *out_8674924215746766711) {
out_8674924215746766711[0] = -nom_x[0] + true_x[0];
out_8674924215746766711[1] = -nom_x[1] + true_x[1];
out_8674924215746766711[2] = -nom_x[2] + true_x[2];
out_8674924215746766711[3] = -nom_x[3] + true_x[3];
out_8674924215746766711[4] = -nom_x[4] + true_x[4];
out_8674924215746766711[5] = -nom_x[5] + true_x[5];
out_8674924215746766711[6] = -nom_x[6] + true_x[6];
out_8674924215746766711[7] = -nom_x[7] + true_x[7];
out_8674924215746766711[8] = -nom_x[8] + true_x[8];
}
void H_mod_fun(double *state, double *out_5980828091480380917) {
out_5980828091480380917[0] = 1.0;
out_5980828091480380917[1] = 0.0;
out_5980828091480380917[2] = 0.0;
out_5980828091480380917[3] = 0.0;
out_5980828091480380917[4] = 0.0;
out_5980828091480380917[5] = 0.0;
out_5980828091480380917[6] = 0.0;
out_5980828091480380917[7] = 0.0;
out_5980828091480380917[8] = 0.0;
out_5980828091480380917[9] = 0.0;
out_5980828091480380917[10] = 1.0;
out_5980828091480380917[11] = 0.0;
out_5980828091480380917[12] = 0.0;
out_5980828091480380917[13] = 0.0;
out_5980828091480380917[14] = 0.0;
out_5980828091480380917[15] = 0.0;
out_5980828091480380917[16] = 0.0;
out_5980828091480380917[17] = 0.0;
out_5980828091480380917[18] = 0.0;
out_5980828091480380917[19] = 0.0;
out_5980828091480380917[20] = 1.0;
out_5980828091480380917[21] = 0.0;
out_5980828091480380917[22] = 0.0;
out_5980828091480380917[23] = 0.0;
out_5980828091480380917[24] = 0.0;
out_5980828091480380917[25] = 0.0;
out_5980828091480380917[26] = 0.0;
out_5980828091480380917[27] = 0.0;
out_5980828091480380917[28] = 0.0;
out_5980828091480380917[29] = 0.0;
out_5980828091480380917[30] = 1.0;
out_5980828091480380917[31] = 0.0;
out_5980828091480380917[32] = 0.0;
out_5980828091480380917[33] = 0.0;
out_5980828091480380917[34] = 0.0;
out_5980828091480380917[35] = 0.0;
out_5980828091480380917[36] = 0.0;
out_5980828091480380917[37] = 0.0;
out_5980828091480380917[38] = 0.0;
out_5980828091480380917[39] = 0.0;
out_5980828091480380917[40] = 1.0;
out_5980828091480380917[41] = 0.0;
out_5980828091480380917[42] = 0.0;
out_5980828091480380917[43] = 0.0;
out_5980828091480380917[44] = 0.0;
out_5980828091480380917[45] = 0.0;
out_5980828091480380917[46] = 0.0;
out_5980828091480380917[47] = 0.0;
out_5980828091480380917[48] = 0.0;
out_5980828091480380917[49] = 0.0;
out_5980828091480380917[50] = 1.0;
out_5980828091480380917[51] = 0.0;
out_5980828091480380917[52] = 0.0;
out_5980828091480380917[53] = 0.0;
out_5980828091480380917[54] = 0.0;
out_5980828091480380917[55] = 0.0;
out_5980828091480380917[56] = 0.0;
out_5980828091480380917[57] = 0.0;
out_5980828091480380917[58] = 0.0;
out_5980828091480380917[59] = 0.0;
out_5980828091480380917[60] = 1.0;
out_5980828091480380917[61] = 0.0;
out_5980828091480380917[62] = 0.0;
out_5980828091480380917[63] = 0.0;
out_5980828091480380917[64] = 0.0;
out_5980828091480380917[65] = 0.0;
out_5980828091480380917[66] = 0.0;
out_5980828091480380917[67] = 0.0;
out_5980828091480380917[68] = 0.0;
out_5980828091480380917[69] = 0.0;
out_5980828091480380917[70] = 1.0;
out_5980828091480380917[71] = 0.0;
out_5980828091480380917[72] = 0.0;
out_5980828091480380917[73] = 0.0;
out_5980828091480380917[74] = 0.0;
out_5980828091480380917[75] = 0.0;
out_5980828091480380917[76] = 0.0;
out_5980828091480380917[77] = 0.0;
out_5980828091480380917[78] = 0.0;
out_5980828091480380917[79] = 0.0;
out_5980828091480380917[80] = 1.0;
void H_mod_fun(double *state, double *out_7483312979707705837) {
out_7483312979707705837[0] = 1.0;
out_7483312979707705837[1] = 0.0;
out_7483312979707705837[2] = 0.0;
out_7483312979707705837[3] = 0.0;
out_7483312979707705837[4] = 0.0;
out_7483312979707705837[5] = 0.0;
out_7483312979707705837[6] = 0.0;
out_7483312979707705837[7] = 0.0;
out_7483312979707705837[8] = 0.0;
out_7483312979707705837[9] = 0.0;
out_7483312979707705837[10] = 1.0;
out_7483312979707705837[11] = 0.0;
out_7483312979707705837[12] = 0.0;
out_7483312979707705837[13] = 0.0;
out_7483312979707705837[14] = 0.0;
out_7483312979707705837[15] = 0.0;
out_7483312979707705837[16] = 0.0;
out_7483312979707705837[17] = 0.0;
out_7483312979707705837[18] = 0.0;
out_7483312979707705837[19] = 0.0;
out_7483312979707705837[20] = 1.0;
out_7483312979707705837[21] = 0.0;
out_7483312979707705837[22] = 0.0;
out_7483312979707705837[23] = 0.0;
out_7483312979707705837[24] = 0.0;
out_7483312979707705837[25] = 0.0;
out_7483312979707705837[26] = 0.0;
out_7483312979707705837[27] = 0.0;
out_7483312979707705837[28] = 0.0;
out_7483312979707705837[29] = 0.0;
out_7483312979707705837[30] = 1.0;
out_7483312979707705837[31] = 0.0;
out_7483312979707705837[32] = 0.0;
out_7483312979707705837[33] = 0.0;
out_7483312979707705837[34] = 0.0;
out_7483312979707705837[35] = 0.0;
out_7483312979707705837[36] = 0.0;
out_7483312979707705837[37] = 0.0;
out_7483312979707705837[38] = 0.0;
out_7483312979707705837[39] = 0.0;
out_7483312979707705837[40] = 1.0;
out_7483312979707705837[41] = 0.0;
out_7483312979707705837[42] = 0.0;
out_7483312979707705837[43] = 0.0;
out_7483312979707705837[44] = 0.0;
out_7483312979707705837[45] = 0.0;
out_7483312979707705837[46] = 0.0;
out_7483312979707705837[47] = 0.0;
out_7483312979707705837[48] = 0.0;
out_7483312979707705837[49] = 0.0;
out_7483312979707705837[50] = 1.0;
out_7483312979707705837[51] = 0.0;
out_7483312979707705837[52] = 0.0;
out_7483312979707705837[53] = 0.0;
out_7483312979707705837[54] = 0.0;
out_7483312979707705837[55] = 0.0;
out_7483312979707705837[56] = 0.0;
out_7483312979707705837[57] = 0.0;
out_7483312979707705837[58] = 0.0;
out_7483312979707705837[59] = 0.0;
out_7483312979707705837[60] = 1.0;
out_7483312979707705837[61] = 0.0;
out_7483312979707705837[62] = 0.0;
out_7483312979707705837[63] = 0.0;
out_7483312979707705837[64] = 0.0;
out_7483312979707705837[65] = 0.0;
out_7483312979707705837[66] = 0.0;
out_7483312979707705837[67] = 0.0;
out_7483312979707705837[68] = 0.0;
out_7483312979707705837[69] = 0.0;
out_7483312979707705837[70] = 1.0;
out_7483312979707705837[71] = 0.0;
out_7483312979707705837[72] = 0.0;
out_7483312979707705837[73] = 0.0;
out_7483312979707705837[74] = 0.0;
out_7483312979707705837[75] = 0.0;
out_7483312979707705837[76] = 0.0;
out_7483312979707705837[77] = 0.0;
out_7483312979707705837[78] = 0.0;
out_7483312979707705837[79] = 0.0;
out_7483312979707705837[80] = 1.0;
}
void f_fun(double *state, double dt, double *out_6771744444959754452) {
out_6771744444959754452[0] = state[0];
out_6771744444959754452[1] = state[1];
out_6771744444959754452[2] = state[2];
out_6771744444959754452[3] = state[3];
out_6771744444959754452[4] = state[4];
out_6771744444959754452[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_6771744444959754452[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_6771744444959754452[7] = state[7];
out_6771744444959754452[8] = state[8];
void f_fun(double *state, double dt, double *out_3592507306981724774) {
out_3592507306981724774[0] = state[0];
out_3592507306981724774[1] = state[1];
out_3592507306981724774[2] = state[2];
out_3592507306981724774[3] = state[3];
out_3592507306981724774[4] = state[4];
out_3592507306981724774[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_3592507306981724774[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_3592507306981724774[7] = state[7];
out_3592507306981724774[8] = state[8];
}
void F_fun(double *state, double dt, double *out_8079006821062657786) {
out_8079006821062657786[0] = 1;
out_8079006821062657786[1] = 0;
out_8079006821062657786[2] = 0;
out_8079006821062657786[3] = 0;
out_8079006821062657786[4] = 0;
out_8079006821062657786[5] = 0;
out_8079006821062657786[6] = 0;
out_8079006821062657786[7] = 0;
out_8079006821062657786[8] = 0;
out_8079006821062657786[9] = 0;
out_8079006821062657786[10] = 1;
out_8079006821062657786[11] = 0;
out_8079006821062657786[12] = 0;
out_8079006821062657786[13] = 0;
out_8079006821062657786[14] = 0;
out_8079006821062657786[15] = 0;
out_8079006821062657786[16] = 0;
out_8079006821062657786[17] = 0;
out_8079006821062657786[18] = 0;
out_8079006821062657786[19] = 0;
out_8079006821062657786[20] = 1;
out_8079006821062657786[21] = 0;
out_8079006821062657786[22] = 0;
out_8079006821062657786[23] = 0;
out_8079006821062657786[24] = 0;
out_8079006821062657786[25] = 0;
out_8079006821062657786[26] = 0;
out_8079006821062657786[27] = 0;
out_8079006821062657786[28] = 0;
out_8079006821062657786[29] = 0;
out_8079006821062657786[30] = 1;
out_8079006821062657786[31] = 0;
out_8079006821062657786[32] = 0;
out_8079006821062657786[33] = 0;
out_8079006821062657786[34] = 0;
out_8079006821062657786[35] = 0;
out_8079006821062657786[36] = 0;
out_8079006821062657786[37] = 0;
out_8079006821062657786[38] = 0;
out_8079006821062657786[39] = 0;
out_8079006821062657786[40] = 1;
out_8079006821062657786[41] = 0;
out_8079006821062657786[42] = 0;
out_8079006821062657786[43] = 0;
out_8079006821062657786[44] = 0;
out_8079006821062657786[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_8079006821062657786[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_8079006821062657786[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_8079006821062657786[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_8079006821062657786[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_8079006821062657786[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_8079006821062657786[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_8079006821062657786[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_8079006821062657786[53] = -9.8000000000000007*dt;
out_8079006821062657786[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_8079006821062657786[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_8079006821062657786[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_8079006821062657786[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_8079006821062657786[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_8079006821062657786[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_8079006821062657786[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_8079006821062657786[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_8079006821062657786[62] = 0;
out_8079006821062657786[63] = 0;
out_8079006821062657786[64] = 0;
out_8079006821062657786[65] = 0;
out_8079006821062657786[66] = 0;
out_8079006821062657786[67] = 0;
out_8079006821062657786[68] = 0;
out_8079006821062657786[69] = 0;
out_8079006821062657786[70] = 1;
out_8079006821062657786[71] = 0;
out_8079006821062657786[72] = 0;
out_8079006821062657786[73] = 0;
out_8079006821062657786[74] = 0;
out_8079006821062657786[75] = 0;
out_8079006821062657786[76] = 0;
out_8079006821062657786[77] = 0;
out_8079006821062657786[78] = 0;
out_8079006821062657786[79] = 0;
out_8079006821062657786[80] = 1;
void F_fun(double *state, double dt, double *out_1048406091213510053) {
out_1048406091213510053[0] = 1;
out_1048406091213510053[1] = 0;
out_1048406091213510053[2] = 0;
out_1048406091213510053[3] = 0;
out_1048406091213510053[4] = 0;
out_1048406091213510053[5] = 0;
out_1048406091213510053[6] = 0;
out_1048406091213510053[7] = 0;
out_1048406091213510053[8] = 0;
out_1048406091213510053[9] = 0;
out_1048406091213510053[10] = 1;
out_1048406091213510053[11] = 0;
out_1048406091213510053[12] = 0;
out_1048406091213510053[13] = 0;
out_1048406091213510053[14] = 0;
out_1048406091213510053[15] = 0;
out_1048406091213510053[16] = 0;
out_1048406091213510053[17] = 0;
out_1048406091213510053[18] = 0;
out_1048406091213510053[19] = 0;
out_1048406091213510053[20] = 1;
out_1048406091213510053[21] = 0;
out_1048406091213510053[22] = 0;
out_1048406091213510053[23] = 0;
out_1048406091213510053[24] = 0;
out_1048406091213510053[25] = 0;
out_1048406091213510053[26] = 0;
out_1048406091213510053[27] = 0;
out_1048406091213510053[28] = 0;
out_1048406091213510053[29] = 0;
out_1048406091213510053[30] = 1;
out_1048406091213510053[31] = 0;
out_1048406091213510053[32] = 0;
out_1048406091213510053[33] = 0;
out_1048406091213510053[34] = 0;
out_1048406091213510053[35] = 0;
out_1048406091213510053[36] = 0;
out_1048406091213510053[37] = 0;
out_1048406091213510053[38] = 0;
out_1048406091213510053[39] = 0;
out_1048406091213510053[40] = 1;
out_1048406091213510053[41] = 0;
out_1048406091213510053[42] = 0;
out_1048406091213510053[43] = 0;
out_1048406091213510053[44] = 0;
out_1048406091213510053[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_1048406091213510053[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_1048406091213510053[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_1048406091213510053[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_1048406091213510053[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_1048406091213510053[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_1048406091213510053[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_1048406091213510053[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_1048406091213510053[53] = -9.8000000000000007*dt;
out_1048406091213510053[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_1048406091213510053[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_1048406091213510053[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_1048406091213510053[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_1048406091213510053[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_1048406091213510053[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_1048406091213510053[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_1048406091213510053[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_1048406091213510053[62] = 0;
out_1048406091213510053[63] = 0;
out_1048406091213510053[64] = 0;
out_1048406091213510053[65] = 0;
out_1048406091213510053[66] = 0;
out_1048406091213510053[67] = 0;
out_1048406091213510053[68] = 0;
out_1048406091213510053[69] = 0;
out_1048406091213510053[70] = 1;
out_1048406091213510053[71] = 0;
out_1048406091213510053[72] = 0;
out_1048406091213510053[73] = 0;
out_1048406091213510053[74] = 0;
out_1048406091213510053[75] = 0;
out_1048406091213510053[76] = 0;
out_1048406091213510053[77] = 0;
out_1048406091213510053[78] = 0;
out_1048406091213510053[79] = 0;
out_1048406091213510053[80] = 1;
}
void h_25(double *state, double *unused, double *out_6013514099318955817) {
out_6013514099318955817[0] = state[6];
void h_25(double *state, double *unused, double *out_398477380036345276) {
out_398477380036345276[0] = state[6];
}
void H_25(double *state, double *unused, double *out_8892173204326502465) {
out_8892173204326502465[0] = 0;
out_8892173204326502465[1] = 0;
out_8892173204326502465[2] = 0;
out_8892173204326502465[3] = 0;
out_8892173204326502465[4] = 0;
out_8892173204326502465[5] = 0;
out_8892173204326502465[6] = 1;
out_8892173204326502465[7] = 0;
out_8892173204326502465[8] = 0;
void H_25(double *state, double *unused, double *out_1770242868089608542) {
out_1770242868089608542[0] = 0;
out_1770242868089608542[1] = 0;
out_1770242868089608542[2] = 0;
out_1770242868089608542[3] = 0;
out_1770242868089608542[4] = 0;
out_1770242868089608542[5] = 0;
out_1770242868089608542[6] = 1;
out_1770242868089608542[7] = 0;
out_1770242868089608542[8] = 0;
}
void h_24(double *state, double *unused, double *out_6766398854122891435) {
out_6766398854122891435[0] = state[4];
out_6766398854122891435[1] = state[5];
void h_24(double *state, double *unused, double *out_6615193940643128455) {
out_6615193940643128455[0] = state[4];
out_6615193940643128455[1] = state[5];
}
void H_24(double *state, double *unused, double *out_7204356768457398274) {
out_7204356768457398274[0] = 0;
out_7204356768457398274[1] = 0;
out_7204356768457398274[2] = 0;
out_7204356768457398274[3] = 0;
out_7204356768457398274[4] = 1;
out_7204356768457398274[5] = 0;
out_7204356768457398274[6] = 0;
out_7204356768457398274[7] = 0;
out_7204356768457398274[8] = 0;
out_7204356768457398274[9] = 0;
out_7204356768457398274[10] = 0;
out_7204356768457398274[11] = 0;
out_7204356768457398274[12] = 0;
out_7204356768457398274[13] = 0;
out_7204356768457398274[14] = 1;
out_7204356768457398274[15] = 0;
out_7204356768457398274[16] = 0;
out_7204356768457398274[17] = 0;
void H_24(double *state, double *unused, double *out_8424448326197794299) {
out_8424448326197794299[0] = 0;
out_8424448326197794299[1] = 0;
out_8424448326197794299[2] = 0;
out_8424448326197794299[3] = 0;
out_8424448326197794299[4] = 1;
out_8424448326197794299[5] = 0;
out_8424448326197794299[6] = 0;
out_8424448326197794299[7] = 0;
out_8424448326197794299[8] = 0;
out_8424448326197794299[9] = 0;
out_8424448326197794299[10] = 0;
out_8424448326197794299[11] = 0;
out_8424448326197794299[12] = 0;
out_8424448326197794299[13] = 0;
out_8424448326197794299[14] = 1;
out_8424448326197794299[15] = 0;
out_8424448326197794299[16] = 0;
out_8424448326197794299[17] = 0;
}
void h_30(double *state, double *unused, double *out_5662394748040244863) {
out_5662394748040244863[0] = state[4];
void h_30(double *state, double *unused, double *out_8291416874920868635) {
out_8291416874920868635[0] = state[4];
}
void H_30(double *state, double *unused, double *out_5026874539255440953) {
out_5026874539255440953[0] = 0;
out_5026874539255440953[1] = 0;
out_5026874539255440953[2] = 0;
out_5026874539255440953[3] = 0;
out_5026874539255440953[4] = 1;
out_5026874539255440953[5] = 0;
out_5026874539255440953[6] = 0;
out_5026874539255440953[7] = 0;
out_5026874539255440953[8] = 0;
void H_30(double *state, double *unused, double *out_1640903920946368472) {
out_1640903920946368472[0] = 0;
out_1640903920946368472[1] = 0;
out_1640903920946368472[2] = 0;
out_1640903920946368472[3] = 0;
out_1640903920946368472[4] = 1;
out_1640903920946368472[5] = 0;
out_1640903920946368472[6] = 0;
out_1640903920946368472[7] = 0;
out_1640903920946368472[8] = 0;
}
void h_26(double *state, double *unused, double *out_253236005693617473) {
out_253236005693617473[0] = state[7];
void h_26(double *state, double *unused, double *out_5254630823476535950) {
out_5254630823476535950[0] = state[7];
}
void H_26(double *state, double *unused, double *out_5813067550508992927) {
out_5813067550508992927[0] = 0;
out_5813067550508992927[1] = 0;
out_5813067550508992927[2] = 0;
out_5813067550508992927[3] = 0;
out_5813067550508992927[4] = 0;
out_5813067550508992927[5] = 0;
out_5813067550508992927[6] = 0;
out_5813067550508992927[7] = 1;
out_5813067550508992927[8] = 0;
void H_26(double *state, double *unused, double *out_1971260450784447682) {
out_1971260450784447682[0] = 0;
out_1971260450784447682[1] = 0;
out_1971260450784447682[2] = 0;
out_1971260450784447682[3] = 0;
out_1971260450784447682[4] = 0;
out_1971260450784447682[5] = 0;
out_1971260450784447682[6] = 0;
out_1971260450784447682[7] = 1;
out_1971260450784447682[8] = 0;
}
void h_27(double *state, double *unused, double *out_6177405252431548545) {
out_6177405252431548545[0] = state[3];
void h_27(double *state, double *unused, double *out_1341987232938007711) {
out_1341987232938007711[0] = state[3];
}
void H_27(double *state, double *unused, double *out_2852111227455016042) {
out_2852111227455016042[0] = 0;
out_2852111227455016042[1] = 0;
out_2852111227455016042[2] = 0;
out_2852111227455016042[3] = 1;
out_2852111227455016042[4] = 0;
out_2852111227455016042[5] = 0;
out_2852111227455016042[6] = 0;
out_2852111227455016042[7] = 0;
out_2852111227455016042[8] = 0;
void H_27(double *state, double *unused, double *out_533859390854056439) {
out_533859390854056439[0] = 0;
out_533859390854056439[1] = 0;
out_533859390854056439[2] = 0;
out_533859390854056439[3] = 1;
out_533859390854056439[4] = 0;
out_533859390854056439[5] = 0;
out_533859390854056439[6] = 0;
out_533859390854056439[7] = 0;
out_533859390854056439[8] = 0;
}
void h_29(double *state, double *unused, double *out_8631889293023980721) {
out_8631889293023980721[0] = state[1];
void h_29(double *state, double *unused, double *out_7550921877979985330) {
out_7550921877979985330[0] = state[1];
}
void H_29(double *state, double *unused, double *out_5537105883569833137) {
out_5537105883569833137[0] = 0;
out_5537105883569833137[1] = 1;
out_5537105883569833137[2] = 0;
out_5537105883569833137[3] = 0;
out_5537105883569833137[4] = 0;
out_5537105883569833137[5] = 0;
out_5537105883569833137[6] = 0;
out_5537105883569833137[7] = 0;
out_5537105883569833137[8] = 0;
void H_29(double *state, double *unused, double *out_2247222117723607472) {
out_2247222117723607472[0] = 0;
out_2247222117723607472[1] = 1;
out_2247222117723607472[2] = 0;
out_2247222117723607472[3] = 0;
out_2247222117723607472[4] = 0;
out_2247222117723607472[5] = 0;
out_2247222117723607472[6] = 0;
out_2247222117723607472[7] = 0;
out_2247222117723607472[8] = 0;
}
void h_28(double *state, double *unused, double *out_7267665553617157426) {
out_7267665553617157426[0] = state[0];
void h_28(double *state, double *unused, double *out_4378773284382340396) {
out_4378773284382340396[0] = state[0];
}
void H_28(double *state, double *unused, double *out_454706866500302563) {
out_454706866500302563[0] = 1;
out_454706866500302563[1] = 0;
out_454706866500302563[2] = 0;
out_454706866500302563[3] = 0;
out_454706866500302563[4] = 0;
out_454706866500302563[5] = 0;
out_454706866500302563[6] = 0;
out_454706866500302563[7] = 0;
out_454706866500302563[8] = 0;
void H_28(double *state, double *unused, double *out_283591846158281221) {
out_283591846158281221[0] = 1;
out_283591846158281221[1] = 0;
out_283591846158281221[2] = 0;
out_283591846158281221[3] = 0;
out_283591846158281221[4] = 0;
out_283591846158281221[5] = 0;
out_283591846158281221[6] = 0;
out_283591846158281221[7] = 0;
out_283591846158281221[8] = 0;
}
void h_31(double *state, double *unused, double *out_2626363377399586067) {
out_2626363377399586067[0] = state[8];
void h_31(double *state, double *unused, double *out_6372357846314005660) {
out_6372357846314005660[0] = state[8];
}
void H_31(double *state, double *unused, double *out_5186859448275641451) {
out_5186859448275641451[0] = 0;
out_5186859448275641451[1] = 0;
out_5186859448275641451[2] = 0;
out_5186859448275641451[3] = 0;
out_5186859448275641451[4] = 0;
out_5186859448275641451[5] = 0;
out_5186859448275641451[6] = 0;
out_5186859448275641451[7] = 0;
out_5186859448275641451[8] = 1;
void H_31(double *state, double *unused, double *out_1800888829966568970) {
out_1800888829966568970[0] = 0;
out_1800888829966568970[1] = 0;
out_1800888829966568970[2] = 0;
out_1800888829966568970[3] = 0;
out_1800888829966568970[4] = 0;
out_1800888829966568970[5] = 0;
out_1800888829966568970[6] = 0;
out_1800888829966568970[7] = 0;
out_1800888829966568970[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_7345504276725310336) {
err_fun(nom_x, delta_x, out_7345504276725310336);
void car_err_fun(double *nom_x, double *delta_x, double *out_2404323163298862836) {
err_fun(nom_x, delta_x, out_2404323163298862836);
}
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1483419534327179826) {
inv_err_fun(nom_x, true_x, out_1483419534327179826);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_8674924215746766711) {
inv_err_fun(nom_x, true_x, out_8674924215746766711);
}
void car_H_mod_fun(double *state, double *out_5980828091480380917) {
H_mod_fun(state, out_5980828091480380917);
void car_H_mod_fun(double *state, double *out_7483312979707705837) {
H_mod_fun(state, out_7483312979707705837);
}
void car_f_fun(double *state, double dt, double *out_6771744444959754452) {
f_fun(state, dt, out_6771744444959754452);
void car_f_fun(double *state, double dt, double *out_3592507306981724774) {
f_fun(state, dt, out_3592507306981724774);
}
void car_F_fun(double *state, double dt, double *out_8079006821062657786) {
F_fun(state, dt, out_8079006821062657786);
void car_F_fun(double *state, double dt, double *out_1048406091213510053) {
F_fun(state, dt, out_1048406091213510053);
}
void car_h_25(double *state, double *unused, double *out_6013514099318955817) {
h_25(state, unused, out_6013514099318955817);
void car_h_25(double *state, double *unused, double *out_398477380036345276) {
h_25(state, unused, out_398477380036345276);
}
void car_H_25(double *state, double *unused, double *out_8892173204326502465) {
H_25(state, unused, out_8892173204326502465);
void car_H_25(double *state, double *unused, double *out_1770242868089608542) {
H_25(state, unused, out_1770242868089608542);
}
void car_h_24(double *state, double *unused, double *out_6766398854122891435) {
h_24(state, unused, out_6766398854122891435);
void car_h_24(double *state, double *unused, double *out_6615193940643128455) {
h_24(state, unused, out_6615193940643128455);
}
void car_H_24(double *state, double *unused, double *out_7204356768457398274) {
H_24(state, unused, out_7204356768457398274);
void car_H_24(double *state, double *unused, double *out_8424448326197794299) {
H_24(state, unused, out_8424448326197794299);
}
void car_h_30(double *state, double *unused, double *out_5662394748040244863) {
h_30(state, unused, out_5662394748040244863);
void car_h_30(double *state, double *unused, double *out_8291416874920868635) {
h_30(state, unused, out_8291416874920868635);
}
void car_H_30(double *state, double *unused, double *out_5026874539255440953) {
H_30(state, unused, out_5026874539255440953);
void car_H_30(double *state, double *unused, double *out_1640903920946368472) {
H_30(state, unused, out_1640903920946368472);
}
void car_h_26(double *state, double *unused, double *out_253236005693617473) {
h_26(state, unused, out_253236005693617473);
void car_h_26(double *state, double *unused, double *out_5254630823476535950) {
h_26(state, unused, out_5254630823476535950);
}
void car_H_26(double *state, double *unused, double *out_5813067550508992927) {
H_26(state, unused, out_5813067550508992927);
void car_H_26(double *state, double *unused, double *out_1971260450784447682) {
H_26(state, unused, out_1971260450784447682);
}
void car_h_27(double *state, double *unused, double *out_6177405252431548545) {
h_27(state, unused, out_6177405252431548545);
void car_h_27(double *state, double *unused, double *out_1341987232938007711) {
h_27(state, unused, out_1341987232938007711);
}
void car_H_27(double *state, double *unused, double *out_2852111227455016042) {
H_27(state, unused, out_2852111227455016042);
void car_H_27(double *state, double *unused, double *out_533859390854056439) {
H_27(state, unused, out_533859390854056439);
}
void car_h_29(double *state, double *unused, double *out_8631889293023980721) {
h_29(state, unused, out_8631889293023980721);
void car_h_29(double *state, double *unused, double *out_7550921877979985330) {
h_29(state, unused, out_7550921877979985330);
}
void car_H_29(double *state, double *unused, double *out_5537105883569833137) {
H_29(state, unused, out_5537105883569833137);
void car_H_29(double *state, double *unused, double *out_2247222117723607472) {
H_29(state, unused, out_2247222117723607472);
}
void car_h_28(double *state, double *unused, double *out_7267665553617157426) {
h_28(state, unused, out_7267665553617157426);
void car_h_28(double *state, double *unused, double *out_4378773284382340396) {
h_28(state, unused, out_4378773284382340396);
}
void car_H_28(double *state, double *unused, double *out_454706866500302563) {
H_28(state, unused, out_454706866500302563);
void car_H_28(double *state, double *unused, double *out_283591846158281221) {
H_28(state, unused, out_283591846158281221);
}
void car_h_31(double *state, double *unused, double *out_2626363377399586067) {
h_31(state, unused, out_2626363377399586067);
void car_h_31(double *state, double *unused, double *out_6372357846314005660) {
h_31(state, unused, out_6372357846314005660);
}
void car_H_31(double *state, double *unused, double *out_5186859448275641451) {
H_31(state, unused, out_5186859448275641451);
void car_H_31(double *state, double *unused, double *out_1800888829966568970) {
H_31(state, unused, out_1800888829966568970);
}
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_7345504276725310336);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1483419534327179826);
void car_H_mod_fun(double *state, double *out_5980828091480380917);
void car_f_fun(double *state, double dt, double *out_6771744444959754452);
void car_F_fun(double *state, double dt, double *out_8079006821062657786);
void car_h_25(double *state, double *unused, double *out_6013514099318955817);
void car_H_25(double *state, double *unused, double *out_8892173204326502465);
void car_h_24(double *state, double *unused, double *out_6766398854122891435);
void car_H_24(double *state, double *unused, double *out_7204356768457398274);
void car_h_30(double *state, double *unused, double *out_5662394748040244863);
void car_H_30(double *state, double *unused, double *out_5026874539255440953);
void car_h_26(double *state, double *unused, double *out_253236005693617473);
void car_H_26(double *state, double *unused, double *out_5813067550508992927);
void car_h_27(double *state, double *unused, double *out_6177405252431548545);
void car_H_27(double *state, double *unused, double *out_2852111227455016042);
void car_h_29(double *state, double *unused, double *out_8631889293023980721);
void car_H_29(double *state, double *unused, double *out_5537105883569833137);
void car_h_28(double *state, double *unused, double *out_7267665553617157426);
void car_H_28(double *state, double *unused, double *out_454706866500302563);
void car_h_31(double *state, double *unused, double *out_2626363377399586067);
void car_H_31(double *state, double *unused, double *out_5186859448275641451);
void car_err_fun(double *nom_x, double *delta_x, double *out_2404323163298862836);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_8674924215746766711);
void car_H_mod_fun(double *state, double *out_7483312979707705837);
void car_f_fun(double *state, double dt, double *out_3592507306981724774);
void car_F_fun(double *state, double dt, double *out_1048406091213510053);
void car_h_25(double *state, double *unused, double *out_398477380036345276);
void car_H_25(double *state, double *unused, double *out_1770242868089608542);
void car_h_24(double *state, double *unused, double *out_6615193940643128455);
void car_H_24(double *state, double *unused, double *out_8424448326197794299);
void car_h_30(double *state, double *unused, double *out_8291416874920868635);
void car_H_30(double *state, double *unused, double *out_1640903920946368472);
void car_h_26(double *state, double *unused, double *out_5254630823476535950);
void car_H_26(double *state, double *unused, double *out_1971260450784447682);
void car_h_27(double *state, double *unused, double *out_1341987232938007711);
void car_H_27(double *state, double *unused, double *out_533859390854056439);
void car_h_29(double *state, double *unused, double *out_7550921877979985330);
void car_H_29(double *state, double *unused, double *out_2247222117723607472);
void car_h_28(double *state, double *unused, double *out_4378773284382340396);
void car_H_28(double *state, double *unused, double *out_283591846158281221);
void car_h_31(double *state, double *unused, double *out_6372357846314005660);
void car_H_31(double *state, double *unused, double *out_1800888829966568970);
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
+13 -13
View File
@@ -5,18 +5,18 @@ void pose_update_4(double *in_x, double *in_P, double *in_z, double *in_R, doubl
void pose_update_10(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void pose_err_fun(double *nom_x, double *delta_x, double *out_7351456117776073154);
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_9109558368636035839);
void pose_H_mod_fun(double *state, double *out_595012964091947662);
void pose_f_fun(double *state, double dt, double *out_3792261713431509332);
void pose_F_fun(double *state, double dt, double *out_6928823179361542013);
void pose_h_4(double *state, double *unused, double *out_7683085519451864677);
void pose_H_4(double *state, double *unused, double *out_3149865311834297615);
void pose_h_10(double *state, double *unused, double *out_4760549729285226708);
void pose_H_10(double *state, double *unused, double *out_748214929053840095);
void pose_h_13(double *state, double *unused, double *out_6328698996174999134);
void pose_H_13(double *state, double *unused, double *out_6362139137166630416);
void pose_h_14(double *state, double *unused, double *out_4490584305148798359);
void pose_H_14(double *state, double *unused, double *out_7113106168173782144);
void pose_err_fun(double *nom_x, double *delta_x, double *out_6215768011470258474);
void pose_inv_err_fun(double *nom_x, double *true_x, double *out_6516201049276311805);
void pose_H_mod_fun(double *state, double *out_8843316986321445925);
void pose_f_fun(double *state, double dt, double *out_1388079773596962594);
void pose_F_fun(double *state, double dt, double *out_1987774110883025382);
void pose_h_4(double *state, double *unused, double *out_6417975175098302508);
void pose_H_4(double *state, double *unused, double *out_3690798601282365190);
void pose_h_10(double *state, double *unused, double *out_933754340625772488);
void pose_H_10(double *state, double *unused, double *out_2496885064021374014);
void pose_h_13(double *state, double *unused, double *out_7412978871522735544);
void pose_H_13(double *state, double *unused, double *out_478524775950032389);
void pose_h_14(double *state, double *unused, double *out_1424794695951564614);
void pose_H_14(double *state, double *unused, double *out_6773587033577737486);
void pose_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
+1 -1
View File
@@ -32,7 +32,7 @@ MIN_BUCKET_POINTS = np.array([100, 300, 500, 500, 500, 500, 300, 100])
MIN_ENGAGE_BUFFER = 2 # secs
VERSION = 1 # bump this to invalidate old parameter caches
ALLOWED_CARS = ['toyota', 'hyundai']
ALLOWED_CARS = ['toyota', 'hyundai', 'rivian']
def slope2rot(slope):
+7 -1
View File
@@ -14,8 +14,14 @@ class ModelConstants:
# model inputs constants
MODEL_FREQ = 20
HISTORY_FREQ = 5
HISTORY_LEN_SECONDS = 5
TEMPORAL_SKIP = MODEL_FREQ // HISTORY_FREQ
FULL_HISTORY_BUFFER_LEN = MODEL_FREQ * HISTORY_LEN_SECONDS
INPUT_HISTORY_BUFFER_LEN = HISTORY_FREQ * HISTORY_LEN_SECONDS
FEATURE_LEN = 512
FULL_HISTORY_BUFFER_LEN = 100
DESIRE_LEN = 8
TRAFFIC_CONVENTION_LEN = 2
LAT_PLANNER_STATE_LEN = 4
+21 -10
View File
@@ -56,16 +56,24 @@ class ModelState:
prev_desire: np.ndarray # for tracking the rising edge of the pulse
def __init__(self, context: CLContext):
self.frames = {'input_imgs': DrivingModelFrame(context), 'big_input_imgs': DrivingModelFrame(context)}
self.frames = {
'input_imgs': DrivingModelFrame(context, ModelConstants.TEMPORAL_SKIP),
'big_input_imgs': DrivingModelFrame(context, ModelConstants.TEMPORAL_SKIP)
}
self.prev_desire = np.zeros(ModelConstants.DESIRE_LEN, dtype=np.float32)
self.full_features_buffer = np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32)
self.full_desire = np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.DESIRE_LEN), dtype=np.float32)
self.full_prev_desired_curv = np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32)
self.temporal_idxs = slice(-1-(ModelConstants.TEMPORAL_SKIP*(ModelConstants.INPUT_HISTORY_BUFFER_LEN-1)), None, ModelConstants.TEMPORAL_SKIP)
# policy inputs
self.numpy_inputs = {
'desire': np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.DESIRE_LEN), dtype=np.float32),
'desire': np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.DESIRE_LEN), dtype=np.float32),
'traffic_convention': np.zeros((1, ModelConstants.TRAFFIC_CONVENTION_LEN), dtype=np.float32),
'lateral_control_params': np.zeros((1, ModelConstants.LATERAL_CONTROL_PARAMS_LEN), dtype=np.float32),
'prev_desired_curv': np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32),
'features_buffer': np.zeros((1, ModelConstants.FULL_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32),
'prev_desired_curv': np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.PREV_DESIRED_CURV_LEN), dtype=np.float32),
'features_buffer': np.zeros((1, ModelConstants.INPUT_HISTORY_BUFFER_LEN, ModelConstants.FEATURE_LEN), dtype=np.float32),
}
with open(VISION_METADATA_PATH, 'rb') as f:
@@ -104,8 +112,9 @@ class ModelState:
new_desire = np.where(inputs['desire'] - self.prev_desire > .99, inputs['desire'], 0)
self.prev_desire[:] = inputs['desire']
self.numpy_inputs['desire'][0,:-1] = self.numpy_inputs['desire'][0,1:]
self.numpy_inputs['desire'][0,-1] = new_desire
self.full_desire[0,:-1] = self.full_desire[0,1:]
self.full_desire[0,-1] = new_desire
self.numpy_inputs['desire'][:] = self.full_desire.reshape((1,ModelConstants.INPUT_HISTORY_BUFFER_LEN,ModelConstants.TEMPORAL_SKIP,-1)).max(axis=2)
self.numpy_inputs['traffic_convention'][:] = inputs['traffic_convention']
self.numpy_inputs['lateral_control_params'][:] = inputs['lateral_control_params']
@@ -128,15 +137,17 @@ class ModelState:
self.vision_output = self.vision_run(**self.vision_inputs).numpy().flatten()
vision_outputs_dict = self.parser.parse_vision_outputs(self.slice_outputs(self.vision_output, self.vision_output_slices))
self.numpy_inputs['features_buffer'][0,:-1] = self.numpy_inputs['features_buffer'][0,1:]
self.numpy_inputs['features_buffer'][0,-1] = vision_outputs_dict['hidden_state'][0, :]
self.full_features_buffer[0,:-1] = self.full_features_buffer[0,1:]
self.full_features_buffer[0,-1] = vision_outputs_dict['hidden_state'][0, :]
self.numpy_inputs['features_buffer'][:] = self.full_features_buffer[0, self.temporal_idxs]
self.policy_output = self.policy_run(**self.policy_inputs).numpy().flatten()
policy_outputs_dict = self.parser.parse_policy_outputs(self.slice_outputs(self.policy_output, self.policy_output_slices))
# TODO model only uses last value now
self.numpy_inputs['prev_desired_curv'][0,:-1] = self.numpy_inputs['prev_desired_curv'][0,1:]
self.numpy_inputs['prev_desired_curv'][0,-1,:] = policy_outputs_dict['desired_curvature'][0, :]
self.full_prev_desired_curv[0,:-1] = self.full_prev_desired_curv[0,1:]
self.full_prev_desired_curv[0,-1,:] = policy_outputs_dict['desired_curvature'][0, :]
self.numpy_inputs['prev_desired_curv'][:] = self.full_prev_desired_curv[0, self.temporal_idxs]
combined_outputs_dict = {**vision_outputs_dict, **policy_outputs_dict}
if SEND_RAW_PRED:
+7 -4
View File
@@ -5,11 +5,12 @@
#include "common/clutil.h"
DrivingModelFrame::DrivingModelFrame(cl_device_id device_id, cl_context context) : ModelFrame(device_id, context) {
DrivingModelFrame::DrivingModelFrame(cl_device_id device_id, cl_context context, int _temporal_skip) : ModelFrame(device_id, context) {
input_frames = std::make_unique<uint8_t[]>(buf_size);
temporal_skip = _temporal_skip;
input_frames_cl = CL_CHECK_ERR(clCreateBuffer(context, CL_MEM_READ_WRITE, buf_size, NULL, &err));
img_buffer_20hz_cl = CL_CHECK_ERR(clCreateBuffer(context, CL_MEM_READ_WRITE, 2*frame_size_bytes, NULL, &err));
region.origin = 1 * frame_size_bytes;
img_buffer_20hz_cl = CL_CHECK_ERR(clCreateBuffer(context, CL_MEM_READ_WRITE, (temporal_skip+1)*frame_size_bytes, NULL, &err));
region.origin = temporal_skip * frame_size_bytes;
region.size = frame_size_bytes;
last_img_cl = CL_CHECK_ERR(clCreateSubBuffer(img_buffer_20hz_cl, CL_MEM_READ_WRITE, CL_BUFFER_CREATE_TYPE_REGION, &region, &err));
@@ -20,7 +21,7 @@ DrivingModelFrame::DrivingModelFrame(cl_device_id device_id, cl_context context)
cl_mem* DrivingModelFrame::prepare(cl_mem yuv_cl, int frame_width, int frame_height, int frame_stride, int frame_uv_offset, const mat3& projection) {
run_transform(yuv_cl, MODEL_WIDTH, MODEL_HEIGHT, frame_width, frame_height, frame_stride, frame_uv_offset, projection);
for (int i = 0; i < 1; i++) {
for (int i = 0; i < temporal_skip; i++) {
CL_CHECK(clEnqueueCopyBuffer(q, img_buffer_20hz_cl, img_buffer_20hz_cl, (i+1)*frame_size_bytes, i*frame_size_bytes, frame_size_bytes, 0, nullptr, nullptr));
}
loadyuv_queue(&loadyuv, q, y_cl, u_cl, v_cl, last_img_cl);
@@ -36,6 +37,7 @@ cl_mem* DrivingModelFrame::prepare(cl_mem yuv_cl, int frame_width, int frame_hei
DrivingModelFrame::~DrivingModelFrame() {
deinit_transform();
loadyuv_destroy(&loadyuv);
CL_CHECK(clReleaseMemObject(input_frames_cl));
CL_CHECK(clReleaseMemObject(img_buffer_20hz_cl));
CL_CHECK(clReleaseMemObject(last_img_cl));
CL_CHECK(clReleaseCommandQueue(q));
@@ -57,5 +59,6 @@ cl_mem* MonitoringModelFrame::prepare(cl_mem yuv_cl, int frame_width, int frame_
MonitoringModelFrame::~MonitoringModelFrame() {
deinit_transform();
CL_CHECK(clReleaseMemObject(input_frame_cl));
CL_CHECK(clReleaseCommandQueue(q));
}
+3 -2
View File
@@ -64,20 +64,21 @@ protected:
class DrivingModelFrame : public ModelFrame {
public:
DrivingModelFrame(cl_device_id device_id, cl_context context);
DrivingModelFrame(cl_device_id device_id, cl_context context, int _temporal_skip);
~DrivingModelFrame();
cl_mem* prepare(cl_mem yuv_cl, int frame_width, int frame_height, int frame_stride, int frame_uv_offset, const mat3& projection);
const int MODEL_WIDTH = 512;
const int MODEL_HEIGHT = 256;
const int MODEL_FRAME_SIZE = MODEL_WIDTH * MODEL_HEIGHT * 3 / 2;
const int buf_size = MODEL_FRAME_SIZE * 2;
const int buf_size = MODEL_FRAME_SIZE * 2; // 2 frames are temporal_skip frames apart
const size_t frame_size_bytes = MODEL_FRAME_SIZE * sizeof(uint8_t);
private:
LoadYUVState loadyuv;
cl_mem img_buffer_20hz_cl, last_img_cl, input_frames_cl;
cl_buffer_region region;
int temporal_skip;
};
class MonitoringModelFrame : public ModelFrame {
+1 -1
View File
@@ -20,7 +20,7 @@ cdef extern from "selfdrive/modeld/models/commonmodel.h":
cppclass DrivingModelFrame:
int buf_size
DrivingModelFrame(cl_device_id, cl_context)
DrivingModelFrame(cl_device_id, cl_context, int)
cppclass MonitoringModelFrame:
int buf_size
+38 -17
View File
@@ -3548,6 +3548,7 @@ static const char __pyx_k_stringsource[] = "<stringsource>";
static const char __pyx_k_version_info[] = "version_info";
static const char __pyx_k_class_getitem[] = "__class_getitem__";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_temporal_skip[] = "temporal_skip";
static const char __pyx_k_AssertionError[] = "AssertionError";
static const char __pyx_k_buffer_from_cl[] = "buffer_from_cl";
static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
@@ -3664,7 +3665,7 @@ static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFr
static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFrame_4buffer_from_cl(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_ModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLMem *__pyx_v_in_frames); /* proto */
static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFrame_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_ModelFrame *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFrame_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_ModelFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context); /* proto */
static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context, int __pyx_v_temporal_skip); /* proto */
static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_20MonitoringModelFrame___cinit__(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_MonitoringModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context); /* proto */
@@ -3939,6 +3940,7 @@ typedef struct {
PyObject *__pyx_kp_s_stringsource;
PyObject *__pyx_n_s_struct;
PyObject *__pyx_n_s_sys;
PyObject *__pyx_n_s_temporal_skip;
PyObject *__pyx_n_s_test;
PyObject *__pyx_kp_s_unable_to_allocate_array_data;
PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
@@ -4225,6 +4227,7 @@ static int __pyx_m_clear(PyObject *m) {
Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource);
Py_CLEAR(clear_module_state->__pyx_n_s_struct);
Py_CLEAR(clear_module_state->__pyx_n_s_sys);
Py_CLEAR(clear_module_state->__pyx_n_s_temporal_skip);
Py_CLEAR(clear_module_state->__pyx_n_s_test);
Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_array_data);
Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str);
@@ -4489,6 +4492,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource);
Py_VISIT(traverse_module_state->__pyx_n_s_struct);
Py_VISIT(traverse_module_state->__pyx_n_s_sys);
Py_VISIT(traverse_module_state->__pyx_n_s_temporal_skip);
Py_VISIT(traverse_module_state->__pyx_n_s_test);
Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_array_data);
Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str);
@@ -4799,6 +4803,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource
#define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct
#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys
#define __pyx_n_s_temporal_skip __pyx_mstate_global->__pyx_n_s_temporal_skip
#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test
#define __pyx_kp_s_unable_to_allocate_array_data __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_array_data
#define __pyx_kp_s_unable_to_allocate_shape_and_str __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_shape_and_str
@@ -21642,8 +21647,8 @@ static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFr
/* "selfdrive/modeld/models/commonmodel_pyx.pyx":62
* cdef cppDrivingModelFrame * _frame
*
* def __cinit__(self, CLContext context): # <<<<<<<<<<<<<<
* self._frame = new cppDrivingModelFrame(context.device_id, context.context)
* def __cinit__(self, CLContext context, int temporal_skip): # <<<<<<<<<<<<<<
* self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip)
* self.frame = <cppModelFrame*>(self._frame)
*/
@@ -21651,9 +21656,10 @@ static PyObject *__pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_10ModelFr
static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context = 0;
int __pyx_v_temporal_skip;
CYTHON_UNUSED Py_ssize_t __pyx_nargs;
CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
PyObject* values[1] = {0};
PyObject* values[2] = {0,0};
int __pyx_lineno = 0;
const char *__pyx_filename = NULL;
int __pyx_clineno = 0;
@@ -21667,10 +21673,12 @@ static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
#endif
__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
{
PyObject **__pyx_pyargnames[] = {&__pyx_n_s_context,0};
PyObject **__pyx_pyargnames[] = {&__pyx_n_s_context,&__pyx_n_s_temporal_skip,0};
if (__pyx_kwds) {
Py_ssize_t kw_args;
switch (__pyx_nargs) {
case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
CYTHON_FALLTHROUGH;
case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
CYTHON_FALLTHROUGH;
case 0: break;
@@ -21685,21 +21693,33 @@ static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
}
else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 62, __pyx_L3_error)
else goto __pyx_L5_argtuple_error;
CYTHON_FALLTHROUGH;
case 1:
if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_temporal_skip)) != 0)) {
(void)__Pyx_Arg_NewRef_VARARGS(values[1]);
kw_args--;
}
else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 62, __pyx_L3_error)
else {
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(1, 62, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
const Py_ssize_t kwd_pos_args = __pyx_nargs;
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 62, __pyx_L3_error)
}
} else if (unlikely(__pyx_nargs != 1)) {
} else if (unlikely(__pyx_nargs != 2)) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
}
__pyx_v_context = ((struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *)values[0]);
__pyx_v_temporal_skip = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_temporal_skip == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 62, __pyx_L3_error)
}
goto __pyx_L6_skip;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 62, __pyx_L3_error)
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 62, __pyx_L3_error)
__pyx_L6_skip:;
goto __pyx_L4_argument_unpacking_done;
__pyx_L3_error:;
@@ -21714,7 +21734,7 @@ static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_context), __pyx_ptype_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext, 1, "context", 0))) __PYX_ERR(1, 62, __pyx_L1_error)
__pyx_r = __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(((struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *)__pyx_v_self), __pyx_v_context);
__pyx_r = __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(((struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *)__pyx_v_self), __pyx_v_context, __pyx_v_temporal_skip);
/* function exit code */
goto __pyx_L0;
@@ -21731,22 +21751,22 @@ static int __pyx_pw_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
return __pyx_r;
}
static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context) {
static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelFrame___cinit__(struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_DrivingModelFrame *__pyx_v_self, struct __pyx_obj_9selfdrive_6modeld_6models_15commonmodel_pyx_CLContext *__pyx_v_context, int __pyx_v_temporal_skip) {
int __pyx_r;
int __pyx_t_1;
/* "selfdrive/modeld/models/commonmodel_pyx.pyx":63
*
* def __cinit__(self, CLContext context):
* self._frame = new cppDrivingModelFrame(context.device_id, context.context) # <<<<<<<<<<<<<<
* def __cinit__(self, CLContext context, int temporal_skip):
* self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip) # <<<<<<<<<<<<<<
* self.frame = <cppModelFrame*>(self._frame)
* self.buf_size = self._frame.buf_size
*/
__pyx_v_self->_frame = new DrivingModelFrame(__pyx_v_context->__pyx_base.device_id, __pyx_v_context->__pyx_base.context);
__pyx_v_self->_frame = new DrivingModelFrame(__pyx_v_context->__pyx_base.device_id, __pyx_v_context->__pyx_base.context, __pyx_v_temporal_skip);
/* "selfdrive/modeld/models/commonmodel_pyx.pyx":64
* def __cinit__(self, CLContext context):
* self._frame = new cppDrivingModelFrame(context.device_id, context.context)
* def __cinit__(self, CLContext context, int temporal_skip):
* self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip)
* self.frame = <cppModelFrame*>(self._frame) # <<<<<<<<<<<<<<
* self.buf_size = self._frame.buf_size
*
@@ -21754,7 +21774,7 @@ static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
__pyx_v_self->__pyx_base.frame = ((ModelFrame *)__pyx_v_self->_frame);
/* "selfdrive/modeld/models/commonmodel_pyx.pyx":65
* self._frame = new cppDrivingModelFrame(context.device_id, context.context)
* self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip)
* self.frame = <cppModelFrame*>(self._frame)
* self.buf_size = self._frame.buf_size # <<<<<<<<<<<<<<
*
@@ -21766,8 +21786,8 @@ static int __pyx_pf_9selfdrive_6modeld_6models_15commonmodel_pyx_17DrivingModelF
/* "selfdrive/modeld/models/commonmodel_pyx.pyx":62
* cdef cppDrivingModelFrame * _frame
*
* def __cinit__(self, CLContext context): # <<<<<<<<<<<<<<
* self._frame = new cppDrivingModelFrame(context.device_id, context.context)
* def __cinit__(self, CLContext context, int temporal_skip): # <<<<<<<<<<<<<<
* self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip)
* self.frame = <cppModelFrame*>(self._frame)
*/
@@ -24144,6 +24164,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
{&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
{&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
{&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1},
{&__pyx_n_s_temporal_skip, __pyx_k_temporal_skip, sizeof(__pyx_k_temporal_skip), 0, 0, 1, 1},
{&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
{&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0},
{&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0},
+2 -2
View File
@@ -59,8 +59,8 @@ cdef class ModelFrame:
cdef class DrivingModelFrame(ModelFrame):
cdef cppDrivingModelFrame * _frame
def __cinit__(self, CLContext context):
self._frame = new cppDrivingModelFrame(context.device_id, context.context)
def __cinit__(self, CLContext context, int temporal_skip):
self._frame = new cppDrivingModelFrame(context.device_id, context.context, temporal_skip)
self.frame = <cppModelFrame*>(self._frame)
self.buf_size = self._frame.buf_size
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+19
View File
@@ -66,6 +66,25 @@ void Panda::set_alternative_experience(uint16_t alternative_experience) {
handle->control_write(0xdf, alternative_experience, 0);
}
std::string Panda::serial_read(int port_number) {
std::string ret;
char buffer[USBPACKET_MAX_SIZE] = {};
while (true) {
int bytes_read = handle->control_read(0xe0, port_number, 0, (unsigned char *)buffer, USBPACKET_MAX_SIZE);
if (bytes_read <= 0) {
break;
}
ret.append(buffer, bytes_read);
}
return ret;
}
void Panda::set_uart_baud(int uart, int rate) {
handle->control_write(0xe4, uart, int(rate / 300));
}
cereal::PandaState::PandaType Panda::get_hw_type() {
unsigned char hw_query[1] = {0};
+2
View File
@@ -64,6 +64,8 @@ public:
cereal::PandaState::PandaType get_hw_type();
void set_safety_model(cereal::CarParams::SafetyModel safety_model, uint16_t safety_param=0U);
void set_alternative_experience(uint16_t alternative_experience);
std::string serial_read(int port_number = 0);
void set_uart_baud(int uart, int rate);
void set_fan_speed(uint16_t fan_speed);
uint16_t get_fan_speed();
void set_ir_pwr(uint16_t ir_pwr);
Binary file not shown.
+8
View File
@@ -452,6 +452,14 @@ void pandad_run(std::vector<Panda *> &pandas) {
send_peripheral_state(peripheral_panda, &pm);
}
// Forward logs from pandas to cloudlog if available
for (auto *panda : pandas) {
std::string log = panda->serial_read();
if (!log.empty()) {
LOGD("%s", log.c_str());
}
}
rk.keepTime();
}
+1 -1
View File
@@ -276,7 +276,7 @@ def migrate_pandaStates(msgs):
"KIA_EV6": HyundaiSafetyFlags.EV_GAS | HyundaiSafetyFlags.CANFD_LKA_STEERING,
}
# TODO: get new Ford route
safety_param_migration |= {car: FordSafetyFlags.LONG_CONTROL for car in (set(FORD) - FORD.with_flags(FordFlags.CANFD))}
safety_param_migration |= dict.fromkeys((set(FORD) - FORD.with_flags(FordFlags.CANFD)), FordSafetyFlags.LONG_CONTROL)
# Migrate safety param base on carParams
CP = next((m.carParams for _, m in msgs if m.which() == 'carParams'), None)
+1 -1
View File
@@ -1 +1 @@
e9d57157494480637a8ffb52257d2b660a48be67
359b08b1a914d61697e10bbcac22d96dc90699fa
+1 -1
View File
@@ -187,7 +187,7 @@ class TestOnroad:
def test_manager_starting_time(self):
st = self.ts['managerState']['t'][0]
assert (st - self.manager_st) < 15, f"manager.py took {st - self.manager_st}s to publish the first 'managerState' msg"
assert (st - self.manager_st) < 12.5, f"manager.py took {st - self.manager_st}s to publish the first 'managerState' msg"
def test_cloudlog_size(self):
msgs = self.msgs['logMessage']
Binary file not shown.
+4 -4
View File
@@ -327,10 +327,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation>نشط</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;غير نشط&lt;/span&gt;: اتصل بشبكة غير محسوبة</translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation>للحصول على أقصى فعالية، أحضر جهازك إلى الداخل واتصل بمحول USB-C جيد وشبكة Wi-Fi أسبوعياً.&lt;br&gt;&lt;br&gt;يمكن أن يعمل وضع خرطوم الحريق أيضاً أثناء القيادة إذا كنت متصلاً بنقطة اتصال أو ببطاقة SIM غير محدودة.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;الأسئلة المتكررة&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;هل يهم كيف أو أين أقود؟&lt;/i&gt; لا، فقط قد كما تفعل عادة.&lt;br&gt;&lt;br&gt;&lt;i&gt;هل يتم سحب كل مقاطع رحلاتي في وضع خرطوم الحريق؟&lt;/i&gt; لا، نقوم بسحب مجموعة مختارة من مقاطع رحلاتك.&lt;br&gt;&lt;br&gt;&lt;i&gt;ما هو محول USB-C الجيد؟&lt;/i&gt; أي شاحن سريع للهاتف أو اللابتوب يجب أن يكون مناسباً.&lt;br&gt;&lt;br&gt;&lt;i&gt;هل يهم أي برنامج أستخدم؟&lt;/i&gt; نعم، فقط النسخة الأصلية من openpilot (وأفرع معينة) يمكن استخدامها للتدريب.</translation>
@@ -346,6 +342,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform>حتى الآن، يوجد &lt;/b&gt;%n مقطع&lt;b&gt;%n من قيادتك في مجموعة بيانات التدريب.</numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
+4 -4
View File
@@ -325,10 +325,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
@@ -340,6 +336,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform></numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
+4 -4
View File
@@ -325,10 +325,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
@@ -340,6 +336,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform></numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
+4 -4
View File
@@ -325,10 +325,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
@@ -340,6 +336,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform></numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
Binary file not shown.
+18 -16
View File
@@ -315,30 +315,32 @@
<source>openpilot learns to drive by watching humans, like you, drive.
Firehose Mode allows you to maximize your training data uploads to improve openpilot&apos;s driving models. More data means bigger models, which means better Experimental Mode.</source>
<translation type="unfinished"></translation>
<translation>openpilotは人間であるあなたの運転から学びAI学習します
Firehoseモードを有効にするとopenpilotの運転モデルを向上させることができますExperimentalモードの精度を向上させます</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
<translation>Firehoseモード: 作動中</translation>
</message>
<message>
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
<translation>USB-C充電器とWi-Fiに毎週接続してください&lt;br&gt;&lt;br&gt;Firehoseモードは公衆無線LANや大容量契約のSIMカードに接続していれば&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;(FAQ)&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;運転のやり方や走る場所は重要ですか?&lt;/i&gt; &lt;br&gt;&lt;br&gt;&lt;i&gt;Firehoseモードでは全てのデータがアップロードされますか&lt;/i&gt; いいえ、アップロードするデータを選ぶことができます。&lt;br&gt;&lt;br&gt;&lt;i&gt;大容量のUSB-C充電器とは何ですか?&lt;/i&gt; 使&lt;br&gt;&lt;br&gt;&lt;i&gt;使&lt;/i&gt;openpilot()使</translation>
</message>
<message numerus="yes">
<source>&lt;b&gt;%n segment(s)&lt;/b&gt; of your driving is in the training dataset so far.</source>
<translation type="unfinished">
<numerusform></numerusform>
<translation>
<numerusform>&lt;b&gt;%nセグメント&lt;/b&gt;</numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -945,7 +947,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username other than your own. A comma employee will NEVER ask you to add their GitHub username.</source>
<translation>警告: これはGitHub SSH GitHub commaのスタッフが GitHub </translation>
<translation>警告: これはGitHubの設定にあるすべての公開鍵への SSH GitHubユーザー名を入力しないでくださいcommaのスタッフがGitHubのユーザー名を追加するようお願いすることはありません</translation>
</message>
<message>
<source>ADD</source>
@@ -953,7 +955,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Enter your GitHub username</source>
<translation>GitHub </translation>
<translation>GitHubのユーザー名を入力してください</translation>
</message>
<message>
<source>LOADING</source>
@@ -995,18 +997,18 @@ This may take up to a minute.</source>
</message>
<message>
<source>Welcome to openpilot</source>
<translation type="unfinished"></translation>
<translation>openpilotへようこそ</translation>
</message>
<message>
<source>You must accept the Terms and Conditions to use openpilot. Read the latest terms at &lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt; before continuing.</source>
<translation type="unfinished"></translation>
<translation>openpilotを使用するには利用規約に同意する必要があります: &lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt;</translation>
</message>
</context>
<context>
<name>TogglesPanel</name>
<message>
<source>Enable openpilot</source>
<translation>openpilot </translation>
<translation>openpilotを有効化</translation>
</message>
<message>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
@@ -1014,7 +1016,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Enable Lane Departure Warnings</source>
<translation></translation>
<translation></translation>
</message>
<message>
<source>Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31 mph (50 km/h).</source>
Binary file not shown.
+38 -38
View File
@@ -102,7 +102,7 @@
<name>DeclinePage</name>
<message>
<source>You must accept the Terms and Conditions in order to use openpilot.</source>
<translation>openpilot을 .</translation>
<translation> .</translation>
</message>
<message>
<source>Back</source>
@@ -121,19 +121,19 @@
</message>
<message>
<source>Longitudinal Maneuver Mode</source>
<translation> </translation>
<translation> </translation>
</message>
<message>
<source>openpilot Longitudinal Control (Alpha)</source>
<translation>openpilot ()</translation>
<translation> ()</translation>
</message>
<message>
<source>WARNING: openpilot longitudinal control is in alpha for this car and will disable Automatic Emergency Braking (AEB).</source>
<translation>경고: openpilot (AEB) .</translation>
<translation>경고: 오픈파일럿 (AEB) .</translation>
</message>
<message>
<source>On this car, openpilot defaults to the car&apos;s built-in ACC instead of openpilot&apos;s longitudinal control. Enable this to switch to openpilot longitudinal control. Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha.</source>
<translation> openpilot은 openpilot ACC로 . openpilot . openpilot .</translation>
<translation> ACC로 . . .</translation>
</message>
<message>
<source>Enable ADB</source>
@@ -192,7 +192,7 @@
</message>
<message>
<source>Review the rules, features, and limitations of openpilot</source>
<translation>openpilot의 , </translation>
<translation> , </translation>
</message>
<message>
<source>Are you sure you want to review the training guide?</source>
@@ -228,7 +228,7 @@
</message>
<message>
<source>openpilot requires the device to be mounted within 4° left or right and within 5° up or 9° down. openpilot is continuously calibrating, resetting is rarely required.</source>
<translation>openpilot 4°, 5°, 9° . openpilot은 .</translation>
<translation> 4°, 5°, 9° . .</translation>
</message>
<message>
<source> Your device is pointed %1° %2 and %3° %4.</source>
@@ -317,7 +317,7 @@
Firehose Mode allows you to maximize your training data uploads to improve openpilot&apos;s driving models. More data means bigger models, which means better Experimental Mode.</source>
<translation> .
. , .</translation>
. , .</translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
@@ -325,22 +325,22 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</message>
<message>
<source>ACTIVE</source>
<translation></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;&lt;/span&gt;: </translation>
<translation> </translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation> USB-C Wi-Fi에 .&lt;br&gt;&lt;br&gt; SIM .&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt; &lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;운전 방법이나 장소가 중요한가요?&lt;/i&gt; , .&lt;br&gt;&lt;br&gt;&lt;i&gt; ?.&lt;br&gt;&lt;br&gt;&lt;i&gt; , .&lt;br&gt;&lt;br&gt;&lt;i&gt; USB-C ?&lt;/i&gt; 휴대폰이나 노트북 고속 충전기가 있으면 됩니다.&lt;br&gt;&lt;br&gt;&lt;i&gt;어떤 소프트웨어를 실행하는지가 중요한가요?&lt;/i&gt; , openpilot의 .</translation>
<translation> USB-C Wi-Fi에 .&lt;br&gt;&lt;br&gt; .&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt; &lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;운전 방법이나 장소가 중요한가요?&lt;/i&gt; , .&lt;br&gt;&lt;br&gt;&lt;i&gt; ?&lt;br&gt;&lt;br&gt;&lt;i&gt; , .&lt;br&gt;&lt;br&gt;&lt;i&gt; USB-C ?&lt;/i&gt; 휴대폰이나 노트북충전이 가능한 고속 충전기이면 괜찮습니다.&lt;br&gt;&lt;br&gt;&lt;i&gt;어떤 소프트웨어를 실행하는지가 중요한가요?&lt;/i&gt; , .</translation>
</message>
<message numerus="yes">
<source>&lt;b&gt;%n segment(s)&lt;/b&gt; of your driving is in the training dataset so far.</source>
<translation type="unfinished">
<numerusform></numerusform>
<translation>
<numerusform>&lt;b&gt;%n &lt;/b&gt; .</numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt; &lt;/span&gt;: </translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -411,11 +411,11 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<name>OffroadAlert</name>
<message>
<source>Immediately connect to the internet to check for updates. If you do not connect to the internet, openpilot won&apos;t engage in %1</source>
<translation> . %1 openpilot이 .</translation>
<translation> . %1 .</translation>
</message>
<message>
<source>Connect to internet to check for updates. openpilot won&apos;t automatically start until it connects to internet to check for updates.</source>
<translation> . openpilot은 .</translation>
<translation> . .</translation>
</message>
<message>
<source>Unable to download updates
@@ -445,15 +445,15 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</message>
<message>
<source>openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.</source>
<translation>openpilot이 . ECU가 . PR을 . discord.comma.ai에 .</translation>
<translation> . ECU가 . PR을 . discord.comma.ai에 .</translation>
</message>
<message>
<source>openpilot detected a change in the device&apos;s mounting position. Ensure the device is fully seated in the mount and the mount is firmly secured to the windshield.</source>
<translation>openpilot . . </translation>
<translation> . . </translation>
</message>
<message>
<source>Device temperature too high. System cooling down before starting. Current internal component temperature: %1</source>
<translation> . . : %1</translation>
<translation> . . : %1</translation>
</message>
</context>
<context>
@@ -536,7 +536,7 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</message>
<message>
<source>Become a comma prime member at connect.comma.ai</source>
<translation>connect.comma.ai에 comma prime </translation>
<translation>connect.comma.ai에 comma prime </translation>
</message>
<message>
<source>PRIME FEATURES:</source>
@@ -552,7 +552,7 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</message>
<message>
<source>1 year of drive storage</source>
<translation>1 </translation>
<translation>1 </translation>
</message>
<message>
<source>Remote snapshots</source>
@@ -582,7 +582,7 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
</message>
<message>
<source>openpilot</source>
<translation>openpilot</translation>
<translation></translation>
</message>
<message numerus="yes">
<source>%n minute(s) ago</source>
@@ -767,7 +767,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>openpilot</source>
<translation>openpilot</translation>
<translation></translation>
</message>
<message>
<source>Custom Software</source>
@@ -997,7 +997,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Welcome to openpilot</source>
<translation> .</translation>
<translation> .</translation>
</message>
<message>
<source>You must accept the Terms and Conditions to use openpilot. Read the latest terms at &lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt; before continuing.</source>
@@ -1008,11 +1008,11 @@ This may take up to a minute.</source>
<name>TogglesPanel</name>
<message>
<source>Enable openpilot</source>
<translation>openpilot </translation>
<translation> </translation>
</message>
<message>
<source>Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off.</source>
<translation> openpilot . . .</translation>
<translation> . . .</translation>
</message>
<message>
<source>Enable Lane Departure Warnings</source>
@@ -1044,7 +1044,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>When enabled, pressing the accelerator pedal will disengage openpilot.</source>
<translation> openpilot이 .</translation>
<translation> .</translation>
</message>
<message>
<source>Experimental Mode</source>
@@ -1052,11 +1052,11 @@ This may take up to a minute.</source>
</message>
<message>
<source>openpilot defaults to driving in &lt;b&gt;chill mode&lt;/b&gt;. Experimental mode enables &lt;b&gt;alpha-level features&lt;/b&gt; that aren&apos;t ready for chill mode. Experimental features are listed below:</source>
<translation>openpilot은 &lt;b&gt; &lt;/b&gt; . &lt;b&gt; &lt;/b&gt; . :</translation>
<translation> &lt;b&gt; &lt;/b&gt; . &lt;b&gt; &lt;/b&gt; . :</translation>
</message>
<message>
<source>Let the driving model control the gas and brakes. openpilot will drive as it thinks a human would, including stopping for red lights and stop signs. Since the driving model decides the speed to drive, the set speed will only act as an upper bound. This is an alpha quality feature; mistakes should be expected.</source>
<translation>openpilot의 . openpilot은 . . .</translation>
<translation> . . .</translation>
</message>
<message>
<source>New Driving Visualization</source>
@@ -1064,11 +1064,11 @@ This may take up to a minute.</source>
</message>
<message>
<source>Experimental mode is currently unavailable on this car since the car&apos;s stock ACC is used for longitudinal control.</source>
<translation> ACC .</translation>
<translation> ACC , .</translation>
</message>
<message>
<source>openpilot longitudinal control may come in a future update.</source>
<translation>openpilot .</translation>
<translation> .</translation>
</message>
<message>
<source>Aggressive</source>
@@ -1088,11 +1088,11 @@ This may take up to a minute.</source>
</message>
<message>
<source>An alpha version of openpilot longitudinal control can be tested, along with Experimental mode, on non-release branches.</source>
<translation>openpilot .</translation>
<translation> .</translation>
</message>
<message>
<source>Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.</source>
<translation> openpilot E2E () .</translation>
<translation> E2E () .</translation>
</message>
<message>
<source>End-to-End Longitudinal Control</source>
@@ -1100,7 +1100,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Standard is recommended. In aggressive mode, openpilot will follow lead cars closer and be more aggressive with the gas and brake. In relaxed mode openpilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with your steering wheel distance button.</source>
<translation> . openpilot은 . openpilot은 . .</translation>
<translation> . . . .</translation>
</message>
<message>
<source>The driving visualization will transition to the road-facing wide-angle camera at low speeds to better show some turns. The Experimental mode logo will also be shown in the top right corner.</source>
@@ -1112,7 +1112,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Enable driver monitoring even when openpilot is not engaged.</source>
<translation>openpilot이 .</translation>
<translation> .</translation>
</message>
</context>
<context>
@@ -1158,7 +1158,7 @@ This may take up to a minute.</source>
</message>
<message>
<source>Maximize your training data uploads to improve openpilot&apos;s driving models.</source>
<translation> .</translation>
<translation> .</translation>
</message>
<message>
<source>&lt;span style=&apos;font-family: &quot;Noto Color Emoji&quot;;&apos;&gt;🔥&lt;/span&gt; Firehose Mode &lt;span style=&apos;font-family: Noto Color Emoji;&apos;&gt;🔥&lt;/span&gt;</source>
Binary file not shown.
+4 -4
View File
@@ -327,10 +327,6 @@ O Modo Firehose permite maximizar o envio de dados de treinamento para melhorar
<source>ACTIVE</source>
<translation>ATIVO</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INATIVO&lt;/span&gt;: conecte-se a uma rede sem restrição &lt;br&gt; de dados</translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation>Para maior eficácia, leve seu dispositivo para dentro de casa e conecte-o a um bom adaptador USB-C e Wi-Fi semanalmente.&lt;br&gt;&lt;br&gt;O Modo Firehose também pode funcionar enquanto você dirige, se estiver conectado a um hotspot ou a um chip SIM com dados ilimitados.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Perguntas Frequentes&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Importa como ou onde eu dirijo?&lt;/i&gt; Não, basta dirigir normalmente.&lt;br&gt;&lt;br&gt;&lt;i&gt;Todos os meus segmentos são enviados no Modo Firehose?&lt;/i&gt; Não, selecionamos apenas um subconjunto dos seus segmentos.&lt;br&gt;&lt;br&gt;&lt;i&gt;Qual é um bom adaptador USB-C?&lt;/i&gt; Qualquer carregador rápido de telefone ou laptop deve ser suficiente.&lt;br&gt;&lt;br&gt;&lt;i&gt;Importa qual software eu uso?&lt;/i&gt; Sim, apenas o openpilot oficial (e alguns forks específicos) podem ser usados para treinamento.</translation>
@@ -342,6 +338,10 @@ O Modo Firehose permite maximizar o envio de dados de treinamento para melhorar
<numerusform>&lt;b&gt;%n segmentos&lt;/b&gt; da sua direção estão no conjunto de dados de treinamento até agora.</numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
+4 -4
View File
@@ -325,10 +325,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
@@ -339,6 +335,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform></numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
+4 -4
View File
@@ -325,10 +325,6 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
@@ -339,6 +335,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
<numerusform></numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
Binary file not shown.
+14 -12
View File
@@ -315,30 +315,32 @@
<source>openpilot learns to drive by watching humans, like you, drive.
Firehose Mode allows you to maximize your training data uploads to improve openpilot&apos;s driving models. More data means bigger models, which means better Experimental Mode.</source>
<translation type="unfinished"></translation>
<translation>openpilot
openpilot </translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
<translation> USB-C Wi-Fi&lt;br&gt;&lt;br&gt;Firehose 使 SIM &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;我开车的方式或地点有影响吗?&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Firehose &lt;/i&gt;不会,我们会选择性地上传部分片段。&lt;br&gt;&lt;br&gt;&lt;i&gt;什么是好的 USB-C 充电器?&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;使&lt;/i&gt; openpilot</translation>
</message>
<message numerus="yes">
<source>&lt;b&gt;%n segment(s)&lt;/b&gt; of your driving is in the training dataset so far.</source>
<translation type="unfinished">
<numerusform></numerusform>
<translation>
<numerusform>&lt;b&gt; %n &lt;/b&gt; </numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -995,11 +997,11 @@ This may take up to a minute.</source>
</message>
<message>
<source>Welcome to openpilot</source>
<translation type="unfinished"></translation>
<translation>使 openpilot</translation>
</message>
<message>
<source>You must accept the Terms and Conditions to use openpilot. Read the latest terms at &lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt; before continuing.</source>
<translation type="unfinished"></translation>
<translation>使 openpilot&lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt;。</translation>
</message>
</context>
<context>
Binary file not shown.
+14 -12
View File
@@ -315,30 +315,32 @@
<source>openpilot learns to drive by watching humans, like you, drive.
Firehose Mode allows you to maximize your training data uploads to improve openpilot&apos;s driving models. More data means bigger models, which means better Experimental Mode.</source>
<translation type="unfinished"></translation>
<translation>openpilot
openpilot </translation>
</message>
<message>
<source>Firehose Mode: ACTIVE</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>ACTIVE</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to unmetered network</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.&lt;br&gt;&lt;br&gt;Firehose Mode can also work while you&apos;re driving if connected to a hotspot or unlimited SIM card.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Frequently Asked Questions&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter how or where I drive?&lt;/i&gt; Nope, just drive as you normally would.&lt;br&gt;&lt;br&gt;&lt;i&gt;Do all of my segments get pulled in Firehose Mode?&lt;/i&gt; No, we selectively pull a subset of your segments.&lt;br&gt;&lt;br&gt;&lt;i&gt;What&apos;s a good USB-C adapter?&lt;/i&gt; Any fast phone or laptop charger should be fine.&lt;br&gt;&lt;br&gt;&lt;i&gt;Does it matter which software I run?&lt;/i&gt; Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
<translation type="unfinished"></translation>
<translation> USB-C Wi-Fi&lt;br&gt;&lt;br&gt;使 SIM &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;我開車的方式或地點有影響嗎?&lt;/i&gt; &lt;br&gt;&lt;br&gt;&lt;i&gt;&lt;/i&gt;不會,我們會選擇性地上傳部分片段。&lt;br&gt;&lt;br&gt;&lt;i&gt;什麼是好的 USB-C 充電器?&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;使&lt;/i&gt; openpilot</translation>
</message>
<message numerus="yes">
<source>&lt;b&gt;%n segment(s)&lt;/b&gt; of your driving is in the training dataset so far.</source>
<translation type="unfinished">
<numerusform></numerusform>
<translation>
<numerusform>&lt;b&gt; %n &lt;/b&gt; </numerusform>
</translation>
</message>
<message>
<source>&lt;span stylesheet=&apos;font-size: 60px; font-weight: bold; color: #e74c3c;&apos;&gt;INACTIVE&lt;/span&gt;: connect to an unmetered network</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>HudRenderer</name>
@@ -995,11 +997,11 @@ This may take up to a minute.</source>
</message>
<message>
<source>Welcome to openpilot</source>
<translation type="unfinished"></translation>
<translation>使 openpilot</translation>
</message>
<message>
<source>You must accept the Terms and Conditions to use openpilot. Read the latest terms at &lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt; before continuing.</source>
<translation type="unfinished"></translation>
<translation>使 openpilot&lt;span style=&apos;color: #465BEA;&apos;&gt;https://comma.ai/terms&lt;/span&gt;。</translation>
</message>
</context>
<context>
BIN
View File
Binary file not shown.