add car porting docs (#30704)
	
		
	
				
					
				
			* add car porting docs * add cabana * absolute link * absolute link * absolute link * selfdrive/carmqb-accel-override-fix
							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