Autonomous Motion Planning: Comparing A* Grid Search with Continuous RRT
When developing autonomous delivery rovers, drones, or automated logistics carts for Kone Warp, navigation is divided into two primary tiers:
- Global Planning: Finding the shortest collision-free topological path across known city streets or warehouse maps.
- Local Motion Planning: Steering safely through continuous space around dynamic obstacles (pedestrians, vehicles, unexpected roadblocks) while adhering to non-holonomic vehicle kinematics.
Two foundational algorithmic families dominate this domain: Discrete Heuristic Search () and Sampling-Based Motion Planning (RRT).
1. Discrete Heuristic Search: and Jump Point Search
evaluates nodes on a discretized graph (such as a 2D occupancy grid) using the cost evaluation function:
Where:
- is the exact cost from the start node to node .
- is an admissible heuristic (e.g., Euclidean or Manhattan distance) that never overestimates the true remaining cost to the goal.
Strengths of :
- Resolution Completeness: If a path exists on the discretized grid, is mathematically guaranteed to find it.
- Optimality: It discovers the lowest-cost path with respect to the heuristic.
Limitations of :
- The Curse of Dimensionality: A 2D grid with cells has states. A 6-DOF robotic manipulator discretized at 100 steps per joint explodes to states—making grid search computationally intractable.
- Kinematic Infeasibility: produces jagged, piecewise-linear paths that physical vehicles with minimum turning radii (Ackermann steering) cannot execute smoothly without post-processing spline smoothing.
2. Sampling-Based Planning: RRT and RRT*
Instead of discretizing space into uniform grids, Rapidly-exploring Random Trees (RRT) (LaValle, 1998) sample points randomly from the continuous configuration space :
- Sample a random configuration .
- Find the nearest existing tree node .
- Extend a new node from toward by a fixed step size .
- Check collision validity along the trajectory segment. If clear, add and the edge to the tree.
- Repeat until is within reach of the goal .
import random
import math
class RRTPlanner:
def __init__(self, start, goal, obstacles, step_size=5.0):
self.start = start
self.goal = goal
self.obstacles = obstacles # List of (x, y, radius)
self.step_size = step_size
self.tree = [start]
self.parents = {start: None}
def plan(self, max_iters=5000):
for _ in range(max_iters):
# Goal biasing: 10% chance to sample exact goal directly
q_rand = self.goal if random.random() < 0.1 else (random.uniform(0, 100), random.uniform(0, 100))
# Find nearest node in tree
q_near = min(self.tree, key=lambda n: math.dist(n, q_rand))
# Step toward sample
angle = math.atan2(q_rand[1] - q_near[1], q_rand[0] - q_near[0])
q_new = (q_near[0] + self.step_size * math.cos(angle),
q_near[1] + self.step_size * math.sin(angle))
if self.is_collision_free(q_near, q_new):
self.tree.append(q_new)
self.parents[q_new] = q_near
if math.dist(q_new, self.goal) <= self.step_size:
self.parents[self.goal] = q_new
return self.reconstruct_path(self.goal)
return None3. Head-to-Head Comparison
| Metric | Search | RRT / RRT* |
|---|---|---|
| Space Representation | Discretized Grid / Graph | Continuous Configuration Space |
| High Dimensions (D > 3) | Fails due to state space explosion | Excels; scales smoothly into high dimensions |
| Completeness | Resolution Complete | Probabilistically Complete |
| Optimality | Optimal for grid graph | RRT: Suboptimal; RRT*: Asymptotically Optimal |
| Kinodynamic Constraints | Hard to incorporate | Naturally supports differential equations in edge generation |
Applied Autonomous Engineering at Kone Warp
In the Kone Warp Autonomous Fleet curriculum, our engineers combine both paradigms: using hierarchical coarse or H3-hexagonal routing coupled with kinodynamic RRT for obstacle avoidance in our Geospatial Dispatch & Real-Time Logistics Track.