14#include "trajopt/constraint/angular_velocity_max_magnitude_constraint.hpp"
15#include "trajopt/constraint/lane_constraint.hpp"
16#include "trajopt/constraint/linear_acceleration_max_magnitude_constraint.hpp"
17#include "trajopt/constraint/linear_velocity_direction_constraint.hpp"
18#include "trajopt/constraint/linear_velocity_max_magnitude_constraint.hpp"
19#include "trajopt/constraint/point_at_constraint.hpp"
20#include "trajopt/constraint/point_point_max_constraint.hpp"
21#include "trajopt/constraint/point_point_min_constraint.hpp"
22#include "trajopt/constraint/line_point_constraint.hpp"
23#include "trajopt/constraint/point_line_region_constraint.hpp"
24#include "trajopt/constraint/constraint.hpp"
25#include "trajopt/constraint/pose_equality_constraint.hpp"
26#include "trajopt/constraint/translation_equality_constraint.hpp"
27#include "trajopt/geometry/pose2.hpp"
28#include "trajopt/geometry/translation2.hpp"
29#include "trajopt/path/path.hpp"
30#include "trajopt/util/generate_linear_initial_guess.hpp"
31#include "trajopt/util/generate_spline_initial_guess.hpp"
32#include "trajopt/util/symbol_exports.hpp"
40template <
typename Drivetrain,
typename Solution>
47 path.drivetrain = std::move(drivetrain);
57 void set_bumpers(
double front,
double left,
double right,
double back) {
58 bumpers.emplace_back(KeepOutRegion{.safety_distance = 0.01,
59 .points = {{+front, +left},
70 control_interval_counts = std::move(counts);
77 return control_interval_counts;
91 std::span<const Pose2d> guess_points) {
92 new_wpts(from_index + 1);
93 std::vector<Pose2d>& to_initial_guess_points =
94 initial_guess_points.at(from_index + 1);
95 to_initial_guess_points.insert(to_initial_guess_points.begin(),
96 guess_points.begin(), guess_points.end());
116 double heading_guess = 0.0) {
118 empty_wpt(index, {translation, {heading_guess}});
125 void empty_wpt(
size_t index,
const Pose2d& pose_guess) {
127 initial_guess_points.at(index).back() = pose_guess;
169 double heading_tolerance,
bool flip) {
170 wpt_constraint(index,
183 for (
const auto& bumper : bumpers) {
184 for (
const auto& point : bumper.points) {
199 std::span<Translation2d> field_points) {
200 for (
size_t i = 0; i < field_points.size(); ++i) {
201 size_t j = (i + 1) % field_points.size();
205 {0.0, 0.0}, field_points[i], field_points[j], Side::ABOVE});
206 for (
const auto& bumper : bumpers) {
207 for (
const auto& corner : bumper.points) {
210 field_points[j], Side::ABOVE});
225 const Translation2d& center_line_end,
228 index,
LaneConstraint{center_line_start, center_line_end, tolerance});
240 for (
const auto& bumper : bumpers) {
241 for (
size_t i = 0; i < bumper.points.size(); ++i) {
242 size_t j = (i + 1) % bumper.points.size();
259 sgmt_constraint(from_index, to_index,
270 sgmt_constraint(from_index, to_index,
282 sgmt_constraint(from_index, to_index,
295 sgmt_constraint(from_index, to_index,
307 Translation2d field_point,
double heading_tolerance,
309 sgmt_constraint(from_index, to_index,
322 const Translation2d& center,
double radius) {
323 for (
const auto& bumper : bumpers) {
324 for (
size_t i = 0; i < bumper.points.size(); ++i) {
326 from_index, to_index,
341 std::span<Translation2d> field_points) {
342 for (
size_t i = 0; i < field_points.size(); ++i) {
343 size_t j = (i + 1) % field_points.size();
345 from_index, to_index,
347 {0.0, 0.0}, field_points[i], field_points[j], Side::ABOVE});
348 for (
const auto& bumper : bumpers) {
349 for (
const auto& corner : bumper.points) {
351 from_index, to_index,
353 field_points[j], Side::ABOVE});
369 const Translation2d& center_line_start,
370 const Translation2d& center_line_end,
373 from_index, to_index,
386 Translation2d center,
double radius) {
387 for (
const auto& bumper : bumpers) {
388 for (
size_t i = 0; i < bumper.points.size(); ++i) {
389 size_t j = (i + 1) % bumper.points.size();
391 from_index, to_index,
394 from_index, to_index,
409 const std::function<
void(
const Solution& solution, int64_t handle)>
411 path.callbacks.push_back(callback);
424 return generate_linear_initial_guess<Solution>(initial_guess_points,
425 control_interval_counts);
433 return generate_spline_initial_guess<Solution>(initial_guess_points,
434 control_interval_counts);
444 struct TRAJOPT_DLLEXPORT KeepOutRegion {
446 double safety_distance;
449 std::vector<Translation2d> points;
453 Path<Drivetrain, Solution> path;
456 std::vector<KeepOutRegion> bumpers;
459 std::vector<std::vector<Pose2d>> initial_guess_points;
462 std::vector<size_t> control_interval_counts;
468 void wpt_constraint(
size_t index,
const Constraint& constraint) {
470 path.waypoints.at(index).waypoint_constraints.push_back(constraint);
478 void sgmt_constraint(
size_t from_index,
size_t to_index,
479 const Constraint& constraint) {
480 assert(from_index < to_index);
483 path.waypoints.at(from_index).waypoint_constraints.push_back(constraint);
484 for (
size_t index = from_index + 1; index <= to_index; ++index) {
485 path.waypoints.at(index).waypoint_constraints.push_back(constraint);
486 path.waypoints.at(index).segment_constraints.push_back(constraint);
493 void new_wpts(
size_t final_index) {
494 if (final_index < path.waypoints.size()) {
498 for (
size_t i = path.waypoints.size(); i <= final_index; ++i) {
499 path.waypoints.emplace_back();
500 initial_guess_points.emplace_back(std::vector<Pose2d>{{0.0, 0.0, {0.0}}});
502 control_interval_counts.push_back(40);
Angular velocity max magnitude inequality constraint.
Definition angular_velocity_max_magnitude_constraint.hpp:17
Definition lane_constraint.hpp:22
Definition line_point_constraint.hpp:22
Linear acceleration max magnitude inequality constraint.
Definition linear_acceleration_max_magnitude_constraint.hpp:17
Linear velocity direction equality constraint.
Definition linear_velocity_direction_constraint.hpp:15
Linear velocity max magnitude inequality constraint.
Definition linear_velocity_max_magnitude_constraint.hpp:17
Definition path_builder.hpp:41
void wpt_linear_velocity_direction(size_t index, double angle)
Definition path_builder.hpp:134
void empty_wpt(size_t index, const Pose2d &pose_guess)
Definition path_builder.hpp:125
void wpt_keep_in_polygon(size_t index, std::span< Translation2d > field_points)
Definition path_builder.hpp:198
Solution calculate_linear_initial_guess() const
Definition path_builder.hpp:423
void sgmt_keep_in_lane(size_t from_index, size_t to_index, const Translation2d ¢er_line_start, const Translation2d ¢er_line_end, double tolerance)
Definition path_builder.hpp:368
void pose_wpt(size_t index, const Pose2d &pose)
Definition path_builder.hpp:104
void sgmt_linear_velocity_direction(size_t from_index, size_t to_index, double angle)
Definition path_builder.hpp:257
void sgmt_keep_out_circle(size_t from_index, size_t to_index, Translation2d center, double radius)
Definition path_builder.hpp:385
void wpt_keep_in_circle(size_t index, const Translation2d ¢er, double radius)
Definition path_builder.hpp:181
void sgmt_initial_guess_points(size_t from_index, std::span< const Pose2d > guess_points)
Definition path_builder.hpp:90
void sgmt_linear_acceleration_max_magnitude(size_t from_index, size_t to_index, double magnitude)
Definition path_builder.hpp:292
void wpt_keep_out_circle(size_t index, const Translation2d ¢er, double radius)
Definition path_builder.hpp:238
void wpt_linear_velocity_max_magnitude(size_t index, double magnitude)
Definition path_builder.hpp:142
void sgmt_linear_velocity_max_magnitude(size_t from_index, size_t to_index, double magnitude)
Definition path_builder.hpp:268
void translation_wpt(size_t index, const Translation2d &translation, double heading_guess=0.0)
Definition path_builder.hpp:115
void wpt_point_at(size_t index, const Translation2d &field_point, double heading_tolerance, bool flip)
Definition path_builder.hpp:168
void sgmt_point_at(size_t from_index, size_t to_index, Translation2d field_point, double heading_tolerance, bool flip)
Definition path_builder.hpp:306
const std::vector< size_t > & get_control_interval_counts() const
Definition path_builder.hpp:76
void add_callback(const std::function< void(const Solution &solution, int64_t handle)> callback)
Definition path_builder.hpp:408
Solution calculate_spline_initial_guess() const
Definition path_builder.hpp:432
void wpt_angular_velocity_max_magnitude(size_t index, double magnitude)
Definition path_builder.hpp:150
void set_bumpers(double front, double left, double right, double back)
Definition path_builder.hpp:57
void set_drivetrain(Drivetrain drivetrain)
Definition path_builder.hpp:46
void sgmt_keep_in_polygon(size_t from_index, size_t to_index, std::span< Translation2d > field_points)
Definition path_builder.hpp:340
void sgmt_angular_velocity_max_magnitude(size_t from_index, size_t to_index, double magnitude)
Definition path_builder.hpp:280
void set_control_interval_counts(std::vector< size_t > &&counts)
Definition path_builder.hpp:69
void sgmt_keep_in_circle(size_t from_index, size_t to_index, const Translation2d ¢er, double radius)
Definition path_builder.hpp:321
void wpt_keep_in_lane(size_t index, const Translation2d ¢er_line_start, const Translation2d ¢er_line_end, double tolerance)
Definition path_builder.hpp:224
void wpt_linear_acceleration_max_magnitude(size_t index, double magnitude)
Definition path_builder.hpp:158
Path< Drivetrain, Solution > & get_path()
Definition path_builder.hpp:417
Definition point_at_constraint.hpp:21
Definition point_line_region_constraint.hpp:32
Definition point_point_max_constraint.hpp:21
Definition point_point_min_constraint.hpp:21
Pose equality constraint.
Definition pose_equality_constraint.hpp:15
Translation equality constraint.
Definition translation_equality_constraint.hpp:15