17 #ifndef GAZEBO_PHYSICS_JOINT_HH_
18 #define GAZEBO_PHYSICS_JOINT_HH_
23 #include <boost/any.hpp>
24 #include <ignition/math/Pose3.hh>
25 #include <ignition/math/Vector3.hh>
29 #include "gazebo/msgs/MessageTypes.hh"
39 #define MAX_JOINT_AXIS 2
95 public:
virtual ~
Joint();
102 const ignition::math::Pose3d &_pose);
106 public:
virtual void Load(sdf::ElementPtr _sdf);
109 public:
virtual void Init();
112 public:
virtual void Fini();
115 public:
void Update();
119 public:
virtual void UpdateParameters(sdf::ElementPtr _sdf);
122 public:
virtual void Reset();
127 public:
void SetState(
const JointState &_state);
131 public:
void SetModel(
ModelPtr _model);
138 public:
virtual LinkPtr GetJointLink(
unsigned int _index)
const = 0;
144 public:
virtual bool AreConnected(
LinkPtr _one,
LinkPtr _two)
const = 0;
152 public:
virtual void Detach();
159 public:
virtual void SetAxis(
const unsigned int _index,
160 const ignition::math::Vector3d &_axis) = 0;
166 public:
virtual void SetDamping(
unsigned int _index,
double _damping) = 0;
172 public:
double GetDamping(
unsigned int _index);
177 public:
virtual void ApplyStiffnessDamping();
185 public:
virtual void SetStiffnessDamping(
unsigned int _index,
186 double _stiffness,
double _damping,
double _reference = 0) = 0;
193 public:
virtual void SetStiffness(
unsigned int _index,
194 const double _stiffness) = 0;
201 public:
double GetStiffness(
unsigned int _index);
207 public:
double GetSpringReferencePosition(
unsigned int _index)
const;
212 public:
template<
typename T>
214 {
return jointUpdate.Connect(_subscriber);}
219 public: ignition::math::Vector3d LocalAxis(
const unsigned int _index)
225 public:
virtual ignition::math::Vector3d GlobalAxis(
226 unsigned int _index)
const = 0;
231 public:
virtual void SetAnchor(
const unsigned int _index,
232 const ignition::math::Vector3d &_anchor) = 0;
237 public:
virtual ignition::math::Vector3d Anchor(
238 const unsigned int _index)
const = 0;
243 public:
virtual double GetEffortLimit(
unsigned int _index);
248 public:
virtual void SetEffortLimit(
unsigned int _index,
double _effort);
253 public:
virtual double GetVelocityLimit(
unsigned int _index);
258 public:
virtual void SetVelocityLimit(
unsigned int _index,
268 public:
virtual void SetVelocity(
unsigned int _index,
double _vel) = 0;
273 public:
virtual double GetVelocity(
unsigned int _index)
const = 0;
283 public:
virtual void SetForce(
unsigned int _index,
double _effort) = 0;
290 public:
double CheckAndTruncateForce(
unsigned int _index,
double _effort);
298 public:
virtual double GetForce(
unsigned int _index);
322 public:
virtual JointWrench GetForceTorque(
unsigned int _index) = 0;
340 public:
virtual double Position(
const unsigned int _index = 0) const
345 public: virtual
unsigned int DOF() const = 0;
363 public: virtual
bool SetPosition(
364 const
unsigned int _index, const
double _position,
365 const
bool _preserveWorldVelocity = false);
377 protected:
bool SetPositionMaximal(
378 const
unsigned int _index,
double _position,
379 const
bool _preserveWorldVelocity = false);
388 protected:
bool SetVelocityMaximal(
unsigned int _index,
double _velocity);
396 public: virtual ignition::math::Vector3d LinkForce(
397 const
unsigned int _index) const = 0;
405 public: virtual ignition::math::Vector3d LinkTorque(
406 const
unsigned int _index) const = 0;
417 public: virtual
bool SetParam(const std::
string &_key,
419 const boost::any &_value) = 0;
425 public: virtual
double GetParam(const std::
string &_key,
426 unsigned int _index);
430 public:
LinkPtr GetChild() const;
434 public:
LinkPtr GetParent() const;
438 public: msgs::
Joint::Type GetMsgType() const;
442 public: virtual
void FillMsg(msgs::
Joint &_msg);
451 public:
double GetInertiaRatio(const
unsigned int _index) const;
462 public:
double InertiaRatio(const ignition::math::Vector3d &_axis) const;
468 public: virtual
double LowerLimit(
unsigned int _index = 0) const;
481 public: virtual
double UpperLimit(const
unsigned int _index = 0) const;
494 public: virtual
void SetLowerLimit(const
unsigned int _index,
495 const
double _limit);
501 public: virtual
void SetUpperLimit(const
unsigned int _index,
502 const
double _limit);
506 public: virtual
void SetProvideFeedback(
bool _enable);
509 public: virtual
void CacheForceTorque();
514 public:
void SetStopStiffness(
unsigned int _index,
double _stiffness);
519 public:
void SetStopDissipation(
unsigned int _index,
double _dissipation);
524 public:
double GetStopStiffness(
unsigned int _index) const;
529 public:
double GetStopDissipation(
unsigned int _index) const;
534 public: ignition::math::Pose3d InitialAnchorPose() const;
540 public: ignition::math::Pose3d WorldPose() const;
547 public: ignition::math::Pose3d ParentWorldPose() const;
554 public: ignition::math::Pose3d AnchorErrorPose() const;
561 public: ignition::math::Quaterniond AxisFrame(
562 const
unsigned int _index) const;
576 public: ignition::math::Quaterniond AxisFrameOffset(
577 const
unsigned int _index) const;
583 public:
double GetWorldEnergyPotentialSpring(
unsigned int _index) const;
592 protected: virtual
double PositionImpl(const
unsigned int _index = 0)
605 protected:
bool FindAllConnectedLinks(const
LinkPtr &_originalParentLink,
613 protected: ignition::math::Pose3d ChildLinkPose(
614 const
unsigned int _index, const
double _position);
617 protected: virtual
void RegisterIntrospectionItems();
621 private:
void RegisterIntrospectionPosition(const
unsigned int _index);
625 private:
void RegisterIntrospectionVelocity(const
unsigned int _index);
629 private:
void LoadImpl(const ignition::math::Pose3d &_pose);
642 protected: ignition::math::Vector3d anchorPos;
649 protected: ignition::math::Pose3d anchorPose;
652 protected: ignition::math::Pose3d parentAnchorPose;
658 protected:
double dissipationCoefficient[MAX_JOINT_AXIS];
661 protected:
double stiffnessCoefficient[MAX_JOINT_AXIS];
664 protected:
double springReferencePosition[MAX_JOINT_AXIS];
670 protected:
double effortLimit[MAX_JOINT_AXIS];
673 protected:
double velocityLimit[MAX_JOINT_AXIS];
676 protected:
double lowerLimit[MAX_JOINT_AXIS];
679 protected:
double upperLimit[MAX_JOINT_AXIS];
688 protected:
bool axisParentModelFrame[MAX_JOINT_AXIS];
692 private: static sdf::ElementPtr sdfJoint;
695 protected:
bool provideFeedback;
698 private: std::vector<std::
string> sensors;
701 private: event::EventT<
void ()> jointUpdate;
704 private:
double staticPosition;
707 private:
double stopStiffness[MAX_JOINT_AXIS];
710 private:
double stopDissipation[MAX_JOINT_AXIS];
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
Attribute
Joint attribute types.
Definition: Joint.hh:54
virtual void Reset()
Reset the object.
Upper joint limit.
Definition: Joint.hh:84
Maximum force.
Definition: Joint.hh:78
event::ConnectionPtr ConnectJointUpdate(T _subscriber)
Connect a boost::slot the the joint update signal.
Definition: Joint.hh:213
Suspension error reduction parameter.
Definition: Joint.hh:60
Base class for most physics classes.
Definition: Base.hh:77
Constraint force mixing.
Definition: Joint.hh:75
Suspension constraint force mixing.
Definition: Joint.hh:63
keeps track of state of a physics::Joint
Definition: JointState.hh:42
Error reduction parameter.
Definition: Joint.hh:72
Fudge factor.
Definition: Joint.hh:57
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:134
Base class for all joints.
Definition: Joint.hh:50
Velocity.
Definition: Joint.hh:81
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:93
Wrench information from a joint.
Definition: JointWrench.hh:40
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
Stop limit error reduction parameter.
Definition: Joint.hh:66
std::vector< LinkPtr > Link_V
Definition: PhysicsTypes.hh:225
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:77
Stop limit constraint force mixing.
Definition: Joint.hh:69