ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

During the 2022 Ubuntu Summit, I was pointed to this link. To help developers I want to add on the previous answer:

  • Docker is for development. If you want people to access your code and dev environment, use Docker.
  • Snaps are for deployment. If you DON'T want people testing and debugging your source code, use Snaps.

Simple. Is your ROS application ready for the market/final user? You don't want users playing/changing your code? If yes, you can use snaps.

Want to try it? just sudo snap install foxglove-studio or sudo snap install turtlebot3c or sudo snap install plotjuggler or ....

They are also not meant to be used in cloud web service applications. They were designed for embedded Linux devices.

Why are snaps being used for ROS deployment? As a container for Linux, it comes with several benefits compared to containers designed for the cloud (i.e. Docker). For instance:

  • Interfaces to access host machine and resources (you are not an IP - not another abstraction layer)
  • Field features as transactional updates, start with machine boot, delta updates,...
  • Manage fleet updates (Kubernetes, no. Kubernetes is designed for an aggregate of compute).
  • ROS integration - plugins and extensions for several ROS distributions. This improves the build and run time of ROS applications.

Here you can find the documentation: https://snapcraft.io/docs/ros-applications
PS. You can also snap your ROS application in less than 25 lines