diff --git a/docs/CARS.md b/docs/CARS.md
index 78044d9fb5..0fee4ddc84 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -2,20 +2,9 @@
A supported vehicle is one that just works when you install a comma device. Every car performs differently with openpilot, but all supported cars should provide a better experience than any stock system.
-Cars are organized into three tiers:
-
-- Gold - The best openpilot experience. Great highway driving and beyond.
-- Silver - A solid highway driving experience, but is limited by stock longitudinal. May be upgraded in the future.
-- Bronze - A good highway experience, but may have limited performance in traffic and on sharp turns.
-
How We Rate The Cars
---
-### openpilot Adaptive Cruise Control (ACC)
--
- openpilot is able to control the gas and brakes.
--
- openpilot is able to control the gas and brakes with some restrictions.
--
- The gas and brakes are controlled by the car's stock Adaptive Cruise Control (ACC) system.
-
### Stop and Go
-
- Adaptive Cruise Control (ACC) operates down to 0 mph.
-
- Adaptive Cruise Control (ACC) available only above certain speeds. See your car's manual for the minimum speed.
@@ -25,223 +14,206 @@ How We Rate The Cars
-
- No steering control below certain speeds.
### Steering Torque
--
- Car has enough steering torque to take tighter turns.
--
- Car has enough steering torque for comfortable highway driving.
+-
- Car has enough steering torque to take tight turns.
-
- Limited ability to make turns.
-### Actively Maintained
--
- Mainline software support, harness hardware sold by comma, lots of users, primary development target.
--
- Low user count, community maintained, harness hardware not sold by comma.
-
-**All supported cars can move between the tiers as support changes.**
-
-# Gold - 30 cars
-
-|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
-|---|---|---|:---:|:---:|:---:|:---:|:---:|
-|comma|body|All|
|
|
|
|
|
-|Genesis|G70 2020|All|
|
|
|
|
|
-|Hyundai|Palisade 2020-21|All|
|
|
|
|
|
-|Hyundai|Santa Fe 2019-20|All|
|
|
|
|
|
-|Hyundai|Sonata 2020-22|All|
|
|
|
|
|
-|Hyundai|Sonata Hybrid 2020-22|All|
|
|
|
|
|
-|Kia|Niro Electric 2019-20|All|
|
|
|
|
|
-|Kia|Niro Electric 2021|All|
|
|
|
|
|
-|Kia|Niro Electric 2022|All|
|
|
|
|
|
-|Kia|Telluride 2020|SCC + LKAS|
|
|
|
|
|
-|Lexus|ES 2019-22|All|
|
|
|
|
|
-|Lexus|ES Hybrid 2019-22|All|
|
|
|
|
|
-|Lexus|NX 2020-21|All|
|
|
|
|
|
-|Lexus|NX Hybrid 2020-21|All|
|
|
|
|
|
-|Lexus|RX 2020-22|All|
|
|
|
|
|
-|Lexus|UX Hybrid 2019-22|All|
|
|
|
|
|
-|Toyota|Avalon 2022|All|
|
|
|
|
|
-|Toyota|Avalon Hybrid 2022|All|
|
|
|
|
|
-|Toyota|Camry 2021-22|All|
|
[4](#footnotes)|
|
|
|
-|Toyota|Camry Hybrid 2021-22|All|
|
|
|
|
|
-|Toyota|Corolla 2020-22|All|
|
|
|
|
|
-|Toyota|Corolla Hatchback 2019-22|All|
|
|
|
|
|
-|Toyota|Corolla Hybrid 2020-22|All|
|
|
|
|
|
-|Toyota|Highlander 2020-22|All|
|
|
|
|
|
-|Toyota|Highlander Hybrid 2020-22|All|
|
|
|
|
|
-|Toyota|Mirai 2021|All|
|
|
|
|
|
-|Toyota|Prius 2021-22|All|
|
|
|
|
|
-|Toyota|Prius Prime 2021-22|All|
|
|
|
|
|
-|Toyota|RAV4 2019-21|All|
|
|
|
|
|
-|Toyota|RAV4 Hybrid 2019-21|All|
|
|
|
|
|
-
-# Silver - 78 cars
-
-|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
-|---|---|---|:---:|:---:|:---:|:---:|:---:|
-|Audi|A3 2014-19|ACC + Lane Assist|
|
|
|
|
|
-|Audi|A3 Sportback e-tron 2017-18|ACC + Lane Assist|
|
|
|
|
|
-|Audi|RS3 2018|ACC + Lane Assist|
|
|
|
|
|
-|Audi|S3 2015-17|ACC + Lane Assist|
|
|
|
|
|
-|Chevrolet|Volt 2017-18[1](#footnotes)|Adaptive Cruise|
|
|
|
|
|
-|Genesis|G70 2018-19|All|
|
|
|
|
|
-|Genesis|G80 2017-19|All|
|
|
|
|
|
-|Hyundai|Elantra 2021-22|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Elantra Hybrid 2021-22|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Ioniq Electric 2020|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Ioniq Hybrid 2020-22|SCC + LFA|
|
|
|
|
|
-|Hyundai|Ioniq Plug-in Hybrid 2020-21|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Kona 2020|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Kona Electric 2018-21|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Kona Hybrid 2020|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Santa Fe 2021-22|All|
|
|
|
|
|
-|Hyundai|Santa Fe Hybrid 2022|All|
|
|
|
|
|
-|Hyundai|Santa Fe Plug-in Hybrid 2022|All|
|
|
|
|
|
-|Hyundai|Tucson Diesel 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|Ceed 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|EV6 2022|All|
|
|
|
|
|
-|Kia|Forte 2018|SCC + LKAS|
|
|
|
|
|
-|Kia|Forte 2019-21|SCC + LKAS|
|
|
|
|
|
-|Kia|K5 2021-22|SCC|
|
|
|
|
|
-|Kia|Niro Hybrid 2021|SCC + LKAS|
|
|
|
|
|
-|Kia|Niro Hybrid 2022|SCC + LKAS|
|
|
|
|
|
-|Kia|Optima 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|Seltos 2021|SCC + LKAS|
|
|
|
|
|
-|Kia|Sorento 2018|SCC + LKAS|
|
|
|
|
|
-|Kia|Sorento 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|Stinger 2018-20|SCC + LKAS|
|
|
|
|
|
-|Lexus|CT Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
|
-|Lexus|ES Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
|
-|Lexus|NX 2018-19|All|
[3](#footnotes)|
|
|
|
|
-|Lexus|NX Hybrid 2018-19|All|
[3](#footnotes)|
|
|
|
|
-|Lexus|RX Hybrid 2020-21|All|
|
|
|
|
|
-|Nissan|Altima 2019-20|ProPILOT|
|
|
|
|
|
-|Nissan|Leaf 2018-22|ProPILOT|
|
|
|
|
|
-|Nissan|Rogue 2018-20|ProPILOT|
|
|
|
|
|
-|Nissan|X-Trail 2017|ProPILOT|
|
|
|
|
|
-|SEAT|Ateca 2018|Driver Assistance|
|
|
|
|
|
-|SEAT|Leon 2014-20|Driver Assistance|
|
|
|
|
|
-|Subaru|Ascent 2019-21|All|
|
|
|
|
|
-|Subaru|Crosstrek 2020-21|EyeSight|
|
|
|
|
|
-|Subaru|Forester 2019-22|All|
|
|
|
|
|
-|Subaru|Impreza 2020-22|EyeSight|
|
|
|
|
|
-|Subaru|XV 2020-21|EyeSight|
|
|
|
|
|
-|Toyota|Alphard 2019-20|All|
|
|
|
|
|
-|Toyota|Alphard Hybrid 2021|All|
|
|
|
|
|
-|Toyota|Camry 2018-20|All|
|
[4](#footnotes)|
|
|
|
-|Toyota|Camry Hybrid 2018-20|All|
|
[4](#footnotes)|
|
|
|
-|Toyota|Corolla Cross 2020-21 (Non-US only)|All|
|
|
|
|
|
-|Toyota|Corolla Cross Hybrid 2020-22 (Non-US only)|All|
|
|
|
|
|
-|Toyota|Highlander 2017-19|All|
[3](#footnotes)|
|
|
|
|
-|Toyota|Highlander Hybrid 2017-19|All|
[3](#footnotes)|
|
|
|
|
-|Toyota|Prius 2016-20|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|Prius Prime 2017-20|All|
[3](#footnotes)|
|
|
|
|
-|Toyota|RAV4 2022|All|
|
|
|
|
|
-|Toyota|RAV4 Hybrid 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|RAV4 Hybrid 2022|All|
|
|
|
|
|
-|Volkswagen|Atlas 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Atlas Cross Sport 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|e-Golf 2014-20|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf 2015-20[8](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf Alltrack 2015-19|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf GTD 2015-20|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf GTE 2015-20|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf GTI 2015-21|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf R 2015-19[8](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Golf SportsVan 2015-20|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Passat 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Passat Alltrack 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Passat GTE 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Polo 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Polo GTI 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Teramont 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Teramont Cross Sport 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Teramont X 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-
-# Bronze - 84 cars
-
-|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
-|---|---|---|:---:|:---:|:---:|:---:|:---:|
-|Acura|ILX 2016-19|AcuraWatch Plus|
|
|
|
|
|
-|Acura|RDX 2016-18|AcuraWatch Plus|
|
|
|
|
|
-|Acura|RDX 2019-22|All|
|
|
|
|
|
-|Audi|Q2 2018|ACC + Lane Assist|
|
|
|
|
|
-|Audi|Q3 2020-21|ACC + Lane Assist|
|
|
|
|
|
-|Cadillac|Escalade ESV 2016[1](#footnotes)|ACC + LKAS|
|
|
|
|
|
-|Chrysler|Pacifica 2017-18|Adaptive Cruise|
|
|
|
|
|
-|Chrysler|Pacifica 2019-20|Adaptive Cruise|
|
|
|
|
|
-|Chrysler|Pacifica 2021|All|
|
|
|
|
|
-|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise|
|
|
|
|
|
-|Chrysler|Pacifica Hybrid 2019-22|Adaptive Cruise|
|
|
|
|
|
-|Genesis|G90 2017-18|All|
|
|
|
|
|
-|GMC|Acadia 2018[1](#footnotes)|Adaptive Cruise|
|
|
|
|
|
-|Honda|Accord 2018-22|All|
|
|
|
|
|
-|Honda|Accord Hybrid 2018-22|All|
|
|
|
|
|
-|Honda|Civic 2016-18|Honda Sensing|
|
|
|
|
|
-|Honda|Civic 2019-21|All|
|
|
[2](#footnotes)|
|
|
-|Honda|Civic 2022|All|
|
|
|
|
|
-|Honda|Civic Hatchback 2017-21|Honda Sensing|
|
|
|
|
|
-|Honda|Civic Hatchback 2022|All|
|
|
|
|
|
-|Honda|CR-V 2015-16|Touring|
|
|
|
|
|
-|Honda|CR-V 2017-22|Honda Sensing|
|
|
|
|
|
-|Honda|CR-V Hybrid 2017-19|Honda Sensing|
|
|
|
|
|
-|Honda|e 2020|All|
|
|
|
|
|
-|Honda|Fit 2018-20|Honda Sensing|
|
|
|
|
|
-|Honda|Freed 2020|Honda Sensing|
|
|
|
|
|
-|Honda|HR-V 2019-22|Honda Sensing|
|
|
|
|
|
-|Honda|Insight 2019-22|All|
|
|
|
|
|
-|Honda|Inspire 2018|All|
|
|
|
|
|
-|Honda|Odyssey 2018-22|Honda Sensing|
|
|
|
|
|
-|Honda|Passport 2019-21|All|
|
|
|
|
|
-|Honda|Pilot 2016-22|Honda Sensing|
|
|
|
|
|
-|Honda|Ridgeline 2017-22|Honda Sensing|
|
|
|
|
|
-|Hyundai|Elantra 2017-19|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Genesis 2015-16|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Ioniq Electric 2019|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Ioniq Hybrid 2017-19|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Ioniq Plug-in Hybrid 2019|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Sonata 2018-19|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Tucson 2021|SCC + LKAS|
|
|
|
|
|
-|Hyundai|Veloster 2019-20|SCC + LKAS|
|
|
|
|
|
-|Jeep|Grand Cherokee 2016-18|Adaptive Cruise|
|
|
|
|
|
-|Jeep|Grand Cherokee 2019-21|Adaptive Cruise|
|
|
|
|
|
-|Kia|Niro Plug-in Hybrid 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|Optima 2017|SCC + LKAS|
|
|
|
|
|
-|Lexus|IS 2017-19|All|
|
|
|
|
|
-|Lexus|RC 2017-2020|All|
|
|
|
|
|
-|Lexus|RX 2016-18|All|
[3](#footnotes)|
|
|
|
|
-|Lexus|RX Hybrid 2016-19|All|
[3](#footnotes)|
|
|
|
|
-|Mazda|CX-5 2022|All|
|
|
|
|
|
-|Mazda|CX-9 2021-22|All|
|
|
|
|
|
-|Ram|1500 2019-22|Adaptive Cruise|
|
|
|
|
|
-|Subaru|Crosstrek 2018-19|EyeSight|
|
|
|
|
|
-|Subaru|Impreza 2017-19|EyeSight|
|
|
|
|
|
-|Subaru|XV 2018-19|EyeSight|
|
|
|
|
|
-|Škoda|Kamiq 2021[5](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Škoda|Karoq 2019|Driver Assistance|
|
|
|
|
|
-|Škoda|Kodiaq 2018-19|Driver Assistance|
|
|
|
|
|
-|Škoda|Octavia 2015, 2018-19|Driver Assistance|
|
|
|
|
|
-|Škoda|Octavia RS 2016|Driver Assistance|
|
|
|
|
|
-|Škoda|Scala 2020|Driver Assistance|
|
|
|
|
|
-|Škoda|Superb 2015-18|Driver Assistance|
|
|
|
|
|
-|Toyota|Avalon 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|Avalon 2019-21|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|Avalon Hybrid 2019-21|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|C-HR 2017-21|All|
|
|
|
|
|
-|Toyota|C-HR Hybrid 2017-19|All|
|
|
|
|
|
-|Toyota|Corolla 2017-19|All|
[3](#footnotes)|
|
|
|
|
-|Toyota|Prius v 2017|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|RAV4 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
|
-|Toyota|Sienna 2018-20|All|
[3](#footnotes)|
|
|
|
|
-|Volkswagen|Arteon 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Arteon eHybrid 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Arteon R 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|California 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Caravelle 2020[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|CC 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Jetta 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Jetta GLI 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|T-Cross 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|T-Roc 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Taos 2022[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Tiguan 2019-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|
-|Volkswagen|Touran 2017|Driver Assistance|
|
|
|
|
|
+# 192 Supported Cars
+
+|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|
+|---|---|---|:---:|:---:|:---:|:---:|
+|Acura|ILX 2016-19|AcuraWatch Plus|
|
|
|
|
+|Acura|RDX 2016-18|AcuraWatch Plus|
|
|
|
|
+|Acura|RDX 2019-22|All|
|
|
|
|
+|Audi|A3 2014-19|ACC + Lane Assist|
|
|
|
|
+|Audi|A3 Sportback e-tron 2017-18|ACC + Lane Assist|
|
|
|
|
+|Audi|Q2 2018|ACC + Lane Assist|
|
|
|
|
+|Audi|Q3 2020-21|ACC + Lane Assist|
|
|
|
|
+|Audi|RS3 2018|ACC + Lane Assist|
|
|
|
|
+|Audi|S3 2015-17|ACC + Lane Assist|
|
|
|
|
+|Cadillac|Escalade ESV 2016[1](#footnotes)|ACC + LKAS|
|
|
|
|
+|Chevrolet|Volt 2017-18[1](#footnotes)|Adaptive Cruise|
|
|
|
|
+|Chrysler|Pacifica 2017-18|Adaptive Cruise|
|
|
|
|
+|Chrysler|Pacifica 2019-20|Adaptive Cruise|
|
|
|
|
+|Chrysler|Pacifica 2021|All|
|
|
|
|
+|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise|
|
|
|
|
+|Chrysler|Pacifica Hybrid 2019-22|Adaptive Cruise|
|
|
|
|
+|comma|body|All|
|
|
|
|
+|Genesis|G70 2018-19|All|
|
|
|
|
+|Genesis|G70 2020|All|
|
|
|
|
+|Genesis|G80 2017-19|All|
|
|
|
|
+|Genesis|G90 2017-18|All|
|
|
|
|
+|GMC|Acadia 2018[1](#footnotes)|Adaptive Cruise|
|
|
|
|
+|Honda|Accord 2018-22|All|
|
|
|
|
+|Honda|Accord Hybrid 2018-22|All|
|
|
|
|
+|Honda|Civic 2016-18|Honda Sensing|
|
|
|
|
+|Honda|Civic 2019-21|All|
|
|
[2](#footnotes)|
|
+|Honda|Civic 2022|All|
|
|
|
|
+|Honda|Civic Hatchback 2017-21|Honda Sensing|
|
|
|
|
+|Honda|Civic Hatchback 2022|All|
|
|
|
|
+|Honda|CR-V 2015-16|Touring|
|
|
|
|
+|Honda|CR-V 2017-22|Honda Sensing|
|
|
|
|
+|Honda|CR-V Hybrid 2017-19|Honda Sensing|
|
|
|
|
+|Honda|e 2020|All|
|
|
|
|
+|Honda|Fit 2018-20|Honda Sensing|
|
|
|
|
+|Honda|Freed 2020|Honda Sensing|
|
|
|
|
+|Honda|HR-V 2019-22|Honda Sensing|
|
|
|
|
+|Honda|Insight 2019-22|All|
|
|
|
|
+|Honda|Inspire 2018|All|
|
|
|
|
+|Honda|Odyssey 2018-22|Honda Sensing|
|
|
|
|
+|Honda|Passport 2019-21|All|
|
|
|
|
+|Honda|Pilot 2016-22|Honda Sensing|
|
|
|
|
+|Honda|Ridgeline 2017-22|Honda Sensing|
|
|
|
|
+|Hyundai|Elantra 2017-19|SCC + LKAS|
|
|
|
|
+|Hyundai|Elantra 2021-22|SCC + LKAS|
|
|
|
|
+|Hyundai|Elantra Hybrid 2021-22|SCC + LKAS|
|
|
|
|
+|Hyundai|Genesis 2015-16|SCC + LKAS|
|
|
|
|
+|Hyundai|Ioniq Electric 2019|SCC + LKAS|
|
|
|
|
+|Hyundai|Ioniq Electric 2020|SCC + LKAS|
|
|
|
|
+|Hyundai|Ioniq Hybrid 2017-19|SCC + LKAS|
|
|
|
|
+|Hyundai|Ioniq Hybrid 2020-22|SCC + LFA|
|
|
|
|
+|Hyundai|Ioniq Plug-in Hybrid 2019|SCC + LKAS|
|
|
|
|
+|Hyundai|Ioniq Plug-in Hybrid 2020-21|SCC + LKAS|
|
|
|
|
+|Hyundai|Kona 2020|SCC + LKAS|
|
|
|
|
+|Hyundai|Kona Electric 2018-21|SCC + LKAS|
|
|
|
|
+|Hyundai|Kona Hybrid 2020|SCC + LKAS|
|
|
|
|
+|Hyundai|Palisade 2020-21|All|
|
|
|
|
+|Hyundai|Santa Fe 2019-20|All|
|
|
|
|
+|Hyundai|Santa Fe 2021-22|All|
|
|
|
|
+|Hyundai|Santa Fe Hybrid 2022|All|
|
|
|
|
+|Hyundai|Santa Fe Plug-in Hybrid 2022|All|
|
|
|
|
+|Hyundai|Sonata 2018-19|SCC + LKAS|
|
|
|
|
+|Hyundai|Sonata 2020-22|All|
|
|
|
|
+|Hyundai|Sonata Hybrid 2020-22|All|
|
|
|
|
+|Hyundai|Tucson 2021|SCC + LKAS|
|
|
|
|
+|Hyundai|Tucson Diesel 2019|SCC + LKAS|
|
|
|
|
+|Hyundai|Veloster 2019-20|SCC + LKAS|
|
|
|
|
+|Jeep|Grand Cherokee 2016-18|Adaptive Cruise|
|
|
|
|
+|Jeep|Grand Cherokee 2019-21|Adaptive Cruise|
|
|
|
|
+|Kia|Ceed 2019|SCC + LKAS|
|
|
|
|
+|Kia|EV6 2022|All|
|
|
|
|
+|Kia|Forte 2018|SCC + LKAS|
|
|
|
|
+|Kia|Forte 2019-21|SCC + LKAS|
|
|
|
|
+|Kia|K5 2021-22|SCC|
|
|
|
|
+|Kia|Niro Electric 2019-20|All|
|
|
|
|
+|Kia|Niro Electric 2021|All|
|
|
|
|
+|Kia|Niro Electric 2022|All|
|
|
|
|
+|Kia|Niro Hybrid 2021|SCC + LKAS|
|
|
|
|
+|Kia|Niro Hybrid 2022|SCC + LKAS|
|
|
|
|
+|Kia|Niro Plug-in Hybrid 2019|SCC + LKAS|
|
|
|
|
+|Kia|Optima 2017|SCC + LKAS|
|
|
|
|
+|Kia|Optima 2019|SCC + LKAS|
|
|
|
|
+|Kia|Seltos 2021|SCC + LKAS|
|
|
|
|
+|Kia|Sorento 2018|SCC + LKAS|
|
|
|
|
+|Kia|Sorento 2019|SCC + LKAS|
|
|
|
|
+|Kia|Stinger 2018-20|SCC + LKAS|
|
|
|
|
+|Kia|Telluride 2020|SCC + LKAS|
|
|
|
|
+|Lexus|CT Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
+|Lexus|ES 2019-22|All|
|
|
|
|
+|Lexus|ES Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
+|Lexus|ES Hybrid 2019-22|All|
|
|
|
|
+|Lexus|IS 2017-19|All|
|
|
|
|
+|Lexus|NX 2018-19|All|
[3](#footnotes)|
|
|
|
+|Lexus|NX 2020-21|All|
|
|
|
|
+|Lexus|NX Hybrid 2018-19|All|
[3](#footnotes)|
|
|
|
+|Lexus|NX Hybrid 2020-21|All|
|
|
|
|
+|Lexus|RC 2017-2020|All|
|
|
|
|
+|Lexus|RX 2016-18|All|
[3](#footnotes)|
|
|
|
+|Lexus|RX 2020-22|All|
|
|
|
|
+|Lexus|RX Hybrid 2016-19|All|
[3](#footnotes)|
|
|
|
+|Lexus|RX Hybrid 2020-21|All|
|
|
|
|
+|Lexus|UX Hybrid 2019-22|All|
|
|
|
|
+|Mazda|CX-5 2022|All|
|
|
|
|
+|Mazda|CX-9 2021-22|All|
|
|
|
|
+|Nissan|Altima 2019-20|ProPILOT|
|
|
|
|
+|Nissan|Leaf 2018-22|ProPILOT|
|
|
|
|
+|Nissan|Rogue 2018-20|ProPILOT|
|
|
|
|
+|Nissan|X-Trail 2017|ProPILOT|
|
|
|
|
+|Ram|1500 2019-22|Adaptive Cruise|
|
|
|
|
+|SEAT|Ateca 2018|Driver Assistance|
|
|
|
|
+|SEAT|Leon 2014-20|Driver Assistance|
|
|
|
|
+|Subaru|Ascent 2019-21|All|
|
|
|
|
+|Subaru|Crosstrek 2018-19|EyeSight|
|
|
|
|
+|Subaru|Crosstrek 2020-21|EyeSight|
|
|
|
|
+|Subaru|Forester 2019-22|All|
|
|
|
|
+|Subaru|Impreza 2017-19|EyeSight|
|
|
|
|
+|Subaru|Impreza 2020-22|EyeSight|
|
|
|
|
+|Subaru|XV 2018-19|EyeSight|
|
|
|
|
+|Subaru|XV 2020-21|EyeSight|
|
|
|
|
+|Škoda|Kamiq 2021[5](#footnotes)|Driver Assistance|
|
|
|
|
+|Škoda|Karoq 2019|Driver Assistance|
|
|
|
|
+|Škoda|Kodiaq 2018-19|Driver Assistance|
|
|
|
|
+|Škoda|Octavia 2015, 2018-19|Driver Assistance|
|
|
|
|
+|Škoda|Octavia RS 2016|Driver Assistance|
|
|
|
|
+|Škoda|Scala 2020|Driver Assistance|
|
|
|
|
+|Škoda|Superb 2015-18|Driver Assistance|
|
|
|
|
+|Toyota|Alphard 2019-20|All|
|
|
|
|
+|Toyota|Alphard Hybrid 2021|All|
|
|
|
|
+|Toyota|Avalon 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|Avalon 2019-21|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|Avalon 2022|All|
|
|
|
|
+|Toyota|Avalon Hybrid 2019-21|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|Avalon Hybrid 2022|All|
|
|
|
|
+|Toyota|C-HR 2017-21|All|
|
|
|
|
+|Toyota|C-HR Hybrid 2017-19|All|
|
|
|
|
+|Toyota|Camry 2018-20|All|
|
[4](#footnotes)|
|
|
+|Toyota|Camry 2021-22|All|
|
[4](#footnotes)|
|
|
+|Toyota|Camry Hybrid 2018-20|All|
|
[4](#footnotes)|
|
|
+|Toyota|Camry Hybrid 2021-22|All|
|
|
|
|
+|Toyota|Corolla 2017-19|All|
[3](#footnotes)|
|
|
|
+|Toyota|Corolla 2020-22|All|
|
|
|
|
+|Toyota|Corolla Cross 2020-21 (Non-US only)|All|
|
|
|
|
+|Toyota|Corolla Cross Hybrid 2020-22 (Non-US only)|All|
|
|
|
|
+|Toyota|Corolla Hatchback 2019-22|All|
|
|
|
|
+|Toyota|Corolla Hybrid 2020-22|All|
|
|
|
|
+|Toyota|Highlander 2017-19|All|
[3](#footnotes)|
|
|
|
+|Toyota|Highlander 2020-22|All|
|
|
|
|
+|Toyota|Highlander Hybrid 2017-19|All|
[3](#footnotes)|
|
|
|
+|Toyota|Highlander Hybrid 2020-22|All|
|
|
|
|
+|Toyota|Mirai 2021|All|
|
|
|
|
+|Toyota|Prius 2016-20|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|Prius 2021-22|All|
|
|
|
|
+|Toyota|Prius Prime 2017-20|All|
[3](#footnotes)|
|
|
|
+|Toyota|Prius Prime 2021-22|All|
|
|
|
|
+|Toyota|Prius v 2017|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|RAV4 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|RAV4 2019-21|All|
|
|
|
|
+|Toyota|RAV4 2022|All|
|
|
|
|
+|Toyota|RAV4 Hybrid 2016-18|TSS-P|
[3](#footnotes)|
|
|
|
+|Toyota|RAV4 Hybrid 2019-21|All|
|
|
|
|
+|Toyota|RAV4 Hybrid 2022|All|
|
|
|
|
+|Toyota|Sienna 2018-20|All|
[3](#footnotes)|
|
|
|
+|Volkswagen|Arteon 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Arteon eHybrid 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Arteon R 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Atlas 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Atlas Cross Sport 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|California 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Caravelle 2020[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|CC 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|e-Golf 2014-20|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf 2015-20[8](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf Alltrack 2015-19|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf GTD 2015-20|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf GTE 2015-20|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf GTI 2015-21|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf R 2015-19[8](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Golf SportsVan 2015-20|Driver Assistance|
|
|
|
|
+|Volkswagen|Jetta 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Jetta GLI 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Passat 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Passat Alltrack 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Passat GTE 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Polo 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Polo GTI 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|T-Cross 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|T-Roc 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Taos 2022[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Teramont 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Teramont Cross Sport 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Teramont X 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Tiguan 2019-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Touran 2017|Driver Assistance|
|
|
|
|
1Requires an OBD-II car harness and community built ASCM harness. NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).
diff --git a/selfdrive/car/CARS_template.md b/selfdrive/car/CARS_template.md
index 891445a558..8603f31434 100644
--- a/selfdrive/car/CARS_template.md
+++ b/selfdrive/car/CARS_template.md
@@ -5,12 +5,6 @@
A supported vehicle is one that just works when you install a comma device. Every car performs differently with openpilot, but all supported cars should provide a better experience than any stock system.
-Cars are organized into three tiers:
-
-{% for tier in tiers %}
-- {{tier.name.title()}} - {{tier.value}}
-{% endfor %}
-
How We Rate The Cars
---
@@ -23,20 +17,16 @@ How We Rate The Cars
{% endfor %}
{% endfor %}
-**All supported cars can move between the tiers as support changes.**
-{% for tier, cars in tiers.items() %}
-# {{tier.name.title()}} - {{cars | length}} cars
+# {{all_car_info | length}} Supported Cars
|{{Column | map(attribute='value') | join('|')}}|
-|---|---|---|:---:|:---:|:---:|:---:|:---:|
-{% for car_info in cars %}
+|---|---|---|:---:|:---:|:---:|:---:|
+{% for car_info in all_car_info %}
|{% for column in Column %}{{car_info.get_column(column, star_icon, footnote_tag)}}|{% endfor %}
{% endfor %}
-{% endfor %}
-
{% for footnote in footnotes %}
{{loop.index}}{{footnote}}
diff --git a/selfdrive/car/docs.py b/selfdrive/car/docs.py
index 860503dbdd..5831916039 100755
--- a/selfdrive/car/docs.py
+++ b/selfdrive/car/docs.py
@@ -7,7 +7,7 @@ from natsort import natsorted
from typing import Dict, List
from common.basedir import BASEDIR
-from selfdrive.car.docs_definitions import STAR_DESCRIPTIONS, CarInfo, Column, Star, Tier
+from selfdrive.car.docs_definitions import STAR_DESCRIPTIONS, StarColumns, TierColumns, CarInfo, Column, Star
from selfdrive.car.car_helpers import interfaces, get_interface_attr
from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR as HKG_RADAR_START_ADDR
from selfdrive.car.tests.routes import non_tested_cars
@@ -47,25 +47,21 @@ def get_all_car_info() -> List[CarInfo]:
return sorted_cars
-def sort_by_tier(all_car_info: List[CarInfo]) -> Dict[Tier, List[CarInfo]]:
- tier_car_info: Dict[Tier, List[CarInfo]] = {tier: [] for tier in Tier}
- for car_info in all_car_info:
- tier_car_info[car_info.tier].append(car_info)
-
- # Sort cars by make and model + year
- for tier, cars in tier_car_info.items():
- tier_car_info[tier] = natsorted(cars, key=lambda car: (car.make + car.model).lower())
-
- return tier_car_info
-
-
-def generate_cars_md(all_car_info: List[CarInfo], template_fn: str) -> str:
+def generate_cars_md(all_car_info: List[CarInfo], template_fn: str, only_tier_cols: bool) -> str:
with open(template_fn, "r") as f:
template = jinja2.Template(f.read(), trim_blocks=True, lstrip_blocks=True)
+ cols = list(Column)
+ if only_tier_cols:
+ hide_cols = set(StarColumns) - set(TierColumns)
+ cols = [c for c in cols if c not in hide_cols]
+ for car in all_car_info:
+ for c in hide_cols:
+ del car.row[c]
+
footnotes = [fn.value.text for fn in ALL_FOOTNOTES]
- cars_md: str = template.render(tiers=sort_by_tier(all_car_info), all_car_info=all_car_info,
- footnotes=footnotes, Star=Star, Column=Column, star_descriptions=STAR_DESCRIPTIONS)
+ cars_md: str = template.render(all_car_info=all_car_info,
+ footnotes=footnotes, Star=Star, Column=cols, star_descriptions=STAR_DESCRIPTIONS)
return cars_md
@@ -73,10 +69,11 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Auto generates supported cars documentation",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument("--tier-columns", action="store_true", help="Include only columns that count in the tier")
parser.add_argument("--template", default=CARS_MD_TEMPLATE, help="Override default template filename")
parser.add_argument("--out", default=CARS_MD_OUT, help="Override default generated filename")
args = parser.parse_args()
with open(args.out, 'w') as f:
- f.write(generate_cars_md(get_all_car_info(), args.template))
+ f.write(generate_cars_md(get_all_car_info(), args.template, args.tier_columns))
print(f"Generated and written to {args.out}")
diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py
index 1efa23037f..99873a9c23 100644
--- a/selfdrive/car/docs_definitions.py
+++ b/selfdrive/car/docs_definitions.py
@@ -1,5 +1,3 @@
-import math
-
from cereal import car
from collections import namedtuple
from dataclasses import dataclass
@@ -12,9 +10,9 @@ GOOD_TORQUE_THRESHOLD = 1.0 # m/s^2
class Tier(Enum):
- GOLD = "The best openpilot experience. Great highway driving and beyond."
- SILVER = "A solid highway driving experience, but is limited by stock longitudinal. May be upgraded in the future."
- BRONZE = "A good highway experience, but may have limited performance in traffic and on sharp turns."
+ GOLD = 0
+ SILVER = 1
+ BRONZE = 2
class Column(Enum):
@@ -25,7 +23,6 @@ class Column(Enum):
FSR_LONGITUDINAL = "Stop and Go"
FSR_STEERING = "Steer to 0"
STEERING_TORQUE = "Steering Torque"
- MAINTAINED = "Actively Maintained"
class Star(Enum):
@@ -35,6 +32,7 @@ class Star(Enum):
StarColumns = list(Column)[3:]
+TierColumns = (Column.FSR_LONGITUDINAL, Column.FSR_STEERING, Column.STEERING_TORQUE)
CarFootnote = namedtuple("CarFootnote", ["text", "column", "star"], defaults=[None])
@@ -72,6 +70,7 @@ class CarInfo:
min_enable_speed = self.min_enable_speed
self.car_name = CP.carName
+ self.car_fingerprint = CP.carFingerprint
self.make, self.model = self.name.split(' ', 1)
self.row = {
Column.MAKE: self.make,
@@ -82,17 +81,14 @@ class CarInfo:
Column.FSR_LONGITUDINAL: Star.FULL if min_enable_speed <= 0. else Star.EMPTY,
Column.FSR_STEERING: Star.FULL if min_steer_speed <= 0. else Star.EMPTY,
# Column.STEERING_TORQUE set below
- Column.MAINTAINED: Star.FULL if CP.carFingerprint not in non_tested_cars and self.harness is not Harness.none else Star.EMPTY,
}
# Set steering torque star from max lateral acceleration
- if not math.isnan(CP.maxLateralAccel):
- if CP.maxLateralAccel >= GREAT_TORQUE_THRESHOLD:
- self.row[Column.STEERING_TORQUE] = Star.FULL
- elif CP.maxLateralAccel >= GOOD_TORQUE_THRESHOLD:
- self.row[Column.STEERING_TORQUE] = Star.HALF
- else:
- self.row[Column.STEERING_TORQUE] = Star.EMPTY
+ assert CP.maxLateralAccel > 0.1
+ if CP.maxLateralAccel >= GOOD_TORQUE_THRESHOLD:
+ self.row[Column.STEERING_TORQUE] = Star.FULL
+ else:
+ self.row[Column.STEERING_TORQUE] = Star.EMPTY
if CP.notCar:
for col in StarColumns:
@@ -105,7 +101,15 @@ class CarInfo:
if footnote is not None and footnote.value.star is not None:
self.row[column] = footnote.value.star
- self.tier = {5: Tier.GOLD, 4: Tier.SILVER}.get(list(self.row.values()).count(Star.FULL), Tier.BRONZE)
+ # openpilot ACC star doesn't count for tiers
+ full_stars = [s for col, s in self.row.items() if col in TierColumns].count(Star.FULL)
+ if full_stars == len(TierColumns):
+ self.tier = Tier.GOLD
+ elif full_stars == (len(TierColumns)-1):
+ self.tier = Tier.SILVER
+ else:
+ self.tier = Tier.BRONZE
+
return self
@no_type_check
@@ -156,11 +160,6 @@ class Harness(Enum):
STAR_DESCRIPTIONS = {
"Gas & Brakes": { # icon and row name
- "openpilot Adaptive Cruise Control (ACC)": [ # star column
- [Star.FULL.value, "openpilot is able to control the gas and brakes."],
- [Star.HALF.value, "openpilot is able to control the gas and brakes with some restrictions."],
- [Star.EMPTY.value, "The gas and brakes are controlled by the car's stock Adaptive Cruise Control (ACC) system."],
- ],
Column.FSR_LONGITUDINAL.value: [
[Star.FULL.value, "Adaptive Cruise Control (ACC) operates down to 0 mph."],
[Star.EMPTY.value, "Adaptive Cruise Control (ACC) available only above certain speeds. See your car's manual for the minimum speed."],
@@ -172,15 +171,8 @@ STAR_DESCRIPTIONS = {
[Star.EMPTY.value, "No steering control below certain speeds."],
],
Column.STEERING_TORQUE.value: [
- [Star.FULL.value, "Car has enough steering torque to take tighter turns."],
- [Star.HALF.value, "Car has enough steering torque for comfortable highway driving."],
+ [Star.FULL.value, "Car has enough steering torque to take tight turns."],
[Star.EMPTY.value, "Limited ability to make turns."],
],
},
- "Support": {
- Column.MAINTAINED.value: [
- [Star.FULL.value, "Mainline software support, harness hardware sold by comma, lots of users, primary development target."],
- [Star.EMPTY.value, "Low user count, community maintained, harness hardware not sold by comma."],
- ],
- },
}
diff --git a/selfdrive/car/tests/test_docs.py b/selfdrive/car/tests/test_docs.py
index 98c909a9be..dbdd9769de 100755
--- a/selfdrive/car/tests/test_docs.py
+++ b/selfdrive/car/tests/test_docs.py
@@ -4,6 +4,7 @@ import unittest
from selfdrive.car.car_helpers import interfaces, get_interface_attr
from selfdrive.car.docs import CARS_MD_OUT, CARS_MD_TEMPLATE, generate_cars_md, get_all_car_info
from selfdrive.car.docs_definitions import Column, Star
+from selfdrive.car.honda.values import CAR as HONDA
class TestCarDocs(unittest.TestCase):
@@ -11,7 +12,7 @@ class TestCarDocs(unittest.TestCase):
self.all_cars = get_all_car_info()
def test_generator(self):
- generated_cars_md = generate_cars_md(self.all_cars, CARS_MD_TEMPLATE)
+ generated_cars_md = generate_cars_md(self.all_cars, CARS_MD_TEMPLATE, False)
with open(CARS_MD_OUT, "r") as f:
current_cars_md = f.read()
@@ -43,8 +44,9 @@ class TestCarDocs(unittest.TestCase):
# Asserts brand-specific assumptions around steering torque star
for car in self.all_cars:
with self.subTest(car=car):
- if car.car_name == "honda":
- self.assertIn(car.row[Column.STEERING_TORQUE], (Star.EMPTY, Star.HALF), f"{car.name} has full torque star")
+ # honda sanity check, it's the definition of a no torque star
+ if car.car_fingerprint in (HONDA.ACCORD, HONDA.CIVIC, HONDA.CRV, HONDA.ODYSSEY, HONDA.PILOT):
+ self.assertEqual(car.row[Column.STEERING_TORQUE], Star.EMPTY, f"{car.name} has full torque star")
elif car.car_name in ("toyota", "hyundai"):
self.assertNotEqual(car.row[Column.STEERING_TORQUE], Star.EMPTY, f"{car.name} has no torque star")