voronoi_planner is a ROS 1 nav_core::BaseGlobalPlanner plugin that searches
for global paths on a generalized Voronoi diagram (GVD) generated from a
costmap_2d occupancy grid.
The planner is intended for mobile robots that benefit from obstacle-clearance aware routes, such as indoor robots, service robots, and RoboMaster-style navigation stacks where a path should prefer the medial axis of free space instead of hugging obstacle boundaries.
This repository is a maintained public package for the ROS 1 navigation stack. The current focus is documentation, build reproducibility, and practical integration examples for downstream robotics projects.
The implementation is intentionally small:
- A ROS global planner plugin exported through
pluginlib. - Dynamic reconfigure parameters for path smoothing and Voronoi grid publishing.
- A
make_planservice wrapper compatible withnav_msgs/GetPlan. - Optional Voronoi grid publication for debugging in RViz.
- Computes a path from robot pose to goal pose using a Voronoi diagram built on top of the active costmap.
- Implements the
nav_core::BaseGlobalPlannerinterface used bymove_base. - Publishes the generated
nav_msgs/Pathfor visualization. - Can publish an occupancy-grid view of the Voronoi graph for debugging.
- Provides dynamic reconfigure controls for path smoothing behavior.
.
+-- cfg/ # dynamic_reconfigure parameters
+-- docs/ # installation, usage, and maintenance notes
+-- examples/ # move_base integration snippets
+-- include/ # planner and DynamicVoronoi headers
+-- src/ # planner implementation
+-- bgp_plugin.xml # pluginlib export
+-- CMakeLists.txt # catkin build file
+-- package.xml # ROS package metadata
- ROS 1 with
catkin navigationstack packages, especiallynav_coreandcostmap_2ddynamic_reconfigure- A
dynamicvoronoipackage/library available in the catkin workspace - C++11 compiler
The package was originally written for ROS 1 style catkin workspaces. Newer ROS 1 distributions such as Melodic and Noetic are the most practical targets for maintenance work.
Clone the package into a catkin workspace:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/iCey-git/voronoi_planner.gitInstall ROS dependencies from the workspace root:
cd ~/catkin_ws
rosdep update
rosdep install --from-paths src --ignore-src -r -yBuild the workspace:
catkin_make
source devel/setup.bashConfigure move_base to use the plugin:
base_global_planner: "voronoi_planner/VoronoiPlanner"See docs/installation.md and docs/usage.md for a fuller setup guide.
Dynamic reconfigure parameters are defined in
cfg/VoronoiPlanner.cfg.
| Parameter | Default | Description |
|---|---|---|
weight_data |
0.5 |
Data term weight used by path smoothing. |
weight_smooth |
0.3 |
Smoothness term weight used by path smoothing. |
publish_voronoi_grid |
true |
Publishes a grid view of Voronoi cells for debugging. |
smooth_path |
true |
Enables path smoothing after graph search. |
Example configuration snippets are available in examples/move_base_global_planner.yaml.
- Installation
- Usage with move_base
- Configuration
- Demo and RViz Checks
- Architecture Notes
- Maintenance Notes
- Roadmap
- Changelog
The planner is based on the generalized Voronoi diagram planning approach described in:
@inproceedings{Fedorenkoa2016LocalAG,
title={Local and Global Motion Planning for Unmanned Surface Vehicle},
author={Roman Fedorenko},
year={2016}
}Paper: Local and Global Motion Planning for Unmanned Surface Vehicle
Bug reports, integration notes, and small focused patches are welcome. Please see CONTRIBUTING.md before opening a pull request.
This package declares a BSD license in package.xml. See LICENSE for
the repository license text.