Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| /********************************************************************* | |
| * Software License Agreement (BSD License) | |
| * | |
| * Copyright (c) 2012, Willow Garage, Inc. | |
| * All rights reserved. | |
| * | |
| * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | |
| * are met: | |
| * | |
| * * Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | |
| * * Redistributions in binary form must reproduce the above | |
| * copyright notice, this list of conditions and the following | |
| * disclaimer in the documentation and/or other materials provided | |
| * with the distribution. | |
| * * Neither the name of Willow Garage nor the names of its | |
| * contributors may be used to endorse or promote products derived | |
| * from this software without specific prior written permission. | |
| * | |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | |
| * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | |
| * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | |
| * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | |
| * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | |
| * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | |
| * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
| * POSSIBILITY OF SUCH DAMAGE. | |
| *********************************************************************/ | |
| /* Author: Ioan Sucan */ | |
| #ifndef MOVEIT_PLANNING_INTERFACE_PLANNING_INTERFACE_ | |
| #define MOVEIT_PLANNING_INTERFACE_PLANNING_INTERFACE_ | |
| #include <moveit/macros/class_forward.h> | |
| #include <moveit/planning_interface/planning_request.h> | |
| #include <moveit/planning_interface/planning_response.h> | |
| #include <string> | |
| #include <map> | |
| namespace planning_scene | |
| { | |
| MOVEIT_CLASS_FORWARD(PlanningScene); | |
| } | |
| /** \brief This namespace includes the base class for MoveIt planners */ | |
| namespace planning_interface | |
| { | |
| /** | |
| \brief Specify the settings for a particular planning algorithm, for a particular group. The Planner plugin uses | |
| these settings to configure the algorithm. | |
| \note Settings with unknown keys are ignored. Settings for unknown groups are ignored. | |
| */ | |
| struct PlannerConfigurationSettings | |
| { | |
| /** \brief The group (as defined in the SRDF) this configuration is meant for */ | |
| std::string group; | |
| /* \brief Name of the configuration. | |
| For a group's default configuration, this should be the same as the group name. | |
| Otherwise, the form "group_name[config_name]" is expected for the name. */ | |
| std::string name; | |
| /** \brief Key-value pairs of settings that get passed to the planning algorithm */ | |
| std::map<std::string, std::string> config; | |
| }; | |
| /** \brief Map from PlannerConfigurationSettings.name to PlannerConfigurationSettings */ | |
| typedef std::map<std::string, PlannerConfigurationSettings> PlannerConfigurationMap; | |
| MOVEIT_CLASS_FORWARD(PlanningContext); | |
| /** \brief Representation of a particular planning context -- the planning scene and the request are known, | |
| solution is not yet computed. */ | |
| class PlanningContext | |
| { | |
| public: | |
| /** \brief Construct a planning context named \e name for the group \e group */ | |
| PlanningContext(const std::string& name, const std::string& group); | |
| virtual ~PlanningContext(); | |
| /** \brief Get the name of the group this planning context is for */ | |
| const std::string& getGroupName() const | |
| { | |
| return group_; | |
| } | |
| /** \brief Get the name of this planning context */ | |
| const std::string& getName() const | |
| { | |
| return name_; | |
| } | |
| /** \brief Get the planning scene associated to this planning context */ | |
| const planning_scene::PlanningSceneConstPtr& getPlanningScene() const | |
| { | |
| return planning_scene_; | |
| } | |
| /** \brief Get the motion plan request associated to this planning context */ | |
| const MotionPlanRequest& getMotionPlanRequest() const | |
| { | |
| return request_; | |
| } | |
| /** \brief Set the planning scene for this context */ | |
| void setPlanningScene(const planning_scene::PlanningSceneConstPtr& planning_scene); | |
| /** \brief Set the planning request for this context */ | |
| void setMotionPlanRequest(const MotionPlanRequest& request); | |
| /** \brief Solve the motion planning problem and store the result in \e res. This function should not clear data | |
| * structures before computing. The constructor and clear() do that. */ | |
| virtual bool solve(MotionPlanResponse& res) = 0; | |
| /** \brief Solve the motion planning problem and store the detailed result in \e res. This function should not clear | |
| * data structures before computing. The constructor and clear() do that. */ | |
| virtual bool solve(MotionPlanDetailedResponse& res) = 0; | |
| /** \brief If solve() is running, terminate the computation. Return false if termination not possible. No-op if | |
| * solve() is not running (returns true).*/ | |
| virtual bool terminate() = 0; | |
| /** \brief Clear the data structures used by the planner */ | |
| virtual void clear() = 0; | |
| protected: | |
| /// The name of this planning context | |
| std::string name_; | |
| /// The group (as in the SRDF) this planning context is for | |
| std::string group_; | |
| /// The planning scene for this context | |
| planning_scene::PlanningSceneConstPtr planning_scene_; | |
| /// The planning request for this context | |
| MotionPlanRequest request_; | |
| }; | |
| MOVEIT_CLASS_FORWARD(PlannerManager); | |
| /** \brief Base class for a MoveIt planner */ | |
| class PlannerManager | |
| { | |
| public: | |
| PlannerManager() | |
| { | |
| } | |
| virtual ~PlannerManager() | |
| { | |
| } | |
| /// Initialize a planner. This function will be called after the construction of the plugin, before any other call is | |
| /// made. | |
| /// It is assumed that motion plans will be computed for the robot described by \e model and that any exposed ROS | |
| /// functionality | |
| /// or required ROS parameters are namespaced by \e ns | |
| virtual bool initialize(const robot_model::RobotModelConstPtr& model, const std::string& ns); | |
| /// Get \brief a short string that identifies the planning interface | |
| virtual std::string getDescription() const; | |
| /// \brief Get the names of the known planning algorithms (values that can be filled as planner_id in the planning | |
| /// request) | |
| virtual void getPlanningAlgorithms(std::vector<std::string>& algs) const; | |
| /// \brief Construct a planning context given the current scene and a planning request. If a problem is encountered, | |
| /// error code is set and empty ptr is returned. | |
| /// The returned motion planner context is clean -- the motion planner will start from scratch every time a context is | |
| /// constructed. | |
| /// \param planning_scene A const planning scene to use for planning | |
| /// \param req The representation of the planning request | |
| /// \param error_code This is where the error is set if constructing the planning context fails | |
| virtual PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr& planning_scene, | |
| const MotionPlanRequest& req, | |
| moveit_msgs::MoveItErrorCodes& error_code) const = 0; | |
| /// \brief Calls the function above but ignores the error_code | |
| PlanningContextPtr getPlanningContext(const planning_scene::PlanningSceneConstPtr& planning_scene, | |
| const MotionPlanRequest& req) const; | |
| /// \brief Determine whether this plugin instance is able to represent this planning request | |
| virtual bool canServiceRequest(const MotionPlanRequest& req) const = 0; | |
| /// \brief Specify the settings to be used for specific algorithms | |
| virtual void setPlannerConfigurations(const PlannerConfigurationMap& pcs); | |
| /// \brief Get the settings for a specific algorithm | |
| const PlannerConfigurationMap& getPlannerConfigurations() const | |
| { | |
| return config_settings_; | |
| } | |
| /// \brief Request termination, if a solve() function is currently computing plans | |
| void terminate() const; | |
| protected: | |
| /** \brief All the existing planning configurations. The name | |
| of the configuration is the key of the map. This name can | |
| be of the form "group_name[config_name]" if there are | |
| particular configurations specified for a group, or of the | |
| form "group_name" if default settings are to be used. */ | |
| PlannerConfigurationMap config_settings_; | |
| }; | |
| } // planning_interface | |
| #endif |