ROS2 详细介绍

12 篇文章 3 订阅

1 介绍

概述

ROS(Robot Operating System,下文简称“ROS”)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。目前ROS主要支持Ubuntu。

特色

在这里插入图片描述

Plumbing: 通信机制
* Process management:进程管理
* Inter-process communication:进程间通信
* Device drivers: 设备驱动

Tools: 工具
* Graphical User interface:图形用户界面
* Simulation: 仿真
* Visualization: 可视化
* Data logging: 数据记录

Capabilities: 功能特性
* Control: 控制
* Planning:规划
* Perception: 感知
* Mapping: 地图构建
* Manipulation: 操控

Ecosystem: 生态系统
* Package organization: 包组织
* Software distribution: 软件分发
* Documentation: 文档
* Tutorials: 教程

趋势判断

随着人形机器人大火,ROS2 必然更火。

以往机械臂,AGV,AMR 等在硬件算力成本、实时性、复杂度等方面需求下,使用 ROS 较少。
如今人形机器人大火,国内芯片生产突破的大背景下,ROS2 因为如下几个方面,博主认为将越来越火:

  • ROS2 在实时性方面有了突破
  • ROS2 跨平台,支持 Windows、MacOS、RTOS 等,低算力芯片,可以上 ROS2,同时未来算力芯片降价,ROS2 中即使有各种复杂冗余模块,也不太担心算力不足
  • 人形机器人的运动控制、规划等,和传统机器人相比,复杂度提升很多,从研发成本考虑,除了一些积累深厚的公司,很多公司将借助 ROS2 开发机器人,从而降低研发成本。

版本选择

选择 ROS2 humble

ROS–版本选择

组成【感知、决策、执行】

感知部分:激光雷达、深度相机、IMU、里程计、碰撞感知、建图
决策部分:路径规划(navigation)算法、定位算法
执行部分:轮子驱动

ROS1 与 ROS2 区别

更稳定、应用更广

ROS1 最初由 Willow Garage 于2007年创建,在开源机器人社区中已经变得巨大。
ROS1 背后的团队已经了解到 - 凭借这些年的经验,缺少哪些重要功能以及可以改进的内容。不幸的是,将所有这些修改添加到ROS1中将需要许多重大更改,并使ROS1非常不稳定。因此,ROS2是从头开始开发的,并且是一个全新的ROS。
至于现在ROS在业界还不是很受欢迎,并且缺乏一些最重要的要求,比如实时、安全、认证、安保。ROS2 的目标之一是使其与工业应用兼容。

接口更统一【API重新设计,使用方法类似】

在 ROS1 中,对于 Cpp,你使用 roscpp,而对于 Python,你使用 rospy。这两个库都是完全独立的,从头开始构建。有些功能接口不统一。
ROS2 具有更多层。只有一个名为 rcl 的基本库,它是用 C 语言实现的。这是包含所有 ROS2 核心功能的基础。在此基础上构建Cpp和Python接口,底层接口统一。

使用 OOP 写入节点

在 ROS1 中,没有特定的结构告诉您应如何编写节点功能。您可以决定在程序中的任何位置添加回调函数,或者根据需要使用OOP,但每个函数的实现都可以是唯一的。
在 ROS2 中,情况有所不同。有一个关于如何编写节点的约定。您必须创建一个继承自 Node 对象的类。这将为每个人节省大量时间。您已经拥有了一个良好的模块化结构来编写节点。这将使您的程序更干净,开发人员在不同项目上的合作将更容易。

集中式到分布式【通信换成DDS】

ROS1 中,在运行节点之前,需要启动 ROS 主节点。ROS1 主节点将充当节点的 DNS 服务器,以便它们可以相互检索。
ROS2 中,不再有 ROS 主节点!这不再是一个集中式系统。每个节点都具有发现其他节点的能力。可以简单地启动一个节点,而不必担心是否有主节点正在运行。可以创建完全分布式系统。

ROS2设计了一个ROS Middleware,简称RMW,也就是指定一个标准的接口,比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来,这样就把问题交给了最熟悉自家DDS的厂商。对于我们这些用户来讲,某一个DDS用的不爽,只要安装另一个,然后做一个简单的配置,程序一行的都不用改,轻松更换底层的通信系统。

服务由同步到异步

在 ROS1 中,服务是同步的。当服务客户端向服务器请求请求时,该请求将一直卡住,直到服务器响应(或失败)。
在 ROS2 中,服务是异步的。调用服务时,可以添加一个回调函数,该函数将在服务器响应时触发。同时,您的主线程不会卡住。

编译方式做了调整

多机器人系统

未来机器人一定不会是独立的个体,机器人和机器人之间也需要通信和协作,ROS2为多机器人系统的应用提供了标准方法和通信机制。

跨平台

机器人应用场景不同,使用的控制平台也会有很大差异,比如自动驾驶汽车中的算力性能肯定比AMR机器人强很多,为了让所有机器人都可以运行ROS2,ROS2可以跨平台运行于Linux、Windows、MacOS、RTOS,甚至是没有任何系统的微控制器(MCU)上,这样我们就不用纠结自己的控制器能不能用ROS了。

实时性

机器人运动控制和很多行为策略要求机器人具备实时性,比如机器人要可靠得在100ms内发现前方的行人,或者稳定的在1ms周期内完成运动学、动力学的解算,ROS2为类似这样的实时性需求提供了基本保障。

网络连接

无论在怎样的网络环境下,ROS2都可以尽量保障机器人大量数据的完整性和安全性,比如在wifi信号不好的时候数据也要尽力发送过去,在有黑客入侵风险的场景下要对数据进行加密解密。

项目管理

机器人开发是一个复杂的系统工程,设计、开发、调试、测试、部署等全流程的项目管理工具和机制,也会在ROS2中体现,更方便我们去开发一款机器人。

2 核心概念

整体介绍

在这里插入图片描述

话题、服务、动作

在这里插入图片描述

  • 话题通信接口的定义使用的是.msg文件,由于是单向传输,只需要描述传输的每一帧数据是什么就行,比如在这个定义里,会传输两个32位的整型数,x、y,我们可以用来传输二维坐标的数值。
    在这里插入图片描述

  • 服务通信接口的定义使用的是.srv文件,包含请求和应答两部分定义,通过中间的“—”区分,比如之前我们学习的加法求和功能,请求数据是两个64位整型数a和b,应答是求和的结果sum。
    在这里插入图片描述

  • 动作是另外一种通信机制,用来描述机器人的一个运动过程,使用.action文件定义,比如我们让小海龟转90度,一边转一边周期反馈当前的状态,此时接口的定义分成了三个部分,分别是动作的目标,比如是开始运动,运动的结果,最终旋转的90度是否完成,还有一个周期反馈,比如每隔1s反馈一下当前转到第10度、20度还是30度了,让我们知道运动的进度。
    在这里插入图片描述

名称和数值组成键值对,形成全局字典。
ROS1中存在Master中,各节点共享,ROS2中类似git机制吧,每个节点同步其他节点共享的参数。

在这里插入图片描述

3 资料

书籍

博客

网址

4 Data Distribution Service (DDS)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ROS 中使用 DDS Leveraging DDS Security in ROS2

5 仿真【3D机器人】Gazebo

gazebo是三维物理仿真平台,强调的是创建一个虚拟的仿真环境。只能在Linux系统下使用。
在这里插入图片描述

6 control 部分

在这里插入图片描述
在这里插入图片描述

  • 发展历程
    在这里插入图片描述

参考

1、ROS Has Solutions to Your Robot Problems
2、How to pick a mobile robot simulator: A quantitative comparison of CoppeliaSim, Gazebo, MORSE and Webots with a focus on accuracy of motion
3、ROS2 Tutorial Release October 03, 2023 Murilo M. Marinho
4、Teaching Robot Learning in ROS2–Filipe Reis Almeida
5、常熟理工 张瑞雷老师 zhangrelay
6、古月居网站
7、小鱼 ROS2
8、ROS2 Basics for C++
9、ROS–资料汇总
10、ROS2–概述
11、ROS–版本选择
12、UR-ROS
13、机器人开发–Apollo ROS介绍
14、ROS–ROS安装(kinetic)与测试
15、ROS–介绍、书籍、网站
16、ROS2 中文指南
17、RealtimeROS2
18、ROS2 学习(一)ROS2 简介与基本使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

worthsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值