Wiki

  Show EOL distros: 

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Package Summary

The teb_local_planner package implements a plugin to the base_local_planner of the 2D navigation stack. The underlying method called Timed Elastic Band locally optimizes the robot's trajectory with respect to trajectory execution time, separation from obstacles and compliance with kinodynamic constraints at runtime.

Overview

Update: Two tutorials on planning with dynamic obstacles added (click here)

This package implements an online optimal local trajectory planner for navigation and control of mobile robots as a plugin for the ROS navigation package. The initial trajectory generated by a global planner is optimized during runtime w.r.t. minimizing the trajectory execution time (time-optimal objective), separation from obstacles and compliance with kinodynamic constraints such as satisfying maximum velocities and accelerations.

The current implementation complies with the kinematics of non-holonomic robots (differential drive and car-like robots). Support of holonomic robots is included since Kinetic.

The optimal trajectory is efficiently obtained by solving a sparse scalarized multi-objective optimization problem. The user can provide weights to the optimization problem in order to specify the behavior in case of conflicting objectives.

The approach called "Timed-Elastic-Band" is presented in:

Since local planners such as the Timed-Elastic-Band get often stuck in a locally optimal trajectory as they are unable to transit across obstacles, an extension is implemented. A subset of admissible trajectories of distinctive topologies is optimized in parallel. The local planner is able to switch to the current globally optimal trajectory among the candidate set. Distinctive topologies are obtained by utilizing the concept of homology / homotopy classes. The following papers are describing the approach

The extension to car-like robots is described in

Get started by completing the tutorials in the Tutorials section.

Use GitHub to report bugs or submit feature requests. [View active issues]

Video

The following video presents the features of the package and shows examples from simulation and real robot situations. Some spoken explanations are included in the audio track of the video.

Features introduced in version 0.2 are presented in the following video (supporting car-like robots and costmap conversion).

Node API

Topics

Published Topics

~<name>/global_plan (nav_msgs/Path) ~<name>/local_plan (nav_msgs/Path) ~<name>/teb_poses (geometry_msgs/PoseArray) ~<name>/teb_markers (visualization_msgs/Marker) ~<name>/teb_feedback (teb_local_planner/FeedbackMsg)

Subscribed Topics

~<name>/odom (nav_msgs/Odometry) ~<name>/obstacles (costmap_converter/ObstacleArrayMsg)

~<name>/via_points (nav_msgs/Path)

  • Provide custom via-points (you need to set ~<name>/global_plan_viapoint_sep to zero or negative)

Parameters

The teb_local_planner package allows the user to set Parameters in order to customize the behavior. These parameters are grouped into several categories: robot configuration, goal tolerance, trajectory configuration, obstacles, optimization, planning in distinctive topologies and miscellaneous parameters. Some of them are chosen to be compliant with the base_local_planner. Many (but not all) parameters can be modified at runtime using rqt_reconfigure.

Robot Configuration Parameters

~<name>/acc_lim_x (double, default: 0.5)

~<name>/acc_lim_theta (double, default: 0.5) ~<name>/max_vel_x (double, default: 0.4) ~<name>/max_vel_x_backwards (double, default: 0.2) ~<name>/max_vel_theta (double, default: 0.3)

The following parameters are relevant only for carlike robots:

~<name>/min_turning_radius (double, default: 0.0)

~<name>/wheelbase (double, default: 1.0) ~<name>/cmd_angle_instead_rotvel (bool, default: false)

The following parameters are relevant only for holonomic robots: New in ROS kinetic

Note, reduce ~<name>/weight_kinematics_nh significantly in order to adjust the tradeoff between compliant longitudinal motion and non-compliant lateral motion (strafing).

~<name>/max_vel_y (double, default: 0.0)

  • Maximum strafing velocity of the robot (should be zero for non-holonomic robots!)
~<name>/acc_lim_y (double, default: 0.5)
  • Maximum strafing acceleration of the robot

The following parameters are relevant for the footprint model used for optimization (see Tutorial Obstacle Avoidance and Robot Footprint Model). New in version 0.3

~<name>/footprint_model/type (string, default: "point")

~<name>/footprint_model/radius (double, default: 0.2) ~<name>/footprint_model/line_start (double[2], default: [-0.3, 0.0]) ~<name>/footprint_model/line_end (double[2], default: [0.3, 0.0]) ~<name>/footprint_model/front_offset (double, default: 0.2) ~<name>/footprint_model/front_radius (double, default: 0.2) ~<name>/footprint_model/rear_offset (double, default: 0.2) ~<name>/footprint_model/rear_radius (double, default: 0.2) ~<name>/footprint_model/vertices (double[], default: [ [0.25,-0.05], [...], ...]) ~<name>/is_footprint_dynamic (bool, default: false)

Goal Tolerance Parameters

~<name>/xy_goal_tolerance (double, default: 0.2)

~<name>/yaw_goal_tolerance (double, default: 0.2) ~<name>/free_goal_vel (bool, default: false)

Trajectory Configuration Parameters

~<name>/dt_ref (double, default: 0.3)

~<name>/dt_hysteresis (double, default: 0.1) ~<name>/min_samples (int, default: 3) ~<name>/global_plan_overwrite_orientation (bool, default: true) ~<name>/global_plan_viapoint_sep (double, default: -0.1 (disabled)) ~<name>/max_global_plan_lookahead_dist (double, default: 3.0) ~<name>/force_reinit_new_goal_dist (double, default: 1.0) ~<name>/feasibility_check_no_poses (int, default: 4) ~<name>/publish_feedback (bool, default: false) ~<name>/shrink_horizon_backup (bool, default: true)

~<name>/allow_init_with_backwards_motion (bool, default: false)

  • If true, underlying trajectories might be initialized with backwards motions in case the goal is behind the start within the local costmap (this is only recommended if the robot is equipped with rear sensors).
~<name>/exact_arc_length (bool, default: false)
  • If true, the planner uses the exact arc length in velocity, acceleration and turning rate computations (-> increased cpu time), otherwise the Euclidean approximation is used.
~<name>/shrink_horizon_min_duration (double, default: 10.0)
  • Specify minimum duration for the reduced horizon in case an infeasible trajectory is detected (refer to parameter shrink_horizon_backup in order to activate the reduced horizon mode).

Obstacle Parameters

~<name>/min_obstacle_dist (double, default: 0.5)

~<name>/include_costmap_obstacles (bool, default: true) ~<name>/costmap_obstacles_behind_robot_dist (double, default: 1.0) ~<name>/obstacle_poses_affected (int, default: 30) ~<name>/inflation_dist (double, default: pre kinetic: 0.0, kinetic+: 0.6)

~<name>/include_dynamic_obstacles (bool, default: false)

  • If this parameter is set to true, the motion of obstacles with non-zero velocity (provided via user-supplied obstacles on topic ~/obstacles or obtained from the costmap_converter) is predicted and considered during optimization via a constant velocity model. New
~<name>/legacy_obstacle_association (bool, default: false)
  • The strategy of connecting trajectory poses with obstacles for optimization has been modified (see changelog). You can switch to the old/previous strategy by setting this parameter to true. Old strategy: for each obstacle, find the nearest TEB pose; new strategy: for each teb pose, find only "relevant" obstacles.
~<name>/obstacle_association_force_inclusion_factor (double, default: 1.5)
  • The non-legacy obstacle association strategy tries to connect only relevant obstacles with the discretized trajectory during optimization. But all obstacles within a specifed distance are forced to be included (as a multiple of min_obstacle_dist). E.g. choose 2.0 in order toenforce the consideration obstacles within a radius of 2.0*min_obstacle_dist. [This parameter is used only if parameter legacy_obstacle_association is false]
~<name>/obstacle_association_cutoff_factor (double, default: 5)
  • See obstacle_association_force_inclusion_factor, but beyond a multiple of [value]*min_obstacle_dist all obstacles are ignored during optimization. Parameter obstacle_association_force_inclusion_factor is processed first. [This parameter is used only if parameter legacy_obstacle_association is false]

The following parameters are relevant only if costmap_converter plugins are desired (see tutorial):

~<name>/costmap_converter_plugin (string, default: "")

~<name>/costmap_converter_spin_thread (bool, default: true) ~<name>/costmap_converter_rate (double, default: 5.0)

Optimization Parameters

~<name>/no_inner_iterations (int, default: 5)

~<name>/no_outer_iterations (int, default: 4) ~<name>/penalty_epsilon (double, default: 0.1) ~<name>/weight_max_vel_x (double, default: 2.0) ~<name>/weight_max_vel_theta (double, default: 1.0) ~<name>/weight_acc_lim_x (double, default: 1.0) ~<name>/weight_acc_lim_theta (double, default: 1.0) ~<name>/weight_kinematics_nh (double, default: 1000.0) ~<name>/weight_kinematics_forward_drive (double, default: 1.0) ~<name>/weight_kinematics_turning_radius (double, default: 1.0) ~<name>/weight_optimaltime (double, default: 1.0) ~<name>/weight_obstacle (double, default: 50.0) ~<name>/weight_viapoint (double, default: 1.0) ~<name>/weight_inflation (double, default: 0.1)

~<name>/weight_adapt_factor (double, default: 2.0)

  • Some special weights (currently weight_obstacle) are repeatedly scaled by this factor in each outer TEB iteration (weight_new = weight_old*factor). Increasing weights iteratively instead of setting a huge value a-priori leads to better numerical conditions of the underlying optimization problem.

Parallel Planning in distinctive Topologies

~<name>/enable_homotopy_class_planning (bool, default: true)

~<name>/enable_multithreading (bool, default: true) ~<name>/max_number_classes (int, default: 4) ~<name>/selection_cost_hysteresis (double, default: 1.0) ~<name>/selection_obst_cost_scale (double, default: 100.0) ~<name>/selection_viapoint_cost_scale (double, default: 1.0) ~<name>/selection_alternative_time_cost (bool, default: false) ~<name>/roadmap_graph_no_samples (int, default: 15) ~<name>/roadmap_graph_area_width (double, default: 6) ~<name>/h_signature_prescaler (double, default: 1.0) ~<name>/h_signature_threshold (double, default: 0.1) ~<name>/obstacle_heading_threshold (double, default: 1.0) ~<name>/visualize_hc_graph (bool, default: false) ~<name>/viapoints_all_candidates (bool, default: true)

~<name>/switching_blocking_period (double, default: 0.0)

  • Specify a time duration in seconds that needs to be expired before a switch to a new equivalence class is allowed.

Miscellaneous Parameters

~<name>/odom_topic (string, default: "odom")

~<name>/map_frame (string, default: "odom")

Roadmap

Some features and improvements that are currently planned for the future. Contributions are welcome!

Wiki: teb_local_planner (last edited 2020-03-11 14:29:59 by ChristophRoesmann)