add car porting docs (#30704)
* add car porting docs * add cabana * absolute link * absolute link * absolute link * selfdrive/carpull/30659/head
parent
4f3a186a6f
commit
595041ffc0
1 changed files with 71 additions and 5 deletions
@ -1,11 +1,77 @@ |
|||||||
## Port structure |
# selfdrive/car |
||||||
##### interface.py |
|
||||||
|
### Checkout this blogpost for a high level overview of car ports |
||||||
|
https://blog.comma.ai/how-to-write-a-car-port-for-openpilot/ |
||||||
|
|
||||||
|
## Useful car porting utilities |
||||||
|
|
||||||
|
Testing car ports in your car is very time consuming! Checkout these utilities to do basic checks on your work before running it in your car. |
||||||
|
|
||||||
|
### [Cabana](/tools/cabana/README.md) |
||||||
|
|
||||||
|
View your cars CAN signals through DBC files, which openpilot uses to parse and create messages that talk to the car. |
||||||
|
|
||||||
|
Example: |
||||||
|
```bash |
||||||
|
> tools/cabana/cabana '1bbe6bf2d62f58a8|2022-07-14--17-11-43' |
||||||
|
``` |
||||||
|
|
||||||
|
### [selfdrive/debug/auto_fingerprint.py](/selfdrive/debug/auto_fingerprint.py) |
||||||
|
|
||||||
|
Given a route and platform, automatically inserts fw fingerprints from the platform into the correct place in values.py |
||||||
|
|
||||||
|
Example: |
||||||
|
```bash |
||||||
|
> python selfdrive/debug/auto_fingerprint.py '1bbe6bf2d62f58a8|2022-07-14--17-11-43' 'SUBARU OUTBACK 6TH GEN' |
||||||
|
Attempting to add fw version for: SUBARU OUTBACK 6TH GEN |
||||||
|
``` |
||||||
|
|
||||||
|
### [selfdrive/car/tests/test_car_interfaces.py](/selfdrive/car/tests/test_car_interfaces.py) |
||||||
|
|
||||||
|
Finds common bugs for car interfaces, without even requiring a route! |
||||||
|
|
||||||
|
|
||||||
|
#### Example: Typo in signal name |
||||||
|
```bash |
||||||
|
> pytest selfdrive/car/tests/test_car_interfaces.py -k subaru # (replace with the brand you are working on!) |
||||||
|
|
||||||
|
===================================================================== |
||||||
|
FAILED selfdrive/car/tests/test_car_interfaces.py::TestCarInterfaces::test_car_interfaces_165_SUBARU_LEGACY_7TH_GEN - KeyError: 'CruiseControlOOPS' |
||||||
|
|
||||||
|
``` |
||||||
|
|
||||||
|
### [selfdrive/debug/test_car_model.py](/selfdrive/debug/test_car_model.py) |
||||||
|
|
||||||
|
Given a route, runs most of the car interface to check for common errors like missing signals, blocked panda messages, and mismatches. |
||||||
|
|
||||||
|
#### Example: Panda safety mismatch for gasPressed |
||||||
|
```bash |
||||||
|
> python selfdrive/debug/test_car_model.py '4822a427b188122a|2023-08-14--16-22-21' |
||||||
|
|
||||||
|
===================================================================== |
||||||
|
FAIL: test_panda_safety_carstate (__main__.CarModelTestCase.test_panda_safety_carstate) |
||||||
|
Assert that panda safety matches openpilot's carState |
||||||
|
---------------------------------------------------------------------- |
||||||
|
Traceback (most recent call last): |
||||||
|
File "/home/batman/xx/openpilot/openpilot/selfdrive/car/tests/test_models.py", line 380, in test_panda_safety_carstate |
||||||
|
self.assertFalse(len(failed_checks), f"panda safety doesn't agree with openpilot: {failed_checks}") |
||||||
|
AssertionError: 1 is not false : panda safety doesn't agree with openpilot: {'gasPressed': 116} |
||||||
|
``` |
||||||
|
|
||||||
|
|
||||||
|
## Car Port structure |
||||||
|
|
||||||
|
### interface.py |
||||||
Generic interface to send and receive messages from CAN (controlsd uses this to communicate with car) |
Generic interface to send and receive messages from CAN (controlsd uses this to communicate with car) |
||||||
##### carcontroller.py |
|
||||||
|
### carcontroller.py |
||||||
Builds CAN messages to send to car |
Builds CAN messages to send to car |
||||||
|
|
||||||
##### carstate.py |
##### carstate.py |
||||||
Reads CAN from car and builds openpilot CarState message |
Reads CAN from car and builds openpilot CarState message |
||||||
|
|
||||||
##### values.py |
##### values.py |
||||||
Fingerprints and absolute limits |
Fingerprints, limits for actuation, car doc information, etc |
||||||
|
|
||||||
##### radar_interface.py |
##### radar_interface.py |
||||||
Radar interface |
Interface for parsing radar points from the car |
||||||
|
Loading…
Reference in new issue