ROS2 详细介绍
ROS2 详细介绍
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
组成【感知、决策、执行】
感知部分:激光雷达、深度相机、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 资料
书籍
-
Semi-autonomous drone navigation-Python for robotics-Introduction to ROS2
-
Teaching ROS2 with a Minimalistic Mobile Robot–Alexandre Cruz Miranda
博客
网址
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 简介与基本使用
原文地址:https://blog.csdn.net/qq_38880380/article/details/140564506
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!