当前位置: 首页 > article >正文

ROS2教程 - 1 ROS简介

更好的阅读体验:https://www.foooor.com

1 ROS简介

如果现在让我们开发一个机器人,没有可用的框架支持,那么该如何实现呢?

我们可能在 Windows 或 Linux 系统上进行开发,需要集成各个传感器和驱动程序,用于获取传感器的数据。我们可能开发一个模块读取传感器的数据,开发别的模块实现功能,这样传感器的数据可能需要在多个模块之间进行传输,随着功能的复杂,模块间的通信也变化复杂。关键每个人要开发一个机器人,都需要重新来搞一套,非常麻烦。

ROS 它来了。

1.1 ROS简介

ROS (Robot Operating System,机器人操作系统) 是用于开发机器人的一个系统,说叫机器人操作系统,其实它并不是传统意义上的操作系统,和 Windows 、Linux 等是不一样的,它是一个平台或者说中间件,是在传统操作系统之上搭建的,例如 ROS1是基于 Linux Ubuntu 系统的,ROS1 版本和 Ubuntu 系统版本有相应的对应关系,ROS2 已经实现了在不同操作系统上的部署,ROS 更多的是实现一个平台的功能,提供通信机制、分布式系统、硬件抽象等功能,让我们更方便的构建机器人应用程序。

1 机器人发展背景

机器人的发展历史可以追溯到 20 世纪中期,最早的工业机器人用于制造和装配任务,这些机器人通过机械臂实现简单的自动化操作。在最初的几十年里,机器人技术集中于高度专业化的硬件开发和工业自动化流程。然而,随着计算机科学的进步,机器人领域逐渐从单一的硬件自动化发展为软硬件结合的复杂系统,能够执行多种任务并处理多种环境。

  • 20 世纪中期:简单的工业自动化机器人出现,用于重复性的任务。
  • 20 世纪末:随着计算机技术和人工智能的进步,机器人开始具有感知能力,如通过传感器收集环境数据,做出相应的决策。
  • 21 世纪初:机器人技术迅猛发展,开始被用于家庭、服务、医疗、农业等非工业领域,并逐渐具备自主性和智能化。

2 ROS 的诞生背景

随着机器人的复杂性和应用场景的扩大,开发机器人系统面临了诸多挑战:

  1. 系统复杂度:机器人的硬件(传感器、执行器等)和软件(控制算法、感知系统、路径规划等)之间的集成难度越来越大。
  2. 复用性差:不同研究团队和开发者之间难以共享代码和成果,导致重复开发同样的基础功能,重复造轮子。
  3. 开发成本高:构建一个完整的机器人系统不仅需要大量的时间和资源,还需要深厚的计算机和电子技术知识。

为了应对这些问题,2007 年,来自美国 Willow Garage 研究所的开发团队推出了 ROS(Robot Operating System),旨在提供一个开源平台,简化机器人系统开发流程,鼓励研究人员和开发者之间的代码复用和协作。ROS 通过一套标准化的接口,使得机器人开发者可以专注于更高层次的算法和应用开发,而无需从零开始编写基础设施代码。

3 ROS1 的设计目标

ROS1 的核心设计目标可以概括为以下几点:

  1. 模块化设计:ROS 的设计理念是通过节点(Node)构建分布式系统,每个节点负责单一功能。节点之间通过发布/订阅机制进行通信,数据通过消息传递。这种设计方式极大提高了开发的模块化和灵活性。
  2. 跨语言支持:ROS 提供了多语言支持,主要支持 C++ 和 Python 等语言,开发者可以根据需求选择适合的编程语言。
  3. 开源社区驱动:ROS 的另一个目标是打造一个庞大的开源社区,开发者可以共享自己的功能包,鼓励代码复用。
  4. 工具链集成:ROS 提供了大量工具来支持开发和调试,如 rviz 可视化工具、rosbag 数据记录工具等,帮助开发者更快地构建和调试机器人系统。

ROS1 的局限性:

尽管 ROS1 取得了广泛的成功并成为了机器人研究和开发的事实标准,但它也存在一些局限性:

  1. 实时性问题:ROS1 并非为实时系统设计,这在一些需要严格时间约束的应用场景(如工业机器人和自动驾驶)中是一个重要的限制。
  2. 分布式系统的扩展性:ROS1 的通信机制基于自定义协议,虽然支持节点间的通信,但在大规模分布式系统中效率不高。
  3. 安全性缺失:ROS1 没有内置的安全机制,无法直接支持消息加密和认证,限制了其在安全要求高的场景中的应用。
  4. 跨平台支持不佳:ROS1 主要依赖于 Linux,特别是 Ubuntu 系统,限制了在其他操作系统(如 Windows 和 macOS)上的应用。

1.2 ROS2简介

鉴于上述局限性,Open Robotics(前身为 Willow Garage)启动了 ROS2 的开发。ROS2 的设计目标之一是弥补 ROS1 的不足,并为未来的机器人系统提供更好的架构支持。

1 ROS2和ROS1的区别

ROS2 相比于 ROS1 只是沿用了某些 ROS1 的概念和设计理念,但其整体架构、底层实现和功能特性都有了显著的变化,可以说是一个全新的系统。

ROS2 与 ROS1 在多个方面存在区别和优化,主要如下:

  1. 架构方面:

    • ROS1:使用了一个中心化的 master 节点来管理所有节点的通信。这种架构下,节点之间的通信需要通过 master 节点进行协调和管理,比如节点的注册、话题的发布与订阅等信息都由 master 节点维护。这就导致了一些问题,一方面,如果 master 节点出现故障,整个系统的通信就会受到影响,存在单点故障的风险;另一方面,随着系统中节点数量的增加,master 节点可能会成为系统的性能瓶颈,影响系统的可扩展性。
    • ROS2:采用了分布式架构,去除了对中心 master 节点的依赖,实现了节点的自发现机制。每个节点可以直接与其他节点进行通信,不需要通过中间的 master 节点进行协调。这种架构提高了系统的可靠性和可扩展性,即使某个节点出现故障,也不会影响其他节点之间的通信。
  2. 通信机制方面:

    • ROS1:基于 TCPROS/UDPROS 进行通信,这两种协议是 ROS1 自定义的通信协议,在一定程度上满足了机器人系统的通信需求,但在实时性和可靠性方面存在不足。并且其通信依赖于 master 节点,如果 master 节点出现问题,通信就会中断。
    • ROS2:使用 DDS(Data Distribution Service)作为通信中间件。DDS 是一种专门为实时系统设计的数据分发 / 订阅标准,具有高效、可靠、实时性强等优点。它支持多种 QoS(Quality of Service)策略,例如可靠性、实时性、持久性等,可以根据不同的应用场景进行配置,满足不同应用的需求。
  3. 编程语言支持方面:

    • ROS1:主要支持Python 2和C++03标准,对Python 3 和 C++11 及以上的支持不足。
    • ROS2:增加了对C++11/14和Python 3的支持,对于 Python,ROS2 至少需要 Python 3.5 版本,鼓励使用更现代的语言特性,提高了编程的灵活性和可扩展性。
  4. 跨平台支持方面:

    • ROS1:主要支持 Ubuntu(Linux),尤其与特定的 Ubuntu 版本紧密绑定。虽然 ROS1 可以移植到其他系统,但需要大量工作,Windows 和 macOS 的支持非常有限。
    • ROS2:从一开始就设计为跨平台系统,原生支持多种操作系统,包括 Linux、Windows 和 macOS。
  5. 实时性能方面:

    • ROS1:在实时性方面的设计相对较弱,虽然可以满足一些基本的实时应用需求,但在对实时性要求较高的场景下,可能会出现性能不足的情况。
    • ROS2:更加注重实时性能,通过优化通信机制、支持实时操作系统等手段提高了系统的实时响应能力,能够更好地满足对实时性要求较高的机器人应用场景,如工业机器人、自动驾驶等。
  6. 数据类型方面:

    • ROS1:使用自定义的 ROS 数据类型,这在一定程度上满足了 ROS 系统内部的数据通信需求,但与其他系统的数据交互可能会存在兼容性问题。
    • ROS2:采用了 DDS 数据类型,提高了与其他系统的互操作性,使得 ROS2 系统能够更好地与其他采用 DDS 标准的系统进行数据交互和集成。
  7. 编译系统方面:

    • ROS1:使用catkin作为编译系统。

    • ROS2:采用了新的编译系统Ament,它比catkin更高效,支持跨平台编译,并能更好地集成现代构建工具链。

  8. API 设计方面:

    • ROS1:ROS1 的 API 设计是面向较早期的机器人开发需求,API 的一些设计在现代机器人系统中略显笨拙,尤其是对实时性和分布式系统的支持不足。

    • ROS2:API 进行了改进,增强了对多线程、实时系统和分布式系统的支持,使得在更复杂的机器人应用中使用更加灵活。

  9. 安全性方面:

    • ROS1:没有内置的安全机制,消息传输不加密,缺乏身份验证和访问控制,限制了在安全敏感场景中的应用。

    • ROS2:集成了 DDS 提供的安全特性,包括消息加密、身份认证和访问控制等安全功能。

综上所述,ROS2 在架构、通信、语言支持、跨平台、实时性、数据类型、编译系统、API 设计和安全性等方面都对 ROS1 进行了优化和改进,具有更高的可靠性、可扩展性、实时性和安全性,更适合现代机器人系统的开发和应用。

2 ROS2 的发展历程

  1. 2014 年:开始开发

    ROS2 项目的开发工作于 2014 年正式启动,目标是解决 ROS1 中的性能和架构问题,并引入适应未来机器人应用场景的新功能。

  2. 2017 年:ROS2 Ardent Apalone

    2017 年,ROS2 发布了第一个正式版本 Ardent Apalone,这是 ROS2 的早期版本,虽然具备了一些基本功能,但整体功能还不完善。

  3. 2018 年:ROS2 Bouncy Bolson 和 Crystal Clemmys

    2018 年,ROS2 相继发布了两个版本 Bouncy 和 Crystal,重点改进了分布式系统支持和跨平台性能。

  4. 2019 年:ROS2 Dashing Diademata

    Dashing 版本标志着 ROS2 进入更稳定的阶段,它进一步完善了实时性支持和跨平台兼容性,并被广泛应用于工业机器人系统。

  5. 2020 年:ROS2 Foxy Fitzroy

    Foxy 是 ROS2 另一个长期支持(LTS)版本,它带来了更加完善的工具链、增强的安全特性和更高的稳定性。

  6. 2022 年及以后

    随着每年的迭代更新,ROS2 的功能日益丰富,特别是在工业机器人、自动驾驶、无人机等领域得到了广泛应用。目前,ROS2 的 LTS 版本 Galactic 和 Humble 均被广泛应用于生产环境中。

3 ROS2 的未来展望

随着机器人技术在各个领域的深入应用,ROS2 有望继续扩展其功能,特别是在以下几个方面:

  1. 更强的实时性支持:未来的 ROS2 版本可能会进一步增强在工业自动化、自动驾驶等需要严格实时性的场景下的应用。
  2. 边缘计算和云端支持:随着机器人与云计算的结合,ROS2 在边缘计算和云端协同方面的功能可能会进一步提升,支持大规模的机器人群体协作和智能决策。
  3. 社区驱动的发展:ROS2 依旧保持了强大的开源社区支持,未来 ROS2 将会随着社区的发展进一步扩展和优化,尤其是为更多的新兴领域提供支持。

ROS2 是一个极具前景的机器人开发平台,它不仅继承了 ROS1 的灵活性和模块化设计,还在跨平台、实时性和安全性等关键领域进行了重大改进。未来,ROS2 将在机器人技术的持续发展中扮演重要角色。

看完了吗?了解一下即可。


1.3 学习资料

ROS 官网:https://www.ros.org/

ROS文档:https://docs.ros.org/


http://www.kler.cn/a/415915.html

相关文章:

  • 【docker】docker的起源与容器的由来、docker容器的隔离机制
  • 分布式锁的实现原理
  • 【Jenkins】docker 部署 Jenkins 踩坑笔记
  • Spring Data
  • 提升数据分析效率:Excel Power Query和Power Pivot的妙用
  • 利用zabbix自定义脚本监控MySQL基础状态
  • ️ 爬虫开发中常见的性能优化策略有哪些?
  • Kafka-Connect
  • 单片机几大时钟源
  • Java基础——泛型(3)#HashMap泛型
  • GORM慢查询、SQL日志与Go项目日志的整合与串联
  • #Js篇: 链式判断运算符 ?.和Null判断运算符 ??和逻辑赋值运算符||= = ??=
  • 领养我的宠物:SpringBoot开发指南
  • Cesium K-means自动聚合点的原理
  • 史陶比尔机器人维修-接口总结
  • Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。
  • 3.24MayBeSomeComputeC
  • 如何通过PHP爬虫模拟表单提交,抓取隐藏数据
  • USB Type-C一线通扩展屏:多场景应用,重塑高效办公与极致娱乐体验
  • 26页PDF | 数据中台能力框架及评估体系解读(限免下载)
  • linux-信号
  • springboot339javaweb的新能源充电系统pf(论文+源码)_kaic
  • nginx同一域名下部署多个项目
  • 【动态规划】股票市场交易策略优化
  • hhdb数据库介绍(10-17)
  • Kylin Server V10 下 Nacos 集群部署