ROS 2的前世今生 | ROS 2学习笔记

news2025/1/18 9:40:47

自2015年底首次踏入ROS(Robot Operating System)的世界以来,我在机器人领域的旅程已近九年。这段历程始于团队几位志同道合的朋友在业余时间的自发学习,逐渐演变成成立了一个致力于英特尔硬件平台与ROS框架集成优化的专业团队,最终发展到为商业客户提供基于ROS和英特尔平台的产品设计支持。这一路走来,经历了无数的挑战与成长。为了纪念这一段充满成长与探索的旅程,我计划整理一下积累的知识与经验为一系列的学习性文章,与同样醉心于ROS世界的朋友们分享,希望我们能够一同学习,共同进步。在这份知识的传递与分享中,不仅是对过往岁月的回顾,也是对未来探索的一份期许。

ROS是什么

ROS(机器人操作系统)是一个开源机器人中间件套件。虽然ROS不是一个操作系统(OS),而是一套用于机器人软件开发的软件框架,但它提供了为异构计算机集群设计的服务,例如硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递,以及包管理。正在运行的基于 ROS 的进程集以图形架构表示,其中处理发生在可以接收、发布和复用传感器数据、控制、状态、规划、执行器和其他消息的节点中。尽管反应性和低延迟在机器人控制中很重要,但 ROS并不是实时操作系统( RTOS)。然而,可以将 ROS 与实时计算代码集成。ROS 2 的创建已解决了对实时系统支持的缺乏,ROS API 的重大修订,它将利用核心 ROS 的现代库和技术功能并添加对实时代码和嵌入式系统硬件的支持。

ROS生态系统中的软件可以分为三组:

  • 用于构建和分发基于 ROS 的软件的独立于语言和平台的工具;
  • ROS 客户端库实现,例如 roscpp、rospy、和 roslisp;
  • 包含使用一个或多个 ROS 客户端库的应用程序相关代码的软件包。

ROS的发展历史

斯坦福大学的早期经历(2007年及更早)

2007 左右,最终成为 ROS 的第一批组件开始在斯坦福大学开发。Eric Berger和Keenan Wyrobek是斯坦福大学Kenneth Salisbury机器人实验室的博士生,他们领导着个人机器人(Personal Robotics)项目。在研究机器人在人类环境中执行操作任务时,他们注意到,他们的许多同事都因机器人技术的多样性而受阻:优秀的​​软件开发人员可能不具备所需的硬件知识,而开发路径规划的人可能不知道如何进行所需的计算机视觉。为了纠正这种情况,他们着手建立一个系统,为学术界其他人提供一个可以借鉴的起点。用Eric Berger的话来说,“在所有这些不同的维度上,这都是不糟糕的东西”。

在迈向这个统一系统的第一步中,两人构建了PR1作为硬件原型,并开始利用它开发软件,借鉴了其他早期开源机器人软件框架的最佳实践,特别是摩根·奎格利 (Morgan Quigley) 开发的 switchyard 系统,另一位斯坦福大学博士生,一直致力于支持斯坦福人工智能实验室的斯坦福人工智能机器人(STAIR)。Joanna Hoffman和Alain Rossmann提供了 50,000 美元的早期资金,支持 PR1 的开发。在寻求进一步开发的资金时,Eric Berger 和 Keenan Wyrobek 遇到了Willow Garage的创始人 Scott Hassan。 Willow Garage 是一家技术孵化器,致力于开发自动驾驶 SUV 和太阳能自动驾驶船。Hassan 分享了 Berger 和 Wyrobek 的“机器人 Linux”愿景,并邀请他们来 Willow Garage 工作。Willow Garage 于 2007 年 1 月启动,并于 2007 年 11 月 7 日向 SourceForge 首次提交 ROS 代码。

Willow Garage时期 (2007–2013) 

Willow Garage开始开发 PR2 机器人作为 PR1 的后续产品,并开发 ROS 作为运行它的软件。来自二十多个机构的团体为 ROS 做出了贡献,包括核心软件以及与 ROS 一起形成更大软件生态系统的越来越多的软件包。Willow Garage 之外的人为 ROS 做出了贡献(特别是来自斯坦福大学的 STAIR 项目),这意味着 ROS 从一开始就是一个多机器人平台。虽然 Willow Garage 最初还有其他项目正在进行中,但它们被取消了,取而代之的是个人机器人计划:专注于生产 PR2 作为学术界的研究平台和 ROS 作为开源机器人堆栈,支撑学术研究和技术初创公司,就像LAMP 堆栈为基于网络的初创公司所做的那样。

2008 年 12 月,Willow Garage 实现了三个内部里程碑中的第一个:PR2 在两天内连续导航,距离 pi 公里。不久之后,ROS 的早期版本(0.4 Mango Tango)发布,随后发布了第一个 RVIZ 文档和第一篇关于 ROS 的论文。初夏,实现了第二个内部里程碑:让 PR2 在办公室中导航、打开门并自行插入电源。随后,ROS.org 网站于 8 月启动。ROS 的早期教程于 12 月发布,为 2010 年 1 月发布 ROS 1.0 做准备。这是里程碑 3:为 Willow Garage 工程师拥有的巨大能力制作大量文档和教程过去3年的发展。

2011 年对于 ROS 来说是辉煌的一年,2 月 15 日推出了 ROS Answers(一个针对 ROS 用户的问答论坛);4月18日推出非常成功的TurtleBot机器人套件;ROS repository总数在 5 月 5 日突破 100。Willow Garage 于 2012 年 4 月创建了开源机器人基金会(OSRF) 。OSRF 立即获得了国防高级研究计划局(DARPA) 的软件合同。同年晚些时候,第一届 ROSCon 在明尼苏达州圣保罗举行,第一本关于 ROS 的书《ROS By Examples》出版,第一个运行 ROS 的商业机器人Baxter由Rethink Robotics宣布。

2013 年 2 月,OSRF 成为 ROS 的主要软件维护者,此时,ROS已经发布了7个主要版本(一直到ROS Groovy),并且用户遍布全球。Clearpath Robotics于 2014 年初接管 PR2 的支持职责,标志着Willow Garage时期的结束。

OSRF 和Open Robotics时期(2013 年至今)

自从 OSRF 接管 ROS 的主要开发以来,每年都会发布一个新版本,同时人们对 ROS 的兴趣也在不断增长。自 2012 年以来,ROSCon 每年都会举办,与两个旗舰机器人会议ICRA或IROS同期举办。ROS 开发者聚会已在多个国家组织,出版了许多 ROS 书籍,并启动了许多教育计划。2014年9月1日,NASA在国际空间站上宣布了第一个在太空中运行ROS的机器人:Robotnaut 2。2017年,OSRF更名为Open Robotics。科技巨头亚马逊和微软在此期间开始对 ROS 产生兴趣,微软于 2018 年 9 月将核心 ROS 移植到 Windows,随后亚马逊网络服务于 2018 年 11 月发布 RoboMaker。

迄今为止,OSRF/开放机器人技术最重要的发展(不排除开始支持 ROS 的机器人平台的爆炸式增长或每个 ROS 版本的巨大改进)是 ROS 2 的提议,这是对 ROS API 的重大更改旨在支持实时编程、更广泛的计算环境和更现代的技术。ROS 2 在 ROSCon 2014 上宣布,2015 年 2 月首次提交到 ros2 repository,随后于 2015 年 8 月发布 alpha 版本。 ROS 2 的第一个发行版 Ardent Apalone 于于2017年12月8日发布,开创了下一代ROS开发的新时代。英特尔也在此阶段对ROS 2社区做出巨大贡献,包括ROS 2核心代码质量和安全性提高,性能优化,在ROS 2上支持Realsense, NCS (Neuron Compute Stick),OpenVINO,发布一系列支持ROS 2的软件组件,并移植和重新设计ROS 2导航软件框架navigation2。

未来发展

目前,Open Robotics已经被Google的孵化器Intrinsic收购:Alphabet’s Intrinsic Acquires Majority of Open Robotics - IEEE Spectrum。大部分的开发人员已经进入Intrinsic,核心的开发人员和开源的ROS,Gazebo,RMF和Infrastrucutre保持中立的开源项目。社区也在酝酿着一些变化(开源项目的governance,经费支持等),让我们期待ROS的未来更加美好。

版本和发布

ROS 1版本发布

ROS 2版本发布

ROS-Industrial

ROS-Induscial 是一个开源项目(BSD(传统)/Apache 2.0(首选)许可证),它将 ROS 的高级功能扩展到制造自动化和机器人技术。在工业环境中,有两种不同的方法对机器人进行编程:要么通过外部专有控制器(通常使用 ROS 实现),要么通过机器人各自的本机编程语言。因此,ROS 可以被视为基于软件的工业机器人编程方法,而不是传统的基于机器人控制器的方法。

ROS-Industrial repository包括常见工业机械手、夹具、传感器和设备网络的接口。它还提供用于自动 2D/3D 传感器校准、工艺路径/运动规划、Scan-N-Plan 等应用程序、Qt Creator ROS 插件等开发人员工具以及针对制造商需求的培训课程的软件库。ROS-Industrial 得到了一个由行业和研究成员组成的国际联盟的支持。该项目最初是 Yaskawa Motoman Robotics、西南研究所和 Willow Garage 之间的合作项目,旨在支持 ROS 在制造自动化中的使用,GitHub repository由 Shaun Edwards (SwRI) 于 2012 年 1 月创建。目前,该联盟分为三个组;ROS 工业联盟美洲(由 SwRI 领导,位于德克萨斯州圣安东尼奥)、ROS 工业联盟欧洲(由 Fraunhofer IPA 领导,位于德国斯图加特)和 ROS 工业联盟亚太地区(由 Advanced Remanufacturing 领导)和技术中心(ARTC)和南洋理工大学(NTU),位于新加坡)。

该联盟通过开展 ROS-I 培训、提供技术支持和制定 ROS-I 未来路线图,以及开展竞争前联合行业项目来开发新的 ROS-I 能力,为全球 ROS-Industrial提供支持。

作者Blog原文:ROS 2的前世今生 | ROS 2学习笔记 - HY's Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1470238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Curator基本使用

文章目录 1. 基本操作1.1 建立连接1.2 创建结点1.3 查询结点查询数据查询子结点查看结点信息 1.4 修改结点普通修改带乐观锁的修改 1.5 删除删除单个结点删除带子结点的结点必须成功的删除带回调函数的删除 2. 监听器事件2.1 NodeCache单一结点连续监听2.2 PathChildrenCache监…

2024.2.25 在centos8.0安装docker

2024.2.25 在centos8.0安装docker 安装过程比较简单,按顺序安装即可,简要步骤: 一、更新已安装的软件包: sudo yum update二、安装所需的软件包,允许 yum 通过 HTTPS 使用存储库: sudo yum install -y …

VIO第2讲:IMU标定实验

VIO第2讲:IMU标定实验 文章目录 VIO第2讲:IMU标定实验5 IMU标定实验5.1 仿真数据产生5.1.1 c代码分析5.1.2 生成ros包数据 5.2 Allan方差实验(港科大imu_utils)5.2.1 安装5.2.2 运行 5.3 Allan方差实验(matlab代码kali…

内网设备如何在互联网上能访问

应用场景 设备安装到了客户现场,如果要调试设备,当前的处理方式是技术人员出差到客户现场、让客户开通VPN、让客户安装远程工具,远程到客户计算机上进行调试等方法。人不在家里想远程家里的电脑,当前处理方式就是在家里电脑上安装…

搜索专项---IDA*

文章目录 排书回转游戏 一、排书OJ链接 本题思路:先考虑每一步的决策数量:当抽取长度为 i 的一段时,有 n−i1 种抽法,对于每种抽法,有 n−i 种放法。另外,将某一段向前移动,等价于将跳过的那段向后移动&am…

【DataTable.js】02.DataTable参考

一、Option 1.1 Features 属性类型默认值描述autoWidthbooleantrue是否自动调节单元格宽度,若传入了columns.width,可禁用该选项orderingbooleantrue是否支持排序pagingbooleantrue是否支持分页scrollXbooleanfalse是否支持横向滚动条scrollYstring启用…

USB Micro引脚及相应原理图绘制

前言:博主为实现绘制USB Micro输入口原理图,首先在 GD32F103XX的数据手册中找到引脚的功能描述,找到USBDM与USBDP功能,分别为引脚PA11与引脚PA12。然后进行相应的原理图绘制。 * USBDM。USBDM 引脚是与通用串行总线 (Universal Se…

计算机操作系统-笔记

现代操作系统阅读笔记 第一章 引论 1. 操作系统定义 操作系统是运行在内核态的软件,它执行两个基本上独立的任务。 隐藏计算机底层硬件的实现,为用户及应用程序提供一个资源集的清晰抽象。 管理计算机硬件资源。 任何操作系统的核心是它可处理的系…

Java基础常见八股文学习总结1

Java基础常见八股文学习总结1 SPI SPI 即 Service Provider Interface ,字面意思就是:“服务提供者的接口”,我的理解是:专门提供给服务提供者或者扩展框架功能的开发者去使用的一个接口。SPI 将服务接口和具体的服务实现分离开来…

vue项目的前端工程化思路webpack(持续更新中)

写在前面:现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决Scss,Less……新增样式的扩展写法的编译工…

C++ //练习 8.7 修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。

C Primer(第5版) 练习 8.7 练习 8.7 修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /********…

5分钟轻松帮你EasyRecovery恢复女朋友照片

相信有不少男性电脑玩家都会将女朋友的照片存放在电脑硬盘之内,作为珍贵的收藏和回忆。但是在某些时候,如果我们错误地删除了这些照片,或者由于系统问题导致其中的照片丢失,那么我们怎么找回女朋友的照片?这个问题就足…

【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata

🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于技术点的相关分享吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 一、 使用nginx完成动静分离 1.下载…

数据结构2月25日

第一道: 第二道: 1、插入到prev和next中间 1.new(struct list_head*)malloc(sizeof(struct list_head*)); if(newNULL) { printf("失败\n"); return; } new->nextprev->next; prev->nextnew; return; 2、删除prve和next…

day4:对话框与事件

使用qt搭建一个简易的闹钟系统 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);this->setAttribute(Qt::…

2023年总结与2024展望

今天是春节后上班第一天,你懂的,今天基本上是摸鱼状态,早上把我们负责的项目的ppt介绍完善了一下,然后写了一篇技术文章,《分布式系统一致性与共识算法》。接着就看了我近几年写的的年度总结,我一般不会在元…

数据结构知识点总结-线性表(1)-线性表的定义、基本操作、顺序表表示

线性表 定义 线性表是具有相同数据类型的N(N>0)个元素的有限序列,其中N为表长,当N0时线性表是一张空表。 线性表的逻辑特征:每个非空的线性表都有一个表头元素和表尾元素,中间的每个元素有且仅有一个直…

stm32利用CubeMX实现外部中断触发数码管加减数

首先打开proteus绘制电路图,如下: 然后打开CubeMX,配置晶振和GPIO: 接下来就是生成keil工程文件,用keil打开。 新建一个desplay.h文件:下面是全部代码 #ifndef __DESPLAY_H #define __DESPLAY_H #endif#i…

python 3.11中安装sympy(符号工具包)

1.python环境: 2.安装遇到问题: … 3.升级pip cmd命令行中,执行如下命令: python.exe -m pip installl --upgrade pip 4.再次安装sympy cmd命令行中,执行如下命令: pip install sympy 5.简单应用 对…

手把手教你Jenkins整合Jmeter实现自动化接口测试!

01、在机器上安装jmeter 下载:http://jmeter.apache.org/download_jmeter.cgi 这里我用了一台Windows安装jmeter用来写接口测试的脚本,启动前修改jmeter.properties 中 jmeter.save.saveservice.output_format值为xml。 编写接口测试脚本: 脚…