Thunderbots Project
Loading...
Searching...
No Matches
er_force_simulator.h
1#pragma once
2
3#include "extlibs/er_force_sim/src/amun/simulator/simulator.h"
4#include "proto/robot_status_msg.pb.h"
5#include "proto/ssl_vision_wrapper.pb.h"
6#include "proto/tbots_software_msgs.pb.h"
7#include "software/embedded/primitive_executor.h"
8#include "software/physics/euclidean_to_wheel.h"
9#include "software/world/field.h"
10#include "software/world/team_types.h"
11#include "software/world/world.h"
12
13
20{
21 public:
30 explicit ErForceSimulator(const TbotsProto::FieldType& field_type,
31 const RobotConstants_t& robot_constants,
32 std::unique_ptr<RealismConfigErForce>& realism_config,
33 const bool ramping = false,
34 double primitive_executor_time_step_s =
35 DEFAULT_SIMULATOR_TICK_RATE_SECONDS_PER_TICK);
36 ErForceSimulator() = delete;
37 ~ErForceSimulator() = default;
38
47 void setBallState(const BallState& ball_state);
48
60 void setYellowRobots(const std::vector<RobotStateWithId>& robots);
61 void setBlueRobots(const std::vector<RobotStateWithId>& robots);
62 void setRobots(const std::vector<RobotStateWithId>& robots,
63 gameController::Team team);
64 void setRobots(const google::protobuf::Map<uint32_t, TbotsProto::RobotState>& robots,
65 gameController::Team side);
66
72 void setWorldState(const TbotsProto::WorldState& world_state);
73
81 void setYellowRobotPrimitiveSet(const TbotsProto::PrimitiveSet& primitive_set_msg,
82 std::unique_ptr<TbotsProto::World> world_msg);
83 void setBlueRobotPrimitiveSet(const TbotsProto::PrimitiveSet& primitive_set_msg,
84 std::unique_ptr<TbotsProto::World> world_msg);
85
91 void stepSimulation(const Duration& time_step);
92
98 std::vector<TbotsProto::RobotStatus> getBlueRobotStatuses() const;
99 std::vector<TbotsProto::RobotStatus> getYellowRobotStatuses() const;
100
107 std::vector<SSLProto::SSL_WrapperPacket> getSSLWrapperPackets() const;
108
112 world::SimulatorState getSimulatorState() const;
113
119 Field getField() const;
120
126 Timestamp getTimestamp() const;
127
131 void resetCurrentTime();
132
137 static std::unique_ptr<RealismConfigErForce> createDefaultRealismConfig();
138
143 static std::unique_ptr<RealismConfigErForce> createRealisticRealismConfig();
144
145 private:
157 static void setRobotPrimitive(
158 RobotId id, const TbotsProto::PrimitiveSet& primitive_set_msg,
159 std::unordered_map<unsigned int, std::shared_ptr<PrimitiveExecutor>>&
160 robot_primitive_executor_map,
161 const TbotsProto::World& world_msg, const Vector& local_velocity,
162 const AngularVelocity angular_velocity);
163
171 static std::map<RobotId, std::pair<Vector, AngularVelocity>>
172 getRobotIdToLocalVelocityMap(
173 const google::protobuf::RepeatedPtrField<world::SimRobot>& sim_robots);
174
184 SSLSimulationProto::RobotControl updateSimulatorRobots(
185 std::unordered_map<unsigned int, std::shared_ptr<PrimitiveExecutor>>&
186 robot_primitive_executor_map,
187 const TbotsProto::World& world_msg, gameController::Team side);
188
201 std::unique_ptr<TbotsProto::DirectControlPrimitive> getRampedVelocityPrimitive(
202 const Vector current_local_velocity,
203 const AngularVelocity current_local_angular_velocity,
204 TbotsProto::DirectControlPrimitive& target_velocity_primitive,
205 const double& time_to_ramp);
206
207 // Map of Robot id to Primitive Executor
208 std::unordered_map<unsigned int, std::shared_ptr<PrimitiveExecutor>>
209 yellow_primitive_executor_map;
210 std::unordered_map<unsigned int, std::shared_ptr<PrimitiveExecutor>>
211 blue_primitive_executor_map;
212 std::unique_ptr<TbotsProto::World> yellow_team_world_msg;
213 std::unique_ptr<TbotsProto::World> blue_team_world_msg;
214
215 double primitive_executor_time_step_s;
216 unsigned int frame_number;
217
218 // The current time.
219 Timestamp current_time;
220
221 amun::SimulatorSetup er_force_sim_setup;
222 std::unique_ptr<camun::simulator::Simulator> er_force_sim;
223 EuclideanToWheel euclidean_to_four_wheel;
224
225 RobotConstants_t robot_constants;
226 Field field;
227
228 std::optional<RobotId> blue_robot_with_ball;
229 std::optional<RobotId> yellow_robot_with_ball;
230
231 bool ramping;
232
233 const std::string CONFIG_FILE = "simulator/2020";
234 const std::string CONFIG_DIRECTORY = "extlibs/er_force_sim/config/";
235};
Definition angle.h:15
Definition ball_state.h:11
Definition duration.h:12
Definition er_force_simulator.h:20
void setYellowRobotPrimitiveSet(const TbotsProto::PrimitiveSet &primitive_set_msg, std::unique_ptr< TbotsProto::World > world_msg)
Definition er_force_simulator.cpp:298
std::vector< TbotsProto::RobotStatus > getBlueRobotStatuses() const
Definition er_force_simulator.cpp:496
void stepSimulation(const Duration &time_step)
Definition er_force_simulator.cpp:456
Field getField() const
Definition er_force_simulator.cpp:552
static std::unique_ptr< RealismConfigErForce > createDefaultRealismConfig()
Definition er_force_simulator.cpp:82
void setBallState(const BallState &ball_state)
Definition er_force_simulator.cpp:145
static std::unique_ptr< RealismConfigErForce > createRealisticRealismConfig()
Definition er_force_simulator.cpp:104
void setYellowRobots(const std::vector< RobotStateWithId > &robots)
Definition er_force_simulator.cpp:167
world::SimulatorState getSimulatorState() const
Definition er_force_simulator.cpp:547
void resetCurrentTime()
Definition er_force_simulator.cpp:562
void setWorldState(const TbotsProto::WorldState &world_state)
Definition er_force_simulator.cpp:129
Timestamp getTimestamp() const
Definition er_force_simulator.cpp:557
std::vector< SSLProto::SSL_WrapperPacket > getSSLWrapperPackets() const
Definition er_force_simulator.cpp:542
Definition euclidean_to_wheel.h:35
Definition field.h:36
Definition timestamp.h:21
Definition vector.h:12
Definition robot_constants.h:7