2024-Robot
Robot code for 2024 FRC season by Argos, FRC team #1756
Loading...
Searching...
No Matches
field_points.h
Go to the documentation of this file.
1
4
5#pragma once
6
8#include <frc/geometry/Pose2d.h>
9#include <frc/geometry/Translation2d.h>
10#include <frc/geometry/Translation3d.h>
11#include <frc/spline/Spline.h>
12#include <units/angle.h>
13#include <units/length.h>
14
15#include <vector>
16
17#include "measure_up.h"
18
20 // Field max x and y
21 constexpr auto fieldMaxY = 315.5975_in;
22 constexpr auto fieldMaxX = 651.2225_in;
23 constexpr auto fieldMiddleX = fieldMaxX / 2;
24} // namespace field_dimensions
25
26namespace utils {
27 // * Note this will only work on points contained in friendly half of field
31 constexpr frc::Translation3d ReflectFieldPoint(const frc::Translation3d source) {
32 return frc::Translation3d{source.X(), field_dimensions::fieldMaxY - source.Y(), source.Z()};
33 }
34
35 constexpr frc::Translation2d ReflectFieldPoint(const frc::Translation2d source) {
36 return frc::Translation2d{source.X(), field_dimensions::fieldMaxY - source.Y()};
37 }
38
39 constexpr units::angle::degree_t ReflectAngle(const units::angle::degree_t sourceAngle) {
40 return sourceAngle * units::scalar_t{-1};
41 }
42
43 template <class T>
44 std::vector<T> ReflectFieldPoint(const std::vector<T> source) {
45 std::vector<T> retVal;
46 retVal.reserve(source.size());
47 std::transform(
48 source.begin(), source.end(), std::back_inserter(retVal), [](T val) { return ReflectFieldPoint(val); });
49 return retVal;
50 }
51
52 constexpr frc::Spline<3>::ControlVector ReflectFieldPoint(const frc::Spline<3>::ControlVector source) {
53 return frc::Spline<3>::ControlVector{
54 .x{source.x}, .y{units::meter_t{field_dimensions::fieldMaxY}.to<double>() - source.y[0], -source.y[1]}};
55 }
56
57 frc::Pose2d ReflectFieldPoint(const frc::Pose2d source);
58
59 constexpr units::inch_t ReflectYLine(const units::inch_t source) {
60 return field_dimensions::fieldMaxY - source;
61 }
62} // namespace utils
63
64namespace field_points {
65 struct AprilTag {
66 int id;
67 frc::Translation3d pose;
68 units::degree_t yaw;
69 };
70
71 namespace blue_alliance {
72 // Reference game_piece_positions in Docs directory for conventions
73 namespace game_pieces {} // namespace game_pieces
74
75 namespace april_tags {
76 constexpr AprilTag amp{6, {72.5_in, 323.0_in, 53.38_in}, 0_deg};
77 constexpr AprilTag speakerCenter{7, {-1.5_in, 218.42_in, 57.13_in}, 0_deg};
78 constexpr AprilTag speakerInside{8, {-1.5_in, 196.17_in, 57.13_in}, 0_deg};
79 constexpr AprilTag sourceRight{9, {14.02_in, 34.79_in, 53.38_in}, 60_deg};
80 constexpr AprilTag sourceLeft{10, {57.54_in, 9.68_in, 53.38_in}, 60_deg};
81 constexpr AprilTag stageLeft{15, {182.73_in, 177.10_in, 52_in}, 120_deg};
82 constexpr AprilTag stageRight{16, {182.73_in, 146.19_in, 52_in}, 240_deg};
83 constexpr AprilTag stageCenter{14, {209.48_in, 161.62_in, 52_in}, 0_deg};
84 } // namespace april_tags
85
86 } // namespace blue_alliance
87
88 namespace red_alliance {
89 namespace game_pieces {} // namespace game_pieces
90
92 namespace april_tags {
93 constexpr AprilTag amp{5, {}, 0_deg};
94 constexpr AprilTag speakerCenter{4, {}, 0_deg};
95 constexpr AprilTag speakerInside{3, {}, 0_deg};
96 constexpr AprilTag sourceRight{1, {}, 0_deg};
97 constexpr AprilTag sourceLeft{2, {}, 0_deg};
98 constexpr AprilTag stageLeft{11, {}, 0_deg};
99 constexpr AprilTag stageRight{12, {}, 0_deg};
100 constexpr AprilTag stageCenter{13, {}, 0_deg};
101 } // namespace april_tags
102
103 } // namespace red_alliance
104} // namespace field_points
Definition field_points.h:19
constexpr auto fieldMaxX
Definition field_points.h:22
constexpr auto fieldMaxY
Definition field_points.h:21
constexpr auto fieldMiddleX
Definition field_points.h:23
constexpr AprilTag speakerCenter
Definition field_points.h:77
constexpr AprilTag sourceLeft
Definition field_points.h:80
constexpr AprilTag amp
Definition field_points.h:76
constexpr AprilTag speakerInside
Definition field_points.h:78
constexpr AprilTag stageRight
Definition field_points.h:82
constexpr AprilTag stageLeft
Definition field_points.h:81
constexpr AprilTag stageCenter
Definition field_points.h:83
constexpr AprilTag sourceRight
Definition field_points.h:79
constexpr AprilTag speakerInside
Definition field_points.h:95
constexpr AprilTag amp
Definition field_points.h:93
constexpr AprilTag stageLeft
Definition field_points.h:98
constexpr AprilTag speakerCenter
Definition field_points.h:94
constexpr AprilTag sourceLeft
Definition field_points.h:97
constexpr AprilTag sourceRight
Definition field_points.h:96
constexpr AprilTag stageCenter
Definition field_points.h:100
constexpr AprilTag stageRight
Definition field_points.h:99
Definition field_points.h:64
Definition field_points.h:26
constexpr units::angle::degree_t ReflectAngle(const units::angle::degree_t sourceAngle)
Definition field_points.h:39
constexpr units::inch_t ReflectYLine(const units::inch_t source)
Definition field_points.h:59
constexpr frc::Translation3d ReflectFieldPoint(const frc::Translation3d source)
Reflects the point source over the middle of the field to get equivelent points accross the field.
Definition field_points.h:31
Definition field_points.h:65
units::degree_t yaw
Definition field_points.h:68
frc::Translation3d pose
Definition field_points.h:67
int id
Definition field_points.h:66