C++ Hybrid A*
- rewritten from ROS2 navigation2 stack
- with refactored out ROS2 dependencies
Implementation is mostly based on 2020 nav2_smac_planner by Steve Macenski while at Samsung Research. This is also the source for high level information about the algorithm.
Functional:
- Hybrid A* already usable
- Smoother already usable
Note:
- interface and implementation subject to change
- CMake build working but preliminary
As far as I remember implementation (from original) throws exception if there is no possible path. This exception is not caught in examples.
The code was refactored out of ROS2 in 2021 and original was probably updated since.
- ompl
- eigen
- ceres
- opencv (only for GUI example)
Tested with system libraries on Ubuntu 18.04 and 20.04
sudo apt-get install libompl-dev libeigen3-dev libceres-dev libopencv-dev
# don't forget recursive, library uses submodules
git clone --recursive https://github.com/bmegli/hybrid-a-star.git
cd hybrid-a-star
mkdir build
cd build
cmake ..
make
For Ubuntu 20.04 or custom OpenCV build set OpenCV path in CMakeLists.txt before cmake ..
./simple-example
./gui-example
Use:
- left mouse button -> start position
- right mouse button -> goal position
- any key -> plan
- esc -> quit
Optionally enable smoother in gui_example.cpp
main
and recompile.
See examples for now.
A mix of various open sources licenses, mainly:
- Apache 2.0
- BSD 2.0
- BSD
See individual files.