机器人操作系统ROS(一)

2023-11-13

锋影

email:174176320@qq.com


如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意


本篇文章主要是初步介绍ROS的基本知识以及安装等内容。

一、ROS简介

ROS是啥?

ROS是一个适用于机器人的开源的元操作系统,如图1所示。它提供类似操作系统所提供的功能,包括硬件抽象、底层设备控制、常用函数的实现、进程间消息传递以及包管理。它也提供用于获取、编译、编写、跨计算机运行代码所需的工具和库函数。它主要采用的是松耦合点对点进程网络,目前主要支持的还是Ubuntu系统,Mac OS X支持等。

图1

如图1所示:计算机的操作系统将计算机硬件封装起来,而应用软件运行在操作系统之上,不用管计算机具体应用的是什么类型的硬件产品;同理,ROS对机器人的硬件进行了封装,不同的机器人、不同的传感器,在ROS里可以用相同的方式表示(topic等),供上层应用程序(运动规划)调用等。

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

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

为啥选ROS?(这个内容请参考Top Liu的博文:机器人程序设计之如何正确入门ROS

首先,目前机器人开发,软件开发的比重越来越大,而软件开发的时候软件框架的选择,是软件架构设计中一个重要的决策,直接决定了软件开发的直接效率,以及后续功能的实现程度。目前除了ROS,还有很多类似的机器人软件框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio。

为什么使用ROS呢?ROS有四大优点:1、松散耦合的机制方便机器人软件框架的组织;2、最丰富的机器人功能库,方便快速搭建原型;3、非常便利的数据记录、分析、仿真工具,方便调试;4、学界和产业界的标准,方便学习和交流。 使用一句话总结,使用ROS,能够方便迅速地搭建好机器人原型。当然,它的性能不是最优的,但是这四条优点足以保障它在机器人操作系统里面的地位。

另外:1、ROS使用了BSD许可证,这是一个非常宽松的开放许可证,允许在商业和闭源产品使用,这对于开发产品的创业公司是比较重要的一点;2、ROS是最庞大的使用者群体,是事实上的机器人标准,这是麻省理工在一篇文章中给出的评论。然后在2016年ROS大会数据显示,目前在使用操作系统做开发的人员用户超过35万,其中活跃用户美国占第一位,中国占第二位;3、在学术研究领域,基本上机器人算法都会给出ROS版本的源程序。最早在2009年ROS发布的“ROS: an open source Robot Operating System” 论文,目前已经被引用了2871次;4、企业界:目前已经有很多机器人公司采用了ROS系统来开发一些应用于全新市场的产品,如ClearPath、Rethink、Unbounded、Neurala、Blue River、Big-i,最典型的就是Willow Garage的PR2机器人。投资机构也对创业公司给予了极大的支持,仅2015年相关风险投资机构就在基于ROS操作系统的机器人公司投资了超过1.5亿美元。Nvidia、博世、高通、英特尔、宝马以及大 疆等大公司也纷纷推出ROS接口。

ROS主要特点:

1)点对点设计

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

图2

2)多语言支持

ROS现在支持许多种不同的语言,例如C++、Python、Octave和LISP,也包含其他语言的多种接口实现。

3)精简与集成

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

4)具有丰富的工具包,且免费开源。

如何学习ROS?

要想学ROS,应该从哪里入手,它的先后顺序是怎样的呢?ROS由四大部分构成,第一个是基础结构,这些通讯机制是如何实现的;第二个是工具,包括仿真工具、调试工具等;第三个是体现它功能的package;第四个就是社区,如何去上面下载、发布代码,和其他开发者交流学习。

ROS-设计思想:分布式架构

设计思想主要是分布式架构,将机器人的功能和软件,做成一个个节点,然后每个节点通过topic进行沟通,但你这些节点可以部署在同一台机器上,也可以部署在不同机器上,还可以部署在互联网上。

ROS-核心概念

ROS核心概念如下:

1)Nodes->节点

节点是各自独立的可执行文件,能够通过话题、服务或参数,与服务器或其他进程(节点)通信。ROS通过使用节点的方式将代码和功能解耦,提高了系统容错能力和可维护性,使系统简化。同时,节点允许了ROS系统能够布置在任意多个机器上并同时运行。关于节点需要注意的事项,节点在系统中必须有唯一的名称;节点可以使用不同的库进行编写,如roscpp和rospy,其中roscpp基于C++,rospy基于Python。

2)Messages and Topics->消息与话题(或主题)

节点之间通过topic机制进行通信,topic机制是一个一对多的Publish/Subscribe 模式: 同一个话题也可以有很多个订阅者,它的底层传输依靠的是TCP/IP,也可以是UDP。topic具体传输的message,具有一定的类型和数据结构,包括ROS提供的标准类型,和用户自定义类型。

3)Services and Parameters->服务与参数

除了topic,ROS还提供另一种一对一的机制,也就是Service/Client,当你需要直接与节点通信并获得应答时,将无法通过话题实现,这时需要使用该服务。

4)ROS Master->ROS管理器

Master向ROS系统中其他节点提供命名和注册服务,跟踪和记录话题的发布者和订阅者,使ROS 节点之间能够相互查找。一旦节点找到了彼此,就能建立一种点对点的通信方式。

5)Stacks and packages->堆栈与功能包

那么如何组织代码呢?这主要依靠功能包(Package) ,ROS中软件组织的基本形式,用于创建ROS程序。功能包包含源代码和功能包清单(Manifest) 。功能包清单提供关于功能包、许可信息、依赖关系、编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现对功能包的管理。

ROS-核心模块

ROS核心模块包括通信结构基础、机器人特性功能以及工具集。通信结构基础包括消息传递、记录和回放消息、远程过程调用、分布式参数系统;机器人特性功能包括标准机器人消息,机器人几何库,机器人描述语言,抢占式远程过程调用,诊断,位置估计、定位与导航;工具集包括命令式工具、可视化工具以及图形化接口。详情见图3

图3

ROS-核心工具

ROS拥有很多第三方的核心工具的支持,或者说Package。比较常见的是这五个工具:Gazebo是一个三维仿真环境;OpenCV是计算机视觉库,PCL是点云库,MoveIt!是机械臂的规划控制库,Industrial是工业上会用的库。另外MRPT,是一个非常好的机器人编程工具箱。然后,如果对实时控制要求比较高的话,可以考虑The Orocos Project。

ROS常用命令工具包括rostopic (Topics)、rosservice (Services)、rosnode (Nodes)、rosparam (Parameters)、rosmsg (Messages)、rossrv (Services)和roswtf (General debugging)。

ROS用的最多的可视化工具是rqt(集成图像交互界面)和 rviz(3D 可视化工具)。

ROS具有非常强的数据存储/回放功能,也就是使用bag存储topic(例如现实中的传感器数据),以后调用bag的topic数据则不必每次都在现实中运行机器人,速度非常快。

ROS log系统记录软件运行相关信息,便于以后的调试。

仿真环境由易到难主要有这三个:Turtlesim、ArbotiX、Gazebo。Turtlesim是一个QT开发的2D轨迹显示界面,只能显示运动轨迹;ArbotiX是含有一个差速驱动机器人的rviz模拟器,机器人运动及topic数据的3D显示,但不包含物理学引擎;Gazebo是功能齐全的3D物理模拟器,不过缺点是非常重,对内存和显卡要求高,慎入

ROS-版本选择

目前,ROS是一年推出一个版本。通过下载统计,我们发现现在使用最多的还是Indigo,所以对于初学者,建议还是使用这个版本,因为这是目前使用人数最多、坑最少的版本。而如果Linux编程能力比较强的,可以使用Kinetic,它可以一直支持到2021年。然后,你在选择Ubuntu版本时,要与ROS版本需匹配。引用原文一个图表示:

图4

另外,ROS的IDE以及Linux,直接贴TOP Liu的原图,见图5-6:

图5
图6

对于大众学习者、普通开发者、机器人算法开发者,在2017年仍推荐使用ROS。对于软件架构的学习者、强调实时性的开发者,建议关注ROS2.0 。另外,我在知乎上对于这个问题也有详细的回答,有兴趣的可以去ROS和ROS2.0现在到底该学习哪个呢?

最后,摆放一些个ROS常用网站:ROS学习中文网站ROS Indigo入门系列博客、TOP Liu大神也提到,可以根据ROS学习中文网站上的tutorials入门,主要是学习初级教程。剩下的就是各种实战。



作者:keepStriving
链接:https://www.jianshu.com/p/0869eec39a3b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器人操作系统ROS(一) 的相关文章

  • Robot Framework自定义测试库的作用域的理解

    robot framework中 xff0c 强大的测试库api支持 xff0c 用户可根据实际需求定义测试库 xff0c 导入后可使用自定义库中相应的关键字 当自定义的测试库是类库 xff0c 则需要考虑一个问题 xff1a 类实例 用类
  • Cannot load command parameter [robot_description]解决方法

    在github上下载一个ros仿真小车 xff0c 运行时 Invalid tag Invalid tag Cannot load command parameter robot description 参考 https wiki ros
  • Ubuntu20.04+ROS noetic安装Universal Robot包

    先装一下国内的rosdepc sudo pip install rosdepc sudo rosdepc init rosdepc update 安装ros插件 xff1a rosdep install from paths src ign
  • 位姿估计Robot_pose_efk的配置和使用

    Robot pose efk 用于融合里程计 xff0c 惯性测量单元和视觉里程计的传感器输出 xff0c 从而减少测量中的总体误差 了解ROS的robot pose ekf软件包中扩展卡尔曼滤波器的用法 xff1a robot pose
  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • 关于差速移动机器人的运动学模型推导

    预备 在机器人的运动中 经常会涉及到航向推演 下面这篇博客写的挺好的 https blog csdn net heyijia0327 article details 44983551 在学习机器人运动模型推导的时候 有看到 网上别人的推导过
  • [转]QNX_HMI_crank工程的系统移植

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 开发软件 Cr
  • HMI全液晶仪表方案-使用QNX和Kanzi的UI解决方案

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 e mail 174176320 qq com 黑莓有限公司子公司及全球车载电子软件平台领导厂商QNX软件系统有限公司与汽车用户界面设计工
  • robot通过一个元素定位另一个元素

    xpath定位 xpath span text 文章评为精华 div div span text 去完成
  • qnx学习笔记-QNX使用QT开发应用程序

    锋影 e mail 174176320 qq com 对于习惯了VS QT这种智能化IDE的开发人员来说 使用QNX Momentics IDE就好像从大城市回到了农村 十分不习惯 好在Qt为我们提供了基于QNX的开发环境 现在就来摆一摆如
  • [转]转型后的BlackBerry“恋上”汽车市场,QNX拿什么与免费的安卓/Linux对抗?

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com BlackBe
  • [转]video视频解码硬解和软解的区别及如何选择

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 声明 本文只用于个人学习交流 若不慎造成侵权 请及时联系我 立即予以改正 锋影 email 174176320 qq com 硬解 字面上理
  • 嵌入式 Linux 系统在线升级策略-固件升级-升级固件-系统升级

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 email 174176320 qq com 嵌入式 Linux 系统在线升级策略 对于运行 Linux 系统的嵌入式产品 很多时候我们发
  • sudo rosdep init ERROR: cannot download default sources list from:解决办法

    sudo rosdep init ERROR cannot download default sources list from 解决方法 进入 etc hosts文件目录 2 进入到hosts 文件 root ros vm2 etc ge
  • 黑莓QNX选定由延锋伟世通数字仪表项目

    锋影 e mail 174176320 qq com 黑莓有限公司宣布延锋伟世通 全球1级汽车零部件供应商 已经选择该公司的安全认证QNX平台仪器集群1一个数字仪表项目与中国的一个主要的OEM软件 该交易的条款是保密的 黑莓的QNX技术已为
  • 项目中QNX的USB驱动开发的反思

    锋影 e mail 174176320 qq com 接触驱动层的东西 心里还有点小激动 总感觉自己比没搞之前提高了那么一点点 也不知是真的假的 拉出来遛遛 1 整体思路 驱动层 先从驱动层说起 他将USB设备通过Resource Mana
  • 体验一个全新的RTOS-QNX系统功能介绍

    锋影 e mail 174176320 qq com QNX的简单的介绍 这个我就很惭愧的引用一下官方的一些说法 QNX Quick Unix Unix AT T QNX 实时操作系统是由加拿大著名的QNX SOFTWARE SYSTEMS
  • QNX驱动开发—进程调度和进程通信

    锋影 e mail 174176320 qq com QNX进程间调度和进程通信切换任务 一 进程调度方法 1 FIFO 先进先出队列法 一个最高优先级的线程可以一直执行到结束或是主动放弃CPU 高优先级的线程可以随时中断低优先级的线程 获
  • QNX系统的ftp调试,连接FTP调试-QNX的PC104调试ftp

    如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额1元起步 多少随意 锋影 e mail 174176320 qq com 板子上QNX系统ftp的调试 双网卡 IP分别为 192 192 1 10 192 192
  • 如何限制对 codeigniter 文件夹中文件的访问

    您好 我已经使用 codeigniter 来开发我的网站 但是当在 google 中搜索我的网站时 google 会显示特定文件夹中文件 pdf 的链接 用户可以直接查看这些文件 pdf 而无需登录 我想限制谷歌直接显示这些文件的链接 例如

随机推荐

  • 统计:Flutter,开发采用量

    本文作者 徐宜生 原文发布于 群英传 Flutter这个东西出来这么久了 到底市场占有率怎么样呢 为了让大家了解这一真实数据 也为了让大家了解当前Flutter在各大App中的使用情况 我今天下载了几百个App 占了手机将近80G空间 就为
  • 队列同步器AQS原理分析及具体实现

    Java中的并发编程很多都是以队列同步器AbstractQueuedSynchronizer为基础的 例如ReentrantLock CountDownLatch等 下面介绍其构成以及相应的实现 构成 private volatile in
  • 【汽车电子】浅谈LIN总线

    目录 1 为何使用LIN总线 2 什么是LIN总线 3 LIN总线的主从关系 4 LIN的特点 5 LIN报文帧结构 6 LIN总线波形 7 帧类型 8 进度表 9 状态机的实现 10 总结 11 声明 1 为何使用LIN总线 在这里你可能
  • Vue常用的修饰符有哪些?分别有什么应用场景?

    一 修饰符是什么 在程序世界里 修饰符是用于限定类型以及类型成员的声明的一种符号 在Vue中 修饰符处理了许多DOM事件的细节 让我们不再需要花大量的时间去处理这些烦恼的事情 而能有更多的精力专注于程序的逻辑处理 vue中修饰符分为以下五种
  • 一步一步详解LSTM网络【从RNN到LSTM到GRU等,直至attention】

    一步一步详解LSTM网络 从RNN到LSTM到GRU等 直至attention 0 前言 1 Recurrent Neural Networks循环神经网络 2 The Problem of Long Term Dependencies长期
  • import sys

    import sys 的作用是什么 参考来源 1 首先 先看一段代码 1 from sys import argv 2 script first second third argv 3 print The script is called
  • 3A之自动白平衡(AWB)篇

    在手机相机的专业模式中 可以看到有一个白平衡 WB 调节的选项 什么是AWB 人眼视觉系统具有颜色恒常性的特点 对物体的观察不受光源的影响 本质上是白色的物体 在不同色温 反射光线颜色不同的场景下 经过人眼的视觉系统矫正后还是白色 而对于C
  • 信息安全渗透测试都需要学习哪些内容?

    这个问题 说实话 在2019年之前 其实关注信息安全相关的人并不多 对于市场来讲 信息安全的需求量也不是很大 但大家都知道 在中国 随着时代和技术的发展 信息安全越来越受到重视 一步一步上升到国家战略层面 随着等保2 0出台 相应的信息行业
  • 阿里开源FASTJSON2,为FASTJSON重构升级,目标是为下一个十年提供一个高性能的JSON库

    大厂杂谈关注到阿里最近开源了fastjson2 推出几天已经获得500多的star FASTJSON2是FASTJSON项目的重要升级 目标是为下一个十年提供一个高性能的JSON库 持JSON JSONB两种协议 JSONPath是一等公民
  • 代码质量保障第2讲:单元测试 - 浅谈单元测试

    代码质量保障第2讲 单元测试 浅谈单元测试 本文是代码质量保障第2讲 浅谈单元测试 单元测试 unit testing 是指对软件中的最小可测试单元进行检查和验证 这是基础 所以围绕着单元测试 我从网上搜集和总结了相关的概念 以助你完善体系
  • 「OKR 理论篇」5 分钟快速掌握 OKR 管理法

    近几年在企业管理领域有一个很火的词 OKR 它发源于英特尔 兴盛于Google 随着字节跳动等互联网新贵的迅速崛起 引起了越来越多创新企业的关注 然而 对大部分公司而言 他们并没有完全理解 OKR 理念 往往将 OKR 与绩效考核等同起来
  • 用朴素贝叶斯做垃圾邮件分类&demo

    贝叶斯公式 全概公式 思路和实现 最终的目标 对于一封邮件 分词得到 我们需要求出给定的条件下 这封邮件是垃圾邮件的概率 即求出 这里s表示是垃圾邮件 spam 根据贝叶斯公式 根据全概公式 上式 这里n表示是正常邮件 noraml 令先验
  • 分布式应用:Zabbix代理服务器与SNMP监控

    目录 一 理论 1 分布式监控 2 Zabbix代理服务器部署 3 配置 agent 使用 proxy 4 设置 Zabbix SNMP 监控 二 实验 1 Zabbix代理服务器部署 2 配置 agent 使用 proxy 3 设置 Za
  • 多线程与高并发--------线程

    一 线程的基础概念 一 基础概念 1 1 进程与线程 什么是进程 进程是指运行中的程序 比如我们使用钉钉 浏览器 需要启动这个程序 操作系统会给这个程序分配一定的资源 占用内存资源 什么线程 线程是CPU调度的基本单位 每个线程执行的都是某
  • Linux下七种文件类型、文件属性及其查看方法

    1 七种文件类型 普通文件类型 Linux中最多的一种文件类型 包括 纯文本文件 ASCII 二进制文件 binary 数据格式的文件 data 各种压缩文件 第一个属性为 目录文件 就是目录 能用 cd 命令进入的 第一个属性为 d 例如
  • C++ 函数模板(template)详解

    目录 1 前言 2 为什么要使用函数模板 3 函数模板语法 3 1函数模板定义形式 4 函数模板和函数重载 4 1函数模板无法隐式数据类型转换 4 2当函数模板和普通函数都符合调用时 优先选择普通函数 4 3如果函数模板会产生更好的匹配 使
  • 【网络编程·应用层】https协议——加密与窃密的攻防战

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 https协议的介绍 二 加密和解密 1 加密和解密的
  • 详解Git合并冲突——问题重现、原因及解决 “Automatic merge failed; fix conflicts and then commit the result.“

    最后更新日期 2022 10 6 在Git中使用git merge命令合并两个分支的时候 有可能产生这种情况 git merge A Auto merging merge txt CONFLICT content Merge conflic
  • 什么是 tokens,ChatGPT里面的Tokens如何计数?

    什么是 tokens ChatGPT里面的Tokens如何计数 什么是 tokens Tokens 可以被认为是词语的片段 在 API 处理提示之前 输入会被分解成 tokens 这些 tokens 并不会精确地在单词的开始或结束处切分 t
  • 机器人操作系统ROS(一)

    锋影 email 174176320 qq com 如果你认为本系列文章对你有所帮助 请大家有钱的捧个钱场 点击此处赞助 赞助额0 1元起步 多少随意 本篇文章主要是初步介绍ROS的基本知识以及安装等内容 一 ROS简介 ROS是啥 ROS