All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator
ODESimpleSetup.h
00001 /*********************************************************************
00002 * Software License Agreement (BSD License)
00003 *
00004 *  Copyright (c) 2010, Rice University
00005 *  All rights reserved.
00006 *
00007 *  Redistribution and use in source and binary forms, with or without
00008 *  modification, are permitted provided that the following conditions
00009 *  are met:
00010 *
00011 *   * Redistributions of source code must retain the above copyright
00012 *     notice, this list of conditions and the following disclaimer.
00013 *   * Redistributions in binary form must reproduce the above
00014 *     copyright notice, this list of conditions and the following
00015 *     disclaimer in the documentation and/or other materials provided
00016 *     with the distribution.
00017 *   * Neither the name of the Rice University nor the names of its
00018 *     contributors may be used to endorse or promote products derived
00019 *     from this software without specific prior written permission.
00020 *
00021 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 *  POSSIBILITY OF SUCH DAMAGE.
00033 *********************************************************************/
00034 
00035 /* Author: Ioan Sucan */
00036 
00037 #ifndef OMPL_EXTENSION_ODE_SIMPLE_SETUP_
00038 #define OMPL_EXTENSION_ODE_SIMPLE_SETUP_
00039 
00040 #include "ompl/control/SimpleSetup.h"
00041 #include "ompl/extensions/ode/ODEStateValidityChecker.h"
00042 #include "ompl/extensions/ode/ODEControlManifold.h"
00043 
00044 namespace ompl
00045 {
00046 
00047     namespace control
00048     {
00049 
00052         class ODESimpleSetup : public SimpleSetup
00053         {
00054         public:
00055 
00057             explicit
00058             ODESimpleSetup(const ControlManifoldPtr &manifold);
00059 
00061             explicit
00062             ODESimpleSetup(const base::StateManifoldPtr &manifold);
00063 
00068             explicit
00069             ODESimpleSetup(const ODEEnvironmentPtr &env);
00070 
00071             virtual ~ODESimpleSetup(void)
00072             {
00073             }
00074 
00076             const ODEEnvironmentPtr& getEnvironment(void) const
00077             {
00078                 return getStateManifold()->as<ODEStateManifold>()->getEnvironment();
00079             }
00080 
00082             base::ScopedState<ODEStateManifold> getCurrentState(void) const;
00083 
00085             void setCurrentState(const base::ScopedState<> &state);
00086 
00088             void setCurrentState(const base::State *state);
00089 
00091             void setVolumeBounds(const base::RealVectorBounds &bounds)
00092             {
00093                 getStateManifold()->as<ODEStateManifold>()->setVolumeBounds(bounds);
00094             }
00095 
00097             void setLinearVelocityBounds(const base::RealVectorBounds &bounds)
00098             {
00099                 getStateManifold()->as<ODEStateManifold>()->setLinearVelocityBounds(bounds);
00100             }
00101 
00103             void setAngularVelocityBounds(const base::RealVectorBounds &bounds)
00104             {
00105                 getStateManifold()->as<ODEStateManifold>()->setAngularVelocityBounds(bounds);
00106             }
00107 
00112             void playPath(const base::PathPtr &path, double timeFactor = 1.0) const;
00113 
00115             void playSolutionPath(double timeFactor = 1.0) const;
00116 
00119             base::PathPtr simulateControl(const double* control, unsigned int steps) const;
00120 
00123             base::PathPtr simulateControl(const Control* control, unsigned int steps) const;
00124 
00129             base::PathPtr simulate(unsigned int steps) const;
00130 
00131             virtual void setup(void);
00132 
00133         private:
00134 
00135             void useEnvParams(void);
00136 
00137         };
00138     }
00139 
00140 }
00141 #endif
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator