Klamp't  0.8.1
Resources.h
1 #ifndef ROBOT_RESOURCES_H
2 #define ROBOT_RESOURCES_H
3 
4 #include <KrisLibrary/utils/ResourceLibrary.h>
5 #include <KrisLibrary/math3d/geometry3d.h>
6 #include <KrisLibrary/meshing/PointCloud.h>
7 #include "World.h"
8 #include "MultiPath.h"
9 #include "Contact/Stance.h"
10 #include "Contact/Grasp.h"
11 using namespace std;
12 
13 class AnyCollection;
14 typedef BasicResource<Config> ConfigResource;
15 typedef BasicResource<Vector3> Vector3Resource;
16 typedef BasicResource<Matrix3> Matrix3Resource;
17 typedef BasicResource<Matrix> MatrixResource;
18 typedef BasicResource<RigidTransform> RigidTransformResource;
19 typedef BasicResource<GeometricPrimitive3D> GeometricPrimitive3DResource;
20 typedef BasicResource<Camera::Viewport> ViewportResource;
21 
25 class ConfigsResource : public CompoundResourceBase
26 {
27  public:
28  using ResourceBase::Load;
29  using ResourceBase::Save;
30  virtual bool Load(istream& in);
31  virtual bool Save(ostream& out);
32  virtual bool Save(AnyCollection& c);
33  virtual bool Load(AnyCollection& c);
34  virtual const char* Type() const { return "Configs"; }
35  virtual ResourceBase* Make() { return new ConfigsResource; }
36  virtual ResourceBase* Copy();
37  virtual vector<string> CastTypes() const;
38  virtual vector<string> SubTypes() const;
39  virtual ResourcePtr Cast(const char* subtype);
40  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
41  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
42  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
43 
44  vector<Vector> configs;
45 };
46 
51 class TriMeshResource : public BasicResource<Meshing::TriMesh>
52 {
53 public:
54  virtual bool Load(const std::string& fn);
55  virtual bool Save(const std::string& fn);
56  virtual const char* Type() const { return "TriMesh"; }
57  virtual ResourceBase* Make() { return new TriMeshResource; }
58  virtual ResourceBase* Copy();
59 };
60 
64 class PointCloudResource : public ResourceBase
65 {
66  public:
67  using ResourceBase::Load;
68  using ResourceBase::Save;
69  virtual bool Load(istream& in);
70  virtual bool Save(ostream& out);
71  virtual const char* Type() const { return "PointCloud"; }
72  virtual ResourceBase* Make() { return new PointCloudResource; }
73  virtual ResourceBase* Copy();
74 
75  Meshing::PointCloud3D pointCloud;
76 };
77 
81 class RobotResource : public ResourceBase
82 {
83  public:
84  using ResourceBase::Load;
85  using ResourceBase::Save;
86  virtual bool Load(const string& fn);
87  virtual bool Save(const string& fn);
88  virtual const char* Type() const { return "Robot"; }
89  virtual ResourceBase* Make() { return new RobotResource; }
90  virtual ResourceBase* Copy();
91 
92  Robot robot;
93 };
94 
98 class RigidObjectResource : public ResourceBase
99 {
100  public:
101  using ResourceBase::Load;
102  using ResourceBase::Save;
103  virtual bool Load(const string& fn);
104  virtual bool Save(const string& fn);
105  virtual const char* Type() const { return "RigidObject"; }
106  virtual ResourceBase* Make() { return new RigidObjectResource; }
107  virtual ResourceBase* Copy();
108 
109  RigidObject object;
110 };
111 
118 class WorldResource : public CompoundResourceBase
119 {
120  public:
121  using ResourceBase::Load;
122  using ResourceBase::Save;
123  virtual bool Load(const string& fn);
124  virtual bool Save(const string& fn);
125  virtual const char* Type() const { return "World"; }
126  virtual ResourceBase* Make() { return new WorldResource; }
127  virtual ResourceBase* Copy();
128  virtual vector<string> SubTypes() const;
129  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
130  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
131  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
132 
133  RobotWorld world;
134 };
135 
139 class LinearPathResource : public CompoundResourceBase
140 {
141  public:
142  using ResourceBase::Load;
143  using ResourceBase::Save;
144  virtual bool Load(istream& in);
145  virtual bool Save(ostream& out);
146  virtual bool Save(AnyCollection& c);
147  virtual bool Load(AnyCollection& c);
148  virtual const char* Type() const { return "LinearPath"; }
149  virtual ResourceBase* Make() { return new LinearPathResource; }
150  virtual ResourceBase* Copy();
151  virtual vector<string> CastTypes() const;
152  virtual vector<string> SubTypes() const;
153  virtual vector<string> ExtractTypes() const;
154  virtual ResourcePtr Cast(const char* subtype);
155  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
156  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
157  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
158 
159  vector<Real> times;
160  vector<Vector> milestones;
161 };
162 
169 class MultiPathResource : public CompoundResourceBase
170 {
171  public:
172  using ResourceBase::Load;
173  using ResourceBase::Save;
174  virtual bool Load(const string& fn);
175  virtual bool Save(const string& fn);
176  virtual bool Load(TiXmlElement* in);
177  virtual bool Save(TiXmlElement* out);
178  virtual const char* Type() const { return "MultiPath"; }
179  virtual ResourceBase* Make() { return new MultiPathResource; }
180  virtual ResourceBase* Copy();
181  virtual vector<string> CastTypes() const;
182  virtual vector<string> SubTypes() const;
183  virtual vector<string> ExtractTypes() const;
184  virtual ResourcePtr Cast(const char* subtype);
185  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
186  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
187  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
188 
189  MultiPath path;
190 };
191 
197 class IKGoalResource : public CompoundResourceBase
198 {
199  public:
200  IKGoalResource() {}
201  IKGoalResource(const IKGoal& val) : goal(val) {}
202  IKGoalResource(const IKGoal& val,const string& name) : CompoundResourceBase(name),goal(val) {}
203  using ResourceBase::Load;
204  using ResourceBase::Save;
205  virtual bool Load(AnyCollection& c);
206  virtual bool Save(AnyCollection& c);
207  virtual bool Load(std::istream& in) {
208  in>>goal;
209  if(in.bad()) return false;
210  return true;
211  }
212  virtual bool Save(std::ostream& out) {
213  out<<goal<<std::endl;
214  return true;
215  }
216  virtual const char* Type() const { return "IKGoal"; }
217  virtual ResourceBase* Make() { return new IKGoalResource; }
218  virtual ResourceBase* Copy() { return new IKGoalResource(goal,name); }
219  virtual vector<string> CastTypes() const;
220  virtual ResourcePtr Cast(const char* subtype) const;
221 
222  IKGoal goal;
223 };
224 
228 class HoldResource : public CompoundResourceBase
229 {
230  public:
231  HoldResource() {}
232  HoldResource(const Hold& val) : hold(val) {}
233  HoldResource(const Hold& val,const string& name) : CompoundResourceBase(name),hold(val) {}
234  using ResourceBase::Load;
235  using ResourceBase::Save;
236  virtual bool Load(AnyCollection& c);
237  virtual bool Save(AnyCollection& c);
238  virtual bool Load(std::istream& in) {
239  in>>hold;
240  if(in.bad()) return false;
241  return true;
242  }
243  virtual bool Save(std::ostream& out) {
244  out<<hold<<std::endl;
245  return true;
246  }
247  virtual const char* Type() const { return "Hold"; }
248  virtual ResourceBase* Make() { return new HoldResource; }
249  virtual ResourceBase* Copy() { return new HoldResource(hold,name); }
250  virtual vector<string> CastTypes() const;
251  virtual vector<string> SubTypes() const;
252  virtual ResourcePtr Cast(const char* subtype) const;
253  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
254  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
255 
256  Hold hold;
257 };
258 
262 class StanceResource : public CompoundResourceBase
263 {
264  public:
265  StanceResource() {}
266  StanceResource(const Stance& val);
267  using ResourceBase::Load;
268  using ResourceBase::Save;
269  virtual bool Load(istream& in);
270  virtual bool Save(ostream& out);
271  virtual bool Load(TiXmlElement* in);
272  virtual bool Save(TiXmlElement* out);
273  virtual bool Load(AnyCollection& c);
274  virtual bool Save(AnyCollection& c);
275  virtual const char* Type() const { return "Stance"; }
276  virtual ResourceBase* Make() { return new StanceResource; }
277  virtual ResourceBase* Copy();
278  virtual vector<string> CastTypes() const;
279  virtual vector<string> SubTypes() const;
280  virtual vector<string> ExtractTypes() const;
281  virtual ResourcePtr Cast(const char* subtype);
282  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
283  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
284  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
285 
286  Stance stance;
287 };
288 
295 class GraspResource : public CompoundResourceBase
296 {
297  public:
298  GraspResource() {}
299  GraspResource(const Grasp& val);
300  using ResourceBase::Load;
301  using ResourceBase::Save;
302  virtual bool Load(TiXmlElement* in);
303  virtual bool Save(TiXmlElement* out);
304  virtual bool Load(AnyCollection& c);
305  virtual bool Save(AnyCollection& c);
306  virtual const char* Type() const { return "Grasp"; }
307  virtual ResourceBase* Make() { return new GraspResource; }
308  virtual ResourceBase* Copy();
309  virtual vector<string> CastTypes() const;
310  virtual vector<string> SubTypes() const;
311  virtual vector<string> ExtractTypes() const;
312  virtual ResourcePtr Cast(const char* subtype);
313  virtual bool Extract(const char* subtype,vector<ResourcePtr>&);
314  virtual bool Pack(vector<ResourcePtr>& subobjects,string* errorMessage=NULL);
315  virtual bool Unpack(vector<ResourcePtr>& subobjects,bool* incomplete=NULL);
316 
317  Grasp grasp;
318 };
319 
322 
326 void MakeRobotResourceLibrary(ResourceLibrary& library);
327 
328 ResourcePtr MakeResource(const string& name,const vector<int>& vals);
329 ResourcePtr MakeResource(const string& name,const vector<double>& vals);
330 ResourcePtr MakeResource(const string& name,const Config& q);
331 ResourcePtr MakeResource(const string& name,const vector<Config>& qs);
332 ResourcePtr MakeResource(const string& name,const vector<Real>& ts,const vector<Config>& qs);
333 ResourcePtr MakeResource(const string& name,const MultiPath& path);
334 ResourcePtr MakeResource(const string& name,const Vector3& pt);
335 ResourcePtr MakeResource(const string& name,const Matrix3& R);
336 ResourcePtr MakeResource(const string& name,const RigidTransform& T);
337 ResourcePtr MakeResource(const string& name,const GeometricPrimitive3D& geom);
338 ResourcePtr MakeResource(const string& name,const Meshing::TriMesh& mesh);
339 ResourcePtr MakeResource(const string& name,const Geometry::AnyGeometry3D& geom);
340 ResourcePtr MakeResource(const string& name,const IKGoal& goal);
341 ResourcePtr MakeResource(const string& name,const Hold& hold);
342 ResourcePtr MakeResource(const string& name,const Stance& stance);
343 ResourcePtr MakeResource(const string& name,const Grasp& grasp);
344 
346 bool CanCastResource(const ResourcePtr& item,const char* type);
348 vector<string> CastResourceTypes(const ResourcePtr& item);
350 ResourcePtr CastResource(ResourcePtr& item,const char* type);
351 
353 vector<string> ExtractResourceTypes(const ResourcePtr& item);
355 vector<ResourcePtr> ExtractResources(ResourcePtr& item,const char* type);
356 
359 ResourcePtr PackResources(vector<ResourcePtr>& resources,ResourcePtr rtemplate,string* errorMessage=NULL);
361 ResourcePtr PackResources(ResourceLibrary& resources,const string& type,string* errorMessage=NULL);
362 
368 vector<ResourcePtr> UnpackResource(ResourcePtr r,bool* successful=NULL,bool* incomplete=NULL);
369 
372 #endif
Resource for a Hold.
Definition: Resources.h:228
A single contact between the robot and the environment.
Definition: Hold.h:26
A very general multi-section path container.
Definition: MultiPath.h:29
The main robot type used in RobotSim.
Definition: Robot.h:79
ResourcePtr CastResource(ResourcePtr &item, const char *type)
Convert a resource to a given type.
Resource for a RigidObject.
Definition: Resources.h:98
A collection of holds.
Definition: Stance.h:19
Resource for a TriMesh. Needs to be overloaded to load from alternate mesh formats (meshing/IO...
Definition: Resources.h:51
The main world class containing multiple robots, objects, and static geometries (terrains). Lights and other viewport information may also be stored here.
Definition: World.h:20
Resource for multiple Config&#39;s.
Definition: Resources.h:25
void MakeRobotResourceLibrary(ResourceLibrary &library)
Initializes a ResourceLibrary so that it accepts standard RobotSim file types.
Resource for a Grasp.
Definition: Resources.h:295
Resource for a Stance.
Definition: Resources.h:262
Resource for a RobotWorld.
Definition: Resources.h:118
Resource for an IKGoal.
Definition: Resources.h:197
vector< ResourcePtr > ExtractResources(ResourcePtr &item, const char *type)
Extract all sub-resources of a given type.
bool CanCastResource(const ResourcePtr &item, const char *type)
Returns true if CastResource can cast to the given type.
ResourcePtr PackResources(vector< ResourcePtr > &resources, ResourcePtr rtemplate, string *errorMessage=NULL)
Resource for a LinearPath.
Definition: Resources.h:139
vector< ResourcePtr > UnpackResource(ResourcePtr r, bool *successful=NULL, bool *incomplete=NULL)
vector< string > ExtractResourceTypes(const ResourcePtr &item)
Returns the list of types that can be extracted from the item.
vector< string > CastResourceTypes(const ResourcePtr &item)
Returns the list of types which the item is castable to.
Resource for a PointCloud3D.
Definition: Resources.h:64
Resource for a MultiPath.
Definition: Resources.h:169
A (static) rigid object that may be manipulated.
Definition: RigidObject.h:13
Slightly more sophisticated than a Stance, a Grasp allows some of the robot&#39;s degrees of freedom to b...
Definition: Grasp.h:15
Resource for a Robot.
Definition: Resources.h:81