ROS StartGuide


ROS (Robot Operating System) provides libraries and tools to help software developers create robot applications. It provides hardware abstraction, device drivers, libraries, visualizers, message-passing, package management, and more. ROS is licensed under an open source, BSD license.

ROS Wiki

Wikipedia of ROS :

ROS supporting versions

Currently, ROS distribution only supports installation on Ubuntu linux, but there is meta-ros layer maintained under the OpenEmbedded/Yocto framework, so we can integrate ROS into embedded Linux that is also based on the Openembedded framework.

The OpenEmbedded build framework [1] provides a general cross-compilation environment. This environment allows developers to set up a tool chain for their application and to create a complete Linux distribution for their embedded system. It supports various hardware architectures and embedded boards through board support packages.

The meta-ros layer provides the recipes for ROS hydro, indigo and kinetic. For the indigo distribution, it is currently the best supported distribution in meta-ros. ROC-RK3308-CC are also integrating this ROS distribution, and, it’s root file system is based on the yocto framework.

Reference firmware

Reference firmware: ROC-RK3308-CC_Yocto_ROS

ROS Demo and it’s operation manual can be referred to from “User-instructions”.

Ubuntu install of ROS Indigo

View all ROS distribution release. The latest ROS distribution, which is also the recommended version, is ROS Melodic Morenia. There are more detailed installation instructions in the official site. It should be noted that different Ubuntu versions have different corresponding ROS distribution. For example, ROS Melodic Morenia mainly supports Bionic (Ubuntu 18.04 LTS), while ROS Indigo Igloo supports Trusty (Ubuntu14.04 LTS) for debian packages.

Since ROC-RK3308-CC are integrating the ROS Indigo Igloo distribution, the PC should also Install ROS Indigo Igoloo distribution for test, and the following simple installation instructions are also ** mainly designed for Ubuntu 14.04 (ROS Indigo)**. Installation instructions for other distribution can be found on the Official Website Wiki.

Platform description

ROS Indigo only supports Saucy (13.10) and Trusty (14.04) for debian packages.

Installation step

Configure your Ubuntu repositories

Configure your Ubuntu repositories to allow “restricted,” “universe,” and “multiverse.” You can follow the Ubuntu guide for instructions on doing this.

Setup your sources.list

Setup your computer to accept software from

sudo sh -c 'echo "deb $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

You can also choose by yourself on the basis of UbuntuMirrors.

Set up your keys

sudo apt-key adv --keyserver hkp:// --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116


1、Make sure your Debian package index is up-to-date:

sudo apt-get update


We recommend Desktop-Full install: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators and 2D/3D perception.

sudo apt-get install ros-indigo-desktop-full

3、Initialize rosdep:

Before you can use ROS, you will need to initialize rosdep. rosdep enables you to easily install system dependencies for source you want to compile and is required to run some core components in ROS.

sudo rosdep init
rosdep update

4、Environment setup:

It’s convenient if the ROS environment variables are automatically added to your bash session every time a new shell is launched:

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

5、It is recommended to install rosinstall, a frequently used command-line tool in ROS that is distributed separately:

sudo apt-get install python-rosinstall


Install the official Tutorial:

sudo apt-get install ros-indigo-ros-tutorials

run a launch file of ros-tutorials:

roslaunch roscpp_tutorials talker_listener.launch

If everything goes right, you will obtain the following result:


 * /rosdistro: indigo
 * /rosversion: 1.11.21

    listener (roscpp_tutorials/listener)
    talker (roscpp_tutorials/talker)


core service [/rosout] found
process[listener-1]: started with pid [9520]
process[talker-2]: started with pid [9521]
[ INFO] [1545896255.189016471]: hello world 0
[ INFO] [1545896255.289000624]: hello world 1
[ INFO] [1545896255.388990355]: hello world 2
[ INFO] [1545896255.489031727]: hello world 3
[ INFO] [1545896255.489457481]: I heard: [hello world 3]
[ INFO] [1545896255.589028597]: hello world 4
[ INFO] [1545896255.589358894]: I heard: [hello world 4]

User Instructions

Next, we will introduce the operation of ROS by using a simple demo: firefly_controller

This demo shows how to run ROS across multiple machines. It introduces that all nodes must be configured to use the same master, via ROS_MASTER_URI. This demo contents:

  • Switch the on/off of two LEDs on ROC-RK3308-CC mainboard by using PC keyboard

  • Connecting to an external temperature & humidity sensor to obtain the current temperature & humidity

The temperature & humidity sensor is SHT30, a sensor produced by Sensirion based on i2c protocol. Its code was mainly based on “ROC-RK3308-CC开发实例总结–SHT30温湿度模块调试”

ROC-RK3308-CC preparation

Burning firmware

Switch to loader mode according to “burning_firmware”, download the firmware from ROC-RK3308-CC_Yocto_ROS, unzip it and run these command:

sudo upgrade_tool ul MiniLoaderAll.bin && \
sudo upgrade_tool di -p parameter.txt && \
sudo upgrade_tool di -uboot uboot.img && \
sudo upgrade_tool di -trust trust.img && \
sudo upgrade_tool di -boot zboot.img && \
sudo upgrade_tool di -rootfs rootfs.img && sudo upgrade_tool rd

In accordance with the [getting_started] (, power on the ROC-RK3308-CC mainboard to start up and connect the serial port. Input the account and password to enter the system terminal after powering on – the account is root and the password is empty.

Note: If you have the SHT30 sensor, it should be connected to before device powering on. It adopts I2C1 protocol for transmission and VCC5, GND, I2C1_SDA and I2C1_SCL should be connected according to “Hardware Documents”.

Initialize configuration

We prepared two scripts in the system for easy environment configuration:

ls /home/root

After starting up, wifi (WiFi should share the same network segment with PC host so that it is possible to ping each other) should be connected first. Please configure through script like following, where’s ssid is your WiFi account and psk indicates your password.

./ $ssid $psk

Next, configure ROS environment as following. Since the PC host acts as the master (the whole ROS operating environment only needs one master), roscore will not be setuped.

source ./ $master_ip

Of which, master_ip is the ip address of the PC host. We focused on the configuration of ROS_MASTER_URI and ROS_HOSTNAME here and more details can be found in script.

Run demo’s node

rosrun firefly_controller firefly_controller

And waits until the PC host is prepared.

PC-host preparation

Note: These instructions are for ROS Groovy and later. For ROS Fuerte and earlier, select rosbuild.

Download Demo package

Download ROS Demo package at firefly_iot_keyboard.tar.bz2

Create ROS work space

If you are installing ROS for the first time, it is possible to create a ROS workspace through catkin:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src

This workspace can be compiled even it is empty (no software package in the src directory, only a CMakeLists.txt link file).

cd ~/catkin_ws/


First, unzip the Demo package to the src directory of the workspace:

tar -xjf firefly_iot_keyboard.tar.bz2 -C ~/catkin_ws/src/

Then compile the workspace:

cd ~/catkin_ws/


Open two terminals respectively and configure each one according to the following steps.

Set the current workspace as the top level of ROS work environment:

cd ~/catkin_ws/
source devel/setup.bash

Set ROS_HOSTNAME as the host-ip, if not, the device cannot recognize.

export ROS_HOSTNAME=$master_ip

One of the terminals starts the keyboard control node of demo:

rosrun firefly_iot_keyboard

The other terminal starts demo receiving node:

rosrun firefly_iot_keyboard

Final effect

The result is as follows: _images/firefly_controller_en.png

PC terminal

Note, if you cannot control, please select the terminal window which running to ensure that your input can be captured.

Terminal of keyboard control:

rosrun firefly_iot_keyboard

Reading from the keyboard  and Publishing to firefly_controller!

        b : Blue LED ON/OFF
        r : Red LED ON/OFF
        t : show Temperature and Humidity

Press r and b of keyboard can switch to on/off of red and blue LEDs respectively. If the SHT30 sensor is connected, press t can obtain the temperature and humidity reported by the device, and such data will be received by the terminal which is running the other node “”.

Terminal of receiving:

rosrun firefly_iot_keyboard
  Temperature 28.607613c  Humidity 49.396507%

ROC-RK3308-CC result

Serial port print:

root@rockchip-rk3308-evb:~# rosrun firefly_controller firefly_controller
[ INFO] [1545900033.047350122]: I heard: [blue]
[ INFO] [1545900034.086951914]: I heard: [red]
[ INFO] [1545900035.106874956]: I heard: [sht30]


Run rosnode list to display information about the ROS nodes that are currently running:

rosnode list 

It shows that three nodes of firefly_controller are running: /firefly_base_controller, /firefly_iot_keyboard and /firefly_iot_receiver

Run rostopic list to return a list of all topics currently subscribed to and published.:

rostopic list 

It shows that firefly_controller has released two Topics: /temphumidity and /cmd_vel

Run rostopic echo to show the data published on a topic:

rostopic echo /temphumidity
humidity: 50.0968933105
temp: 24.1374816895
humidity: 51.638053894
temp: 23.3657588959

Use rqt_graph tool creates a dynamic graph of what’s going on in the system:

rosrun rqt_graph rqt_graph


rqt_graph is part of the rqt package. Unless you already have it installed, run:

sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins