abstract_navigation_server.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2018, Magazino GmbH, Sebastian Pütz, Jorge Santos Simón
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following
13  * disclaimer in the documentation and/or other materials provided
14  * with the distribution.
15  *
16  * 3. Neither the name of the copyright holder nor the names of its
17  * contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  * abstract_navigation_server.cpp
34  *
35  * authors:
36  * Sebastian Pütz <spuetz@uni-osnabrueck.de>
37  * Jorge Santos Simón <santos@magazino.eu>
38  *
39  */
40 
41 #include <nav_msgs/Path.h>
42 
44 
45 namespace mbf_abstract_nav
46 {
47 
49  : tf_listener_ptr_(tf_listener_ptr), private_nh_("~"),
50  planner_plugin_manager_("planners",
51  boost::bind(&AbstractNavigationServer::loadPlannerPlugin, this, _1),
52  boost::bind(&AbstractNavigationServer::initializePlannerPlugin, this, _1, _2)),
53  controller_plugin_manager_("controllers",
54  boost::bind(&AbstractNavigationServer::loadControllerPlugin, this, _1),
55  boost::bind(&AbstractNavigationServer::initializeControllerPlugin, this, _1, _2)),
56  recovery_plugin_manager_("recovery_behaviors",
57  boost::bind(&AbstractNavigationServer::loadRecoveryPlugin, this, _1),
58  boost::bind(&AbstractNavigationServer::initializeRecoveryPlugin, this, _1, _2)),
59  tf_timeout_(private_nh_.param<double>("tf_timeout", 3.0)),
60  global_frame_(private_nh_.param<std::string>("global_frame", "map")),
61  robot_frame_(private_nh_.param<std::string>("robot_frame", "base_link")),
62  robot_info_(*tf_listener_ptr, global_frame_, robot_frame_, tf_timeout_),
63  controller_action_(name_action_exe_path, robot_info_),
64  planner_action_(name_action_get_path, robot_info_),
65  recovery_action_(name_action_recovery, robot_info_),
66  move_base_action_(name_action_move_base, robot_info_, recovery_plugin_manager_.getLoadedNames())
67 {
68  ros::NodeHandle nh;
69 
70  goal_pub_ = nh.advertise<geometry_msgs::PoseStamped>("current_goal", 1);
71 
72  // init cmd_vel publisher for the robot velocity
73  vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 1);
74 
81  false));
82 
89  false));
90 
97  false));
98 
101  private_nh_,
105  false));
106 
107  // XXX note that we don't start a dynamic reconfigure server, to avoid colliding with the one possibly created by
108  // the base class. If none, it should call startDynamicReconfigureServer method to start the one defined here for
109  // providing just the abstract server parameters
110 }
111 
113 {
117 }
118 
120 {
121 
122 }
123 
125 {
126  const mbf_msgs::GetPathGoal &goal = *(goal_handle.getGoal().get());
127  const geometry_msgs::Point &p = goal.target_pose.pose.position;
128 
129  std::string planner_name;
131  {
132  planner_name = goal.planner.empty() ? planner_plugin_manager_.getLoadedNames().front() : goal.planner;
133  }
134  else
135  {
136  mbf_msgs::GetPathResult result;
137  result.outcome = mbf_msgs::GetPathResult::INVALID_PLUGIN;
138  result.message = "No plugins loaded at all!";
139  ROS_WARN_STREAM_NAMED("get_path", result.message);
140  goal_handle.setRejected(result, result.message);
141  return;
142  }
143 
144  if(!planner_plugin_manager_.hasPlugin(planner_name))
145  {
146  mbf_msgs::GetPathResult result;
147  result.outcome = mbf_msgs::GetPathResult::INVALID_PLUGIN;
148  result.message = "No plugin loaded with the given name \"" + goal.planner + "\"!";
149  ROS_WARN_STREAM_NAMED("get_path", result.message);
150  goal_handle.setRejected(result, result.message);
151  return;
152  }
153 
155  ROS_DEBUG_STREAM_NAMED("get_path", "Start action \"get_path\" using planner \"" << planner_name
156  << "\" of type \"" << planner_plugin_manager_.getType(planner_name) << "\"");
157 
158 
159  if(planner_plugin)
160  {
162  = newPlannerExecution(planner_name, planner_plugin);
163 
164  //start another planning action
165  planner_action_.start(goal_handle, planner_execution);
166  }
167  else
168  {
169  mbf_msgs::GetPathResult result;
170  result.outcome = mbf_msgs::GetPathResult::INTERNAL_ERROR;
171  result.message = "Internal Error: \"planner_plugin\" pointer should not be a null pointer!";
172  ROS_FATAL_STREAM_NAMED("get_path", result.message);
173  goal_handle.setRejected(result, result.message);
174  }
175 }
176 
178 {
179  ROS_INFO_STREAM_NAMED("get_path", "Cancel action \"get_path\"");
180  planner_action_.cancel(goal_handle);
181 }
182 
184 {
185  const mbf_msgs::ExePathGoal &goal = *(goal_handle.getGoal().get());
186 
187  std::string controller_name;
189  {
190  controller_name = goal.controller.empty() ? controller_plugin_manager_.getLoadedNames().front() : goal.controller;
191  }
192  else
193  {
194  mbf_msgs::ExePathResult result;
195  result.outcome = mbf_msgs::ExePathResult::INVALID_PLUGIN;
196  result.message = "No plugins loaded at all!";
197  ROS_WARN_STREAM_NAMED("exe_path", result.message);
198  goal_handle.setRejected(result, result.message);
199  return;
200  }
201 
202  if(!controller_plugin_manager_.hasPlugin(controller_name))
203  {
204  mbf_msgs::ExePathResult result;
205  result.outcome = mbf_msgs::ExePathResult::INVALID_PLUGIN;
206  result.message = "No plugin loaded with the given name \"" + goal.controller + "\"!";
207  ROS_WARN_STREAM_NAMED("exe_path", result.message);
208  goal_handle.setRejected(result, result.message);
209  return;
210  }
211 
213  ROS_DEBUG_STREAM_NAMED("exe_path", "Start action \"exe_path\" using controller \"" << controller_name
214  << "\" of type \"" << controller_plugin_manager_.getType(controller_name) << "\"");
215 
216 
217  if(controller_plugin)
218  {
220  = newControllerExecution(controller_name, controller_plugin);
221 
222  // starts another controller action
223  controller_action_.start(goal_handle, controller_execution);
224  }
225  else
226  {
227  mbf_msgs::ExePathResult result;
228  result.outcome = mbf_msgs::ExePathResult::INTERNAL_ERROR;
229  result.message = "Internal Error: \"controller_plugin\" pointer should not be a null pointer!";
230  ROS_FATAL_STREAM_NAMED("exe_path", result.message);
231  goal_handle.setRejected(result, result.message);
232  }
233 }
234 
236 {
237  ROS_INFO_STREAM_NAMED("exe_path", "Cancel action \"exe_path\"");
238  controller_action_.cancel(goal_handle);
239 }
240 
242 {
243  const mbf_msgs::RecoveryGoal &goal = *(goal_handle.getGoal().get());
244 
245  std::string recovery_name;
246 
248  {
249  recovery_name = goal.behavior.empty() ? recovery_plugin_manager_.getLoadedNames().front() : goal.behavior;
250  }
251  else
252  {
253  mbf_msgs::RecoveryResult result;
254  result.outcome = mbf_msgs::RecoveryResult::INVALID_PLUGIN;
255  result.message = "No plugins loaded at all!";
256  ROS_WARN_STREAM_NAMED("recovery", result.message);
257  goal_handle.setRejected(result, result.message);
258  return;
259  }
260 
261  if(!recovery_plugin_manager_.hasPlugin(recovery_name))
262  {
263  mbf_msgs::RecoveryResult result;
264  result.outcome = mbf_msgs::RecoveryResult::INVALID_PLUGIN;
265  result.message = "No plugin loaded with the given name \"" + goal.behavior + "\"!";
266  ROS_WARN_STREAM_NAMED("recovery", result.message);
267  goal_handle.setRejected(result, result.message);
268  return;
269  }
270 
272  ROS_DEBUG_STREAM_NAMED("recovery", "Start action \"recovery\" using recovery \"" << recovery_name
273  << "\" of type \"" << recovery_plugin_manager_.getType(recovery_name) << "\"");
274 
275 
276  if(recovery_plugin)
277  {
279  = newRecoveryExecution(recovery_name, recovery_plugin);
280 
281  recovery_action_.start(goal_handle, recovery_execution);
282  }
283  else
284  {
285  mbf_msgs::RecoveryResult result;
286  result.outcome = mbf_msgs::RecoveryResult::INTERNAL_ERROR;
287  result.message = "Internal Error: \"recovery_plugin\" pointer should not be a null pointer!";
288  ROS_FATAL_STREAM_NAMED("recovery", result.message);
289  goal_handle.setRejected(result, result.message);
290  }
291 }
292 
294 {
295  ROS_INFO_STREAM_NAMED("recovery", "Cancel action \"recovery\"");
296  recovery_action_.cancel(goal_handle);
297 }
298 
300 {
301  ROS_DEBUG_STREAM_NAMED("move_base", "Start action \"move_base\"");
302  move_base_action_.start(goal_handle);
303 }
304 
306 {
307  ROS_INFO_STREAM_NAMED("move_base", "Cancel action \"move_base\"");
309  ROS_DEBUG_STREAM_NAMED("move_base", "Cancel action \"move_base\" completed");
310 }
311 
313  const std::string &plugin_name,
314  const mbf_abstract_core::AbstractPlanner::Ptr &plugin_ptr)
315 {
316  return boost::make_shared<mbf_abstract_nav::AbstractPlannerExecution>(plugin_name, plugin_ptr, last_config_);
317 }
318 
320  const std::string &plugin_name,
322 {
323  return boost::make_shared<mbf_abstract_nav::AbstractControllerExecution>(plugin_name, plugin_ptr, vel_pub_, goal_pub_,
325 }
326 
328  const std::string &plugin_name,
330 {
331  return boost::make_shared<mbf_abstract_nav::AbstractRecoveryExecution>(plugin_name, plugin_ptr,
333 }
334 
336 {
341 }
342 
344 {
345  // dynamic reconfigure server
346  dsrv_ = boost::make_shared<dynamic_reconfigure::Server<mbf_abstract_nav::MoveBaseFlexConfig> >(private_nh_);
347  dsrv_->setCallback(boost::bind(&AbstractNavigationServer::reconfigure, this, _1, _2));
348 }
349 
351  mbf_abstract_nav::MoveBaseFlexConfig &config, uint32_t level)
352 {
353  boost::lock_guard<boost::mutex> guard(configuration_mutex_);
354 
355  // Make sure we have the original configuration the first time we're called, so we can restore it if needed
356  if (!setup_reconfigure_)
357  {
358  default_config_ = config;
359  setup_reconfigure_ = true;
360  }
361 
362  if (config.restore_defaults)
363  {
364  config = default_config_;
365  // if someone sets restore defaults on the parameter server, prevent looping
366  config.restore_defaults = false;
367  }
368  planner_action_.reconfigureAll(config, level);
369  controller_action_.reconfigureAll(config, level);
370  recovery_action_.reconfigureAll(config, level);
371  move_base_action_.reconfigure(config, level);
372 
373  last_config_ = config;
374 }
375 
377  planner_action_.cancelAll();
378  controller_action_.cancelAll();
379  recovery_action_.cancelAll();
381 }
382 
383 } /* namespace mbf_abstract_nav */
mbf_abstract_nav::AbstractNavigationServer::callActionMoveBase
virtual void callActionMoveBase(ActionServerMoveBase::GoalHandle goal_handle)
MoveBase action execution method. This method will be called if the action server receives a goal.
Definition: abstract_navigation_server.cpp:299
mbf_abstract_nav::AbstractNavigationServer::move_base_action_
MoveBaseAction move_base_action_
Definition: abstract_navigation_server.h:354
mbf_abstract_nav::AbstractNavigationServer::last_config_
mbf_abstract_nav::MoveBaseFlexConfig last_config_
last configuration save
Definition: abstract_navigation_server.h:322
mbf_abstract_nav::MoveBaseAction::start
void start(GoalHandle &goal_handle)
Definition: move_base_action.cpp:107
mbf_abstract_nav::AbstractNavigationServer::configuration_mutex_
boost::mutex configuration_mutex_
configuration mutex for derived classes and other threads.
Definition: abstract_navigation_server.h:319
mbf_abstract_nav::AbstractPluginManager::loadPlugins
bool loadPlugins()
actionlib::ServerGoalHandle::getGoal
boost::shared_ptr< const Goal > getGoal() const
mbf_abstract_nav::AbstractNavigationServer::recovery_action_
RecoveryAction recovery_action_
Definition: abstract_navigation_server.h:353
mbf_abstract_nav::AbstractNavigationServer::action_server_exe_path_ptr_
ActionServerExePathPtr action_server_exe_path_ptr_
shared pointer to the ExePath action server
Definition: abstract_navigation_server.h:307
boost::shared_ptr< tf::TransformListener >
mbf_abstract_nav::AbstractNavigationServer::planner_plugin_manager_
AbstractPluginManager< mbf_abstract_core::AbstractPlanner > planner_plugin_manager_
Definition: abstract_navigation_server.h:299
mbf_abstract_nav::AbstractNavigationServer::callActionExePath
virtual void callActionExePath(ActionServerExePath::GoalHandle goal_handle)
ExePath action execution method. This method will be called if the action server receives a goal.
Definition: abstract_navigation_server.cpp:183
actionlib::ServerGoalHandle
mbf_abstract_nav::ActionServerRecoveryPtr
boost::shared_ptr< ActionServerRecovery > ActionServerRecoveryPtr
Definition: abstract_navigation_server.h:91
mbf_abstract_nav::ActionServerExePath
actionlib::ActionServer< mbf_msgs::ExePathAction > ActionServerExePath
ExePath action server.
Definition: abstract_navigation_server.h:86
mbf_abstract_nav::ActionServerRecovery
actionlib::ActionServer< mbf_msgs::RecoveryAction > ActionServerRecovery
Recovery action server.
Definition: abstract_navigation_server.h:90
ROS_DEBUG_STREAM_NAMED
#define ROS_DEBUG_STREAM_NAMED(name, args)
mbf_abstract_nav::AbstractNavigationServer::recovery_plugin_manager_
AbstractPluginManager< mbf_abstract_core::AbstractRecovery > recovery_plugin_manager_
Definition: abstract_navigation_server.h:301
mbf_abstract_nav::AbstractNavigationServer::callActionRecovery
virtual void callActionRecovery(ActionServerRecovery::GoalHandle goal_handle)
Recovery action execution method. This method will be called if the action server receives a goal.
Definition: abstract_navigation_server.cpp:241
mbf_abstract_nav::AbstractNavigationServer::initializeServerComponents
virtual void initializeServerComponents()
initializes all server components. Initializing the plugins of the Planner, the Controller,...
Definition: abstract_navigation_server.cpp:112
mbf_abstract_nav::AbstractNavigationServer::action_server_get_path_ptr_
ActionServerGetPathPtr action_server_get_path_ptr_
shared pointer to the GetPath action server
Definition: abstract_navigation_server.h:310
mbf_abstract_nav::AbstractNavigationServer
The AbstractNavigationServer is the abstract base class for all navigation servers in move_base_flex ...
Definition: abstract_navigation_server.h:118
mbf_abstract_nav::ActionServerMoveBasePtr
boost::shared_ptr< ActionServerMoveBase > ActionServerMoveBasePtr
Definition: abstract_navigation_server.h:95
mbf_abstract_nav::AbstractNavigationServer::dsrv_
DynamicReconfigureServer dsrv_
dynamic reconfigure server
Definition: abstract_navigation_server.h:316
mbf_abstract_nav::AbstractNavigationServer::private_nh_
ros::NodeHandle private_nh_
Private node handle.
Definition: abstract_navigation_server.h:297
mbf_abstract_nav::AbstractNavigationServer::cancelActionGetPath
virtual void cancelActionGetPath(ActionServerGetPath::GoalHandle goal_handle)
Definition: abstract_navigation_server.cpp:177
mbf_abstract_nav::AbstractNavigationServer::newRecoveryExecution
virtual mbf_abstract_nav::AbstractRecoveryExecution::Ptr newRecoveryExecution(const std::string &plugin_name, const mbf_abstract_core::AbstractRecovery::Ptr &plugin_ptr)
Create a new abstract recovery behavior execution.
Definition: abstract_navigation_server.cpp:327
mbf_abstract_nav::name_action_exe_path
const std::string name_action_exe_path
ExePath action topic name.
Definition: abstract_navigation_server.h:98
mbf_abstract_nav::AbstractNavigationServer::cancelActionExePath
virtual void cancelActionExePath(ActionServerExePath::GoalHandle goal_handle)
Definition: abstract_navigation_server.cpp:235
boost
mbf_abstract_nav
Definition: abstract_controller_execution.h:58
actionlib::ServerGoalHandle::setRejected
void setRejected(const Result &result=Result(), const std::string &text=std::string(""))
mbf_abstract_nav::AbstractPluginManager::getLoadedNames
const std::vector< std::string > & getLoadedNames()
ros::NodeHandle::advertise
Publisher advertise(AdvertiseOptions &ops)
mbf_abstract_nav::AbstractNavigationServer::vel_pub_
ros::Publisher vel_pub_
cmd_vel publisher for all controller execution objects
Definition: abstract_navigation_server.h:343
mbf_abstract_nav::name_action_get_path
const std::string name_action_get_path
GetPath action topic name.
Definition: abstract_navigation_server.h:100
mbf_abstract_nav::AbstractNavigationServer::callActionGetPath
virtual void callActionGetPath(ActionServerGetPath::GoalHandle goal_handle)
GetPath action execution method. This method will be called if the action server receives a goal.
Definition: abstract_navigation_server.cpp:124
mbf_abstract_nav::AbstractNavigationServer::action_server_move_base_ptr_
ActionServerMoveBasePtr action_server_move_base_ptr_
shared pointer to the MoveBase action server
Definition: abstract_navigation_server.h:313
mbf_abstract_nav::AbstractNavigationServer::tf_listener_ptr_
const TFPtr tf_listener_ptr_
shared pointer to the common TransformListener
Definition: abstract_navigation_server.h:340
mbf_abstract_nav::AbstractNavigationServer::newPlannerExecution
virtual mbf_abstract_nav::AbstractPlannerExecution::Ptr newPlannerExecution(const std::string &plugin_name, const mbf_abstract_core::AbstractPlanner::Ptr &plugin_ptr)
Create a new abstract planner execution.
Definition: abstract_navigation_server.cpp:312
mbf_abstract_nav::ActionServerGetPath
actionlib::ActionServer< mbf_msgs::GetPathAction > ActionServerGetPath
GetPath action server.
Definition: abstract_navigation_server.h:82
ROS_FATAL_STREAM_NAMED
#define ROS_FATAL_STREAM_NAMED(name, args)
mbf_abstract_nav::AbstractNavigationServer::~AbstractNavigationServer
virtual ~AbstractNavigationServer()
Destructor.
Definition: abstract_navigation_server.cpp:119
mbf_abstract_nav::AbstractNavigationServer::reconfigure
virtual void reconfigure(mbf_abstract_nav::MoveBaseFlexConfig &config, uint32_t level)
Reconfiguration method called by dynamic reconfigure.
Definition: abstract_navigation_server.cpp:350
mbf_abstract_nav::AbstractNavigationServer::startActionServers
virtual void startActionServers()
starts all action server.
Definition: abstract_navigation_server.cpp:335
mbf_abstract_nav::AbstractNavigationServer::planner_action_
PlannerAction planner_action_
Definition: abstract_navigation_server.h:352
ROS_WARN_STREAM_NAMED
#define ROS_WARN_STREAM_NAMED(name, args)
mbf_abstract_nav::ControllerAction::start
void start(GoalHandle &goal_handle, typename AbstractControllerExecution::Ptr execution_ptr)
Start controller action. Override abstract action version to allow updating current plan without stop...
Definition: controller_action.cpp:53
mbf_abstract_nav::name_action_recovery
const std::string name_action_recovery
Recovery action topic name.
Definition: abstract_navigation_server.h:102
mbf_abstract_nav::AbstractPluginManager::hasPlugin
bool hasPlugin(const std::string &name)
mbf_abstract_nav::AbstractNavigationServer::controller_action_
ControllerAction controller_action_
Definition: abstract_navigation_server.h:351
std
mbf_abstract_nav::AbstractPluginManager::getType
std::string getType(const std::string &name)
mbf_abstract_nav::AbstractNavigationServer::action_server_recovery_ptr_
ActionServerRecoveryPtr action_server_recovery_ptr_
shared pointer to the Recovery action server
Definition: abstract_navigation_server.h:304
mbf_abstract_nav::ActionServerGetPathPtr
boost::shared_ptr< ActionServerGetPath > ActionServerGetPathPtr
Definition: abstract_navigation_server.h:83
mbf_abstract_nav::AbstractNavigationServer::setup_reconfigure_
bool setup_reconfigure_
true, if the dynamic reconfigure has been setup.
Definition: abstract_navigation_server.h:328
mbf_abstract_nav::MoveBaseAction::reconfigure
void reconfigure(mbf_abstract_nav::MoveBaseFlexConfig &config, uint32_t level)
Definition: move_base_action.cpp:75
mbf_abstract_nav::AbstractNavigationServer::controller_plugin_manager_
AbstractPluginManager< mbf_abstract_core::AbstractController > controller_plugin_manager_
Definition: abstract_navigation_server.h:300
mbf_abstract_nav::name_action_move_base
const std::string name_action_move_base
MoveBase action topic name.
Definition: abstract_navigation_server.h:104
ROS_INFO_STREAM_NAMED
#define ROS_INFO_STREAM_NAMED(name, args)
mbf_abstract_nav::AbstractNavigationServer::default_config_
mbf_abstract_nav::MoveBaseFlexConfig default_config_
the default parameter configuration save
Definition: abstract_navigation_server.h:325
mbf_abstract_nav::AbstractNavigationServer::cancelActionRecovery
virtual void cancelActionRecovery(ActionServerRecovery::GoalHandle goal_handle)
Definition: abstract_navigation_server.cpp:293
mbf_abstract_nav::ActionServerExePathPtr
boost::shared_ptr< ActionServerExePath > ActionServerExePathPtr
Definition: abstract_navigation_server.h:87
mbf_abstract_nav::AbstractNavigationServer::startDynamicReconfigureServer
virtual void startDynamicReconfigureServer()
Start a dynamic reconfigure server. This must be called only if the extending doesn't create its own.
Definition: abstract_navigation_server.cpp:343
param
T param(const std::string &param_name, const T &default_val)
mbf_abstract_nav::AbstractNavigationServer::AbstractNavigationServer
AbstractNavigationServer(const TFPtr &tf_listener_ptr)
Constructor, reads all parameters and initializes all action servers and creates the plugin instances...
Definition: abstract_navigation_server.cpp:48
mbf_abstract_nav::AbstractPluginManager::getPlugin
PluginType::Ptr getPlugin(const std::string &name)
mbf_abstract_nav::AbstractNavigationServer::goal_pub_
ros::Publisher goal_pub_
current_goal publisher for all controller execution objects
Definition: abstract_navigation_server.h:346
mbf_abstract_nav::ActionServerMoveBase
actionlib::ActionServer< mbf_msgs::MoveBaseAction > ActionServerMoveBase
MoveBase action server.
Definition: abstract_navigation_server.h:94
mbf_abstract_nav::AbstractNavigationServer::stop
virtual void stop()
Definition: abstract_navigation_server.cpp:376
abstract_navigation_server.h
mbf_abstract_nav::MoveBaseAction::cancel
void cancel()
Definition: move_base_action.cpp:87
mbf_abstract_nav::AbstractNavigationServer::cancelActionMoveBase
virtual void cancelActionMoveBase(ActionServerMoveBase::GoalHandle goal_handle)
Definition: abstract_navigation_server.cpp:305
ros::NodeHandle
mbf_abstract_nav::AbstractNavigationServer::newControllerExecution
virtual mbf_abstract_nav::AbstractControllerExecution::Ptr newControllerExecution(const std::string &plugin_name, const mbf_abstract_core::AbstractController::Ptr &plugin_ptr)
Create a new abstract controller execution.
Definition: abstract_navigation_server.cpp:319


mbf_abstract_nav
Author(s): Sebastian Pütz
autogenerated on Wed Mar 2 2022 00:33:47