You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							2.9 KiB
						
					
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							2.9 KiB
						
					
					
				from dataclasses import dataclass, field
 | 
						|
from enum import IntFlag
 | 
						|
 | 
						|
from cereal import car
 | 
						|
from openpilot.common.conversions import Conversions as CV
 | 
						|
from openpilot.selfdrive.car import CarSpecs, DbcDict, PlatformConfig, Platforms, dbc_dict
 | 
						|
from openpilot.selfdrive.car.docs_definitions import CarHarness, CarDocs, CarParts
 | 
						|
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
 | 
						|
 | 
						|
Ecu = car.CarParams.Ecu
 | 
						|
 | 
						|
 | 
						|
# Steer torque limits
 | 
						|
 | 
						|
class CarControllerParams:
 | 
						|
  STEER_MAX = 800                # theoretical max_steer 2047
 | 
						|
  STEER_DELTA_UP = 10             # torque increase per refresh
 | 
						|
  STEER_DELTA_DOWN = 25           # torque decrease per refresh
 | 
						|
  STEER_DRIVER_ALLOWANCE = 15     # allowed driver torque before start limiting
 | 
						|
  STEER_DRIVER_MULTIPLIER = 1     # weight driver torque
 | 
						|
  STEER_DRIVER_FACTOR = 1         # from dbc
 | 
						|
  STEER_ERROR_MAX = 350           # max delta between torque cmd and torque motor
 | 
						|
  STEER_STEP = 1  # 100 Hz
 | 
						|
 | 
						|
  def __init__(self, CP):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class MazdaCarDocs(CarDocs):
 | 
						|
  package: str = "All"
 | 
						|
  car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.mazda]))
 | 
						|
 | 
						|
 | 
						|
@dataclass(frozen=True, kw_only=True)
 | 
						|
class MazdaCarSpecs(CarSpecs):
 | 
						|
  tireStiffnessFactor: float = 0.7  # not optimized yet
 | 
						|
 | 
						|
 | 
						|
class MazdaFlags(IntFlag):
 | 
						|
  # Static flags
 | 
						|
  # Gen 1 hardware: same CAN messages and same camera
 | 
						|
  GEN1 = 1
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class MazdaPlatformConfig(PlatformConfig):
 | 
						|
  dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('mazda_2017', None))
 | 
						|
  flags: int = MazdaFlags.GEN1
 | 
						|
 | 
						|
 | 
						|
class CAR(Platforms):
 | 
						|
  MAZDA_CX5 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda CX-5 2017-21")],
 | 
						|
    MazdaCarSpecs(mass=3655 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=15.5)
 | 
						|
  )
 | 
						|
  MAZDA_CX9 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda CX-9 2016-20")],
 | 
						|
    MazdaCarSpecs(mass=4217 * CV.LB_TO_KG, wheelbase=3.1, steerRatio=17.6)
 | 
						|
  )
 | 
						|
  MAZDA_3 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda 3 2017-18")],
 | 
						|
    MazdaCarSpecs(mass=2875 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=14.0)
 | 
						|
  )
 | 
						|
  MAZDA_6 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda 6 2017-20")],
 | 
						|
    MazdaCarSpecs(mass=3443 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=15.5)
 | 
						|
  )
 | 
						|
  MAZDA_CX9_2021 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda CX-9 2021-23", video_link="https://youtu.be/dA3duO4a0O4")],
 | 
						|
    MAZDA_CX9.specs
 | 
						|
  )
 | 
						|
  MAZDA_CX5_2022 = MazdaPlatformConfig(
 | 
						|
    [MazdaCarDocs("Mazda CX-5 2022-24")],
 | 
						|
    MAZDA_CX5.specs,
 | 
						|
  )
 | 
						|
 | 
						|
 | 
						|
class LKAS_LIMITS:
 | 
						|
  STEER_THRESHOLD = 15
 | 
						|
  DISABLE_SPEED = 45    # kph
 | 
						|
  ENABLE_SPEED = 52     # kph
 | 
						|
 | 
						|
 | 
						|
class Buttons:
 | 
						|
  NONE = 0
 | 
						|
  SET_PLUS = 1
 | 
						|
  SET_MINUS = 2
 | 
						|
  RESUME = 3
 | 
						|
  CANCEL = 4
 | 
						|
 | 
						|
 | 
						|
FW_QUERY_CONFIG = FwQueryConfig(
 | 
						|
  requests=[
 | 
						|
    # TODO: check data to ensure ABS does not skip ISO-TP frames on bus 0
 | 
						|
    Request(
 | 
						|
      [StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST],
 | 
						|
      [StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE],
 | 
						|
      bus=0,
 | 
						|
    ),
 | 
						|
  ],
 | 
						|
)
 | 
						|
 | 
						|
DBC = CAR.create_dbc_map()
 | 
						|
 |