Link.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 #ifndef GAZEBO_PHYSICS_LINK_HH_
18 #define GAZEBO_PHYSICS_LINK_HH_
19 
20 #include <map>
21 #include <vector>
22 #include <string>
23 #include <ignition/math/Matrix3.hh>
24 
25 #include "gazebo/msgs/msgs.hh"
26 
27 #include "gazebo/common/Event.hh"
29 
31 #include "gazebo/physics/Entity.hh"
33 #include "gazebo/physics/Joint.hh"
34 #include "gazebo/util/system.hh"
35 
36 namespace gazebo
37 {
38  namespace physics
39  {
40  class Model;
41  class Collision;
42  class Battery;
43  class LinkPrivate;
44 
47 
52  class GZ_PHYSICS_VISIBLE Link : public Entity
53  {
56  public: explicit Link(EntityPtr _parent);
57 
59  public: virtual ~Link();
60 
63  public: virtual void Load(sdf::ElementPtr _sdf);
64 
66  public: virtual void Init();
67 
69  public: void Fini();
70 
72  public: void Reset();
73  using Entity::Reset;
74 
76  public: void ResetPhysicsStates();
77 
80  public: virtual void UpdateParameters(sdf::ElementPtr _sdf);
81 
84  public: void Update(const common::UpdateInfo &_info);
85  using Base::Update;
86 
89  public: void SetScale(const ignition::math::Vector3d &_scale);
90 
93  public: virtual void SetEnabled(bool _enable) const = 0;
94 
97  public: virtual bool GetEnabled() const = 0;
98 
102  public: virtual bool SetSelected(bool _set);
103 
106  public: virtual void SetGravityMode(bool _mode) = 0;
107 
110  public: virtual bool GetGravityMode() const = 0;
111 
114  public: virtual void SetWindMode(const bool _mode);
115 
118  public: virtual bool WindMode() const;
119 
124  public: virtual void SetSelfCollide(bool _collide) = 0;
125 
134  public: void SetCollideMode(const std::string &_mode);
135 
143  public: bool GetSelfCollide() const;
144 
147  public: void SetLaserRetro(float _retro);
148 
151  public: virtual void SetLinearVel(
152  const ignition::math::Vector3d &_vel) = 0;
153 
156  public: virtual void SetAngularVel(
157  const ignition::math::Vector3d &_vel) = 0;
158 
163  public: void SetLinearAccel(const ignition::math::Vector3d &_accel)
164  GAZEBO_DEPRECATED(9.0);
165 
170  public: void SetAngularAccel(const ignition::math::Vector3d &_accel)
171  GAZEBO_DEPRECATED(9.0);
172 
175  public: virtual void SetForce(
176  const ignition::math::Vector3d &_force) = 0;
177 
180  public: virtual void SetTorque(
181  const ignition::math::Vector3d &_torque) = 0;
182 
185  public: virtual void AddForce(const ignition::math::Vector3d &_force) = 0;
186 
190  public: virtual void AddRelativeForce(
191  const ignition::math::Vector3d &_force) = 0;
192 
196  public: virtual void AddForceAtWorldPosition(
197  const ignition::math::Vector3d &_force,
198  const ignition::math::Vector3d &_pos) = 0;
199 
208  public: virtual void AddForceAtRelativePosition(
209  const ignition::math::Vector3d &_force,
210  const ignition::math::Vector3d &_relPos) = 0;
211 
218  public: virtual void AddLinkForce(
219  const ignition::math::Vector3d &_force,
220  const ignition::math::Vector3d &_offset =
221  ignition::math::Vector3d::Zero) = 0;
222 
225  public: virtual void AddTorque(
226  const ignition::math::Vector3d &_torque) = 0;
227 
231  public: virtual void AddRelativeTorque(
232  const ignition::math::Vector3d &_torque) = 0;
233 
238  public: ignition::math::Pose3d WorldCoGPose() const;
239 
243  public: virtual ignition::math::Vector3d WorldLinearVel() const;
244 
252  public: virtual ignition::math::Vector3d WorldLinearVel(
253  const ignition::math::Vector3d &_offset) const = 0;
254 
262  public: virtual ignition::math::Vector3d WorldLinearVel(
263  const ignition::math::Vector3d &_offset,
264  const ignition::math::Quaterniond &_q) const = 0;
265 
270  public: virtual ignition::math::Vector3d WorldCoGLinearVel() const = 0;
271 
274  public: ignition::math::Vector3d RelativeLinearVel() const;
275 
278  public: ignition::math::Vector3d RelativeAngularVel() const;
279 
282  public: ignition::math::Vector3d RelativeLinearAccel() const;
283 
286  public: ignition::math::Vector3d WorldLinearAccel() const;
287 
290  public: ignition::math::Vector3d RelativeAngularAccel() const;
291 
297  public: ignition::math::Vector3d WorldAngularMomentum() const;
298 
306  public: ignition::math::Vector3d WorldAngularAccel() const;
307 
310  public: ignition::math::Vector3d RelativeForce() const;
311 
314  public: virtual ignition::math::Vector3d WorldForce() const = 0;
315 
318  public: ignition::math::Vector3d RelativeTorque() const;
319 
323  public: virtual ignition::math::Vector3d WorldTorque() const = 0;
324 
327  public: ModelPtr GetModel() const;
328 
331  public: InertialPtr GetInertial() const {return this->inertial;}
332 
335  public: void SetInertial(const InertialPtr &_inertial);
336 
342  public: ignition::math::Pose3d WorldInertialPose() const;
343 
347  public: ignition::math::Matrix3d WorldInertiaMatrix() const;
348 
354  public: CollisionPtr GetCollisionById(unsigned int _id) const;
356 
360  public: CollisionPtr GetCollision(const std::string &_name);
361 
365  public: CollisionPtr GetCollision(unsigned int _index) const;
366 
369  public: Collision_V GetCollisions() const;
370 
374  public: virtual ignition::math::Box BoundingBox() const;
375 
378  public: virtual void SetLinearDamping(double _damping) = 0;
379 
382  public: virtual void SetAngularDamping(double _damping) = 0;
383 
386  public: double GetLinearDamping() const;
387 
390  public: double GetAngularDamping() const;
391 
395  public: virtual void SetKinematic(const bool &_kinematic);
396 
400  public: virtual bool GetKinematic() const {return false;}
401 
408  public: unsigned int GetSensorCount() const;
409 
421  public: std::string GetSensorName(unsigned int _index) const;
422 
426  public: event::ConnectionPtr ConnectEnabled(
427  std::function<void (bool)> _subscriber);
428 
431  public: void FillMsg(msgs::Link &_msg);
432 
435  public: void ProcessMsg(const msgs::Link &_msg);
436 
439  public: void AddChildJoint(JointPtr _joint);
440 
443  public: void AddParentJoint(JointPtr _joint);
444 
447  public: void RemoveParentJoint(const std::string &_jointName);
448 
451  public: void RemoveChildJoint(const std::string &_jointName);
452 
453  // Documentation inherited.
454  public: virtual void RemoveChild(EntityPtr _child);
455  using Base::RemoveChild;
456 
460  public: void AttachStaticModel(ModelPtr &_model,
461  const ignition::math::Pose3d &_offset);
462 
465  public: void DetachStaticModel(const std::string &_modelName);
466 
468  public: void DetachAllStaticModels();
469 
472  public: virtual void OnPoseChange();
473 
476  public: void SetState(const LinkState &_state);
477 
479  public: virtual void UpdateMass() {}
480 
482  public: virtual void UpdateSurface() {}
483 
486  public: virtual void SetAutoDisable(bool _disable) = 0;
487 
490  public: Link_V GetChildJointsLinks() const;
491 
494  public: Link_V GetParentJointsLinks() const;
495 
498  public: void SetPublishData(bool _enable);
499 
501  public: Joint_V GetParentJoints() const;
502 
504  public: Joint_V GetChildJoints() const;
505 
508  public: void RemoveCollision(const std::string &_name);
509 
513  public: double GetWorldEnergyPotential() const;
514 
518  public: double GetWorldEnergyKinetic() const;
519 
524  public: double GetWorldEnergy() const;
525 
529  public: msgs::Visual GetVisualMessage(const std::string &_name) const;
530 
534  public: virtual void SetLinkStatic(bool _static) = 0;
535 
536  // Documentation inherited
537  public: virtual void SetStatic(const bool &_static);
538  using Entity::SetStatic;
539 
550  public: void MoveFrame(
551  const ignition::math::Pose3d &_worldReferenceFrameSrc,
552  const ignition::math::Pose3d &_worldReferenceFrameDst,
553  const bool _preserveWorldVelocity = false);
554 
569  public: bool FindAllConnectedLinksHelper(
570  const LinkPtr &_originalParentLink,
571  Link_V &_connectedLinks, bool _fistLink = false);
572 
575  public: void SetWindEnabled(const bool _enable);
576 
580  public: const ignition::math::Vector3d WorldWindLinearVel() const;
581 
584  public: const ignition::math::Vector3d RelativeWindLinearVel() const;
585 
588  public: void UpdateWind(const common::UpdateInfo &_info);
589 
593  public: common::BatteryPtr Battery(const std::string &_name) const;
594 
597  public: common::BatteryPtr Battery(const size_t _index) const;
598 
602  public: size_t BatteryCount() const;
603 
608  public: bool VisualId(const std::string &_visName, uint32_t &_visualId)
609  const;
610 
615  public: bool VisualPose(const uint32_t _id,
616  ignition::math::Pose3d &_pose) const;
617 
622  public: bool SetVisualPose(const uint32_t _id,
623  const ignition::math::Pose3d &_pose);
624 
627  typedef std::map<uint32_t, msgs::Visual> Visuals_M;
628 
631  public: const Visuals_M &Visuals() const;
632 
634  private: void PublishData();
635 
638  private: void LoadCollision(sdf::ElementPtr _sdf);
639 
642  private: void LoadLight(sdf::ElementPtr _sdf);
643 
646  private: void SetInertialFromCollisions();
647 
650  private: void OnCollision(ConstContactsPtr &_msg);
651 
653  private: void ParseVisuals();
654 
659  private: bool ContainsLink(const Link_V &_vector, const LinkPtr &_value);
660 
663  private: void UpdateVisualGeomSDF(const ignition::math::Vector3d &_scale);
664 
666  private: void UpdateVisualMsg();
667 
671  private: void OnWrenchMsg(ConstWrenchPtr &_msg);
672 
675  private: void ProcessWrenchMsg(const msgs::Wrench &_msg);
676 
679  private: void LoadBattery(const sdf::ElementPtr _sdf);
680 
682  protected: virtual void RegisterIntrospectionItems();
683 
685  protected: InertialPtr inertial;
686 
688  protected: Visuals_M visuals;
689 
692  protected: ignition::math::Vector3d linearAccel;
693 
696  protected: ignition::math::Vector3d angularAccel;
697 
699  protected: std::vector<ignition::math::Pose3d> attachedModelsOffset;
700 
702  protected: bool initialized = false;
703 
705  private: std::unique_ptr<LinkPrivate> dataPtr;
706  };
708  }
709 }
710 #endif
std::vector< JointPtr > Joint_V
Definition: PhysicsTypes.hh:213
virtual void Update()
Update the object.
Definition: Base.hh:165
Forward declarations for the common classes.
Definition: Animation.hh:26
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:93
Store state information of a physics::Link object.
Definition: LinkState.hh:47
virtual void Reset()
Reset the entity.
virtual void RemoveChild(unsigned int _id)
Remove a child from this entity.
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:134
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
boost::shared_ptr< Entity > EntityPtr
Definition: PhysicsTypes.hh:85
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:117
Base class for all physics objects in Gazebo.
Definition: Entity.hh:52
#define GAZEBO_DEPRECATED(version)
Definition: system.hh:328
std::shared_ptr< Battery > BatteryPtr
Definition: CommonTypes.hh:125
boost::shared_ptr< Collision > CollisionPtr
Definition: PhysicsTypes.hh:113
std::vector< LinkPtr > Link_V
Definition: PhysicsTypes.hh:225
std::vector< CollisionPtr > Collision_V
Definition: PhysicsTypes.hh:229
Information for use in an update event.
Definition: UpdateInfo.hh:30
boost::shared_ptr< Inertial > InertialPtr
Definition: PhysicsTypes.hh:157
void SetStatic(const bool &_static)
Set whether this entity is static: immovable.