Skip to main content

Roboticks SDK

The Roboticks SDK is a modern C++17 framework for building modular robotics applications with distributed messaging, structured logging, and lifecycle management.

Key Features

Modular Architecture

Build applications as composable modules with well-defined interfaces

Auto Code Generation

YAML configurations auto-generate C++ boilerplate code

Distributed Messaging

Pub/sub messaging with QoS support

Lifecycle Management

Built-in task lifecycle hooks for clean startup and shutdown

Core Packages

PackageDescription
roboticks-runtimeProcess lifecycle management and execution
roboticks-messagingDistributed pub/sub messaging with QoS
roboticks-loggingStructured logging with file and console sinks
roboticks-taskTask-based execution model with lifecycle hooks
roboticks-moduleModule system for auto-registration
roboticks-sessionsSession management for robot instances
roboticks-fleetFleet-wide coordination

Project Structure

roboticks-sdk/
├── packages/           # Core C++ libraries
│   ├── roboticks-runtime/
│   ├── roboticks-messaging/
│   ├── roboticks-logging/
│   └── ...
├── modules/            # User-created modules
│   └── HelloWorldModule/
├── compositions/       # System compositions
│   └── HelloWorldComposition/
├── messages/           # Message definitions (YAML → C++)
└── tools/              # Code generation tools

Quick Start

# Clone the SDK
git clone https://github.com/roboticks-io/roboticks-sdk.git
cd roboticks-sdk

# Build everything
make all

# Run the HelloWorld example
./modules/HelloWorldModule/build/HelloWorldModule

Convention Over Configuration

The SDK uses naming conventions to minimize boilerplate:
ComponentConventionExample
Module Directorymodules/{ModuleName}/modules/HelloWorldModule/
Config Fileconfig/{Name}.yamlconfig/HelloWorld.yaml
Task Filessrc/{Name}Task.{hpp,cpp}src/HelloWorldTask.cpp
Generated Codebuild/generated/{Name}Task.generated.hppAuto-created

Task Lifecycle

All modules implement lifecycle hooks:
class MyTask : public roboticks::task::MyTaskIO {
protected:
    bool onInitialize() override;  // Setup resources
    bool onStart() override;       // Prepare for execution
    void onUpdate() override;      // Main loop (at configured rate)
    void onStop() override;        // Cleanup
};

Next Steps