ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

Micro XRCE-DDS Agent now on snap!

Great news for the embedded world: the process of installing and executing the Micro XRCE-DDS Agent has now gotten much simpler!

In collaboration with @kyrofa from Canonical, we took the liberty to wrap the Agent as a snap package, which sets an important milestone for easing the use of Micro XRCE-DDS.

Snap is a package manager designed to bundle and handle applications and their dependencies on several Linux distros, among which Ubuntu.
Micro XRCE-DDS is a library developed and maintained by eProsima that enables resource-constrained devices such as MCUs to establish a communication with the DDS world. The protocol is based on a client-server architecture, and is the default middleware for micro-ROS, ROS 2’ younger brother. The server, also known as Agent, has the role of bridging the Clients, light entities running on the MCUs, with the DDS data space.

So, how do you use this late joiner of the embedded family?

The snap packaging of the Agent comes with two ways of running it: as a simple executable or by means of a Linux service.

The first implies the usage of the Agent’s built-in CLI, where you can specify the standard configuration parameters (such as transport, port…) directly, as follows:

micro-xrce-dds-agent <transport> <args>

The second launches the Agent as a Linux service running in the background; to do so, simply execute:

snap set micro-xrce-dds-agent daemon=true

In this case, instead of specifying the Agent’s launch parameters via the CLI, users can configure them thanks to the snap services interface, using the snap set micro-xrce-dds-agent <param>=<value> command. These parameters’ values are only valid when the daemon option is set to true, while they are ignored in snap run mode.

To have a look at the full list of configurable parameters, click here.

Spoiler: A snap release of the micro-ROS Agent is coming too, stay tuned!


CC: @kyrofa

Great work! we’ll be waiting for update.

BTW, what about client snap package as reference which can be running on UbuntuCore? Would you have any plan for that?
I think client side needs to be implemented by user, because actual hardware and sensors are dependent on use cases. But maybe that would be really nice to have it too, probably tutorials how to create client snap package with specific sensors.


That was my first thought a well, but that’s not to say it wouldn’t be useful to have a reference platform of some kind.

That is totally doable.


Hello @tomoyafujita, I think that a sample snap package for the client would be interesting if we target some specific platform/sensor.

Do you have any idea of which sensor/shield or platform would be interesting for this? I have seen that Ubuntu Core runs on a great variety of Raspberry Pi boards, maybe the Sense Hat can be an option for providing a micro-ROS / Micro XRCE-DDS client app that works out-of-the-box and puts all sensors (IMU, Temperature, Humidity…) and actuators (LEDs, Push Button…) on the ROS 2 dataspace.

What do you think?



if we take a majority, Raspberry Pi boards would be our choice. we do run Ubuntucore on Raspberry Pi boards too. but on the other hand, if there is actual use case, that would be great example.

puts all sensors (IMU, Temperature, Humidity…) and actuators (LEDs, Push Button…) on the ROS 2 dataspace.

SGTM! :+1: