ROS StartGuide Introduction 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 : http://wiki.ros.org 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 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 Installation 1、Make sure your Debian package index is up-to-date: sudo apt-get update 2、Install: 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 6、Test 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 [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] (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 "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 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 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 setup.sh 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/ catkin_make Compiling 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 Run 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 keyboard.py The other terminal starts demo receiving node: rosrun firefly_iot_keyboard receiver.py Final effect The result is as follows: PC terminal 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 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 "receiver.py". Terminal of receiving: rosrun firefly_iot_keyboard receiver.py currently: 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] Debugging Run "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: "/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 /cmd_vel /rosout /rosout_agg /temphumidity 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