@@ -297,19 +297,19 @@ void ErForceSimulator::setYellowRobotPrimitiveSet(
297297 const TbotsProto::PrimitiveSet& primitive_set_msg,
298298 std::unique_ptr<TbotsProto::World> world_msg)
299299{
300- auto sim_state = getSimulatorState ();
301- const auto & sim_robots = sim_state.yellow_robots ();
302- const auto robot_to_vel_pair_map = getRobotIdToLocalVelocityMap (sim_robots);
300+ auto sim_state = getSimulatorState ();
301+ const auto & sim_robots = sim_state.yellow_robots ();
302+ const auto robot_map = getRobotIdToRobotStateMap (sim_robots);
303303
304304 yellow_team_world_msg = std::move (world_msg);
305305 const TbotsProto::World world_proto = *yellow_team_world_msg;
306306 for (auto & [robot_id, primitive] : primitive_set_msg.robot_primitives ())
307307 {
308- if (robot_to_vel_pair_map .contains (robot_id))
308+ if (robot_map .contains (robot_id))
309309 {
310- auto & [local_vel, angular_vel] = robot_to_vel_pair_map .at (robot_id);
310+ const auto & robot_state = robot_map .at (robot_id);
311311 setRobotPrimitive (robot_id, primitive_set_msg, yellow_primitive_executor_map,
312- world_proto, local_vel, angular_vel );
312+ world_proto, robot_state );
313313 }
314314 }
315315}
@@ -318,20 +318,20 @@ void ErForceSimulator::setBlueRobotPrimitiveSet(
318318 const TbotsProto::PrimitiveSet& primitive_set_msg,
319319 std::unique_ptr<TbotsProto::World> world_msg)
320320{
321- auto sim_state = getSimulatorState ();
322- const auto & sim_robots = sim_state.blue_robots ();
323- const auto robot_to_vel_pair_map = getRobotIdToLocalVelocityMap (sim_robots);
321+ auto sim_state = getSimulatorState ();
322+ const auto & sim_robots = sim_state.blue_robots ();
323+ const auto robot_map = getRobotIdToRobotStateMap (sim_robots);
324324
325325 blue_team_world_msg = std::move (world_msg);
326326 const TbotsProto::World world_proto = *blue_team_world_msg;
327327
328328 for (auto & [robot_id, primitive] : primitive_set_msg.robot_primitives ())
329329 {
330- if (robot_to_vel_pair_map .contains (robot_id))
330+ if (robot_map .contains (robot_id))
331331 {
332- auto & [local_vel, angular_vel] = robot_to_vel_pair_map .at (robot_id);
332+ const auto & robot_state = robot_map .at (robot_id);
333333 setRobotPrimitive (robot_id, primitive_set_msg, blue_primitive_executor_map,
334- world_proto, local_vel, angular_vel );
334+ world_proto, robot_state );
335335 }
336336 }
337337}
@@ -340,8 +340,7 @@ void ErForceSimulator::setRobotPrimitive(
340340 RobotId id, const TbotsProto::PrimitiveSet& primitive_set_msg,
341341 std::unordered_map<unsigned int , std::shared_ptr<PrimitiveExecutor>>&
342342 robot_primitive_executor_map,
343- const TbotsProto::World& world_msg, const Vector& local_velocity,
344- const AngularVelocity angular_velocity)
343+ const TbotsProto::World& world_msg, const RobotState& robot_state)
345344{
346345 // Set to NEG_X because the world msg in this simulator is normalized
347346 // correctly
@@ -351,7 +350,7 @@ void ErForceSimulator::setRobotPrimitive(
351350 {
352351 auto primitive_executor = robot_primitive_executor_iter->second ;
353352 primitive_executor->updatePrimitive (primitive_set_msg.robot_primitives ().at (id));
354- primitive_executor->updateVelocity (local_velocity, angular_velocity );
353+ primitive_executor->updateState (robot_state );
355354 }
356355 else
357356 {
@@ -367,34 +366,25 @@ SSLSimulationProto::RobotControl ErForceSimulator::updateSimulatorRobots(
367366{
368367 SSLSimulationProto::RobotControl robot_control;
369368
370- auto sim_state = getSimulatorState ();
371- std::map<RobotId, std::pair<Vector, Angle>> current_velocity_map;
372- if (side == gameController::Team::BLUE )
373- {
374- const auto & sim_robots = sim_state.blue_robots ();
375- current_velocity_map = getRobotIdToLocalVelocityMap (sim_robots);
376- }
377- else
378- {
379- const auto & sim_robots = sim_state.yellow_robots ();
380- current_velocity_map = getRobotIdToLocalVelocityMap (sim_robots);
381- }
369+ auto sim_state = getSimulatorState ();
370+ const auto & sim_robots = (side == gameController::Team::BLUE )
371+ ? sim_state.blue_robots ()
372+ : sim_state.yellow_robots ();
373+ const auto robot_map = getRobotIdToRobotStateMap (sim_robots);
382374
383- for (auto & primitive_executor_with_id : robot_primitive_executor_map)
375+ for (auto & [robot_id, primitive_executor] : robot_primitive_executor_map)
384376 {
385- unsigned int robot_id = primitive_executor_with_id.first ;
386- auto & primitive_executor = primitive_executor_with_id.second ;
387377 std::unique_ptr<TbotsProto::DirectControlPrimitive> direct_control;
388378
389379 TbotsProto::PrimitiveExecutorStatus status; // Added for compilation
390380 if (ramping)
391381 {
392382 auto direct_control_no_ramp =
393383 primitive_executor->stepPrimitive (status, primitive_executor_time_step);
394- direct_control = getRampedVelocityPrimitive (
395- current_velocity_map. at (robot_id). first ,
396- current_velocity_map. at (robot_id). second , *direct_control_no_ramp ,
397- primitive_executor_time_step);
384+ const auto & robot_state = robot_map. at (robot_id);
385+ direct_control = getRampedVelocityPrimitive (
386+ robot_state. localVelocity (), robot_state. angularVelocity () ,
387+ *direct_control_no_ramp, primitive_executor_time_step);
398388 }
399389 else
400390 {
@@ -563,18 +553,18 @@ void ErForceSimulator::resetCurrentTime()
563553 current_time = Timestamp::fromSeconds (0 );
564554}
565555
566- std::map<RobotId, std::pair<Vector, AngularVelocity>>
567- ErForceSimulator::getRobotIdToLocalVelocityMap (
556+ std::map<RobotId, RobotState> ErForceSimulator::getRobotIdToRobotStateMap (
568557 const google::protobuf::RepeatedPtrField<world::SimRobot>& sim_robots)
569558{
570- std::map<RobotId, std::pair<Vector, AngularVelocity>> robot_to_local_velocity ;
559+ std::map<RobotId, RobotState> robot_map ;
571560 for (const auto & sim_robot : sim_robots)
572561 {
573- const Vector local_vel =
574- globalToLocalVelocity (Vector (sim_robot.v_x (), sim_robot.v_y ()),
575- Angle::fromRadians (sim_robot.angle ()));
576- const AngularVelocity angular_vel = Angle::fromRadians (sim_robot.r_z ());
577- robot_to_local_velocity[sim_robot.id ()] = {local_vel, angular_vel};
562+ const auto position = Point (sim_robot.p_x (), sim_robot.p_y ());
563+ const auto velocity = Vector (sim_robot.v_x (), sim_robot.v_y ());
564+ const auto orientation = Angle::fromRadians (sim_robot.angle ());
565+ const auto angular_velocity = AngularVelocity::fromRadians (sim_robot.r_z ());
566+ robot_map[sim_robot.id ()] =
567+ RobotState (position, velocity, orientation, angular_velocity);
578568 }
579- return robot_to_local_velocity ;
569+ return robot_map ;
580570}
0 commit comments