|
|
|
@ -8,7 +8,7 @@ from selfdrive.locationd.kalman.helpers.sympy_helpers import (euler_rotate, |
|
|
|
|
quat_matrix_r, |
|
|
|
|
quat_rotate) |
|
|
|
|
from selfdrive.swaglog import cloudlog |
|
|
|
|
#from laika.constants import EARTH_GM |
|
|
|
|
|
|
|
|
|
EARTH_GM = 3.986005e14 # m^3/s^2 (gravitational constant * mass of earth) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -44,7 +44,6 @@ class LiveKalman(): |
|
|
|
|
0, 0, 0, |
|
|
|
|
0, 0, 0]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# state covariance |
|
|
|
|
initial_P_diag = np.array([10000**2, 10000**2, 10000**2, |
|
|
|
|
10**2, 10**2, 10**2, |
|
|
|
@ -155,14 +154,9 @@ class LiveKalman(): |
|
|
|
|
eskf_params = [[err_function_sym, nom_x, delta_x], |
|
|
|
|
[inv_err_function_sym, nom_x, true_x], |
|
|
|
|
H_mod_sym, f_err_sym, state_err_sym] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# |
|
|
|
|
# Observation functions |
|
|
|
|
# |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
imu_rot = euler_rotate(*imu_angles) |
|
|
|
|
h_gyro_sym = imu_rot * sp.Matrix([vroll + roll_bias, |
|
|
|
|
vpitch + pitch_bias, |
|
|
|
@ -171,18 +165,16 @@ class LiveKalman(): |
|
|
|
|
pos = sp.Matrix([x, y, z]) |
|
|
|
|
gravity = quat_rot.T * ((EARTH_GM / ((x**2 + y**2 + z**2)**(3.0 / 2.0))) * pos) |
|
|
|
|
h_acc_sym = imu_rot * (gravity + acceleration) |
|
|
|
|
h_phone_rot_sym = sp.Matrix([vroll, |
|
|
|
|
vpitch, |
|
|
|
|
vyaw]) |
|
|
|
|
speed = vx**2 + vy**2 + vz**2 |
|
|
|
|
h_speed_sym = sp.Matrix([sp.sqrt(speed)*odo_scale]) |
|
|
|
|
h_phone_rot_sym = sp.Matrix([vroll, vpitch, vyaw]) |
|
|
|
|
|
|
|
|
|
speed = sp.sqrt(vx**2 + vy**2 + vz**2) |
|
|
|
|
h_speed_sym = sp.Matrix([speed * odo_scale]) |
|
|
|
|
|
|
|
|
|
h_pos_sym = sp.Matrix([x, y, z]) |
|
|
|
|
h_imu_frame_sym = sp.Matrix(imu_angles) |
|
|
|
|
|
|
|
|
|
h_relative_motion = sp.Matrix(quat_rot.T * v) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
obs_eqs = [[h_speed_sym, ObservationKind.ODOMETRIC_SPEED, None], |
|
|
|
|
[h_gyro_sym, ObservationKind.PHONE_GYRO, None], |
|
|
|
|
[h_phone_rot_sym, ObservationKind.NO_ROT, None], |
|
|
|
@ -200,7 +192,7 @@ class LiveKalman(): |
|
|
|
|
|
|
|
|
|
self.obs_noise = {ObservationKind.ODOMETRIC_SPEED: np.atleast_2d(0.2**2), |
|
|
|
|
ObservationKind.PHONE_GYRO: np.diag([0.025**2, 0.025**2, 0.025**2]), |
|
|
|
|
ObservationKind.PHONE_ACCEL: np.diag([.5**2, .5**2, .5*2]), |
|
|
|
|
ObservationKind.PHONE_ACCEL: np.diag([.5**2, .5**2, .5**2]), |
|
|
|
|
ObservationKind.CAMERA_ODO_ROTATION: np.diag([0.05**2, 0.05**2, 0.05**2]), |
|
|
|
|
ObservationKind.IMU_FRAME: np.diag([0.05**2, 0.05**2, 0.05**2]), |
|
|
|
|
ObservationKind.NO_ROT: np.diag([0.00025**2, 0.00025**2, 0.00025**2]), |
|
|
|
|