A play on the phrase, "Don't reinvent the wheel," the Wheel Library (libwheel
) implements various algorithms and data
structures. Some contributions follow existing libraries but with modern designs and techniques. Others are novel and
built from scratch. The Wheel project's structure roughly resembles the Boost Library's, separating software
collections into different libraries.
The library comprises several software components grouped by category, similar to the Boost Library's structure. The
Wheel Library offers the following collections (See each collection's README.md
file for more information.):
angle
: A type-safe angle abstraction that behaves as a circle group element.geometry
: A collection of geometry concepts.metaprogramming
: A collection of various meta-functions, type traits, and C++ concepts.motion_planning
: A collection of sampling-based path and motion planning algorithms.strongly_typed_matrix
: A compile-time type-safe compile-time wrapper around the Eigen Matrix library for dimensioned linear algebra.
The Wheel Library is header only and uses CMake as its build system. It's designed to be integrated into other CMake
projects, so you can use FetchContent
or another mechanism to embed libwheel
into your project. If you want to
build and install libwheel
by itself, there are several CMake customization options.
Note: The Wheel Library requires C++20 or newer.
- CMake: 3.25 or newer
- If compiling with Clang: 16.0.0 or newer
- If compiling with GCC: 11.3.0 or newer
For building the library with the default options, follow these steps:
-
Configure the CMake project
$ cmake -B build .
-
Build the library
$ cmake --build build
-
(Optional) Install the library
$ sudo cmake --install build # Install to /usr/local/
or
$ cmake --install build --prefix=<install_path> # Install to custom location
CMake option | Default Value | Description |
---|---|---|
libwheel_BUILD_ANGLE |
TRUE |
Build the Wheel Angle Library. |
libwheel_BUILD_GEOMETRY |
TRUE |
Build the Wheel Geometry Library. |
libwheel_BUILD_METAPROGRAMMING |
TRUE |
Build the Wheel Metaprogramming Library. |
libwheel_BUILD_MOTION_PLANNING |
TRUE |
Build the Wheel Motion Planning Library. |
libwheel_BUILD_STRONGLY_TYPED_MATRIX |
TRUE |
Build the Wheel Strongly-Typed Matrix Library. |
CMake option | Default Value | Description |
---|---|---|
libwheel_EXPORT_COMPILE_COMMANDS |
${PROJECT_IS_TOP_LEVEL} |
Export CMake compile commands. This helps IDEs provide accurate IntelliSense features while editing (e.g., code completion). |
The library does not have a well-defined scope, but it focuses on motion planning algorithms and supporting software components. If there is a feature that you want to see added, create a new thread in the Discussions tab.
Need some help or want to chat about the library? Head to the repository's Discussions tab to connect with someone.
Want to help improve the library? Check out the contribution guidelines to get started.
See the LICENSE.md
file for license information.