**章 ROS 简介
1.1 ROS 简介
随着机器人领域的快速发展和复杂化,代码复用和模块化的需求越来越强烈,而已有的开源机器人系统又不能很好地适应该需求。2010 年WillowGarage[1] 公司发布了开源机器人操作系统ROS(robot operating system),很快在机器人研究领域展开了学习和使用ROS 的热潮。
ROS[2] 是用于机器人的一种开源的后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。ROS 还提供了库和工具来帮助软件***创建机器人的应用程序。
ROS 的主要设计目标是便于机器人研发过程中的代码复用。因此ROS 是一种分布式的进程框架,使得执行程序可以各自独立地设计,松散地、实时地组合起来。这些进程可以按照功能包和功能包集的方式分组,因而可以容易地分享和发布。ROS 也支持代码库的系统联合。
ROS 执行若干种类型的通信,包括基于服务的同步RPC 的通信、基于主题的异步数据流及参数服务器上的数据存储。虽然ROS集成了实时的代码,但它本身并不具有实时性。
ROS 的主要特点可以归结为以下几条:
(1) 点对点设计。ROS 通过点对点设计以及服务和节点管理器等机制可以分散由于计算机视觉和语音识别等功能带来的实时计算压力,这种设计能够适应服务机器人遇到的挑战。
(2) 不依赖编程语言。ROS 支持多种现代编程语言。C++、Python 和Lisp语言已经在ROS 中实现编译,并得到应用,Octave 和Java 的测试库也已经实现。为了支持多语言编程,ROS 采用了一种语言中立的接口定义语言(languageneutral
interface definition language,IDL) 来实现各模块之间的消息传送。
(3) 精简与集成。ROS 不修改用户的main() 函数。所以代码可以被其他的机器人软件使用。其优点是ROS 很容易和其他的器人软件平台集成。在计算机视觉算法方面,ROS 已经与OpenCV 实现集成。在驱动、导航和模拟器方面,ROS 已经与Player 系统实现集成。在规划算法方面,ROS 已经与OpenRAVE[3]系统实现集成。
(4) ROS-agnostic 库:**的开发模型是带有清除功能的接口实现的ROSagnostic库。
(5) 便于测试。ROS 拥有一个名为rostest 的内建单元/集成测试平台,它很容易集成调试和分解调试。
(6) 规模。ROS 适用于大型运行系统和大型程序开发。
(7) 开源。ROS 遵从BSD 协议,对个人及商业应用及修改完全免费。
ROS 在某些程度上和下列机器人架构有些相似之处:Player[4]、YARP[5]、Orocos[6]、CARMEN[7]、Orca[8]、MOOS[9] 和Microsoft Robotics Studio[10]。对于简单的无机械手的移动平台机器人来说,Player 是非常不错的选择。ROS 则不同,它被设计为适用于有机械臂和运动传感器的移动平台(倾角激光、云台、机械臂传感器)。与Player 相比,ROS 更有利于分布式计算环境。当然,Player提供了较多的硬件驱动程序,ROS 则在高层架构上提供了更多的算法应用(如集成OpenCV 的视觉算法)。
ROS 系统*早源于2007 年斯坦福大学人工智能实验室的STAIR 项目与机器人技术公司Willow Garage 的个人机器人项目(Personal Robotics Program) 之间的合作,2008 年之后由Willow Garage 公司推动其发展。目前稳定版本情况如下:
ROS Fuerte Turtle。2012 年4 月23 日发布(见图1.1)。
ROS Electric Emys。2011 年8 月30 日发布(见图1.2)。
ROS Diamondback。2011 年3 月2 日发布(见图1.3)。
ROS C Turtle。2010 年8 月2 日发布(见图1.4)。
ROS Box Turtle。2010 年3 月2 日发布(见图1.5)。
1.2 ROS 安装
ROS 目前支持的操作系统有:Ubuntu、OS X、Arch、Federa、Gentoo、OpenSUSE、Slackware、Debian。另外,还可以在Windows 和FreeBSD 上安装部分功能。由于ROS 主要支持Ubuntu 操作系统,因此,本书以Ubuntu 操作系统下的安装及使用为例,详细描述ROS 的主要框架及使用方法。
本书在成书过程中,ROS 的稳定版本为Diamondback,第六章中抓取任务的部分程序涉及ROS Electric Emys 版本,因此书中如无说明,所有程序测试以Diamondback 版本为主。
本小节以Diamondback 在Ubuntu 10.04 LTS[11, 12] 上面安装为例,介绍
ROS 安装过程。
1. 配置Ubuntu 系统
配置Ubuntu repositories 为“restricted”,“universe” 和“multiverse”。
2. 配置sources.list
设置计算机使得可以从ROS.org 接收软件。
(1) Ubuntu 10.04 (Lucid)。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu lucid
main" >/etc/apt/sources.list.d/ros-latest.list'
(2) Ubuntu 10.10 (Maverick)。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu
maverick main" >/etc/apt/sources.list.d/ros-latest.list'
(3) Ubuntu 11.04 (Natty)。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty
main" >/etc/apt/sources.list.d/ros-latest.list'
3. 设置keys
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
4. 安装
重新定向ROS 服务器:sudo apt-get update
下面提供四种版本的安装命令:
(1) 桌面完全版安装(**安装):ROS、rx、rviz、robot-generic 库、2D/3D
simulators、navigation 和2D/3D perception。
sudo apt-get install ros-diamondback-desktop-full
(2) 桌面版安装:ROS、rx、rviz 和robot-generic 库。
sudo apt-get install ros-diamondback-desktop
(3) ROS-Base:ROS 主要功能包、build 和communication 库。不安装GUI工具。
sudo apt-get install ros-diamondback-ros-base
(4) 独立的功能包集:用户也可以安装特定的ROS 功能包集。
sudo apt-get install ros-diamondback-STACK
例子:
sudo apt-get install ros-diamondback-slam-gmapping
5. 环境设置
环境变量设置是为了每次一个新的shell 被调用的时候,ROS 的环境变量自动被加入到用户的bash session 中。
echo "source /opt/ros/diamondback/setup.bash" >>~/.bashrc
. ~/.bashrc
如果安装了不止一个版本的ROS,~/.bashrc 必须是当前使用版本的**源setup.bash。
如果需要修改当前shell 的环境,可以使用下面命令:
source /opt/ros/diamondback/setup.bash
1.3 ROS 支持的机器人
ROS 官方网站上列出的支持的机器人系统如下:
AscTec Pelican/Hummingbird
Care-O-bot
Erratic
Lego NXT
TurtleBot
PR2
Shadow Robot
1.4 ROS 网上资源
ROS 官方网站给出了详细的资料:http://www.ros.org/。