Branch data Line data Source code
1 : : // Copyright (c) 2017 Jordan Lack <jlack1987@gmail.com> 2 : : // RDL - Robot Dynamics Library 3 : : // Licensed under the zlib license. See LICENSE for more details. 4 : : 5 : : #ifndef __RDL_FRAME_OBJECT_HPP__ 6 : : #define __RDL_FRAME_OBJECT_HPP__ 7 : : 8 : : /** 9 : : * @page frame_object Frame Object 10 : : * 11 : : * The RobotDynamics::FrameObject class is inhereted by objects that perform operations in which reference frame checking 12 : : * is important. 13 : : */ 14 : : 15 : : #include "rdl_dynamics/ReferenceFrame.hpp" 16 : : #include "rdl_dynamics/rdl_eigenmath.hpp" 17 : : 18 : : namespace RobotDynamics 19 : : { 20 : : /** 21 : : * @class FrameObject 22 : : * @ingroup reference_frame 23 : : * @brief An interface that objects with a ReferenceFrame extend to inherit the FrameObject::changeFrame method 24 : : */ 25 : : class FrameObject 26 : : { 27 : : public: 28 : 242511 : explicit FrameObject(ReferenceFramePtr referenceFrame) : referenceFrame(referenceFrame) 29 : : { 30 : 242510 : } 31 : : 32 : : /** 33 : : * @brief Destructor 34 : : */ 35 : 243425 : virtual ~FrameObject() 36 : 243425 : { 37 : 243425 : } 38 : : 39 : : /** 40 : : * @brief Change the ReferenceFrame this FrameObject is expressed in. 41 : : * @param desiredFrame A pointer to the ReferenceFrame this FrameObject is to be transformed to 42 : : */ 43 : : virtual void changeFrame(ReferenceFramePtr desiredFrame); 44 : : 45 : : /** 46 : : * @brief Get a pointer to the reference frame this FrameObject is expressed in 47 : : * @return Pointer to the ReferenceFrame this FrameObject is expressed in 48 : : */ 49 : 74270 : inline ReferenceFramePtr getReferenceFrame() const 50 : : { 51 : 74270 : return referenceFrame; 52 : : } 53 : : 54 : : /** 55 : : * @brief Set frame objects internal reference frame 56 : : * @param frame Pointer to new frame 57 : : */ 58 : 5 : inline void setReferenceFrame(ReferenceFramePtr frame) 59 : : { 60 : 5 : referenceFrame = frame; 61 : 5 : } 62 : : 63 : : /** 64 : : * @brief Check if two FrameObjects hold the same ReferenceFrame 65 : : * @param frameObject 66 : : */ 67 : 19753 : void checkReferenceFramesMatch(const FrameObject* frameObject) const 68 : : { 69 : 20764 : getReferenceFrame()->checkReferenceFramesMatch(frameObject->getReferenceFrame()); 70 : 18741 : } 71 : : 72 : : void checkReferenceFramesMatch(FrameObject* frameObject) const 73 : : { 74 : : getReferenceFrame()->checkReferenceFramesMatch(frameObject->getReferenceFrame()); 75 : : } 76 : : 77 : : protected: 78 : : ReferenceFramePtr referenceFrame /**< Pointer to a ReferenceFrame*/; 79 : : 80 : : /** 81 : : * @brief Pure virtual method that FrameObjects are required to implement so the FrameObject::changeFrame method is able 82 : : * to access the TransformableGeometricObject which is required to implement the TransformableGeometricObject::transform 83 : : **method 84 : : * @return 85 : : */ 86 : : virtual Math::TransformableGeometricObject* getTransformableGeometricObject() = 0; 87 : : }; 88 : : } // namespace RobotDynamics 89 : : #endif // ifndef __RDL_FRAME_OBJECT_HPP__