Simulable.h
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2023 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #pragma once
11 
12 #include <box2d/b2_body.h>
13 #include <mrpt/math/TPoint2D.h>
14 #include <mrpt/math/TPose3D.h>
15 #include <mrpt/poses/CPose2D.h>
16 #include <mrpt/poses/CPose3DInterpolator.h>
17 #include <mvsim/basic_types.h>
18 
19 #include <shared_mutex>
20 
21 namespace mvsim
22 {
23 class Client;
24 class World;
25 class VisualObject;
26 
28 {
29  ParseSimulableParams() = default;
30 
31  bool init_pose_mandatory = true;
32 };
33 
34 class Simulable
35 {
36  public:
37  using Ptr = std::shared_ptr<Simulable>;
38 
39  Simulable(World* parent) : simulable_parent_(parent) {}
40 
43  virtual void simul_pre_timestep(const TSimulContext& context);
44 
50  virtual void simul_post_timestep(const TSimulContext& context);
51 
55  virtual void apply_force(
56  const mrpt::math::TVector2D& force,
57  const mrpt::math::TPoint2D& applyPoint = mrpt::math::TPoint2D(0, 0));
58 
59  virtual VisualObject* meAsVisualObject() { return nullptr; }
60 
62  mrpt::math::TTwist2D getVelocityLocal() const;
63 
66  mrpt::math::TPose3D getPose() const;
67 
69  mrpt::math::TPose3D getPoseNoLock() const;
70 
71  mrpt::math::TTwist2D getTwist() const;
72 
77  mrpt::math::TVector3D getLinearAcceleration() const;
78 
81  void setPose(const mrpt::math::TPose3D& p) const;
82 
83  void setTwist(const mrpt::math::TTwist2D& dq) const;
84 
86  mrpt::poses::CPose2D getCPose2D() const;
87 
89  mrpt::poses::CPose3D getCPose3D() const;
90 
92  const std::string& getName() const { return name_; }
93 
95  void setName(const std::string& s) { name_ = s; }
96 
98  bool isInCollision() const { return isInCollision_; }
99 
103  bool hadCollision() const { return hadCollisionFlag_; }
104 
106  void resetCollisionFlag() { hadCollisionFlag_ = false; }
107 
108  virtual void registerOnServer(mvsim::Client& c);
109 
110  const b2Body* b2d_body() const { return b2dBody_; }
111  b2Body* b2d_body() { return b2dBody_; }
112 
113  World* getSimulableWorldObject() { return simulable_parent_; }
114  const World* getSimulableWorldObject() const { return simulable_parent_; }
115 
116  virtual void freeOpenGLResources() {}
117 
118  protected:
120  std::string name_;
121 
127  b2Body* b2dBody_ = nullptr;
128 
129  bool parseSimulable(
130  const JointXMLnode<>& node, const ParseSimulableParams& p = {});
131 
132  void internalHandlePublish(const TSimulContext& context);
133 
134  private:
135  World* simulable_parent_ = nullptr;
136 
138  mutable std::shared_mutex q_mtx_;
139 
141  mrpt::math::TPose3D q_ = mrpt::math::TPose3D::Identity();
142 
144  mrpt::math::TTwist2D dq_{0, 0, 0};
145 
147  mrpt::math::TVector3D ddq_lin_{0, 0, 0};
148 
149  mrpt::math::TPose3D former_q_;
150 
151  // ============ ANIMATION VARIABLES ============
153  mrpt::math::TPose3D initial_q_ = mrpt::math::TPose3D::Identity();
154 
155  std::optional<mrpt::poses::CPose3DInterpolator> anim_keyframes_path_;
156 
157  // ============ END OF ANIMATION VARIABLES ============
158 
160  bool isInCollision_ = false;
161 
164  bool hadCollisionFlag_ = false;
165 
167  std::string publishPoseTopic_;
168 
169  std::string publishRelativePoseTopic_;
170  std::vector<std::string> publishRelativePoseOfOtherObjects_;
171 
172  double publishPosePeriod_ = 100e-3;
173  double publishPoseLastTime_ = 0;
174 };
175 } // namespace mvsim
std::shared_ptr< Simulable > Ptr
Definition: Simulable.h:37
b2Body * b2d_body()
Definition: Simulable.h:111
const b2Body * b2d_body() const
Definition: Simulable.h:110
virtual void freeOpenGLResources()
Definition: Simulable.h:116
bool hadCollision() const
Definition: Simulable.h:103
A rigid body. These are created via b2World::CreateBody.
Definition: b2_body.h:128
std::string name_
Definition: Simulable.h:120
const World * getSimulableWorldObject() const
Definition: Simulable.h:114
void setName(const std::string &s)
Definition: Simulable.h:95
const std::string & getName() const
Definition: Simulable.h:92
void resetCollisionFlag()
Definition: Simulable.h:106
bool isInCollision() const
Definition: Simulable.h:98
Simulable(World *parent)
Definition: Simulable.h:39
World * getSimulableWorldObject()
Definition: Simulable.h:113
virtual VisualObject * meAsVisualObject()
Definition: Simulable.h:59


mvsim
Author(s):
autogenerated on Tue Jul 4 2023 03:08:21