From 89a11b1ca54f36cde8773f205e7d34765ea3565b Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 18 Jul 2022 17:53:00 -0700 Subject: [PATCH] simplify compatibility docs (#25190) * simplify tiers * little more * cleanup * fix test old-commit-hash: 500d16622c2c2a60d11539f20f7dda5205bb0915 --- docs/CARS.md | 422 ++++++++++++++---------------- selfdrive/car/CARS_template.md | 16 +- selfdrive/car/docs.py | 31 +-- selfdrive/car/docs_definitions.py | 48 ++-- selfdrive/car/tests/test_docs.py | 8 +- 5 files changed, 239 insertions(+), 286 deletions(-) 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")