ros探索总结——ros简介

yrm1160029237 yrm1160029237     2023-01-14     793

关键词:

转自古-月

ROS探索总结(一)——ROS简介

 

一、历史

       随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求。2010年Willow Garage公司发布了开源机器人操作系统ROS(robot operating system),很快在机器人研究领域展开了学习和使用ROS的热潮。

技术分享图片

       ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage的个人机器人项目(Personal Robots Program)之间的合作,2008年之后就由Willow Garage来进行推动。已经有四年多的时间了 (视频)。随着PR2那些不可思议的表现,譬如叠衣服,插插座,做早饭,ROS也得到越来越多的关注。Willow Garage公司也表示希望借助开源的力量使PR2变成“全能”机器人。

       PR2价格高昂,2011年零售价高达40万美元。PR2现主要用于研究。PR2有两条手臂,每条手臂七个关节,手臂末端是一个可以张合的钳子。PR2依靠底部的四个轮子移动。在PR2的头部,胸部,肘部,钳子上安装有高分辨率摄像头,激光测距仪,惯性测量单元,触觉传感器等丰富的传感设备。在PR2的底部有两台8核的电脑作为机器人各硬件的控制和通讯中枢。两台电脑安装有Ubuntu和ROS。

 

二、设计目标

       ROS是开源的,是用于机器人的一种后操作系统,或者说次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。

       技术分享图片

       ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。

 

三、主要特点

       ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。但是ROS本身并没有实时性。

       ROS的主要特点可以归纳为以下几条:

     (1)点对点设计

技术分享图片

       一个使用ROS的系统包括一系列进程,这些进程存在于多个不同的主机并且在运行过程中通过端对端的拓扑结构进行联系。虽然基于中心服务器的那些软件框架也可以实现多进程和多主机的优势,但是在这些框架中,当各电脑通过不同的网络进行连接时,中心数据服务器就会发生问题。
      ROS的点对点设计以及服务和节点管理器等机制可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。

       (2)多语言支持

       在写代码的时候,许多编程者会比较偏向某一些编程语言。这些偏好是个人在每种语言的编程时间、调试效果、语法、执行效率以及各种技术和文化的原因导致的结果。为了解决这些问题,我们将ROS设计成了语言中立性的框架结构。ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。

技术分享图片

       ROS的特殊性主要体现在消息通讯层,而不是更深的层次。端对端的连接和配置利用XML-RPC机制进行实现,XML-RPC也包含了大多数主要语言的合理实现描述。我们希望ROS能够利用各种语言实现的更加自然,更符合各种语言的语法约定,而不是基于C语言给各种其他语言提供实现接口。然而,在某些情况下利用已经存在的库封装后支持更多新的语言是很方便的,比如Octave的客户端就是通过C++的封装库进行实现的。
       为了支持交叉语言,ROS利用了简单的、语言无关的接口定义语言去描述模块之间的消息传送。接口定义语言使用了简短的文本去描述每条消息的结构,也允许消息的合成,例如下图就是利用接口定义语言描述的一个点的消息:

技术分享图片

 

       每种语言的代码产生器就会产生类似本种语言目标文件,在消息传递和接收的过程中通过ROS自动连续并行的实现。这就节省了重要的编程时间,也避免了错误:之前3行的接口定义文件自动的扩展成137行的C++代码,96行的Python代码,81行的Lisp代码和99行的Octave代码。因为消息是从各种简单的文本文件中自动生成的,所以很容易列举出新的消息类型。在编写的时候,已知的基于ROS的代码库包含超过四百种消息类型,这些消息从传感器传送数据,使得物体检测到了周围的环境。

       最后的结果就是一种语言无关的消息处理,让多种语言可以自由的混合和匹配使用。

       (3)精简与集成

       大多数已经存在的机器人软件工程都包含了可以在工程外重复使用的驱动和算法,不幸的是,由于多方面的原因,大部分代码的中间层都过于混乱,以至于很困难提取出它的功能,也很难把它们从原型中提取出来应用到其他方面。
      为了应对这种趋势,我们鼓励将所有的驱动和算法逐渐发展成为和ROS没有依赖性单独的库。ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,而且编译使用的CMake工具使它很容易的就实现精简的理念。ROS基本将复杂的代码封装在库里,只是创建了一些小的应用程序为ROS显示库的功能,就允许了对简单的代码超越原型进行移植和重新使用。作为一种新加入的有优势,单元测试当代码在库中分散后也变得非常的容易,一个单独的测试程序可以测试库中很多的特点。
       ROS利用了很多现在已经存在的开源项目的代码,比如说从Player项目中借鉴了驱动、运动控制和仿真方面的代码,从OpenCV中借鉴了视觉算法方面的代码,从OpenRAVE借鉴了规划算法的内容,还有很多其他的项目。在每一个实例中,ROS都用来显示多种多样的配置选项以及和各软件之间进行数据通信,也同时对它们进行微小的包装和改动。ROS可以不断的从社区维护中进行升级,包括从其他的软件库、应用补丁中升级ROS的源代码。

       (4)工具包丰富

       为了管理复杂的ROS软件框架,我们利用了大量的小工具去编译和运行多种多样的ROS组建,从而设计成了内核,而不是构建一个庞大的开发和运行环境。

技术分享图片

       这些工具担任了各种各样的任务,例如,组织源代码的结构,获取和设置配置参数,形象化端对端的拓扑连接,测量频带使用宽度,生动的描绘信息数据,自动生成文档等等。尽管我们已经测试通过像全局时钟和控制器模块的记录器的核心服务,但是我们还是希望能把所有的代码模块化。我们相信在效率上的损失远远是稳定性和管理的复杂性上无法弥补的。

       (5)免费并且开源

      ROS所有的源代码都是公开发布的。我们相信这将必定促进ROS软件各层次的调试,不断的改正错误。虽然像Microsoft Robotics Studio和Webots这样的非开源软件也有很多值得赞美的属性,但是我们认为一个开源的平台也是无可为替代的。当硬件和各层次的软件同时设计和调试的时候这一点是尤其真实的。

技术分享图片

      ROS以分布式的关系遵循这BSD许可,也就是说允许各种商业和非商业的工程进行开发。ROS通过内部处理的通讯系统进行数据的传递,不要求各模块在同样的可执行功能上连接在一起。如此,利用ROS构建的系统可以很好的使用他们丰富的组件:个别的模块可以包含被各种协议保护的软件,这些协议从GPL到BSD,但是许可的一些“污染物”将在模块的分解上就完全消灭掉。

 

参考资料:

(1)《开源机器人操作系统——ROS》 张建伟等著

(2)《an open-source Robot Operating System》 paper

(3)  willowgarage公司网站:http://www.willowgarage.com/
(4)  ROS官方wiki:http://www.ros.org

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自古-月

http://blog.csdn.net/hcx25909

欢迎继续关注我的博客






ros2极简总结-导航简介-自定位

本节主要介绍导航所涉及的基础概念和一些相关内容。参考:NavigationusingROS2-Introduction机器人在环境中运动方向的路径规划要回答三个问题:我在哪?(Localization)我要去哪里?(Goal)我怎么走ÿ... 查看详情

ros概述

参考:古月居《ROS探索总结》《ROS·wiki:Introduction》入门介绍ROS(RobotOperatingSystem)是一个机器人软件平台,它能为异质计算机集群提供类似操作系统的功能。ROS系统是起源于2007年斯坦福大学人工智能实验室的项目与机器人... 查看详情

ROS 思维的前沿探索

】ROS思维的前沿探索【英文标题】:FrontierexplorationinROSnoetic【发布时间】:2021-07-1218:46:30【问题描述】:我想在Rosnoetic中使用前沿解释。http://wiki.ros.org/frontier_exploration有没有办法在这个Ros包中使用?【问题讨论】:【参考方案1... 查看详情

ros2学习笔记19--探索ros2doctor工具(代码片段)

...的话,则表示该章节都可被本人正常复现.2.2.11探索ros2doctor工具(原文:https://docs.ros.org/en/foxy/Tutorials/Getting 查看详情

探索之路机器人篇-ros系统并创建工作空间和项目

  在ROS官网,已经给出了详细的教程。下面我就般一下砖,把相应的操作写到这里。官方网址:http://wiki.ros.org/cn/安装ROS系统  indigo在ubuntu上的安装教程。官网:http://wiki.ros.org/cn/indigo/Installation/Ubuntu  1.添加sources.list  配... 查看详情

ros仿真笔记之——基于rrt_exploration的单个机器人自主探索建图(代码片段)

...ation以及多机器人SLAMmapmerage《ROS学习笔记之——多机器人探索环境》《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》《ROS仿真笔记之——多移动机器人SLAM地图融合》《ROS仿真笔记之——移动机器人自主探索式地图构建... 查看详情

桌面级群控机器人cocube探索-2022-

...人预览→资讯剧透←​​2022ROS暑期学校CoCube群控机器人探索活动海报活动内容CoCube群控机器人探索,包括单机基础功能实现,单机运动控制,视觉定位,集群算法实现等。CoCube与Micro_ROS介绍开发环境配置SDK说明和使用ROS1和ROS2接... 查看详情

机器人操作系统ros|简介篇

同样,从个人微信公众号Nao(ID:qRobotics)搬运。前言  先放一个ROSIndustrial一周年剪辑视频。  ROS已经发布八周年了,在国外科研机构中非常受欢迎。目前,以美国西南研究院为首的几位大佬开始尝试将ROS应用在工业机器人中,... 查看详情

ros仿真笔记之——基于frontier_exploration的机器人自主探索

最近在做机器人自主探索建图的相关topic。之前博客也尝试了不同的自主探索包,如rrt_exploration包《ROS仿真笔记之——基于rrt_exploration的单个机器人自主探索建图》与explore_lite包《ROS仿真笔记之——移动机器人自主探索式地... 查看详情

[ros]chinesemooc||chapter-2.3操作演示:catkin工作空间探索

 slides:https://www.gitbook.com/book/sychaichangkun/ros-tutorial-icourse163/details   onlyonfolder thenapplycatkin_make   andwehavemuchmorefiles  &nbs 查看详情

ros2节点简介(代码片段)

背景ROS2graph在接下来的几篇教程中,您将学习构成ROS2graph的一系列核心ROS2概念。ROSgraph是一个由所有的ROS2元素同时在一起处理数据的网络。如果您想要将它们全部映射并可视化的话,则它将包含所有的可执行文件以及它们之间... 查看详情

ros1云课→01简介和配置(代码片段)

 ROS1云课适用于kinetic/melodic/noetic。以蓝桥ROS云课为模板重新梳理。云原生与蓝桥ROS机器人课程2017-2022_zhangrelay的博客-CSDN博客机器人课程反馈中如何面对批评和负面消息_zhangrelay的博客-CSDN博客 ROS1系统已经支持大量机器人中的传... 查看详情

ros1云课→01简介和配置(代码片段)

 ROS1云课适用于kinetic/melodic/noetic。以蓝桥ROS云课为模板重新梳理。云原生与蓝桥ROS机器人课程2017-2022_zhangrelay的博客-CSDN博客机器人课程反馈中如何面对批评和负面消息_zhangrelay的博客-CSDN博客 ROS1系统已经支持大量机器人中的传... 查看详情

桌面级群控机器人cocube探索-2022-

...机器人预览→资讯剧透←2022ROS暑期学校CoCube群控机器人探索活动海报活动内容CoCube群控机器人探索,包括单机基础功能实现,单机运动控制,视觉定位,集群算法实现等。CoCube与Micro_ROS介绍开发环境配置SDK说明和... 查看详情

桌面级群控机器人cocube探索-2022-

...机器人预览→资讯剧透←2022ROS暑期学校CoCube群控机器人探索活动海报活动内容CoCube群控机器人探索,包括单机基础功能实现,单机运动控制,视觉定位,集群算法实现等。CoCube与Micro_ROS介绍开发环境配置SDK说明和... 查看详情

ros官网初级教程学习总结(1-4)(代码片段)

教程网址:http://wiki.ros.org/cn/ROS/Tutorials。本博客为1-4小节。安装并配置ROS环境安装ROS安装时记得换个好点的软件源,要不然会因为网络连接问题一直失败。管理环境export|grepROS主要是查看环境变量是否设置。ROSLISP_PACKAGE_DI... 查看详情

ros2极简总结-新增概念(代码片段)

参考文献:ROS2EXTENDEDCONCEPTS在前2篇博文中总结了ROS2的基本概念,这些内容大致与ROS1类似或改进,属于ROS2/ROS1的核心概念。本节侧重ROS2扩展的新内容。既然是极简,自然不会面面俱到,以2个例子为主吧。管理... 查看详情

ros官网初级教程学习总结(1-4)(代码片段)

教程网址:http://wiki.ros.org/cn/ROS/Tutorials。本博客为1-4小节。安装并配置ROS环境安装ROS安装时记得换个好点的软件源,要不然会因为网络连接问题一直失败。管理环境export|grepROS主要是查看环境变量是否设置。ROSLISP_PACKAGE_DI... 查看详情