This library provides robot-manipulator algorithms — kinematics, rigid-body dynamics, trajectory
generation, and manipulator control — designed for robust and efficient real-time use on
resource-constrained embedded systems (no heap, deterministic, float-only). It builds on the shared
numerical primitives (linear algebra, solvers, controllers) provided by
numerical-toolbox-cpp, which it consumes
via CMake FetchContent.
The library is a set of CMake targets. Consume it from your own project with FetchContent:
include(FetchContent)
FetchContent_Declare(
robotics_toolbox
GIT_REPOSITORY https://github.com/embedded-pro/robotics-toolbox-cpp.git
GIT_TAG <commit-sha>
)
FetchContent_MakeAvailable(robotics_toolbox)
target_link_libraries(my_app PRIVATE robotics.kinematics robotics.dynamics)Pin GIT_TAG to a commit SHA for reproducible builds. The dependencies
embedded-infra-lib (infra.util) and
numerical-toolbox (numerical.math, numerical.solver) are fetched automatically unless the parent
project already defines those targets. Includes are namespaced by domain, e.g.
#include "robotics/kinematics/ForwardKinematics.hpp" and — for shared primitives —
#include "numerical/math/Matrix.hpp".
| Category | Description |
|---|---|
| Kinematics | Forward Kinematics, Inverse Kinematics (Damped Least Squares) |
| Dynamics | Euler-Lagrange, Newton-Euler, Recursive Newton-Euler (RNEA), Articulated Body Algorithm (ABA) |
Each category page lists its algorithms with a brief description and links to the detailed documentation.
The entire documentation set is also published as a single book — read it online as a
GitHub Pages site or download the latest
PDF from the Releases page. Both are generated automatically from doc/
(cover, Summary/table of contents, one chapter per category, consolidated references, back cover).
Build it locally with Pandoc + XeLaTeX installed:
python scripts/build-booklet.py --format all # writes build/booklet/{RoboticsToolbox.pdf,index.html}The simulator/ directory contains an interactive Qt-based GUI application (Robot Arm) for
visualizing and experimenting with the library's algorithms. It is a desktop tool for development
and exploration, separate from the core embedded-targeted library.
The simulator requires Qt6 and is disabled by default. Enable it with:
cmake --preset host # host preset enables it automatically
# or manually:
cmake -DROBOTICS_TOOLBOX_BUILD_SIMULATOR=ON ...Prerequisites: qt6-base-dev and libgl1-mesa-dev (Ubuntu/Debian).
Planned algorithms and components are tracked in ROADMAP.md — a prioritized backlog of manipulator kinematics, dynamics, trajectory, and control components ordered by implementation difficulty. Design-level pseudocode specifications live under roadmap/.
Every algorithm is validated against the mathematical invariants of its family — not golden
output. Tests are TEST_F on float, no heap, one behaviour per test, asserted against independent
reference values. The per-family metric strategy is documented in TESTING.md;
framework rules live in
.github/instructions/testing.instructions.md.
Build & test locally:
cmake --preset host && cmake --build --preset host
ctest --preset hostThe host preset also builds the simulator and therefore needs Qt6. Without Qt6, use the
library-only preset:
cmake --preset host-single-Debug && cmake --build --preset host-single-Debug
ctest --preset host-single-DebugContributions, issues, and feature requests are welcome. Before opening a pull request, read AGENTS.md (coding, numeric and testing rules) and roadmap/DEPLOYMENT.md (how a roadmap specification becomes shipped code).
See LICENSE.