Move safety constants to opendbc (#34573)

* forgot these

* bump

* get these

* and flags

* fix

* bump

* test

* debug

* print sim thread errors
pull/34577/head
Shane Smiskol 3 months ago committed by GitHub
parent d98a554b17
commit d6a0e49def
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      .github/workflows/selfdrive_tests.yaml
  2. 2
      opendbc_repo
  3. 2
      panda
  4. 3
      selfdrive/car/card.py
  5. 3
      selfdrive/debug/clear_dtc.py
  6. 3
      selfdrive/debug/hyundai_enable_radar_points.py
  7. 3
      selfdrive/debug/read_dtc_status.py
  8. 3
      selfdrive/debug/vw_mqb_config.py
  9. 2
      selfdrive/selfdrived/selfdrived.py
  10. 16
      selfdrive/test/process_replay/migration.py
  11. 2
      selfdrive/test/process_replay/process_replay.py
  12. 9
      tools/sim/lib/simulated_car.py

@ -315,7 +315,7 @@ jobs:
run: | run: |
${{ env.RUN }} "source selfdrive/test/setup_xvfb.sh && \ ${{ env.RUN }} "source selfdrive/test/setup_xvfb.sh && \
source selfdrive/test/setup_vsound.sh && \ source selfdrive/test/setup_vsound.sh && \
CI=1 pytest tools/sim/tests/test_metadrive_bridge.py" CI=1 pytest -s tools/sim/tests/test_metadrive_bridge.py"
create_ui_report: create_ui_report:
# This job name needs to be the same as UI_JOB_NAME in ui_preview.yaml # This job name needs to be the same as UI_JOB_NAME in ui_preview.yaml

@ -1 +1 @@
Subproject commit 4bfb262fd52bc6946de1c8280efc424910bd9d60 Subproject commit 130bf3183f4ab871ee8dd56b122cfbb038542606

@ -1 +1 @@
Subproject commit 3ff97305c565d5e43931052b9ec4747b2f617401 Subproject commit 978ee190051806f8e5b7b8fede6b6be4e4db4aae

@ -7,8 +7,6 @@ import cereal.messaging as messaging
from cereal import car, log from cereal import car, log
from panda import ALTERNATIVE_EXPERIENCE
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper
from openpilot.common.swaglog import cloudlog, ForwardingHandler from openpilot.common.swaglog import cloudlog, ForwardingHandler
@ -19,6 +17,7 @@ from opendbc.car.carlog import carlog
from opendbc.car.fw_versions import ObdCallback from opendbc.car.fw_versions import ObdCallback
from opendbc.car.car_helpers import get_car, get_radar_interface from opendbc.car.car_helpers import get_car, get_radar_interface
from opendbc.car.interfaces import CarInterfaceBase, RadarInterfaceBase from opendbc.car.interfaces import CarInterfaceBase, RadarInterfaceBase
from opendbc.safety import ALTERNATIVE_EXPERIENCE
from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp from openpilot.selfdrive.pandad import can_capnp_to_list, can_list_to_can_capnp
from openpilot.selfdrive.car.cruise import VCruiseHelper from openpilot.selfdrive.car.cruise import VCruiseHelper
from openpilot.selfdrive.car.car_specific import MockCarState from openpilot.selfdrive.car.car_specific import MockCarState

@ -4,6 +4,7 @@ import argparse
from subprocess import check_output, CalledProcessError from subprocess import check_output, CalledProcessError
from opendbc.car.carlog import carlog from opendbc.car.carlog import carlog
from opendbc.car.uds import UdsClient, MessageTimeoutError, SESSION_TYPE, DTC_GROUP_TYPE from opendbc.car.uds import UdsClient, MessageTimeoutError, SESSION_TYPE, DTC_GROUP_TYPE
from opendbc.safety import Safety
from panda import Panda from panda import Panda
parser = argparse.ArgumentParser(description="clear DTC status") parser = argparse.ArgumentParser(description="clear DTC status")
@ -24,7 +25,7 @@ except CalledProcessError as e:
raise e raise e
panda = Panda() panda = Panda()
panda.set_safety_mode(Panda.SAFETY_ELM327) panda.set_safety_mode(Safety.SAFETY_ELM327)
uds_client = UdsClient(panda, args.addr, bus=args.bus) uds_client = UdsClient(panda, args.addr, bus=args.bus)
print("extended diagnostic session ...") print("extended diagnostic session ...")
try: try:

@ -18,6 +18,7 @@ from subprocess import check_output, CalledProcessError
from opendbc.car.carlog import carlog from opendbc.car.carlog import carlog
from opendbc.car.uds import UdsClient, SESSION_TYPE, DATA_IDENTIFIER_TYPE from opendbc.car.uds import UdsClient, SESSION_TYPE, DATA_IDENTIFIER_TYPE
from opendbc.safety import Safety
from panda.python import Panda from panda.python import Panda
class ConfigValues(NamedTuple): class ConfigValues(NamedTuple):
@ -96,7 +97,7 @@ if __name__ == "__main__":
sys.exit(0) sys.exit(0)
panda = Panda() panda = Panda()
panda.set_safety_mode(Panda.SAFETY_ELM327) panda.set_safety_mode(Safety.SAFETY_ELM327)
uds_client = UdsClient(panda, 0x7D0, bus=args.bus) uds_client = UdsClient(panda, 0x7D0, bus=args.bus)
print("\n[START DIAGNOSTIC SESSION]") print("\n[START DIAGNOSTIC SESSION]")

@ -4,6 +4,7 @@ import argparse
from subprocess import check_output, CalledProcessError from subprocess import check_output, CalledProcessError
from opendbc.car.carlog import carlog from opendbc.car.carlog import carlog
from opendbc.car.uds import UdsClient, SESSION_TYPE, DTC_REPORT_TYPE, DTC_STATUS_MASK_TYPE, get_dtc_num_as_str, get_dtc_status_names from opendbc.car.uds import UdsClient, SESSION_TYPE, DTC_REPORT_TYPE, DTC_STATUS_MASK_TYPE, get_dtc_num_as_str, get_dtc_status_names
from opendbc.safety import Safety
from panda import Panda from panda import Panda
parser = argparse.ArgumentParser(description="read DTC status") parser = argparse.ArgumentParser(description="read DTC status")
@ -24,7 +25,7 @@ except CalledProcessError as e:
raise e raise e
panda = Panda() panda = Panda()
panda.set_safety_mode(Panda.SAFETY_ELM327) panda.set_safety_mode(Safety.SAFETY_ELM327)
uds_client = UdsClient(panda, args.addr, bus=args.bus) uds_client = UdsClient(panda, args.addr, bus=args.bus)
print("extended diagnostic session ...") print("extended diagnostic session ...")
uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC) uds_client.diagnostic_session_control(SESSION_TYPE.EXTENDED_DIAGNOSTIC)

@ -6,6 +6,7 @@ from enum import IntEnum
from opendbc.car.carlog import carlog from opendbc.car.carlog import carlog
from opendbc.car.uds import UdsClient, MessageTimeoutError, NegativeResponseError, SESSION_TYPE,\ from opendbc.car.uds import UdsClient, MessageTimeoutError, NegativeResponseError, SESSION_TYPE,\
DATA_IDENTIFIER_TYPE, ACCESS_TYPE DATA_IDENTIFIER_TYPE, ACCESS_TYPE
from opendbc.safety import Safety
from panda import Panda from panda import Panda
from datetime import date from datetime import date
@ -38,7 +39,7 @@ if __name__ == "__main__":
carlog.setLevel('DEBUG') carlog.setLevel('DEBUG')
panda = Panda() panda = Panda()
panda.set_safety_mode(Panda.SAFETY_ELM327) panda.set_safety_mode(Safety.SAFETY_ELM327)
bus = 1 if panda.has_obd() else 0 bus = 1 if panda.has_obd() else 0
uds_client = UdsClient(panda, MQB_EPS_CAN_ADDR, MQB_EPS_CAN_ADDR + RX_OFFSET, bus, timeout=0.2) uds_client = UdsClient(panda, MQB_EPS_CAN_ADDR, MQB_EPS_CAN_ADDR + RX_OFFSET, bus, timeout=0.2)

@ -7,7 +7,7 @@ import cereal.messaging as messaging
from cereal import car, log from cereal import car, log
from msgq.visionipc import VisionIpcClient, VisionStreamType from msgq.visionipc import VisionIpcClient, VisionStreamType
from panda import ALTERNATIVE_EXPERIENCE from opendbc.safety import ALTERNATIVE_EXPERIENCE
from openpilot.common.params import Params from openpilot.common.params import Params

@ -6,15 +6,15 @@ import traceback
from cereal import messaging, car, log from cereal import messaging, car, log
from opendbc.car.fingerprints import MIGRATION from opendbc.car.fingerprints import MIGRATION
from opendbc.car.toyota.values import EPS_SCALE from opendbc.car.toyota.values import EPS_SCALE, ToyotaSafetyFlags
from opendbc.car.ford.values import CAR as FORD, FordFlags from opendbc.car.ford.values import CAR as FORD, FordFlags, FordSafetyFlags
from opendbc.car.hyundai.values import HyundaiSafetyFlags
from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.modeld.constants import ModelConstants
from openpilot.selfdrive.modeld.fill_model_msg import fill_xyz_poly, fill_lane_line_meta from openpilot.selfdrive.modeld.fill_model_msg import fill_xyz_poly, fill_lane_line_meta
from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_encode_index from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_encode_index
from openpilot.selfdrive.controls.lib.longitudinal_planner import get_accel_from_plan from openpilot.selfdrive.controls.lib.longitudinal_planner import get_accel_from_plan
from openpilot.system.manager.process_config import managed_processes from openpilot.system.manager.process_config import managed_processes
from openpilot.tools.lib.logreader import LogIterable from openpilot.tools.lib.logreader import LogIterable
from panda import Panda
MessageWithIndex = tuple[int, capnp.lib.capnp._DynamicStructReader] MessageWithIndex = tuple[int, capnp.lib.capnp._DynamicStructReader]
MigrationOps = tuple[list[tuple[int, capnp.lib.capnp._DynamicStructReader]], list[capnp.lib.capnp._DynamicStructReader], list[int]] MigrationOps = tuple[list[tuple[int, capnp.lib.capnp._DynamicStructReader]], list[capnp.lib.capnp._DynamicStructReader], list[int]]
@ -269,19 +269,19 @@ def migrate_carOutput(msgs):
def migrate_pandaStates(msgs): def migrate_pandaStates(msgs):
# TODO: safety param migration should be handled automatically # TODO: safety param migration should be handled automatically
safety_param_migration = { safety_param_migration = {
"TOYOTA_PRIUS": EPS_SCALE["TOYOTA_PRIUS"] | Panda.FLAG_TOYOTA_STOCK_LONGITUDINAL, "TOYOTA_PRIUS": EPS_SCALE["TOYOTA_PRIUS"] | ToyotaSafetyFlags.FLAG_TOYOTA_STOCK_LONGITUDINAL,
"TOYOTA_RAV4": EPS_SCALE["TOYOTA_RAV4"] | Panda.FLAG_TOYOTA_ALT_BRAKE, "TOYOTA_RAV4": EPS_SCALE["TOYOTA_RAV4"] | ToyotaSafetyFlags.FLAG_TOYOTA_ALT_BRAKE,
"KIA_EV6": Panda.FLAG_HYUNDAI_EV_GAS | Panda.FLAG_HYUNDAI_CANFD_HDA2, "KIA_EV6": HyundaiSafetyFlags.FLAG_HYUNDAI_EV_GAS | HyundaiSafetyFlags.FLAG_HYUNDAI_CANFD_HDA2,
} }
# TODO: get new Ford route # TODO: get new Ford route
safety_param_migration |= {car: Panda.FLAG_FORD_LONG_CONTROL for car in (set(FORD) - FORD.with_flags(FordFlags.CANFD))} safety_param_migration |= {car: FordSafetyFlags.FLAG_FORD_LONG_CONTROL for car in (set(FORD) - FORD.with_flags(FordFlags.CANFD))}
# Migrate safety param base on carParams # Migrate safety param base on carParams
CP = next((m.carParams for _, m in msgs if m.which() == 'carParams'), None) CP = next((m.carParams for _, m in msgs if m.which() == 'carParams'), None)
assert CP is not None, "carParams message not found" assert CP is not None, "carParams message not found"
fingerprint = MIGRATION.get(CP.carFingerprint, CP.carFingerprint) fingerprint = MIGRATION.get(CP.carFingerprint, CP.carFingerprint)
if fingerprint in safety_param_migration: if fingerprint in safety_param_migration:
safety_param = safety_param_migration[fingerprint] safety_param = safety_param_migration[fingerprint].value
elif len(CP.safetyConfigs): elif len(CP.safetyConfigs):
safety_param = CP.safetyConfigs[0].safetyParam safety_param = CP.safetyConfigs[0].safetyParam
if CP.safetyConfigs[0].safetyParamDEPRECATED != 0: if CP.safetyConfigs[0].safetyParamDEPRECATED != 0:

@ -18,11 +18,11 @@ from cereal import car
from cereal.services import SERVICE_LIST from cereal.services import SERVICE_LIST
from msgq.visionipc import VisionIpcServer, get_endpoint_name as vipc_get_endpoint_name from msgq.visionipc import VisionIpcServer, get_endpoint_name as vipc_get_endpoint_name
from opendbc.car.car_helpers import get_car, interfaces from opendbc.car.car_helpers import get_car, interfaces
from opendbc.safety import ALTERNATIVE_EXPERIENCE
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.common.prefix import OpenpilotPrefix from openpilot.common.prefix import OpenpilotPrefix
from openpilot.common.timeout import Timeout from openpilot.common.timeout import Timeout
from openpilot.common.realtime import DT_CTRL from openpilot.common.realtime import DT_CTRL
from panda.python import ALTERNATIVE_EXPERIENCE
from openpilot.selfdrive.car.card import can_comm_callbacks from openpilot.selfdrive.car.card import can_comm_callbacks
from openpilot.system.manager.process_config import managed_processes from openpilot.system.manager.process_config import managed_processes
from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state, available_streams from openpilot.selfdrive.test.process_replay.vision_meta import meta_from_camera_state, available_streams

@ -1,11 +1,12 @@
import traceback
import cereal.messaging as messaging import cereal.messaging as messaging
from opendbc.can.packer import CANPacker from opendbc.can.packer import CANPacker
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from opendbc.car.honda.values import HondaSafetyFlags
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp from openpilot.selfdrive.pandad.pandad_api_impl import can_list_to_can_capnp
from openpilot.tools.sim.lib.common import SimulatorState from openpilot.tools.sim.lib.common import SimulatorState
from panda.python import Panda
class SimulatedCar: class SimulatedCar:
@ -94,14 +95,18 @@ class SimulatedCar:
'controlsAllowed': True, 'controlsAllowed': True,
'safetyModel': 'hondaBosch', 'safetyModel': 'hondaBosch',
'alternativeExperience': self.sm["carParams"].alternativeExperience, 'alternativeExperience': self.sm["carParams"].alternativeExperience,
'safetyParam': Panda.FLAG_HONDA_RADARLESS | Panda.FLAG_HONDA_BOSCH_LONG, 'safetyParam': HondaSafetyFlags.FLAG_HONDA_RADARLESS.value | HondaSafetyFlags.FLAG_HONDA_BOSCH_LONG.value,
} }
self.pm.send('pandaStates', dat) self.pm.send('pandaStates', dat)
def update(self, simulator_state: SimulatorState): def update(self, simulator_state: SimulatorState):
try:
self.send_can_messages(simulator_state) self.send_can_messages(simulator_state)
if self.idx % 50 == 0: # only send panda states at 2hz if self.idx % 50 == 0: # only send panda states at 2hz
self.send_panda_state(simulator_state) self.send_panda_state(simulator_state)
self.idx += 1 self.idx += 1
except Exception:
traceback.print_exc()
raise

Loading…
Cancel
Save