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."。 设置软件源 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 最终效果 效果图如下: 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 这里需要事先安装 rqt_graph : sudo apt-get install ros-indigo-rqt sudo apt-get install ros-indigo-rqt-common-plugins