Ejemplo n.º 1
0
    def setUpClass(cls):
        if "DEBUG" in os.environ:
            segs = filter(
                lambda x: os.path.exists(os.path.join(x, "rlog.bz2")),
                Path(ROOT).iterdir())
            segs = sorted(segs, key=lambda x: x.stat().st_mtime)
            cls.lr = list(LogReader(os.path.join(segs[-1], "rlog.bz2")))
            return

        os.environ['SKIP_FW_QUERY'] = "1"
        os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019"
        set_params_enabled()

        # Make sure athena isn't running
        Params().delete("DongleId")
        Params().delete("AthenadPid")
        os.system("pkill -9 -f athena")

        logger_root = Path(ROOT)
        initial_segments = set()
        if logger_root.exists():
            initial_segments = set(Path(ROOT).iterdir())

        # start manager and run openpilot for a minute
        try:
            manager_path = os.path.join(BASEDIR,
                                        "selfdrive/manager/manager.py")
            proc = subprocess.Popen(["python", manager_path])

            sm = messaging.SubMaster(['carState'])
            with Timeout(150, "controls didn't start"):
                while sm.rcv_frame['carState'] < 0:
                    sm.update(1000)

            # make sure we get at least two full segments
            cls.segments = []
            with Timeout(300, "timed out waiting for logs"):
                while len(cls.segments) < 3:
                    new_paths = set()
                    if logger_root.exists():
                        new_paths = set(
                            logger_root.iterdir()) - initial_segments
                    segs = [p for p in new_paths if "--" in str(p)]
                    cls.segments = sorted(
                        segs, key=lambda s: int(str(s).rsplit('--')[-1]))
                    time.sleep(5)

        finally:
            proc.terminate()
            if proc.wait(60) is None:
                proc.kill()

        cls.lrs = [
            list(LogReader(os.path.join(str(s), "rlog.bz2")))
            for s in cls.segments
        ]

        # use the second segment by default as it's the first full segment
        cls.lr = list(LogReader(os.path.join(str(cls.segments[1]),
                                             "rlog.bz2")))
Ejemplo n.º 2
0
    def setUpClass(cls):
        os.environ['SKIP_FW_QUERY'] = "1"
        os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019"
        set_params_enabled()

        initial_segments = set(Path(ROOT).iterdir())

        # start manager and run openpilot for a minute
        try:
            manager_path = os.path.join(BASEDIR,
                                        "selfdrive/manager/manager.py")
            proc = subprocess.Popen(["python", manager_path])

            sm = messaging.SubMaster(['carState'])
            with Timeout(150, "controls didn't start"):
                while sm.rcv_frame['carState'] < 0:
                    sm.update(1000)

            # make sure we get at least two full segments
            cls.segments = []
            with Timeout(300, "timed out waiting for logs"):
                while len(cls.segments) < 3:
                    new_paths = set(Path(ROOT).iterdir()) - initial_segments
                    segs = [p for p in new_paths if "--" in str(p)]
                    cls.segments = sorted(
                        segs, key=lambda s: int(str(s).rsplit('--')[-1]))
                    time.sleep(5)

        finally:
            proc.terminate()
            if proc.wait(60) is None:
                proc.kill()

        cls.lr = list(LogReader(os.path.join(str(cls.segments[1]),
                                             "rlog.bz2")))
Ejemplo n.º 3
0
def test_alert_sounds():
  set_params_enabled()
  pm = messaging.PubMaster(['deviceState', 'controlsState'])

  # make sure they're all defined
  alert_sounds = {v: k for k, v in car.CarControl.HUDControl.AudibleAlert.schema.enumerants.items()}
  diff = set(SOUNDS.keys()).symmetric_difference(alert_sounds.keys())
  assert len(diff) == 0, f"not all sounds defined in test: {diff}"

  # wait for procs to init
  time.sleep(5)

  msg = messaging.new_message('deviceState')
  msg.deviceState.started = True
  pm.send('deviceState', msg)

  for sound, expected_writes in SOUNDS.items():
    print(f"testing {alert_sounds[sound]}")
    start_writes = get_total_writes()

    for _ in range(int(9 / DT_CTRL)):
      msg = messaging.new_message('controlsState')
      msg.controlsState.enabled = True
      msg.controlsState.active = True
      msg.controlsState.alertSound = sound
      msg.controlsState.alertType = str(sound)
      msg.controlsState.alertText1 = "Testing Sounds"
      msg.controlsState.alertText2 = f"playing {alert_sounds[sound]}"
      msg.controlsState.alertSize = log.ControlsState.AlertSize.mid
      pm.send('controlsState', msg)
      time.sleep(DT_CTRL)

    tolerance = (expected_writes % 100) * 2
    actual_writes = get_total_writes() - start_writes
    assert abs(expected_writes - actual_writes) <= tolerance, f"{alert_sounds[sound]}: expected {expected_writes} writes, got {actual_writes}"
Ejemplo n.º 4
0
    def setUpClass(cls):
        os.environ['SKIP_FW_QUERY'] = "1"
        os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019"
        set_params_enabled()

        Panda().reset()

        initial_segments = set(Path(ROOT).iterdir())

        # start manager and run openpilot for a minute
        try:
            manager_path = os.path.join(BASEDIR, "selfdrive/manager.py")
            proc = subprocess.Popen(["python", manager_path])

            sm = messaging.SubMaster(['carState'])
            with Timeout(150, "controls didn't start"):
                while sm.rcv_frame['carState'] < 0:
                    sm.update(1000)

            time.sleep(60)
        finally:
            proc.terminate()
            if proc.wait(20) is None:
                proc.kill()

        new_segments = set(Path(ROOT).iterdir()) - initial_segments

        segments = [p for p in new_segments if len(list(p.iterdir())) > 1]
        cls.segment = [s for s in segments if str(s).endswith("--0")][0]
        cls.lr = list(LogReader(os.path.join(str(cls.segment), "rlog.bz2")))
Ejemplo n.º 5
0
  def setUpClass(cls):
    if "DEBUG" in os.environ:
      segs = filter(lambda x: os.path.exists(os.path.join(x, "rlog")), Path(ROOT).iterdir())
      segs = sorted(segs, key=lambda x: x.stat().st_mtime)
      cls.lr = list(LogReader(os.path.join(segs[-1], "rlog")))
      return

    # setup env
    os.environ['REPLAY'] = "1"
    os.environ['SKIP_FW_QUERY'] = "1"
    os.environ['FINGERPRINT'] = "TOYOTA COROLLA TSS2 2019"

    params = Params()
    params.clear_all()
    set_params_enabled()

    # Make sure athena isn't running
    os.system("pkill -9 -f athena")

    # start manager and run openpilot for a minute
    proc = None
    try:
      manager_path = os.path.join(BASEDIR, "selfdrive/manager/manager.py")
      proc = subprocess.Popen(["python", manager_path])

      sm = messaging.SubMaster(['carState'])
      with Timeout(150, "controls didn't start"):
        while sm.rcv_frame['carState'] < 0:
          sm.update(1000)

      # make sure we get at least two full segments
      route = None
      cls.segments = []
      with Timeout(300, "timed out waiting for logs"):
        while route is None:
          route = params.get("CurrentRoute", encoding="utf-8")
          time.sleep(0.1)

        while len(cls.segments) < 3:
          segs = set()
          if Path(ROOT).exists():
            segs = set(Path(ROOT).glob(f"{route}--*"))
          cls.segments = sorted(segs, key=lambda s: int(str(s).rsplit('--')[-1]))
          time.sleep(2)

      # chop off last, incomplete segment
      cls.segments = cls.segments[:-1]

    finally:
      if proc is not None:
        proc.terminate()
        if proc.wait(60) is None:
          proc.kill()

    cls.lrs = [list(LogReader(os.path.join(str(s), "rlog"))) for s in cls.segments]

    # use the second segment by default as it's the first full segment
    cls.lr = list(LogReader(os.path.join(str(cls.segments[1]), "rlog")))
Ejemplo n.º 6
0
  def __init__(self, arguments):
    set_params_enabled()

    msg = messaging.new_message('liveCalibration')
    msg.liveCalibration.validBlocks = 20
    msg.liveCalibration.rpyCalib = [0.0, 0.0, 0.0]
    Params().put("CalibrationParams", msg.to_bytes())

    self._args = arguments
    self._carla_objects = []
    self._camerad = None
    self._exit_event = threading.Event()
    self._threads = []
    self._keep_alive = True
    self.started = False
    signal.signal(signal.SIGTERM, self._on_shutdown)
    self._exit = threading.Event()
Ejemplo n.º 7
0
def test_manager_prepare():
  set_params_enabled()
  manager_init()
  manager_prepare()
Ejemplo n.º 8
0
        if rk.frame % PRINT_DECIMATION == 0:
            print("frame: ", "engaged:", is_openpilot_engaged, "; throttle: ",
                  round(vc.throttle, 3), "; steer(c/deg): ",
                  round(vc.steer, 3), round(steer_out, 3), "; brake: ",
                  round(vc.brake, 3))

        rk.keep_time()


if __name__ == "__main__":

    # make sure params are in a good state
    params = Params()
    params.clear_all()
    set_params_enabled()
    params.delete("Offroad_ConnectivityNeeded")
    params.put("CalibrationParams",
               '{"calib_radians": [0,0,0], "valid_blocks": 20}')

    from multiprocessing import Process, Queue
    q = Queue()
    p = Process(target=go, args=(q, ))
    p.daemon = True
    p.start()

    if args.joystick:
        # start input poll for joystick
        from lib.manual_ctrl import wheel_poll_thread
        wheel_poll_thread(q)
    else: