Expose an Arm-based ROS 2 system as a discoverable device on Device Connect
Introduction
Understand ROS 2, Device Connect, and the example adapter
Set up ROS 2 and Device Connect on Arm Linux
Connect ROS 2 to Device Connect and call inspection RPCs
Explore deployment profiles and try the adapter with a Raspberry Pi 5 camera
Next Steps
Expose an Arm-based ROS 2 system as a discoverable device on Device Connect
Who is this for?
This is an introductory topic for robotics and edge developers who want to get started with making a Robot Operating System 2 (ROS 2) system discoverable and callable by other devices and AI agents using Device Connect, without changing the ROS 2 application itself.
What will you learn?
Upon completion of this Learning Path, you will be able to:
- Identify how a Device Connect adapter bridges a containerized ROS 2 system to a Device Connect network.
- Set up ROS 2 in Docker and the Device Connect Python packages on an Arm-based Linux machine.
- Run the adapter in device-to-device (D2D) mode and call read-only ROS 2 inspection remote procedure calls (RPCs) from a Python client.
- Describe how deployment profiles map the same adapter onto real hardware such as a Raspberry Pi 5 with a camera.
Prerequisites
Before starting, you will need the following:
- An Arm-based Linux machine, such as a Raspberry Pi 5, an Arm cloud instance, or an Arm-based laptop, running Ubuntu 22.04 or later
- Basic familiarity with Python, the Linux command line, and ROS 2 concepts such as nodes and topics
Summary
This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
Frequently asked questions
These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
uname -m on your Arm-based Linux host. You should see aarch64.docker exec ros2_test bash -lc 'source /opt/ros/humble/setup.bash && ros2 node list && ros2 topic list'. You should see /chatter, /parameter_events, and /rosout. You can expect an empty node list because the publisher runs as a hidden node.D2D mode: skipping registry registration, using presence announcements in the adapter log. Then, run .venv/bin/python client.py with the client environment settings. You should discover rpi5-d2d, and get_ros_topics should return /chatter.rpi5 with ROS_CONTAINER=ros2_test and WORKSPACE_SETUP=/opt/ros/humble/setup.bash. You can validate the shared inspection RPCs without PuppyPi hardware. You can expect ros_ok: false in get_status because the robot packages are absent.rpi_camera for the Raspberry Pi 5 camera example. Run ./ros2-device-connect/start_camera_ros2.sh to start the pi_ros container and /image_raw publisher, then run DEVICE_PROFILE=rpi_camera ./ros2-device-connect/start_d2d.sh. For other hardware, create or edit a profiles/<name>.env file to select the driver, container, and ROS 2 setup scripts.