ROS课程讲义--第一章 ROS简介

第一章 ROS简介

本章简介

机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便、功能强大,特别适用于机器人这种多节点多任务的复杂场景。 因此自ROS诞生以来,受到了学术界和工业界的欢迎,如今已经广泛应用于机械臂、移动底盘、无人机、无人车等许多种类的机器人上。

本章介绍ROS的产生、发展、特点和安装方法,带给你一个简单直观的ROS介绍。

1.1 机器人时代的到来

机器人时代与ROS诞生

他们速度很快,具有非凡智慧与致命力量;他们不受生命周期桎梏,是未来科技的希望。机器人和仿生机器,正要从实验室的襁褓中迸裂而出,投入市场的广阔天地,运算能力的大幅进步加上最新的机器人脑部设计,为机器人科技带来前所未有的改革,毋庸置疑,机器人即将改变人类工作场所及生活状态。神爱世人,人亦钟情所造之物,如今有幸跟随时代步伐,一起创造世界,借不灭之躯,走遍险远之地,看尽世之奇伟瑰怪。

曾经,机器人创新的门槛非常高。如果你想在任何应用领域开发出有分量的产品,你需要建立一整套能够实现你想法的系统:包括硬件设备,当然还有控制系统,界面接口,以及让机器人运行并作为测试平台的检测工具。“没有什么是现成的设备,除了一些很差,闭源的东西外。”

ROS课程讲义--第一章 ROS简介_第1张图片

随着机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,已有的开源系统已不能很好地适应需求,2010年Willow Garage公司发布了开源机器人操作系统ROS。

1.2 ROS发展历程

1.2.1 ROS起源与发展

本世纪开始,关于人工智能的研究进入了大发展阶段,包括全方位的具体的AI,例如斯坦福大学人工智能实验室STAIR(Stanford Artificial Intelligence Robot)项目,该项目组创建了灵活的、动态的软件系统的原型,用于机器人技术。在2007年,机器人公司Willow Garage和该项目组合作,他们十分具有前瞻性的,提供了大量资源进一步扩展了这些概念,经过具体的研究测试实现之后,无数的研究人员将他们的专业性研究贡献到ROS核心概念和其基础软件包,这期间积累了众多的科学研究成果。ROS软件的开发自始至终采用开放的BSD协议,在机器人技术研究领域逐渐成为一个被广泛使用的平台。

Willow Garage公司和斯坦福大学人工智能实验室合作以后,在2009年初推出了ROS0.4,这是一个测试版的ROS,现在所用的系统框架在这个版本中已经具有了初步的雏形。之后的版本才正式开启了ROS的发展成熟之路。

1.2.2 历代ROS版本

ROS1.0版本发布于2010年,基于PR2机器人开发了一系列机器人相关的基础软件包。随后ROS版本迭代频繁,目前已经发布到了Lunar。 目前使用人数最多的是Kinetic和Indigo这两个Long Term Support版本。

ROS版本 发布时间
Lunar Loggerhead 2017.5
Kinetic Kame 2016.5
Jade Turtle 2015.5
Indigo lgloo 2014.7
Hydro Medusa 2013.9
Groovy Galapagos 2012.12
Fuerte Turtle 2012.4
Electric Emys 2011.8
Diamondback 2011.3
C Turtle 2010.8
Box TurtleBox Turtle 2010.3

1.2.3 展望

ROS的发展逐渐的趋于成熟,近年来也逐步是面对着Ubuntu的更新而更新,这说明ROS已经初步进入一种稳定的发展状态,每年进行一次更新的频率同时还保留着长期支持的版本,这使得ROS在稳步的前进发展同时,也有着开拓创新的方向。目前越来越多的机器人、无人机甚至无人车都开始采用ROS作为开发平台,尽管ROS在实用方面目前还存在一些限制,但前途非常光明。

2018年ROS2 1.0版将发布,未来ROS2将如何影响机器人领域,我们拭目以待。相信在人工智能的大发展、人机交互越来越密切、互联网+的大时代,ROS会发挥出越来越重要的作用。

1.3 什么是ROS

1.3.1 什么是ROS

机器人是一个系统工程,它涉及机械、电子、控制、通信、软件等诸多学科。以前,开发一个机器人需要花很大的功夫,你需要设计机械、画电路板、写驱动程序、设计通信架构、组装集成、调试、以及编写各种感知决策和控制算法,每一个任务都需要花费大量的时间。因此像电影《钢铁写》中那样,仅靠一个人的力量造出一个动力超强的人形机器人机甲是不可能的。

然而随着技术进步,机器人产业分工开始走向细致化、多层次化,如今的电机、底盘、激光雷达、摄像头、机械臂等等元器件都有不同厂家专门生产。社会分工加速了机器人行业的发展。而各个部件的集成就需要一个统一的软件平台,在机器人领域,这个平台就是机器人操作系统ROS。

ROS是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为他们提供了通信架构。ROS虽然叫做操作系统,但并非Windows、Mac那样通常意义的操作系统,它只是连接了操作系统和你开发的ROS应用程序,所以它也算是一个中间件,基于ROS的应用程序之间建立起了沟通的桥梁,所以也是运行在Linux上的运行时环境,在这个环境上,机器人的感知、决策、控制算法可以更好的组织和运行。

以上几个关键词(框架、中间件、操作系统、运行时环境)都可以用来描述ROS的特性,作为初学者我们不必深究这些概念,随着你越来越多的使用ROS,就能够体会到它的作用。

1.3.2 ROS特点

ROS具有这些特点:

  • 分布式 点对点

    ROS采用了分布式的框架,通过点对点的设计让机器人的进程可以分别运行,便于模块化的修改和定制,提高了系统的容错能力。

  • 多种语言支持

    ROS支持多种编程语言。C++、Pyhton和已经在ROS中实现编译,是目前应用最广的ROS开发语言,Lisp、C#、Java等语言的测试库也已经实现。为了支持多语言编程,ROS采用了一种语言中立的接口定义语言来实现各模块之间消息传送。通俗的理解就是,ROS的通信格式和用哪种编程语言来写无关,它使用的是自身定义的一套通信接口。

  • 开源社区

    ROS具有一个庞大的社区ROS WIKI(http://wiki.ros.org/ ),这个网站将会始终伴随着你ROS开发,无论是查阅功能包的参数、搜索问题还是。当前使用ROS开发的软件包已经达到数千万个,相关的机器人已经多达上千款。此外,ROS遵从BSD协议,对个人和商业应用及修改完全免费。这也促进了ROS的流行。

1.3.3 ROS优缺点

ROS为我们开发机器人带来了许多方便,然而它也确实存在一些问题:

优点 缺点
提供框架、工具和功能 通信实时性能有限
方便移植 系统稳定性尚不满足工业级要求
庞大的用户群体 安全性上没有防护措施
免费开源 仅支持Linux(Ubuntu)

总体来说,ROS更适合科研和开源用户使用,如果在工业场景应用(例如无人驾驶)还需要做优化和定制。 为了解决实际应用的问题,ROS2.0做了很大的改进,目前正在开发之中,未来表现如何值得期待。

1.4 安装ROS的步骤

1.4.1 ROS版本选择

ROS目前只支持在Linux系统上安装部署,它的首选开发平台是Ubuntu。时至今日ROS已经相继更新推出了多种版本,供不同版本的Ubuntu开发者使用。为了提供最稳定的开发环境,ROS的每个版本都有一个推荐运行的Ubuntu版本。如下表所示:

ROS 版本 首选Ubuntu版本
Lunar Ubuntu 17.04
Kinetic(建议选用) Ubuntu 16.04
Jade Ubuntu 15.04
Indigo Ubuntu 14.04
... ...

本教程使用的平台是Ubuntu 16.04,ROS版本是Kinetic

如果你还没有安装Ubuntu,建议选择16.04版本(https://www.ubuntu.com/download/desktop )。并且我们建议在本地安装,不推荐用虚拟机,这样兼容性更好。

如果你已经安装Ubuntu,请确定系统版本,在终端中输入cat /etc/issue确定Ubuntu版本号,然后选择对应的ROS版本。如果没有安装正确的ROS版本,就会出现各种各样的依赖错误,所以安装时请谨慎。

更多信息请参考ROS官方网站进行下载和安装。

1.4.2 安装ROS

在正式的安装前,先检查下Ubuntu初始环境是否配置正确。

打开Ubuntu的设置->软件与更新->Ubuntu软件->勾选关键字universe,restricted,multiverse三项。 如图所示:

ROS课程讲义--第一章 ROS简介_第2张图片

配置完成后,就可以开始安装ROS了,打开终端。

① 添加sources.list

$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

这一步配置将镜像添加到Ubuntu系统源列表中,建议使用国内或镜像源,这样能够保证下载速度。本例使用的是中国科技大学的源。

② 添加keys

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

公钥是Ubuntu系统的一种安全机制,也是ROS安装中不可缺的一部分。

③ 系统更新

$ sudo apt-get update && sudo apt-get upgrade

更新系统,确保自己的Debian软件包和索引是最新的。

④ 安装ROS

ROS中有很多函数库和工具,官网提供了四种默认的安装方式,当然也可以单独安装某个特定的软件包。这四种方式包括桌面完整版安装、桌面版安装,基础版安装、单独软件包安装。推荐安装桌面完整版安装(包含ROS、rqt、rviz、通用机器人函数库、2D/3D仿真器、导航以及2D/3D感知功能),如下:

  • Ubuntu 16.04安装Kinetic版本

      $ sudo apt-get install ros-kinetic-desktop-full # Ubuntu 16.04
    
  • Ubuntu 14.04安装Lndigo版本

      $ sudo apt-get install ros-indigo-desktop-full # Ubuntu 14.04
    

如果你不想安装桌面完整版,你还可以尝试以下三种方式安装:

  • 桌面版安装(包含ROS、rqt、rviz以及通用机器人函数库)

      sudo apt-get install ros-kinetic-desktop
    
  • 基础版安装(包含ROS核心软件包、构建工具以及通信相关的程序库,无GUI工具)

      sudo apt-get install ros-kinetic-ros-base
    
  • 单独软件包安装(这种安装方式在运行ROS缺少某些package依赖时会经常用到。你可以安装某个指定的ROS软件包,使用软件包名称替换掉下面的PACKAGE)

      sudo apt-get install ros-kinetic-PACKAGE
    

    例如系统提示找不到slam-gmapping,你就可以:

      sudo apt-get install ros-kinetic-slam-gmapping
    

    要查找可用的软件包,请运行:

      apt-cache search ros-kinetic
    

软件包的依赖问题还可能出现在重复安装ROS、错误安装软件包的过程中,出现有一些软件包无法安装,例如:

下列软件包有未满足的依赖关系:ros-kinetic-desktop-full : 
依赖: ros-kinetic-desktop 但是它将不会被安装;
依赖: ros-kinetic-perception 但是它将不会被安装;
依赖: ros-kinetic-simulators 但是它将不会被安装;
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

出现上述问题,有可能是自己的版本不合适不兼容造成,也可能是镜像源没有更新,具体的设置参考软件和更新的截图。当然也有可能是其他原因,比如更新了忘记刷新环境source一下,重开一个终端等等。具体的问题原因可以去搜索引擎上尝试求助解决,或者登陆ROS Wiki(ROS的百科全书)去查询解决自己的具体问题。

1.4.3 配置ROS

配置ROS是安装完ROS之后必须的工作。

① 初始化rosdep

$ sudo rosdep init && rosdep update

这一步初始化rosdep,是使用ROS之前的必要一步。rosdep可以方便在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必需用到的工具。

② ROS环境配置

#For Ubuntu 16.04
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

#For Ubuntu 14.04
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc

注意: ROS的环境配置,使得你每次打开一个新的终端,ROS的环境变量都能够自动配置好,也就是添加到bash会话中,因为命令source /opt/ros/kinetic/setup.bash 只在当前终端有作用,即具有单一时效性,要想每次新开一个终端都不用重新配置环境,就用echo语句将命令添加到bash会话中。

③ 安装rosinstall

rosinstall 是ROS中一个独立分开的常用命令行工具,它可以方便让你通过一条命令就可以给某个ROS软件包下载很多源码树。在ubuntu上安装这个工具,请运行:

$ sudo apt-get install python-rosinstall

至此,ROS的安装就结束了,下面测试ROS能否正常运行。

1.4.4 测试ROS

首先启动ROS,输入代码运行roscore:

$ roscore

如果出现下图所示,那么说明ROS正常启动了!

ROS课程讲义--第一章 ROS简介_第3张图片

接着我们测试ROS的吉祥物--小海龟,来简单的测试ROS运行是否正常,同时也来体验一下ROS的神奇与精彩!

启动roscore后,重新打开一个终端窗口,输入:

$ rosrun turtlesim turtlesim_node

你还看到一只萌萌的海龟出现在屏幕上,那么该怎么样来操纵这只小海龟呢?重新打开新的一个终端,输入:

$ rosrun turtlesim  turtle_teleop_key

将鼠标聚焦在第三个终端窗口上,然后通过键盘上的方向键,进行操作小海龟,如果小海龟正常移动,并且在屏幕上留下自己的移动轨迹,如下图。恭喜你,ROS已经成功的安装、配置并且运行!

ROS课程讲义--第一章 ROS简介_第4张图片

至此,ROS的安装、配置与测试就全部结束了,下面就正式开启ROS精彩的旅程!

你可能感兴趣的:(linux,ROS,ROS课程讲义)