Thunderbots Project
Loading...
Searching...
No Matches
trajectory_planner.h
1#pragma once
2
3#include <optional>
4
5#include "software/ai/navigator/obstacle/obstacle.hpp"
6#include "software/ai/navigator/trajectory/trajectory_path.h"
7#include "software/ai/navigator/trajectory/trajectory_path_with_cost.h"
8
10{
11 public:
16
31 std::optional<TrajectoryPath> findTrajectory(
32 const Point &start, const Point &destination, const Vector &initial_velocity,
33 const KinematicConstraints &constraints,
34 const std::vector<ObstaclePtr> &obstacles, const Rectangle &navigable_area,
35 const std::optional<Point> &prev_sub_destination = std::nullopt);
36
37 private:
44 double calculateCost(const TrajectoryPathWithCost &traj_with_cost) const;
45
57 TrajectoryPathWithCost getDirectTrajectoryWithCost(
58 const Point &start, const Point &destination, const Vector &initial_velocity,
59 const KinematicConstraints &constraints,
60 const std::vector<ObstaclePtr> &obstacles);
61
72 TrajectoryPathWithCost getTrajectoryWithCost(
73 const TrajectoryPath &trajectory, const std::vector<ObstaclePtr> &obstacles,
74 const std::optional<TrajectoryPathWithCost> &sub_traj_with_cost,
75 const std::optional<double> sub_traj_duration_s);
76
87 double getFirstNonCollisionTime(const TrajectoryPath &traj_path,
88 const std::vector<ObstaclePtr> &obstacles,
89 const double search_end_time_s) const;
90
103 std::pair<double, ObstaclePtr> getFirstCollisionTime(
104 const TrajectoryPath &traj_path, const std::vector<ObstaclePtr> &obstacles,
105 const double start_time_s, const double search_end_time_s) const;
106
119 double getLastNonCollisionTime(const TrajectoryPath &traj_path,
120 const std::vector<ObstaclePtr> &obstacles,
121 const double search_end_time_s) const;
122
133 std::vector<Point> getSubDestinations(const Point &start, const Point &destination,
134 const Rectangle &navigable_area) const;
135
142 static std::vector<Vector> getRelativeSubDestinations();
143
144 const std::vector<Vector> relative_sub_destinations;
145 static constexpr std::array<double, 4> SUB_DESTINATION_DISTANCES_METERS = {0.4, 1.1,
146 2.3, 3};
147 static constexpr unsigned int NUM_SUB_DESTINATION_ANGLES = 16;
148 static constexpr Angle MIN_SUB_DESTINATION_ANGLE = Angle::fromDegrees(20);
149 static constexpr Angle MAX_SUB_DESTINATION_ANGLE = Angle::fromDegrees(140);
150
151 const double SUB_DESTINATION_STEP_INTERVAL_SEC = 0.2;
152 const double COLLISION_CHECK_STEP_INTERVAL_SEC = 0.1;
153 const double FORWARD_COLLISION_CHECK_STEP_INTERVAL_SEC = 0.05;
154 const double MAX_FUTURE_COLLISION_CHECK_SEC = 2.0;
155
156 const double SUB_DESTINATION_CLOSE_BONUS_THRESHOLD_METERS = 0.1;
157 const double SUB_DESTINATION_CLOSE_BONUS_COST = -0.3;
158};
Definition angle.h:15
static constexpr Angle fromDegrees(double deg)
Definition angle.h:408
Definition kinematic_constraints.h:7
Definition point.h:14
Definition rectangle.h:10
Definition trajectory_path_with_cost.h:11
Definition trajectory_path.h:19
Definition trajectory_planner.h:10
TrajectoryPlanner()
Definition trajectory_planner.cpp:6
std::optional< TrajectoryPath > findTrajectory(const Point &start, const Point &destination, const Vector &initial_velocity, const KinematicConstraints &constraints, const std::vector< ObstaclePtr > &obstacles, const Rectangle &navigable_area, const std::optional< Point > &prev_sub_destination=std::nullopt)
Definition trajectory_planner.cpp:56
Definition vector.h:12