Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00037 #ifndef FCL_ARTICULATED_MODEL_JOINT_H
00038 #define FCL_ARTICULATED_MODEL_JOINT_H
00039
00040 #include "fcl/math/transform.h"
00041 #include "fcl/data_types.h"
00042
00043 #include <string>
00044 #include <vector>
00045 #include <map>
00046 #include <limits>
00047 #include <boost/shared_ptr.hpp>
00048 #include <boost/weak_ptr.hpp>
00049
00050 namespace fcl
00051 {
00052
00053 class JointConfig;
00054 class Link;
00055
00056 enum JointType {JT_UNKNOWN, JT_PRISMATIC, JT_REVOLUTE, JT_BALLEULER};
00057
00059 class Joint
00060 {
00061 public:
00062
00063 Joint(const boost::shared_ptr<Link>& link_parent, const boost::shared_ptr<Link>& link_child,
00064 const Transform3f& transform_to_parent,
00065 const std::string& name);
00066
00067 Joint(const std::string& name);
00068
00069 virtual ~Joint() {}
00070
00071 const std::string& getName() const;
00072 void setName(const std::string& name);
00073
00074 virtual Transform3f getLocalTransform() const = 0;
00075
00076 virtual std::size_t getNumDofs() const = 0;
00077
00078 boost::shared_ptr<JointConfig> getJointConfig() const;
00079 void setJointConfig(const boost::shared_ptr<JointConfig>& joint_cfg);
00080
00081 boost::shared_ptr<Link> getParentLink() const;
00082 boost::shared_ptr<Link> getChildLink() const;
00083
00084 void setParentLink(const boost::shared_ptr<Link>& link);
00085 void setChildLink(const boost::shared_ptr<Link>& link);
00086
00087 JointType getJointType() const;
00088
00089 const Transform3f& getTransformToParent() const;
00090 void setTransformToParent(const Transform3f& t);
00091
00092 protected:
00093
00095 boost::weak_ptr<Link> link_parent_, link_child_;
00096
00097 JointType type_;
00098
00099 std::string name_;
00100
00101 boost::shared_ptr<JointConfig> joint_cfg_;
00102
00103 Transform3f transform_to_parent_;
00104 };
00105
00106
00107 class PrismaticJoint : public Joint
00108 {
00109 public:
00110 PrismaticJoint(const boost::shared_ptr<Link>& link_parent, const boost::shared_ptr<Link>& link_child,
00111 const Transform3f& transform_to_parent,
00112 const std::string& name,
00113 const Vec3f& axis);
00114
00115 virtual ~PrismaticJoint() {}
00116
00117 Transform3f getLocalTransform() const;
00118
00119 std::size_t getNumDofs() const;
00120
00121 const Vec3f& getAxis() const;
00122
00123 protected:
00124 Vec3f axis_;
00125 };
00126
00127 class RevoluteJoint : public Joint
00128 {
00129 public:
00130 RevoluteJoint(const boost::shared_ptr<Link>& link_parent, const boost::shared_ptr<Link>& link_child,
00131 const Transform3f& transform_to_parent,
00132 const std::string& name,
00133 const Vec3f& axis);
00134
00135 virtual ~RevoluteJoint() {}
00136
00137 Transform3f getLocalTransform() const;
00138
00139 std::size_t getNumDofs() const;
00140
00141 const Vec3f& getAxis() const;
00142
00143 protected:
00144 Vec3f axis_;
00145 };
00146
00147
00148
00149 class BallEulerJoint : public Joint
00150 {
00151 public:
00152 BallEulerJoint(const boost::shared_ptr<Link>& link_parent, const boost::shared_ptr<Link>& link_child,
00153 const Transform3f& transform_to_parent,
00154 const std::string& name);
00155
00156 virtual ~BallEulerJoint() {}
00157
00158 std::size_t getNumDofs() const;
00159
00160 Transform3f getLocalTransform() const;
00161 };
00162
00163
00164 }
00165
00166 #endif