Add exceptions and run generator

pull/23762/head
Shane Smiskol 3 years ago
parent 893f17692f
commit fd5a3540e1
  1. 110
      docs/CARS_generated.md
  2. 153
      docs/cars.py
  3. 2
      selfdrive/car/__init__.py

@ -1,6 +1,6 @@
## Gold Cars ## Gold Cars
|Make|Model (US Market Reference)|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained| |Make|Model|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained|
|---|---|---|:---:|:---:|:---:|:---:|:---:| |---|---|---|:---:|:---:|:---:|:---:|:---:|
|Genesis|G70 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Genesis|G70 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Elantra 2021|SCC + LKAS|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Elantra 2021|SCC + LKAS|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -25,7 +25,7 @@
|Lexus|RX 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|RX 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|RX Hybrid 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|RX Hybrid 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Alphard 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Alphard 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Camry 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Camry 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" /><sup>2</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Camry Hybrid 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Camry Hybrid 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Corolla Hybrid TSS2 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Corolla Hybrid TSS2 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Corolla TSS2 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Corolla TSS2 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -38,9 +38,8 @@
## Silver Cars ## Silver Cars
|Make|Model (US Market Reference)|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained| |Make|Model|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained|
|---|---|---|:---:|:---:|:---:|:---:|:---:| |---|---|---|:---:|:---:|:---:|:---:|:---:|
|Acura|RDX 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Audi|A3 2019|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Audi|A3 2019|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Audi|A3 Sportback e-tron 2018|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Audi|A3 Sportback e-tron 2018|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Audi|Q2 2018|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Audi|Q2 2018|ACC + Lane Assist|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -48,15 +47,6 @@
|Genesis|G70 2018|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Genesis|G70 2018|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Genesis|G80 2018|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Genesis|G80 2018|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Genesis|G90 2018|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />| |Genesis|G90 2018|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|
|Honda|Accord 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Accord Hybrid 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|CR-V 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|CR-V Hybrid 2019|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic (Bosch) 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic 2018|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic Sedan 1.6 DIESEL 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|E 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Insight 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Ioniq Electric 2020|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Ioniq Electric 2020|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Ioniq Hybrid 2022|SCC + LFA|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Ioniq Hybrid 2022|SCC + LFA|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Ioniq Plug-In Hybrid 2021|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Ioniq Plug-In Hybrid 2021|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -68,27 +58,25 @@
|Kia|Optima SX 2019 & 2016 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Kia|Optima SX 2019 & 2016 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Kia|Sorento GT-Line 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Kia|Sorento GT-Line 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Kia|Stinger GT2 2018|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Kia|Stinger GT2 2018|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|CT Hybrid 2018|LSS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|CT Hybrid 2018|LSS|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|ES Hybrid 2018|LSS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|ES Hybrid 2018|LSS|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|NX 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|NX 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|NX Hybrid 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|NX Hybrid 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|RX 2018|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|RX 2018|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Lexus|RX Hybrid 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Lexus|RX Hybrid 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|SEAT|Ateca 2018|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |SEAT|Ateca 2018|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|SEAT|Leon 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |SEAT|Leon 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Avalon 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Avalon 2022|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|C-HR 2021|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|C-HR 2021|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|C-HR Hybrid 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|C-HR Hybrid 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Camry 2020|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Camry 2020|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" /><sup>2</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Camry Hybrid 2020|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Camry Hybrid 2020|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" /><sup>2</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Highlander 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Highlander 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Highlander Hybrid 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Highlander Hybrid 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Prius 2020|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|RAV4 Hybrid 2018|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Prius v 2017|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Sienna 2020|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|RAV4 Hybrid 2018|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Arteon 2021<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Sienna 2020|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Atlas 2022<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Arteon 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Atlas 2022|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Golf 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Golf 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Golf Alltrack 2018|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Golf Alltrack 2018|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Golf GTE 2016|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Golf GTE 2016|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -98,15 +86,15 @@
|Volkswagen|Golf SportsVan 2016|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Golf SportsVan 2016|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Jetta 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Jetta 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Jetta GLI 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Jetta GLI 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Passat 2018|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Passat 2018<sup>5</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Polo 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Polo 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|T-Cross 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|T-Cross 2021<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|T-Roc 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|T-Roc 2021<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Taos 2022|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Taos 2022<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Tiguan 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Tiguan 2020<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Touran 2017|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|Touran 2017|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|e-Golf 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Volkswagen|e-Golf 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Škoda|Kamiq 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Škoda|Kamiq 2021<sup>4</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Škoda|Karoq 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Škoda|Karoq 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Škoda|Kodiaq 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Škoda|Kodiaq 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Škoda|Octavia 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Škoda|Octavia 2019|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -116,28 +104,36 @@
## Bronze Cars ## Bronze Cars
|Make|Model (US Market Reference)|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained| |Make|Model|Supported Package|openpilot Longitudinal|FSR Longitudinal|FSR Steering|Steering Torque|Actively Maintained|
|---|---|---|:---:|:---:|:---:|:---:|:---:| |---|---|---|:---:|:---:|:---:|:---:|:---:|
|Acura|ILX 2019|AcuraWatch Plus|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Acura|ILX 2019|AcuraWatch Plus|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Acura|RDX 2018|AcuraWatch Plus|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Acura|RDX 2018|AcuraWatch Plus|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Cadillac|Escalade ESV 2016|ACC + LKAS|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Acura|RDX 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chevrolet|Volt Premier 2018|Adaptive Cruise|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Cadillac|Escalade ESV 2016<sup>3</sup>|ACC + LKAS|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chevrolet|Volt Premier 2018<sup>3</sup>|Adaptive Cruise|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chrysler|Pacifica 2018|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Chrysler|Pacifica 2018|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chrysler|Pacifica 2020|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Chrysler|Pacifica 2020|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chrysler|Pacifica Hybrid 2017|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Chrysler|Pacifica Hybrid 2017|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chrysler|Pacifica Hybrid 2018|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Chrysler|Pacifica Hybrid 2018|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Chrysler|Pacifica Hybrid 2019|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Chrysler|Pacifica Hybrid 2019|Adaptive Cruise|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|GMC|Acadia Denali 2018|Adaptive Cruise|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |GMC|Acadia Denali 2018<sup>3</sup>|Adaptive Cruise|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|CR-V 2016|Touring|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Accord 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|CR-V EU 2016|Touring|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Accord Hybrid 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Fit 2019|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|CR-V 2016|Touring|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Freed 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|CR-V 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|HR-V 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|CR-V Hybrid 2019|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic Hatchback 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic Sedan/Coupe 2018|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Civic Sedan/Coupe 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|E 2020|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Fit 2019|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Freed 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|HR-V 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Insight 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Odyssey 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Odyssey 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Odyssey CHN 2020|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Passport 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Passport 2021|All|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Pilot 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Pilot 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Honda|Ridgeline 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Honda|Ridgeline 2021|Honda Sensing|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Elantra 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Elantra 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Genesis 2016|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Genesis 2016|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Hyundai|Ioniq Electric Limited 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Hyundai|Ioniq Electric Limited 2019|SCC + LKAS|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
@ -156,10 +152,12 @@
|Subaru|Forester 2021|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Subaru|Forester 2021|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Subaru|Impreza Limited 2019|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Subaru|Impreza Limited 2019|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Subaru|Impreza Sport 2021|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Subaru|Impreza Sport 2021|EyeSight|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Avalon 2021|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Avalon 2021|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Avalon 2022|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Avalon 2022|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Avalon Hybrid 2021|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Avalon Hybrid 2021|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|Corolla 2019|All|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Corolla 2019|All|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Toyota|RAV4 2018|TSS-P|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Prius 2020|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-half.png" width="22" /><sup>7</sup>|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|California 2021|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|Prius v 2017|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-half.png" width="22" /><sup>7</sup>|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Caravelle 2020|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />| |Toyota|RAV4 2018|TSS-P|<img src="assets/icon-star-half.png" width="22" /><sup>1</sup>|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|California 2021<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|
|Volkswagen|Caravelle 2020<sup>6</sup>|Driver Assistance|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-empty.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|<img src="assets/icon-star-full.png" width="22" />|

@ -2,10 +2,14 @@
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from enum import Enum from enum import Enum
import os import os
from typing import Dict
from common.basedir import BASEDIR from common.basedir import BASEDIR
from common.params import Params from common.params import Params
from selfdrive.car.car_helpers import interfaces, get_interface_attr from selfdrive.car.car_helpers import interfaces, get_interface_attr
from selfdrive.car.toyota.values import CAR as TOYOTA
from selfdrive.car.volkswagen.values import CAR as VOLKSWAGEN
from selfdrive.car.gm.values import CAR as GM
from selfdrive.test.test_routes import non_tested_cars from selfdrive.test.test_routes import non_tested_cars
@ -15,54 +19,127 @@ class Tier(Enum):
BRONZE = "Bronze" BRONZE = "Bronze"
class Car: class Column(Enum):
def __init__(self, car_info, CP): MAKE = "Make"
self.make, self.model = car_info.name.split(' ', 1) MODEL = "Model"
PACKAGE = "Supported Package"
assert len(car_info.years), 'Model {} has no years listed'.format(CP.carFingerprint) LONGITUDINAL = "openpilot Longitudinal"
FSR_LONGITUDINAL = "FSR Longitudinal"
# TODO: properly format model years FSR_STEERING = "FSR Steering"
years = ' ' + str(max(car_info.years)) STEERING_TORQUE = "Steering Torque"
self.model_string = "{}{}".format(self.model, years) SUPPORTED = "Actively Maintained"
self.package = car_info.package
self.stars = Stars(
CP.openpilotLongitudinalControl,
CP.minEnableSpeed <= 1e-3, # TODO: 0 is probably okay
CP.minSteerSpeed <= 1e-3,
CP.carName in MAKES_GOOD_STEERING_TORQUE,
# TODO: make sure this check is complete
CP.carFingerprint not in non_tested_cars,
)
def format_stars(self): StarColumns = list(Column)[3:]
# TODO: exceptions and half stars CarException = namedtuple("CarException", ["cars", "text", "column", "star"], defaults=[None])
return [STAR_ICON_FULL if cat else STAR_ICON_EMPTY for cat in self.stars]
@property
def tier(self):
return {5: Tier.GOLD, 4: Tier.SILVER}.get(sum(self.stars), Tier.BRONZE)
def make_row(columns): def make_row(columns):
return "|{}|".format("|".join(columns)) return "|{}|".format("|".join(columns))
# TODO: unify with column names below? def get_star_icon(variant):
Stars = namedtuple("Stars", ["op_long", "fsr_long", "fsr_lat", "steering_torque", "well_supported"]) return '<img src="assets/icon-star-{}.png" width="22" />'.format(variant)
def get_exceptions(CP) -> Dict[Column, CarException]:
exceptions = {}
for car_exception in CAR_EXCEPTIONS:
if CP.carFingerprint in car_exception.cars:
exceptions[car_exception.column] = car_exception
return exceptions
STAR_ICON_FULL = '<img src="assets/icon-star-full.png" width="22" />'
STAR_ICON_HALF = '<img src="assets/icon-star-half.png" width="22" />'
STAR_ICON_EMPTY = '<img src="assets/icon-star-empty.png" width="22" />'
CARS_MD_OUT = os.path.join(BASEDIR, "docs", "CARS_generated.md") CARS_MD_OUT = os.path.join(BASEDIR, "docs", "CARS_generated.md")
CAR_TABLE_COLUMNS = make_row(['Make', 'Model (US Market Reference)', 'Supported Package', 'openpilot Longitudinal',
'FSR Longitudinal', 'FSR Steering', 'Steering Torque', 'Actively Maintained'])
CAR_TABLE_HEADER = make_row(["---"] * 3 + [":---:"] * 5) # first three aren't centered CAR_TABLE_HEADER = make_row(["---"] * 3 + [":---:"] * 5) # first three aren't centered
CAR_ROW_TEMPLATE = make_row(["{}"] * 8)
# TODO: which other makes? # TODO: which other makes?
MAKES_GOOD_STEERING_TORQUE = ["toyota", "hyundai", "volkswagen"] MAKES_GOOD_STEERING_TORQUE = ["toyota", "hyundai", "volkswagen"]
CAR_EXCEPTIONS = [
CarException([TOYOTA.LEXUS_CTH, TOYOTA.LEXUS_ESH, TOYOTA.LEXUS_NX, TOYOTA.LEXUS_NXH, TOYOTA.LEXUS_RX,
TOYOTA.LEXUS_RXH, TOYOTA.AVALON, TOYOTA.AVALONH_2019, TOYOTA.COROLLA, TOYOTA.HIGHLANDER,
TOYOTA.HIGHLANDERH, TOYOTA.PRIUS, TOYOTA.PRIUS_V, TOYOTA.RAV4, TOYOTA.RAV4H, TOYOTA.SIENNA],
"When disconnecting the Driver Support Unit (DSU), openpilot Adaptive Cruise Control (ACC) will replace "
"stock Adaptive Cruise Control (ACC). NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).",
Column.LONGITUDINAL, star="half"),
CarException([TOYOTA.CAMRY, TOYOTA.CAMRY_TSS2, TOYOTA.CAMRYH],
"28mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.",
Column.FSR_LONGITUDINAL),
CarException([GM.ESCALADE_ESV, GM.VOLT, GM.ACADIA],
"Requires an [OBD-II](https://comma.ai/shop/products/comma-car-harness) car harness and [community built ASCM harness]"
"(https://github.com/commaai/openpilot/wiki/GM#hardware). NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).",
Column.MODEL),
CarException([VOLKSWAGEN.SKODA_KAMIQ_MK1],
"Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.",
Column.MODEL),
CarException([VOLKSWAGEN.PASSAT_MK8],
"Not including the USA/China market Passat, which is based on the (currently) unsupported PQ35/NMS platform.",
Column.MODEL),
CarException([VOLKSWAGEN.ARTEON_MK1, VOLKSWAGEN.ATLAS_MK1, VOLKSWAGEN.TRANSPORTER_T61, VOLKSWAGEN.TCROSS_MK1,
VOLKSWAGEN.TROC_MK1, VOLKSWAGEN.TAOS_MK1, VOLKSWAGEN.TIGUAN_MK2],
'Model-years 2021 and beyond may have a new camera harness design, which isn\'t yet available from the comma '
'store. Before ordering, remove the Lane Assist camera cover and check to see if the connector is black '
'(older design) or light brown (newer design). For the newer design, in the interim, choose "VW J533 Development" '
'from the vehicle drop-down for a harness that integrates at the CAN gateway inside the dashboard.',
Column.MODEL),
CarException([TOYOTA.PRIUS, TOYOTA.PRIUS_V],
"An inaccurate steering wheel angle sensor makes precise control difficult.",
Column.STEERING_TORQUE, star="half"),
]
class Car:
def __init__(self, car_info, CP):
self.make, self.model = car_info.name.split(' ', 1)
self.car_fingerprint = CP.carFingerprint
assert len(car_info.years), 'Model {} has no years listed'.format(CP.carFingerprint)
# TODO: properly format model years
years = ' ' + str(max(car_info.years))
self.model_string = "{}{}".format(self.model, years)
self.package = car_info.package
self.exceptions = get_exceptions(CP)
self.stars = self._calculate_stars(CP, car_info)
@property
def row(self):
# TODO: add YouTube videos
row = [self.make, self.model_string, self.package, *map(get_star_icon, self.stars)]
# Check for car exceptions
for row_idx, column in enumerate(Column):
exception = self.exceptions.get(column, None)
if exception is not None:
superscript_number = CAR_EXCEPTIONS.index(exception) + 1
row[row_idx] += "<sup>{}</sup>".format(superscript_number)
return make_row(row)
@property
def tier(self):
return {5: Tier.GOLD, 4: Tier.SILVER}.get(self.stars.count("full"), Tier.BRONZE)
def _calculate_stars(self, CP, car_info):
# Some minimum steering speeds are not yet in CarParams
min_steer_speed = CP.minSteerSpeed
if car_info.min_steer_speed is not None:
min_steer_speed = car_info.min_steer_speed
assert CP.minSteerSpeed == 0, "Minimum steer speed set in both CarInfo and CarParams for {}".format(
CP.carFingerprint)
# TODO: make sure well supported check is complete
stars = [CP.openpilotLongitudinalControl, CP.minEnableSpeed <= 1e-3, min_steer_speed <= 1e-3,
CP.carName in MAKES_GOOD_STEERING_TORQUE, CP.carFingerprint not in non_tested_cars]
# Check for star demotions from exceptions
for idx, (star, column) in enumerate(zip(stars, StarColumns)):
star = "full" if star else "empty"
exception = self.exceptions.get(column, None)
if exception is not None and exception.star is not None:
star = exception.star.lower()
stars[idx] = star
return stars
def generate_cars_md(): def generate_cars_md():
@ -90,14 +167,10 @@ def generate_cars_md():
cars = sorted(tiered_cars[tier], key=lambda car: car.make + car.model_string) cars = sorted(tiered_cars[tier], key=lambda car: car.make + car.model_string)
cars_md_doc.append("## {} Cars\n".format(tier.name.title())) cars_md_doc.append("## {} Cars\n".format(tier.name.title()))
cars_md_doc.append(CAR_TABLE_COLUMNS)
cars_md_doc.append(make_row([column.value for column in Column]))
cars_md_doc.append(CAR_TABLE_HEADER) cars_md_doc.append(CAR_TABLE_HEADER)
for car in cars: cars_md_doc.extend(map(lambda car: car.row, cars))
line = CAR_ROW_TEMPLATE.format(car.make,
car.model_string,
car.package,
*car.format_stars())
cars_md_doc.append(line)
cars_md_doc.append("") # newline cars_md_doc.append("") # newline
return '\n'.join(cars_md_doc) return '\n'.join(cars_md_doc)

@ -7,7 +7,7 @@ from common.numpy_fast import clip
# kg of standard extra cargo to count for drive, gas, etc... # kg of standard extra cargo to count for drive, gas, etc...
STD_CARGO_KG = 136. STD_CARGO_KG = 136.
CarInfo = namedtuple('CarInfo', ['name', 'years', 'package', 'min_steer_speed'], defaults=[0]) CarInfo = namedtuple('CarInfo', ['name', 'years', 'package', 'min_steer_speed'], defaults=[None])
def gen_empty_fingerprint(): def gen_empty_fingerprint():

Loading…
Cancel
Save