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 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  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.
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.
ROS Indigo only supports Saucy (13.10) and Trusty (14.04) for debian packages.
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 packages.ros.org.
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(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://ha.pool.sks-keyservers.net:80 --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
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
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:
SUMMARY ======== PARAMETERS * /rosdistro: indigo * /rosversion: 1.11.21 NODES / listener (roscpp_tutorials/listener) talker (roscpp_tutorials/talker) ROS_MASTER_URI=http://localhost:11311 core service [/rosout] found process[listener-1]: started with pid  process[talker-2]: started with pid  [ 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]
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温湿度模块调试”。
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] (http://wiki.t-firefly.com/ROC-RK3308-CC/getting_started.html), 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
I2C1_SCL should be connected according to “Hardware Documents”.
We prepared two scripts in the system for easy environment configuration:
ls /home/root setup.sh wifi.sh
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
wifi.sh like following, where’s
ssid is your WiFi account and
psk indicates your password.
./wifi.sh $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 ./setup.sh $master_ip
master_ip is the ip address of the PC host. We focused on the configuration of
ROS_HOSTNAME here and more details can be found in setup.sh script.
Run demo’s node¶
rosrun firefly_controller firefly_controller
And waits until the PC host is prepared.
Note: These instructions are for ROS Groovy and later. For ROS Fuerte and earlier, select rosbuild.
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/ catkin_make
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/ catkin_make
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.
One of the terminals starts the keyboard control node of demo:
rosrun firefly_iot_keyboard keyboard.py
The other terminal starts demo receiving node:
rosrun firefly_iot_keyboard receiver.py
The result is as follows:
Note, if you cannot control, please select the terminal window which running keyboard.py to ensure that your input can be captured.
Terminal of keyboard control:
rosrun firefly_iot_keyboard keyboard.py Reading from the keyboard and Publishing to firefly_controller! ---------------------------------------------------------------- keymap: LED: b : Blue LED ON/OFF r : Red LED ON/OFF Sensor: t : show Temperature and Humidity
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 “receiver.py”.
Terminal of receiving:
rosrun firefly_iot_keyboard receiver.py currently: Temperature 28.607613c Humidity 49.396507%
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]
rosnode list to display information about the ROS nodes that are currently running:
rosnode list /firefly_base_controller /firefly_iot_keyboard /firefly_iot_receiver /rosout
It shows that three nodes of firefly_controller are running:
rostopic list to return a list of all topics currently subscribed to and published.:
rostopic list /cmd_vel /rosout /rosout_agg /temphumidity
It shows that firefly_controller has released two Topics:
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 ---
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