Human-Like Following
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
import numpy as np
|
||||
|
||||
from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import get_jerk_factor, get_T_FOLLOW
|
||||
from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import COMFORT_BRAKE, LEAD_DANGER_FACTOR, STOP_DISTANCE, get_jerk_factor, get_T_FOLLOW
|
||||
|
||||
class FrogPilotFollowing:
|
||||
def __init__(self, FrogPilotPlanner):
|
||||
@@ -44,12 +44,37 @@ class FrogPilotFollowing:
|
||||
self.t_follow = 0
|
||||
|
||||
self.acceleration_jerk = self.base_acceleration_jerk
|
||||
self.danger_factor = LEAD_DANGER_FACTOR
|
||||
self.danger_jerk = self.base_danger_jerk
|
||||
self.speed_jerk = self.base_speed_jerk
|
||||
|
||||
self.following_lead = self.frogpilot_planner.tracking_lead and self.frogpilot_planner.lead_one.dRel < (self.t_follow * 2) * v_ego
|
||||
|
||||
if long_control_active and self.frogpilot_planner.tracking_lead:
|
||||
self.update_follow_values(self.frogpilot_planner.lead_one.dRel, v_ego, self.frogpilot_planner.lead_one.vLead)
|
||||
if frogpilot_toggles.human_following:
|
||||
self.update_follow_values(self.frogpilot_planner.lead_one.dRel, v_ego, self.frogpilot_planner.lead_one.vLead)
|
||||
|
||||
def update_follow_values(self, lead_distance, v_ego, v_lead):
|
||||
# Offset by FrogAi for FrogPilot for a more natural approach to a faster lead
|
||||
if v_lead > v_ego:
|
||||
distance_factor = max(lead_distance - (v_ego * self.t_follow), 1)
|
||||
accelerating_offset = np.clip(STOP_DISTANCE - v_ego, 1, distance_factor)
|
||||
|
||||
self.acceleration_jerk /= accelerating_offset
|
||||
self.danger_factor -= ((v_lead - v_ego) / 100)
|
||||
self.speed_jerk /= accelerating_offset
|
||||
self.t_follow /= accelerating_offset
|
||||
|
||||
# Offset by FrogAi for FrogPilot for a more natural approach to a slower lead
|
||||
if v_lead < v_ego:
|
||||
distance_factor = max(lead_distance - (v_lead * self.t_follow), 1)
|
||||
braking_offset = np.clip(min(v_ego - v_lead, v_lead) - COMFORT_BRAKE, 1, distance_factor)
|
||||
|
||||
if lead_distance >= 100:
|
||||
far_lead_offset = max(lead_distance - (v_ego * self.t_follow) - STOP_DISTANCE, 0)
|
||||
braking_offset += far_lead_offset
|
||||
|
||||
if self.frogpilot_planner.tracking_lead_filter.x >= 0.9:
|
||||
self.danger_factor += ((v_ego - v_lead) / 100)
|
||||
|
||||
self.t_follow /= braking_offset
|
||||
|
||||
Reference in New Issue
Block a user