mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-07-14 13:52:12 +08:00
bf8262394f
* make CAR class enum, and values.py formatting * Revert "make CAR class enum, and values.py formatting" This reverts commit 04d9817e9d5d6ab5c027754018fc445f2cd3067a. * stash * add supported packages and model years * don't change model years in fps * move Lexus to info dict and make int enum * remove sometimes wrong model years from name string * use enum names * convert Honda's values * nice names * use name * GM * Mazda, Ford * Hyundai: WIP * finish Hyundai * fix * Nissan * Subaru * Tesla * formatting is for another PR * Chrysler: todo: unify the Pacificas? * do volkswagen * this isn't a zoo * skip enums for now * Update selfdrive/car/volkswagen/values.py Co-authored-by: Jason Young <46612682+jyoung8607@users.noreply.github.com> * set All * temp cars * auto-generate CARS.md * update type hinting * add generated file * add longitudinal star to cars that support disabling radar * add TODO * add notes * add min_steer_speed exception for hatchback * add minimum steering speeds * Add exceptions and run generator * Missing Telluride * fix Prius v * missing Prius Prime generate * start to convert years to strings * Fixup Hyundai * convert year sets to strings * handle this * missing S3 * Fix and add all missing cars (verified with script * Supported Package fixes * add get_tiered_cars * Check radarOffCan for removing most Honda from op long * Update for Avalon stop and go update on master * Fix missing car params * add my temporary script i'm using to verify new generated DBC add my temporary script i'm using to verify new generated DBC * generate with jinja template * add header and footer * clean up * rename rename * add exceptions. jinja is nice, but why are its loop indexes starting at 1? * add list of known car videos * See how these look * Add nice table formatting for column description Add nice table formatting for column description * generate * consisten br tag * small clean up * temp * Move car videos into CarInfo * add new copy and rename to footnotes * Revert "temp" This reverts commit 93c3fce1d3ab406f80cbfb9c00c2237d109c7846. clean up * generate * replace with svg * simplify a bit * add footnotes to CarInfo * move some variables to docs.py * Add video link for Acadia * Make Footnote an enum so we don't use random ints * static analysis fixes * move to CARS.md * fix last missing footnote * add to release files * rm test file * use svg generate * fix sorting * not needed * not sure how this got here * remove Sedan/Couple and add Diesel footnote * finish todos * move make specific footnotes to selfdrive/car/*/values.py rename * change to zeros * align bottom to center * Apply some suggestions * Update selfdrive/car/mock/values.py Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> * Update copy * Try headers + bullet points * somehow better somehow better * finish updating copy * move template and add links to sups * stars shouldn't be clickable that didn't work try this try this this is better * add type hints to CarInfo add more type hinting * optional needs a type and any covers all (?) * move good steering torque to */values.py * dataclasses are much nicer than attr * use tuple * Update docs/cars.py Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> * suggestions * suggestions * suggestions remove * clean up a bit * add more type hints * center stars and remove hardcoding from template * update copy * Add test * Fix types Fix types * add supported cars documentation test * clean up * replace with docs_definitions * Add back Footnote enums * Ah so these are like fstrings! * Update selfdrive/car/CARS_template.md Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> * Update selfdrive/car/docs.py Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> * Update year from master merge * Fix longitudinal star from merge * sort properly stars by Column enum * clean up * HKG: Sorry guys * Prius V gets FSR star, like others * Update selfdrive/car/docs.py Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> * update comment * No Prius docs change for now Co-authored-by: Jason Young <46612682+jyoung8607@users.noreply.github.com> Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com> old-commit-hash: 31a6b141d6c37d7241146a9dc7b3a10313abdc40
102 lines
3.0 KiB
Python
102 lines
3.0 KiB
Python
from collections import namedtuple
|
|
from dataclasses import dataclass
|
|
from enum import Enum
|
|
from typing import List, Optional
|
|
|
|
|
|
@dataclass
|
|
class CarInfo:
|
|
name: str
|
|
package: str
|
|
video_link: Optional[str] = None
|
|
footnotes: Optional[List[Enum]] = None
|
|
min_steer_speed: Optional[float] = None
|
|
min_enable_speed: Optional[float] = None
|
|
good_torque: bool = False
|
|
|
|
def get_stars(self, CP, non_tested_cars):
|
|
# TODO: set all the min steer speeds in carParams and remove this
|
|
min_steer_speed = CP.minSteerSpeed
|
|
if self.min_steer_speed is not None:
|
|
min_steer_speed = self.min_steer_speed
|
|
assert CP.minSteerSpeed == 0, f"Minimum steer speed set in both CarInfo and CarParams for {CP.carFingerprint}"
|
|
|
|
# TODO: set all the min enable speeds in carParams correctly and remove this
|
|
min_enable_speed = CP.minEnableSpeed
|
|
if self.min_enable_speed is not None:
|
|
min_enable_speed = self.min_enable_speed
|
|
|
|
stars = {
|
|
Column.LONGITUDINAL: CP.openpilotLongitudinalControl and not CP.radarOffCan,
|
|
Column.FSR_LONGITUDINAL: min_enable_speed <= 0.,
|
|
Column.FSR_STEERING: min_steer_speed <= 0.,
|
|
Column.STEERING_TORQUE: self.good_torque,
|
|
Column.MAINTAINED: CP.carFingerprint not in non_tested_cars,
|
|
}
|
|
|
|
for column in StarColumns:
|
|
stars[column] = Star.FULL if stars[column] else Star.EMPTY
|
|
|
|
# Demote if footnote specifies a star
|
|
footnote = get_footnote(self.footnotes, column)
|
|
if footnote is not None and footnote.value.star is not None:
|
|
stars[column] = footnote.value.star
|
|
|
|
return [stars[column] for column in StarColumns]
|
|
|
|
def get_row(self, all_footnotes, stars):
|
|
# TODO: add YouTube vidos
|
|
make, model = self.name.split(' ', 1)
|
|
row = [make, model, self.package, *stars]
|
|
|
|
# Check for car footnotes and get star icons
|
|
for row_idx, column in enumerate(Column):
|
|
if column in StarColumns:
|
|
row[row_idx] = row[row_idx].icon
|
|
|
|
footnote = get_footnote(self.footnotes, column)
|
|
if footnote is not None:
|
|
row[row_idx] += f"[<sup>{all_footnotes[footnote]}</sup>](#Footnotes)"
|
|
|
|
return row
|
|
|
|
|
|
class Tier(Enum):
|
|
GOLD = "Gold"
|
|
SILVER = "Silver"
|
|
BRONZE = "Bronze"
|
|
|
|
|
|
class Column(Enum):
|
|
MAKE = "Make"
|
|
MODEL = "Model"
|
|
PACKAGE = "Supported Package"
|
|
LONGITUDINAL = "openpilot ACC"
|
|
FSR_LONGITUDINAL = "Stop and Go"
|
|
FSR_STEERING = "Steer to 0"
|
|
STEERING_TORQUE = "Steering Torque"
|
|
MAINTAINED = "Actively Maintained"
|
|
|
|
|
|
class Star(Enum):
|
|
FULL = "full"
|
|
HALF = "half"
|
|
EMPTY = "empty"
|
|
|
|
@property
|
|
def icon(self):
|
|
return f'<a href="#"><img valign="top" src="assets/icon-star-{self.value}.svg" width="22" /></a>'
|
|
|
|
|
|
StarColumns = list(Column)[3:]
|
|
CarFootnote = namedtuple("CarFootnote", ["text", "column", "star"], defaults=[None])
|
|
|
|
|
|
def get_footnote(footnotes: Optional[List[Enum]], column: Column) -> Optional[Enum]:
|
|
# Returns applicable footnote given current column
|
|
if footnotes is not None:
|
|
for fn in footnotes:
|
|
if fn.value.column == column:
|
|
return fn
|
|
return None
|