11#include " software/ai/navigator/trajectory/collision_evaluator.h"
22
33const double FRONT_COLLISION_COST_CONST = 3.0 ;
4- const double BACK_COLLISION_COST_CONST = 1.0 ;
5- const double MID_TRAJ_COST_CONST = 6.0 ;
4+ const double BACK_COLLISION_COST_CONST = 1.0 ;
5+ const double MID_TRAJ_COST_CONST = 6.0 ;
66CollisionEvaluator::CollisionEvaluator (const std::vector<ObstaclePtr> &obstacles)
77 : obstacles(obstacles)
88{
@@ -11,18 +11,17 @@ CollisionEvaluator::CollisionEvaluator(const std::vector<ObstaclePtr> &obstacles
1111TrajectoryPathWithCost CollisionEvaluator::evaluate (
1212 const TrajectoryPath &trajectory,
1313 const std::optional<TrajectoryPathWithCost> &sub_traj_with_cost,
14- const std::optional<double > sub_traj_duration_s,
15- const std::optional<double > max_cost)
14+ const std::optional<double > sub_traj_duration_s, const std::optional<double > max_cost)
1615{
17- TrajectoryPathWithCost traj_with_cost (trajectory);
16+ TrajectoryPathWithCost traj_with_cost (trajectory);
1817
19- const double traj_time = trajectory.getTotalTime ();
18+ const double traj_time = trajectory.getTotalTime ();
2019 const double search_end_time_s =
2120 std::min (trajectory.getTotalTime (), MAX_FUTURE_COLLISION_CHECK_SEC );
2221 const Point destination = traj_with_cost.traj_path .getDestination ();
2322
24- // Initialize total cost as trajectory time
25- double total_cost = traj_time;
23+ // Initialize total cost as trajectory time
24+ double total_cost = traj_time;
2625
2726
2827 // Find the start duration before the trajectory leaves all obstacles
@@ -41,29 +40,31 @@ TrajectoryPathWithCost CollisionEvaluator::evaluate(
4140 }
4241 traj_with_cost.collision_duration_front_s = first_non_collision_time;
4342
44- // Add first front collision to total cost
45- total_cost += FRONT_COLLISION_COST_CONST * first_non_collision_time;
43+ // Add first front collision to total cost
44+ total_cost += FRONT_COLLISION_COST_CONST * first_non_collision_time;
4645
4746 // Return early if current cost already higher than max cost
48- if (total_cost >= max_cost){
49- traj_with_cost.cost = total_cost;
50- return traj_with_cost;
51- }
47+ if (total_cost >= max_cost)
48+ {
49+ traj_with_cost.cost = total_cost;
50+ return traj_with_cost;
51+ }
5252
5353 // Find the duration we're within an obstacle before search_end_time_s
5454 double last_non_collision_time =
5555 getLastNonCollisionTime (trajectory, search_end_time_s);
5656 traj_with_cost.collision_duration_back_s =
5757 search_end_time_s - last_non_collision_time;
5858
59- // Add back collision to total cost
60- total_cost += BACK_COLLISION_COST_CONST * traj_with_cost.collision_duration_back_s ;
59+ // Add back collision to total cost
60+ total_cost += BACK_COLLISION_COST_CONST * traj_with_cost.collision_duration_back_s ;
6161
6262 // Return early if current cost already higher than max cost
63- if (total_cost >= max_cost){
64- traj_with_cost.cost = total_cost;
65- return traj_with_cost;
66- }
63+ if (total_cost >= max_cost)
64+ {
65+ traj_with_cost.cost = total_cost;
66+ return traj_with_cost;
67+ }
6768
6869
6970 // Get the first collision time, excluding the time at the start and end of path
@@ -82,20 +83,23 @@ TrajectoryPathWithCost CollisionEvaluator::evaluate(
8283 traj_with_cost.first_collision_time_s = collision.first ;
8384 traj_with_cost.colliding_obstacle = collision.second ;
8485 }
85-
86+
8687 // Add 6.0 to collision if mid-trajectory collision exist
87- if (traj_with_cost.colliding_obstacle != nullptr ){
88- total_cost += MID_TRAJ_COST_CONST ;
89- }
90-
91- // Add distance from first collision to destination
92- Point first_collision_position = trajectory.getPosition (traj_with_cost.first_collision_time_s );
93- total_cost += (first_collision_position - destination).length ();
94-
95- // Add early collision penalty
96- total_cost += std::max (0.0 , MAX_FUTURE_COLLISION_CHECK_SEC - traj_with_cost.first_collision_time_s );
97-
98- traj_with_cost.cost = total_cost;
88+ if (traj_with_cost.colliding_obstacle != nullptr )
89+ {
90+ total_cost += MID_TRAJ_COST_CONST ;
91+ }
92+
93+ // Add distance from first collision to destination
94+ Point first_collision_position =
95+ trajectory.getPosition (traj_with_cost.first_collision_time_s );
96+ total_cost += (first_collision_position - destination).length ();
97+
98+ // Add early collision penalty
99+ total_cost += std::max (
100+ 0.0 , MAX_FUTURE_COLLISION_CHECK_SEC - traj_with_cost.first_collision_time_s );
101+
102+ traj_with_cost.cost = total_cost;
99103 return traj_with_cost;
100104}
101105
0 commit comments