移动机器人SLAM技术 课件 【ch08】机器人操作系统_第1页
移动机器人SLAM技术 课件 【ch08】机器人操作系统_第2页
移动机器人SLAM技术 课件 【ch08】机器人操作系统_第3页
移动机器人SLAM技术 课件 【ch08】机器人操作系统_第4页
移动机器人SLAM技术 课件 【ch08】机器人操作系统_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

机器人操作系统第八章大学生礼仪高等院校公共课系列精品教材01ROS简介PARTONE01ROS的发展ROS是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为它们提供了通信架构。ROS虽然叫作机器人操作系统,但并非Windows、Mac那种通常意义上的操作系统,它只是连接了操作系统和开发的ROS应用程序,所以它算是一个中间件,基于ROS的应用程序建立起了沟通的桥梁,它也运行在Limx上的运行环境中,在这个环境中,机器人的感知、决策、控制算法可以更好地组织和运行。01ROS的发展21世纪开始,关于人工智能的研究进入了大发展阶段,包括全方位的、具体的人工智能,如斯坦福大学人工智能实验室的斯坦福人工智能机器人(StanfordArtificialIntelligenceRobot)项目。该项目组创建了灵活的、动态的软件系统的原型,用于机器人技术。在2007年,机器人公司WillowGarage和该项目组合作,十分具有前瞻性地提供了大量资源进一步扩展了这些概念,经过具体的研究测试实现之后,无数的研究人员将他们的专业性研究贡献到ROS的核心概念和其基础软件包中,这期间积累了众多的科学研究成果。ROS软件的开发自始至终来用开放的BSD协议,在机器人技术研究领域逐渐成为一个被广泛使用的平台。01ROS的发展WillowGarage公司和斯坦福大学人工智能实验室合作以后,在2009年初推出了ROS0.4,这是一个测试版的ROS,现在所用的系统框架在这个版本中已经具有了初步的雏形,之后的版本才正式开启了ROS的发展成熟之路。ROS1.0版本发布于2010年,它基于PR2机器人开发了一系列与机器人相关的基础软件包。随后ROS的版本迭代频繁,目前使用人数最多的是Kinetic和Indigo这两个长期支持的版本。01ROS的发展ROS的发展逐渐地趋于成熟,近年来也逐步随着Ubuntu的更新而更新,这说明ROS已经初步进入一种稳定的发展状态,每年进行一次更新同时还保留着长期支持的版本,这使得ROS在稳步地前进发展的同时,也有开拓创新的方向。具前越来越多的机器人、无人机甚至无人车都开始采用ROS作为开发平台,尽管目前ROS在实用方面还存在一些限制,但前途非常光明。01ROS的安装ROS目前只支持在Linux系统上安装部署,它的首选开发平台是Uountu。时至今日,ROS已经相继更新推出了多种版本,供不同版本的Ubuntu开发者使用。为了提供最稳定的开发环境,ROS的每个版本都有一个推荐运行的Ubuntu版本。本书使用的平台是Ubuntu16.04,ROS版本是Kinetic。1.配置软件库打开Ubuntu的设置窗口,单击其中的“Sofiware&Updates”按钮,在打开的“Software&Updates”窗口中单击“UbuntuSofware”选项卡,这时将进入其子页面,从中勾选“(universe)”"(restricted)"“(multiverse)”复选框。01ROS的安装2.设置软件源(1)首先添加sources.list。swaoaoe/Cc/lob-leleiseauecnodashelmicatintnghaoneeto/aptsoorcea/rolateetile这一步配置将镜像添加到Ubuntu系统源列表中,建议使用国内镜像源,这样能够保证下载速度。本例使用的是清华大学的源。(2)然后添加keys。sudoant-keyaw-keyoryerhkpkeysarvetao/cecy-keOC31SGBAD28869B172HA42D6PEN017C65若无法连接到密钥服务器,可以尝试替换上面命令中的hkp:/:80为hkp://:80,也可以使用cur命令替换apt-key命令,这在使用代理服务器的情况下比较有用。Cuntasnoeksucps/ioo?opstkete-oxciorsesissoe68072820B14ta公钥是Ubuntu系统的一种安全机制,也是ROS安装中不可或缺的一部分。dee(3)最后进行系统更新。更新系统,确保自己的Debian软件包和索引是最新的。01ROS的安装3.安装ROSROS中有很多函数库和工具,官网提供了4种默认的安装方式,当然也可以单独安装某个特定的软件包。这4种安装方式包括桌面完整版安装、桌面版安装、基础版安装、单独软件包安装。推荐桌面完整版,其安装如下:号:ioeptetanecaltfos-kinetid-deskrop-ntubontu16.d01配置ROS1.初始化rosdep在开始使用ROS之前还需要初始化rosdep。rosdep可以在用户需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必须用到的工具。sudoxosdepiniteppdat2.ROS的环境配置输入命令行:sacho"source/opt/ros/kinetic/setupbath"bashrc注意:RDS的环境配置使得用户每次打开一个新的终端时,ROS的环境变量都能够自动配置好,也就是添加到bash会话中。3.安装rosinstallrosinstall是ROS中一个独立分开的常用命令行工具,它可以方便用户通过一条命令给某个ROS软件包下载很多源码树。在Ubuntu上安装这个工具,请运行sodeaptgotinstairprtion-rosinsta11海.至此,ROS的安装就结束了,下面测试ROS能否正常运行。01测试ROS首先启动R08,输入代码运行roscore。toscore同时通过rosnode可以获取节点信息。01测试ROS启动roscore后,重新打开一个终端窗口,输入osstutietortlsimnod一只小海龟将出现在屏幕上,并可以通过重新打开一个新的终端,输入下述命令来控制小海龟运动。zoorunturciasimturtleteieoP_ker将鼠标聚焦在第三个终端窗口上,然后通过键盘上的方向键操作小海龟,小海龟可以正常移动,并且在屏幕上留下自己的移动轨迹,其运行示意图如图8.3所示。至此,ROS已经成功地安装、配置并且运行。02atkin文件系统PARTONE02catkin编译系统早期的ROS编译系统是rosbuild,但随着ROS的不断发展,rosbuild逐渐暴露出许多缺点,不能很好地满足系统需要。在Groovy版本面世后,catkin作为rosbuild的替代品被正式投入使用。catkin的操作更加简化且工作效率更高,可移植性更好,而且支持交叉编译和更加合理的功能包分配。县前的ROS同时支持着rosbuild和catkin两种编译系统,但ROS的核心软件包已经全部转换为catkin,rosbuild已经被逐步淘汰,所以建议初学者直接上手catkin。对于源代码包,我们只有编译才能在系统上运行。Linux下的编译器有gcc、g++,随着源文件的增加,直接用gcc/g++命令的方式显得效率低下,人们开始用Makefile来进行编译。然而随着工程体量的增大,Makefile也不能满足需求,于是便出现了CMake工具。CMake是make工具的生成器,是更高层的工具,它简化了编译构建过程,能够管理大型项目,具有良好的扩展性。ROS这样大体量的平台采用的就是CMake,并且ROS对CMake进行了扩展,于是便有了catkin编译系统。。02catkin编译系统1.catkin的特点catkin是基于CMake的编译构建系统,一个catkin的软件包必须包括package.xml和CMakeLists,txt这两个文件,且具有以下特点。(1)沿用了包管理的传统像find_package()的基础结构pkg-config。(2)扩展了CMake,如软件包编译后无须安装就可使用,可自动生成find_package()代码、pkg-config文件,解决了多个软件包的构建顺序问题。02catkin编译系统2.catkin的工作原理catkin编译的工作流程如下。(1)首先在工作空间catkin_ws/src/下递归地查找其中每一个ROS的package.(2)package中会有package.xml和CMakeLists.txt文件,catkin(CMake)编译系统依据CMakeLists.txt文件生成makeflles文件(放在catkin_ws/build/下)。(3)make刚刚生成的makefiles等文件编译链接生成可执行文件(放在catkin_ws/devel下)。也就是说,catkin就是将CMake与make指令做了一个封装,从而完成整个编译过程的工具。02catkin编译系统

操作更加简单。1一次配置,多次使用。2跨依赖项目编译。3catkin的突出优点02catkin编译系统3.使用catkin_make进行编译要用catkin编译一个工程或软件包,只需要用catkin_make指令即可。一般写完代码时,执行一次catkin_make进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。编译的一般流程如下。scd/catkinws计回到工作查间,catkiamake必须在工作空间下执行scatkihmake开始辅5source~/catkinwilaeyel/setup;bash新环统注意:catkin编译之前需要回到工作空间目录,catkin_make在其他路径下编译不会成功。编译完成后,如果有新的目标文件产生(原来没有),那么一般紫跟着要source刷新环境,使系统能够找到刚才编译生成的ROS可执行文件。这个细节被遗漏会致使后面出现可执行文件无法打开等错误。02catkln工作空间catkin工作空间是创建、修改、编译catkin软件包的目录。catkin的工作空间,直观地形容为一个仓库,里面装载着ROS的各种项目工程,便于系统组织、管理、调用,在可视化图形界面里是一个文件夹。用户自己写的ROS代码通常就放在catkin工作空间中,本节就来介绍catkin工作空间的结构。02catkln工作空间1.初始化catkin工作空间介绍完catkin编译系统,我们来建立一个catkin工作空间。首先要在计算机上创建一个初始的catkin_ws/路径,这也是catkin工作空间结构的最高层级。输入下列指令,完成初始创建。mkdirpcatkinyserScahcatktnmeke初效化工种安同第一行代码直接创建了第二层级的文件夹src,这也是用户放ROS软件包的地方。第二行代码使得进程进入工作空间,然后再是catkin_make。注意:①catkin_make命令必须在工作空间这个路径上执行;②原先的初始化命令catkin_init_workspace仍然保留。02catkln工作空间2、结构介绍catkin的结构十分清晰,在工作空间下用tree命令可显示文件结构。5od-/catkin_wsssudoaptinatauitreetceecatkin工作空间结构包括sre(ROS的catkin软件包,即源代码包),build[catkin(CMake)的缓存信息和中间文件],devel[生成的目标文件(包括头文件、动态链接库、静态链接库、可执行文件等)、环境变量]三个路径,在有些编译选项下也可能包括其他内容,但这三个文件夹是catkin编译系统默认的。通常后两个路径由catkin系统自动生成、管理,用户日常的开发一般不会涉及,而主要用到的是src文件夹,用户写的ROS程序、网上下载的ROS源代码包都存放在这里。在编译时,catkin编译系统会递归地查找和编译src/下的每一个源代码包,因此也可将几个源代码包放到同一个文件夹下。02package功能包ROS中package的定义更加具体,它不仅是Linux上的软件包,更是catkin编译的基本单元,用户调用的cakin_make编译的对象就是一个个ROS的package,也就是说,任何ROS程序只有组织成package才能编译。所以package也是ROS源代码存放的地方,任何ROS的代码无论是C++还是Python都要放到package中,这样才能正常地编译和运行。一个package可以编译出多个目标文件(ROS可执行程序、动态静态库、头文件等)。02package功能包1.package的结构一个package下常见的文件、路径如下。其中定义package的是CMakeLists.txt和package.xml两个文件,这两个文件是package中必不可少的,catkin编译系统在编译前,首先要解析这两个文件,这两个文件就定义了一个package。通常ROS的文件组织都会按照以上的形式,这是约定俗成的命名习惯,建议遵守以上路径,只有CMakeLists.txt和package.xml是必需的,其余路径根据软件包是否需要来决定。02package功能包2.package的创建创建一个package需要在catkin_ws/src下用到catkin_create_pkg命令,用法是catkin_createpkgpackagedepends。其中package是包名,depends是依赖的包名,可以依赖多个软件包。这样就会在当前路径下新建testpkg软件包,包括:catkin_create_pkg帮忙完成了软件包的初始化,填充好了CMakeLists.xt和package.xml两个文件,并且将依赖项填进了这两个文件中。02package功能包3.package的相关命令rostopic常用命令包括rospack(是对package管理的工具)、roscd(类似于Linux系统的od,改进之处在于roscd可以直接cd到ROS的软件包)、rosls(可视为Linux指令is的改进版,可以直接列出ROS软件包的内容)、rosdep(用于管理ROSpackage依赖项的命令行工具)。rostopic常用命令及作用如表所示。02package功能包1.CMakeLists.txtCMakeLists.txt原本是CMake编译系统的规则文件,而catkin编译系统基本沿用CMake的编译风格,只是针对ROS工程添加了一些宏定义,所以在写法上,catkin的CMakeLists,xt与CMake基本一致。这个文件直接规定了这个package要依赖哪些package、要编译生成哪些目标、如何编译等流程,所以CMakeLists.tut非常重要,它指定了由源码到目标文体的规则。catkin编译系统在工作时首先会找到每个package下的CMakeLists.st文件,然后按照规则来编译构建。CMakeLists,txt的基本语法按照的是CMake的语法,而catkin在其中加入了少量的宏。可阅读相关书籍进行学习,掌握CMake语法对理解ROS工程很有帮助。02package功能包2.package.xmlpackage.xml也是一个catkin的package必备文件,它是这个软件包的描述文件,在较早的ROS版本(rosbuild编译系统)中,这个文件叫作manifestxml,用于描述package的基本信息。如果用户在网上看到一些ROS项目里包含manifestxm!文件,那么它多半是Hydro版本之前的项目了。package.xml包含了package的包名、版本号、内容描述、维护者、软件许可证、编译构建工具、编译依赖项、运行依赖项等信息。实际上rospackfind、rosdep等命令之所以能快速定位和分析出package的依赖项信息,就是因为直接读取了每一个package中的package.xml文件。它为用户提供了快速了解一个package的渠道。02package功能包packagexml遵循xml标签文本的写法,由于版本更迭原因,现在有两种格式并存,不过区别不大。老版本和新版本package.xml包含的标签分别如表8.2和表8.3所示。02package功能包目前Indigo、Kinetic、Lunar等版本的ROS都同时支持两种版本的package.xml,所以无论选哪种格式都可以。02package功能包3.其他常见文件类型在ROS的package中,还有许多其他常见的文件类型。(1)launch文件,launch文件一般以leunch或xml结尾,它对ROS需要的运行程序进行了打包,通过一句命令来启动。一般launch文件中会指定要启动哪些package下的哪些可执行程序,指定以什么参数启动,以及一些管理控制的命令。launch文件通常放在软件包的launch/路径中。(2)msg/srv/action文件。ROS程序中可能有一些自定义的msg/srv/action文件,为程序的开发者所设计的数据结构,这类文件以msg,.srv,action结尾,通常放在package的msg',srv/,action/路径下。(3)urdf/xacro文件。urdf/xacro文件是机器人模型的描述文件,以,urdf或.xacro结尾。它定义了机器人的连杆和关节信息,以及它们之间的位置、角度等信息,通过urdf文件可以将机器人的物理连接信息表示出来,并在可视化调试和仿真中显示。02package功能包(4)yaml文件。yaml文件一般存储ROS需要加载的参数信息、一些属性的配置。通常在launch文件或程序中读取yaml文件,把参数加载到参数服务器上。通常我们会把yaml文件存放在param/路径下。(5)dae/stl文件。dae/stl文件是3D模型文件,机器人的urdf文件或仿真环境通常会引用这类文件,它们描述了机器人的三维模型。相比于urdf文件简单定义的性状,dae/stl文件可以定义复杂的模型,可以直接从SolidWorks或其他建模软件中导出机器人装配模型,从而显示出更加精确的外形。(6)rviz文件。ryiz.文件本质上是固定格式的文本文件,其中存储了RViz窗口的配置。通常rviz文件不需要我们去手动修改,而是直接在RViz工具里保存,下次运行时直接读取。03ROS通信机制PARTONE03topicROS的通信方式是ROS最为核心的概念,ROS的精髓就在于它提供的通信架构。ROS的通信方式有4种:话题(Topic)、服务(Service)、参数服务器和动作库(Actionlib)。在ROS的通信方式中,topic是常用的一种。对于实时性、周期性的消息,使用topic来传输是最佳的选择。topic是一种点对点的单向通信方式,这里的“点”指的是node,也就是说nede之间可以通过topic方式来传递信息。topic要经历下面几步初始化过程:首先,publisher节点和subscriber节点都要到节点管理器进行注册,然后publisher会发布topic,subscriber在master的指挥下会订阅该topic,从而建立起sub-pub之间的通信。注意整个过程是单向的。subscriber接收消息会进行处理,一般这个过程叫作回调(Callback)。所谓回调就是提前定义好一个处理函数(写在代码中),当有消息来时就会触发这个处理函数,函数会对消息进行处理。03topic图8.4所示为ROS的topic通信方式的流程示意图。topic通信属于一种异步的通信方式。下面我们通过一个示例来了解如何使用topic通信。03topic在实际应用中,我们应该熟悉topic的几种使用命令,表8.4所示为topic命令及作用。03service在这种情况下,就需要有另外一种请求-应答的通信模型。这节我们来介绍ROS通信中的另一种通信方式——service。为了解决以上问题,service方式在通信模型上与topic方式有些区别。service通信是双向的,它不仅可以发送消息,而且还会收到反馈。因此service包括两部分:一部分是请求方(Client),另一部分是应答方/服务提供方(Server)。这时请求方就会发送一个请求,要等待应答方处理,反馈一个回复,这样通过类似“请求-应答”的机制完成整个服务通信。我们知道topic是ROS中的一种单向的异步通信方式,然而有些时候单向的通信方式满足不了通信要求,如当一些节点只是临时而非周期性地需要某些数据时,如果用topic通信方式就会消耗大量不必要的系统资源,造成系统的低效率、高功耗。03serviceservice通信方式的示意图如图8.5所示。节点B是应答方,提供了一个服务的接口,叫作/service,我们一般都会用string类型来指定service的名称,类似于topic。节点A向节点B发布了请求,经过处理后得到了回复。service是同步通信方式,所谓同步就是说,此时节点A发布请求后会在原地等待回复,直到节点B处理完了请求并且完成了回复,节点A才会继续执行。节点A在等待过程中是处于阻塞状态的通信,这样的通信模型没有频繁的消总传递,没有冲突与高系统资源的占用,只有接受请求才执行服务,简单而且高效。03service在实际应用中,service通信方式的命令是rosservice,rosservice命令及作用如表8.5所示。03actionactionlib是ROS中一个很重要的库,类似service通信机制,actionlib也是一种请求应答机制的通信方式,actionlib主要弥补了service通信的一个不足,就是当机器人执行一个长时间的任务时,假如利用service通信,那么publisher会很长时间接收不到反馈的回复,致使通信受阻。当service通信不能很好地完成任务时,actionlib比较适合实现长时间的通信过程,actionlib通信过程可以随时被查看过程进度,也可以终止请求,这样的一个特性使得它在一些特别的机制中拥有很高的效率。action的工作原理是请求-应答模式,也是一个双向的通信模式。通信双方在ROSActionProtocol下通过消息进行数据的交流通信。请求方和应答方为用户提供一个简单的API来请求目标(在客户端)或通过函数调用和回调来执行目标(在服务器端)。04ROS工具PARTONE04仿真工具GazeboGazebo是一个机器人仿真工具、模拟器,也是一个独立的开源机器人仿真平台。当今市面上还有其他的仿真工具,如V-REP、Webots等,但是Gazeba不仅开源,也是兼容ROS最好的仿真工具。Gazebo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论