ROS机器人操作系统是什么?

99ANYc3cd6 机器人 8

什么是 ROS?

一个非常重要的概念:ROS 不是一个传统意义上的操作系统(如 Windows, Linux, Android),它更像是一个为机器人软件开发的、灵活的框架和工具集,构建在标准的操作系统(通常是 Ubuntu)之上。

ROS机器人操作系统是什么?-第1张图片-广州国自机器人
(图片来源网络,侵删)

您可以把它想象成机器人的“软件中间件”或“开发平台”,它提供了一系列库、工具、约定和协议,极大地简化了机器人应用程序的编写、调试、通信和部署。

核心目标:

  • 代码复用:让开发者可以轻松地共享和重用他人的代码。
  • 模块化:将复杂的机器人系统拆分成独立、可协作的模块(节点)。
  • 快速原型开发:提供丰富的工具,让开发者能快速测试和迭代想法。
  • 生态系统:拥有庞大而活跃的全球社区,为各种机器人(从轮式机器人到人形机器人、无人机)提供了大量的软件包。

ROS 的核心概念与架构

理解 ROS 的关键在于理解其分布式、进程化的架构,一个 ROS 程序通常由多个独立的进程(称为“节点”)组成,这些节点通过网络(或本地主机)进行通信。

节点

  • 定义:一个节点就是一个独立的可执行程序,它可以是一个传感器驱动程序、一个算法(如 SLAM 或路径规划)、一个视觉处理器,或者一个简单的控制脚本。
  • 特点:每个节点只负责一项特定任务,一个节点可能专门负责读取激光雷达的数据,另一个节点专门负责根据这些数据规划路径。
  • 命名:每个节点都有一个唯一的名称,/laser_scan_publisher/move_base

消息

  • 定义:节点之间通信的数据载体,消息是一个简单的数据结构,包含一系列字段(类似 C 语言的结构体或 Python 的类)。
  • 特点:消息是强类型的,发送方和接收方必须使用同一种类型的消息才能通信。
  • 自定义:用户可以定义自己的消息类型,例如一个包含 x, y, theta 位置的 Pose2D 消息。
  • 序列化:消息在通过网络传输时会被序列化(转换为字节流),在接收端再反序列化。

话题

  • 定义:节点之间最主要的通信方式,是一种异步的发布/订阅模式
  • 工作方式
    • 发布者:向某个话题发布消息,它不关心谁在订阅,只管发布。
    • 订阅者:订阅某个话题,接收所有发布到该话题的消息,它不关心消息是谁发布的。
  • 类比:就像一个广播电台(发布者)向特定频率(话题)广播节目(消息),任何调到这个频率的收音机(订阅者)都能收听到。
  • 特点:一对多,一个发布者可以对应多个订阅者。

服务

  • 定义:另一种通信方式,是一种同步的请求/响应模式
  • 工作方式
    • 客户端:向服务器发送一个请求,并等待响应。
    • 服务器:接收请求,进行处理,然后返回一个响应。
  • 类比:就像打电话,你(客户端)拨号(请求),对方(服务器)接听并回答(响应),然后通话结束,你不能同时进行多个通话。
  • 特点:一对一,一个请求必须得到一个响应。

参数服务器

  • 定义:一个共享的、全局的“键-值”存储服务器。
  • 用途:用于存储和配置系统的静态参数,例如机器人的尺寸、传感器的校准值、算法的阈值等。
  • 特点:所有节点都可以通过 rosparam 命令或 API 读取和写入参数,参数在系统启动时加载,可以在运行时动态修改。

工具

ROS 提供了大量的命令行工具来管理和调试系统,其中最核心的是:

  • roscore:ROS 的主控程序,在运行任何 ROS 程序之前,必须先运行 roscore,它会启动:
    • ROS Master (rosout):ROS 的命名服务器,负责管理话题、服务等。
    • Parameter Server:参数服务器。
    • rosout:ROS 的日志系统。
  • rosnode:列出和查看节点信息,如 rosnode list, rosnode info /node_name
  • rostopic:查看和交互话题,如 rostopic list, rostopic echo /topic_name (打印消息内容), rostopic hz /topic_name (发布频率)。
  • rosservice:列出和调用服务,如 rosservice list, rosservice call /service_name
  • rosparam:操作参数服务器,如 rosparam list, rosparam get /param_name, rosparam set /param_name
  • rqt:一个强大的图形化工具集,可以替代多个命令行工具,提供可视化的节点图、话题监视器、参数编辑器等。

ROS 的版本与发行版

ROS 有两个主要版本系列,ROS 1ROS 2,它们在设计哲学和架构上有显著不同。

ROS机器人操作系统是什么?-第2张图片-广州国自机器人
(图片来源网络,侵删)

ROS 1

  • 架构:基于中心化的 ROS Master,所有节点都必须先连接到 Master 才能发现彼此,这是一个单点故障源。
  • 通信:主要使用 TCP/IP。
  • 并发模型:使用单线程的“回调队列”,一个节点在同一时间只能处理一个回调,如果某个回调耗时过长,会影响整个节点的性能。
  • 发行版:以版本号命名,如 Noetic (最后一个 LTS 版本, 基于 Ubuntu 20.04), Melodic, Kinetic,每个发行版通常与一个特定的 Ubuntu 版本绑定。

ROS 2

  • 诞生原因:为了解决 ROS 1 的局限性,特别是实时性、安全性、多机器人系统和大规模部署等问题。
  • 架构:去中心化。不依赖 ROS Master,节点之间通过 DDS (Data Distribution Service) 的发现机制自动找到彼此,更加健壮和可扩展。
  • 通信:默认使用 UDP,并支持高质量的实时传输。
  • 并发模型:使用多线程,每个节点可以运行多个线程,充分利用多核 CPU 的性能,解决了 ROS 1 的回调阻塞问题。
  • 安全性:内置了安全机制,可以对节点、用户、数据进行认证和授权。
  • 发行版:以代码名称命名,基于 Ubuntu LTS 版本,最新的稳定版是 Humble Hawksbill (基于 Ubuntu 22.04)。
特性 ROS 1 ROS 2
核心架构 中心化 (依赖 ROS Master) 去中心化 (依赖 DDS)
通信中间件 ROS原生 (TCP/IP为主) DDS (默认为FastRTPS, UDP)
并发模型 单线程回调队列 多线程
发现机制 由ROS Master管理 DDS自动发现
实时性 较差 良好,支持实时优先级
安全性 无内置安全机制 内置安全认证和授权
推荐场景 学术研究、小型项目、原型验证 工业、自动驾驶、多机器人、需要高性能和可靠性的场景

如何开始学习 ROS?

选择版本

  • 新手入门/学术研究:可以从 ROS 1 Noetic 开始,因为它拥有最多的教程、文档和现成的软件包,社区支持最广泛。
  • 面向未来/工业界/高性能需求:强烈建议直接学习 ROS 2 Humble,虽然初期资源可能不如 ROS 1 丰富,但它是未来的方向,架构更优。

安装

  • ROS 1 Noetic: 在 Ubuntu 20.04 上安装,官方有详细的安装教程
  • ROS 2 Humble: 在 Ubuntu 22.04 上安装,官方有详细的安装教程

学习路径

  1. 掌握基本命令:熟练使用 roscore, rosnode, rostopic, rosservice, rosparam 等命令行工具,这是调试和 ROS 交互的基础。
  2. 编写简单的节点:学习使用 Python 或 C++ 编写自己的发布者和订阅者节点,这是理解 ROS 通信机制的关键一步。
  3. 理解工作空间:学习创建和使用 catkin (ROS 1) 或 colcon (ROS 2) 工作空间来管理自己的代码包。
  4. 使用现成的软件包:尝试运行一些现成的机器人仿真,如 TurtleBot3Gazebo 中的模型,这能让你体验到 ROS 的强大之处。
  5. 深入核心概念:学习服务、动作、TF(坐标变换)、URDF(机器人描述文件)等更高级的概念。
  6. 实践项目:找一个感兴趣的项目,比如让机器人实现 SLAM 和导航,或者用摄像头进行物体识别,将所学知识融会贯通。

ROS 是现代机器人学领域不可或缺的基石,它通过其模块化、可重用的设计,极大地推动了机器人技术的发展。

  • ROS 1 是一个成熟、庞大的生态系统,非常适合学习和快速原型开发。
  • ROS 2 则代表了未来,它在性能、可靠性和安全性上对 ROS 1 进行了全面的革新,是构建下一代复杂机器人系统的理想选择。

对于任何有志于从事机器人开发的人来说,学习 ROS 都是一项极具价值的投资。

标签: ROS机器人操作系统入门教程 ROS机器人操作系统应用场景 ROS机器人操作系统学习资源

抱歉,评论功能暂时关闭!