Skip to content

About

A comprehensive open-source library of robotics for embedded applications.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

44 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Robotics Algorithms Library

Overview

This library provides robotics algorithms — today robot-manipulator kinematics, rigid-body dynamics, trajectory generation, manipulator control, motion planning, wheeled mobile robots, localization and mapping; aerial, legged and marine robots are on the roadmap — 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.

Getting Started

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".

Documentation

Category Description
Kinematics Forward Kinematics, Chain Pose Kinematics, Denavit-Hartenberg Parameters, Geometric Jacobian, Manipulability Index, Product of Exponentials, Redundancy Resolution, Inverse Kinematics (DLS), Pose Inverse Kinematics, Analytical IK (OPW), Continuum Kinematics, Parallel Manipulator Kinematics, Mobile-Manipulator Kinematics
Dynamics Euler-Lagrange, Newton-Euler, Recursive Newton-Euler (RNEA), Articulated Body Algorithm (ABA), Chain Dynamics Model, Composite Rigid Body Algorithm (CRBA), Coriolis Matrix and Inertial Regressor, Dynamic Parameter Identification, Forward-Dynamics Integration, Generic Joint Link, Generalized-Momentum Observer
Planning Primitive Distance Queries, Artificial Potential Fields, Self-Collision Checking, Convex Collision (GJK and EPA), Grid Search (A* and Dijkstra), RRT-Connect, Dubins Shortest Paths, Dynamic Window Approach, Reeds–Shepp Shortest Paths
Trajectory Cubic Spline Trajectory, Cartesian Path with SLERP Orientation, Time-Optimal Path Parameterization (TOPP-RA)
Mobile Robots Planar Odometry, Differential-Drive Kinematics, Car-Like Kinematics, Omnidirectional Kinematics, Skid-Steer Kinematics, Pure-Pursuit Path Tracking, Kanayama Trajectory Tracking, Stanley Path Tracking
Localization & Mapping Occupancy-Grid Mapping, Odometry Fusion, EKF Landmark Localization, 2-D Scan Matching (ICP), Monte Carlo Localization
Manipulator Control PD Control with Gravity Compensation, Computed-Torque Control, Impedance Control, Operational-Space Control, Hybrid Position/Force Control, Slotine–Li Adaptive Control, Cable Tension Distribution

Each category page lists its algorithms with a brief description and links to the detailed documentation.

Booklet

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, or in the embedded-devcontainer-documentation container image that CI uses:

python scripts/build-booklet.py --format all   # writes build/booklet/{RoboticsToolbox.pdf,index.html}

Simulator

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.

Building the Simulator

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).

Roadmap

Planned algorithms and components are tracked in ROADMAP.md — a prioritized backlog per robot family (manipulators, wheeled, aerial, legged, marine, grasping, planning, localization, calibration, safety) ordered by implementation difficulty. Design-level pseudocode specifications live under roadmap/; generic algorithms go to numerical-toolbox-cpp.

Testing

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 host

The 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-Debug

Contributing

Contributions, 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).

License

See LICENSE.

About

A comprehensive open-source library of robotics for embedded applications.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages