tools: add car porting example notebook (#30918)
* add car porting example notebooks * not requiredpull/30920/head
parent
002ab5637b
commit
15e0a906ad
1 changed files with 114 additions and 0 deletions
@ -0,0 +1,114 @@ |
||||
{ |
||||
"cells": [ |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": null, |
||||
"metadata": {}, |
||||
"outputs": [], |
||||
"source": [ |
||||
"# An example of searching through the database of segments for a specific condition, and plotting the results.\n", |
||||
"\n", |
||||
"segments = [\n", |
||||
" \"c3d1ccb52f5f9d65|2023-07-22--01-23-20--6\",\n", |
||||
" \"c3d1ccb52f5f9d65|2023-07-22--01-23-20--7\",\n", |
||||
" \"c3d1ccb52f5f9d65|2023-07-22--01-23-20--8\",\n", |
||||
"]\n", |
||||
"platform = \"SUBARU OUTBACK 6TH GEN\"" |
||||
] |
||||
}, |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": null, |
||||
"metadata": {}, |
||||
"outputs": [], |
||||
"source": [ |
||||
"import copy\n", |
||||
"import matplotlib.pyplot as plt\n", |
||||
"import numpy as np\n", |
||||
"from openpilot.tools.lib.logreader import logreader_from_route_or_segment\n", |
||||
"\n", |
||||
"\n", |
||||
"from selfdrive.car.subaru.values import CanBus, DBC\n", |
||||
"\n", |
||||
"from opendbc.can.parser import CANParser\n", |
||||
"\n", |
||||
"\"\"\"\n", |
||||
"In this example, we search for positive transitions of Steer_Warning, which indicate that the EPS\n", |
||||
"has stopped responding to our messages. This analysis would allow you to find the cause of these\n", |
||||
"steer warnings and potentially work around them.\n", |
||||
"\"\"\"\n", |
||||
"\n", |
||||
"for segment in segments:\n", |
||||
" print(segment)\n", |
||||
" lr = logreader_from_route_or_segment(segment)\n", |
||||
"\n", |
||||
" can_msgs = [msg for msg in lr if msg.which() == \"can\"]\n", |
||||
"\n", |
||||
" messages = [\n", |
||||
" (\"Steering_Torque\", 50)\n", |
||||
" ]\n", |
||||
"\n", |
||||
" cp = CANParser(DBC[platform][\"pt\"], messages, CanBus.main)\n", |
||||
"\n", |
||||
" steering_torque_history = []\n", |
||||
" examples = []\n", |
||||
"\n", |
||||
" for msg in can_msgs:\n", |
||||
" cp.update_strings([msg.as_builder().to_bytes()])\n", |
||||
" steering_torque_history.append(copy.copy(cp.vl[\"Steering_Torque\"]))\n", |
||||
" \n", |
||||
" steer_warning_last = False\n", |
||||
" for i, steering_torque_msg in enumerate(steering_torque_history):\n", |
||||
" steer_warning = steering_torque_msg[\"Steer_Warning\"]\n", |
||||
"\n", |
||||
" steer_angle = steering_torque_msg[\"Steering_Angle\"]\n", |
||||
"\n", |
||||
" if steer_warning and not steer_warning_last: # positive transition of \"Steer_Warning\"\n", |
||||
" examples.append(i)\n", |
||||
"\n", |
||||
" steer_warning_last = steer_warning\n", |
||||
"\n", |
||||
" FRAME_DELTA = 100 # plot this many frames around the positive transition\n", |
||||
"\n", |
||||
" for example in examples:\n", |
||||
" fig, axs = plt.subplots(2)\n", |
||||
"\n", |
||||
" min_frame = int(example-FRAME_DELTA/2)\n", |
||||
" max_frame = int(example+FRAME_DELTA/2)\n", |
||||
"\n", |
||||
" steering_angle_history = [msg[\"Steering_Angle\"] for msg in steering_torque_history[min_frame:max_frame]]\n", |
||||
" steering_warning_history = [msg[\"Steer_Warning\"] for msg in steering_torque_history[min_frame:max_frame]]\n", |
||||
"\n", |
||||
" xs = np.arange(-FRAME_DELTA/2, FRAME_DELTA/2)\n", |
||||
"\n", |
||||
" axs[0].plot(xs, steering_angle_history)\n", |
||||
" axs[0].set_ylabel(\"Steering Angle (deg)\")\n", |
||||
" axs[1].plot(xs, steering_warning_history)\n", |
||||
" axs[1].set_ylabel(\"Steer Warning\")\n", |
||||
"\n", |
||||
" plt.show()\n" |
||||
] |
||||
} |
||||
], |
||||
"metadata": { |
||||
"kernelspec": { |
||||
"display_name": "Python 3", |
||||
"language": "python", |
||||
"name": "python3" |
||||
}, |
||||
"language_info": { |
||||
"codemirror_mode": { |
||||
"name": "ipython", |
||||
"version": 3 |
||||
}, |
||||
"file_extension": ".py", |
||||
"mimetype": "text/x-python", |
||||
"name": "python", |
||||
"nbconvert_exporter": "python", |
||||
"pygments_lexer": "ipython3", |
||||
"version": "3.11.4" |
||||
} |
||||
}, |
||||
"nbformat": 4, |
||||
"nbformat_minor": 2 |
||||
} |
Loading…
Reference in new issue