nanoplan is a header-only C++11 library for search-based robot planning.

nanoplan is a header-only C++11 library for search-based robot planning. The primary design goals are correctness, ease-of-use, and efficiency (in that order). nanoplan currently supports Dijkstra, A*, Lifelong Planning A*, and (Coming Soon!) D* Lite.

Demo

The demo included with nanoplan generates a 2d maze and searches for a path from the top-left to the bottom-right. New obstacles appear with each iteration. Depending on the search algorithm you select, replanning is much more efficient than planning from scratch.

Installation

git clone github.com/jsford/nanoplan/
cd nanoplan
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
sudo make install

Usage

CMake find_package

Use CMake and find_package to consume an installed version of nanoplan.

project("nanoplan-example")

find_package(nanoplan CONFIG REQUIRED)

add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} nanoplan::nanoplan)

CMake add_subdirectory

Alternatively, you can use add_subdirectory to include nanoplan in your project without installing it to the system.

project("nanoplan-example")

add_subdirectory(nanoplan)

add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} nanoplan::nanoplan)

Header-only

You can always grab the entire include/nanoplan/ directory and drop it into your project.

Acknowledgements

Thank you to Carnegie Mellon's Search Based Planning Lab and Professor Maxim Likhachev for inventing and publishing many of the algorithms implemented in nanoplan.

The nanoplan logo is based on "Robot thinker", original art licensed from studiostoks.

Similar Resources

Simple Useful Libraries: C++17/20 header-only dynamic bitset

dynamic_bitset Simple Useful Libraries: C++17/20 header-only dynamic bitset Requirements To use this dynamic bitset, you will need a C++17 (or later)

Nov 16, 2022

a header-only, constexpr alternative to gperf for C++14 users

Frozen Header-only library that provides 0 cost initialization for immutable containers, fixed-size containers, and various algorithms. Frozen provide

Nov 25, 2022

A family of header-only, very fast and memory-friendly hashmap and btree containers.

A family of header-only, very fast and memory-friendly hashmap and btree containers.

The Parallel Hashmap Overview This repository aims to provide a set of excellent hash map implementations, as well as a btree alternative to std::map

Nov 25, 2022

C++14 header only result monad implementation

constexpr Either S, E C++14 header only result monad implementation. Features constexpr support 0 dependencies single header Status in development T

Oct 7, 2021

Header-only compile time key-value map written in C++20.

C++ Static Map Header-only compile time key-value map written in C++20. Getting Started Simply add the files in your source and #include "@dir/Static_

Oct 19, 2021

Multi-Purpose Header-Only C Data Structures

USAGE These header files are meant to be a simple means of using datastructures in a C project. They are universally useable with any other C datatype

Jul 15, 2022

A simple single header 64 and 32 bit hash function using only add, sub, ror, and xor.

A simple single header 64 and 32 bit hash function using only add, sub, ror, and xor.

K-HASH A simple single header 64 bit hash function using only add, sub, ror, and xor. This a just general-purpose hash function for like making hash m

Jul 31, 2022

C header library for typed lists (using macros and "template" C).

vector.h C header library for typed lists (using macros and "template" C). Essentially, this is a resizable array of elements of your choosing that is

Nov 29, 2022

Play GTA San Andreas Multiplayer with mouse only and no keyboard

Play GTA SAMP with your mouse and no keyboard! For some reason some people think it's a troll or an inside joke, IT IS NOT! This is a legit mod for th

Aug 31, 2022
Comments
  • Future plans for nanoplan

    Future plans for nanoplan

    The implementation of D Lite* will be an important milestone in the project. Already with that I would be quite satisfied. :-)

    However, have you thought about implementing some other state-of-the-art algorithm in the future in nanoplan? Is there already a to-do list? I love the minimalist philosophy that the project exudes!

    DJuego

  • Searching in 3D spaces

    Searching in 3D spaces

    Thank you very much for this initiative! The project is young but already seems to have everything I like. :-) It is very promising. I admit I am a newcomer in this area but I find it very intriguing.

    From what I can understand from the demo it is possible to apply your library also to make searches in 3D spaces with the supported algorithms, right? If so an example would be great (although I understand the difficulties of rendering).

    Thank you again for this contribution!

    DJuego

  • Building in Windows ( Cannot open include file: 'unistd.h')

    Building in Windows ( Cannot open include file: 'unistd.h')

    Hi! In my humble opinion, it would be really interesting to offer a multiplatform solution of nanoplan. :-D I am working in Windows 10 x64/Visual Studio 2019. I'm trying to build the demo. However, the unistd.h file is not standard in Windows.

    DJuego

    Build started...
    1>------ Skipped Build: Project: Continuous, Configuration: Release x64 ------
    1>Project not selected to build for this solution configuration 
    2>------ Skipped Build: Project: Experimental, Configuration: Release x64 ------
    2>Project not selected to build for this solution configuration 
    3>------ Skipped Build: Project: Nightly, Configuration: Release x64 ------
    3>Project not selected to build for this solution configuration 
    4>------ Skipped Build: Project: NightlyMemoryCheck, Configuration: Release x64 ------
    4>Project not selected to build for this solution configuration 
    5>------ Build started: Project: demo_nanoplan, Configuration: Release x64 ------
    5>demo.cpp
    5>P:\Compilados\x32-x64\TRABAJO_MSVC2019_x64\nanoplan\include\nanoplan\cost.h(18,31): warning C4244: 'initializing': conversion from 'double' to 'int', possible loss of data
    5>P:\Compilados\x32-x64\TRABAJO_MSVC2019_x64\nanoplan\include\nanoplan\cost.h(19,30): warning C4244: 'initializing': conversion from 'float' to 'int', possible loss of data
    5>P:\Compilados\x32-x64\TRABAJO_MSVC2019_x64\nanoplan\include\nanoplan\cost.h(55,15): warning C4244: '=': conversion from 'double' to 'int', possible loss of data
    5>P:\Compilados\x32-x64\TRABAJO_MSVC2019_x64\nanoplan\demo\demo.cpp(4,10): fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
    5>Done building project "demo_nanoplan.vcxproj" -- FAILED.
    6>------ Skipped Build: Project: INSTALL, Configuration: Release x64 ------
    6>Project not selected to build for this solution configuration 
    ========== Build: 0 succeeded, 1 failed, 5 up-to-date, 5 skipped ==========
    
R :package: and header-only C++ library for geospatial space-division based compression and encoding
R :package: and header-only C++ library for geospatial space-division based compression and encoding

spress spress provides utilities for encoding and compressing geospatial objects, such as sf objects. Installation This package requires C++11 for com

Dec 9, 2021
This project Orchid-Fst implements a fast text string dictionary search data structure: Finite state transducer (short for FST) in c++ language.This FST C++ open source project has much significant advantages.
This project Orchid-Fst implements a fast text string dictionary search data structure: Finite state transducer (short for FST) in c++ language.This FST C++ open source project has much significant advantages.

Orchid-Fst 1. Project Overview This project Orchid-Fst implements a fast text string dictionary search data structure: Finite state transducer , which

Oct 18, 2022
Binary Search tree

eng Binary tree Task: Create a binary search tree, the information part of which will be a symbol, make direct and symmetric traversals, search for th

Nov 25, 2021
This algorithm is amazing and take a high performance to search something under array.
This algorithm is amazing and take a high performance to search something under array.

Sequential Binary Algorithm O(n) Algoritmo Este é um algoritmo de complexidade O(log n), que possui uma alta performance em percorrer um vetor de inte

Oct 26, 2021
C implementation of Random Depth-first search algorithm with back tracking
C implementation of Random Depth-first search algorithm with back tracking

Maze Generating Algorithm This is an implementation of Randomized depth-first search algorithm. It creates a maze by taking a random valid path and co

May 2, 2022
Public repository for rolling release of main Vector robot code repository.

vector Public repository for rolling release of main Vector robot code repository. This rolling release will be worked to completion until all non-thi

Nov 4, 2022
ring-span lite - A C++yy-like ring_span type for C++98, C++11 and later in a single-file header-only library

ring-span lite: A circular buffer view for C++98 and later Contents Example usage In a nutshell Dependencies Installation Synopsis Reported to work wi

Nov 26, 2022
Step is a C++17, header-only library of STL-like algorithms and data structures
Step is a C++17, header-only library of STL-like algorithms and data structures

Step is a C++17, header-only library of STL-like algorithms and data structures. Installation git clone --depth 1 https://github.com/storm-ptr/step.gi

Sep 1, 2022
BladeBit - Fast Chia (XCH) RAM-only k32-only Plotter

BladeBit Chia Plotter A fast RAM-only, k32-only, Chia plotter. Requirements 416 GiB of RAM are required to run it, plus a few more megabytes for stack

Nov 28, 2022
Easy to use, header only, macro generated, generic and type-safe Data Structures in C
Easy to use, header only, macro generated, generic and type-safe Data Structures in C

C Macro Collections Easy to use, header only, macro generated, generic and type-safe Data Structures in C. Table of Contents Installation Contributing

Nov 27, 2022