Building robots with Rock and Syskit

Rock is a software framework for the development of robotic systems. Rock provides all the tools required to set up and run high-performance and reliable robotic systems for wide variety of applications in research and industry. It contains a rich collection of ready to use drivers and modules for use in your own system, and can easily be extended by adding new components.

This documentation's focus is on building robot systems based on Rock and Syskit, Rock's system management layer. It will not cover issues related to Rock's lower-level Ruby and C++ execution APIs, or only in cases where these plug Syskit limitations.

The most important aspect of this documentation is to explain both the how and the why, i.e. describe the parts of Syskit that are relevant to manage a robot system, but also to explain the underlying design principles that allow you to build a manageable system. The documentation does not assume any prior knowledge about Rock, but does assume that you have more than basic knowledge on general software development practices. The tools being implemented in Ruby and C++, it is best to know about these languages. However, documentation on the basics and principles of a Rock-Syskit system can be followed with basic programming knowledge.

How to read this documentation

The Basics section is meant to be read in its entirety. It covers presents the fundamentals of how a robotic system is integrated and managed at runtime within Rock and Syskit. A Rock newcomer should read this part sequentially. Tutorials and examples are mixed with more detailed descriptions, with an aim at being progressive.

After the basics, the rest of the documentation is meant to be read on a need-to-know basis. Pick the subjects that are of interest to you, or that you need to know at a certain point in time.


  1. Basics: Integrating a system from scratch using Gazebo and Syskit
  2. Runtime: Details of running a Syskit system

Building Systems

  1. Workspace and Packages
  2. Libraries, or how to integrate functionality in C++ and Ruby with no dependency on the Rock framework itself.
  3. Components, or how to use the functionality developed in libraries in a Rock-based component layer, including a description of Rock's type system.
  4. Working with SDF
  5. Designing Component Networks
  6. Advanced Component Deployment
  7. System coordination
  8. Error Handling

Development Workflow

  1. Testing and Debugging
  2. Logging, Data Visualization and Building GUIs
  3. Inspecting coordination data