The ROS 2 Hardware Acceleration Stack

The ROS 2 Hardware Acceleration Stack presents a series of extensions to ROS 2 which allow to leverage hardware acceleration and create custom compute architectures providing a faster ROS 2 execution and a timing-safe event-driven programming interface. The stack is composed of 4 key elements:

Standard/convention Title Rationale
REP 2009 Type Negotiation Feature Allow ROS 2 Nodes to dynamically negotiate the message types used by publishers and subscriptions, as well adaptively modifying the behavior of publisher and subscriptions to align with accelerators
REP 2008 ROS 2 Hardware Acceleration Architecture and Conventions Architectural pillars and conventions required to introduce hardware acceleration in ROS 2 in a scalable and technology-agnostic manner. Presents one interface for all hardware acceleration vendors.
REP 2007 Type Adaptation Feature An extension to rclcpp that will make it easier to convert between ROS types and custom, user-defined types for Topics, Services, and Actions.
REP 2000 ROS 2 Releases and Target Platforms Production-grade multi-platform ROS support with Yocto

While leading the ROS 2 Hardware Acceleration Working Group, Acceleration Robotics has contributed and maintains open source implementations of various components of the stack above. A complete implementation of the ROS 2 Hardware Acceleration Stack including support, documentation, examples as well as reference designs is realized within our product ROBOTCORE™. The section below discuss in more detail each one of its capabilities.

REP 2009 - Type Negotiation Feature: adaptively modify pub/sub behavior for accelerators

Type negotiation feature allow ROS 2 Nodes to dynamically negotiate the message types used by publishers and subscriptions, as well adaptively modifying the behavior of publisher and subscriptions. With type negotiation ROS 2 Nodes can a) publish different types of messages depending on the graph, b) publish multiple formats at the same time, c) enable only necessary publishers and subscriptions, d) delay publisher and subscription preferences while waiting for additional information from the graph.

ROS 2 type negotiation - REP 2009

REP 2008 - ROS 2 Hardware acceleration architecture and conventions: One interface for all hardware acceleration vendors

Implementing the open architecture for hardware acceleration of REP 2008, the stack deals with vendor proprietary libraries for hardware acceleration in robotics. This provides a common consistent API for creating accelerators, which helps accelerate computations, increase performance and abstract away the complexity of bringing ROS computational graphs to any of the supported silicon architectures. All while delivering the common ROS development flow.

REP 2007 - Type Adaptation Feature: No ROS type conversion for intra-process communications unless necessary

Type Adaptation introduces a series of extensions to ROS 2 rclcpp that will make it easier to convert between ROS types and custom, user-defined types for Topics, Services, and Actions. In the scope of the ROS 2 Hardware Acceleration Stack, type adaptation feature helps avoid unnecessary type conversions when interacting between Nodes and accelerators, which speeds up the dataflow in the graph.

ROS 2 type adaptation - REP 2007

REP 2000 - ROS 2 Releases and Target Platforms, Yocto enablement: Production-grade multi-platform ROS support with Yocto

Instead of relying on common development-oriented Linux distros (such as Ubuntu), Yocto allows to build a customized Linux system for each robotics use case with ROS, providing unmatched granularity, performance and security. We contributed a port of the Yocto recipes of ROS 2 Humble which we leverage within ROBOTCORE™ to build production-grade ROS 2 custom operating systems for robots.

If you’re interested to learn more about it, join the next meeting of the ROS 2 Hardware Acceleration WG.

5 Likes

Neat!

d) delay publisher and subscription preferences …

What are the preferences? I don’t get this.

@lyle see REP 2009 and the examples from @audrow.