Thunderbots Project
Loading...
Searching...
No Matches
primitive_executor.h
1#pragma once
2#include "proto/primitive.pb.h"
3#include "proto/robot_status_msg.pb.h"
4#include "proto/tbots_software_msgs.pb.h"
5#include "software/ai/navigator/trajectory/bang_bang_trajectory_1d_angular.h"
6#include "software/ai/navigator/trajectory/trajectory_path.h"
7#include "software/geom/vector.h"
8#include "software/world/world.h"
9
11{
12 public:
21 explicit PrimitiveExecutor(const Duration time_step,
22 const RobotConstants_t &robot_constants,
23 const TeamColour friendly_team_colour,
24 const RobotId robot_id);
25
30 void updatePrimitive(const TbotsProto::Primitive &primitive_msg);
31
35 void setStopPrimitive();
36
43 void updateVelocity(const Vector &local_velocity,
44 const AngularVelocity &angular_velocity);
45
50 void setRobotId(RobotId robot_id);
51
60 std::unique_ptr<TbotsProto::DirectControlPrimitive> stepPrimitive(
61 TbotsProto::PrimitiveExecutorStatus &status);
62
63 private:
64 /*
65 * Compute the next target linear _local_ velocity the robot should be at.
66 * @returns Vector The target linear _local_ velocity
67 */
68 Vector getTargetLinearVelocity();
69
70 /*
71 * Returns the next target angular velocity the robot
72 *
73 * @returns AngularVelocity The target angular velocity
74 */
75 AngularVelocity getTargetAngularVelocity();
76
77 TbotsProto::Primitive current_primitive_;
78 Duration time_since_trajectory_creation_;
79 Vector velocity_;
80 AngularVelocity angular_velocity_;
81 Angle orientation_;
82 TeamColour friendly_team_colour_;
83 RobotConstants_t robot_constants_;
84 std::optional<TrajectoryPath> trajectory_path_;
85 std::optional<BangBangTrajectory1DAngular> angular_trajectory_;
86
87 // TODO (#2855): Add dynamic time_step to `stepPrimitive` and remove this constant
88 // time step to be used, in Seconds
89 Duration time_step_;
90 RobotId robot_id_;
91
92 // Estimated delay between a vision frame to AI processing to robot executing
93 static constexpr double VISION_TO_ROBOT_DELAY_S = 0.03;
94
95 // The distance away from the destination at which we start dampening the velocity
96 // to avoid jittering around the destination.
97 static constexpr double MAX_DAMPENING_VELOCITY_DISTANCE_M = 0.05;
98};
Definition angle.h:15
Definition duration.h:12
Definition primitive_executor.h:11
std::unique_ptr< TbotsProto::DirectControlPrimitive > stepPrimitive(TbotsProto::PrimitiveExecutorStatus &status)
Definition primitive_executor.cpp:91
void updateVelocity(const Vector &local_velocity, const AngularVelocity &angular_velocity)
Definition primitive_executor.cpp:47
void updatePrimitive(const TbotsProto::Primitive &primitive_msg)
Definition primitive_executor.cpp:25
void setRobotId(RobotId robot_id)
Definition primitive_executor.cpp:150
void setStopPrimitive()
Definition primitive_executor.cpp:42
Definition vector.h:12
Definition robot_constants.h:7