hpp-pinocchio  6.0.0
Wrapping of the kinematic/dynamic chain Pinocchio for HPP.
device.hh
Go to the documentation of this file.
1 //
2 // Copyright (c) 2016 CNRS
3 // Author: NMansard from Florent Lamiraux
4 //
5 //
6 
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are
9 // met:
10 //
11 // 1. Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 //
14 // 2. Redistributions in binary form must reproduce the above copyright
15 // notice, this list of conditions and the following disclaimer in the
16 // documentation and/or other materials provided with the distribution.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
29 // DAMAGE.
30 
31 #ifndef HPP_PINOCCHIO_DEVICE_HH
32 #define HPP_PINOCCHIO_DEVICE_HH
33 
34 #include <boost/thread/condition_variable.hpp>
35 #include <boost/thread/mutex.hpp>
36 #include <hpp/pinocchio/config.hh>
41 #include <hpp/pinocchio/frame.hh>
42 #include <hpp/pinocchio/fwd.hh>
43 #include <hpp/pinocchio/pool.hh>
44 #include <hpp/util/debug.hh>
45 #include <hpp/util/serialization-fwd.hh>
46 #include <iostream>
47 #include <list>
48 #include <vector>
49 
50 namespace hpp {
51 namespace pinocchio {
52 
54 
61  friend class Joint;
62  friend class Frame;
63  friend class DeviceSync;
64  friend class CollisionObject;
66 
67  public:
69  typedef std::pair<JointPtr_t, JointPtr_t> CollisionPair_t;
70  typedef std::list<CollisionPair_t> CollisionPairs_t;
71 
72  // -----------------------------------------------------------------------
75  virtual ~Device();
76 
82  virtual DevicePtr_t clone() const { return createCopy(weakPtr_.lock()); }
86  DevicePtr_t cloneConst() const { return createCopyConst(weakPtr_.lock()); }
87 
88  DevicePtr_t self() const { return weakPtr_.lock(); }
89 
91  const std::string& name() const { return name_; }
92 
96  static DevicePtr_t create(const std::string& name);
97 
103  static DevicePtr_t createCopy(const DevicePtr_t& device);
105 
107  // -----------------------------------------------------------------------
110 
112  void setModel(ModelPtr_t modelPtr) { model_ = modelPtr; }
113 
115  void setGeomModel(GeomModelPtr_t geomModelPtr) { geomModel_ = geomModelPtr; }
116 
118  void setData(DataPtr_t dataPtr) {
119  d().data_ = dataPtr;
120  resizeState();
121  }
123  void createData();
124 
126  void setGeomData(GeomDataPtr_t geomDataPtr) {
127  d().geomData_ = geomDataPtr;
128  resizeState();
129  }
132 
134  virtual void removeJoints(const std::vector<std::string>& jointNames,
135  Configuration_t referenceConfig);
136 
138  // -----------------------------------------------------------------------
141 
150  JointPtr_t joint, reference;
151  };
152 
155 
157  Frame rootFrame() const;
158 
162 
167  JointPtr_t jointAt(const size_type& i) const;
168 
173 
178 
182  JointPtr_t getJointByName(const std::string& name) const;
183 
186  JointPtr_t getJointByBodyName(const std::string& name) const;
187 
191  Frame getFrameByName(const std::string& name) const;
192 
196 
201 
203  const LiegroupSpacePtr_t& configSpace() const { return configSpace_; }
204 
207  return configSpaceRnxSOn_;
208  }
209 
212 
215 
216  const std::vector<JointLinearConstraint>& jointConstraints() const {
217  return jointConstraints_;
218  }
219 
221  // -----------------------------------------------------------------------
224 
231  ExtraConfigSpace& extraConfigSpace() { return extraConfigSpace_; }
232 
239  const ExtraConfigSpace& extraConfigSpace() const { return extraConfigSpace_; }
240 
242  virtual void setDimensionExtraConfigSpace(const size_type& dimension) {
243  extraConfigSpace_.setDimension(dimension);
244  resizeState();
245  }
246 
248  // -----------------------------------------------------------------------
251 
253  void addGripper(const GripperPtr_t& gripper) { grippers_.push_back(gripper); }
254 
256  Grippers_t& grippers() { return grippers_; }
257 
259  const Grippers_t& grippers() const { return grippers_; }
260 
262  // -----------------------------------------------------------------------
265 
270 
273 
277 
281  bool collisionTest(const bool stopAtFirstCollision = true);
282 
286 
290  // -----------------------------------------------------------------------
294 
296  void numberDeviceData(const size_type& s);
297 
300 
302  // -----------------------------------------------------------------------
303 
305  virtual std::ostream& print(std::ostream& os) const;
306 
315  coal::AABB computeAABB() const;
316 
317  protected:
319  Device(const std::string& name);
320 
323  void init(const DeviceWkPtr_t& weakPtr);
326  void initCopy(const DeviceWkPtr_t& weakPtr, const Device& other);
327 
329  Device(const Device& device);
330 
331  private:
333  void resizeState();
334 
335  protected:
337 
338  DeviceData& d() { return d_; }
339  DeviceData const& d() const { return d_; }
340 
341  inline void invalidate() { d_.invalidate(); }
342 
343  std::string name_;
344  // Grippers
346  LiegroupSpacePtr_t configSpace_, configSpaceRnxSOn_;
347  // Extra configuration space
349  // Joint linear constraints
350  std::vector<JointLinearConstraint> jointConstraints_;
351  DeviceWkPtr_t weakPtr_;
352 
353  private:
354  Pool<DeviceData> datas_;
355 
356  protected:
357  Device() {}
358 
359  private:
360  HPP_SERIALIZABLE_SPLIT();
361 }; // class Device
362 
364  const std::vector<std::string>& geometryNames);
365 
366 inline std::ostream& operator<<(std::ostream& os,
367  const hpp::pinocchio::Device& device) {
368  return device.print(os);
369 }
370 
371 } // namespace pinocchio
372 } // namespace hpp
373 
374 BOOST_CLASS_EXPORT_KEY(hpp::pinocchio::Device)
375 
376 #endif // HPP_PINOCCHIO_DEVICE_HH
Abstract class representing a Device.
Definition: device-sync.hh:41
Definition: center-of-mass-computation.hh:52
Definition: collision-object.hh:52
Definition: device-sync.hh:212
Robot with geometric and dynamic pinocchio.
Definition: device.hh:60
const LiegroupSpacePtr_t & configSpace() const
Returns a LiegroupSpace representing the configuration space.
Definition: device.hh:203
JointPtr_t getJointByName(const std::string &name) const
coal::AABB computeAABB() const
Configuration_t neutralConfiguration() const
Get the neutral configuration.
DevicePtr_t cloneConst() const
Clone as a CkwsDevice Both pinocchio objects model and data are copied. TODO: this method is not impl...
Definition: device.hh:86
CollisionObjectPtr_t objectAt(const size_type &i) const
void createGeomData()
Create Pinocchio geomData from model.
const std::string & name() const
Get name of device.
Definition: device.hh:91
void invalidate()
Definition: device.hh:341
Grippers_t & grippers()
Return list of grippers of the Device.
Definition: device.hh:256
DeviceData & d()
Definition: device.hh:338
Frame rootFrame() const
Get root frame.
void addGripper(const GripperPtr_t &gripper)
Add a gripper to the Device.
Definition: device.hh:253
const Grippers_t & grippers() const
Return list of grippers of the Device.
Definition: device.hh:259
const DistanceResults_t & distanceResults() const
Get result of distance computations.
void setData(DataPtr_t dataPtr)
Set Pinocchio data corresponding to model.
Definition: device.hh:118
JointPtr_t getJointByBodyName(const std::string &name) const
void init(const DeviceWkPtr_t &weakPtr)
Initialization.
ExtraConfigSpace extraConfigSpace_
Definition: device.hh:348
std::vector< JointLinearConstraint > jointConstraints_
Definition: device.hh:350
size_type nbJoints() const
void setModel(ModelPtr_t modelPtr)
Set pinocchio model.
Definition: device.hh:112
DeviceData d_
Definition: device.hh:336
std::list< CollisionPair_t > CollisionPairs_t
Definition: device.hh:70
void setGeomModel(GeomModelPtr_t geomModelPtr)
Set pinocchio geom.
Definition: device.hh:115
ExtraConfigSpace & extraConfigSpace()
Definition: device.hh:231
size_type numberDof() const
void createData()
Create Pinocchio data from model.
Frame getFrameByName(const std::string &name) const
JointPtr_t getJointAtVelocityRank(const size_type &r) const
LiegroupSpacePtr_t configSpace_
Definition: device.hh:346
std::pair< JointPtr_t, JointPtr_t > CollisionPair_t
Collision pairs between bodies.
Definition: device.hh:69
Device()
Definition: device.hh:357
virtual void removeJoints(const std::vector< std::string > &jointNames, Configuration_t referenceConfig)
Remove some joints from the configuration space.
DeviceWkPtr_t weakPtr_
Definition: device.hh:351
BodyPtr_t obstacles() const
static DevicePtr_t createCopy(const DevicePtr_t &device)
Copy of a device.
JointPtr_t getJointAtConfigRank(const size_type &r) const
virtual void setDimensionExtraConfigSpace(const size_type &dimension)
Set dimension of extra configuration space.
Definition: device.hh:242
const ExtraConfigSpace & extraConfigSpace() const
Definition: device.hh:239
Grippers_t grippers_
Definition: device.hh:345
void numberDeviceData(const size_type &s)
Set the maximum number of concurrent use of the Device.
JointPtr_t jointAt(const size_type &i) const
std::string name_
Definition: device.hh:343
bool collisionTest(const bool stopAtFirstCollision=true)
virtual DevicePtr_t clone() const
Clone as a CkwsDevice The pinocchio model is not copied (only copy the pointer). A new Pinocchio "dat...
Definition: device.hh:82
static DevicePtr_t createCopyConst(const DeviceConstPtr_t &device)
const LiegroupSpacePtr_t & RnxSOnConfigSpace() const
See Joint::RnxSOnConfigurationSpace.
Definition: device.hh:206
void setGeomData(GeomDataPtr_t geomDataPtr)
Set Pinocchio geomData corresponding to model.
Definition: device.hh:126
void addJointConstraint(JointLinearConstraint constraint)
Add a joint constraint.
size_type configSize() const
static DevicePtr_t create(const std::string &name)
Creation of a new device.
Device(const Device &device)
Copy Constructor.
size_type nbObjects() const
Number of objects.
void initCopy(const DeviceWkPtr_t &weakPtr, const Device &other)
Initialization of of a clone device.
JointPtr_t rootJoint() const
Get root joint.
size_type numberDeviceData() const
Get the number of DeviceData.
DeviceData const & d() const
Definition: device.hh:339
const std::vector< JointLinearConstraint > & jointConstraints() const
Definition: device.hh:216
Device(const std::string &name)
Constructor.
virtual std::ostream & print(std::ostream &os) const
Print object in a stream.
Definition: extra-config-space.hh:45
Robot frame.
Definition: frame.hh:42
Definition: joint.hh:57
Pool of objects.
Definition: pool.hh:57
#define HPP_PINOCCHIO_DLLAPI
Definition: config.hh:88
shared_ptr< Device > DevicePtr_t
Definition: fwd.hh:118
shared_ptr< Joint > JointPtr_t
Definition: fwd.hh:123
shared_ptr< GeomModel > GeomModelPtr_t
Definition: fwd.hh:133
void replaceGeometryByConvexHull(GeomModel &geomModel, const std::vector< std::string > &geometryNames)
std::ostream & operator<<(std::ostream &os, const hpp::pinocchio::Device &device)
Definition: device.hh:366
shared_ptr< GeomData > GeomDataPtr_t
Definition: fwd.hh:135
shared_ptr< LiegroupSpace > LiegroupSpacePtr_t
Definition: fwd.hh:150
matrix_t::Index size_type
Definition: fwd.hh:97
shared_ptr< Body > BodyPtr_t
Definition: fwd.hh:109
double value_type
Definition: fwd.hh:51
vector_t Configuration_t
Definition: fwd.hh:89
std::vector< GripperPtr_t > Grippers_t
Definition: fwd.hh:126
::pinocchio::GeometryModel GeomModel
Definition: fwd.hh:79
shared_ptr< const Device > DeviceConstPtr_t
Definition: fwd.hh:119
shared_ptr< Gripper > GripperPtr_t
Definition: fwd.hh:125
shared_ptr< Model > ModelPtr_t
Definition: fwd.hh:128
std::vector< coal::DistanceResult > DistanceResults_t
Definition: fwd.hh:120
shared_ptr< CollisionObject > CollisionObjectPtr_t
Definition: fwd.hh:116
shared_ptr< Data > DataPtr_t
Definition: fwd.hh:130
Utility functions.
Definition: body.hh:39
Definition: collision-object.hh:40
Definition: device-data.hh:51
void invalidate()
Definition: device-data.hh:55
JointPtr_t joint
Definition: device.hh:150
value_type multiplier
Definition: device.hh:149