bug
This commit is contained in:
+12041
-11572
File diff suppressed because it is too large
Load Diff
@@ -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)
|
||||
|
||||
|
||||
Binary file not shown.
BIN
Binary file not shown.
@@ -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,
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
@@ -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):
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
@@ -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, ®ion, &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));
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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.
Binary file not shown.
@@ -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};
|
||||
|
||||
|
||||
@@ -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.
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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 @@
|
||||
e9d57157494480637a8ffb52257d2b660a48be67
|
||||
359b08b1a914d61697e10bbcac22d96dc90699fa
|
||||
@@ -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.
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to unmetered network</source>
|
||||
<translation><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>غير نشط</span>: اتصل بشبكة غير محسوبة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>For maximum effectiveness, bring your device inside and connect to a good USB-C adapter and Wi-Fi weekly.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
|
||||
<translation>للحصول على أقصى فعالية، أحضر جهازك إلى الداخل واتصل بمحول USB-C جيد وشبكة Wi-Fi أسبوعياً.<br><br>يمكن أن يعمل وضع خرطوم الحريق أيضاً أثناء القيادة إذا كنت متصلاً بنقطة اتصال أو ببطاقة SIM غير محدودة.<br><br><br><b>الأسئلة المتكررة</b><br><br><i>هل يهم كيف أو أين أقود؟</i> لا، فقط قد كما تفعل عادة.<br><br><i>هل يتم سحب كل مقاطع رحلاتي في وضع خرطوم الحريق؟</i> لا، نقوم بسحب مجموعة مختارة من مقاطع رحلاتك.<br><br><i>ما هو محول USB-C الجيد؟</i> أي شاحن سريع للهاتف أو اللابتوب يجب أن يكون مناسباً.<br><br><i>هل يهم أي برنامج أستخدم؟</i> نعم، فقط النسخة الأصلية من openpilot (وأفرع معينة) يمكن استخدامها للتدريب.</translation>
|
||||
@@ -346,6 +342,10 @@ Firehose Mode allows you to maximize your training data uploads to improve openp
|
||||
<numerusform>حتى الآن، يوجد </b>%n مقطع<b>%n من قيادتك في مجموعة بيانات التدريب.</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
Binary file not shown.
@@ -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'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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>最大の効果を得るためにはデバイスを屋内に持ち込み、大容量のUSB-C充電器とWi-Fiに毎週接続してください。<br><br>Firehoseモードは公衆無線LANや大容量契約のSIMカードに接続していれば、運転中でも動作します。<br><br><br><b>よくある質問(FAQ)</b><br><br><i>運転のやり方や走る場所は重要ですか?</i> いいえ、普段どおりに運転するだけで大丈夫です。<br><br><i>Firehoseモードでは全てのデータがアップロードされますか?</i> いいえ、アップロードするデータを選ぶことができます。<br><br><i>大容量のUSB-C充電器とは何ですか?</i> スマートフォンやノートパソコンを高速に充電できるものを使って下さい。<br><br><i>どのフォークを使うかは重要ですか?</i>はい、トレーニングには公式のopenpilot(および特定のフォーク)のみが使用できます。</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source><b>%n segment(s)</b> of your driving is in the training dataset so far.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform>あなたの運転の<b>%nセグメント</b>がこれまでのトレーニングデータに含まれています。</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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 <span style='color: #465BEA;'>https://comma.ai/terms</span> before continuing.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>openpilotを使用するには利用規約に同意する必要があります。続行する前に最新の規約を以下でご確認ください: <span style='color: #465BEA;'>https://comma.ai/terms</span></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.
@@ -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's built-in ACC instead of openpilot'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'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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to unmetered network</source>
|
||||
<translation><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>비활성</span>: 무제한 네트워크에 연결</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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
|
||||
<translation>최대한의 효과를 얻으려면 매주 장치를 실내로 가져와 좋은 USB-C 케이블에 연결하고 Wi-Fi에 연결하세요.<br><br>파이어호스 모드는 핫스팟 또는 무제한 SIM 카드에 연결된 경우에는 운전 중에도 작동할 수 있습니다.<br><br><br><b>자주 묻는 질문</b><br><br><i>운전 방법이나 장소가 중요한가요?</i> 아니요, 평소처럼 운전하시면 됩니다.<br><br><i>파이어호스 모드에서 제 모든 구간을 가져오나요?.<br><br><i> 아니요, 저희는 여러분의 구간 중 일부를 선별적으로 가져옵니다.<br><br><i>좋은 USB-C 케이블은 무엇인가요?</i> 휴대폰이나 노트북 고속 충전기가 있으면 됩니다.<br><br><i>어떤 소프트웨어를 실행하는지가 중요한가요?</i> 예, 오직 공식 openpilot의 특정 포크만 트레이닝에 사용할 수 있습니다.</translation>
|
||||
<translation>최대한의 효과를 얻으려면 매주 장치를 실내로 가져와 좋은 USB-C 충전기와 Wi-Fi에 연결하세요.<br><br>파이어호스 모드는 핫스팟 또는 무제한 네트워크에 연결된 경우 주행 중에도 작동할 수 있습니다.<br><br><br><b>자주 묻는 질문</b><br><br><i>운전 방법이나 장소가 중요한가요?</i> 아니요, 평소처럼 운전하시면 됩니다.<br><br><i>파이어호스 모드에서 제 모든 구간을 가져오나요?<br><br><i> 아니요, 저희는 여러분의 구간 중 일부를 선별적으로 가져옵니다.<br><br><i>좋은 USB-C 충전기는 무엇인가요?</i> 휴대폰이나 노트북충전이 가능한 고속 충전기이면 괜찮습니다.<br><br><i>어떤 소프트웨어를 실행하는지가 중요한가요?</i> 예, 오직 공식 오픈파일럿의 특정 포크만 트레이닝에 사용할 수 있습니다.</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source><b>%n segment(s)</b> of your driving is in the training dataset so far.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform><b>%n 구간</b> 의 운전이 지금까지의 학습 데이터셋에 포함되어 있습니다.</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>비활성 상태</span>: 무제한 네트워크에 연결 하세요</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't engage in %1</source>
|
||||
<translation>즉시 인터넷에 연결하여 업데이트를 확인하세요. 인터넷에 연결되어 있지 않으면 %1 이후에는 openpilot이 활성화되지 않습니다.</translation>
|
||||
<translation>즉시 인터넷에 연결하여 업데이트를 확인하세요. 인터넷에 연결되어 있지 않으면 %1 이후에는 오픈파일럿이 활성화되지 않습니다.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Connect to internet to check for updates. openpilot won'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'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 <span style='color: #465BEA;'>https://comma.ai/terms</span> 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 <b>chill mode</b>. Experimental mode enables <b>alpha-level features</b> that aren't ready for chill mode. Experimental features are listed below:</source>
|
||||
<translation>openpilot은 기본적으로 <b>안정 모드</b>로 주행합니다. 실험 모드는 안정화되지 않은 <b>알파 수준의 기능</b>을 활성화합니다. 실험 모드의 기능은 아래와 같습니다:</translation>
|
||||
<translation>오픈파일럿은 기본적으로 <b>안정 모드</b>로 주행합니다. 실험 모드는 안정화되지 않은 <b>알파 수준의 기능</b>을 활성화합니다. 실험 모드의 기능은 아래와 같습니다:</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'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's driving models.</source>
|
||||
<translation>훈련 데이터 업로드를 최대화하여 오픈파일럿의 주행 모델을 개선하세요.</translation>
|
||||
<translation>오픈파일럿의 주행 모델 개선을 위해 학습 데이터 업로드를 최대화하세요.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span style='font-family: "Noto Color Emoji";'>🔥</span> Firehose Mode <span style='font-family: Noto Color Emoji;'>🔥</span></source>
|
||||
|
||||
Binary file not shown.
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to unmetered network</source>
|
||||
<translation><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INATIVO</span>: conecte-se a uma rede sem restrição <br> 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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.<br><br>O Modo Firehose também pode funcionar enquanto você dirige, se estiver conectado a um hotspot ou a um chip SIM com dados ilimitados.<br><br><br><b>Perguntas Frequentes</b><br><br><i>Importa como ou onde eu dirijo?</i> Não, basta dirigir normalmente.<br><br><i>Todos os meus segmentos são enviados no Modo Firehose?</i> Não, selecionamos apenas um subconjunto dos seus segmentos.<br><br><i>Qual é um bom adaptador USB-C?</i> Qualquer carregador rápido de telefone ou laptop deve ser suficiente.<br><br><i>Importa qual software eu uso?</i> 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><b>%n segmentos</b> da sua direção estão no conjunto de dados de treinamento até agora.</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
@@ -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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> 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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: connect to an unmetered network</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HudRenderer</name>
|
||||
|
||||
Binary file not shown.
@@ -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'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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>为了达到最佳效果,请每周将您的设备带回室内,并连接到优质的 USB-C 充电器和 Wi-Fi。<br><br>Firehose 模式在行驶时也能运行,但需连接到移动热点或使用不限流量的 SIM 卡。<br><br><br><b>常见问题</b><br><br><i>我开车的方式或地点有影响吗?</i>不会,请像平常一样驾驶即可。<br><br><i>Firehose 模式会上传所有的驾驶片段吗?</i>不会,我们会选择性地上传部分片段。<br><br><i>什么是好的 USB-C 充电器?</i>任何快速手机或笔记本电脑充电器都应该适用。<br><br><i>我使用的软件版本有影响吗?</i>有的,只有官方 openpilot(以及特定的分支)可以用于训练。</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source><b>%n segment(s)</b> of your driving is in the training dataset so far.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform><b>目前已有 %n 段</b> 您的驾驶数据被纳入训练数据集。</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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 <span style='color: #465BEA;'>https://comma.ai/terms</span> before continuing.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>您必须接受《条款与条件》才能使用 openpilot。在继续之前,请先阅读最新条款:<span style='color: #465BEA;'>https://comma.ai/terms</span>。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
Binary file not shown.
@@ -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'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><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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.<br><br>Firehose Mode can also work while you're driving if connected to a hotspot or unlimited SIM card.<br><br><br><b>Frequently Asked Questions</b><br><br><i>Does it matter how or where I drive?</i> Nope, just drive as you normally would.<br><br><i>Do all of my segments get pulled in Firehose Mode?</i> No, we selectively pull a subset of your segments.<br><br><i>What's a good USB-C adapter?</i> Any fast phone or laptop charger should be fine.<br><br><i>Does it matter which software I run?</i> Yes, only upstream openpilot (and particular forks) are able to be used for training.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>為了達到最佳效果,請每週將您的裝置帶回室內,並連接至優質的 USB-C 充電器與 Wi-Fi。<br><br>訓練資料上傳模式在行駛時也能運作,但需連接至行動熱點或使用不限流量的 SIM 卡。<br><br><br><b>常見問題</b><br><br><i>我開車的方式或地點有影響嗎?</i> 不會,請像平常一樣駕駛即可。<br><br><i>訓練資料上傳模式會上傳所有的駕駛片段嗎?</i>不會,我們會選擇性地上傳部分片段。<br><br><i>什麼是好的 USB-C 充電器?</i>任何快速手機或筆電充電器都應該適用。<br><br><i>我使用的軟體版本有影響嗎?</i>有的,只有官方 openpilot(以及特定的分支)可以用於訓練。</translation>
|
||||
</message>
|
||||
<message numerus="yes">
|
||||
<source><b>%n segment(s)</b> of your driving is in the training dataset so far.</source>
|
||||
<translation type="unfinished">
|
||||
<numerusform></numerusform>
|
||||
<translation>
|
||||
<numerusform><b>目前已有 %n 段</b> 您的駕駛數據被納入訓練資料集。</numerusform>
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source><span stylesheet='font-size: 60px; font-weight: bold; color: #e74c3c;'>INACTIVE</span>: 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 <span style='color: #465BEA;'>https://comma.ai/terms</span> before continuing.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>您必須接受《條款與條件》才能使用 openpilot。在繼續之前,請先閱讀最新條款:<span style='color: #465BEA;'>https://comma.ai/terms</span>。</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user