From 88424ede2c5bdd2beade731717cbb0bb635034e9 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 12 Jul 2021 19:26:50 -0700 Subject: [PATCH] Revert model (#21571) * Revert "New desire model (#21458)" This reverts commit 4230d5d2124577b86e69b136d846ca9cc3ecd746. * revert rel notes --- RELEASES.md | 4 -- models/supercombo.dlc | 4 +- models/supercombo.onnx | 4 +- selfdrive/common/modeldata.h | 2 +- selfdrive/controls/lib/lateral_planner.py | 15 +----- selfdrive/controls/lib/radar_helpers.py | 10 ++-- selfdrive/controls/radard.py | 16 +++---- selfdrive/modeld/models/driving.cc | 46 +++++-------------- .../process_replay/model_replay_ref_commit | 2 +- 9 files changed, 33 insertions(+), 70 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index 53ca3e08..03ec4818 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,9 +1,5 @@ Version 0.8.6 (2021-XX-XX) ======================== - * New driving model with improved laneless performance - * Trained on 5000+ hours of diverse driving data from 3000+ users in 40+ countries - * Better anti-cheating methods during simulator training ensure the model hugs less when in laneless mode - * All new desire ground-truthing stack makes the model better at lane changes and keeps * Revamp lateral and longitudinal planners * Refactor planner output API to be more readable and verbose * Planners now output desired trajectories for speed, acceleration, curvature, and curvature rate diff --git a/models/supercombo.dlc b/models/supercombo.dlc index 122f9063..676a2ace 100644 --- a/models/supercombo.dlc +++ b/models/supercombo.dlc @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d79c015ef322704ad7fa3b0048f3d65965f46aa73ea60110ec21487d15cc012a -size 56720671 +oid sha256:dc46a24d4b4afa9730785264834e7f7c04c84b6a28a689acb503d6663818c256 +size 58797567 diff --git a/models/supercombo.onnx b/models/supercombo.onnx index f5ffb95d..6b3ec952 100644 --- a/models/supercombo.onnx +++ b/models/supercombo.onnx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b66036aebb132973243f641a7fe69cd29fd7928a3f6d7bafe8a37ce3572f8a92 -size 56742706 +oid sha256:77a31e5a3a70c39a3fcb07e939a668baf80b1eb778fe792fbe256de983fab5cd +size 58823636 diff --git a/selfdrive/common/modeldata.h b/selfdrive/common/modeldata.h index 49e200d5..4eb30680 100644 --- a/selfdrive/common/modeldata.h +++ b/selfdrive/common/modeldata.h @@ -1,7 +1,7 @@ #pragma once const int TRAJECTORY_SIZE = 33; -const int LAT_MPC_N = 16; const int LON_MPC_N = 32; +const int LAT_MPC_N = 16; const float MIN_DRAW_DISTANCE = 10.0; const float MAX_DRAW_DISTANCE = 100.0; diff --git a/selfdrive/controls/lib/lateral_planner.py b/selfdrive/controls/lib/lateral_planner.py index fb9cc265..0c258d8d 100644 --- a/selfdrive/controls/lib/lateral_planner.py +++ b/selfdrive/controls/lib/lateral_planner.py @@ -28,13 +28,13 @@ DESIRES = { }, LaneChangeDirection.left: { LaneChangeState.off: log.LateralPlan.Desire.none, - LaneChangeState.preLaneChange: log.LateralPlan.Desire.keepLeft, + LaneChangeState.preLaneChange: log.LateralPlan.Desire.none, LaneChangeState.laneChangeStarting: log.LateralPlan.Desire.laneChangeLeft, LaneChangeState.laneChangeFinishing: log.LateralPlan.Desire.laneChangeLeft, }, LaneChangeDirection.right: { LaneChangeState.off: log.LateralPlan.Desire.none, - LaneChangeState.preLaneChange: log.LateralPlan.Desire.keepRight, + LaneChangeState.preLaneChange: log.LateralPlan.Desire.none, LaneChangeState.laneChangeStarting: log.LateralPlan.Desire.laneChangeRight, LaneChangeState.laneChangeFinishing: log.LateralPlan.Desire.laneChangeRight, }, @@ -55,7 +55,6 @@ class LateralPlanner(): self.lane_change_direction = LaneChangeDirection.none self.lane_change_timer = 0.0 self.lane_change_ll_prob = 1.0 - self.keep_pulse_timer = 0.0 self.prev_one_blinker = False self.desire = log.LateralPlan.Desire.none @@ -158,16 +157,6 @@ class LateralPlanner(): self.desire = DESIRES[self.lane_change_direction][self.lane_change_state] - # Send keep pulse once per second during LaneChangeStart.preLaneChange - if self.lane_change_state in [LaneChangeState.off, LaneChangeState.laneChangeStarting]: - self.keep_pulse_timer = 0.0 - elif self.lane_change_state == LaneChangeState.preLaneChange: - self.keep_pulse_timer += DT_MDL - if self.keep_pulse_timer > 1.0: - self.keep_pulse_timer = 0.0 - elif self.desire in [log.LateralPlan.Desire.keepLeft, log.LateralPlan.Desire.keepRight]: - self.desire = log.LateralPlan.Desire.none - # Turn off lanes during lane change if self.desire == log.LateralPlan.Desire.laneChangeRight or self.desire == log.LateralPlan.Desire.laneChangeLeft: self.LP.lll_prob *= self.lane_change_ll_prob diff --git a/selfdrive/controls/lib/radar_helpers.py b/selfdrive/controls/lib/radar_helpers.py index 01498fa1..132bba8b 100644 --- a/selfdrive/controls/lib/radar_helpers.py +++ b/selfdrive/controls/lib/radar_helpers.py @@ -132,11 +132,11 @@ class Cluster(): def get_RadarState_from_vision(self, lead_msg, v_ego): return { - "dRel": float(lead_msg.x[0] - RADAR_TO_CAMERA), - "yRel": float(-lead_msg.y[0]), - "vRel": float(lead_msg.v[0] - v_ego), - "vLead": float(lead_msg.v[0]), - "vLeadK": float(lead_msg.v[0]), + "dRel": float(lead_msg.xyva[0] - RADAR_TO_CAMERA), + "yRel": float(-lead_msg.xyva[1]), + "vRel": float(lead_msg.xyva[2]), + "vLead": float(v_ego + lead_msg.xyva[2]), + "vLeadK": float(v_ego + lead_msg.xyva[2]), "aLeadK": float(0), "aLeadTau": _LEAD_ACCEL_TAU, "fcw": False, diff --git a/selfdrive/controls/radard.py b/selfdrive/controls/radard.py index 5d94804d..244d02d2 100755 --- a/selfdrive/controls/radard.py +++ b/selfdrive/controls/radard.py @@ -38,12 +38,12 @@ def laplacian_cdf(x, mu, b): def match_vision_to_cluster(v_ego, lead, clusters): # match vision point to best statistical cluster match - offset_vision_dist = lead.x[0] - RADAR_TO_CAMERA + offset_vision_dist = lead.xyva[0] - RADAR_TO_CAMERA def prob(c): - prob_d = laplacian_cdf(c.dRel, offset_vision_dist, lead.xStd[0]) - prob_y = laplacian_cdf(c.yRel, -lead.y[0], lead.yStd[0]) - prob_v = laplacian_cdf(c.vRel + v_ego, lead.v[0], lead.vStd[0]) + prob_d = laplacian_cdf(c.dRel, offset_vision_dist, lead.xyvaStd[0]) + prob_y = laplacian_cdf(c.yRel, -lead.xyva[1], lead.xyvaStd[1]) + prob_v = laplacian_cdf(c.vRel, lead.xyva[2], lead.xyvaStd[2]) # This is isn't exactly right, but good heuristic return prob_d * prob_y * prob_v @@ -53,7 +53,7 @@ def match_vision_to_cluster(v_ego, lead, clusters): # if no 'sane' match is found return -1 # stationary radar points can be false positives dist_sane = abs(cluster.dRel - offset_vision_dist) < max([(offset_vision_dist)*.25, 5.0]) - vel_sane = (abs(cluster.vRel + v_ego - lead.v[0]) < 10) or (v_ego + cluster.vRel > 3) + vel_sane = (abs(cluster.vRel - lead.xyva[2]) < 10) or (v_ego + cluster.vRel > 3) if dist_sane and vel_sane: return cluster else: @@ -166,9 +166,9 @@ class RadarD(): radarState.carStateMonoTime = sm.logMonoTime['carState'] if enable_lead: - if len(sm['modelV2'].leadsV3) > 1: - radarState.leadOne = get_lead(self.v_ego, self.ready, clusters, sm['modelV2'].leadsV3[0], low_speed_override=True) - radarState.leadTwo = get_lead(self.v_ego, self.ready, clusters, sm['modelV2'].leadsV3[1], low_speed_override=False) + if len(sm['modelV2'].leads) > 1: + radarState.leadOne = get_lead(self.v_ego, self.ready, clusters, sm['modelV2'].leads[0], low_speed_override=True) + radarState.leadTwo = get_lead(self.v_ego, self.ready, clusters, sm['modelV2'].leads[1], low_speed_override=False) return dat diff --git a/selfdrive/modeld/models/driving.cc b/selfdrive/modeld/models/driving.cc index 1715d8ca..ba48af05 100644 --- a/selfdrive/modeld/models/driving.cc +++ b/selfdrive/modeld/models/driving.cc @@ -24,9 +24,7 @@ constexpr int PLAN_MHP_SELECTION = 1; constexpr int PLAN_MHP_GROUP_SIZE = (2*PLAN_MHP_VALS + PLAN_MHP_SELECTION); constexpr int LEAD_MHP_N = 5; -constexpr int LEAD_TRAJ_LEN = 6; -constexpr int LEAD_PRED_DIM = 4; -constexpr int LEAD_MHP_VALS = LEAD_PRED_DIM*LEAD_TRAJ_LEN; +constexpr int LEAD_MHP_VALS = 4; constexpr int LEAD_MHP_SELECTION = 3; constexpr int LEAD_MHP_GROUP_SIZE = (2*LEAD_MHP_VALS + LEAD_MHP_SELECTION); @@ -149,38 +147,18 @@ void fill_sigmoid(const float *input, float *output, int len, int stride) { } } -void fill_lead_v3(cereal::ModelDataV2::LeadDataV3::Builder lead, const float *lead_data, const float *prob, int t_offset, float prob_t) { - float t[LEAD_TRAJ_LEN] = {0.0, 2.0, 4.0, 6.0, 8.0, 10.0}; +void fill_lead_v2(cereal::ModelDataV2::LeadDataV2::Builder lead, const float *lead_data, const float *prob, int t_offset, float t) { const float *data = get_lead_data(lead_data, t_offset); lead.setProb(sigmoid(prob[t_offset])); - lead.setProbTime(prob_t); - float x_arr[LEAD_TRAJ_LEN]; - float y_arr[LEAD_TRAJ_LEN]; - float v_arr[LEAD_TRAJ_LEN]; - float a_arr[LEAD_TRAJ_LEN]; - float x_stds_arr[LEAD_TRAJ_LEN]; - float y_stds_arr[LEAD_TRAJ_LEN]; - float v_stds_arr[LEAD_TRAJ_LEN]; - float a_stds_arr[LEAD_TRAJ_LEN]; - for (int i=0; i