KrisLibrary  1.0.0
RobotWithGeometry.h
1 #ifndef ROBOT_WITH_GEOMETRY_H
2 #define ROBOT_WITH_GEOMETRY_H
3 
4 #include "RobotDynamics3D.h"
5 #include <KrisLibrary/structs/array2d.h>
6 #include <KrisLibrary/geometry/AnyGeometry.h>
7 #include <memory>
8 
20 {
21 public:
24 
28  virtual ~RobotWithGeometry();
29 
31  void Initialize(int numLinks);
32  bool LoadGeometry(int i,const char* file);
33  bool SaveGeometry(int i,const char* file);
34  bool IsGeometryEmpty(int i);
35  void InitCollisions();
36  void CleanupCollisions();
37  void InitAllSelfCollisions();
38  void InitSelfCollisionPair(int i,int j);
39  void InitSelfCollisionPairs(const Array2D<bool>& collision);
40  void GetSelfCollisionPairs(Array2D<bool>& collision) const;
41  void CleanupSelfCollisions();
42 
44  void Merge(const std::vector<RobotWithGeometry*>& robots);
45 
50 
52  virtual void UpdateGeometry();
53  virtual void UpdateGeometry(int i);
55  virtual void InitMeshCollision(CollisionGeometry& mesh);
56 
57  virtual bool SelfCollision(Real distance=0);
59  virtual bool SelfCollision(const std::vector<int>& bodies, Real distance=0);
61  virtual bool SelfCollision(const std::vector<int>& set1,const std::vector<int>& set2,Real distance=0);
63  virtual bool SelfCollision(int i, int j, Real distance=0);
65  virtual void SelfCollisions(std::vector<std::pair<int,int> >& pairs,Real distance=0);
66 
67  virtual bool MeshCollision(CollisionGeometry& mesh);
68  virtual bool MeshCollision(int i,Real distance=0);
69 
70  virtual void DrawGL();
71  virtual void DrawLinkGL(int i);
72 
73  std::vector<std::shared_ptr<CollisionGeometry> > geometry;
76  std::vector<CollisionQuery*> envCollisions;
77 };
78 
79 #endif
Array2D< CollisionQuery * > selfCollisions
matrix(i,j) of collisions between bodies, i < j (upper triangular)
Definition: RobotWithGeometry.h:75
const RobotWithGeometry & operator=(const RobotWithGeometry &rhs)
Copy, keeping shared references to geometries.
Definition: RobotWithGeometry.cpp:81
An AnyGeometry with collision detection information.
Definition: AnyGeometry.h:98
virtual void UpdateGeometry()
Call this before querying self collisions.
Definition: RobotWithGeometry.cpp:200
void Initialize(int numLinks)
These should be used by the initialization routines.
Definition: RobotWithGeometry.cpp:34
virtual void InitMeshCollision(CollisionGeometry &mesh)
Call this before querying environment collisions.
Definition: RobotWithGeometry.cpp:211
A class that stores information regarding a collision query. May be slightly faster than running indi...
Definition: AnyGeometry.h:186
void Merge(const std::vector< RobotWithGeometry * > &robots)
Creates this into a mega-robot from several other robots.
Definition: RobotWithGeometry.cpp:46
The base class for a robot definition.
Definition: RobotWithGeometry.h:19
Class defining kinematic and dynamic state of a robot, with commonly used functions. Inherits from RobotKinematics3D.
Definition: RobotDynamics3D.h:32
virtual void SelfCollisions(std::vector< std::pair< int, int > > &pairs, Real distance=0)
Compute all self collisions (faster than.
Definition: RobotWithGeometry.cpp:379