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, boost::function< void()> setup_fn, boost::function< void()> cleanup_fn) | |
Constructor. More... | |
virtual bool | cancel () |
Cancel the planner execution. This calls the cancel method of the planner plugin. This could be useful if the computation takes too much time. 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) |
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, boost::function< void()> setup_fn, boost::function< void()> cleanup_fn) | |
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 | stop () |
void | 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... | |
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... | |
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 () |
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 | 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... | |
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... | |
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... | |
Additional Inherited Members | |
Public Attributes inherited from mbf_abstract_nav::AbstractExecutionBase | |
boost::function< void()> | cleanup_fn_ |
Implementation-specific cleanup function called right after execution; empty on abstract server. More... | |
boost::function< void()> | setup_fn_ |
Implementation-specific setup function called right before execution; empty on abstract server. 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 76 of file abstract_controller_execution.h.
typedef boost::shared_ptr<AbstractControllerExecution > mbf_abstract_nav::AbstractControllerExecution::Ptr |
Definition at line 82 of file abstract_controller_execution.h.
Internal states.
Definition at line 127 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, | ||
boost::function< void()> | setup_fn, | ||
boost::function< void()> | cleanup_fn | ||
) |
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 49 of file abstract_controller_execution.cpp.
|
virtual |
Destructor.
Definition at line 78 of file abstract_controller_execution.cpp.
|
virtual |
Cancel the planner execution. This calls the cancel method of the planner plugin. This could be useful if the computation takes too much time.
Implements mbf_abstract_nav::AbstractExecutionBase.
Definition at line 235 of file abstract_controller_execution.cpp.
|
private |
Computes the robot pose;.
Definition at line 162 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 180 of file abstract_controller_execution.cpp.
ros::Time mbf_abstract_nav::AbstractControllerExecution::getLastPluginCallTime | ( | ) |
Returns the time of the last plugin call.
Definition at line 208 of file abstract_controller_execution.cpp.
|
private |
Gets the new available plan. This method is thread safe.
Definition at line 154 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 127 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 201 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 147 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 222 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 215 of file abstract_controller_execution.cpp.
|
private |
publishes a velocity command with zero values to stop the robot.
Definition at line 409 of file abstract_controller_execution.cpp.
|
private |
Checks whether the goal has been reached in the range of tolerance or not.
Definition at line 227 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 94 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 249 of file abstract_controller_execution.cpp.
bool mbf_abstract_nav::AbstractControllerExecution::setControllerFrequency | ( | double | frequency | ) |
Sets the controller frequency.
frequency | The controller frequency |
Definition at line 82 of file abstract_controller_execution.cpp.
void mbf_abstract_nav::AbstractControllerExecution::setNewPlan | ( | const std::vector< geometry_msgs::PoseStamped > & | plan | ) |
Sets a new plan to the controller execution.
plan | A vector of stamped poses. |
Definition at line 133 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 119 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 189 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 107 of file abstract_controller_execution.cpp.
|
private |
angle tolerance to the given goal pose
Definition at line 332 of file abstract_controller_execution.h.
|
private |
the duration which corresponds with the controller frequency.
Definition at line 299 of file abstract_controller_execution.h.
|
private |
dynamic reconfigure config mutex, thread safe param reading and writing
Definition at line 320 of file abstract_controller_execution.h.
|
protected |
the local planer to calculate the velocity command
Definition at line 217 of file abstract_controller_execution.h.
|
private |
publisher for the current goal
Definition at line 311 of file abstract_controller_execution.h.
|
static |
Definition at line 80 of file abstract_controller_execution.h.
|
private |
distance tolerance to the given goal pose
Definition at line 329 of file abstract_controller_execution.h.
|
private |
the global frame the robot is controlling in.
Definition at line 305 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 223 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the last plugin call time
Definition at line 275 of file abstract_controller_execution.h.
|
protected |
The maximum number of retries.
Definition at line 229 of file abstract_controller_execution.h.
|
private |
whether move base flex should check for the goal tolerance or not.
Definition at line 326 of file abstract_controller_execution.h.
|
private |
main controller loop variable, true if the controller is running, false otherwise
Definition at line 323 of file abstract_controller_execution.h.
|
private |
true, if a new plan is available. See hasNewPlan()!
Definition at line 278 of file abstract_controller_execution.h.
|
protected |
The time / duration of patience, before changing the state.
Definition at line 232 of file abstract_controller_execution.h.
|
private |
the last set plan which is currently processed by the controller
Definition at line 296 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current plan
Definition at line 269 of file abstract_controller_execution.h.
|
protected |
the name of the loaded plugin
Definition at line 214 of file abstract_controller_execution.h.
|
private |
the frame of the robot, which will be used to determine its position.
Definition at line 302 of file abstract_controller_execution.h.
|
private |
current robot pose;
Definition at line 335 of file abstract_controller_execution.h.
|
protected |
The time the controller has been started.
Definition at line 226 of file abstract_controller_execution.h.
|
private |
the current controller state
Definition at line 314 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current value of the state
Definition at line 266 of file abstract_controller_execution.h.
|
protected |
shared pointer to the shared tf listener
Definition at line 220 of file abstract_controller_execution.h.
|
private |
time before a timeout used for tf requests
Definition at line 317 of file abstract_controller_execution.h.
|
private |
mutex to handle safe thread communication for the current velocity command
Definition at line 272 of file abstract_controller_execution.h.
|
private |
the last calculated velocity command
Definition at line 293 of file abstract_controller_execution.h.
|
private |
publisher for the current velocity command
Definition at line 308 of file abstract_controller_execution.h.