Thunderbots Project
Loading...
Searching...
No Matches
robot.h
1#pragma once
2
3#include <optional>
4
5#include "proto/team.pb.h"
6#include "software/constants.h"
7#include "software/geom/polygon.h"
8#include "software/time/timestamp.h"
9#include "software/world/robot_capabilities.h"
10#include "software/world/robot_state.h"
11
15class Robot
16{
17 public:
32 explicit Robot(RobotId id, const Point &position, const Vector &velocity,
33 const Angle &orientation, const AngularVelocity &angular_velocity,
34 const Timestamp &timestamp,
35 const std::set<RobotCapability> &unavailable_capabilities =
36 std::set<RobotCapability>(),
37 const RobotConstants_t &robot_constants = DEFAULT_ROBOT_CONSTANTS);
38
49 explicit Robot(RobotId id, const RobotState &initial_state,
50 const Timestamp &timestamp,
51 const std::set<RobotCapability> &unavailable_capabilities =
52 std::set<RobotCapability>(),
53 const RobotConstants_t &robot_constants = DEFAULT_ROBOT_CONSTANTS);
54
55
65 explicit Robot(const TbotsProto::Robot &robot_proto);
66
73 void updateState(const RobotState &state, const Timestamp &timestamp);
74
81
87 Timestamp timestamp() const;
88
94 RobotId id() const;
95
101 Point position() const;
102
108 Vector velocity() const;
109
115 Angle orientation() const;
116
123
129 const std::set<RobotCapability> &getUnavailableCapabilities() const;
130
136 Polygon dribblerArea() const;
137
143 std::set<RobotCapability> getAvailableCapabilities() const;
144
150 std::set<RobotCapability> &getMutableRobotCapabilities();
151
157 const RobotConstants_t &robotConstants() const;
158
167 bool isNearDribbler(
168 const Point &test_point,
169 double TOLERANCE = BALL_TO_FRONT_OF_ROBOT_DISTANCE_WHEN_DRIBBLING) const;
170
181 const Angle &desired_orientation,
182 const AngularVelocity &final_angular_velocity = AngularVelocity::zero()) const;
183
194 Duration getTimeToPosition(const Point &destination,
195 const Vector &final_velocity = Vector()) const;
196
205 bool operator==(const Robot &other) const;
206
213 bool operator!=(const Robot &other) const;
214
215 // A comparator for the Robot class that compares Robots by ID. This is equivalent
216 // to the "less-than" operator.
217 // This comparator is necessary for the Robot class to be used as a key in maps. See
218 // https://stackoverflow.com/questions/6573225/what-requirements-must-stdmap-key-classes-meet-to-be-valid-keys
219 // and
220 // https://stackoverflow.com/questions/5733254/how-can-i-create-my-own-comparator-for-a-map
221 //
222 // We define this "custom" comparator rather than define the '<' operator for this
223 // class because there are many possible ways to order robots, so it doesn't make
224 // sense to define a single "normal" way with the '<' operator. Defining this
225 // comparator struct lets us use it explicitly when necessary and maintain multiple
226 // ways of comparing robots
228 {
229 bool operator()(const Robot &r1, const Robot &r2) const
230 {
231 return r1.id() < r2.id();
232 }
233 };
234
235 private:
236 // The id of this robot
237 RobotId id_;
238 RobotState current_state_;
239 Timestamp timestamp_;
240 // The hardware capabilities of the robot, generated from
241 // RobotCapabilityFlags::broken_dribblers/chippers/kickers dynamic parameters
242 std::set<RobotCapability> unavailable_capabilities_;
243 RobotConstants_t robot_constants_;
244
245 // Default robot constants that should be used for all robots
246 inline static const RobotConstants DEFAULT_ROBOT_CONSTANTS =
247 create2021RobotConstants();
248};
Definition angle.h:15
static constexpr Angle zero()
Definition angle.h:378
Definition duration.h:12
Definition point.h:14
Definition polygon.h:12
Definition robot_state.h:19
Definition robot.h:16
Vector velocity() const
Definition robot.cpp:83
RobotState currentState() const
Definition robot.cpp:63
RobotId id() const
Definition robot.cpp:73
Duration getTimeToPosition(const Point &destination, const Vector &final_velocity=Vector()) const
Definition robot.cpp:188
const std::set< RobotCapability > & getUnavailableCapabilities() const
Definition robot.cpp:129
bool operator!=(const Robot &other) const
Definition robot.cpp:124
void updateState(const RobotState &state, const Timestamp &timestamp)
Definition robot.cpp:57
bool operator==(const Robot &other) const
Definition robot.cpp:116
std::set< RobotCapability > & getMutableRobotCapabilities()
Definition robot.cpp:148
AngularVelocity angularVelocity() const
Definition robot.cpp:93
const RobotConstants_t & robotConstants() const
Definition robot.cpp:153
std::set< RobotCapability > getAvailableCapabilities() const
Definition robot.cpp:134
Polygon dribblerArea() const
Definition robot.cpp:158
Timestamp timestamp() const
Definition robot.cpp:68
Point position() const
Definition robot.cpp:78
Angle orientation() const
Definition robot.cpp:88
Duration getTimeToOrientation(const Angle &desired_orientation, const AngularVelocity &final_angular_velocity=AngularVelocity::zero()) const
Definition robot.cpp:177
bool isNearDribbler(const Point &test_point, double TOLERANCE=BALL_TO_FRONT_OF_ROBOT_DISTANCE_WHEN_DRIBBLING) const
Definition robot.cpp:98
Definition timestamp.h:21
Definition vector.h:12
Definition robot_constants.h:7
Definition robot.h:228