17 #ifndef GAZEBO_PHYSICS_LINK_HH_ 18 #define GAZEBO_PHYSICS_LINK_HH_ 23 #include <ignition/math/Matrix3.hh> 59 public:
virtual ~
Link();
63 public:
virtual void Load(sdf::ElementPtr _sdf)
override;
66 public:
virtual void Init()
override;
69 public:
void Fini()
override;
72 public:
void Reset()
override;
76 public:
void ResetPhysicsStates();
80 public:
virtual void UpdateParameters(sdf::ElementPtr _sdf)
override;
89 public:
void SetScale(
const ignition::math::Vector3d &_scale);
93 public:
virtual void SetEnabled(
bool _enable)
const = 0;
97 public:
virtual bool GetEnabled()
const = 0;
102 public:
virtual bool SetSelected(
bool _set)
override;
106 public:
virtual void SetGravityMode(
bool _mode) = 0;
110 public:
virtual bool GetGravityMode()
const = 0;
114 public:
virtual void SetWindMode(
const bool _mode);
118 public:
virtual bool WindMode()
const;
124 public:
virtual void SetSelfCollide(
bool _collide) = 0;
134 public:
void SetCollideMode(
const std::string &_mode);
143 public:
bool GetSelfCollide()
const;
147 public:
void SetLaserRetro(
float _retro);
151 public:
virtual void SetLinearVel(
152 const ignition::math::Vector3d &_vel) = 0;
156 public:
virtual void SetAngularVel(
157 const ignition::math::Vector3d &_vel) = 0;
161 public:
virtual void SetForce(
162 const ignition::math::Vector3d &_force) = 0;
166 public:
virtual void SetTorque(
167 const ignition::math::Vector3d &_torque) = 0;
171 public:
virtual void AddForce(
const ignition::math::Vector3d &_force) = 0;
176 public:
virtual void AddRelativeForce(
177 const ignition::math::Vector3d &_force) = 0;
182 public:
virtual void AddForceAtWorldPosition(
183 const ignition::math::Vector3d &_force,
184 const ignition::math::Vector3d &_pos) = 0;
194 public:
virtual void AddForceAtRelativePosition(
195 const ignition::math::Vector3d &_force,
196 const ignition::math::Vector3d &_relPos) = 0;
204 public:
virtual void AddLinkForce(
205 const ignition::math::Vector3d &_force,
206 const ignition::math::Vector3d &_offset =
207 ignition::math::Vector3d::Zero) = 0;
211 public:
virtual void AddTorque(
212 const ignition::math::Vector3d &_torque) = 0;
217 public:
virtual void AddRelativeTorque(
218 const ignition::math::Vector3d &_torque) = 0;
224 public: ignition::math::Pose3d WorldCoGPose()
const;
229 public:
virtual ignition::math::Vector3d WorldLinearVel()
const override;
238 public:
virtual ignition::math::Vector3d WorldLinearVel(
239 const ignition::math::Vector3d &_offset)
const = 0;
248 public:
virtual ignition::math::Vector3d WorldLinearVel(
249 const ignition::math::Vector3d &_offset,
250 const ignition::math::Quaterniond &_q)
const = 0;
256 public:
virtual ignition::math::Vector3d WorldCoGLinearVel()
const = 0;
260 public: ignition::math::Vector3d RelativeLinearVel()
const override;
264 public: ignition::math::Vector3d RelativeAngularVel()
const override;
268 public: ignition::math::Vector3d RelativeLinearAccel()
const override;
272 public: ignition::math::Vector3d WorldLinearAccel()
const override;
276 public: ignition::math::Vector3d RelativeAngularAccel()
const override;
283 public: ignition::math::Vector3d WorldAngularMomentum()
const;
292 public: ignition::math::Vector3d WorldAngularAccel()
const override;
296 public: ignition::math::Vector3d RelativeForce()
const;
300 public:
virtual ignition::math::Vector3d WorldForce()
const = 0;
304 public: ignition::math::Vector3d RelativeTorque()
const;
309 public:
virtual ignition::math::Vector3d WorldTorque()
const = 0;
321 public:
void SetInertial(
const InertialPtr &_inertial);
328 public: ignition::math::Pose3d WorldInertialPose()
const;
333 public: ignition::math::Matrix3d WorldInertiaMatrix()
const;
340 public:
CollisionPtr GetCollisionById(
unsigned int _id)
const;
346 public:
CollisionPtr GetCollision(
const std::string &_name);
351 public:
CollisionPtr GetCollision(
unsigned int _index)
const;
360 public:
virtual ignition::math::AxisAlignedBox BoundingBox()
const 365 public:
virtual void SetLinearDamping(
double _damping) = 0;
369 public:
virtual void SetAngularDamping(
double _damping) = 0;
373 public:
double GetLinearDamping()
const;
377 public:
double GetAngularDamping()
const;
382 public:
virtual void SetKinematic(
const bool &_kinematic);
395 public:
unsigned int GetSensorCount()
const;
408 public: std::string GetSensorName(
unsigned int _index)
const;
414 std::function<
void (
bool)> _subscriber);
418 public:
void FillMsg(msgs::Link &_msg);
422 public:
void ProcessMsg(
const msgs::Link &_msg);
426 public:
void AddChildJoint(
JointPtr _joint);
430 public:
void AddParentJoint(
JointPtr _joint);
434 public:
void RemoveParentJoint(
const std::string &_jointName);
438 public:
void RemoveChildJoint(
const std::string &_jointName);
441 public:
virtual void RemoveChild(
EntityPtr _child);
447 public:
void AttachStaticModel(
ModelPtr &_model,
448 const ignition::math::Pose3d &_offset);
452 public:
void DetachStaticModel(
const std::string &_modelName);
455 public:
void DetachAllStaticModels();
459 public:
virtual void OnPoseChange()
override;
463 public:
void SetState(
const LinkState &_state);
473 public:
virtual void SetAutoDisable(
bool _disable) = 0;
477 public:
Link_V GetChildJointsLinks()
const;
481 public:
Link_V GetParentJointsLinks()
const;
485 public:
void SetPublishData(
bool _enable);
488 public:
Joint_V GetParentJoints()
const;
491 public:
Joint_V GetChildJoints()
const;
495 public:
void RemoveCollision(
const std::string &_name);
500 public:
double GetWorldEnergyPotential()
const;
505 public:
double GetWorldEnergyKinetic()
const;
511 public:
double GetWorldEnergy()
const;
516 public: msgs::Visual GetVisualMessage(
const std::string &_name)
const;
521 public:
virtual void SetLinkStatic(
bool _static) = 0;
524 public:
virtual void SetStatic(
const bool &_static);
537 public:
void MoveFrame(
538 const ignition::math::Pose3d &_worldReferenceFrameSrc,
539 const ignition::math::Pose3d &_worldReferenceFrameDst,
540 const bool _preserveWorldVelocity =
false);
556 public:
bool FindAllConnectedLinksHelper(
557 const LinkPtr &_originalParentLink,
558 Link_V &_connectedLinks,
bool _fistLink =
false);
562 public:
void SetWindEnabled(
const bool _enable);
567 public:
const ignition::math::Vector3d WorldWindLinearVel()
const;
571 public:
const ignition::math::Vector3d RelativeWindLinearVel()
const;
589 public:
size_t BatteryCount()
const;
595 public:
bool VisualId(
const std::string &_visName, uint32_t &_visualId)
602 public:
bool VisualPose(
const uint32_t _id,
603 ignition::math::Pose3d &_pose)
const;
609 public:
bool SetVisualPose(
const uint32_t _id,
610 const ignition::math::Pose3d &_pose);
614 public:
const sdf::Link *GetSDFDom()
const;
617 public: std::optional<sdf::SemanticPose> SDFSemanticPose()
const override;
625 public:
const Visuals_M &Visuals()
const;
628 private:
void PublishData();
632 private:
void LoadCollision(sdf::ElementPtr _sdf);
636 private:
void LoadLight(sdf::ElementPtr _sdf);
640 private:
void SetInertialFromCollisions();
644 private:
void OnCollision(ConstContactsPtr &_msg);
647 private:
void ParseVisuals();
653 private:
bool ContainsLink(
const Link_V &_vector,
const LinkPtr &_value);
657 private:
void UpdateVisualGeomSDF(
const ignition::math::Vector3d &_scale);
660 private:
void UpdateVisualMsg();
665 private:
void OnWrenchMsg(ConstWrenchPtr &_msg);
669 private:
void ProcessWrenchMsg(
const msgs::Wrench &_msg);
673 private:
void LoadBattery(
const sdf::ElementPtr _sdf);
676 protected:
virtual void RegisterIntrospectionItems()
override;
688 protected:
bool initialized =
false;
691 private: std::unique_ptr<LinkPrivate> dataPtr;
virtual void UpdateMass()
Update the mass matrix.
Definition: Link.hh:466
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:110
Forward declarations for the common classes.
Definition: Animation.hh:26
virtual bool GetKinematic() const
Implement this function.
Definition: Link.hh:387
std::vector< ignition::math::Pose3d > attachedModelsOffset
Offsets for the attached models.
Definition: Link.hh:685
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:118
virtual void Update()
Update the object.
Definition: Base.hh:166
virtual void RemoveChild(unsigned int _id)
Remove a child from this entity.
Link class defines a rigid body entity, containing information on inertia, visual and collision prope...
Definition: Link.hh:52
Information for use in an update event.
Definition: UpdateInfo.hh:30
void SetStatic(const bool &_static)
Set whether this entity is static: immovable.
Visuals_M visuals
Link visual elements.
Definition: Link.hh:682
std::map< uint32_t, msgs::Visual > Visuals_M
Definition: Link.hh:621
virtual void UpdateSurface()
Update surface parameters.
Definition: Link.hh:469
std::vector< JointPtr > Joint_V
Definition: PhysicsTypes.hh:214
std::vector< CollisionPtr > Collision_V
Definition: PhysicsTypes.hh:230
std::shared_ptr< Battery > BatteryPtr
Definition: CommonTypes.hh:125
boost::shared_ptr< Inertial > InertialPtr
Definition: PhysicsTypes.hh:158
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:134
Base class for all physics objects in Gazebo.
Definition: Entity.hh:52
boost::shared_ptr< Entity > EntityPtr
Definition: PhysicsTypes.hh:86
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:94
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
virtual void Reset()
Reset the entity.
std::vector< LinkPtr > Link_V
Definition: PhysicsTypes.hh:226
InertialPtr GetInertial() const
Get the inertia of the link.
Definition: Link.hh:317
Store state information of a physics::Link object.
Definition: LinkState.hh:47
boost::shared_ptr< Collision > CollisionPtr
Definition: PhysicsTypes.hh:114
InertialPtr inertial
Inertial properties.
Definition: Link.hh:679