All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
OpenDEEnvironment.h
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2010, Rice University
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of the Rice University nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 /* Author: Ioan Sucan */
36 
37 #ifndef OMPL_EXTENSION_OPENDE_ENVIRONMENT_
38 #define OMPL_EXTENSION_OPENDE_ENVIRONMENT_
39 
40 #include "ompl/config.h"
41 #if OMPL_EXTENSION_OPENDE == 0
42 # error OpenDE extension not built
43 #endif
44 
45 #include "ompl/util/ClassForward.h"
46 
47 #include <ode/ode.h>
48 #include <vector>
49 #include <string>
50 #include <map>
51 #include <boost/thread/mutex.hpp>
52 
53 namespace ompl
54 {
55  namespace control
56  {
57 
59 
60  OMPL_CLASS_FORWARD(OpenDEEnvironment);
62 
68  {
69  public:
70 
72  dWorldID world_;
73 
75  std::vector<dSpaceID> collisionSpaces_;
76 
80  std::vector<dBodyID> stateBodies_;
81 
83  std::map<dGeomID, std::string>
85 
88 
90  dJointGroupID contactGroup_;
91 
93  unsigned int maxContacts_;
94 
96  double stepSize_;
97 
99  unsigned int maxControlSteps_;
100 
102  unsigned int minControlSteps_;
103 
105  mutable boost::mutex mutex_;
106 
108  {
109  contactGroup_ = dJointGroupCreate(0);
110  }
111 
112  virtual ~OpenDEEnvironment(void)
113  {
114  if (contactGroup_)
115  dJointGroupDestroy(contactGroup_);
116  }
117 
119  virtual unsigned int getControlDimension(void) const = 0;
120 
122  virtual void getControlBounds(std::vector<double> &lower, std::vector<double> &upper) const = 0;
123 
127  virtual void applyControl(const double *control) const = 0;
128 
133  virtual bool isValidCollision(dGeomID geom1, dGeomID geom2, const dContact& contact) const;
134 
138  virtual unsigned int getMaxContacts(dGeomID geom1, dGeomID geom2) const;
139 
141  virtual void setupContact(dGeomID geom1, dGeomID geom2, dContact &contact) const;
142 
144  std::string getGeomName(dGeomID geom) const;
145 
147  void setGeomName(dGeomID geom, const std::string &name);
148 
149  };
150  }
151 }
152 
153 #endif