ROS Answers: Open Source Q&A Forum - RSS feedhttps://answers.ros.org/questions/Open source question and answer forum written in Python and DjangoenROS Answers is licensed under Creative Commons Attribution 3.0Thu, 19 Oct 2017 11:34:34 -0500How does the teb_local_planner avoid collision with obstacles?https://answers.ros.org/question/273482/how-does-the-teb_local_planner-avoid-collision-with-obstacles/ Hi,
I got a question for experts for the teb_local_planner package.
I'am wondering how the teb_local_planner manages to avoid obstacles.
I've read all the papers about the approach so I know that it's about minimizing objective functions but still I don't understand the obstacle avoidance, because there's no kind of repulsive force applied on the band like it's done in for the eband_local_planner.
In the algorithm the first step after initialisation is to sample new configurations. How are these new ones sampled and does the sampling also take into account configurations that are not located on the global path?
Maybe the author of the package has an answer for me? I'm happy for answers!Thu, 19 Oct 2017 05:17:11 -0500https://answers.ros.org/question/273482/how-does-the-teb_local_planner-avoid-collision-with-obstacles/Answer by croesmann for <p>Hi,
I got a question for experts for the teb_local_planner package.
I'am wondering how the teb_local_planner manages to avoid obstacles.
I've read all the papers about the approach so I know that it's about minimizing objective functions but still I don't understand the obstacle avoidance, because there's no kind of repulsive force applied on the band like it's done in for the eband_local_planner.
In the algorithm the first step after initialisation is to sample new configurations. How are these new ones sampled and does the sampling also take into account configurations that are not located on the global path?
Maybe the author of the package has an answer for me? I'm happy for answers!</p>
https://answers.ros.org/question/273482/how-does-the-teb_local_planner-avoid-collision-with-obstacles/?answer=273524#post-id-273524Actually, there is a kind of repulsive force applied on the band.
The teb approach deforms the trajectory by solving an optimization problem rather than applying forces directly.
There is not much difference, since the solver determines forces implicitly (e.g. gradient of the objective/cost function).
The objective function term for obstacle avoidance is just the penalization of the euclidean distance between the
obstacle and the robot. Note, obstacle shape and robot shape might differ from points with a much higher computational burden.
The optimization problem is defined and implemented in terms of a hyper-graph to speed up sparse Jacobian computation. You can find the corresponding Edge for obstacle avoidance in `edge_obstacle.h`.
The fundamental algorithm is as follows (you already mentioned the first steps in your question):
1. Initialize or update trajectory
2. Repeat for a number of iterations
1. If necessary, resize trajectory (similar to insertion and deletion of bubbles in the classical elastic band, but here based on the temporal domain.
2. Build graph (here you can find which poses are associated with which obstacles, there are two different strategies currently. Ideally, you would connect all obstacles with all poses each, but however, we want to speed up optimization).
3. Solve optimization problem defined by the previously created graph (stop after some iterations)
The repetition of resizing, obstacle association (in the graph building stage) and some actual optimization steps (3.)
leads to the overall band deformation.
Thu, 19 Oct 2017 11:34:34 -0500https://answers.ros.org/question/273482/how-does-the-teb_local_planner-avoid-collision-with-obstacles/?answer=273524#post-id-273524