dragonpilot beta3

date: 2023-12-23T21:19:29
commit: 38612b14f1a8aa49d1c6ef61bd67f5a095abb3f9
This commit is contained in:
dragonpilot
2023-12-23 21:18:48 -07:00
parent dd4c663a58
commit 7ee7cb59b3
389 changed files with 36391 additions and 48841 deletions
+14 -20
View File
@@ -15,10 +15,10 @@ from typing import List, NoReturn, Optional
from cereal import log
import cereal.messaging as messaging
from openpilot.common.conversions import Conversions as CV
from openpilot.common.params import Params, put_nonblocking
from openpilot.common.params import Params
from openpilot.common.realtime import set_realtime_priority
from openpilot.common.transformations.orientation import rot_from_euler, euler_from_rot
from openpilot.system.swaglog import cloudlog
from openpilot.common.swaglog import cloudlog
MIN_SPEED_FILTER = 15 * CV.MPH_TO_MS
MAX_VEL_ANGLE_STD = np.radians(0.25)
@@ -64,8 +64,8 @@ class Calibrator:
self.not_car = False
# Read saved calibration
params = Params()
calibration_params = params.get("CalibrationParams")
self.params = Params()
calibration_params = self.params.get("CalibrationParams")
rpy_init = RPY_INIT
wide_from_device_euler = WIDE_FROM_DEVICE_EULER_INIT
height = HEIGHT_INIT
@@ -164,7 +164,7 @@ class Calibrator:
write_this_cycle = (self.idx == 0) and (self.block_idx % (INPUTS_WANTED//5) == 5)
if self.param_put and write_this_cycle:
put_nonblocking("CalibrationParams", self.get_msg().to_bytes())
self.params.put_nonblocking("CalibrationParams", self.get_msg(True).to_bytes())
def handle_v_ego(self, v_ego: float) -> None:
self.v_ego = v_ego
@@ -227,12 +227,13 @@ class Calibrator:
return new_rpy
def get_msg(self) -> capnp.lib.capnp._DynamicStructBuilder:
def get_msg(self, valid: bool) -> capnp.lib.capnp._DynamicStructBuilder:
smooth_rpy = self.get_smooth_rpy()
msg = messaging.new_message('liveCalibration')
liveCalibration = msg.liveCalibration
msg.valid = valid
liveCalibration = msg.liveCalibration
liveCalibration.validBlocks = self.valid_blocks
liveCalibration.calStatus = self.cal_status
liveCalibration.calPerc = min(100 * (self.valid_blocks * BLOCK_SIZE + self.idx) // (INPUTS_NEEDED * BLOCK_SIZE), 100)
@@ -250,19 +251,16 @@ class Calibrator:
return msg
def send_data(self, pm: messaging.PubMaster) -> None:
pm.send('liveCalibration', self.get_msg())
def send_data(self, pm: messaging.PubMaster, valid: bool) -> None:
pm.send('liveCalibration', self.get_msg(valid))
def calibrationd_thread(sm: Optional[messaging.SubMaster] = None, pm: Optional[messaging.PubMaster] = None) -> NoReturn:
def main() -> NoReturn:
gc.disable()
set_realtime_priority(1)
if sm is None:
sm = messaging.SubMaster(['cameraOdometry', 'carState', 'carParams'], poll=['cameraOdometry'])
if pm is None:
pm = messaging.PubMaster(['liveCalibration'])
pm = messaging.PubMaster(['liveCalibration'])
sm = messaging.SubMaster(['cameraOdometry', 'carState', 'carParams'], poll=['cameraOdometry'])
calibrator = Calibrator(param_put=True)
@@ -286,11 +284,7 @@ def calibrationd_thread(sm: Optional[messaging.SubMaster] = None, pm: Optional[m
# 4Hz driven by cameraOdometry
if sm.frame % 5 == 0:
calibrator.send_data(pm)
def main(sm: Optional[messaging.SubMaster] = None, pm: Optional[messaging.PubMaster] = None) -> NoReturn:
calibrationd_thread(sm, pm)
calibrator.send_data(pm, sm.all_checks())
if __name__ == "__main__":
+14
View File
@@ -1,6 +1,8 @@
import numpy as np
from typing import List, Optional, Tuple, Any
from cereal import log
class NPQueue:
def __init__(self, maxlen: int, rowsize: int) -> None:
@@ -48,3 +50,15 @@ class PointBuckets:
def load_points(self, points: List[List[float]]) -> None:
for point in points:
self.add_point(*point)
class ParameterEstimator:
""" Base class for parameter estimators """
def reset(self) -> None:
raise NotImplementedError
def handle_log(self, t: int, which: str, msg: log.Event) -> None:
raise NotImplementedError
def get_msg(self, valid: bool, with_points: bool) -> log.Event:
raise NotImplementedError
Binary file not shown.
+1 -1
View File
@@ -7,7 +7,7 @@ import numpy as np
from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY
from openpilot.selfdrive.locationd.models.constants import ObservationKind
from openpilot.system.swaglog import cloudlog
from openpilot.common.swaglog import cloudlog
from rednose.helpers.kalmanfilter import KalmanFilter
+343 -343
View File
@@ -45,326 +45,326 @@ const static double MAHA_THRESH_31 = 3.8414588206941227;
* *
* This file is part of 'ekf' *
******************************************************************************/
void err_fun(double *nom_x, double *delta_x, double *out_5337520902682181745) {
out_5337520902682181745[0] = delta_x[0] + nom_x[0];
out_5337520902682181745[1] = delta_x[1] + nom_x[1];
out_5337520902682181745[2] = delta_x[2] + nom_x[2];
out_5337520902682181745[3] = delta_x[3] + nom_x[3];
out_5337520902682181745[4] = delta_x[4] + nom_x[4];
out_5337520902682181745[5] = delta_x[5] + nom_x[5];
out_5337520902682181745[6] = delta_x[6] + nom_x[6];
out_5337520902682181745[7] = delta_x[7] + nom_x[7];
out_5337520902682181745[8] = delta_x[8] + nom_x[8];
void err_fun(double *nom_x, double *delta_x, double *out_7890812005855138291) {
out_7890812005855138291[0] = delta_x[0] + nom_x[0];
out_7890812005855138291[1] = delta_x[1] + nom_x[1];
out_7890812005855138291[2] = delta_x[2] + nom_x[2];
out_7890812005855138291[3] = delta_x[3] + nom_x[3];
out_7890812005855138291[4] = delta_x[4] + nom_x[4];
out_7890812005855138291[5] = delta_x[5] + nom_x[5];
out_7890812005855138291[6] = delta_x[6] + nom_x[6];
out_7890812005855138291[7] = delta_x[7] + nom_x[7];
out_7890812005855138291[8] = delta_x[8] + nom_x[8];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_8828680484256532384) {
out_8828680484256532384[0] = -nom_x[0] + true_x[0];
out_8828680484256532384[1] = -nom_x[1] + true_x[1];
out_8828680484256532384[2] = -nom_x[2] + true_x[2];
out_8828680484256532384[3] = -nom_x[3] + true_x[3];
out_8828680484256532384[4] = -nom_x[4] + true_x[4];
out_8828680484256532384[5] = -nom_x[5] + true_x[5];
out_8828680484256532384[6] = -nom_x[6] + true_x[6];
out_8828680484256532384[7] = -nom_x[7] + true_x[7];
out_8828680484256532384[8] = -nom_x[8] + true_x[8];
void inv_err_fun(double *nom_x, double *true_x, double *out_1799861052992404131) {
out_1799861052992404131[0] = -nom_x[0] + true_x[0];
out_1799861052992404131[1] = -nom_x[1] + true_x[1];
out_1799861052992404131[2] = -nom_x[2] + true_x[2];
out_1799861052992404131[3] = -nom_x[3] + true_x[3];
out_1799861052992404131[4] = -nom_x[4] + true_x[4];
out_1799861052992404131[5] = -nom_x[5] + true_x[5];
out_1799861052992404131[6] = -nom_x[6] + true_x[6];
out_1799861052992404131[7] = -nom_x[7] + true_x[7];
out_1799861052992404131[8] = -nom_x[8] + true_x[8];
}
void H_mod_fun(double *state, double *out_5754598514978375131) {
out_5754598514978375131[0] = 1.0;
out_5754598514978375131[1] = 0;
out_5754598514978375131[2] = 0;
out_5754598514978375131[3] = 0;
out_5754598514978375131[4] = 0;
out_5754598514978375131[5] = 0;
out_5754598514978375131[6] = 0;
out_5754598514978375131[7] = 0;
out_5754598514978375131[8] = 0;
out_5754598514978375131[9] = 0;
out_5754598514978375131[10] = 1.0;
out_5754598514978375131[11] = 0;
out_5754598514978375131[12] = 0;
out_5754598514978375131[13] = 0;
out_5754598514978375131[14] = 0;
out_5754598514978375131[15] = 0;
out_5754598514978375131[16] = 0;
out_5754598514978375131[17] = 0;
out_5754598514978375131[18] = 0;
out_5754598514978375131[19] = 0;
out_5754598514978375131[20] = 1.0;
out_5754598514978375131[21] = 0;
out_5754598514978375131[22] = 0;
out_5754598514978375131[23] = 0;
out_5754598514978375131[24] = 0;
out_5754598514978375131[25] = 0;
out_5754598514978375131[26] = 0;
out_5754598514978375131[27] = 0;
out_5754598514978375131[28] = 0;
out_5754598514978375131[29] = 0;
out_5754598514978375131[30] = 1.0;
out_5754598514978375131[31] = 0;
out_5754598514978375131[32] = 0;
out_5754598514978375131[33] = 0;
out_5754598514978375131[34] = 0;
out_5754598514978375131[35] = 0;
out_5754598514978375131[36] = 0;
out_5754598514978375131[37] = 0;
out_5754598514978375131[38] = 0;
out_5754598514978375131[39] = 0;
out_5754598514978375131[40] = 1.0;
out_5754598514978375131[41] = 0;
out_5754598514978375131[42] = 0;
out_5754598514978375131[43] = 0;
out_5754598514978375131[44] = 0;
out_5754598514978375131[45] = 0;
out_5754598514978375131[46] = 0;
out_5754598514978375131[47] = 0;
out_5754598514978375131[48] = 0;
out_5754598514978375131[49] = 0;
out_5754598514978375131[50] = 1.0;
out_5754598514978375131[51] = 0;
out_5754598514978375131[52] = 0;
out_5754598514978375131[53] = 0;
out_5754598514978375131[54] = 0;
out_5754598514978375131[55] = 0;
out_5754598514978375131[56] = 0;
out_5754598514978375131[57] = 0;
out_5754598514978375131[58] = 0;
out_5754598514978375131[59] = 0;
out_5754598514978375131[60] = 1.0;
out_5754598514978375131[61] = 0;
out_5754598514978375131[62] = 0;
out_5754598514978375131[63] = 0;
out_5754598514978375131[64] = 0;
out_5754598514978375131[65] = 0;
out_5754598514978375131[66] = 0;
out_5754598514978375131[67] = 0;
out_5754598514978375131[68] = 0;
out_5754598514978375131[69] = 0;
out_5754598514978375131[70] = 1.0;
out_5754598514978375131[71] = 0;
out_5754598514978375131[72] = 0;
out_5754598514978375131[73] = 0;
out_5754598514978375131[74] = 0;
out_5754598514978375131[75] = 0;
out_5754598514978375131[76] = 0;
out_5754598514978375131[77] = 0;
out_5754598514978375131[78] = 0;
out_5754598514978375131[79] = 0;
out_5754598514978375131[80] = 1.0;
void H_mod_fun(double *state, double *out_3019605320337164716) {
out_3019605320337164716[0] = 1.0;
out_3019605320337164716[1] = 0;
out_3019605320337164716[2] = 0;
out_3019605320337164716[3] = 0;
out_3019605320337164716[4] = 0;
out_3019605320337164716[5] = 0;
out_3019605320337164716[6] = 0;
out_3019605320337164716[7] = 0;
out_3019605320337164716[8] = 0;
out_3019605320337164716[9] = 0;
out_3019605320337164716[10] = 1.0;
out_3019605320337164716[11] = 0;
out_3019605320337164716[12] = 0;
out_3019605320337164716[13] = 0;
out_3019605320337164716[14] = 0;
out_3019605320337164716[15] = 0;
out_3019605320337164716[16] = 0;
out_3019605320337164716[17] = 0;
out_3019605320337164716[18] = 0;
out_3019605320337164716[19] = 0;
out_3019605320337164716[20] = 1.0;
out_3019605320337164716[21] = 0;
out_3019605320337164716[22] = 0;
out_3019605320337164716[23] = 0;
out_3019605320337164716[24] = 0;
out_3019605320337164716[25] = 0;
out_3019605320337164716[26] = 0;
out_3019605320337164716[27] = 0;
out_3019605320337164716[28] = 0;
out_3019605320337164716[29] = 0;
out_3019605320337164716[30] = 1.0;
out_3019605320337164716[31] = 0;
out_3019605320337164716[32] = 0;
out_3019605320337164716[33] = 0;
out_3019605320337164716[34] = 0;
out_3019605320337164716[35] = 0;
out_3019605320337164716[36] = 0;
out_3019605320337164716[37] = 0;
out_3019605320337164716[38] = 0;
out_3019605320337164716[39] = 0;
out_3019605320337164716[40] = 1.0;
out_3019605320337164716[41] = 0;
out_3019605320337164716[42] = 0;
out_3019605320337164716[43] = 0;
out_3019605320337164716[44] = 0;
out_3019605320337164716[45] = 0;
out_3019605320337164716[46] = 0;
out_3019605320337164716[47] = 0;
out_3019605320337164716[48] = 0;
out_3019605320337164716[49] = 0;
out_3019605320337164716[50] = 1.0;
out_3019605320337164716[51] = 0;
out_3019605320337164716[52] = 0;
out_3019605320337164716[53] = 0;
out_3019605320337164716[54] = 0;
out_3019605320337164716[55] = 0;
out_3019605320337164716[56] = 0;
out_3019605320337164716[57] = 0;
out_3019605320337164716[58] = 0;
out_3019605320337164716[59] = 0;
out_3019605320337164716[60] = 1.0;
out_3019605320337164716[61] = 0;
out_3019605320337164716[62] = 0;
out_3019605320337164716[63] = 0;
out_3019605320337164716[64] = 0;
out_3019605320337164716[65] = 0;
out_3019605320337164716[66] = 0;
out_3019605320337164716[67] = 0;
out_3019605320337164716[68] = 0;
out_3019605320337164716[69] = 0;
out_3019605320337164716[70] = 1.0;
out_3019605320337164716[71] = 0;
out_3019605320337164716[72] = 0;
out_3019605320337164716[73] = 0;
out_3019605320337164716[74] = 0;
out_3019605320337164716[75] = 0;
out_3019605320337164716[76] = 0;
out_3019605320337164716[77] = 0;
out_3019605320337164716[78] = 0;
out_3019605320337164716[79] = 0;
out_3019605320337164716[80] = 1.0;
}
void f_fun(double *state, double dt, double *out_1092486187386673674) {
out_1092486187386673674[0] = state[0];
out_1092486187386673674[1] = state[1];
out_1092486187386673674[2] = state[2];
out_1092486187386673674[3] = state[3];
out_1092486187386673674[4] = state[4];
out_1092486187386673674[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_1092486187386673674[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_1092486187386673674[7] = state[7];
out_1092486187386673674[8] = state[8];
void f_fun(double *state, double dt, double *out_5784340983378173671) {
out_5784340983378173671[0] = state[0];
out_5784340983378173671[1] = state[1];
out_5784340983378173671[2] = state[2];
out_5784340983378173671[3] = state[3];
out_5784340983378173671[4] = state[4];
out_5784340983378173671[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_5784340983378173671[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_5784340983378173671[7] = state[7];
out_5784340983378173671[8] = state[8];
}
void F_fun(double *state, double dt, double *out_7989567927593446774) {
out_7989567927593446774[0] = 1;
out_7989567927593446774[1] = 0;
out_7989567927593446774[2] = 0;
out_7989567927593446774[3] = 0;
out_7989567927593446774[4] = 0;
out_7989567927593446774[5] = 0;
out_7989567927593446774[6] = 0;
out_7989567927593446774[7] = 0;
out_7989567927593446774[8] = 0;
out_7989567927593446774[9] = 0;
out_7989567927593446774[10] = 1;
out_7989567927593446774[11] = 0;
out_7989567927593446774[12] = 0;
out_7989567927593446774[13] = 0;
out_7989567927593446774[14] = 0;
out_7989567927593446774[15] = 0;
out_7989567927593446774[16] = 0;
out_7989567927593446774[17] = 0;
out_7989567927593446774[18] = 0;
out_7989567927593446774[19] = 0;
out_7989567927593446774[20] = 1;
out_7989567927593446774[21] = 0;
out_7989567927593446774[22] = 0;
out_7989567927593446774[23] = 0;
out_7989567927593446774[24] = 0;
out_7989567927593446774[25] = 0;
out_7989567927593446774[26] = 0;
out_7989567927593446774[27] = 0;
out_7989567927593446774[28] = 0;
out_7989567927593446774[29] = 0;
out_7989567927593446774[30] = 1;
out_7989567927593446774[31] = 0;
out_7989567927593446774[32] = 0;
out_7989567927593446774[33] = 0;
out_7989567927593446774[34] = 0;
out_7989567927593446774[35] = 0;
out_7989567927593446774[36] = 0;
out_7989567927593446774[37] = 0;
out_7989567927593446774[38] = 0;
out_7989567927593446774[39] = 0;
out_7989567927593446774[40] = 1;
out_7989567927593446774[41] = 0;
out_7989567927593446774[42] = 0;
out_7989567927593446774[43] = 0;
out_7989567927593446774[44] = 0;
out_7989567927593446774[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_7989567927593446774[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_7989567927593446774[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_7989567927593446774[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_7989567927593446774[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_7989567927593446774[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_7989567927593446774[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_7989567927593446774[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_7989567927593446774[53] = -9.8000000000000007*dt;
out_7989567927593446774[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_7989567927593446774[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_7989567927593446774[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7989567927593446774[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7989567927593446774[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_7989567927593446774[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_7989567927593446774[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_7989567927593446774[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_7989567927593446774[62] = 0;
out_7989567927593446774[63] = 0;
out_7989567927593446774[64] = 0;
out_7989567927593446774[65] = 0;
out_7989567927593446774[66] = 0;
out_7989567927593446774[67] = 0;
out_7989567927593446774[68] = 0;
out_7989567927593446774[69] = 0;
out_7989567927593446774[70] = 1;
out_7989567927593446774[71] = 0;
out_7989567927593446774[72] = 0;
out_7989567927593446774[73] = 0;
out_7989567927593446774[74] = 0;
out_7989567927593446774[75] = 0;
out_7989567927593446774[76] = 0;
out_7989567927593446774[77] = 0;
out_7989567927593446774[78] = 0;
out_7989567927593446774[79] = 0;
out_7989567927593446774[80] = 1;
void F_fun(double *state, double dt, double *out_3386400791859586202) {
out_3386400791859586202[0] = 1;
out_3386400791859586202[1] = 0;
out_3386400791859586202[2] = 0;
out_3386400791859586202[3] = 0;
out_3386400791859586202[4] = 0;
out_3386400791859586202[5] = 0;
out_3386400791859586202[6] = 0;
out_3386400791859586202[7] = 0;
out_3386400791859586202[8] = 0;
out_3386400791859586202[9] = 0;
out_3386400791859586202[10] = 1;
out_3386400791859586202[11] = 0;
out_3386400791859586202[12] = 0;
out_3386400791859586202[13] = 0;
out_3386400791859586202[14] = 0;
out_3386400791859586202[15] = 0;
out_3386400791859586202[16] = 0;
out_3386400791859586202[17] = 0;
out_3386400791859586202[18] = 0;
out_3386400791859586202[19] = 0;
out_3386400791859586202[20] = 1;
out_3386400791859586202[21] = 0;
out_3386400791859586202[22] = 0;
out_3386400791859586202[23] = 0;
out_3386400791859586202[24] = 0;
out_3386400791859586202[25] = 0;
out_3386400791859586202[26] = 0;
out_3386400791859586202[27] = 0;
out_3386400791859586202[28] = 0;
out_3386400791859586202[29] = 0;
out_3386400791859586202[30] = 1;
out_3386400791859586202[31] = 0;
out_3386400791859586202[32] = 0;
out_3386400791859586202[33] = 0;
out_3386400791859586202[34] = 0;
out_3386400791859586202[35] = 0;
out_3386400791859586202[36] = 0;
out_3386400791859586202[37] = 0;
out_3386400791859586202[38] = 0;
out_3386400791859586202[39] = 0;
out_3386400791859586202[40] = 1;
out_3386400791859586202[41] = 0;
out_3386400791859586202[42] = 0;
out_3386400791859586202[43] = 0;
out_3386400791859586202[44] = 0;
out_3386400791859586202[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_3386400791859586202[46] = -dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(mass*pow(state[1], 2));
out_3386400791859586202[47] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_3386400791859586202[48] = -dt*stiffness_front*state[0]/(mass*state[1]);
out_3386400791859586202[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_3386400791859586202[50] = dt*(-stiffness_front*state[0] - stiffness_rear*state[0])/(mass*state[4]) + 1;
out_3386400791859586202[51] = dt*(-state[4] + (-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(mass*state[4]));
out_3386400791859586202[52] = dt*stiffness_front*state[0]/(mass*state[1]);
out_3386400791859586202[53] = -9.8000000000000007*dt;
out_3386400791859586202[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_3386400791859586202[55] = -center_to_front*dt*stiffness_front*(-state[2] - state[3] + state[7])*state[0]/(rotational_inertia*pow(state[1], 2));
out_3386400791859586202[56] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3386400791859586202[57] = -center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3386400791859586202[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_3386400791859586202[59] = dt*(-center_to_front*stiffness_front*state[0] + center_to_rear*stiffness_rear*state[0])/(rotational_inertia*state[4]);
out_3386400791859586202[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_3386400791859586202[61] = center_to_front*dt*stiffness_front*state[0]/(rotational_inertia*state[1]);
out_3386400791859586202[62] = 0;
out_3386400791859586202[63] = 0;
out_3386400791859586202[64] = 0;
out_3386400791859586202[65] = 0;
out_3386400791859586202[66] = 0;
out_3386400791859586202[67] = 0;
out_3386400791859586202[68] = 0;
out_3386400791859586202[69] = 0;
out_3386400791859586202[70] = 1;
out_3386400791859586202[71] = 0;
out_3386400791859586202[72] = 0;
out_3386400791859586202[73] = 0;
out_3386400791859586202[74] = 0;
out_3386400791859586202[75] = 0;
out_3386400791859586202[76] = 0;
out_3386400791859586202[77] = 0;
out_3386400791859586202[78] = 0;
out_3386400791859586202[79] = 0;
out_3386400791859586202[80] = 1;
}
void h_25(double *state, double *unused, double *out_1411798654681004528) {
out_1411798654681004528[0] = state[6];
void h_25(double *state, double *unused, double *out_7212104341795181307) {
out_7212104341795181307[0] = state[6];
}
void H_25(double *state, double *unused, double *out_7474154507154927049) {
out_7474154507154927049[0] = 0;
out_7474154507154927049[1] = 0;
out_7474154507154927049[2] = 0;
out_7474154507154927049[3] = 0;
out_7474154507154927049[4] = 0;
out_7474154507154927049[5] = 0;
out_7474154507154927049[6] = 1;
out_7474154507154927049[7] = 0;
out_7474154507154927049[8] = 0;
void H_25(double *state, double *unused, double *out_7155521575935903180) {
out_7155521575935903180[0] = 0;
out_7155521575935903180[1] = 0;
out_7155521575935903180[2] = 0;
out_7155521575935903180[3] = 0;
out_7155521575935903180[4] = 0;
out_7155521575935903180[5] = 0;
out_7155521575935903180[6] = 1;
out_7155521575935903180[7] = 0;
out_7155521575935903180[8] = 0;
}
void h_24(double *state, double *unused, double *out_7765735534137007266) {
out_7765735534137007266[0] = state[4];
out_7765735534137007266[1] = state[5];
void h_24(double *state, double *unused, double *out_8877922091574990347) {
out_8877922091574990347[0] = state[4];
out_8877922091574990347[1] = state[5];
}
void H_24(double *state, double *unused, double *out_9161970943024031240) {
out_9161970943024031240[0] = 0;
out_9161970943024031240[1] = 0;
out_9161970943024031240[2] = 0;
out_9161970943024031240[3] = 0;
out_9161970943024031240[4] = 1;
out_9161970943024031240[5] = 0;
out_9161970943024031240[6] = 0;
out_9161970943024031240[7] = 0;
out_9161970943024031240[8] = 0;
out_9161970943024031240[9] = 0;
out_9161970943024031240[10] = 0;
out_9161970943024031240[11] = 0;
out_9161970943024031240[12] = 0;
out_9161970943024031240[13] = 0;
out_9161970943024031240[14] = 1;
out_9161970943024031240[15] = 0;
out_9161970943024031240[16] = 0;
out_9161970943024031240[17] = 0;
void H_24(double *state, double *unused, double *out_4978307152328753207) {
out_4978307152328753207[0] = 0;
out_4978307152328753207[1] = 0;
out_4978307152328753207[2] = 0;
out_4978307152328753207[3] = 0;
out_4978307152328753207[4] = 1;
out_4978307152328753207[5] = 0;
out_4978307152328753207[6] = 0;
out_4978307152328753207[7] = 0;
out_4978307152328753207[8] = 0;
out_4978307152328753207[9] = 0;
out_4978307152328753207[10] = 0;
out_4978307152328753207[11] = 0;
out_4978307152328753207[12] = 0;
out_4978307152328753207[13] = 0;
out_4978307152328753207[14] = 1;
out_4978307152328753207[15] = 0;
out_4978307152328753207[16] = 0;
out_4978307152328753207[17] = 0;
}
void h_30(double *state, double *unused, double *out_1136604592396498639) {
out_1136604592396498639[0] = state[4];
void h_30(double *state, double *unused, double *out_5761472949166298140) {
out_5761472949166298140[0] = state[4];
}
void H_30(double *state, double *unused, double *out_8454256608047375940) {
out_8454256608047375940[0] = 0;
out_8454256608047375940[1] = 0;
out_8454256608047375940[2] = 0;
out_8454256608047375940[3] = 0;
out_8454256608047375940[4] = 1;
out_8454256608047375940[5] = 0;
out_8454256608047375940[6] = 0;
out_8454256608047375940[7] = 0;
out_8454256608047375940[8] = 0;
void H_30(double *state, double *unused, double *out_6763526167646040238) {
out_6763526167646040238[0] = 0;
out_6763526167646040238[1] = 0;
out_6763526167646040238[2] = 0;
out_6763526167646040238[3] = 0;
out_6763526167646040238[4] = 1;
out_6763526167646040238[5] = 0;
out_6763526167646040238[6] = 0;
out_6763526167646040238[7] = 0;
out_6763526167646040238[8] = 0;
}
void h_26(double *state, double *unused, double *out_5262436925017350507) {
out_5262436925017350507[0] = state[7];
void h_26(double *state, double *unused, double *out_6429446402584206222) {
out_6429446402584206222[0] = state[7];
}
void H_26(double *state, double *unused, double *out_3732651188280870825) {
out_3732651188280870825[0] = 0;
out_3732651188280870825[1] = 0;
out_3732651188280870825[2] = 0;
out_3732651188280870825[3] = 0;
out_3732651188280870825[4] = 0;
out_3732651188280870825[5] = 0;
out_3732651188280870825[6] = 0;
out_3732651188280870825[7] = 1;
out_3732651188280870825[8] = 0;
void H_26(double *state, double *unused, double *out_7549719178899592212) {
out_7549719178899592212[0] = 0;
out_7549719178899592212[1] = 0;
out_7549719178899592212[2] = 0;
out_7549719178899592212[3] = 0;
out_7549719178899592212[4] = 0;
out_7549719178899592212[5] = 0;
out_7549719178899592212[6] = 0;
out_7549719178899592212[7] = 1;
out_7549719178899592212[8] = 0;
}
void h_27(double *state, double *unused, double *out_2355308507582666963) {
out_2355308507582666963[0] = state[3];
void h_27(double *state, double *unused, double *out_4399552238525327924) {
out_4399552238525327924[0] = state[3];
}
void H_27(double *state, double *unused, double *out_7817724153861750765) {
out_7817724153861750765[0] = 0;
out_7817724153861750765[1] = 0;
out_7817724153861750765[2] = 0;
out_7817724153861750765[3] = 1;
out_7817724153861750765[4] = 0;
out_7817724153861750765[5] = 0;
out_7817724153861750765[6] = 0;
out_7817724153861750765[7] = 0;
out_7817724153861750765[8] = 0;
void H_27(double *state, double *unused, double *out_4588762855845615327) {
out_4588762855845615327[0] = 0;
out_4588762855845615327[1] = 0;
out_4588762855845615327[2] = 0;
out_4588762855845615327[3] = 1;
out_4588762855845615327[4] = 0;
out_4588762855845615327[5] = 0;
out_4588762855845615327[6] = 0;
out_4588762855845615327[7] = 0;
out_4588762855845615327[8] = 0;
}
void h_29(double *state, double *unused, double *out_4173390643840831324) {
out_4173390643840831324[0] = state[1];
void h_29(double *state, double *unused, double *out_7683597856882407831) {
out_7683597856882407831[0] = state[1];
}
void H_29(double *state, double *unused, double *out_7944025263732983756) {
out_7944025263732983756[0] = 0;
out_7944025263732983756[1] = 1;
out_7944025263732983756[2] = 0;
out_7944025263732983756[3] = 0;
out_7944025263732983756[4] = 0;
out_7944025263732983756[5] = 0;
out_7944025263732983756[6] = 0;
out_7944025263732983756[7] = 0;
out_7944025263732983756[8] = 0;
void H_29(double *state, double *unused, double *out_7273757511960432422) {
out_7273757511960432422[0] = 0;
out_7273757511960432422[1] = 1;
out_7273757511960432422[2] = 0;
out_7273757511960432422[3] = 0;
out_7273757511960432422[4] = 0;
out_7273757511960432422[5] = 0;
out_7273757511960432422[6] = 0;
out_7273757511960432422[7] = 0;
out_7273757511960432422[8] = 0;
}
void h_28(double *state, double *unused, double *out_2646364760078178682) {
out_2646364760078178682[0] = state[0];
void h_28(double *state, double *unused, double *out_2603210465267737855) {
out_2603210465267737855[0] = state[0];
}
void H_28(double *state, double *unused, double *out_5420319792907037286) {
out_5420319792907037286[0] = 1;
out_5420319792907037286[1] = 0;
out_5420319792907037286[2] = 0;
out_5420319792907037286[3] = 0;
out_5420319792907037286[4] = 0;
out_5420319792907037286[5] = 0;
out_5420319792907037286[6] = 0;
out_5420319792907037286[7] = 0;
out_5420319792907037286[8] = 0;
void H_28(double *state, double *unused, double *out_9209356290183792943) {
out_9209356290183792943[0] = 1;
out_9209356290183792943[1] = 0;
out_9209356290183792943[2] = 0;
out_9209356290183792943[3] = 0;
out_9209356290183792943[4] = 0;
out_9209356290183792943[5] = 0;
out_9209356290183792943[6] = 0;
out_9209356290183792943[7] = 0;
out_9209356290183792943[8] = 0;
}
void h_31(double *state, double *unused, double *out_7228078822037537356) {
out_7228078822037537356[0] = state[8];
void h_31(double *state, double *unused, double *out_4463804505564019373) {
out_4463804505564019373[0] = state[8];
}
void H_31(double *state, double *unused, double *out_3106443086047519349) {
out_3106443086047519349[0] = 0;
out_3106443086047519349[1] = 0;
out_3106443086047519349[2] = 0;
out_3106443086047519349[3] = 0;
out_3106443086047519349[4] = 0;
out_3106443086047519349[5] = 0;
out_3106443086047519349[6] = 0;
out_3106443086047519349[7] = 0;
out_3106443086047519349[8] = 1;
void H_31(double *state, double *unused, double *out_6923511076666240736) {
out_6923511076666240736[0] = 0;
out_6923511076666240736[1] = 0;
out_6923511076666240736[2] = 0;
out_6923511076666240736[3] = 0;
out_6923511076666240736[4] = 0;
out_6923511076666240736[5] = 0;
out_6923511076666240736[6] = 0;
out_6923511076666240736[7] = 0;
out_6923511076666240736[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_5337520902682181745) {
err_fun(nom_x, delta_x, out_5337520902682181745);
void car_err_fun(double *nom_x, double *delta_x, double *out_7890812005855138291) {
err_fun(nom_x, delta_x, out_7890812005855138291);
}
void car_inv_err_fun(double *nom_x, double *true_x, double *out_8828680484256532384) {
inv_err_fun(nom_x, true_x, out_8828680484256532384);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1799861052992404131) {
inv_err_fun(nom_x, true_x, out_1799861052992404131);
}
void car_H_mod_fun(double *state, double *out_5754598514978375131) {
H_mod_fun(state, out_5754598514978375131);
void car_H_mod_fun(double *state, double *out_3019605320337164716) {
H_mod_fun(state, out_3019605320337164716);
}
void car_f_fun(double *state, double dt, double *out_1092486187386673674) {
f_fun(state, dt, out_1092486187386673674);
void car_f_fun(double *state, double dt, double *out_5784340983378173671) {
f_fun(state, dt, out_5784340983378173671);
}
void car_F_fun(double *state, double dt, double *out_7989567927593446774) {
F_fun(state, dt, out_7989567927593446774);
void car_F_fun(double *state, double dt, double *out_3386400791859586202) {
F_fun(state, dt, out_3386400791859586202);
}
void car_h_25(double *state, double *unused, double *out_1411798654681004528) {
h_25(state, unused, out_1411798654681004528);
void car_h_25(double *state, double *unused, double *out_7212104341795181307) {
h_25(state, unused, out_7212104341795181307);
}
void car_H_25(double *state, double *unused, double *out_7474154507154927049) {
H_25(state, unused, out_7474154507154927049);
void car_H_25(double *state, double *unused, double *out_7155521575935903180) {
H_25(state, unused, out_7155521575935903180);
}
void car_h_24(double *state, double *unused, double *out_7765735534137007266) {
h_24(state, unused, out_7765735534137007266);
void car_h_24(double *state, double *unused, double *out_8877922091574990347) {
h_24(state, unused, out_8877922091574990347);
}
void car_H_24(double *state, double *unused, double *out_9161970943024031240) {
H_24(state, unused, out_9161970943024031240);
void car_H_24(double *state, double *unused, double *out_4978307152328753207) {
H_24(state, unused, out_4978307152328753207);
}
void car_h_30(double *state, double *unused, double *out_1136604592396498639) {
h_30(state, unused, out_1136604592396498639);
void car_h_30(double *state, double *unused, double *out_5761472949166298140) {
h_30(state, unused, out_5761472949166298140);
}
void car_H_30(double *state, double *unused, double *out_8454256608047375940) {
H_30(state, unused, out_8454256608047375940);
void car_H_30(double *state, double *unused, double *out_6763526167646040238) {
H_30(state, unused, out_6763526167646040238);
}
void car_h_26(double *state, double *unused, double *out_5262436925017350507) {
h_26(state, unused, out_5262436925017350507);
void car_h_26(double *state, double *unused, double *out_6429446402584206222) {
h_26(state, unused, out_6429446402584206222);
}
void car_H_26(double *state, double *unused, double *out_3732651188280870825) {
H_26(state, unused, out_3732651188280870825);
void car_H_26(double *state, double *unused, double *out_7549719178899592212) {
H_26(state, unused, out_7549719178899592212);
}
void car_h_27(double *state, double *unused, double *out_2355308507582666963) {
h_27(state, unused, out_2355308507582666963);
void car_h_27(double *state, double *unused, double *out_4399552238525327924) {
h_27(state, unused, out_4399552238525327924);
}
void car_H_27(double *state, double *unused, double *out_7817724153861750765) {
H_27(state, unused, out_7817724153861750765);
void car_H_27(double *state, double *unused, double *out_4588762855845615327) {
H_27(state, unused, out_4588762855845615327);
}
void car_h_29(double *state, double *unused, double *out_4173390643840831324) {
h_29(state, unused, out_4173390643840831324);
void car_h_29(double *state, double *unused, double *out_7683597856882407831) {
h_29(state, unused, out_7683597856882407831);
}
void car_H_29(double *state, double *unused, double *out_7944025263732983756) {
H_29(state, unused, out_7944025263732983756);
void car_H_29(double *state, double *unused, double *out_7273757511960432422) {
H_29(state, unused, out_7273757511960432422);
}
void car_h_28(double *state, double *unused, double *out_2646364760078178682) {
h_28(state, unused, out_2646364760078178682);
void car_h_28(double *state, double *unused, double *out_2603210465267737855) {
h_28(state, unused, out_2603210465267737855);
}
void car_H_28(double *state, double *unused, double *out_5420319792907037286) {
H_28(state, unused, out_5420319792907037286);
void car_H_28(double *state, double *unused, double *out_9209356290183792943) {
H_28(state, unused, out_9209356290183792943);
}
void car_h_31(double *state, double *unused, double *out_7228078822037537356) {
h_31(state, unused, out_7228078822037537356);
void car_h_31(double *state, double *unused, double *out_4463804505564019373) {
h_31(state, unused, out_4463804505564019373);
}
void car_H_31(double *state, double *unused, double *out_3106443086047519349) {
H_31(state, unused, out_3106443086047519349);
void car_H_31(double *state, double *unused, double *out_6923511076666240736) {
H_31(state, unused, out_6923511076666240736);
}
void car_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
@@ -658,4 +658,4 @@ const EKF car = {
},
};
ekf_init(car);
ekf_lib_init(car)
+22 -22
View File
@@ -1,5 +1,5 @@
#pragma once
#include "rednose/helpers/common_ekf.h"
#include "rednose/helpers/ekf.h"
extern "C" {
void car_update_25(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void car_update_24(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
@@ -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_5337520902682181745);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_8828680484256532384);
void car_H_mod_fun(double *state, double *out_5754598514978375131);
void car_f_fun(double *state, double dt, double *out_1092486187386673674);
void car_F_fun(double *state, double dt, double *out_7989567927593446774);
void car_h_25(double *state, double *unused, double *out_1411798654681004528);
void car_H_25(double *state, double *unused, double *out_7474154507154927049);
void car_h_24(double *state, double *unused, double *out_7765735534137007266);
void car_H_24(double *state, double *unused, double *out_9161970943024031240);
void car_h_30(double *state, double *unused, double *out_1136604592396498639);
void car_H_30(double *state, double *unused, double *out_8454256608047375940);
void car_h_26(double *state, double *unused, double *out_5262436925017350507);
void car_H_26(double *state, double *unused, double *out_3732651188280870825);
void car_h_27(double *state, double *unused, double *out_2355308507582666963);
void car_H_27(double *state, double *unused, double *out_7817724153861750765);
void car_h_29(double *state, double *unused, double *out_4173390643840831324);
void car_H_29(double *state, double *unused, double *out_7944025263732983756);
void car_h_28(double *state, double *unused, double *out_2646364760078178682);
void car_H_28(double *state, double *unused, double *out_5420319792907037286);
void car_h_31(double *state, double *unused, double *out_7228078822037537356);
void car_H_31(double *state, double *unused, double *out_3106443086047519349);
void car_err_fun(double *nom_x, double *delta_x, double *out_7890812005855138291);
void car_inv_err_fun(double *nom_x, double *true_x, double *out_1799861052992404131);
void car_H_mod_fun(double *state, double *out_3019605320337164716);
void car_f_fun(double *state, double dt, double *out_5784340983378173671);
void car_F_fun(double *state, double dt, double *out_3386400791859586202);
void car_h_25(double *state, double *unused, double *out_7212104341795181307);
void car_H_25(double *state, double *unused, double *out_7155521575935903180);
void car_h_24(double *state, double *unused, double *out_8877922091574990347);
void car_H_24(double *state, double *unused, double *out_4978307152328753207);
void car_h_30(double *state, double *unused, double *out_5761472949166298140);
void car_H_30(double *state, double *unused, double *out_6763526167646040238);
void car_h_26(double *state, double *unused, double *out_6429446402584206222);
void car_H_26(double *state, double *unused, double *out_7549719178899592212);
void car_h_27(double *state, double *unused, double *out_4399552238525327924);
void car_H_27(double *state, double *unused, double *out_4588762855845615327);
void car_h_29(double *state, double *unused, double *out_7683597856882407831);
void car_H_29(double *state, double *unused, double *out_7273757511960432422);
void car_h_28(double *state, double *unused, double *out_2603210465267737855);
void car_H_28(double *state, double *unused, double *out_9209356290183792943);
void car_h_31(double *state, double *unused, double *out_4463804505564019373);
void car_H_31(double *state, double *unused, double *out_6923511076666240736);
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);
@@ -1,589 +0,0 @@
#include "gnss.h"
namespace {
#define DIM 11
#define EDIM 11
#define MEDIM 11
typedef void (*Hfun)(double *, double *, double *);
const static double MAHA_THRESH_6 = 3.8414588206941227;
const static double MAHA_THRESH_20 = 3.8414588206941227;
const static double MAHA_THRESH_7 = 3.8414588206941227;
const static double MAHA_THRESH_21 = 3.8414588206941227;
/******************************************************************************
* Code generated with SymPy 1.12 *
* *
* See http://www.sympy.org/ for more information. *
* *
* This file is part of 'ekf' *
******************************************************************************/
void err_fun(double *nom_x, double *delta_x, double *out_1298370022994424896) {
out_1298370022994424896[0] = delta_x[0] + nom_x[0];
out_1298370022994424896[1] = delta_x[1] + nom_x[1];
out_1298370022994424896[2] = delta_x[2] + nom_x[2];
out_1298370022994424896[3] = delta_x[3] + nom_x[3];
out_1298370022994424896[4] = delta_x[4] + nom_x[4];
out_1298370022994424896[5] = delta_x[5] + nom_x[5];
out_1298370022994424896[6] = delta_x[6] + nom_x[6];
out_1298370022994424896[7] = delta_x[7] + nom_x[7];
out_1298370022994424896[8] = delta_x[8] + nom_x[8];
out_1298370022994424896[9] = delta_x[9] + nom_x[9];
out_1298370022994424896[10] = delta_x[10] + nom_x[10];
}
void inv_err_fun(double *nom_x, double *true_x, double *out_1216411467074742856) {
out_1216411467074742856[0] = -nom_x[0] + true_x[0];
out_1216411467074742856[1] = -nom_x[1] + true_x[1];
out_1216411467074742856[2] = -nom_x[2] + true_x[2];
out_1216411467074742856[3] = -nom_x[3] + true_x[3];
out_1216411467074742856[4] = -nom_x[4] + true_x[4];
out_1216411467074742856[5] = -nom_x[5] + true_x[5];
out_1216411467074742856[6] = -nom_x[6] + true_x[6];
out_1216411467074742856[7] = -nom_x[7] + true_x[7];
out_1216411467074742856[8] = -nom_x[8] + true_x[8];
out_1216411467074742856[9] = -nom_x[9] + true_x[9];
out_1216411467074742856[10] = -nom_x[10] + true_x[10];
}
void H_mod_fun(double *state, double *out_5581863977132795483) {
out_5581863977132795483[0] = 1.0;
out_5581863977132795483[1] = 0;
out_5581863977132795483[2] = 0;
out_5581863977132795483[3] = 0;
out_5581863977132795483[4] = 0;
out_5581863977132795483[5] = 0;
out_5581863977132795483[6] = 0;
out_5581863977132795483[7] = 0;
out_5581863977132795483[8] = 0;
out_5581863977132795483[9] = 0;
out_5581863977132795483[10] = 0;
out_5581863977132795483[11] = 0;
out_5581863977132795483[12] = 1.0;
out_5581863977132795483[13] = 0;
out_5581863977132795483[14] = 0;
out_5581863977132795483[15] = 0;
out_5581863977132795483[16] = 0;
out_5581863977132795483[17] = 0;
out_5581863977132795483[18] = 0;
out_5581863977132795483[19] = 0;
out_5581863977132795483[20] = 0;
out_5581863977132795483[21] = 0;
out_5581863977132795483[22] = 0;
out_5581863977132795483[23] = 0;
out_5581863977132795483[24] = 1.0;
out_5581863977132795483[25] = 0;
out_5581863977132795483[26] = 0;
out_5581863977132795483[27] = 0;
out_5581863977132795483[28] = 0;
out_5581863977132795483[29] = 0;
out_5581863977132795483[30] = 0;
out_5581863977132795483[31] = 0;
out_5581863977132795483[32] = 0;
out_5581863977132795483[33] = 0;
out_5581863977132795483[34] = 0;
out_5581863977132795483[35] = 0;
out_5581863977132795483[36] = 1.0;
out_5581863977132795483[37] = 0;
out_5581863977132795483[38] = 0;
out_5581863977132795483[39] = 0;
out_5581863977132795483[40] = 0;
out_5581863977132795483[41] = 0;
out_5581863977132795483[42] = 0;
out_5581863977132795483[43] = 0;
out_5581863977132795483[44] = 0;
out_5581863977132795483[45] = 0;
out_5581863977132795483[46] = 0;
out_5581863977132795483[47] = 0;
out_5581863977132795483[48] = 1.0;
out_5581863977132795483[49] = 0;
out_5581863977132795483[50] = 0;
out_5581863977132795483[51] = 0;
out_5581863977132795483[52] = 0;
out_5581863977132795483[53] = 0;
out_5581863977132795483[54] = 0;
out_5581863977132795483[55] = 0;
out_5581863977132795483[56] = 0;
out_5581863977132795483[57] = 0;
out_5581863977132795483[58] = 0;
out_5581863977132795483[59] = 0;
out_5581863977132795483[60] = 1.0;
out_5581863977132795483[61] = 0;
out_5581863977132795483[62] = 0;
out_5581863977132795483[63] = 0;
out_5581863977132795483[64] = 0;
out_5581863977132795483[65] = 0;
out_5581863977132795483[66] = 0;
out_5581863977132795483[67] = 0;
out_5581863977132795483[68] = 0;
out_5581863977132795483[69] = 0;
out_5581863977132795483[70] = 0;
out_5581863977132795483[71] = 0;
out_5581863977132795483[72] = 1.0;
out_5581863977132795483[73] = 0;
out_5581863977132795483[74] = 0;
out_5581863977132795483[75] = 0;
out_5581863977132795483[76] = 0;
out_5581863977132795483[77] = 0;
out_5581863977132795483[78] = 0;
out_5581863977132795483[79] = 0;
out_5581863977132795483[80] = 0;
out_5581863977132795483[81] = 0;
out_5581863977132795483[82] = 0;
out_5581863977132795483[83] = 0;
out_5581863977132795483[84] = 1.0;
out_5581863977132795483[85] = 0;
out_5581863977132795483[86] = 0;
out_5581863977132795483[87] = 0;
out_5581863977132795483[88] = 0;
out_5581863977132795483[89] = 0;
out_5581863977132795483[90] = 0;
out_5581863977132795483[91] = 0;
out_5581863977132795483[92] = 0;
out_5581863977132795483[93] = 0;
out_5581863977132795483[94] = 0;
out_5581863977132795483[95] = 0;
out_5581863977132795483[96] = 1.0;
out_5581863977132795483[97] = 0;
out_5581863977132795483[98] = 0;
out_5581863977132795483[99] = 0;
out_5581863977132795483[100] = 0;
out_5581863977132795483[101] = 0;
out_5581863977132795483[102] = 0;
out_5581863977132795483[103] = 0;
out_5581863977132795483[104] = 0;
out_5581863977132795483[105] = 0;
out_5581863977132795483[106] = 0;
out_5581863977132795483[107] = 0;
out_5581863977132795483[108] = 1.0;
out_5581863977132795483[109] = 0;
out_5581863977132795483[110] = 0;
out_5581863977132795483[111] = 0;
out_5581863977132795483[112] = 0;
out_5581863977132795483[113] = 0;
out_5581863977132795483[114] = 0;
out_5581863977132795483[115] = 0;
out_5581863977132795483[116] = 0;
out_5581863977132795483[117] = 0;
out_5581863977132795483[118] = 0;
out_5581863977132795483[119] = 0;
out_5581863977132795483[120] = 1.0;
}
void f_fun(double *state, double dt, double *out_6423546374911735369) {
out_6423546374911735369[0] = dt*state[3] + state[0];
out_6423546374911735369[1] = dt*state[4] + state[1];
out_6423546374911735369[2] = dt*state[5] + state[2];
out_6423546374911735369[3] = state[3];
out_6423546374911735369[4] = state[4];
out_6423546374911735369[5] = state[5];
out_6423546374911735369[6] = dt*state[7] + state[6];
out_6423546374911735369[7] = dt*state[8] + state[7];
out_6423546374911735369[8] = state[8];
out_6423546374911735369[9] = state[9];
out_6423546374911735369[10] = state[10];
}
void F_fun(double *state, double dt, double *out_7437858096387244450) {
out_7437858096387244450[0] = 1;
out_7437858096387244450[1] = 0;
out_7437858096387244450[2] = 0;
out_7437858096387244450[3] = dt;
out_7437858096387244450[4] = 0;
out_7437858096387244450[5] = 0;
out_7437858096387244450[6] = 0;
out_7437858096387244450[7] = 0;
out_7437858096387244450[8] = 0;
out_7437858096387244450[9] = 0;
out_7437858096387244450[10] = 0;
out_7437858096387244450[11] = 0;
out_7437858096387244450[12] = 1;
out_7437858096387244450[13] = 0;
out_7437858096387244450[14] = 0;
out_7437858096387244450[15] = dt;
out_7437858096387244450[16] = 0;
out_7437858096387244450[17] = 0;
out_7437858096387244450[18] = 0;
out_7437858096387244450[19] = 0;
out_7437858096387244450[20] = 0;
out_7437858096387244450[21] = 0;
out_7437858096387244450[22] = 0;
out_7437858096387244450[23] = 0;
out_7437858096387244450[24] = 1;
out_7437858096387244450[25] = 0;
out_7437858096387244450[26] = 0;
out_7437858096387244450[27] = dt;
out_7437858096387244450[28] = 0;
out_7437858096387244450[29] = 0;
out_7437858096387244450[30] = 0;
out_7437858096387244450[31] = 0;
out_7437858096387244450[32] = 0;
out_7437858096387244450[33] = 0;
out_7437858096387244450[34] = 0;
out_7437858096387244450[35] = 0;
out_7437858096387244450[36] = 1;
out_7437858096387244450[37] = 0;
out_7437858096387244450[38] = 0;
out_7437858096387244450[39] = 0;
out_7437858096387244450[40] = 0;
out_7437858096387244450[41] = 0;
out_7437858096387244450[42] = 0;
out_7437858096387244450[43] = 0;
out_7437858096387244450[44] = 0;
out_7437858096387244450[45] = 0;
out_7437858096387244450[46] = 0;
out_7437858096387244450[47] = 0;
out_7437858096387244450[48] = 1;
out_7437858096387244450[49] = 0;
out_7437858096387244450[50] = 0;
out_7437858096387244450[51] = 0;
out_7437858096387244450[52] = 0;
out_7437858096387244450[53] = 0;
out_7437858096387244450[54] = 0;
out_7437858096387244450[55] = 0;
out_7437858096387244450[56] = 0;
out_7437858096387244450[57] = 0;
out_7437858096387244450[58] = 0;
out_7437858096387244450[59] = 0;
out_7437858096387244450[60] = 1;
out_7437858096387244450[61] = 0;
out_7437858096387244450[62] = 0;
out_7437858096387244450[63] = 0;
out_7437858096387244450[64] = 0;
out_7437858096387244450[65] = 0;
out_7437858096387244450[66] = 0;
out_7437858096387244450[67] = 0;
out_7437858096387244450[68] = 0;
out_7437858096387244450[69] = 0;
out_7437858096387244450[70] = 0;
out_7437858096387244450[71] = 0;
out_7437858096387244450[72] = 1;
out_7437858096387244450[73] = dt;
out_7437858096387244450[74] = 0;
out_7437858096387244450[75] = 0;
out_7437858096387244450[76] = 0;
out_7437858096387244450[77] = 0;
out_7437858096387244450[78] = 0;
out_7437858096387244450[79] = 0;
out_7437858096387244450[80] = 0;
out_7437858096387244450[81] = 0;
out_7437858096387244450[82] = 0;
out_7437858096387244450[83] = 0;
out_7437858096387244450[84] = 1;
out_7437858096387244450[85] = dt;
out_7437858096387244450[86] = 0;
out_7437858096387244450[87] = 0;
out_7437858096387244450[88] = 0;
out_7437858096387244450[89] = 0;
out_7437858096387244450[90] = 0;
out_7437858096387244450[91] = 0;
out_7437858096387244450[92] = 0;
out_7437858096387244450[93] = 0;
out_7437858096387244450[94] = 0;
out_7437858096387244450[95] = 0;
out_7437858096387244450[96] = 1;
out_7437858096387244450[97] = 0;
out_7437858096387244450[98] = 0;
out_7437858096387244450[99] = 0;
out_7437858096387244450[100] = 0;
out_7437858096387244450[101] = 0;
out_7437858096387244450[102] = 0;
out_7437858096387244450[103] = 0;
out_7437858096387244450[104] = 0;
out_7437858096387244450[105] = 0;
out_7437858096387244450[106] = 0;
out_7437858096387244450[107] = 0;
out_7437858096387244450[108] = 1;
out_7437858096387244450[109] = 0;
out_7437858096387244450[110] = 0;
out_7437858096387244450[111] = 0;
out_7437858096387244450[112] = 0;
out_7437858096387244450[113] = 0;
out_7437858096387244450[114] = 0;
out_7437858096387244450[115] = 0;
out_7437858096387244450[116] = 0;
out_7437858096387244450[117] = 0;
out_7437858096387244450[118] = 0;
out_7437858096387244450[119] = 0;
out_7437858096387244450[120] = 1;
}
void h_6(double *state, double *sat_pos, double *out_8168523164697780971) {
out_8168523164697780971[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + state[6];
}
void H_6(double *state, double *sat_pos, double *out_6215961085732895038) {
out_6215961085732895038[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6215961085732895038[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6215961085732895038[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6215961085732895038[3] = 0;
out_6215961085732895038[4] = 0;
out_6215961085732895038[5] = 0;
out_6215961085732895038[6] = 1;
out_6215961085732895038[7] = 0;
out_6215961085732895038[8] = 0;
out_6215961085732895038[9] = 0;
out_6215961085732895038[10] = 0;
}
void h_20(double *state, double *sat_pos, double *out_2583752503617678104) {
out_2583752503617678104[0] = sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2)) + sat_pos[3]*state[10] + state[6] + state[9];
}
void H_20(double *state, double *sat_pos, double *out_6777344250897440240) {
out_6777344250897440240[0] = (-sat_pos[0] + state[0])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6777344250897440240[1] = (-sat_pos[1] + state[1])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6777344250897440240[2] = (-sat_pos[2] + state[2])/sqrt(pow(-sat_pos[0] + state[0], 2) + pow(-sat_pos[1] + state[1], 2) + pow(-sat_pos[2] + state[2], 2));
out_6777344250897440240[3] = 0;
out_6777344250897440240[4] = 0;
out_6777344250897440240[5] = 0;
out_6777344250897440240[6] = 1;
out_6777344250897440240[7] = 0;
out_6777344250897440240[8] = 0;
out_6777344250897440240[9] = 1;
out_6777344250897440240[10] = sat_pos[3];
}
void h_7(double *state, double *sat_pos_vel, double *out_7914792312414388917) {
out_7914792312414388917[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
void H_7(double *state, double *sat_pos_vel, double *out_1169512049399806794) {
out_1169512049399806794[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[6] = 0;
out_1169512049399806794[7] = 1;
out_1169512049399806794[8] = 0;
out_1169512049399806794[9] = 0;
out_1169512049399806794[10] = 0;
}
void h_21(double *state, double *sat_pos_vel, double *out_7914792312414388917) {
out_7914792312414388917[0] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + (sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2)) + state[7];
}
void H_21(double *state, double *sat_pos_vel, double *out_1169512049399806794) {
out_1169512049399806794[0] = pow(sat_pos_vel[0] - state[0], 2)*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[3] - state[3])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[1] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[1] - state[1])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[1] - state[1], 2)*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[4] - state[4])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[2] = (sat_pos_vel[0] - state[0])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[3] - state[3])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + (sat_pos_vel[1] - state[1])*(sat_pos_vel[2] - state[2])*(sat_pos_vel[4] - state[4])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) + pow(sat_pos_vel[2] - state[2], 2)*(sat_pos_vel[5] - state[5])/pow(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2), 3.0/2.0) - (sat_pos_vel[5] - state[5])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[3] = -(sat_pos_vel[0] - state[0])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[4] = -(sat_pos_vel[1] - state[1])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[5] = -(sat_pos_vel[2] - state[2])/sqrt(pow(sat_pos_vel[0] - state[0], 2) + pow(sat_pos_vel[1] - state[1], 2) + pow(sat_pos_vel[2] - state[2], 2));
out_1169512049399806794[6] = 0;
out_1169512049399806794[7] = 1;
out_1169512049399806794[8] = 0;
out_1169512049399806794[9] = 0;
out_1169512049399806794[10] = 0;
}
#include <eigen3/Eigen/Dense>
#include <iostream>
typedef Eigen::Matrix<double, DIM, DIM, Eigen::RowMajor> DDM;
typedef Eigen::Matrix<double, EDIM, EDIM, Eigen::RowMajor> EEM;
typedef Eigen::Matrix<double, DIM, EDIM, Eigen::RowMajor> DEM;
void predict(double *in_x, double *in_P, double *in_Q, double dt) {
typedef Eigen::Matrix<double, MEDIM, MEDIM, Eigen::RowMajor> RRM;
double nx[DIM] = {0};
double in_F[EDIM*EDIM] = {0};
// functions from sympy
f_fun(in_x, dt, nx);
F_fun(in_x, dt, in_F);
EEM F(in_F);
EEM P(in_P);
EEM Q(in_Q);
RRM F_main = F.topLeftCorner(MEDIM, MEDIM);
P.topLeftCorner(MEDIM, MEDIM) = (F_main * P.topLeftCorner(MEDIM, MEDIM)) * F_main.transpose();
P.topRightCorner(MEDIM, EDIM - MEDIM) = F_main * P.topRightCorner(MEDIM, EDIM - MEDIM);
P.bottomLeftCorner(EDIM - MEDIM, MEDIM) = P.bottomLeftCorner(EDIM - MEDIM, MEDIM) * F_main.transpose();
P = P + dt*Q;
// copy out state
memcpy(in_x, nx, DIM * sizeof(double));
memcpy(in_P, P.data(), EDIM * EDIM * sizeof(double));
}
// note: extra_args dim only correct when null space projecting
// otherwise 1
template <int ZDIM, int EADIM, bool MAHA_TEST>
void update(double *in_x, double *in_P, Hfun h_fun, Hfun H_fun, Hfun Hea_fun, double *in_z, double *in_R, double *in_ea, double MAHA_THRESHOLD) {
typedef Eigen::Matrix<double, ZDIM, ZDIM, Eigen::RowMajor> ZZM;
typedef Eigen::Matrix<double, ZDIM, DIM, Eigen::RowMajor> ZDM;
typedef Eigen::Matrix<double, Eigen::Dynamic, EDIM, Eigen::RowMajor> XEM;
//typedef Eigen::Matrix<double, EDIM, ZDIM, Eigen::RowMajor> EZM;
typedef Eigen::Matrix<double, Eigen::Dynamic, 1> X1M;
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> XXM;
double in_hx[ZDIM] = {0};
double in_H[ZDIM * DIM] = {0};
double in_H_mod[EDIM * DIM] = {0};
double delta_x[EDIM] = {0};
double x_new[DIM] = {0};
// state x, P
Eigen::Matrix<double, ZDIM, 1> z(in_z);
EEM P(in_P);
ZZM pre_R(in_R);
// functions from sympy
h_fun(in_x, in_ea, in_hx);
H_fun(in_x, in_ea, in_H);
ZDM pre_H(in_H);
// get y (y = z - hx)
Eigen::Matrix<double, ZDIM, 1> pre_y(in_hx); pre_y = z - pre_y;
X1M y; XXM H; XXM R;
if (Hea_fun){
typedef Eigen::Matrix<double, ZDIM, EADIM, Eigen::RowMajor> ZAM;
double in_Hea[ZDIM * EADIM] = {0};
Hea_fun(in_x, in_ea, in_Hea);
ZAM Hea(in_Hea);
XXM A = Hea.transpose().fullPivLu().kernel();
y = A.transpose() * pre_y;
H = A.transpose() * pre_H;
R = A.transpose() * pre_R * A;
} else {
y = pre_y;
H = pre_H;
R = pre_R;
}
// get modified H
H_mod_fun(in_x, in_H_mod);
DEM H_mod(in_H_mod);
XEM H_err = H * H_mod;
// Do mahalobis distance test
if (MAHA_TEST){
XXM a = (H_err * P * H_err.transpose() + R).inverse();
double maha_dist = y.transpose() * a * y;
if (maha_dist > MAHA_THRESHOLD){
R = 1.0e16 * R;
}
}
// Outlier resilient weighting
double weight = 1;//(1.5)/(1 + y.squaredNorm()/R.sum());
// kalman gains and I_KH
XXM S = ((H_err * P) * H_err.transpose()) + R/weight;
XEM KT = S.fullPivLu().solve(H_err * P.transpose());
//EZM K = KT.transpose(); TODO: WHY DOES THIS NOT COMPILE?
//EZM K = S.fullPivLu().solve(H_err * P.transpose()).transpose();
//std::cout << "Here is the matrix rot:\n" << K << std::endl;
EEM I_KH = Eigen::Matrix<double, EDIM, EDIM>::Identity() - (KT.transpose() * H_err);
// update state by injecting dx
Eigen::Matrix<double, EDIM, 1> dx(delta_x);
dx = (KT.transpose() * y);
memcpy(delta_x, dx.data(), EDIM * sizeof(double));
err_fun(in_x, delta_x, x_new);
Eigen::Matrix<double, DIM, 1> x(x_new);
// update cov
P = ((I_KH * P) * I_KH.transpose()) + ((KT.transpose() * R) * KT);
// copy out state
memcpy(in_x, x.data(), DIM * sizeof(double));
memcpy(in_P, P.data(), EDIM * EDIM * sizeof(double));
memcpy(in_z, y.data(), y.rows() * sizeof(double));
}
}
extern "C" {
void gnss_update_6(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_6, H_6, NULL, in_z, in_R, in_ea, MAHA_THRESH_6);
}
void gnss_update_20(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_20, H_20, NULL, in_z, in_R, in_ea, MAHA_THRESH_20);
}
void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_7, H_7, NULL, in_z, in_R, in_ea, MAHA_THRESH_7);
}
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea) {
update<1, 3, 0>(in_x, in_P, h_21, H_21, NULL, in_z, in_R, in_ea, MAHA_THRESH_21);
}
void gnss_err_fun(double *nom_x, double *delta_x, double *out_1298370022994424896) {
err_fun(nom_x, delta_x, out_1298370022994424896);
}
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_1216411467074742856) {
inv_err_fun(nom_x, true_x, out_1216411467074742856);
}
void gnss_H_mod_fun(double *state, double *out_5581863977132795483) {
H_mod_fun(state, out_5581863977132795483);
}
void gnss_f_fun(double *state, double dt, double *out_6423546374911735369) {
f_fun(state, dt, out_6423546374911735369);
}
void gnss_F_fun(double *state, double dt, double *out_7437858096387244450) {
F_fun(state, dt, out_7437858096387244450);
}
void gnss_h_6(double *state, double *sat_pos, double *out_8168523164697780971) {
h_6(state, sat_pos, out_8168523164697780971);
}
void gnss_H_6(double *state, double *sat_pos, double *out_6215961085732895038) {
H_6(state, sat_pos, out_6215961085732895038);
}
void gnss_h_20(double *state, double *sat_pos, double *out_2583752503617678104) {
h_20(state, sat_pos, out_2583752503617678104);
}
void gnss_H_20(double *state, double *sat_pos, double *out_6777344250897440240) {
H_20(state, sat_pos, out_6777344250897440240);
}
void gnss_h_7(double *state, double *sat_pos_vel, double *out_7914792312414388917) {
h_7(state, sat_pos_vel, out_7914792312414388917);
}
void gnss_H_7(double *state, double *sat_pos_vel, double *out_1169512049399806794) {
H_7(state, sat_pos_vel, out_1169512049399806794);
}
void gnss_h_21(double *state, double *sat_pos_vel, double *out_7914792312414388917) {
h_21(state, sat_pos_vel, out_7914792312414388917);
}
void gnss_H_21(double *state, double *sat_pos_vel, double *out_1169512049399806794) {
H_21(state, sat_pos_vel, out_1169512049399806794);
}
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt) {
predict(in_x, in_P, in_Q, dt);
}
}
const EKF gnss = {
.name = "gnss",
.kinds = { 6, 20, 7, 21 },
.feature_kinds = { },
.f_fun = gnss_f_fun,
.F_fun = gnss_F_fun,
.err_fun = gnss_err_fun,
.inv_err_fun = gnss_inv_err_fun,
.H_mod_fun = gnss_H_mod_fun,
.predict = gnss_predict,
.hs = {
{ 6, gnss_h_6 },
{ 20, gnss_h_20 },
{ 7, gnss_h_7 },
{ 21, gnss_h_21 },
},
.Hs = {
{ 6, gnss_H_6 },
{ 20, gnss_H_20 },
{ 7, gnss_H_7 },
{ 21, gnss_H_21 },
},
.updates = {
{ 6, gnss_update_6 },
{ 20, gnss_update_20 },
{ 7, gnss_update_7 },
{ 21, gnss_update_21 },
},
.Hes = {
},
.sets = {
},
.extra_routines = {
},
};
ekf_init(gnss);
@@ -1,22 +0,0 @@
#pragma once
#include "rednose/helpers/common_ekf.h"
extern "C" {
void gnss_update_6(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_20(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_7(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_update_21(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void gnss_err_fun(double *nom_x, double *delta_x, double *out_1298370022994424896);
void gnss_inv_err_fun(double *nom_x, double *true_x, double *out_1216411467074742856);
void gnss_H_mod_fun(double *state, double *out_5581863977132795483);
void gnss_f_fun(double *state, double dt, double *out_6423546374911735369);
void gnss_F_fun(double *state, double dt, double *out_7437858096387244450);
void gnss_h_6(double *state, double *sat_pos, double *out_8168523164697780971);
void gnss_H_6(double *state, double *sat_pos, double *out_6215961085732895038);
void gnss_h_20(double *state, double *sat_pos, double *out_2583752503617678104);
void gnss_H_20(double *state, double *sat_pos, double *out_6777344250897440240);
void gnss_h_7(double *state, double *sat_pos_vel, double *out_7914792312414388917);
void gnss_H_7(double *state, double *sat_pos_vel, double *out_1169512049399806794);
void gnss_h_21(double *state, double *sat_pos_vel, double *out_7914792312414388917);
void gnss_H_21(double *state, double *sat_pos_vel, double *out_1169512049399806794);
void gnss_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
+25 -25
View File
@@ -1,5 +1,5 @@
#pragma once
#include "rednose/helpers/common_ekf.h"
#include "rednose/helpers/ekf.h"
extern "C" {
void live_update_4(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_9(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
@@ -10,29 +10,29 @@ void live_update_32(double *in_x, double *in_P, double *in_z, double *in_R, doub
void live_update_13(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_14(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_update_33(double *in_x, double *in_P, double *in_z, double *in_R, double *in_ea);
void live_H(double *in_vec, double *out_133227908697253646);
void live_err_fun(double *nom_x, double *delta_x, double *out_7956773024485299364);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_2732543202000143924);
void live_H_mod_fun(double *state, double *out_3009125082534637337);
void live_f_fun(double *state, double dt, double *out_4335391440186581522);
void live_F_fun(double *state, double dt, double *out_5664590113989302035);
void live_h_4(double *state, double *unused, double *out_3014692161587012603);
void live_H_4(double *state, double *unused, double *out_5026841573156437834);
void live_h_9(double *state, double *unused, double *out_3562980285330159985);
void live_H_9(double *state, double *unused, double *out_6132683565288666312);
void live_h_10(double *state, double *unused, double *out_535862169176880815);
void live_H_10(double *state, double *unused, double *out_8297258708073091465);
void live_h_12(double *state, double *unused, double *out_925715247818340264);
void live_H_12(double *state, double *unused, double *out_5647940598204031501);
void live_h_35(double *state, double *unused, double *out_9149207542038296554);
void live_H_35(double *state, double *unused, double *out_8393503630529045210);
void live_h_32(double *state, double *unused, double *out_8538571874421941973);
void live_H_32(double *state, double *unused, double *out_5507022207680590714);
void live_h_13(double *state, double *unused, double *out_3046368725689310100);
void live_H_13(double *state, double *unused, double *out_619902790956587499);
void live_h_14(double *state, double *unused, double *out_3562980285330159985);
void live_H_14(double *state, double *unused, double *out_6132683565288666312);
void live_h_33(double *state, double *unused, double *out_6545880632453829262);
void live_H_33(double *state, double *unused, double *out_6902683438541648802);
void live_H(double *in_vec, double *out_3457479244464077531);
void live_err_fun(double *nom_x, double *delta_x, double *out_650718210523216323);
void live_inv_err_fun(double *nom_x, double *true_x, double *out_910473225309207357);
void live_H_mod_fun(double *state, double *out_2181166024205561752);
void live_f_fun(double *state, double dt, double *out_3533239200643131825);
void live_F_fun(double *state, double dt, double *out_5539989427522668852);
void live_h_4(double *state, double *unused, double *out_819859370756235625);
void live_H_4(double *state, double *unused, double *out_2871740975048229748);
void live_h_9(double *state, double *unused, double *out_4802105354618293564);
void live_H_9(double *state, double *unused, double *out_2630551328418639103);
void live_h_10(double *state, double *unused, double *out_7610955400709654716);
void live_H_10(double *state, double *unused, double *out_1974782145108752521);
void live_h_12(double *state, double *unused, double *out_1634941094875625440);
void live_H_12(double *state, double *unused, double *out_2147715432983732047);
void live_h_35(double *state, double *unused, double *out_5460157810480551459);
void live_H_35(double *state, double *unused, double *out_4893278465308745756);
void live_h_32(double *state, double *unused, double *out_5557633069685588267);
void live_H_32(double *state, double *unused, double *out_7752161236193193302);
void live_h_13(double *state, double *unused, double *out_2477464069165319992);
void live_H_13(double *state, double *unused, double *out_8540249629042519317);
void live_h_14(double *state, double *unused, double *out_4802105354618293564);
void live_H_14(double *state, double *unused, double *out_2630551328418639103);
void live_h_33(double *state, double *unused, double *out_327564127954512118);
void live_H_33(double *state, double *unused, double *out_8043835469947603360);
void live_predict(double *in_x, double *in_P, double *in_Q, double dt);
}
@@ -1,19 +0,0 @@
import numpy as np
from laika.raw_gnss import GNSSMeasurement
def parse_prr(m):
sat_pos_vel_i = np.concatenate((m[GNSSMeasurement.SAT_POS],
m[GNSSMeasurement.SAT_VEL]))
R_i = np.atleast_2d(m[GNSSMeasurement.PRR_STD]**2)
z_i = m[GNSSMeasurement.PRR]
return z_i, R_i, sat_pos_vel_i
def parse_pr(m):
pseudorange = m[GNSSMeasurement.PR]
pseudorange_stdev = m[GNSSMeasurement.PR_STD]
sat_pos_freq_i = np.concatenate((m[GNSSMeasurement.SAT_POS],
np.array([m[GNSSMeasurement.GLONASS_FREQ]])))
z_i = np.atleast_1d(pseudorange)
R_i = np.atleast_2d(pseudorange_stdev**2)
return z_i, R_i, sat_pos_freq_i
-190
View File
@@ -1,190 +0,0 @@
#!/usr/bin/env python3
import sys
from typing import List
import numpy as np
from openpilot.selfdrive.locationd.models.constants import ObservationKind
from openpilot.selfdrive.locationd.models.gnss_helpers import parse_pr, parse_prr
if __name__ == '__main__': # Generating sympy
import sympy as sp
from rednose.helpers.ekf_sym import gen_code
else:
from rednose.helpers.ekf_sym_pyx import EKF_sym_pyx
from rednose.helpers.ekf_sym import EKF_sym
class States():
ECEF_POS = slice(0, 3) # x, y and z in ECEF in meters
ECEF_VELOCITY = slice(3, 6)
CLOCK_BIAS = slice(6, 7) # clock bias in light-meters,
CLOCK_DRIFT = slice(7, 8) # clock drift in light-meters/s,
CLOCK_ACCELERATION = slice(8, 9) # clock acceleration in light-meters/s**2
GLONASS_BIAS = slice(9, 10) # clock drift in light-meters/s,
GLONASS_FREQ_SLOPE = slice(10, 11) # GLONASS bias in m expressed as bias + freq_num*freq_slope
class GNSSKalman():
name = 'gnss'
x_initial = np.array([-2712700.6008, -4281600.6679, 3859300.1830,
0, 0, 0,
0, 0, 0,
0, 0])
# state covariance
P_initial = np.diag([1e16, 1e16, 1e16,
10**2, 10**2, 10**2,
1e14, (100)**2, (0.2)**2,
(10)**2, (1)**2])
maha_test_kinds: List[int] = [] # ObservationKind.PSEUDORANGE_RATE, ObservationKind.PSEUDORANGE, ObservationKind.PSEUDORANGE_GLONASS]
@staticmethod
def generate_code(generated_dir):
dim_state = GNSSKalman.x_initial.shape[0]
name = GNSSKalman.name
maha_test_kinds = GNSSKalman.maha_test_kinds
# make functions and jacobians with sympy
# state variables
state_sym = sp.MatrixSymbol('state', dim_state, 1)
state = sp.Matrix(state_sym)
x, y, z = state[0:3, :]
v = state[3:6, :]
vx, vy, vz = v
cb, cd, ca = state[6:9, :]
glonass_bias, glonass_freq_slope = state[9:11, :]
dt = sp.Symbol('dt')
state_dot = sp.Matrix(np.zeros((dim_state, 1)))
state_dot[:3, :] = v
state_dot[6, 0] = cd
state_dot[7, 0] = ca
# Basic descretization, 1st order integrator
# Can be pretty bad if dt is big
f_sym = state + dt * state_dot
#
# Observation functions
#
# extra args
sat_pos_freq_sym = sp.MatrixSymbol('sat_pos', 4, 1)
sat_pos_vel_sym = sp.MatrixSymbol('sat_pos_vel', 6, 1)
# sat_los_sym = sp.MatrixSymbol('sat_los', 3, 1)
# orb_epos_sym = sp.MatrixSymbol('orb_epos_sym', 3, 1)
# expand extra args
sat_x, sat_y, sat_z, glonass_freq = sat_pos_freq_sym
sat_vx, sat_vy, sat_vz = sat_pos_vel_sym[3:]
# los_x, los_y, los_z = sat_los_sym
# orb_x, orb_y, orb_z = orb_epos_sym
h_pseudorange_sym = sp.Matrix([
sp.sqrt(
(x - sat_x)**2 +
(y - sat_y)**2 +
(z - sat_z)**2
) + cb
])
h_pseudorange_glonass_sym = sp.Matrix([
sp.sqrt(
(x - sat_x)**2 +
(y - sat_y)**2 +
(z - sat_z)**2
) + cb + glonass_bias + glonass_freq_slope * glonass_freq
])
los_vector = (sp.Matrix(sat_pos_vel_sym[0:3]) - sp.Matrix([x, y, z]))
los_vector = los_vector / sp.sqrt(los_vector[0]**2 + los_vector[1]**2 + los_vector[2]**2)
h_pseudorange_rate_sym = sp.Matrix([los_vector[0] * (sat_vx - vx) +
los_vector[1] * (sat_vy - vy) +
los_vector[2] * (sat_vz - vz) +
cd])
obs_eqs = [[h_pseudorange_sym, ObservationKind.PSEUDORANGE_GPS, sat_pos_freq_sym],
[h_pseudorange_glonass_sym, ObservationKind.PSEUDORANGE_GLONASS, sat_pos_freq_sym],
[h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GPS, sat_pos_vel_sym],
[h_pseudorange_rate_sym, ObservationKind.PSEUDORANGE_RATE_GLONASS, sat_pos_vel_sym]]
gen_code(generated_dir, name, f_sym, dt, state_sym, obs_eqs, dim_state, dim_state, maha_test_kinds=maha_test_kinds)
def __init__(self, generated_dir, cython=False, erratic_clock=False):
# process noise
clock_error_drift = 100.0 if erratic_clock else 0.1
self.Q = np.diag([0.03**2, 0.03**2, 0.03**2,
3**2, 3**2, 3**2,
(clock_error_drift)**2, (0)**2, (0.005)**2,
.1**2, (.01)**2])
self.dim_state = self.x_initial.shape[0]
# init filter
filter_cls = EKF_sym_pyx if cython else EKF_sym
self.filter = filter_cls(generated_dir, self.name, self.Q, self.x_initial, self.P_initial, self.dim_state,
self.dim_state, maha_test_kinds=self.maha_test_kinds)
self.init_state(GNSSKalman.x_initial, covs=GNSSKalman.P_initial)
@property
def x(self):
return self.filter.state()
@property
def P(self):
return self.filter.covs()
def predict(self, t):
return self.filter.predict(t)
def rts_smooth(self, estimates):
return self.filter.rts_smooth(estimates, norm_quats=False)
def init_state(self, state, covs_diag=None, covs=None, filter_time=None):
if covs_diag is not None:
P = np.diag(covs_diag)
elif covs is not None:
P = covs
else:
P = self.filter.covs()
self.filter.init_state(state, P, filter_time)
def predict_and_observe(self, t, kind, data):
if len(data) > 0:
data = np.atleast_2d(data)
if kind == ObservationKind.PSEUDORANGE_GPS or kind == ObservationKind.PSEUDORANGE_GLONASS:
r = self.predict_and_update_pseudorange(data, t, kind)
elif kind == ObservationKind.PSEUDORANGE_RATE_GPS or kind == ObservationKind.PSEUDORANGE_RATE_GLONASS:
r = self.predict_and_update_pseudorange_rate(data, t, kind)
return r
def predict_and_update_pseudorange(self, meas, t, kind):
R = np.zeros((len(meas), 1, 1))
sat_pos_freq = np.zeros((len(meas), 4))
z = np.zeros((len(meas), 1))
for i, m in enumerate(meas):
z_i, R_i, sat_pos_freq_i = parse_pr(m)
sat_pos_freq[i, :] = sat_pos_freq_i
z[i, :] = z_i
R[i, :, :] = R_i
return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_freq)
def predict_and_update_pseudorange_rate(self, meas, t, kind):
R = np.zeros((len(meas), 1, 1))
z = np.zeros((len(meas), 1))
sat_pos_vel = np.zeros((len(meas), 6))
for i, m in enumerate(meas):
z_i, R_i, sat_pos_vel_i = parse_prr(m)
sat_pos_vel[i] = sat_pos_vel_i
R[i, :, :] = R_i
z[i, :] = z_i
return self.filter.predict_and_update_batch(t, kind, z, R, sat_pos_vel)
if __name__ == "__main__":
generated_dir = sys.argv[2]
GNSSKalman.generate_code(generated_dir)
+3 -3
View File
@@ -7,12 +7,12 @@ import numpy as np
import cereal.messaging as messaging
from cereal import car
from cereal import log
from openpilot.common.params import Params, put_nonblocking
from openpilot.common.params import Params
from openpilot.common.realtime import config_realtime_process, DT_MDL
from openpilot.common.numpy_fast import clip
from openpilot.selfdrive.locationd.models.car_kf import CarKalman, ObservationKind, States
from openpilot.selfdrive.locationd.models.constants import GENERATED_DIR
from openpilot.system.swaglog import cloudlog
from openpilot.common.swaglog import cloudlog
MAX_ANGLE_OFFSET_DELTA = 20 * DT_MDL # Max 20 deg/s
@@ -251,7 +251,7 @@ def main():
'stiffnessFactor': liveParameters.stiffnessFactor,
'angleOffsetAverageDeg': liveParameters.angleOffsetAverageDeg,
}
put_nonblocking("LiveParameters", json.dumps(params))
params_reader.put_nonblocking("LiveParameters", json.dumps(params))
pm.send('liveParameters', msg)
+9 -29
View File
@@ -1,18 +1,15 @@
#!/usr/bin/env python3
import os
import sys
import signal
import numpy as np
from collections import deque, defaultdict
import cereal.messaging as messaging
from cereal import car, log
from common.params import Params, put_nonblocking
from openpilot.common.params import Params
from openpilot.common.realtime import config_realtime_process, DT_MDL
from openpilot.common.filter_simple import FirstOrderFilter
from openpilot.system.swaglog import cloudlog
from openpilot.common.swaglog import cloudlog
from openpilot.selfdrive.controls.lib.vehicle_model import ACCELERATION_DUE_TO_GRAVITY
from openpilot.selfdrive.locationd.helpers import PointBuckets
from openpilot.selfdrive.locationd.helpers import PointBuckets, ParameterEstimator
HISTORY = 5 # secs
POINTS_PER_BUCKET = 1500
@@ -52,7 +49,7 @@ class TorqueBuckets(PointBuckets):
break
class TorqueEstimator:
class TorqueEstimator(ParameterEstimator):
def __init__(self, CP, decimated=False):
self.hist_len = int(HISTORY / DT_MDL)
self.lag = CP.steerActuatorDelay + .2 # from controlsd
@@ -95,7 +92,7 @@ class TorqueEstimator:
# try to restore cached params
params = Params()
params_cache = params.get("LiveTorqueCarParams")
params_cache = params.get("CarParamsPrevRoute")
torque_cache = params.get("LiveTorqueParameters")
if params_cache is not None and torque_cache is not None:
try:
@@ -116,7 +113,6 @@ class TorqueEstimator:
cloudlog.info("restored torque params from cache")
except Exception:
cloudlog.exception("failed to restore cached torque params")
params.remove("LiveTorqueCarParams")
params.remove("LiveTorqueParameters")
self.filtered_params = {}
@@ -228,20 +224,6 @@ def main():
with car.CarParams.from_bytes(params.get("CarParams", block=True)) as CP:
estimator = TorqueEstimator(CP)
def cache_params(sig, frame):
signal.signal(sig, signal.SIG_DFL)
cloudlog.warning("caching torque params")
params = Params()
params.put("LiveTorqueCarParams", CP.as_builder().to_bytes())
msg = estimator.get_msg(with_points=True)
params.put("LiveTorqueParameters", msg.to_bytes())
sys.exit(0)
if "REPLAY" not in os.environ:
signal.signal(signal.SIGINT, cache_params)
while True:
sm.update()
if sm.all_checks():
@@ -254,12 +236,10 @@ def main():
if sm.frame % 5 == 0:
pm.send('liveTorqueParameters', estimator.get_msg(valid=sm.all_checks()))
# dp - auto save every 3 mins: 4 hz * 60 * 3 = 720 (3 mins)
if sm.frame % 720 == 0:
put_nonblocking("LiveTorqueCarParams", CP.as_builder().to_bytes())
msg = estimator.get_msg(with_points=True)
put_nonblocking("LiveTorqueParameters", msg.to_bytes())
# Cache points every 60 seconds while onroad
if sm.frame % 240 == 0:
msg = estimator.get_msg(valid=sm.all_checks(), with_points=True)
params.put_nonblocking("LiveTorqueParameters", msg.to_bytes())
if __name__ == "__main__":
main()