All rapyuta.io docs are open source. See something that's wrong or unclear? Submit a pull request.
Make a contributionA ROS publisher is part of a ROS package. It is a public git repository, which is built into a running docker container on the fly when the package is being deployed. A ROS subscriber is also a part of the same ROS package. It is downloaded on a device and is launched when the package is deployed.
The tutorial will show you how to deploy a basic ROS package with a ROS publisher running on the cloud and a ROS subscriber running on a device such as Raspberry PI.
Device requirements
You should be familiar with the rapyuta.io platform concept
You should be familiar with the below tools:
15 minutes
ROS publisher and subscriber with Pre-installed Runtime
The tutorial will use Raspberry PI as the device. Learn how to prepare your Raspberry PI
If you are using the custom rapyuta.io image on the device, the catkin workspace is already created for you, and the io_tutorials repository is already present in the workspace. Moreover, the source code is already built for you.
In this tutorial, the catkin workspace is ~/catkin_ws/
, but you
may choose to name your catkin workspace as you like and ensure
that you replace all occurrences to ~/catkin_ws/
with your
workspace name.
If your device is a computer with ROS installed on it or a Raspberry PI without a custom rapyuta.io image, you will create a catkin workspace and get the io_tutorials repository into that workspace.
Hence, to create a catkin workspace, you have to execute the below commands at the device terminal.
cd $HOME
mkdir -p catkin_ws/src
cd catkin_ws/src
git clone https://github.com/rapyuta/io_tutorials
source /opt/ros/melodic/setup.bash
cd ..
For the custom rapyuta.io image to support the build command, catkin build, you will set up the device by executing the following:
cd $HOME &&
mv catkin_ws catkin_old &&
curl https://storage.googleapis.com/artifacts.rapyuta.io/io_tutorials/catkin_ws_arm32v7.tar.gz | tar xz
The argument to the curl command, i.e., the URL address, changes based on the architecture of the device.
To build the source code in the catkin workspace, execute the below command in the root of the workspace:
catkin build listener
If you experience an error catkin:command not found, then the python-catkin-tools package is missing on the device, which is required for executing catkin build command. Install the package by running sudo apt-get install python-catkin-tools
at the terminal.
To onboard a device, click here. Ensure that you do not select the Use docker compose as default runtime checkbox while adding the device.
To create the build, follow the below steps. Skip the following steps if you have already created an io-tutorials build earlier.
io-tutorials
https://github.com/rapyuta/io_tutorials
and select Build Recipe as Catkin.The build takes about two to five minutes to build the source code in the io_tutorials repository into a running docker container. You may analyze the corresponding build logs, which helps in debugging failed builds. Please proceed to the creation of the package once the build is complete.
To create a package using the console, follow the steps:
ROS publisher subscriber
.The package has two components: the talker running on the cloud and the listener running on the device.
In the Component Name box, enter a name for the component, for example, talker
The name of a component must consist of alphabets [A-Z, a-z], digits [0-9], hyphen - and an underscore _ character. It must not begin with a digit.
For Component Runtime, click Cloud.
Ensure Is ROS Component is selected.
Set the value of Replicas to run the component number 1 (default value).
In the Executable Name box, enter a name for the executable , for example, talkerExecutable
The name of an executable must consist of alphabets [A-Z, a-z], digits[0-9], hyphen - and an underscore _ character, and must not start with a digit.
For Executable Type, click on Development>Builds.
In the Choose Build select the Build io-tutorials
from the drop-down list.
In the Command to run in the docker container box, enter the command:
roslaunch talker talker.launch
Ensure you always execute the command roslaunch to explicitly start the ROS Master instead of running the rosrun command, because the ROS Master will fail to start on rosrun, and eventually, the deployment will fail as well.
The talkerExecutable publishes a ROS topic, /telemetry
To add a ROS topic, click Add ROS topic. In the Name box, enter the name of the ROS topic. Select Maximum for QoS.
In the Component Name box, type in a name for the component, , for example, listener
The name of a component must consist of alphabets [A-Z, a-z], digits [0-9], hyphen - and an underscore _ character, and must not begin with a digit.
For Component Runtime, click Device.
Ensure Is ROS Component is selected.
Ensure the ROS Version is Melodic.
In the Executable Name box, type in a name for the executable , for example, listenerExecutable
The name of an executable must consist of alphabets [A-Z, a-z], digits [0-9], hyphen - and an underscore _ character, and must not begin with a digit.
Since the ROS subscriber is already installed on the device, select Default as Executable Type.
In the Command to run in the docker container box, enter the command:
roslaunch listener listener.launch
Ensure you always execute the command roslaunch to explicitly start the ROS Master instead of running the rosrun command, because the ROS Master will fail to start on rosrun, and eventually, the deployment will fail as well.
Click NEXT > CONFIRM PACKAGE CREATION.
To deploy a package using the console, follow the steps:
ROS Publisher Subscriber Deployment
.You will be redirected to the newly created deployment’s Details page. The ROS Publisher Subscriber Deployment is successfully running only when the green colored bar moves to Succeeded and Status: Running point indicating that the DEPLOYMENT PHASE is Succeeded, and the STATUS is Running.
You may also analyze the corresponding deployment logs to check if everything is working OK by clicking on Logs tab.
The listener-listenerExecutable will be streaming /listener I heard hello_world logs.
while talker-talkerExecutable will be publishing hello_world logs.