* add function signature and behavior comment
* add test
* move chassis codes to platform config!
* add a shared chassis code test
* function
* test matching
* this commit isn't complete yet
* Revert "this commit isn't complete yet"
This reverts commit ae77d5cd54e1f43d390fb70c4da38a95ac34f8da.
* need to check WMI
* TODO: test WMI
* test wmi
* radar FW sanity check
* fix test
* fixes from merge
fixes from merge
* whoops
* fix static analysis!
* do match_fw_to_car
match_fw_to_car takes vin
* makes sense to keep it one function, and we can return exact or fuzzy!
* clean up
* kinda pointless
* fix more tests
* back to function being only fuzzy
* revert test_fw_fingerprint
* revert test_fw_fingerprint
* simplify
* clean up/fixes
* rename test
* less duplicatey WMI descriptions
* fix
* convert to enum
* I am confident about these WMIs
* these are also good
* we support 5N AUS/NZ and NAR (North American) AX Tiguans
fixes
* Tiguan also Mexico
* only one user for caddy
* got from the test route
* check that the gateway type matches the platform (each platform has 1 or 2 types)
* ~gateway~ -> exact FW match
* remove re
* ensure WMIs are set
* actually no reason to delete
* move comment up to the platform config
* proper wmis typing
* spacing
* flip
old-commit-hash: 6acf763db4
tools/car_porting
Check out this blog post for a high-level overview of porting a car.
Useful car porting utilities
Testing car ports in your car is very time-consuming. Check out these utilities to do basic checks on your work before running it in your car.
Cabana
View your car's CAN signals through DBC files, which openpilot uses to parse and create messages that talk to the car.
Example:
> tools/cabana/cabana '1bbe6bf2d62f58a8|2022-07-14--17-11-43'
tools/car_porting/auto_fingerprint.py
Given a route and platform, automatically inserts FW fingerprints from the platform into the correct place in fingerprints.py
Example:
> python tools/car_porting/auto_fingerprint.py '1bbe6bf2d62f58a8|2022-07-14--17-11-43' 'OUTBACK'
Attempting to add fw version for: OUTBACK
selfdrive/car/tests/test_car_interfaces.py
Finds common bugs for car interfaces, without even requiring a route.
Example: Typo in signal name
> 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'
tools/car_porting/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 safety mismatches.
Example: panda safety mismatch for gasPressed
> python tools/car_porting/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}
tools/car_porting/examples/subaru_steer_temp_fault.ipynb
An example of searching through a database of segments for a specific condition, and plotting the results.
a plot of the steer_warning vs steering angle, where we can see it is clearly caused by a large steering angle change
tools/car_porting/examples/subaru_long_accel.ipynb
An example of plotting the response of an actuator when it is active.
a plot of the brake_pressure vs acceleration, where we can see it is a fairly linear response.
tools/car_porting/examples/ford_vin_fingerprint.ipynb
In this example, we use the public comma car segments database to check if vin fingerprinting is feasible for ford.
vin: 1FM5K8GC7LGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: 00000000000XXXXXX real platform: FORD ESCAPE 4TH GEN determined platform: mock correct: False
vin: 3FTTW8F98NRXXXXXX real platform: FORD MAVERICK 1ST GEN determined platform: mock correct: False
vin: 1FTVW1EL4NWXXXXXX real platform: FORD F-150 LIGHTNING 1ST GEN determined platform: FORD F-150 LIGHTNING 1ST GEN correct: True
vin: 1FM5K7LC0MGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: WF0NXXGCHNJXXXXXX real platform: FORD FOCUS 4TH GEN determined platform: mock correct: False
vin: 1FMCU9J94MUXXXXXX real platform: FORD ESCAPE 4TH GEN determined platform: mock correct: False
vin: 5LM5J7XC9LGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: 3FMCR9B69NRXXXXXX real platform: FORD BRONCO SPORT 1ST GEN determined platform: mock correct: False
vin: 3FMTK3SU0MMXXXXXX real platform: FORD MUSTANG MACH-E 1ST GEN determined platform: FORD MUSTANG MACH-E 1ST GEN correct: True
vin: 1FM5K8HC7MGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: 1FM5K8GC7NGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: 5LM5J7XC8MGXXXXXX real platform: FORD EXPLORER 6TH GEN determined platform: mock correct: False
vin: 3FTTW8E31PRXXXXXX real platform: FORD MAVERICK 1ST GEN determined platform: mock correct: False
vin: 3FTTW8E99NRXXXXXX real platform: FORD MAVERICK 1ST GEN determined platform: mock correct: False