Rapidly exploring random tree
Part of a series on |
Probabilistic data structures |
---|
Random trees |
Related |
A Rapidly-exploring Random Tree (RRT) is an algorithm designed to efficiently search nonconvex, high-dimensional state spaces by building a tree. The tree is constructed by drawing random samples from the state space and attempting to connect them to the nearest state in the tree. The length of this connection is capped by a user-tuned parameter, resulting in a tree that is biased to incrementally grow towards large unsearched space. RRTs were developed by Steven M. LaValle and James Kuffner[1][2] and have been widely used in autonomous robotic path planning.
Introduction
RRTs are constructed incrementally in a way that quickly reduces the expected distance of a randomly chosen point to the tree. RRTs are particularly suited for path planning problems that involve obstacles and differential constraints (nonholonomic or kinodynamic). RRTs can be considered as a technique for generating open-loop trajectories for nonlinear systems with state constraints. An RRT can be intuitively considered as a Monte-Carlo way of biasing search into largest Voronoi regions. Some variations can be considered as stochastic fractals. Usually, an RRT alone is insufficient to solve a planning problem. Thus, it can be considered as a component that can be incorporated into the development of a variety of different planning algorithms.[3]
Algorithm
For a general configuration space C, the algorithm in pseudocode is as follows:
Algorithm BuildRRT Input: Initial configuration qinit, number of vertices in RRT K, incremental distance Δq) Output: RRT graph G G.init(qinit) for k = 1 to K qrand ← RAND_CONF() qnear ← NEAREST_VERTEX(qrand, G) qnew ← NEW_CONF(qnear, Δq) G.add_vertex(qnew) G.add_edge(qnear, qnew) return G
- "←" denotes assignment. For instance, "largest ← item" means that the value of largest changes to the value of item.
- "return" terminates the algorithm and outputs the following value.
In the algorithm above, "RAND_CONF" grabs a random configuration qrand in C. This may be replaced with a function "RAND_FREE_CONF" that uses samples in Cfree, while rejecting those in Cobs using some collision detection algorithm.
"NEAREST_VERTEX" is a straightforward function that runs through all vertexes v in graph G, calculates the distance between qrand and v using some measurement function thereby returning the nearest vertex.
"NEW_CONF" selects a new configuration qnew by moving an incremental distance Δq from qnear in the direction of qrand. (According to [4] in holonomic problems, this should be omitted and qrand used instead of qnew.)
Visualization
See also
References
- ^ Lavalle, S.M. (1998). "Rapidly-exploring random trees: A new tool for path planning". Computer Science Dept, Iowa State University, Tech. Rep. TR: 98–11. Retrieved 2008-06-30.
- ^ LaValle, Steven M.; Kuffner, James J. (2001). "Randomized Kinodynamic Planning". The International Journal of Robotics Research (IJRR). 20 (5). doi:10.1177/02783640122067453.
- ^ http://msl.cs.uiuc.edu/rrt/about.html About RRTs, by Steve LaValle
- ^ Rapidly-Exploring Random Trees: Progress and Prospects (2000), by Steven M. Lavalle , James J. Kuffner , Jr. Algorithmic and Computational Robotics: New Directions, http://eprints.kfupm.edu.sa/60786/1/60786.pdf