TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
line_point_constraint.hpp
1// Copyright (c) TrajoptLib contributors
2
3#pragma once
4
5#include <cassert>
6#include <utility>
7
8#include <sleipnir/autodiff/variable.hpp>
9#include <sleipnir/optimization/problem.hpp>
10
11#include "trajopt/constraint/detail/line_point_squared_distance.hpp"
12#include "trajopt/geometry/pose2.hpp"
13#include "trajopt/geometry/translation2.hpp"
14#include "trajopt/util/symbol_exports.hpp"
15
16namespace trajopt {
17
22class TRAJOPT_DLLEXPORT LinePointConstraint {
23 public:
31 explicit LinePointConstraint(Translation2d robot_line_start,
32 Translation2d robot_line_end,
33 Translation2d field_point, double min_distance)
34 : m_robot_line_start{std::move(robot_line_start)},
35 m_robot_line_end{std::move(robot_line_end)},
36 m_field_point{std::move(field_point)},
37 m_min_distance{min_distance} {
38 assert(min_distance >= 0.0);
39 }
40
49 void apply(
50 slp::Problem<double>& problem, const Pose2v<double>& pose,
51 [[maybe_unused]] const Translation2v<double>& linear_velocity,
52 [[maybe_unused]] const slp::Variable<double>& angular_velocity,
53 [[maybe_unused]] const Translation2v<double>& linear_acceleration,
54 [[maybe_unused]] const slp::Variable<double>& angular_acceleration) {
55 auto line_start =
56 pose.translation() + m_robot_line_start.rotate_by(pose.rotation());
57 auto line_end =
58 pose.translation() + m_robot_line_end.rotate_by(pose.rotation());
59 auto squared_distance = detail::line_point_squared_distance(
60 line_start, line_end, m_field_point);
61 problem.subject_to(squared_distance >= m_min_distance * m_min_distance);
62 }
63
64 private:
65 Translation2d m_robot_line_start;
66 Translation2d m_robot_line_end;
67 Translation2d m_field_point;
68 double m_min_distance;
69};
70
71} // namespace trajopt
LinePointConstraint(Translation2d robot_line_start, Translation2d robot_line_end, Translation2d field_point, double min_distance)
Definition line_point_constraint.hpp:31
void apply(slp::Problem< double > &problem, const Pose2v< double > &pose, const Translation2v< double > &linear_velocity, const slp::Variable< double > &angular_velocity, const Translation2v< double > &linear_acceleration, const slp::Variable< double > &angular_acceleration)
Definition line_point_constraint.hpp:49
constexpr const Rotation2< T > & rotation() const
Definition pose2.hpp:66
constexpr const Translation2< T > & translation() const
Definition pose2.hpp:51
constexpr auto rotate_by(const Rotation2< U > &rotation) const
Definition translation2.hpp:117