16 #include <mrpt/img/TColor.h> 17 #include <mrpt/opengl/CSetOfLines.h> 18 #include <mrpt/opengl/CSetOfObjects.h> 19 #include <mrpt/poses/CPose2D.h> 44 using Ptr = std::shared_ptr<VehicleBase>;
61 const mrpt::math::TVector2D& force,
62 const mrpt::math::TPoint2D& applyPoint =
63 mrpt::math::TPoint2D(0, 0))
override;
90 const mrpt::math::TTwist2D& veh_vel_local)
const;
118 for (
auto& logger :
loggers_) logger.second->setRecording(record);
122 for (
auto& logger :
loggers_) logger.second->clear();
126 for (
auto& logger :
loggers_) logger.second->newSession();
143 for (
auto& sensor :
sensors_) sensor->freeOpenGLResources();
148 std::map<std::string, std::shared_ptr<CSVLogger>>
loggers_;
154 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
155 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical,
156 bool childrenOnly)
override;
221 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& viz,
222 const mrpt::optional_ref<mrpt::opengl::COpenGLScene>& physical);
227 std::vector<mrpt::opengl::CSetOfObjects::Ptr>
glWheels_;
262 #define DECLARES_REGISTER_VEHICLE_DYNAMICS(CLASS_NAME) \ 263 DECLARES_REGISTER_CLASS1(CLASS_NAME, VehicleBase, World*) 265 #define REGISTER_VEHICLE_DYNAMICS(TEXTUAL_NAME, CLASS_NAME) \ 267 TClassFactory_vehicleDynamics, classFactory_vehicleDynamics, \ 268 TEXTUAL_NAME, CLASS_NAME)
size_t getVehicleIndex() const
mrpt::opengl::CSetOfObjects::Ptr glChassis_
void internal_internalGuiUpdate_forces(mrpt::opengl::COpenGLScene &scene)
b2Body * getBox2DChassisBody()
std::shared_ptr< Simulable > Ptr
void updateMaxRadiusFromPoly()
const Wheel & getWheelInfo(const size_t idx) const
std::vector< SensorBase::Ptr > TListSensors
static constexpr char PL_DQ_Y[]
static Ptr factory(World *parent, const rapidxml::xml_node< char > *xml_node)
ClassFactory< VehicleBase, World * > TClassFactory_vehicleDynamics
virtual double getChassisMass() const
b2Fixture * get_fixture_chassis()
std::vector< mrpt::math::TSegment3D > forceSegmentsForRendering_
static constexpr char PL_Q_ROLL[]
virtual void invoke_motor_controllers_post_step([[maybe_unused]] const TSimulContext &context)
virtual void simul_post_timestep(const TSimulContext &context) override
std::map< std::string, std::shared_ptr< CSVLogger > > loggers_
virtual void dynamics_load_params_from_xml(const rapidxml::xml_node< char > *xml_node)=0
virtual void initLoggers()
static constexpr char LOGGER_WHEEL[]
static constexpr char WL_VEL_X[]
mrpt::opengl::CSetOfLines::Ptr glForces_
std::shared_ptr< CSVLogger > getLoggerPtr(std::string logger_name)
static constexpr char PL_Q_X[]
static constexpr char WL_TORQUE[]
mrpt::opengl::CSetOfLines::Ptr glMotorTorques_
std::deque< Wheel > wheels_info_
static constexpr char PL_Q_Z[]
static constexpr char PL_Q_PITCH[]
mrpt::math::TPoint2D chassis_com_
const mrpt::math::TPolygon2D & getChassisShape() const
std::shared_ptr< FrictionBase > FrictionBasePtr
TClassFactory_vehicleDynamics classFactory_vehicleDynamics
static constexpr char PL_Q_YAW[]
static constexpr char PL_DQ_Z[]
A rigid body. These are created via b2World::CreateBody.
std::vector< mrpt::math::TSegment3D > torqueSegmentsForRendering_
VehicleBase(World *parent, size_t nWheels)
Wheel & getWheelInfo(const size_t idx)
std::mutex forceSegmentsForRenderingMtx_
virtual void create_multibody_system(b2World &world)
void chassisAndWheelsVisible(bool visible)
const std::vector< b2Fixture * > & get_fixture_wheels() const
std::vector< mrpt::opengl::CSetOfObjects::Ptr > glWheels_
static constexpr char PL_Q_Y[]
static constexpr char WL_FRIC_X[]
virtual ControllerBaseInterface * getControllerInterface()=0
static constexpr char PL_DQ_X[]
virtual float getMaxVehicleRadius() const
mrpt::math::TPolygon2D chassis_poly_
b2Fixture * fixture_chassis_
Created at.
static void register_vehicle_class(const rapidxml::xml_node< char > *xml_node)
VisualObject * meAsVisualObject() override
void registerOnServer(mvsim::Client &c) override
const TListSensors & getSensors() const
void setRecording(bool record)
virtual void internalGuiUpdate(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical, bool childrenOnly) override
std::vector< b2Fixture * > & get_fixture_wheels()
virtual std::vector< double > invoke_motor_controllers(const TSimulContext &context)=0
virtual void writeLogStrings()
TListSensors sensors_
Sensors aboard.
void freeOpenGLResources() override
mrpt::img::TColor chassis_color_
TListSensors & getSensors()
static constexpr char WL_VEL_Y[]
static constexpr char LOGGER_POSE[]
const b2Fixture * get_fixture_chassis() const
void setVehicleIndex(size_t idx)
mrpt::math::TPoint2D getChassisCenterOfMass() const
In local coordinates (this excludes the mass of wheels)
FrictionBasePtr friction_
void internal_internalGuiUpdate_sensors(const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &viz, const mrpt::optional_ref< mrpt::opengl::COpenGLScene > &physical)
static constexpr char WL_WEIGHT[]
std::vector< mrpt::math::TVector2D > getWheelsVelocityLocal(const mrpt::math::TTwist2D &veh_vel_local) const
static constexpr char WL_FRIC_Y[]
virtual void apply_force(const mrpt::math::TVector2D &force, const mrpt::math::TPoint2D &applyPoint=mrpt::math::TPoint2D(0, 0)) override
size_t getNumWheels() const
std::vector< b2Fixture * > fixture_wheels_
virtual mrpt::math::TTwist2D getVelocityLocalOdoEstimate() const =0
static constexpr char DL_TIMESTAMP[]
virtual void simul_pre_timestep(const TSimulContext &context) override