ros简介

作者 易水 2025年06月19日 18:25 阅读 648

1.1 机器人时代的到来机器人时代与ROS诞生他们速度很快,具有非凡智慧与致命力量;他们不受生命周期桎梏,是未来科技的希望。机器人和仿生机器,正要从实验室的襁褓中迸裂而出,投入市场的广阔天地,运算能力的大幅进步加上最新的机器人脑部设计,为机器人科技带来前所未有的改革,毋庸置疑,机器人即将改变人类工作场所及生活状态。神爱世人,人亦钟情所造之物,如今有幸跟随时代步伐,一起创造世界,借不灭之躯,走遍险远之地,看尽世之奇伟瑰怪。曾经,机器人创新的门槛非常高。如果你想在任何应用领域开发出有分量的产品,你需要建立一整套能够实现你想法的系统:包括硬件设备,当然还有控制系统,界面接口,以及让机器人运行并作为测试平台的检测工具。“没有什么是现成的设备,除了一些很差,闭源的东西外。”随着机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,已有的开源系统已不能很好地适应需求,2010年Willow G

1.1 机器人时代的到来

机器人时代与ROS诞生

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

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

随着机器人领域的快速发展和复杂化,代码复用和模块化的需求日益强烈,已有的开源系统已不能很好地适应需求,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 Loggerhead2017.5
Kinetic Kame2016.5
Jade Turtle2015.5
Indigo lgloo2014.7
Hydro Medusa2013.9
Groovy Galapagos2012.12
Fuerte Turtle2012.4
Electric Emys2011.8
Diamondback2011.3
C Turtle2010.8
Box TurtleBox Turtle2010.3

img

1.2.3 展望

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

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

1.3 什么是ROS

1.3.1 什么是ROS

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

img 然而随着技术进步,机器人产业分工开始走向细致化、多层次化,如今的电机、底盘、激光雷达、摄像头、机械臂等等元器件都有不同厂家专门生产。社会分工加速了机器人行业的发展。而各个部件的集成就需要一个统一的软件平台,在机器人领域,这个平台就是机器人操作系统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版本
LunarUbuntu 17.04
Kinetic(建议选用)Ubuntu 16.04
JadeUbuntu 15.04
IndigoUbuntu 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三项。 如图所示:

img

配置完成后,就可以开始安装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正常启动了!

img

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

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

$ rosrun turtlesim turtlesim_node

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

$ rosrun turtlesim  turtle_teleop_key

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

img

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

1.5 安装ROS-Academy-for-Beginners教学包

在1.4节我们已经用apt工具安装好了ROS,apt安装的软件包都是二进制形式,可以在系统中直接运行,它们是ROS官方提供给用户的应用程序。然而很多时候我们需要自己做一些定制改写,或者运行第三方开发的软件包,这个时候就需要下载源代码进行编译。

本节我们下载本书配套的ROS-Academy-for-Beginners软件包,给读者演示源码包下载-编译-运行的完整流程。后续章节的主要代码都基于这个软件包,请读者按照流程下载编译。

下载源码包

在Ubuntu系统上,确保git已经安装

$ sudo apt-get install git

然后在创建一个名为tutorial_ws的工作空间,在它的的src路径下克隆ROS-Academy-for-Beginners软件包

$ cd 
$ mkdir -p tutorial_ws/src   #创建catkin工作空间
$ cd tutorial_ws/src         #进入src路径,克隆教学软件包
$ git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git

安装依赖

并且安装ROS-Academy-for-Beginners所需要的依赖

$ cd ~/tutorial_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

注意:以上命令非常重要,缺少依赖将导致软件包无法正常编译和运行。

在开始编译之前,需要确保Gazebo在7.0版本以上

$ gazebo -v  #确认7.0及以上

如果你的Gazebo版本低于7.0,则需要进行升级

$ sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
$ wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install gazebo7

编译

接着回到catkin_ws下编译

$ cd ~/tutorial_ws
$ catkin_make
$ source ~/tutorial_ws/devel/setup.bash   #刷新环境 方法一
$ rospack profile #刷新环境 方法二

注意:source命令,编译完成后必须刷新一下工作空间的环境,否则可能找不到工作空间。许多时候我们为了打开终端就能够运行工作空间中编译好的ROS程序,我们习惯把source ~/tutorial_ws/devel/setup.bash命令追加到~/.bashrc文件中(rosacademy_ws替换为你的工作空间名称),这样每次打开终端,系统就会刷新工作空间环境。你可以通过echo "source ~/tutorial_ws/devel/setup.bash" >> ~/.bashrc命令来追加。

运行仿真程序

编译完成后就可以运行本教学配套的仿真了,输入

$ rospack profile
$ roslaunch robot_sim_demo robot_spawn.launch

你会看到仿真画面启动,仿真界面中包括了软件博物馆和Xbot机器人模型。


img

再打开一个新的终端,输入以下命令,用键盘控制机器人移动

$ rosrun robot_sim_demo robot_keyboard_teleop.py

聚焦控制程序窗口,按下i、j、l等按键,这样你就可以通过键盘来控制机器人的移动了。

当你完成了这一步,首先恭喜你,你已经完成了ROS最常见的源码下载-安装依赖-编译-运行的流程,在ROS社区有许许多多这样的软件包,基本都按照这样的流程来运行。相信你一定可以举一反三。


键盘控制仿真机器人移动这个demo展现了ROS分布式消息收发的特性。我们打开的虽然是键盘控制程序,但它可以替换为手柄控制、手机平板控制、甚至是路径规划自动控制。模拟器里的机器人并不关心是谁发给它的消息,它只关心这个消息是什么(速度、角速度等指令)。所以,每一个进程(节点)都各司其职,负责不同的任务,同时定义好消息收发的接口。如果我们现在要做路径规划任务,那么我们只用单独再开发一个节点,同样向底盘发送我们解算出的速度/角速度指令就可以了。 你现在可能对ROS工作方式还一无所知,不过不要紧。后续我们会对ROS涉及的这些概念进行详细介绍,等你看完了这本书,你就能明白整个ROS框架运行的原理,甚至自己能编程实现一些功能模块了。


img


1.6 二进制包 vs. 源代码包

1.6.1 二进制包与源代码包

在1.4节我们通过apt方式安装了ROS系统以及相关的软件包,而在1.5节我们通过下载源码编译的方式安装了一个ROS教学软件包。这是两种常见的软件包安装方式,通常我们的软件包(Package)就可以分为二进制和源代码。

二进制包里面包括了已经编译完成,可以直接运行的程序。你通过sudo apt-get install来进行下载和解包(安装),执行完该指令后就可以马上使用了。因此这种方式简单快捷,适合比较固定、无需改动的程序。

而源代码包里是程序的原始代码,在你的计算机上必须经过编译,生成了可执行的二进制文件,方可运行。一些个人开发的程序、第三方修改或者你希望修改的程序都应当通过源代码包的来编译安装。

区别二进制包源代码包
下载方式apt-get install/直接下载debgit clone/直接下载源代码
ROS包存放位置/opt/ros/kinetic/通常~/catkin_ws/src
编译方式无需编译通过make/cmake/caktin
来源官方apt软件源开源项目、第三方开发者
扩展性无法修改通过源代码修改
可读性无法查看源代码方便阅读源代码
优点下载简单,安装方便源码可修改,便于定制功能
缺点无法修改编译工具、软件包依赖、版本和参数
应用场景基础软件需要查看、开发和修改的程序

在1.4中,我们用apt-get安装了ROS及其组件,因此我们不需要编译就可以运行turtlesim程序。对于这些程序,除非我们做操作系统的设计开发才会去下载源码,否则直接用官方提供的ROS软件包;而在1.5中,ROS-Academy-for-Beginners以源码呈现,你可以看到每个demo下面的C++代码。对于这些源文件我们必须caktin_make编译,然后才能运行。

1.6.2 ROS二进制包的安装

在ROS中,我们可能经常会遇到缺少相关的ROS依赖的问题。有些时候你编译或者运行一些ROS程序,系统会提示找不到XXX功能包,如图所示。

遇到这样的问题,请先注意阅读错误原因,看看是否有解决方法,也可以Google一下。如果是缺少ROS的依赖,通常可以用以下命令来安装:

$ sudo apt-get install ros-kinetic-PACAKGE

将PACKAGE替换为系统提示缺啥少的软件包,例如

$ sudo apt-get install ros-kinetic-slam-gmapping   #GMapping-SLAM算法包
$ sudo apt-get install ros-kinetic-turtlebot-description  #Turtlebot机器人模型包

所有APT官方中的ROS功能包都是按照ros--的形式来命名。



发表评论