How Space ROS Differs from ROS 2

To date, work has focused on establishing the foundation for Space ROS, including builds and infrastructure, code analysis tools, requirements tools and processes, and space-specific functionality. These efforts extend the foundation provided by ROS 2. The following sections list the differences between Space ROS and the standard ROS 2 distributions.

Builds and Infrastructure

There are several new infrastructure elements for Space ROS, including information resources and regular builds provided to the Space ROS community.

Item

Description

Website

The Space ROS website has high-level information about Space ROS as well as a searchable set of related articles and videos.

Documentation site

The Space ROS documentation site (this site) contains information about Space ROS, without duplicating the standard ROS 2 documentation. For standard ROS 2 topics, one can refer to the ROS 2 Humble documentation.

GitHub organization

There is a github organization for many of the Space ROS projects.

Docker images

Pre-built Docker images are available from the OSRF Space ROS page on Docker Hub.

Earthly builds

Space ROS builds use the Earthly CI/CD tool. This allows local developer builds to use the identical system as the CI builds.

Code Analysis Tools

Static analysis tools are recommended by various standards such as NPR 7150.2 and DO-178C. The initial focus for Space ROS has been on source code quality and producing the artifacts required to support certification. To this end, we have added code analysis tools beyond the core set available with ROS 2, updated the tool output to use the standard SARIF file format, and included a Dashboard interface to view the output of the tools.

Item

Description

Cobra static analyzer

The Cobra static analyzer was developed at NASA’s Jet Propulsion Labratory (JPL) in 2015. It supports multiple code analysis rule sets, including P10 and CWE. Cobra can perform interactive analyses of code bases with up to millions of lines of code, using a rich query scripting language.

IKOS static analyzer

The IKOS static analyzer is a NASA tool based on the theory of abstract interpretation. IKOS is scalable to large complex computer programs and presents a sound approach to verification of such programs.

MC/DC testing tool

Modified Condition/Decision Coverage (MC/DC) is required by some safety-critical standards. We have integrated MC/DC analysis according to this approach that utilizes open source tools.

SARIF output

For Space ROS, all of the static analyzers provide output in the SARIF file format, a standard, JSON-based format for the output of static analysis tools.

The SARIF bundle

After running static analyzers on the Space ROS source code, the Space ROS build system gathers the SARIF files produced by the analyzers into a single archive file. This archive contains the original SARIF files, processed SARIF files where some of the redundant output has been removed, and archive metadata.

The Code Analysis Dashboard

the Code Analysis Dashboard, a Visual Studio Code plugin, reads the SARIF files and presents the issues detected by the static analyzers. Developers can also use the various charts and graphs provided by the Dashboard to understand how issues are addressed over time. For example, by comparing the analysis output from two separate Space ROS builds.

Requirements Tools and Processes

An essential part of safety critical projects conforming to industry quality standards is capturing and tracking requirements, including full requirements traceability from high-level requirements to code-level artifacts. With Space ROS, we have incorporated tools that help us to meet the meta-level requirements introduced by aerospace quality standards.

Item

Description

Doorstop

Doorstop is a requirements management tool that facilitates the storage of textual requirements alongside source code in version control. Doorstop provides mechanisms for entering and modifying a hierarchical set of requirements, validating traceability through requirements levels, and publishing documents in several formats.

FRET

FRET is a framework for the elicitation, formalization and understanding of requirements. Users enter system requirements in a specialized natural language. FRET helps understanding and review of semantics by utilizing a variety of forms for each requirement: natural language description, formal mathematical logics, and diagrams. Requirements can be defined in a hierarchical fashion and can be exported in a variety of forms to be used by analysis tools.

Space-Specific Functionality

The Space ROS project also incorporates space-specific functionality, such as a package to support telemetry from flight software systems.

Item

Description

C++ PMR memory allocator

We have updated upstream ROS 2 code to ensure that users can provide their own allocator and it will be used by the core Space ROS modules. Users are able to provide cutom allocators designed for specific requirements, such as avoiding non-determinism.

Eventing & Telemetry Subsystem

The Eventing and Telemetry System (ETS) is the system responsible for providing robust event reporting functionality. ETS is used to instrument and monitor flight software.

Demo applications

Space ROS provides demonstration applications that integrate Space ROS with simulated robots, including the Curiosity Mars rover and the Canadarm manipulator.

Simulation assets

There is a repository in the Space ROS github organization that hosts space-related simulation assets. This repository holds all of the simulation assets used in our demos and is organized to be scalable so that we can continue to add more simulation assets over time.

RTEMS

RTEMS is an open source real-time operating system that supports open standard application programming interfaces such as POSIX and is used in space flight, medical, networking and many more embedded devices. To further support flight software systems we build Space ROS for RTEMS and have a demonstration application that runs on RTEMS.

cFS/ROS 2 Bridge

There is an active project, the BRASH Integration Toolkit for ROS2 and Flight Software Interoperability, that promises to bridge the gap between Space ROS and legacy flight software systems. We hope to work with this project to integrate some of the core functionality into Space ROS.