From b48364fa14c4e5667a2e97363bcc7f4df3b8effb Mon Sep 17 00:00:00 2001 From: menwenliang Date: Thu, 26 Nov 2020 13:06:29 +0800 Subject: [PATCH] add better reset --- ..._civic_hatchback_ex_2017_can_generated.dbc | 4 +- .../honda_crv_hybrid_2019_can_generated.dbc | 4 +- selfdrive/car/honda/carcontroller.py | 40 ++++++++++++++++++- selfdrive/car/honda/carstate.py | 23 ++++++++--- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc b/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc index d9c69c6b8..9e00c8cae 100644 --- a/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc +++ b/opendbc/honda_civic_hatchback_ex_2017_can_generated.dbc @@ -418,13 +418,15 @@ BO_ 892 CRUISE_PARAMS: 8 PCM BO_ 927 RADAR_HUD: 8 RADAR SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY - SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX + SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX + SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX diff --git a/opendbc/honda_crv_hybrid_2019_can_generated.dbc b/opendbc/honda_crv_hybrid_2019_can_generated.dbc index 3902cf24b..ca0e8b71b 100644 --- a/opendbc/honda_crv_hybrid_2019_can_generated.dbc +++ b/opendbc/honda_crv_hybrid_2019_can_generated.dbc @@ -405,13 +405,15 @@ BO_ 432 STANDSTILL: 7 VSA BO_ 927 RADAR_HUD: 8 RADAR SG_ ZEROS_BOH : 7|10@0+ (1,0) [0|127] "" BDY SG_ CMBS_OFF : 12|1@0+ (1,0) [0|1] "" BDY - SG_ ZEROS_BOH3 : 31|32@0+ (1,0) [0|4294967295] "" XXX SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|1] "" XXX SG_ SET_TO_1 : 13|1@0+ (1,0) [0|1] "" BDY SG_ ZEROS_BOH2 : 11|4@0+ (1,0) [0|1] "" XXX SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|1] "" XXX SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|1] "" BDY SG_ SET_TO_0 : 22|1@0+ (1,0) [0|1] "" XXX + SG_ LEAD_DISTANCE : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BOH : 40|1@0+ (1,0) [0|1] "" XXX + SG_ BOH_2 : 30|1@0+ (1,0) [0|1] "" XXX SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" XXX SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" XXX diff --git a/selfdrive/car/honda/carcontroller.py b/selfdrive/car/honda/carcontroller.py index 8d9ab6f16..c482fcf43 100644 --- a/selfdrive/car/honda/carcontroller.py +++ b/selfdrive/car/honda/carcontroller.py @@ -100,6 +100,23 @@ class CarController(): # dp self.last_blinker_on = False self.blinker_end_frame = 0. + self.prev_lead_distance = 0.0 + self.stopped_lead_distance = 0.0 + self.lead_distance_counter = 1 + self.lead_distance_counter_prev = 1 + self.rough_lead_speed = 0.0 + + def rough_speed(self, lead_distance): + if self.prev_lead_distance != lead_distance: + self.lead_distance_counter_prev = self.lead_distance_counter + self.rough_lead_speed += 0.3334 * ( + (lead_distance - self.prev_lead_distance) / self.lead_distance_counter_prev - self.rough_lead_speed) + self.lead_distance_counter = 0.0 + elif self.lead_distance_counter >= self.lead_distance_counter_prev: + self.rough_lead_speed = (self.lead_distance_counter * self.rough_lead_speed) / (self.lead_distance_counter + 1.0) + self.lead_distance_counter += 1.0 + self.prev_lead_distance = lead_distance + return self.rough_lead_speed def update(self, enabled, CS, frame, actuators, pcm_speed, pcm_override, pcm_cancel_cmd, pcm_accel, @@ -179,8 +196,27 @@ class CarController(): elif not dragonconf.dpAllowGas and pcm_cancel_cmd: can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.CANCEL, idx, CS.CP.carFingerprint, CS.CP.isPandaBlack)) elif CS.out.cruiseState.standstill: - can_sends.append(hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, idx, CS.CP.carFingerprint, CS.CP.isPandaBlack)) - + if CS.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH): + rough_lead_speed = self.rough_speed(CS.lead_distance) + if CS.lead_distance > (self.stopped_lead_distance + 15.0) or rough_lead_speed > 0.1: + self.stopped_lead_distance = 0.0 + can_sends.append( + hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, idx, CS.CP.carFingerprint, + CS.CP.isPandaBlack)) + # print("spamming") + # print(self.stopped_lead_distance, CS.lead_distance, rough_lead_speed) + elif CS.CP.carFingerprint in (CAR.CIVIC_BOSCH, CAR.CRV_HYBRID): + if CS.hud_lead == 1: + can_sends.append( + hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, idx, CS.CP.carFingerprint, + CS.CP.isPandaBlack)) + else: + can_sends.append( + hondacan.spam_buttons_command(self.packer, CruiseButtons.RES_ACCEL, idx, CS.CP.carFingerprint, + CS.CP.isPandaBlack)) + else: + self.stopped_lead_distance = CS.lead_distance + self.prev_lead_distance = CS.lead_distance else: # Send gas and brake commands. if (frame % 2) == 0: diff --git a/selfdrive/car/honda/carstate.py b/selfdrive/car/honda/carstate.py index 978fded11..a43456616 100644 --- a/selfdrive/car/honda/carstate.py +++ b/selfdrive/car/honda/carstate.py @@ -42,6 +42,7 @@ def get_can_signals(CP): ("ESP_DISABLED", "VSA_STATUS", 1), ("USER_BRAKE", "VSA_STATUS", 0), ("BRAKE_HOLD_ACTIVE", "VSA_STATUS", 0), + ("HUD_LEAD", "ACC_HUD", 0), ("STEER_STATUS", "STEER_STATUS", 5), ("GEAR_SHIFTER", "GEARBOX", 0), ("PEDAL_GAS", "POWERTRAIN_DATA", 0), @@ -106,8 +107,13 @@ def get_can_signals(CP): checks += [("CRUISE_PARAMS", 10)] else: checks += [("CRUISE_PARAMS", 50)] - if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G): - signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)] + if CP.carFingerprint in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.INSIGHT): + signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1), + ("LEAD_DISTANCE", "RADAR_HUD", 0)] + checks += [("RADAR_HUD", 50)] + elif CP.carFingerprint in (CAR.CIVIC_BOSCH, CAR.CRV_HYBRID, CAR.CIVIC_BOSCH_DIESEL): + signals += [("DRIVERS_DOOR_OPEN", "SCM_FEEDBACK", 1)] + checks += [("RADAR_HUD", 50)] elif CP.carFingerprint == CAR.ODYSSEY_CHN: signals += [("DRIVERS_DOOR_OPEN", "SCM_BUTTONS", 1)] elif CP.carFingerprint in [CAR.HRV, CAR.JADE]: @@ -191,9 +197,13 @@ class CarState(CarStateBase): # ******************* parse out can ******************* # TODO: find wheels moving bit in dbc - if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.CIVIC_BOSCH, CAR.CIVIC_BOSCH_DIESEL, CAR.CRV_HYBRID, CAR.INSIGHT, CAR.ACURA_RDX_3G): - ret.standstill = cp.vl["ENGINE_DATA"]['XMISSION_SPEED'] < 0.1 - ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]['DRIVERS_DOOR_OPEN']) + if self.CP.carFingerprint in (CAR.ACCORD, CAR.ACCORD_15, CAR.ACCORDH, CAR.INSIGHT): + ret.standstill = cp.vl["ENGINE_DATA"]['XMISSION_SPEED'] < 0.1 + ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]['DRIVERS_DOOR_OPEN']) + self.lead_distance = cp.vl["RADAR_HUD"]['LEAD_DISTANCE'] + elif self.CP.carFingerprint in (CAR.CIVIC_BOSCH, CAR.CRV_HYBRID, CAR.CIVIC_BOSCH_DIESEL): + ret.standstill = cp.vl["ENGINE_DATA"]['XMISSION_SPEED'] < 0.1 + ret.doorOpen = bool(cp.vl["SCM_FEEDBACK"]['DRIVERS_DOOR_OPEN']) elif self.CP.carFingerprint == CAR.ODYSSEY_CHN: ret.standstill = cp.vl["ENGINE_DATA"]['XMISSION_SPEED'] < 0.1 ret.doorOpen = bool(cp.vl["SCM_BUTTONS"]['DRIVERS_DOOR_OPEN']) @@ -315,6 +325,9 @@ class CarState(CarStateBase): ret.cruiseState.available = bool(main_on) ret.cruiseState.nonAdaptive = self.cruise_mode != 0 + # afa feature + self.hud_lead = cp.vl["ACC_HUD"]['HUD_LEAD'] + # Gets rid of Pedal Grinding noise when brake is pressed at slow speeds for some models if self.CP.carFingerprint in (CAR.PILOT, CAR.PILOT_2019, CAR.RIDGELINE): if ret.brake > 0.05: