The AbstractControllerExecution class loads and binds the controller plugin. It contains a thread running the plugin in a cycle to move the robot. An internal state is saved and will be pulled by server, to monitor controller execution. Due to a state change it wakes up all threads connected to the condition variable. More...
#include <abstract_controller_execution.h>

Public Types | |
| enum | ControllerState { INITIALIZED, STARTED, PLANNING, NO_PLAN, MAX_RETRIES, PAT_EXCEEDED, EMPTY_PLAN, INVALID_PLAN, NO_LOCAL_CMD, GOT_LOCAL_CMD, ARRIVED_GOAL, CANCELED, STOPPED, INTERNAL_ERROR } |
| Internal states. More... | |
| typedef boost::shared_ptr< AbstractControllerExecution > | Ptr |
Public Member Functions | |
| AbstractControllerExecution (const std::string &name, const mbf_abstract_core::AbstractController::Ptr &controller_ptr, const ros::Publisher &vel_pub, const ros::Publisher &goal_pub, const TFPtr &tf_listener_ptr, const MoveBaseFlexConfig &config) | |
| Constructor. More... | |
| virtual bool | cancel () |
| Cancel the controller execution. This calls the cancel method of the controller plugin, sets the cancel_ flag to true, and waits for the control loop to stop. Normally called upon aborting the navigation. More... | |
| ros::Time | getLastPluginCallTime () |
| Returns the time of the last plugin call. More... | |
| ControllerState | getState () |
| Return the current state of the controller execution. Thread communication safe. More... | |
| geometry_msgs::TwistStamped | getVelocityCmd () |
| Returns the last velocity command calculated by the plugin. Set by setVelocityCmd method. Note that it doesn't need to be a valid command sent to the robot, as we report also failed calls to the plugin on controller action feedback. More... | |
| bool | isMoving () |
| Returns whether the robot should normally move or not. True if the controller seems to work properly. More... | |
| bool | isPatienceExceeded () |
| Checks whether the patience duration time has been exceeded, ot not. More... | |
| void | reconfigure (const MoveBaseFlexConfig &config) |
| Is called by the server thread to reconfigure the controller execution, if a user uses dynamic reconfigure to reconfigure the current state. More... | |
| bool | setControllerFrequency (double frequency) |
| Sets the controller frequency. More... | |
| void | setNewPlan (const std::vector< geometry_msgs::PoseStamped > &plan, bool tolerance_from_action=false, double action_dist_tolerance=1.0, double action_angle_tolerance=3.1415) |
| Sets a new plan to the controller execution. More... | |
| virtual bool | start () |
| Starts the controller, a valid plan should be given in advance. More... | |
| virtual | ~AbstractControllerExecution () |
| Destructor. More... | |
Public Member Functions inherited from mbf_abstract_nav::AbstractExecutionBase | |
| AbstractExecutionBase (std::string name) | |
| std::string | getMessage () |
| Gets the current plugin execution message. More... | |
| std::string | getName () |
| Returns the name of the corresponding plugin. More... | |
| uint32_t | getOutcome () |
| Gets the current plugin execution outcome. More... | |
| void | join () |
| virtual void | postRun () |
| Optional implementation-specific cleanup function, called right after execution. More... | |
| virtual void | preRun () |
| Optional implementation-specific setup function, called right before execution. More... | |
| virtual void | stop () |
| boost::cv_status | waitForStateUpdate (boost::chrono::microseconds const &duration) |
Static Public Attributes | |
| static const double | DEFAULT_CONTROLLER_FREQUENCY = 100.0 |
Protected Member Functions | |
| virtual uint32_t | computeVelocityCmd (const geometry_msgs::PoseStamped &pose, const geometry_msgs::TwistStamped &velocity, geometry_msgs::TwistStamped &vel_cmd, std::string &message) |
| Request plugin for a new velocity command, given the current position, orientation, and velocity of the robot. We use this virtual method to give concrete implementations as move_base the chance to override it and do additional stuff, for example locking the costmap. More... | |
| virtual void | run () |
| The main run method, a thread will execute this method. It contains the main controller execution loop. More... | |
| virtual bool | safetyCheck () |
| Check if its safe to drive. This method gets called at every controller cycle, stopping the robot if its not. When overridden by child class, gives a chance to the specific execution implementation to stop the robot if it detects something wrong on the underlying map. More... | |
| void | setVelocityCmd (const geometry_msgs::TwistStamped &vel_cmd_stamped) |
| Sets the velocity command, to make it available for another thread. More... | |
Protected Attributes | |
| mbf_abstract_core::AbstractController::Ptr | controller_ |
| the local planer to calculate the velocity command More... | |
| ros::Time | last_call_time_ |
| The current cycle start time of the last cycle run. Will by updated each cycle. More... | |
| ros::Time | last_valid_cmd_time_ |
| The time the controller responded with a success output (output < 10). More... | |
| int | max_retries_ |
| The maximum number of retries. More... | |
| ros::Duration | patience_ |
| The time / duration of patience, before changing the state. More... | |
| std::string | plugin_name_ |
| the name of the loaded plugin More... | |
| ros::Time | start_time_ |
| The time the controller has been started. More... | |
| const TFPtr & | tf_listener_ptr |
| shared pointer to the shared tf listener More... | |
Protected Attributes inherited from mbf_abstract_nav::AbstractExecutionBase | |
| bool | cancel_ |
| flag for canceling controlling More... | |
| boost::condition_variable | condition_ |
| condition variable to wake up control thread More... | |
| std::string | message_ |
| the last received plugin execution message More... | |
| std::string | name_ |
| the plugin name; not the plugin type! More... | |
| uint32_t | outcome_ |
| the last received plugin execution outcome More... | |
| boost::thread | thread_ |
| the controlling thread object More... | |
Private Member Functions | |
| bool | computeRobotPose () |
| Computes the robot pose;. More... | |
| std::vector< geometry_msgs::PoseStamped > | getNewPlan () |
| Gets the new available plan. This method is thread safe. More... | |
| bool | hasNewPlan () |
| Returns true if a new plan is available, false otherwise! A new plan is set by another thread! More... | |
| void | publishZeroVelocity () |
| Publishes a velocity command with zero values to stop the robot. More... | |
| bool | reachedGoalCheck () |
| Checks whether the goal has been reached in the range of tolerance or not. More... | |
| void | setState (ControllerState state) |
| Sets the controller state. This method makes the communication of the state thread safe. More... | |
Private Attributes | |
| double | action_angle_tolerance_ |
| replaces parameter angle_tolerance_ for the action More... | |
| double | action_dist_tolerance_ |
| replaces parameter dist_tolerance_ for the action More... | |
| double | angle_tolerance_ |
| angle tolerance to the given goal pose More... | |
| boost::chrono::microseconds | calling_duration_ |
| the duration which corresponds with the controller frequency. More... | |
| boost::mutex | configuration_mutex_ |
| dynamic reconfigure config mutex, thread safe param reading and writing More... | |
| ros::Publisher | current_goal_pub_ |
| publisher for the current goal More... | |
| double | dist_tolerance_ |
| distance tolerance to the given goal pose More... | |
| bool | force_stop_at_goal_ |
| whether move base flex should force the robot to stop once the goal is reached. More... | |
| bool | force_stop_on_cancel_ |
| whether move base flex should force the robot to stop on canceling navigation. More... | |
| std::string | global_frame_ |
| the global frame the robot is controlling in. More... | |
| boost::mutex | lct_mtx_ |
| mutex to handle safe thread communication for the last plugin call time More... | |
| bool | mbf_tolerance_check_ |
| whether move base flex should check for the goal tolerance or not. More... | |
| bool | moving_ |
| main controller loop variable, true if the controller is running, false otherwise More... | |
| bool | new_plan_ |
| true, if a new plan is available. See hasNewPlan()! More... | |
| std::vector< geometry_msgs::PoseStamped > | plan_ |
| the last set plan which is currently processed by the controller More... | |
| boost::mutex | plan_mtx_ |
| mutex to handle safe thread communication for the current plan More... | |
| std::string | robot_frame_ |
| the frame of the robot, which will be used to determine its position. More... | |
| geometry_msgs::PoseStamped | robot_pose_ |
| current robot pose; More... | |
| AbstractControllerExecution::ControllerState | state_ |
| the current controller state More... | |
| boost::mutex | state_mtx_ |
| mutex to handle safe thread communication for the current value of the state More... | |
| double | tf_timeout_ |
| time before a timeout used for tf requests More... | |
| bool | tolerance_from_action_ |
| whether check for action specific tolerance More... | |
| boost::mutex | vel_cmd_mtx_ |
| mutex to handle safe thread communication for the current velocity command More... | |
| geometry_msgs::TwistStamped | vel_cmd_stamped_ |
| the last calculated velocity command More... | |
| ros::Publisher | vel_pub_ |
| publisher for the current velocity command More... | |
The AbstractControllerExecution class loads and binds the controller plugin. It contains a thread running the plugin in a cycle to move the robot. An internal state is saved and will be pulled by server, to monitor controller execution. Due to a state change it wakes up all threads connected to the condition variable.
Definition at line 75 of file abstract_controller_execution.h.
| typedef boost::shared_ptr<AbstractControllerExecution > mbf_abstract_nav::AbstractControllerExecution::Ptr |
Definition at line 81 of file abstract_controller_execution.h.
Internal states.
Definition at line 132 of file abstract_controller_execution.h.
| mbf_abstract_nav::AbstractControllerExecution::AbstractControllerExecution | ( | const std::string & | name, |
| const mbf_abstract_core::AbstractController::Ptr & | controller_ptr, | ||
| const ros::Publisher & | vel_pub, | ||
| const ros::Publisher & | goal_pub, | ||
| const TFPtr & | tf_listener_ptr, | ||
| const MoveBaseFlexConfig & | config | ||
| ) |
Constructor.
| condition | Thread sleep condition variable, to wake up connected threads |
| controller_plugin_type | The plugin type associated with the plugin to load |
| tf_listener_ptr | Shared pointer to a common tf listener |
Definition at line 50 of file abstract_controller_execution.cpp.
|
virtual |
Destructor.
Definition at line 79 of file abstract_controller_execution.cpp.
|
virtual |
Cancel the controller execution. This calls the cancel method of the controller plugin, sets the cancel_ flag to true, and waits for the control loop to stop. Normally called upon aborting the navigation.
Implements mbf_abstract_nav::AbstractExecutionBase.
Definition at line 261 of file abstract_controller_execution.cpp.
|
private |
Computes the robot pose;.
Definition at line 170 of file abstract_controller_execution.cpp.
|
protectedvirtual |
Request plugin for a new velocity command, given the current position, orientation, and velocity of the robot. We use this virtual method to give concrete implementations as move_base the chance to override it and do additional stuff, for example locking the costmap.
| pose | the current pose of the robot. |
| velocity | the current velocity of the robot. |
| cmd_vel | Will be filled with the velocity command to be passed to the robot base. |
| message | Optional more detailed outcome as a string. |
Definition at line 185 of file abstract_controller_execution.cpp.
| ros::Time mbf_abstract_nav::AbstractControllerExecution::getLastPluginCallTime | ( | ) |
Returns the time of the last plugin call.
Definition at line 213 of file abstract_controller_execution.cpp.
|
private |
Gets the new available plan. This method is thread safe.
Definition at line 162 of file abstract_controller_execution.cpp.
| AbstractControllerExecution::ControllerState mbf_abstract_nav::AbstractControllerExecution::getState | ( | ) |
Return the current state of the controller execution. Thread communication safe.
Definition at line 128 of file abstract_controller_execution.cpp.
| geometry_msgs::TwistStamped mbf_abstract_nav::AbstractControllerExecution::getVelocityCmd | ( | ) |
Returns the last velocity command calculated by the plugin. Set by setVelocityCmd method. Note that it doesn't need to be a valid command sent to the robot, as we report also failed calls to the plugin on controller action feedback.
Definition at line 206 of file abstract_controller_execution.cpp.
|
private |
Returns true if a new plan is available, false otherwise! A new plan is set by another thread!
Definition at line 155 of file abstract_controller_execution.cpp.
| bool mbf_abstract_nav::AbstractControllerExecution::isMoving | ( | ) |
Returns whether the robot should normally move or not. True if the controller seems to work properly.
Definition at line 240 of file abstract_controller_execution.cpp.
| bool mbf_abstract_nav::AbstractControllerExecution::isPatienceExceeded | ( | ) |
Checks whether the patience duration time has been exceeded, ot not.
Definition at line 220 of file abstract_controller_execution.cpp.
|
private |
Publishes a velocity command with zero values to stop the robot.
Definition at line 463 of file abstract_controller_execution.cpp.
|
private |
Checks whether the goal has been reached in the range of tolerance or not.
Definition at line 245 of file abstract_controller_execution.cpp.
| void mbf_abstract_nav::AbstractControllerExecution::reconfigure | ( | const MoveBaseFlexConfig & | config | ) |
Is called by the server thread to reconfigure the controller execution, if a user uses dynamic reconfigure to reconfigure the current state.
| config | MoveBaseFlexConfig object |
Definition at line 95 of file abstract_controller_execution.cpp.
|
protectedvirtual |
The main run method, a thread will execute this method. It contains the main controller execution loop.
Implements mbf_abstract_nav::AbstractExecutionBase.
Definition at line 280 of file abstract_controller_execution.cpp.
|
inlineprotectedvirtual |
Check if its safe to drive. This method gets called at every controller cycle, stopping the robot if its not. When overridden by child class, gives a chance to the specific execution implementation to stop the robot if it detects something wrong on the underlying map.
Definition at line 254 of file abstract_controller_execution.h.
| bool mbf_abstract_nav::AbstractControllerExecution::setControllerFrequency | ( | double | frequency | ) |
Sets the controller frequency.
| frequency | The controller frequency |
Definition at line 83 of file abstract_controller_execution.cpp.
| void mbf_abstract_nav::AbstractControllerExecution::setNewPlan | ( | const std::vector< geometry_msgs::PoseStamped > & | plan, |
| bool | tolerance_from_action = false, |
||
| double | action_dist_tolerance = 1.0, |
||
| double | action_angle_tolerance = 3.1415 |
||
| ) |
Sets a new plan to the controller execution.
| plan | A vector of stamped poses. |
| tolerance_from_action | flag that will be set to true when the new plan (action) has tolerance |
| action_dist_tolerance | distance to goal tolerance specific for this new plan (action) |
| action_angle_tolerance | angle to goal tolerance specific for this new plan (action) |
Definition at line 134 of file abstract_controller_execution.cpp.
|
private |
Sets the controller state. This method makes the communication of the state thread safe.
| state | The current controller state. |
Definition at line 120 of file abstract_controller_execution.cpp.
|
protected |
Sets the velocity command, to make it available for another thread.
| vel_cmd_stamped | current velocity command |
Definition at line 194 of file abstract_controller_execution.cpp.
|
virtual |
Starts the controller, a valid plan should be given in advance.
Reimplemented from mbf_abstract_nav::AbstractExecutionBase.
Definition at line 108 of file abstract_controller_execution.cpp.
|
private |
replaces parameter angle_tolerance_ for the action
Definition at line 367 of file abstract_controller_execution.h.
|
private |
replaces parameter dist_tolerance_ for the action
Definition at line 364 of file abstract_controller_execution.h.
|
private |
angle tolerance to the given goal pose
Definition at line 355 of file abstract_controller_execution.h.
|
private |
the duration which corresponds with the controller frequency.
Definition at line 316 of file abstract_controller_execution.h.
|
private |
dynamic reconfigure config mutex, thread safe param reading and writing
Definition at line 337 of file abstract_controller_execution.h.
|
protected |
the local planer to calculate the velocity command
Definition at line 222 of file abstract_controller_execution.h.
|
private |
publisher for the current goal
Definition at line 328 of file abstract_controller_execution.h.
|
static |
Definition at line 79 of file abstract_controller_execution.h.
|
private |
distance tolerance to the given goal pose
Definition at line 352 of file abstract_controller_execution.h.
|
private |
whether move base flex should force the robot to stop once the goal is reached.
Definition at line 346 of file abstract_controller_execution.h.
|
private |
whether move base flex should force the robot to stop on canceling navigation.
Definition at line 349 of file abstract_controller_execution.h.
|
private |
the global frame the robot is controlling in.
Definition at line 322 of file abstract_controller_execution.h.
|
protected |
The current cycle start time of the last cycle run. Will by updated each cycle.
Definition at line 228 of file abstract_controller_execution.h.
|
protected |
The time the controller responded with a success output (output < 10).
Definition at line 234 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the last plugin call time
Definition at line 292 of file abstract_controller_execution.h.
|
protected |
The maximum number of retries.
Definition at line 237 of file abstract_controller_execution.h.
|
private |
whether move base flex should check for the goal tolerance or not.
Definition at line 343 of file abstract_controller_execution.h.
|
private |
main controller loop variable, true if the controller is running, false otherwise
Definition at line 340 of file abstract_controller_execution.h.
|
private |
true, if a new plan is available. See hasNewPlan()!
Definition at line 295 of file abstract_controller_execution.h.
|
protected |
The time / duration of patience, before changing the state.
Definition at line 240 of file abstract_controller_execution.h.
|
private |
the last set plan which is currently processed by the controller
Definition at line 313 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current plan
Definition at line 286 of file abstract_controller_execution.h.
|
protected |
the name of the loaded plugin
Definition at line 219 of file abstract_controller_execution.h.
|
private |
the frame of the robot, which will be used to determine its position.
Definition at line 319 of file abstract_controller_execution.h.
|
private |
current robot pose;
Definition at line 358 of file abstract_controller_execution.h.
|
protected |
The time the controller has been started.
Definition at line 231 of file abstract_controller_execution.h.
|
private |
the current controller state
Definition at line 331 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current value of the state
Definition at line 283 of file abstract_controller_execution.h.
|
protected |
shared pointer to the shared tf listener
Definition at line 225 of file abstract_controller_execution.h.
|
private |
time before a timeout used for tf requests
Definition at line 334 of file abstract_controller_execution.h.
|
private |
whether check for action specific tolerance
Definition at line 361 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current velocity command
Definition at line 289 of file abstract_controller_execution.h.
|
private |
the last calculated velocity command
Definition at line 310 of file abstract_controller_execution.h.
|
private |
publisher for the current velocity command
Definition at line 325 of file abstract_controller_execution.h.