openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.3 KiB

import math
import matplotlib.pyplot as plt
2 weeks ago
from openpilot.common.filter_simple import JerkEstimator1, JerkEstimator2, JerkEstimator3, JerkEstimator4
from tools.lib.logreader import LogReader
from openpilot.selfdrive.locationd.helpers import PoseCalibrator, Pose
from opendbc.car import ACCELERATION_DUE_TO_GRAVITY
plt.ion()
lr = LogReader("https://connect.comma.ai/8011d605be1cbb77/000001c6--130f915e07/130/138")
calibrator = PoseCalibrator()
sm = {}
j1 = JerkEstimator1(1/20)
2 weeks ago
j2 = JerkEstimator2(1/100)
j3 = JerkEstimator3(1/20)
j4 = JerkEstimator4(1/20)
2 weeks ago
j5 = JerkEstimator1(1/100)
accels = []
2 weeks ago
kf_accels = []
2 weeks ago
jerks1, jerks2, jerks3, jerks4, jerks5 = [], [], [], [], []
2 weeks ago
lp_updated = False
for msg in lr:
if msg.which() == 'livePose':
sm['livePose'] = msg.livePose
2 weeks ago
lp_updated = True
elif msg.which() == 'liveParameters':
sm['liveParameters'] = msg.liveParameters
elif msg.which() == 'carState':
if len(sm) < 2:
continue
CS = msg.carState
device_pose = Pose.from_live_pose(sm['livePose'])
calibrated_pose = calibrator.build_calibrated_pose(device_pose)
yaw_rate = calibrated_pose.angular_velocity.yaw
roll = sm['liveParameters'].roll
roll_compensated_lateral_accel = (CS.vEgo * yaw_rate) - (math.sin(roll) * ACCELERATION_DUE_TO_GRAVITY)
2 weeks ago
_j2 = j2.update(roll_compensated_lateral_accel)
_j5 = j5.update(roll_compensated_lateral_accel)
2 weeks ago
if lp_updated:
_j1 = j1.update(roll_compensated_lateral_accel)
2 weeks ago
_j3 = j3.update(roll_compensated_lateral_accel)
_j4 = j4.update(roll_compensated_lateral_accel)
2 weeks ago
lp_updated = False
else:
_j1 = j1.x
_j2 = j2.x
2 weeks ago
_j3 = j3.x
2 weeks ago
_j4 = j4.x
2 weeks ago
_j5 = j5.x
2 weeks ago
jerks1.append(_j1)
jerks2.append(_j2)
jerks3.append(_j3)
jerks4.append(_j4)
2 weeks ago
jerks5.append(_j5)
accels.append(roll_compensated_lateral_accel)
print(roll_compensated_lateral_accel)
fig, axs = plt.subplots(2, sharex=True)
axs[0].plot(accels, label='Lateral Accel')
axs[0].set_ylabel('Lateral Acceleration (m/s²)')
axs[0].legend()
axs[1].plot(jerks1, label='Jerk Estimator 1')
2 weeks ago
# axs[1].plot(jerks2, label='Jerk Estimator 2')
2 weeks ago
# axs[1].plot(jerks3, label='Jerk Estimator 3')
2 weeks ago
axs[1].plot(jerks4, label='Jerk Estimator 4')
2 weeks ago
# axs[1].plot(jerks5, label='Jerk Estimator 5')
axs[1].set_ylabel('Lateral Jerk (m/s³)')
axs[1].legend()