返回列表 发布新帖
查看: 1630|回复: 0

ROS2介绍

12

主题

1

回帖

179

积分

管理员

积分
179
发表于 2024-4-28 16:26:00 | 查看全部 |阅读模式

一、ROS的历史


ROS全称为机器人操作系统(Robot Operating System),最初由 Willow Garage 于 2007 年创建,主要用于解决机器人各个组件之间的通信问题。本着不重复造轮子的需求,人们就把许多优秀的机器人算法集成到ROS中来,使ROS在开源机器人社区中已经变得非常活跃和庞大。但因为ROS开发时间较早,缺少很多重要功能,改进的地方也很多。但如果将所有这些修改添加到 ROS中需要许多重大更改,并使 ROS非常不稳定。 于是在2015年,经过慎重考虑,ROS团队决定基于ROS的思想和一些新技术,从零开始重新开发一个全新的ROS,这就是ROS2的诞生。为了方便区分,我们把传统的ROS称为ROS1,新的ROS称为ROS2。如果只说ROS,则包含两者。

目前ROS1主要在教育界流行,但在工业界却很少有人使用,主要是因为ROS1缺少很多比如实时性、安全性、认证性的硬性要求。基于此,ROS2 的目标之一是使其与工业应用兼容。

ROS2 是从零开始构建的,具有以下设计要求,以使其准备好用于商业用途和应用:


  • 安全性——它可以在需要的地方通过适当的加密来保证安全
  • 嵌入式系统——ROS2需要能够在嵌入式系统上运行
  • 多样化的网络——需要能够在广阔的网络中运行和通信,因为机器人从局域网到多卫星跳跃以适应机器人可以操作和需要通信的各种环境。
  • 实时计算——需要能够可靠地实时执行计算,因为运行时效率对机器人技术至关重要
  • 产品准备——需要符合相关的安全/工业标准,以便为市场做好准备


二、ROS1和ROS2对比

ROS诞生于2007年,怀揣“提高机器人软件复用率”的目标,在机器人领域掀起了应用的高潮,已经成为机器人开发的普遍标准。

2017年底,ROS2正式发布,助推ROS在丰富多变的机器人系统中稳定、高效运行,加速机器人产品化落地。在硬件极其不标准的机器人领域,想要设计并实现通用化的机器人操作系统异常艰难,而ROS2正在向这个目标努力。



1、发行版比较


ROS的发行版基本遵循Ubuntu的发行规则,即每偶数年份发布一个长期支持(LTS)版本,支持五年。且在Ubuntu版本生命周期结束后将不再提供支持。所以大家推荐大家尽可能使用LTS版本。

Noeitc Ninjemys是ROS1的最终版本,EOL(End of Life)定于 2025 年,之后将不会再有ROS1。


对于 ROS2,从 LTS(长期支持)版本 Foxy Fitzroy(发布日期:2020)开始,每年都会发布一个新的 ROS2 版本。 与之前对 ROS1 所做的相同。目前ROS2的核心功能已经相当稳定,我们用到的绝大部分功能及软件都有相应的版本,只有少数一些第三方插件缺失。



2、构架差异


总的来说,ROS2的变化有如下几点:


- 没有MASTER节点,实现真正的分布式架构。

- 通信换成DDS,提高实时性及安全性。

- 核心概念没有变化,但对各个方面进行优化。

- 编程难度上升。


其架构差异如下图所示:




3、特性区别


在其关键特性上,还有以下区别:

特性
ROS1
ROS2
平台在 Ubuntu 上测试, 在 其他 Linux 风格以及 OS X 上进行维护ROS2 目前在 Ubuntu、OS X 以及 Windows 10 上进行 CI 测试和支持
C++C++03 // 不要在其 API 中使用  C++11 特性主要使用 C++11   开始并计划使用 C++14 & C++17
PythonPython 2>= Python 3.5
中间件自定义序列化格式(传输协议+中心发现机制)目前该接口的所有实现都基于 DDS 标准。
统一持续时间和时间类型持续时间和时间类型在 C++ 和 Python客户端库中定义。在 ROS2 中,这些类型被定义为消息,因此在跨语言编程中依然保持保持一致的。
具有生命周期的组件在 ROS 中,每个节点通常都有自己的生命周期。roslaunch 之类的工具可以使用生命周期来确定性地启动由许多组件组成的系统。
线程模型在 ROS 中,开发人员只能在单线程执行或多线程执行之间进行选择。在 ROS2 中,可以使用更精细的执行模型,并且可以轻松实现自定义执行器。
多个节点在 ROS 中,不能在一个进程中创建多个节点。在 ROS2 中,可以在一个进程中创建多个节点。
ROS启动在 ROS 中,roslaunch  文件是用 XML 定义的,功能非常有限。在 ROS2 中,启动文件是用 Python 编写的,可以使用更复杂的逻辑,如条件等。

三、为什么要学ROS2


ROS是实际上是一种用于机器人应用程序开发的、且开源的工具包集合。它为各行各业的开发人员提供了一个标准的软件平台,方便人们研究机器人技术并快速进行原型设计,甚至是部署和生产。总之大家需要记住,ROS开发的初衷是**避免重复发明轮子**。其主要优势有以下几点:


1、全球化的社区生态


ROS社区是由来自全球的工程师和爱好者组成的一个松散的团体,他们对机器人和开源软件有共同的兴趣。意味着个人根据共同利益,特定目标或共享语言或地理区域创建自己的子社区。核心ROS源代码由Open Robotics和ROS 2技术指导委员会(TSC)的成员构建和维护;但是,使ROS如此特别的大部分是由ROS社区中的其他团体建立的。这种针对软件开发的分布式方法使ROS社区具有弹性,并允许ROS适应许多特殊环境。有些人发现这种方法有些混乱,因为他们习惯了更集中的软件开发,但是他们很快意识到,这使每个人都有机会从事对他们最重要的事情。总之,ROS有一个庞大的机器人软件生态系统。ROS是由这个社区开发的,也是为这个社区服务的,你的很多疑问都可以在这个社区找到答案。


2、用户基数大


目前,整个机器人工业都依赖于ROS。并且很多学校都使用ROS进行机器人教学。它是大多数机器人研究的基础,不论是单一学生项目还是多机构合作或者大型比赛。现在世界各地的机器人都在生产中使用这种技术。仅在自主移动机器人(AMR)上,ROS就帮助创造了数十亿美元的价值。


3、缩短产品上市时间


ROS 提供了开发机器人应用程序所需的工具、库和功能,使您能够将更多时间花在对您的业务很重要的工作上。因为它是开源的,所以您可以灵活地决定在何处以及如何使用 ROS,以及根据您的需要自由定制它。此外,ROS 不是独占的,您无需在 ROS 或其他软件堆栈之间进行选择;ROS 可轻松与您现有的软件集成,以将其当作工具解决您的问题。


4、多领域


ROS 已在各种机器人应用中使用,包括且不限于室内机器人、室外机器人、家庭机器人、汽车自动驾驶、水下或者空中无人机,不论是消费领域还是工业领域,都能看到ROS的身影。


5、多平台


ROS 2可以在Linux、Windows和macOS以及各种嵌入式平台(通过 micro-ROS)上运行,也可以对机器人自主、后端管理和用户界面进行无缝开发和部署。其分层支持模型也允许在后期移植到新的平台(比如嵌入式或者其他实时操作系统)。


6、完全开源


ROS是一个开源项目,可以在全球范围内自由且不受限制地访问高质量、高可靠、功能齐全的机器人SDK。ROS本身也是其他开源项目的基础上构建的,所以也尽可能利用和遵循开放标准(如OMG的DDS)。


7、商业友好


虽然ROS鼓励大家为开源社区作贡献,但并不强求。ROS是在开放源码许可下发布的, 默认许可证为Apache 2.0。所以您可以随意修改ROS,并将其与您自己的或其他非开放软件混合在一起,发布到专有产品中。


8、行业支持


正如ROS 2技术指导委员会的成员所表明的那样,业界对ROS 2的支持非常强大。来自世界各地的大大小小的公司,除了在ROS 2上开发产品外,都在投入资源为其做出开源贡献。



四、ROS2学习前提条件


大家学习ROS2的初衷基本上是为了想要制作机器人,但机器人的设计与制造是一个融合性的学科,需要机械、电子、嵌入式、软件开发、网络、人工智能等多个专业相互协同才能进行的开发。而大多数人可能只具备其中的一两项技能,无法独立设计完成机器人。而ROS2的作用就是为了弥补你技能方面的短板。对ROS来说,很多东西都是现成的,你只要直接调用即可,能让你集中更多精力解决一些核心的问题。但即便如此,大家还是需要掌握一些基本的能力,才能的把ROS学好。


1、C++/Python编程能力


首先,您需要掌握C++或者Python其中一种编程语言,两者都会最佳。如果你编程能力弱,可以先从Python起—步,也不需要多么复杂的编程技巧,只要你用程序语言完成过一两次像模像样的课程作业,ROS编程就可以起步了,ROS下的编程与C++/Python编程本质没啥区别,就是用到了ROS相关的库以及ROS中的一些概念,只要跟着教程学习,很快就能入门。当然如果你想深入学习ROS,C++的编程能力要求就会凸显。毕竟ROS的核心或者对时间要求敏感比如驱动代码等还是需要C++来编写。


2、Linux系统基本操作能力


ROS目前支持多种操作系统,主要包括Ubuntu、Windows和OS X。Windows下的支持是从2018年底才开始的,所以配套软件最少,而Ubuntu下的支持最为成熟,会在Ubuntu下开发程序也一名程序员的基本素养,因此,强烈推荐在Ubuntu环境下学习ROS,Linux系统的基本操作能力就是必不可少的。比如命令行窗口的各种文件管理指令(目录跳转、打开、复制、删除等等),窗口界面下的文件管理基本操作(类似windows),网络设置,集成开发环境的使用等等。然后尝试去Linux环境下编一次程序,当你使用了gcc、make、cmake、catkin_make编译程序的时候,你才能感受到编程的真正过程。刚开始会觉得有很多不方便的地方,越往后越能感受到一种简洁之美,这种简洁有利于你调试程序,找出bug,深入理解你所编写的程序。所以,当你在Ubuntu下编写ROS程序的时候,是无法绕开Ubuntu的各项基本操作的。


3、机器人学基本知识


ROS既然被称为机器人操作系统,那么,使用ROS就是用来开发机器人功能的了。此时,必要的机器人学知识是你在这个领域里继续前行的关键。不会机器人学在这个领域里是走不远的,例如坐标变换、运动学方程,速度积分为路程等等,复杂的还有一些动力学分析、各种各样的算法原理,一开始虽然接触不到,但中期都会陆陆续续的出现,这些东西都属于开发机器人功能过程中数学层面的东西,没有这些东西的支撑,就没有机器人的正确运动。很多时候我们能用ROS的各种现成功能包直接跑出结果,可以看到机器人也动了,屏幕输出结果也都没问题,但当环境稍微发生一些变化时,就可能出现一些异常,若不理解机器人学基本原理,处理这些异常是十分困难的。


以上三个方面是入门ROS的一些主要准备工作,至少告诉你应该朝着哪些方面去努力,或者当你学习ROS遇到困难了,可以思考一下是哪些环节制约了你,有针对性的补齐知识点,尽快提高ROS程序开发能力。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表