[Documentation] [TitleIndex] [WordIndex

sbpl_dynamic_env: demo_sbpl_dynamic_env | dynamic_obs_msgs | fake_tracking | lidar_tracking | parallel_move_base | sbpl_dynamic_env_global_planner | sbpl_dynamic_planner

Package Summary

A wrapper around sbpl_dynamic_planner which allows it to be used as a global planner for the navigation stack.


This package is a ROS wrapper around the sbpl_dynamic_planner that adheres to the nav_core::BaseGlobalPlanner interface specified in nav_core. This allows the planner to be used as the global planner for move_base or parallel_move_base. The planner will generate a path from the robot's current position to a desired goal pose (x,y,theta). Paths are generated by combining a series of "motion primitives" which are short, kinematically feasible motions, and "wait-in-place" operations. Planning is therefore done in x,y,theta,time dimensions, resulting in smooth time-parameterized paths. Taking robot orientation into account is especially important if the robot is not assumed to be circular or has nonholonomic constraints. In dynamic environments timing is very important which another reason why monitoring the time to turn is important. The planner includes the time dimension in a way that keeps the state space small (so it plans fast) while producing intelligent looking plans in the presence of moving obstacles such as ducking into a doorway to avoid an oncoming person and then proceeding after they have passed. The planner uses a modified version of ARA* (Anytime Repairing A*) in order to produce a sub-optimal plan quickly and improve toward being optimal as time allows. This is particularly important in dynamic environments.

Important: This planner's performance is highly dependent on the quality of the predicted dynamic obstacle trajectories! The basic tracker in this stack lidar_tracking is not robust especially once the robot is moving. Users are encouraged to provide better trackers which publish the appropriate dynamic_obs_msgs. In simulation, this stack provides fake_tracking which polls the simulator for the locations of other robots and works reasonably well.

Also while using move_base with this planner will run, it will not run the global planner regularly which is more important when the environment is changing quickly. Therefore, it is recommended that you use parallel_move_base which is a modified version of move_base where the global and local planners each run on at the same time in parallel. Each of them are run on their own user-specified frequency.

How to use

This global planner can be used with move_base simply by setting the "base_global_planner" parameter to "SBPLDynEnvGlobalPlanner". Additionally, at the very least the path to a motion primitive file must be specified shown below in the list of parameters. Also a node that publishes dynamic_obs_msgs is needed in order to plan with respect to moving obstacles.

Some launch files to run the planner in simulation are in the demo_sbpl_dynamic_env package. Also, there is a launch file in this package "launch/pr2_dynamic_planner.launch" which runs the planner on the PR2 robot and can be easily modified for other platforms. Note: the real robot launch file uses lidar_tracking to track and predict dynamic obstacle trajectories. This node is not robust!


Subscribed Topics

dynamic_obstacles (dynamic_obs_msgs/DynamicObstacles) move_base/status (actionlib_msgs/GoalStatusArray)

Published Topics

~/SBPLDynEnvGlobalPlanner/plan (nav_msgs/Path) visualization_marker_array (visualization_msgs/MarkerArray) move_base_simple/goal (geometry_msgs/PoseStamped)


~/SBPLDynEnvGlobalPlanner/allocated_time (double, default: 0.5) ~/SBPLDynEnvGlobalPlanner/initial_epsilon (double, default: 5.0) ~/SBPLDynEnvGlobalPlanner/decrease_epsilon (double, default: 1.0) ~/SBPLDynEnvGlobalPlanner/primitive_filename (string, default: "") ~/SBPLDynEnvGlobalPlanner/time_resolution (double, default: 0.001) ~/SBPLDynEnvGlobalPlanner/temporal_padding (double, default: 1.5) ~/SBPLDynEnvGlobalPlanner/nominalvel_mpersecs (double, default: 0.4) ~/SBPLDynEnvGlobalPlanner/timetoturn45degsinplace_secs (double, default: 0.6) ~/SBPLDynEnvGlobalPlanner/remove_dynObs_from_costmap (bool, default: true) ~/SBPLDynEnvGlobalPlanner/dyn_obs_pad_costmap_removal (double, default: 0.2)

Customizing your Motion Primitives

Please refer to the sbpl_dynamic_planner documentation for pre-made motion primitives for the PR2 (and other robots) as well as instructions on how to generate your own custom motions.

2020-01-25 13:09