This project focuses on developing an effective motion planning strategy using Kinodynamic Rapidly-exploring Random Trees (RRT) in environments cluttered with obstacles. The goal is to generate dynamically feasible, collision-free trajectories for a point robot navigating from a start point (A) to a goal point (B). Unlike traditional geometric planning, kinodynamic RRT also respects the robot's dynamic constraints, ensuring smooth and safe navigation.
- A point robot located at origin A must reach a goal B through a corridor-like environment.
- The robot’s state includes its position
q ∈ ℝ²and velocityq̇ ∈ ℝ², so statex = {q, q̇}. - The environment includes n obstacles (starting with
n = 1), which must be avoided. - Controls
u = (ux, uy) ∈ Uare applied to move the robot. - The state space
Xis divided into:- Collision-free states:
Xf - Obstacle states:
Xo
- Collision-free states:
The planning algorithm must build a feasible plan p(T) that, when executed, produces a valid trajectory τ(x0, p(T)) = {x0, ..., xT} avoiding all obstacles.
The motion planner constructs a tree by:
- Sampling random configurations.
- Finding the nearest neighbor in the tree.
- Sampling a control.
- Simulating the motion under the control.
- Adding the node to the tree if the path is valid.
- Checking if the goal has been reached.
Kinodynamic-RRT(X, U, x0, XG):
1. T ← {x0}
2. while termination condition not met:
3. x_rand ← SAMPLE-CONFIGURATION()
4. x_near ← NEAREST-NEIGHBOR(T, x_rand)
5. u ← SAMPLE-CONTROL()
6. x_new ← SIMULATE(x_near, u)
7. if (x_near → x_new) ∈ Xf:
8. EXTEND-TREE(T, x_near → x_new)
9. if GOAL-CHECK(x_new): return plan