跳到主要内容

ROS 使用指南

简介​

ROS ( Robot Operating System, 机器人操作系统) ,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS 遵循 BSD 开源许可协议。

ROS 维基​

ROS 官网的中文维基地址:http://wiki.ros.org/cn

ROS 支持版本​

目前 ROS 的发布版本,官方只支持 Ubuntu Linux 等安装,但由于在 OpenEmbedded/Yocto 框架下维护了meta-ros layer,使得我们可以将ROS集成到同样基于 Openembedded 框架 的嵌入式Linux中运行。

OpenEmbedded 框架提供了通用的交叉编译环境。在此开发环境允许开发人员自己配置编译工具链,编译程序,并为其嵌入式系统,创建完整的Linux发行版。 它可通过丰富的板级支持包,以支持各种硬件架构和嵌入式主板。

目前 ROS OpenEmbedded meta-ros Layer 有三个版本,分别支持 ROS hydro,indigo 和 kinetic 发行版本。其中 ROS indigo是支持最好的一个版本,ROC-RK3308-CC ROS 系统所集成的也是这个版本,同时根文件系统是基于的 Yocto 版本为 Rocko所构建的。

参考固件​

参考固件地址: ROC-RK3308-CC_Yocto_ROS

demo程序以及系统的使用说明请看使用教程。

PC 端(Ubunut主机)安装 ROS​

查看ROS所有的发行版本。目前 ROS 最新的版本,也是官方推荐的版本是 ROS Melodic Morenia 。其安装教程官方有很详细的介绍,需要注意的是,不同的Ubuntu版本,对应安装不同的 ROS 版本,例如 ROS Melodic Morenia 主要针对 Ubuntu 18.04 (Bionic) release,而 ROS Indigo Igloo 则针对 Ubuntu 14.04 LTS (Trusty) release。

由于 ROC-RK3308-CC 的 ROS 系统使用的是 ROS Indigo Igloo 版本,所以我们主机这里也安装 ROS Indigo Igloo 版本进行测试,下面的简要安装教程也是主要针对 Ubuntu 14.04 (ROS Indigo),其他版本的安装教程可到官网维基查询。

平台说明​

ROS Indigo 仅仅只支持Ubuntu 13.10 (Saucy) 和 Ubuntu 14.04 (Trusty)。这里在 Ubuntu 14.04 系统上安装ROS。

安装步骤​

配置Ubuntu仓库​

允许”restricted”,”universe”,”multiverse.”。

_images/repositories.png

设置软件源​

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

或者来自中国的源:

sudo sh -c '. /etc/lsb-release && echo "deb http://ros.exbot.net/rospackage/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

可根据UbuntuMirrors自己选。

添加key​

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

安装​

1、更新软件索引:

sudo apt-get update

2、安装:

这里推荐 Desktop-Full 安装: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators and 2D/3D perception。

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

3、初始化 rosdep:

使用ROS之前,需要初始化rosdep,以解决一些系统依赖问题。

sudo rosdep init
rosdep update

4、环境配置

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

5、推荐安装 rosinstall,一个非常好用的命令行工具

sudo apt-get install python-rosinstall

6、测试

安装官方的教学例子:

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

启动其中一个例子:

roslaunch roscpp_tutorials talker_listener.launch

一切正常的话,你将会看到以下结果:

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]

使用教程​

接下来。通过我们一个简单的demo:firefly_controller,来阐述 ROS 系统的使用方式。

此 Demo 展示了如何在两台机器上使用ROS系统,详述了使用ROS_MASTER_URI来配置多台机器使用同一个master ,其主要功能是:

  • 通过PC端的键盘,控制 ROC-RK3308-CC 主板上的两个LED灯的亮灭
  • 外接温湿度传感器,获取当前的温湿度值

其中采用的温湿度传感器模块是:SHT30,盛世瑞恩出产的一款温湿度传感器,基于i2c传输协议。代码主要参考了ROC-RK3308-CC开发实例总结–SHT30温湿度模块调试。

ROC-RK3308-CC 设备端准备​

烧写固件​

按照《升级固件》进入loader模式,从固件地址: ROC-RK3308-CC_Yocto_ROS下载固件,解压,执行命令:

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

按照《上手教程》,给 ROC-RK3308-CC 主板上电开机,接上串口。上电后需要输入账号密码进入系统,输入root即可,无需密码。

注意:如果有温湿度传感器模块SHT30,先接上模块再上电,这里使用I2C1进行通信,按引脚描述图接上VCC5、GND、I2C1_SDA、I2C1_SCL即可。

初始化配置​

根文件系统里,我们放了两个小工具,方便配置环境:

ls /home/root
setup.sh wifi.sh

首先上电开机后,先连接wifi(WiFi需要和PC主机在同一网段,可互相ping通),通过脚本配置,其中ssid为你的WiFi账号,psk为你的密码

./wifi.sh $ssid $psk

接着配置 ROS 环境,这里我们将以PC主机端为master(整个ROS运行环境只需要一个master),所以这里不需要启动 roscore

source ./setup.sh $master_ip

其中master_ip是PC主机端的ip地址,这里主要配置了ROS_MASTER_URI和ROS_HOSTNAME,具体细节查看 setup.sh 脚本。

运行 demo 节点​

rosrun firefly_controller firefly_controller

等待 PC主机端 准备好即可。

PC 端准备​

注意:以下操作方法使用了catkin工具,只适用于ROS Groovy及后期版本,对于ROS Fuerte及早期版本请使用rosbuild,这里不讲述。

Demo 软件包下载​

Demo 软件包下载:firefly_iot_keyboard.tar.bz2

创建 ROS 工作空间​

如果你是初次安装 ROS,可通过catkin方式创建ROS工作空间:

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

即使这个工作空间是空的(在src目录中没有任何软件包,只有一个CMakeLists.txt链接文件),你也可以编译它。

cd ~/catkin_ws/
catkin_make

编译​

现在先将下载的Demo 软件包解压到工作空间的src目录:

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

然后编译工作空间:

cd ~/catkin_ws/
catkin_make

执行​

分别打开两个终端,每个终端都需要按以下操作配置。

配置当前工作空间为ROS工作环境的最顶层:

cd ~/catkin_ws/
source devel/setup.bash

配置ROS_HOSTNAME为主机ip地址,不然设备端那边不识别。

export ROS_HOSTNAME=$master_ip

其中一个终端运行demo键盘控制节点:

rosrun firefly_iot_keyboard keyboard.py

另一个终端运行demo接收节点

rosrun firefly_iot_keyboard receiver.py

最终效果​

效果图如下: _images/firefly_controller.png

PC 端​

注意,如果不能控制,请选中 keyboard.py 所在的终端窗口以确保你的按键输入能够被捕获。

终端键盘控制:

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

当按下r和b,将会控制设备端红蓝LED灯的亮灭,如果外接了温湿度传感器sht30,按下t将会获得设备端传过来的温湿度值,被另一”receiver.py”所在终端接受。

终端接收:

rosrun firefly_iot_keyboard receiver.py
currently:
Temperature 28.607613c Humidity 49.396507%

ROC-RK3308-CC 设备端​

串口效果:

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命令,列出活跃的节点:

rosnode list
/firefly_base_controller
/firefly_iot_keyboard
/firefly_iot_receiver
/rosout

可看到当前运行的demo,有三个节点在运行:/firefly_base_controller、/firefly_iot_keyboard、/firefly_iot_receiver

通过rostopic list命令,能够列出所有当前订阅和发布的话题:

rostopic list
/cmd_vel
/rosout
/rosout_agg
/temphumidity

这里可看到当前运行的demo有发布了两个Topic:/temphumidity、/cmd_vel

使用命令rostopic echo可以显示在某个话题上发布的数据:

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

使用工具rqt_graph查看当前 ROS 系统运行情况的图形:

rosrun rqt_graph rqt_graph

_images/rosgraph.png

这里需要事先安装 rqt_graph :

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