Skip to main content

Intrinsic ROS integration

A key aspect of the Intrinsic platform is its ability to enable asset builders to extend it with their own assets such as skills and services. The ROS integration makes it easy to bring existing ROS-enabled assets to the platform. In addition to extending the platform, ROS can also be used to introspect and visualize various platform and user-generated data streams.

What the ROS integration offers

The Intrinsic ROS integration can be used to cover three major use cases:

  1. Create and install Intrinsic software assets (services, skills) based on (existing) ROS-code to use it in deployed Intrinsic solutions. (see Create ROS Service)
  2. Connect to external/locally running ROS nodes from assets in deployed Intrinsic solutions. (see Connect to ROS in a Skill)
  3. Stream data from Intrinsic solutions to ROS debugging tools (e.g. rviz, topics, rqt) (see Use Intrinsic solutions with ROS)

Connecting to the Intrinsic Pub/Sub infrastructure

ROS integration is supported when using the rmw_zenoh middleware. This approach utilizes the existing Intrinsic Pub/Sub infrastructure, which runs on the Zenoh network protocol, to allow ROS-based skills and services to discover and interact with one another.

For more information see the guide on connecting a hardware deployment to ROS: Run on Hardware - Use Intrinsic solutions with ROS

note

Currently it is not possible to connect to the in-cluster Zenoh routers of cloud-based (VM) deployments.

Intrinsic platform and ROS system overview

Best practices for integrating ROS functionality in Intrinsic solutions

ROS nodes are typically the unit of computation in a ROS graph. This makes them similar to the Intrinsic service assets, which are used on the Intrinsic platform to provide computation and other services required in the solution, e.g. providing services to skills in a process. In most cases it is best to integrate the functionality of ROS nodes in an Intrinsic service asset. Intrinsic service assets can contain more than one ROS node, allowing developers to bundle an existing project consisting of multiple ROS nodes within a single asset. These nodes communicate internally using standard ROS mechanisms, just as they would outside the asset.

It is also possible to include ROS code directly in a skill. This can be helpful, for example when a skill wants to use ROS to communicate to a ROS-based service for data exchange. In general, large parts of ROS code should be integrated in Intrinsic services though, due to the characteristics of skills:

  • Skills are stateless and execute each request without any known state from the last request
  • Skills are part of Intrinsic processes and only executed when that process calls them.

Example: Integrating a ROS-based inspection capability into an Intrinsic solution An asset builder has a ROS node that detects anomalies on an input image and returns a list of detected anomalies. The asset builder creates an Intrinsic service from that ROS node and installs it to a solution. The service now offers the inspection capabilities inside the Intrinsic solution such that skills can send a captured image to the service and receive the inspection result in a process.

Example: Run a ROS-based asset locally but connected to a Intrinsic solution during development

For fast iterations or first tests of functionality the asset builder chooses to keep the ROS node locally on their system. They wire it up with data streams inside the solution (e.g. to feed data into an existing service or skill) via the Intrinsic pub/sub infrastructure.

Further reading and resources

Guides:

Source Code: