コード例 #1
0
  def test_honda_ui_pcm_speed(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    car_name = HONDA.CIVIC
    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      # 780 - 0x30c
      ('PCM_SPEED', 'ACC_HUD', 99),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for pcm_speed in np.linspace(0, 100, 20):
      cc = car.CarControl.CruiseControl.new_message()
      cc.speedOverride = float(pcm_speed * CV.KPH_TO_MS)
      control = car.CarControl.new_message()
      control.enabled = True
      control.cruiseControl = cc

      CI.update(control)

      for _ in range(25):
        can_sends = CI.apply(control)
        sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

      for _ in range(5):
        parser.update(int(sec_since_boot() * 1e9), False)
        time.sleep(0.01)

      self.assertAlmostEqual(parser.vl['ACC_HUD']['PCM_SPEED'], round(pcm_speed, 2), msg="Car: %s, speed: %.2f" % (car_name, pcm_speed))
コード例 #2
0
  def test_steering_ipas(self):
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    params.enableApgs = True
    CI = CarInterface(params, CarController)
    CI.CC.angle_control = True

    # Get parser
    parser_signals = [
      ('SET_ME_X10', 'STEERING_IPAS', 0),
      ('SET_ME_X40', 'STEERING_IPAS', 0),
      ('ANGLE', 'STEERING_IPAS', 0),
      ('STATE', 'STEERING_IPAS', 0),
      ('DIRECTION_CMD', 'STEERING_IPAS', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for enabled in [True, False]:
      for steer in np.linspace(-510., 510., 25):
          control = car.CarControl.new_message()
          actuators = car.CarControl.Actuators.new_message()
          actuators.steerAngle = float(steer)
          control.enabled = enabled
          control.actuators = actuators
          CI.update(control)

          CI.CS.steer_not_allowed = False

          for _ in range(1000 if steer < -505 else 25):
            can_sends = CI.apply(control)
            sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))
            parser.update(int(sec_since_boot() * 1e9), False)

          self.assertEqual(0x10, parser.vl['STEERING_IPAS']['SET_ME_X10'])
          self.assertEqual(0x40, parser.vl['STEERING_IPAS']['SET_ME_X40'])

          expected_state = 3 if enabled else 1
          self.assertEqual(expected_state, parser.vl['STEERING_IPAS']['STATE'])

          if steer < 0:
            direction = 3
          elif steer > 0:
            direction = 1
          else:
            direction = 2

          if not enabled:
            direction = 2
          self.assertEqual(direction, parser.vl['STEERING_IPAS']['DIRECTION_CMD'])

          expected_steer = int(round(steer / 1.5)) * 1.5 if enabled else 0
          self.assertAlmostEqual(expected_steer, parser.vl['STEERING_IPAS']['ANGLE'])

    sendcan.close()
コード例 #3
0
  def test_honda_ui_hud_lead(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    for car_name in [HONDA.CIVIC]:
      params = CarInterface.get_params(car_name)
      CI = CarInterface(params, CarController)

      # Get parser
      parser_signals = [
        # 780 - 0x30c
        # 3: acc off, 2: solid car (hud_show_car), 1: dashed car (enabled, not hud show car), 0: no car (not enabled)
        ('HUD_LEAD', 'ACC_HUD', 99),
        ('SET_ME_X03', 'ACC_HUD', 99),
        ('SET_ME_X03_2', 'ACC_HUD', 99),
        ('SET_ME_X01', 'ACC_HUD', 99),
        ('ENABLE_MINI_CAR', 'ACC_HUD', 99),
      ]
      parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
      time.sleep(0.2)  # Slow joiner syndrome

      for enabled in [True, False]:
        for leadVisible in [True, False]:

          control = car.CarControl.new_message()
          hud = car.CarControl.HUDControl.new_message()
          hud.leadVisible = leadVisible
          control.enabled = enabled
          control.hudControl = hud
          CI.update(control)

          for _ in range(25):
            can_sends = CI.apply(control)
            sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

          for _ in range(5):
            parser.update(int(sec_since_boot() * 1e9), False)
            time.sleep(0.01)

          if not enabled:
            hud_lead = 0
          else:
            hud_lead = 2 if leadVisible else 1
          self.assertEqual(int(parser.vl['ACC_HUD']['HUD_LEAD']), hud_lead, msg="Car: %s, lead: %s, enabled %s" % (car_name, leadVisible, enabled))
          self.assertTrue(parser.vl['ACC_HUD']['ENABLE_MINI_CAR'])
          self.assertEqual(0x3, parser.vl['ACC_HUD']['SET_ME_X03'])
          self.assertEqual(0x3, parser.vl['ACC_HUD']['SET_ME_X03_2'])
          self.assertEqual(0x1, parser.vl['ACC_HUD']['SET_ME_X01'])
コード例 #4
0
  def test_honda_gas(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    car_name = HONDA.ACURA_ILX

    params = CarInterface.get_params(car_name, {0: {0x201: 6}, 1: {}, 2: {}})  # Add interceptor to fingerprint
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('GAS_COMMAND', 'GAS_COMMAND', -1),
      ('GAS_COMMAND2', 'GAS_COMMAND', -1),
      ('ENABLE', 'GAS_COMMAND', -1),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for gas in np.linspace(0., 0.95, 25):
      control = car.CarControl.new_message()
      actuators = car.CarControl.Actuators.new_message()
      actuators.gas = float(gas)
      control.enabled = True
      control.actuators = actuators
      CI.update(control)

      CI.CS.steer_not_allowed = False

      for _ in range(25):
        can_sends = CI.apply(control)
        sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

      for _ in range(5):
        parser.update(int(sec_since_boot() * 1e9), False)
        time.sleep(0.01)

      gas_command = parser.vl['GAS_COMMAND']['GAS_COMMAND'] / 255.0
      gas_command2 = parser.vl['GAS_COMMAND']['GAS_COMMAND2'] / 255.0
      enabled = gas > 0.001
      self.assertEqual(enabled, parser.vl['GAS_COMMAND']['ENABLE'], msg="Car: %s, gas %.2f" % (car_name, gas))
      if enabled:
        self.assertAlmostEqual(gas, gas_command, places=2, msg="Car: %s, gas %.2f" % (car_name, gas))
        self.assertAlmostEqual(gas, gas_command2, places=2, msg="Car: %s, gas %.2f" % (car_name, gas))

    sendcan.close()
コード例 #5
0
  def test_honda_steering(self):
    self.longMessage = True
    limits = {
      HONDA.CIVIC: 0x1000,
      HONDA.ODYSSEY: 0x1000,
      HONDA.PILOT: 0x1000,
      HONDA.CRV: 0x3e8,
      HONDA.ACURA_ILX: 0xF00,
      HONDA.ACURA_RDX: 0x3e8,
    }

    sendcan = messaging.pub_sock('sendcan')

    for car_name in limits.keys():
      params = CarInterface.get_params(car_name)
      CI = CarInterface(params, CarController)

      # Get parser
      parser_signals = [
        ('STEER_TORQUE', 'STEERING_CONTROL', 0),
      ]
      parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
      time.sleep(0.2)  # Slow joiner syndrome

      for steer in np.linspace(-1., 1., 25):
        control = car.CarControl.new_message()
        actuators = car.CarControl.Actuators.new_message()
        actuators.steer = float(steer)
        control.enabled = True
        control.actuators = actuators
        CI.update(control)

        CI.CS.steer_not_allowed = False

        for _ in range(25):
          can_sends = CI.apply(control)
          sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

        for _ in range(5):
          parser.update(int(sec_since_boot() * 1e9), False)
          time.sleep(0.01)

        torque = parser.vl['STEERING_CONTROL']['STEER_TORQUE']
        self.assertAlmostEqual(int(limits[car_name] * -actuators.steer), torque, msg="Car: %s, steer %.2f" % (car_name, steer))

    sendcan.close()
コード例 #6
0
  def test_steering(self):
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    limit = 1500

    # Get parser
    parser_signals = [
      ('STEER_REQUEST', 'STEERING_LKA', 0),
      ('SET_ME_1', 'STEERING_LKA', 0),
      ('STEER_TORQUE_CMD', 'STEERING_LKA', -1),
      ('LKA_STATE', 'STEERING_LKA', -1),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for steer in np.linspace(-1., 1., 25):
      control = car.CarControl.new_message()
      actuators = car.CarControl.Actuators.new_message()
      actuators.steer = float(steer)
      control.enabled = True
      control.actuators = actuators
      CI.update(control)

      CI.CS.steer_not_allowed = False
      CI.CS.steer_torque_motor = limit * steer

      # More control applies for the first one because of rate limits
      for _ in range(1000 if steer < -0.99 else 25):
        can_sends = CI.apply(control)
        sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

        parser.update(int(sec_since_boot() * 1e9), False)

      self.assertEqual(1, parser.vl['STEERING_LKA']['SET_ME_1'])
      self.assertEqual(True, parser.vl['STEERING_LKA']['STEER_REQUEST'])
      self.assertAlmostEqual(round(steer * limit), parser.vl['STEERING_LKA']['STEER_TORQUE_CMD'])
      self.assertEqual(0, parser.vl['STEERING_LKA']['LKA_STATE'])

    sendcan.close()
コード例 #7
0
  def test_accel(self):
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('ACCEL_CMD', 'ACC_CONTROL', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for accel in np.linspace(-3., 1.5, 25):
      control = car.CarControl.new_message()
      actuators = car.CarControl.Actuators.new_message()

      gas = accel / 3. if accel > 0. else 0.
      brake = -accel / 3. if accel < 0. else 0.

      actuators.gas = float(gas)
      actuators.brake = float(brake)
      control.enabled = True
      control.actuators = actuators
      CI.update(control)

      # More control applies for the first one because of rate limits
      for _ in range(25):
        can_sends = CI.apply(control)
        sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

      for _ in range(5):
        parser.update(int(sec_since_boot() * 1e9), False)
        time.sleep(0.01)

      min_accel = accel - 0.061
      max_accel = accel + 0.061
      sent_accel = parser.vl['ACC_CONTROL']['ACCEL_CMD']
      accel_ok = min_accel <= sent_accel <= max_accel
      self.assertTrue(accel_ok, msg="%.2f <= %.2f <= %.2f" % (min_accel, sent_accel, max_accel))
    sendcan.close()
コード例 #8
0
  def test_fcw(self):
    # TODO: This message has a 0xc1 setme which is not yet checked or in the dbc file
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('FCW', 'ACC_HUD', 0),
      ('SET_ME_X20', 'ACC_HUD', 0),
      ('SET_ME_X10', 'ACC_HUD', 0),
      ('SET_ME_X80', 'ACC_HUD', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    VA = car.CarControl.HUDControl.VisualAlert
    for fcw in [True, False]:
      control = car.CarControl.new_message()
      control.enabled = True

      hud = car.CarControl.HUDControl.new_message()
      if fcw:
        hud.visualAlert = VA.fcw
        control.hudControl = hud

      CI.update(control)

      for _ in range(200):
        can_sends = CI.apply(control)
        sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

      for _ in range(5):
        parser.update(int(sec_since_boot() * 1e9), False)
        time.sleep(0.01)

      self.assertEqual(fcw, parser.vl['ACC_HUD']['FCW'])
      self.assertEqual(0x20, parser.vl['ACC_HUD']['SET_ME_X20'])
      self.assertEqual(0x10, parser.vl['ACC_HUD']['SET_ME_X10'])
      self.assertEqual(0x80, parser.vl['ACC_HUD']['SET_ME_X80'])
コード例 #9
0
  def test_honda_ui_cruise_speed(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    car_name = HONDA.CIVIC
    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      # 780 - 0x30c
      ('CRUISE_SPEED', 'ACC_HUD', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    for cruise_speed in np.linspace(0, 50, 20):
      for visible in [False, True]:
        control = car.CarControl.new_message()
        hud = car.CarControl.HUDControl.new_message()
        hud.setSpeed = float(cruise_speed)
        hud.speedVisible = visible
        control.enabled = True
        control.hudControl = hud

        CI.update(control)

        for _ in range(25):
          can_sends = CI.apply(control)
          sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

        for _ in range(5):
          parser.update(int(sec_since_boot() * 1e9), False)
          time.sleep(0.01)

        expected_cruise_speed = round(cruise_speed * CV.MS_TO_KPH)
        if not visible:
          expected_cruise_speed = 255

        self.assertAlmostEqual(parser.vl['ACC_HUD']['CRUISE_SPEED'], expected_cruise_speed, msg="Car: %s, speed: %.2f" % (car_name, cruise_speed))
コード例 #10
0
  def test_honda_brake(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    car_name = HONDA.CIVIC

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('COMPUTER_BRAKE', 'BRAKE_COMMAND', 0),
      ('BRAKE_PUMP_REQUEST', 'BRAKE_COMMAND', 0),  # pump_on
      ('CRUISE_OVERRIDE', 'BRAKE_COMMAND', 0),  # pcm_override
      ('CRUISE_FAULT_CMD', 'BRAKE_COMMAND', 0),  # pcm_fault_cmd
      ('CRUISE_CANCEL_CMD', 'BRAKE_COMMAND', 0),  # pcm_cancel_cmd
      ('COMPUTER_BRAKE_REQUEST', 'BRAKE_COMMAND', 0),  # brake_rq
      ('SET_ME_0X80', 'BRAKE_COMMAND', 0),
      ('BRAKE_LIGHTS', 'BRAKE_COMMAND', 0),  # brakelights
      ('FCW', 'BRAKE_COMMAND', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    VA = car.CarControl.HUDControl.VisualAlert

    for override in [True, False]:
      for cancel in [True, False]:
        for fcw in [True, False]:
          steps = 25 if not override and not cancel else 2
          for brake in np.linspace(0., 0.95, steps):
            control = car.CarControl.new_message()

            hud = car.CarControl.HUDControl.new_message()
            if fcw:
              hud.visualAlert = VA.fcw

            cruise = car.CarControl.CruiseControl.new_message()
            cruise.cancel = cancel
            cruise.override = override

            actuators = car.CarControl.Actuators.new_message()
            actuators.brake = float(brake)

            control.enabled = True
            control.actuators = actuators
            control.hudControl = hud
            control.cruiseControl = cruise

            CI.update(control)

            CI.CS.steer_not_allowed = False

            for _ in range(20):
              can_sends = CI.apply(control)
              sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

            for _ in range(5):
              parser.update(int(sec_since_boot() * 1e9), False)
              time.sleep(0.01)

            brake_command = parser.vl['BRAKE_COMMAND']['COMPUTER_BRAKE']
            min_expected_brake = int(1024 / 4 * (actuators.brake - 0.02))
            max_expected_brake = int(1024 / 4 * (actuators.brake + 0.02))
            braking = actuators.brake > 0

            braking_ok = min_expected_brake <= brake_command <= max_expected_brake
            if steps == 2:
              braking_ok = True

            self.assertTrue(braking_ok, msg="Car: %s, brake %.2f" % (car_name, brake))
            self.assertEqual(0x80, parser.vl['BRAKE_COMMAND']['SET_ME_0X80'])
            self.assertEqual(braking, parser.vl['BRAKE_COMMAND']['BRAKE_PUMP_REQUEST'])
            self.assertEqual(braking, parser.vl['BRAKE_COMMAND']['COMPUTER_BRAKE_REQUEST'])
            self.assertEqual(braking, parser.vl['BRAKE_COMMAND']['BRAKE_LIGHTS'])
            self.assertFalse(parser.vl['BRAKE_COMMAND']['CRUISE_FAULT_CMD'])
            self.assertEqual(override, parser.vl['BRAKE_COMMAND']['CRUISE_OVERRIDE'])
            self.assertEqual(cancel, parser.vl['BRAKE_COMMAND']['CRUISE_CANCEL_CMD'])
            self.assertEqual(fcw, bool(parser.vl['BRAKE_COMMAND']['FCW']))
コード例 #11
0
  def test_honda_lkas_hud(self):
    self.longMessage = True

    sendcan = messaging.pub_sock('sendcan')

    car_name = HONDA.CIVIC
    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('SET_ME_X41', 'LKAS_HUD', 0),
      ('SET_ME_X48', 'LKAS_HUD', 0),
      ('STEERING_REQUIRED', 'LKAS_HUD', 0),
      ('SOLID_LANES', 'LKAS_HUD', 0),
      ('LEAD_SPEED', 'RADAR_HUD', 0),
      ('LEAD_STATE', 'RADAR_HUD', 0),
      ('LEAD_DISTANCE', 'RADAR_HUD', 0),
      ('ACC_ALERTS', 'RADAR_HUD', 0),
    ]

    VA = car.CarControl.HUDControl.VisualAlert

    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome


    alerts = {
      VA.none: 0,
      VA.brakePressed: 10,
      VA.wrongGear: 6,
      VA.seatbeltUnbuckled: 5,
      VA.speedTooHigh: 8,
    }

    for steer_required in [True, False]:
      for lanes in [True, False]:
        for alert in alerts.keys():
          control = car.CarControl.new_message()
          hud = car.CarControl.HUDControl.new_message()

          control.enabled = True

          if steer_required:
            hud.visualAlert = VA.steerRequired
          else:
            hud.visualAlert = alert

          hud.lanesVisible = lanes
          control.hudControl = hud

          CI.update(control)

          for _ in range(25):
            can_sends = CI.apply(control)
            sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

          for _ in range(5):
            parser.update(int(sec_since_boot() * 1e9), False)
            time.sleep(0.01)

          self.assertEqual(0x41, parser.vl['LKAS_HUD']['SET_ME_X41'])
          self.assertEqual(0x48, parser.vl['LKAS_HUD']['SET_ME_X48'])
          self.assertEqual(steer_required, parser.vl['LKAS_HUD']['STEERING_REQUIRED'])
          self.assertEqual(lanes, parser.vl['LKAS_HUD']['SOLID_LANES'])

          self.assertEqual(0x1fe, parser.vl['RADAR_HUD']['LEAD_SPEED'])
          self.assertEqual(0x7, parser.vl['RADAR_HUD']['LEAD_STATE'])
          self.assertEqual(0x1e, parser.vl['RADAR_HUD']['LEAD_DISTANCE'])
          self.assertEqual(alerts[alert] if not steer_required else 0, parser.vl['RADAR_HUD']['ACC_ALERTS'])
コード例 #12
0
  def test_ui(self):
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('BARRIERS', 'LKAS_HUD', -1),
      ('RIGHT_LINE', 'LKAS_HUD', 0),
      ('LEFT_LINE', 'LKAS_HUD', 0),
      ('SET_ME_X01', 'LKAS_HUD', 0),
      ('SET_ME_X01_2', 'LKAS_HUD', 0),
      ('LDA_ALERT', 'LKAS_HUD', -1),
      ('SET_ME_X0C', 'LKAS_HUD', 0),
      ('SET_ME_X2C', 'LKAS_HUD', 0),
      ('SET_ME_X38', 'LKAS_HUD', 0),
      ('SET_ME_X02', 'LKAS_HUD', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    VA = car.CarControl.HUDControl.VisualAlert

    for left_lane in [True, False]:
      for right_lane in [True, False]:
        for steer in [True, False]:
          control = car.CarControl.new_message()
          control.enabled = True

          hud = car.CarControl.HUDControl.new_message()
          if steer:
            hud.visualAlert = VA.steerRequired

          hud.leftLaneVisible = left_lane
          hud.rightLaneVisible = right_lane

          control.hudControl = hud
          CI.update(control)

            for _ in range(200):  # UI is only sent at 1Hz
              can_sends = CI.apply(control)
              sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

            for _ in range(5):
              parser.update(int(sec_since_boot() * 1e9), False)
              time.sleep(0.01)

            self.assertEqual(0x0c, parser.vl['LKAS_HUD']['SET_ME_X0C'])
            self.assertEqual(0x2c, parser.vl['LKAS_HUD']['SET_ME_X2C'])
            self.assertEqual(0x38, parser.vl['LKAS_HUD']['SET_ME_X38'])
            self.assertEqual(0x02, parser.vl['LKAS_HUD']['SET_ME_X02'])
            self.assertEqual(0, parser.vl['LKAS_HUD']['BARRIERS'])
            self.assertEqual(1 if right_lane else 2, parser.vl['LKAS_HUD']['RIGHT_LINE'])
            self.assertEqual(1 if left_lane else 2, parser.vl['LKAS_HUD']['LEFT_LINE'])
            self.assertEqual(1, parser.vl['LKAS_HUD']['SET_ME_X01'])
            self.assertEqual(1, parser.vl['LKAS_HUD']['SET_ME_X01_2'])
            self.assertEqual(steer, parser.vl['LKAS_HUD']['LDA_ALERT'])
コード例 #13
0
  def test_standstill_and_cancel(self):
    self.longMessage = True
    car_name = TOYOTA.RAV4

    sendcan = messaging.pub_sock('sendcan')

    params = CarInterface.get_params(car_name)
    CI = CarInterface(params, CarController)

    # Get parser
    parser_signals = [
      ('RELEASE_STANDSTILL', 'ACC_CONTROL', 0),
      ('CANCEL_REQ', 'ACC_CONTROL', 0),
      ('SET_ME_X3', 'ACC_CONTROL', 0),
      ('SET_ME_1', 'ACC_CONTROL', 0),
    ]
    parser = CANParser(CI.cp.dbc_name, parser_signals, [], 0, sendcan=True, tcp_addr="127.0.0.1")
    time.sleep(0.2)  # Slow joiner syndrome

    control = car.CarControl.new_message()
    control.enabled = True

    CI.update(control)

    CI.CS.pcm_acc_status = 8  # Active
    CI.CS.standstill = True
    can_sends = CI.apply(control)

    sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

    for _ in range(5):
      parser.update(int(sec_since_boot() * 1e9), False)
      time.sleep(0.01)

    self.assertEqual(0x3, parser.vl['ACC_CONTROL']['SET_ME_X3'])
    self.assertEqual(1, parser.vl['ACC_CONTROL']['SET_ME_1'])
    self.assertFalse(parser.vl['ACC_CONTROL']['RELEASE_STANDSTILL'])
    self.assertFalse(parser.vl['ACC_CONTROL']['CANCEL_REQ'])

    CI.CS.pcm_acc_status = 7  # Standstill

    for _ in range(10):
      can_sends = CI.apply(control)
      sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

    for _ in range(5):
      parser.update(int(sec_since_boot() * 1e9), False)
      time.sleep(0.01)

    self.assertTrue(parser.vl['ACC_CONTROL']['RELEASE_STANDSTILL'])

    cruise = car.CarControl.CruiseControl.new_message()
    cruise.cancel = True
    control.cruiseControl = cruise

    for _ in range(10):
      can_sends = CI.apply(control)

    sendcan.send(can_list_to_can_capnp(can_sends, msgtype='sendcan'))

    for _ in range(5):
      parser.update(int(sec_since_boot() * 1e9), False)
      time.sleep(0.01)

    self.assertTrue(parser.vl['ACC_CONTROL']['CANCEL_REQ'])