8#include "bitrl//bitrl_config.h"
12#include "rlenvs/rigid_bodies/body_rotation.h"
13#include "rlenvs/rigid_bodies/body_translation.h"
14#include "rlenvs/rlenvs_types_v2.h"
16#include <webots/DistanceSensor.hpp>
17#include <webots/Motor.hpp>
18#include <webots/PositionSensor.hpp>
19#include <webots/Robot.hpp>
23#include <webots/Supervisor.hpp>
32namespace webots_robots
39struct EpuckRobotProperties
45 static constexpr uint_t DISTANCE_SENSORS_NUMBER = 8;
50 static constexpr uint_t LEFT_POSITION_SENSOR_ID = 0;
55 static constexpr uint_t RIGHT_POSITION_SENSOR_ID = 1;
60 static constexpr uint_t LEFT_MOTOR_ID = 0;
65 static constexpr uint_t RIGHT_MOTOR_ID = 0;
70 static constexpr real_t WHEEL_RADIUS = 0.025;
75 static constexpr real_t AXLE_LENGTH = 0.052;
80 static constexpr real_t MAX_FWD_SPEED = 0.25;
85 static constexpr real_t MAX_BWD_SPEED = 0.25;
90 static constexpr real_t MAX_ROTATION_SPEED = 6.28;
118 EpuckOdometry(real_t dl_, real_t dr_, real_t da_);
125 std::ostream &print(std::ostream &out)
const noexcept;
128inline EpuckOdometry::EpuckOdometry(real_t dl_, real_t dr_, real_t da_) : dl(dl_), dr(dr_), da(da_)
132inline std::ostream &
operator<<(std::ostream &out,
const EpuckOdometry &info)
134 return info.print(out);
146class EpuckRobot final :
protected EpuckRobotProperties
152 static const std::string name;
157 static constexpr uint_t DEFAULT_SIM_TIME_STEP = 32;
162 using EpuckRobotProperties::AXLE_LENGTH;
163 using EpuckRobotProperties::DISTANCE_SENSORS_NUMBER;
164 using EpuckRobotProperties::LEFT_POSITION_SENSOR_ID;
165 using EpuckRobotProperties::MAX_BWD_SPEED;
166 using EpuckRobotProperties::MAX_FWD_SPEED;
167 using EpuckRobotProperties::MAX_ROTATION_SPEED;
168 using EpuckRobotProperties::RIGHT_POSITION_SENSOR_ID;
169 using EpuckRobotProperties::WHEEL_RADIUS;
179 std::shared_ptr<webots::Supervisor> get_webots_robot_prt() {
return robot_; }
184 void activate_motor(uint_t motor_id, real_t init_velocity);
189 void activate_position_sensor(uint_t sensor_id, uint_t time_step);
194 void activate_proximity_sensor(
const std::string &name, uint_t time_step);
199 int_t step(uint_t time_step) {
return robot_->step(time_step); }
204 int_t begin_step(uint_t time_step) {
return robot_->stepBegin(time_step); }
209 int_t end_step() {
return robot_->stepEnd(); }
219 void reload() { robot_->worldReload(); }
224 void stop_simulation() { robot_->simulationQuit(EXIT_SUCCESS); }
229 void pause_simulation()
231 robot_->simulationSetMode(webots::Supervisor::SIMULATION_MODE_PAUSE);
237 EpuckOdometry compute_odometry()
const;
242 uint_t get_basic_time_step()
const {
return robot_->getBasicTimeStep(); }
247 real_t get_distance_value_from_sensor(
const std::string &sensor_name)
const;
252 std::vector<real_t> read_distance_sensors()
const;
258 real_t get_motor_velocity(uint_t mid)
const {
return motors_[mid]->getVelocity(); }
263 RBTranslation get_position()
const;
268 RBRotation get_rotation()
const;
270 webots::Motor *get_motor(uint_t m) {
return motors_[m]; }
271 webots::PositionSensor *get_position_sensor(uint_t m) {
return position_sensors_[m]; }
277 std::shared_ptr<webots::Supervisor> robot_;
282 std::vector<webots::PositionSensor *> position_sensors_;
287 std::vector<webots::Motor *> motors_;
292 std::vector<webots::DistanceSensor *> proximity_sensors_;
int int_t
integer type
Definition bitrl_types.h:33
double real_t
real_t
Definition bitrl_types.h:23
std::size_t uint_t
uint_t
Definition bitrl_types.h:43
std::ostream & operator<<(std::ostream &out, const A2CConfig &opts)
Definition a2c_config.h:115
info
Definition play.py:44
Definition quadcopter_sim_env.cpp:16