car porting examples: add example of plotting the response of brake_pressure vs acceleration (#30958)
* another example
* add comment
* fix that
* oop
* fix link
old-commit-hash: 8d9e431f43
chrysler-long2
parent
3231738be9
commit
407d302106
2 changed files with 128 additions and 0 deletions
@ -0,0 +1,120 @@ |
|||||||
|
{ |
||||||
|
"cells": [ |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": null, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [], |
||||||
|
"source": [ |
||||||
|
"segments = [\n", |
||||||
|
" \"d9df6f87e8feff94|2023-03-28--17-41-10/1:12\"\n", |
||||||
|
"]\n", |
||||||
|
"platform = \"SUBARU OUTBACK 6TH GEN\"\n" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": null, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [], |
||||||
|
"source": [ |
||||||
|
"import copy\n", |
||||||
|
"import numpy as np\n", |
||||||
|
"\n", |
||||||
|
"from opendbc.can.parser import CANParser\n", |
||||||
|
"\n", |
||||||
|
"from openpilot.selfdrive.car.subaru.values import DBC\n", |
||||||
|
"from openpilot.tools.lib.srreader import SegmentRangeReader\n", |
||||||
|
"\n", |
||||||
|
"\"\"\"\n", |
||||||
|
"In this example, we plot the relationship between Cruise_Brake and Acceleration for stock eyesight.\n", |
||||||
|
"\"\"\"\n", |
||||||
|
"\n", |
||||||
|
"for segment in segments:\n", |
||||||
|
" lr = SegmentRangeReader(segment)\n", |
||||||
|
"\n", |
||||||
|
" messages = [\n", |
||||||
|
" (\"ES_Distance\", 20),\n", |
||||||
|
" (\"ES_Brake\", 20),\n", |
||||||
|
" (\"ES_Status\", 20),\n", |
||||||
|
" ]\n", |
||||||
|
"\n", |
||||||
|
" cp = CANParser(DBC[platform][\"pt\"], messages, 1)\n", |
||||||
|
"\n", |
||||||
|
" es_distance_history = []\n", |
||||||
|
" es_status_history = []\n", |
||||||
|
" es_brake_history = []\n", |
||||||
|
" acceleration_history = []\n", |
||||||
|
"\n", |
||||||
|
" last_acc = 0\n", |
||||||
|
"\n", |
||||||
|
" for msg in lr:\n", |
||||||
|
" if msg.which() == \"can\":\n", |
||||||
|
" cp.update_strings([msg.as_builder().to_bytes()])\n", |
||||||
|
" es_distance_history.append(copy.copy(cp.vl[\"ES_Distance\"]))\n", |
||||||
|
" es_brake_history.append(copy.copy(cp.vl[\"ES_Brake\"]))\n", |
||||||
|
" es_status_history.append(copy.copy(cp.vl[\"ES_Status\"]))\n", |
||||||
|
"\n", |
||||||
|
" acceleration_history.append(last_acc)\n", |
||||||
|
" \n", |
||||||
|
" if msg.which() == \"carState\":\n", |
||||||
|
" last_acc = msg.carState.aEgo" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": null, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [], |
||||||
|
"source": [ |
||||||
|
"def process(history, func):\n", |
||||||
|
" return np.array([func(h) for h in history])\n", |
||||||
|
"\n", |
||||||
|
"cruise_activated = process(es_status_history, lambda es_status: es_status[\"Cruise_Activated\"])\n", |
||||||
|
"cruise_throttle = process(es_distance_history, lambda es_distance: es_distance[\"Cruise_Throttle\"])\n", |
||||||
|
"cruise_rpm = process(es_status_history, lambda es_status: es_status[\"Cruise_RPM\"])\n", |
||||||
|
"cruise_brake = process(es_brake_history, lambda es_brake: es_brake[\"Brake_Pressure\"])\n", |
||||||
|
"acceleration = process(acceleration_history, lambda acc: acc)" |
||||||
|
] |
||||||
|
}, |
||||||
|
{ |
||||||
|
"cell_type": "code", |
||||||
|
"execution_count": null, |
||||||
|
"metadata": {}, |
||||||
|
"outputs": [], |
||||||
|
"source": [ |
||||||
|
"import matplotlib.pyplot as plt\n", |
||||||
|
"\n", |
||||||
|
"valid_brake = (cruise_activated==1) & (cruise_brake>0) # only when cruise is activated and eyesight is braking\n", |
||||||
|
"\n", |
||||||
|
"ax = plt.figure().add_subplot()\n", |
||||||
|
"\n", |
||||||
|
"ax.set_title(\"Brake_Pressure vs Acceleration\")\n", |
||||||
|
"ax.set_xlabel(\"Brake_Pessure\")\n", |
||||||
|
"ax.set_ylabel(\"Acceleration\")\n", |
||||||
|
"ax.scatter(cruise_brake[valid_brake], -acceleration[valid_brake])" |
||||||
|
] |
||||||
|
} |
||||||
|
], |
||||||
|
"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