Merge a388dfcda2
into 756aebd39f
commit
57bdf82aa8
1 changed files with 188 additions and 0 deletions
@ -0,0 +1,188 @@ |
|||||||
|
# Merging a New Port |
||||||
|
|
||||||
|
The openpilot driving experience is designed to be: |
||||||
|
|
||||||
|
* safe (SAFETY.md) |
||||||
|
* cooperative |
||||||
|
* plug-and-play |
||||||
|
* high quality |
||||||
|
|
||||||
|
New brand or model ports are evaluated against these goals before they are merged into upstream |
||||||
|
openpilot. This guide discusses the review process necessary to merge a new port. |
||||||
|
|
||||||
|
In case of conflicts between this guide and comma safety standards, SAFETY.md always controls. |
||||||
|
|
||||||
|
# Merge Process |
||||||
|
|
||||||
|
New brand ports will initially be merged in dashcam mode. This allows for the comma.ai openpilot team |
||||||
|
to further validate safety and quality before enabling official support with plug-and-play operation. |
||||||
|
New model ports, which only add a new model to an already-supported ADAS platform, may be reviewable |
||||||
|
with driving logs only, and may be directly merged as fully supported. |
||||||
|
|
||||||
|
Cars that don't meet all guidelines aren't eligible for full support. However, on a case-by-case basis, |
||||||
|
they may still be merged behind the dashcam flag. |
||||||
|
|
||||||
|
## Unofficial Support (dashcam mode) |
||||||
|
|
||||||
|
These ports are maintained on a best-effort basis and must pass a subset of CI testing. They will not |
||||||
|
operate by default when plugged into a car. They can only be driven by advanced users who manually |
||||||
|
remove the dashcam flag, or by installing a custom fork. |
||||||
|
|
||||||
|
Some example reasons why a port might be in dashcam mode: |
||||||
|
|
||||||
|
* A work-in-progress port that has advanced enough to pass tests and provide some value |
||||||
|
* An otherwise finished port, pending comma safety and quality validation |
||||||
|
* The car's control API does not allow a cooperative driving experience (see Tesla) |
||||||
|
* Lateral/longitudinal control lockouts without a safe, effective mitigation |
||||||
|
* Unresolved issues with lateral/longitudinal control quality and reliability |
||||||
|
* No harness yet available for purchase, DIY harness fabrication required |
||||||
|
|
||||||
|
## Official Support |
||||||
|
|
||||||
|
Ports meeting these guidelines have been verified as safe and should deliver a high quality, plug and |
||||||
|
play experience. These ports are eligible to appear in CARS.md and will appear in the car selector |
||||||
|
at shop.comma.ai. They are all actively maintained, with full CI testing. |
||||||
|
|
||||||
|
# Support Requirements |
||||||
|
|
||||||
|
## Car Harness |
||||||
|
|
||||||
|
* Full pinout documented, including any required pass-through pins |
||||||
|
* The stock CAN termination resistances must be measured and documented |
||||||
|
* Harness design places actuator controls on bus 0/2, bus 1 is optional |
||||||
|
* Harness design allows stock ADAS operation with openpilot disconnected or disabled |
||||||
|
* Connector shells and terminals available COTS or 3D model available |
||||||
|
|
||||||
|
## Installation Experience |
||||||
|
|
||||||
|
* Harness should plug in at LKA camera, other locations must be strongly justified |
||||||
|
* Any special parts or tools needed for installation should be documented |
||||||
|
* Fingerprinting must be as fully automatic as possible (fuzzy FP) |
||||||
|
* VIN fingerprinting acceptable with proper rigor/testing |
||||||
|
* Full functionality, including fingerprinting, must be available without comma power |
||||||
|
|
||||||
|
## Integration Experience |
||||||
|
|
||||||
|
* Dashcam mode works, all operation returns to stock |
||||||
|
* No unpleasant/atypical car UI experiences for the driver, no warnings or beeps |
||||||
|
* Should handle late startup seamlessly (cold boot, no comma power, thermal delay) |
||||||
|
* Integration with the instrument cluster/HUD |
||||||
|
* Displayed speed and cruise setpoint match between the cluster and openpilot, both miles and km |
||||||
|
* Speed can be offset/adjusted in openpilot if necessary |
||||||
|
* Continues to scale properly if the driver changes the car's display units |
||||||
|
* Stock ADAS cluster display signals are replicated by openpilot |
||||||
|
* Displayed state for LKA active, standby, off (LKA on/off buttons and settings may be ignored) |
||||||
|
* Lane lines (if applicable) |
||||||
|
* Lead car presence (if applicable, openpilot does not make lead distance available) |
||||||
|
* Configured follow distance (if applicable, replicate using driving personality setting) |
||||||
|
|
||||||
|
## Lateral Control |
||||||
|
|
||||||
|
* Use only safe APIs designed for highway speed ADAS |
||||||
|
* Probe the car's lateral control API limits |
||||||
|
* Identify speed envelope limits, any cutoff above zero handled correctly |
||||||
|
* Identify actuation limits, document even if openpilot cannot use the maximum |
||||||
|
* Lateral API fault signals must be populated in CarState, must alert on loss of control |
||||||
|
* If the car's API is torque based, use the lat accel torque controller unless justified not to |
||||||
|
* Lateral control operates within safe limits |
||||||
|
* 2.5 m/s/s lateral accel for torque control |
||||||
|
* TODO: what are the steering angle control limits? |
||||||
|
* TODO: what are the curvature control limits? |
||||||
|
* Handles variability in actuator performance between cars (see HKG) |
||||||
|
* Driver override is handled correctly and safely |
||||||
|
* openpilot should detect driver input and back off |
||||||
|
* Try to identify and match the stock LKA override threshold |
||||||
|
* Threshold will probably land in the 0.6-0.8 Nm range, if scaling is known |
||||||
|
* Threshold must avoid false wheel touches during normal driving |
||||||
|
* Must be a cooperative driving experience (see Tesla for a counterexample) |
||||||
|
|
||||||
|
### Testing |
||||||
|
|
||||||
|
* Maximum actuation limits don't exceed comma safety guidelines |
||||||
|
* Good driving plan conformance, check with PlotJuggler |
||||||
|
* Test lane changes on both flat and road crown boundaries |
||||||
|
* TODO: Can we test std dev between desired and actual? |
||||||
|
* TODO: Can we test cost with the algorithm from the controls challenge? |
||||||
|
* Reasonable steerActuatorDelay, check with PlotJuggler |
||||||
|
* Reasonable wheel touch threshold (DM, lane change) |
||||||
|
* Sane learned value for tire stiffness, CarParams startup value is set similarly |
||||||
|
* Sane learned value for steer ratio, CarParams startup value is set similarly |
||||||
|
|
||||||
|
## Longitudinal Control |
||||||
|
|
||||||
|
### Control with Stock ACC |
||||||
|
|
||||||
|
* Adaptive cruise is required: identify and reject engagement on non-adaptive cruise |
||||||
|
* Speed envelope probed, engagement limits set if other than full Stop-and-Go |
||||||
|
* Cancel spam works to maintain engagement state sync, reject engagements if needed |
||||||
|
* (Optional) Resume spam works from a standstill |
||||||
|
* (Optional) Identify faults like sensor-obstructed, populate in CarState |
||||||
|
|
||||||
|
### Control with openpilot |
||||||
|
|
||||||
|
* Use only safe APIs designed for highway speed ADAS |
||||||
|
* Probe the car's longitudinal control API limits |
||||||
|
* Identify speed envelope limits, any cutoff above zero handled correctly |
||||||
|
* Identify actuation limits, document even if openpilot cannot use the maximum |
||||||
|
* Don't exceed actuation limits in SAFETY.md |
||||||
|
* Longitudinal API fault signals must be populated in CarState, must alert on loss of control |
||||||
|
* Main switch on/off states explicitly identified (may require special state tracking) |
||||||
|
* All CC button signals explicitly identified, driver control experience matches stock |
||||||
|
* Test for good conformance to the openpilot longitudinal plan |
||||||
|
|
||||||
|
### Longitudinal Testing |
||||||
|
|
||||||
|
Applies to both stock and openpilot longitudinal control. |
||||||
|
|
||||||
|
* Good quality operation when cruising at various speeds |
||||||
|
* Good quality operation when tracking a lead car, including ACC braking |
||||||
|
* Driver gas override (with and without disengage-on-gas) |
||||||
|
* Short standstill, with automatic resume in traffic |
||||||
|
* Long standstill (look for unintended roll-away) |
||||||
|
* Disengage at standstill (look for unintended roll-away) |
||||||
|
* Rejected engagements are handled properly, openpilot/car engagement state remain synced |
||||||
|
* Brake signal is 100% reliable and 100% free of faults on disengage |
||||||
|
* Verify with very light braking (issues here with brake pressed switch vs pressure threshold) |
||||||
|
* Verify with ACC braking (make sure you're not looking at a brake light signal) |
||||||
|
* OR of multiple signals is acceptable |
||||||
|
|
||||||
|
## CarState and Miscellaneous |
||||||
|
|
||||||
|
* All CarState message frequencies match the car, or lowest freq if variable/triggered |
||||||
|
* Turn signals, note signal behavior (oscillating vs fixed, one-touch vs latched) |
||||||
|
* Doors, identify all |
||||||
|
* Seatbelt, identify driver |
||||||
|
* Parking brake (especially handbrake, EPB if it prevents ACC) |
||||||
|
* Gearshift position |
||||||
|
* Detect all gears on automatic transmissions, including sport and manumatic variants |
||||||
|
* Manual trans acceptable if Reverse is detected |
||||||
|
|
||||||
|
## Panda Safety |
||||||
|
|
||||||
|
* Lateral and longitudinal actuation limits are safe, and exactly match openpilot |
||||||
|
* Safety-relevant message sizes and frequencies checked, frequency checks match openpilot |
||||||
|
* Safety-relevant message checksums checked, if present |
||||||
|
* Safety-relevant message counters checked, if present |
||||||
|
* Verify source messages/signals actually (not functionally) identical to openpilot |
||||||
|
* Driver input torque for steering override |
||||||
|
* Brake (OR of multiple signals acceptable, still matching openpilot) |
||||||
|
* ACC control state, as applicable to that car |
||||||
|
* Gas |
||||||
|
* Speed |
||||||
|
* Cruise control buttons |
||||||
|
* Cancel/Set logic for stock ACC cars |
||||||
|
* Full cruise button logic for openpilot longitudinal cars |
||||||
|
* Match openpilot logic for detecting vehicle standstill |
||||||
|
* All CI tests passing, including MISRA |
||||||
|
* No instances of Controls Mismatch |
||||||
|
* No CAN messages dropped during normal driving (a few discards are expected at startup/shutdown) |
||||||
|
|
||||||
|
## Optional |
||||||
|
|
||||||
|
* openpilot longitudinal control |
||||||
|
* Radar points |
||||||
|
* BSM |
||||||
|
* Verify both presence/not-blinking and warning/blinking states |
||||||
|
* FCW/AEB |
||||||
|
* Detect activation of stock FCW/AEB (may be a good application for comma car dataset) |
||||||
|
* Signals for FCW/AEB actuation (this is still in development, extreme care required) |
Loading…
Reference in new issue