Robotics Library  0.6.2
Model.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009, Markus Rickert
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 // POSSIBILITY OF SUCH DAMAGE.
25 //
26 
27 #ifndef _RL_MDL_MODEL_H_
28 #define _RL_MDL_MODEL_H_
29 
30 #include <string>
31 #include <vector>
32 #include <boost/shared_ptr.hpp>
33 #include <boost/graph/adjacency_list.hpp>
34 #include <rl/math/Transform.h>
35 #include <rl/math/Unit.h>
36 #include <rl/math/Vector.h>
37 
38 #include "Frame.h"
39 #include "Transform.h"
40 
41 namespace rl
42 {
43  namespace mdl
44  {
45  class Body;
46  class Compound;
47  class Joint;
48 
49  class Model
50  {
51  public:
52  Model();
53 
54  virtual ~Model();
55 
56  void add(Compound* compound, const Frame* a, const Frame* b);
57 
58  void add(Frame* frame);
59 
60  void add(Transform* transform, const Frame* a, const Frame* b);
61 
62  bool areColliding(const ::std::size_t& i, const ::std::size_t& j) const;
63 
64  Model* clone() const;
65 
66  void getAcceleration(::rl::math::Vector& qdd) const;
67 
68  void getAccelerationUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const;
69 
70  ::std::size_t getBodies() const;
71 
72  Body* getBody(const ::std::size_t& i) const;
73 
74  ::std::size_t getDof() const;
75 
76  ::std::size_t getDofPosition() const;
77 
78  const ::rl::math::Transform& getFrame(const ::std::size_t& i) const;
79 
80  Joint* getJoint(const ::std::size_t& i) const;
81 
82  ::std::size_t getJoints() const;
83 
84  const ::rl::math::MotionVector& getOperationalAcceleration(const ::std::size_t& i) const;
85 
86  ::std::size_t getOperationalDof() const;
87 
88  const ::rl::math::ForceVector& getOperationalForce(const ::std::size_t& i) const;
89 
90  const ::rl::math::Transform& getOperationalPosition(const ::std::size_t& i) const;
91 
92  const ::rl::math::MotionVector& getOperationalVelocity(const ::std::size_t& i) const;
93 
94  const ::std::string& getManufacturer() const;
95 
96  void getMaximum(::rl::math::Vector& max) const;
97 
98  void getMinimum(::rl::math::Vector& min) const;
99 
100  const ::std::string& getName() const;
101 
102  void getPosition(::rl::math::Vector& q) const;
103 
104  void getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const;
105 
106  void getTorque(::rl::math::Vector& tau) const;
107 
108  void getTorqueUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const;
109 
110  void getSpeed(::rl::math::Vector& speed) const;
111 
112  void getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const;
113 
114  void getVelocity(::rl::math::Vector& qd) const;
115 
116  void getVelocityUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 >& units) const;
117 
118  bool isColliding(const ::std::size_t& i) const;
119 
120  void replace(Compound* compound, Transform* transform);
121 
122  void replace(Transform* transform, Compound* compound);
123 
124  void remove(Compound* compound);
125 
126  void remove(Frame* frame);
127 
128  void remove(Transform* transform);
129 
131 
132  void setManufacturer(const ::std::string& manufacturer);
133 
134  void setName(const ::std::string& name);
135 
136  void setOperationalVelocity(const ::std::size_t& i, const ::rl::math::MotionVector& v) const;
137 
139 
141 
143 
144  ::rl::math::Transform& tool(const ::std::size_t& i = 0);
145 
146  const ::rl::math::Transform& tool(const ::std::size_t& i = 0) const;
147 
148  virtual void update();
149 
151 
153 
154  protected:
155  friend class Compound;
156 
157  typedef ::boost::adjacency_list<
158  ::boost::listS,
159  ::boost::listS,
160  ::boost::bidirectionalS,
161  ::boost::property<
162  ::boost::vertex_color_t, Compound*,
163  ::boost::shared_ptr< Frame >
164  >,
165  ::boost::property<
166  ::boost::edge_weight_t, Compound*,
167  ::boost::shared_ptr< Transform >
168  >,
169  ::boost::no_property,
170  ::boost::listS
171  > Tree;
172 
173  typedef ::boost::graph_traits< Tree >::edge_descriptor Edge;
174 
175  typedef ::boost::graph_traits< Tree >::edge_iterator EdgeIterator;
176 
177  typedef ::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair;
178 
179  typedef ::boost::graph_traits< Tree >::in_edge_iterator InEdgeIterator;
180 
181  typedef ::std::pair< InEdgeIterator, InEdgeIterator > InEdgeIteratorPair;
182 
183  typedef ::boost::graph_traits< Tree >::out_edge_iterator OutEdgeIterator;
184 
185  typedef ::std::pair< OutEdgeIterator, OutEdgeIterator > OutEdgeIteratorPair;
186 
187  typedef ::boost::graph_traits< Tree >::vertex_descriptor Vertex;
188 
189  typedef ::boost::graph_traits< Tree >::vertex_iterator VertexIterator;
190 
191  typedef ::std::pair< VertexIterator, VertexIterator > VertexIteratorPair;
192 
193  void update(const Vertex& u);
194 
195  ::std::vector< Body* > bodies;
196 
197  ::std::vector< Element* > elements;
198 
199  ::std::vector< Frame* > frames;
200 
201  ::std::vector< Joint* > joints;
202 
203  ::std::vector< Vertex > leaves;
204 
205  ::std::string manufacturer;
206 
207  ::std::string name;
208 
210 
211  ::std::vector< Edge > tools;
212 
213  ::std::vector< Transform* > transforms;
214 
216 
217  private:
218 
219  };
220  }
221 }
222 
223 #endif // _RL_MDL_MODEL_H_
rl::mdl::Model::getDofPosition
::std::size_t getDofPosition() const
Definition: Model.cpp:156
rl::mdl::Model::Vertex
::boost::graph_traits< Tree >::vertex_descriptor Vertex
Definition: Model.h:187
rl::mdl::Model::getTorqueUnits
void getTorqueUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > &units) const
Definition: Model.cpp:286
rl::mdl::Model::clone
Model * clone() const
Definition: Model.cpp:105
rl::mdl::Model::getVelocity
void getVelocity(::rl::math::Vector &qd) const
Definition: Model.cpp:313
rl::mdl::Model::setManufacturer
void setManufacturer(const ::std::string &manufacturer)
Definition: Model.cpp:388
rl::mdl::Model::InEdgeIteratorPair
::std::pair< InEdgeIterator, InEdgeIterator > InEdgeIteratorPair
Definition: Model.h:181
rl::mdl::Model::getMaximum
void getMaximum(::rl::math::Vector &max) const
Definition: Model.cpp:235
rl::mdl::Model::tools
::std::vector< Edge > tools
Definition: Model.h:211
rl::mdl::Model::getJoint
Joint * getJoint(const ::std::size_t &i) const
Definition: Model.cpp:177
rl::mdl::Model::EdgeIteratorPair
::std::pair< EdgeIterator, EdgeIterator > EdgeIteratorPair
Definition: Model.h:177
rl::mdl::Transform
Definition: Transform.h:43
Transform.h
rl::mdl::Model::getMinimum
void getMinimum(::rl::math::Vector &min) const
Definition: Model.cpp:244
rl::mdl::Model::getOperationalDof
::std::size_t getOperationalDof() const
Definition: Model.cpp:199
rl::mdl::Model::Edge
::boost::graph_traits< Tree >::edge_descriptor Edge
Definition: Model.h:173
Frame.h
rl::mdl::Model::update
virtual void update()
Definition: Model.cpp:449
rl::mdl::Model::bodies
::std::vector< Body * > bodies
Definition: Model.h:195
rl::mdl::Model::getDof
::std::size_t getDof() const
Definition: Model.cpp:143
rl::mdl::Model::VertexIterator
::boost::graph_traits< Tree >::vertex_iterator VertexIterator
Definition: Model.h:189
rl::mdl::Model::getSpeedUnits
void getSpeedUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > &units) const
Definition: Model.cpp:304
rl::mdl::Model::add
void add(Compound *compound, const Frame *a, const Frame *b)
Definition: Model.cpp:58
Vector.h
rl::mdl::Model::Model
Model()
Definition: Model.cpp:38
rl::mdl::Model::root
Vertex root
Definition: Model.h:209
rl::mdl::Joint
Definition: Joint.h:40
rl::mdl::Model::isColliding
bool isColliding(const ::std::size_t &i) const
Definition: Model.cpp:331
rl::mdl::Model::setOperationalVelocity
void setOperationalVelocity(const ::std::size_t &i, const ::rl::math::MotionVector &v) const
Definition: Model.cpp:400
rl::mdl::Model::replace
void replace(Compound *compound, Transform *transform)
Definition: Model.cpp:339
rl::mdl::Model::getName
const ::std::string & getName() const
Definition: Model.cpp:253
rl::mdl::Model::leaves
::std::vector< Vertex > leaves
Definition: Model.h:203
rl::mdl::Model::getFrame
const ::rl::math::Transform & getFrame(const ::std::size_t &i) const
Definition: Model.cpp:169
rl::mdl::Body
Definition: Body.h:43
rl::mdl::Model::frames
::std::vector< Frame * > frames
Definition: Model.h:199
rl::mdl::Model::transforms
::std::vector< Transform * > transforms
Definition: Model.h:213
rl::mdl::Model::getAcceleration
void getAcceleration(::rl::math::Vector &qdd) const
Definition: Model.cpp:111
rl::mdl::Model::getSpeed
void getSpeed(::rl::math::Vector &speed) const
Definition: Model.cpp:295
rl::mdl::Model::name
::std::string name
Definition: Model.h:207
rl::mdl::Model::getOperationalVelocity
const ::rl::math::MotionVector & getOperationalVelocity(const ::std::size_t &i) const
Definition: Model.cpp:221
rl::mdl::Compound
Definition: Compound.h:42
rl::mdl::Model::InEdgeIterator
::boost::graph_traits< Tree >::in_edge_iterator InEdgeIterator
Definition: Model.h:179
rl::mdl::Model::world
::rl::math::Transform & world()
Definition: Model.cpp:506
rl::mdl::Model::tool
::rl::math::Transform & tool(const ::std::size_t &i=0)
Definition: Model.cpp:433
rl::mdl::Model::getOperationalPosition
const ::rl::math::Transform & getOperationalPosition(const ::std::size_t &i) const
Definition: Model.cpp:213
rl::mdl::Model::VertexIteratorPair
::std::pair< VertexIterator, VertexIterator > VertexIteratorPair
Definition: Model.h:191
rl::mdl::Model::getAccelerationUnits
void getAccelerationUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > &units) const
Definition: Model.cpp:120
rl::math::ForceVector
spatial::ForceVector< Real > ForceVector
Definition: Spatial.h:53
rl::mdl::Model::tree
Tree tree
Definition: Model.h:215
rl::mdl::Model::EdgeIterator
::boost::graph_traits< Tree >::edge_iterator EdgeIterator
Definition: Model.h:175
rl::math::MotionVector
spatial::MotionVector< Real > MotionVector
Definition: Spatial.h:55
rl::mdl::Model
Definition: Model.h:50
rl::mdl::Model::getBody
Body * getBody(const ::std::size_t &i) const
Definition: Model.cpp:135
rl::mdl::Model::Tree
::boost::adjacency_list< ::boost::listS, ::boost::listS, ::boost::bidirectionalS, ::boost::property< ::boost::vertex_color_t, Compound *, ::boost::shared_ptr< Frame > >, ::boost::property< ::boost::edge_weight_t, Compound *, ::boost::shared_ptr< Transform > >, ::boost::no_property, ::boost::listS > Tree
Definition: Model.h:171
rl::mdl::Model::getOperationalAcceleration
const ::rl::math::MotionVector & getOperationalAcceleration(const ::std::size_t &i) const
Definition: Model.cpp:191
rl::mdl::Model::getJoints
::std::size_t getJoints() const
Definition: Model.cpp:185
rl::mdl::Model::manufacturer
::std::string manufacturer
Definition: Model.h:205
rl::math::Transform
::Eigen::Transform< Real, 3, ::Eigen::Affine > Transform
Definition: Transform.h:42
rl::mdl::Model::getOperationalForce
const ::rl::math::ForceVector & getOperationalForce(const ::std::size_t &i) const
Definition: Model.cpp:205
rl::mdl::Model::joints
::std::vector< Joint * > joints
Definition: Model.h:201
rl::mdl::Model::setName
void setName(const ::std::string &name)
Definition: Model.cpp:394
rl::mdl::Model::setPosition
void setPosition(const ::rl::math::Vector &q)
Definition: Model.cpp:406
rl::mdl::Model::elements
::std::vector< Element * > elements
Definition: Model.h:197
rl::mdl::Model::~Model
virtual ~Model()
Definition: Model.cpp:53
rl::math::Vector
::Eigen::Matrix< Real, ::Eigen::Dynamic, 1 > Vector
Definition: Vector.h:41
rl::mdl::Model::OutEdgeIteratorPair
::std::pair< OutEdgeIterator, OutEdgeIterator > OutEdgeIteratorPair
Definition: Model.h:185
rl::mdl::Model::areColliding
bool areColliding(const ::std::size_t &i, const ::std::size_t &j) const
Definition: Model.cpp:89
Transform.h
rl::mdl::Model::OutEdgeIterator
::boost::graph_traits< Tree >::out_edge_iterator OutEdgeIterator
Definition: Model.h:183
rl::mdl::Model::getBodies
::std::size_t getBodies() const
Definition: Model.cpp:129
rl::mdl::Model::getVelocityUnits
void getVelocityUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > &units) const
Definition: Model.cpp:322
rl::mdl::Model::setVelocity
void setVelocity(const ::rl::math::Vector &qd)
Definition: Model.cpp:424
rl::mdl::Model::getPosition
void getPosition(::rl::math::Vector &q) const
Definition: Model.cpp:259
rl::mdl::Model::getPositionUnits
void getPositionUnits(::Eigen::Matrix< ::rl::math::Unit, ::Eigen::Dynamic, 1 > &units) const
Definition: Model.cpp:268
rl::mdl::Model::setAcceleration
void setAcceleration(const ::rl::math::Vector &qdd)
Definition: Model.cpp:379
rl::mdl::Model::getTorque
void getTorque(::rl::math::Vector &tau) const
Definition: Model.cpp:277
rl::mdl::Frame
Definition: Frame.h:42
rl::mdl::Model::getManufacturer
const ::std::string & getManufacturer() const
Definition: Model.cpp:229
rl::mdl::Model::remove
void remove(Compound *compound)
Definition: Model.cpp:353
Unit.h
rl::mdl::Model::setTorque
void setTorque(const ::rl::math::Vector &tau)
Definition: Model.cpp:415
rl
Definition: Ati.cpp:35