TrajoptLib
Library for generating time-optimal trajectories for FRC robots.
Loading...
Searching...
No Matches
point_point_min_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/geometry/pose2.hpp"
12#include "trajopt/geometry/translation2.hpp"
13#include "trajopt/util/symbol_exports.hpp"
14
15namespace trajopt {
16
21class TRAJOPT_DLLEXPORT PointPointMinConstraint {
22 public:
29 explicit PointPointMinConstraint(Translation2d robot_point,
30 Translation2d field_point,
31 double min_distance)
32 : m_robot_point{std::move(robot_point)},
33 m_field_point{std::move(field_point)},
34 m_min_distance{min_distance} {
35 assert(min_distance >= 0.0);
36 }
37
46 void apply(
47 slp::Problem<double>& problem, const Pose2v<double>& pose,
48 [[maybe_unused]] const Translation2v<double>& linear_velocity,
49 [[maybe_unused]] const slp::Variable<double>& angular_velocity,
50 [[maybe_unused]] const Translation2v<double>& linear_acceleration,
51 [[maybe_unused]] const slp::Variable<double>& angular_acceleration) {
52 auto bumper_corner =
53 pose.translation() + m_robot_point.rotate_by(pose.rotation());
54 auto dx = m_field_point.x() - bumper_corner.x();
55 auto dy = m_field_point.y() - bumper_corner.y();
56 problem.subject_to(dx * dx + dy * dy >= m_min_distance * m_min_distance);
57 }
58
59 private:
60 Translation2d m_robot_point;
61 Translation2d m_field_point;
62 double m_min_distance;
63};
64
65} // namespace trajopt
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 point_point_min_constraint.hpp:46
PointPointMinConstraint(Translation2d robot_point, Translation2d field_point, double min_distance)
Definition point_point_min_constraint.hpp:29
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