This repository is a portfolio version of my graduate-level coursework for RBE 550: Motion Planning. The projects move from introductory OMPL exercises through collision checking, sampling-based planning, optimal planning, kinodynamic planning, and planner benchmarking.
| Project | Short Description | Main Artifacts |
|---|---|---|
| Project 0 | Introductory OMPL and Genesis exercises covering 2D map planning, optimal planning, state sampling, and a simple Franka pick demo. | C++/Python code, OMPL examples, report PDF. |
| Project 1 | Configuration-space sampling on a disk, comparing naive polar sampling against correct area-uniform sampling. | Custom OMPL sampler, GraphML/PNG visualizations, report PDF. |
| Project 2 | Collision checking and custom planning for point and square robots in rectangular environments. | RTP planner, collision-checking library, visualizer, benchmark helper, report PDF. |
| Project 3 | Planning for a compound chain-box robot with narrow passages, custom validity checking, PRM sampler comparisons, and clearance optimization. | OMPL compound state space, planner benchmarks, path visualizations, report PDF. |
| Project 4 | Kinodynamic planning for car and pendulum systems, comparing KPIECE, SST, EST/RRT, and AO-RRT-style planning. | Control planners, benchmark code, trajectory images, GIF animations. |
Each project folder has its own README with build/run notes and a pointer to the most relevant files.
The C++ code uses OMPL and CMake. The Python helper scripts are managed with
uv from the repository root.
On Ubuntu-like systems, install a compiler toolchain, CMake, and optional GIF support:
sudo apt update
sudo apt install build-essential cmake git pkg-config imagemagickInstall OMPL separately through your system package manager, source build, or a
course-provided install. The CMake projects expect find_package(ompl REQUIRED)
to work.
Install uv if needed:
curl -LsSf https://astral.sh/uv/install.sh | shCreate the Python environment for plotting and utility scripts:
uv syncRun Python helpers through uv run, for example:
uv run python project1/code/code/visualize.py \
project1/code/code/naive_samples.graphml \
project1/code/code/correct_samples.graphmlThe Python OMPL examples need OMPL Python bindings. If you have a matching wheel, install it into the uv environment:
uv pip install /path/to/ompl-*.whlThe Genesis simulator demo in Project 0 is optional and heavier:
uv sync --extra simUse the repository task runner to build and run the C++ projects from the root:
uv run python tools/rbe550.py list
uv run python tools/rbe550.py build project1
uv run python tools/rbe550.py run project1Build every CMake project:
uv run python tools/rbe550.py build allCommon targets:
project0- build both Project 0 C++ demos.project0-ompl- run the Project 0 image-map planner.project0-spacetime- run the Project 0 space-time planner.project1- run the disk sampling demo.project2- run point/square robot RTP planning.project2-benchmark- run the kinematic-chain benchmark.project3- run the chain-box planner.project4- build Project 4 car and pendulum executables.project4-car- run the car planner.project4-pendulum- run the pendulum planner.
uv is acting as the project/task manager here. CMake still performs the C++
configure/build step, and OMPL still needs to be available to CMake.
Most project code follows this pattern:
cd project1/code/code
cmake -S . -B build
cmake --build build
./build/diskPlanningUse the same CMake pattern inside the C++ code folders listed in each project README.
Generated build products, virtual environments, OMPL wheels, zip submissions, LaTeX auxiliary files, benchmark databases, and cache folders are ignored by git. This keeps the public repository focused on source code, reports, and representative visual outputs.