17 #ifndef _GAZEBO_JOINT_HH_
18 #define _GAZEBO_JOINT_HH_
23 #include <boost/any.hpp>
29 #include "gazebo/msgs/MessageTypes.hh"
39 #define MAX_JOINT_AXIS 2
95 public:
virtual ~
Joint();
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();
126 public:
void SetState(
const JointState &_state);
130 public:
void SetModel(
ModelPtr _model);
137 public:
virtual LinkPtr GetJointLink(
unsigned int _index)
const = 0;
143 public:
virtual bool AreConnected(
LinkPtr _one,
LinkPtr _two)
const = 0;
151 public:
virtual void Detach();
158 public:
virtual void SetAxis(
unsigned int _index,
165 public:
virtual void SetDamping(
unsigned int _index,
double _damping) = 0;
171 public:
double GetDamping(
unsigned int _index);
180 public: virtual
void ApplyStiffnessDamping();
188 public: virtual
void SetStiffnessDamping(
unsigned int _index,
189 double _stiffness,
double _damping,
double _reference = 0) = 0;
196 public: virtual
void SetStiffness(
unsigned int _index,
197 double _stiffness) = 0;
204 public:
double GetStiffness(
unsigned int _index);
210 public:
double GetSpringReferencePosition(
unsigned int _index) const;
215 public: template<typename T>
217 {
return jointUpdate.Connect(_subscriber);}
222 {jointUpdate.Disconnect(_conn);}
227 public:
math::Vector3 GetLocalAxis(
unsigned int _index)
const;
233 unsigned int _index)
const = 0;
238 public:
virtual void SetAnchor(
unsigned int _index,
244 public:
virtual math::Vector3 GetAnchor(
unsigned int _index)
const = 0;
249 public:
virtual bool SetHighStop(
unsigned int _index,
255 public:
virtual bool SetLowStop(
unsigned int _index,
264 public:
virtual math::Angle GetHighStop(
unsigned int _index) = 0;
272 public:
virtual math::Angle GetLowStop(
unsigned int _index) = 0;
277 public:
virtual double GetEffortLimit(
unsigned int _index);
282 public:
virtual void SetEffortLimit(
unsigned int _index,
double _effort);
287 public:
virtual double GetVelocityLimit(
unsigned int _index);
292 public:
virtual void SetVelocity(
unsigned int _index,
double _vel) = 0;
297 public:
virtual double GetVelocity(
unsigned int _index)
const = 0;
307 public:
virtual void SetForce(
unsigned int _index,
double _effort) = 0;
314 public:
double CheckAndTruncateForce(
unsigned int _index,
double _effort);
322 public:
virtual double GetForce(
unsigned int _index);
346 public:
virtual JointWrench GetForceTorque(
unsigned int _index) = 0;
359 public:
virtual void SetMaxForce(
unsigned int _index,
double _force) = 0;
366 public:
virtual double GetMaxForce(
unsigned int _index) = 0;
371 public:
math::Angle GetAngle(
unsigned int _index)
const;
375 public:
virtual unsigned int GetAngleCount()
const = 0;
387 public:
void SetAngle(
unsigned int _index,
math::Angle _angle);
395 public:
virtual math::Vector3 GetLinkForce(
unsigned int _index)
const = 0;
404 unsigned int _index)
const = 0;
411 public:
virtual bool SetParam(
const std::string &_key,
413 const boost::any &_value) = 0;
421 public:
virtual void SetAttribute(
const std::string &_key,
423 const boost::any &_value)
429 public:
virtual double GetParam(
const std::string &_key,
430 unsigned int _index) = 0;
436 public:
virtual double GetAttribute(
const std::string &_key,
441 public:
LinkPtr GetChild()
const;
445 public:
LinkPtr GetParent()
const;
449 public:
void FillMsg(msgs::Joint &_msg);
458 public:
double GetInertiaRatio(
const unsigned int _index)
const;
469 public:
double GetInertiaRatio(
const math::Vector3 &_axis)
const;
475 public:
math::Angle GetLowerLimit(
unsigned int _index)
const;
481 public:
math::Angle GetUpperLimit(
unsigned int _index)
const;
487 public:
void SetLowerLimit(
unsigned int _index,
math::Angle _limit);
493 public:
void SetUpperLimit(
unsigned int _index,
math::Angle _limit);
497 public:
virtual void SetProvideFeedback(
bool _enable);
510 public:
void SetStopStiffness(
unsigned int _index,
double _stiffness);
515 public:
void SetStopDissipation(
unsigned int _index,
double _dissipation);
520 public:
double GetStopStiffness(
unsigned int _index) const;
525 public:
double GetStopDissipation(
unsigned int _index) const;
530 public: math::Pose GetInitialAnchorPose() const;
536 public: math::Pose GetWorldPose() const;
543 public: math::Pose GetParentWorldPose() const;
550 public: math::Pose GetAnchorErrorPose() const;
557 public: math::Quaternion GetAxisFrame(
unsigned int _index) const;
571 public: math::Quaternion GetAxisFrameOffset(
unsigned int _index) const;
577 public:
double GetWorldEnergyPotentialSpring(
unsigned int _index) const;
582 protected: virtual math::Angle GetAngleImpl(
583 unsigned int _index) const = 0;
595 protected:
bool FindAllConnectedLinks(const
LinkPtr &_originalParentLink,
603 protected: math::Pose ComputeChildLinkPose(
unsigned int _index,
608 private:
void LoadImpl(const math::Pose &_pose);
621 protected: math::Vector3 anchorPos;
628 protected: math::Pose anchorPose;
631 protected: math::Pose parentAnchorPose;
638 protected:
double dampingCoefficient;
645 protected:
double stiffnessCoefficient[MAX_JOINT_AXIS];
648 protected:
double springReferencePosition[MAX_JOINT_AXIS];
654 protected:
double effortLimit[MAX_JOINT_AXIS];
657 protected:
double velocityLimit[MAX_JOINT_AXIS];
660 protected: math::Angle lowerLimit[MAX_JOINT_AXIS];
663 protected: math::Angle upperLimit[MAX_JOINT_AXIS];
672 protected:
bool useCFMDamping;
677 protected:
bool axisParentModelFrame[MAX_JOINT_AXIS];
681 private: static sdf::ElementPtr sdfJoint;
684 protected:
bool provideFeedback;
687 private: std::vector<std::
string> sensors;
690 private: event::EventT<
void ()> jointUpdate;
693 private: math::Angle staticAngle;
696 private:
double stopStiffness[MAX_JOINT_AXIS];
699 private:
double stopDissipation[MAX_JOINT_AXIS];
boost::shared_ptr< Connection > ConnectionPtr
Definition: CommonTypes.hh:144
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:65
Stop limit constraint force mixing.
Definition: Joint.hh:69
boost::shared_ptr< Model > ModelPtr
Definition: PhysicsTypes.hh:81
Error reduction parameter.
Definition: Joint.hh:72
Maximum force.
Definition: Joint.hh:78
Encapsulates a position and rotation in three space.
Definition: Pose.hh:40
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:43
Suspension error reduction parameter.
Definition: Joint.hh:60
#define GAZEBO_DEPRECATED(version)
Definition: CommonTypes.hh:44
std::vector< LinkPtr > Link_V
Definition: PhysicsTypes.hh:177
High stop angle.
Definition: Joint.hh:84
Constraint force mixing.
Definition: Joint.hh:75
Velocity.
Definition: Joint.hh:81
Suspension constraint force mixing.
Definition: Joint.hh:63
Fudge factor.
Definition: Joint.hh:57
Base class for most physics classes.
Definition: Base.hh:73
#define MAX_JOINT_AXIS
maximum number of axis per joint anticipated.
Definition: Joint.hh:39
keeps track of state of a physics::Joint
Definition: JointState.hh:40
Stop limit error reduction parameter.
Definition: Joint.hh:66
Base class for all joints.
Definition: Joint.hh:50
Attribute
Joint attribute types.
Definition: Joint.hh:54
Wrench information from a joint.
Definition: JointWrench.hh:39
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
virtual void CacheForceTorque()
Cache Joint Force Torque Values if necessary for physics engine.
Definition: Joint.hh:500
An angle and related functions.
Definition: Angle.hh:52
#define GAZEBO_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system.hh:48
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:89
void DisconnectJointUpdate(event::ConnectionPtr &_conn)
Disconnect a boost::slot the the joint update signal.
Definition: Joint.hh:221