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

ROS学习笔记(4):ROS架构和通讯机制

前提

前4篇文章以及帮助大家快速入门ROS了,而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。

1.ROS架构三层次:

1.基于Linux系统的OS层;

2.实现ROS核心通信机制以及众多机器人开发库的中间层;

3.在ROS Master的管理下保证功能节点正常运行的应用层。

2.ROS关键概念

1.节点(Node)

·节点:执行运算任务的进程,一个系统由多个节点组成,被称为“软件模块”。

ROS的节点关系:

2. 消息(Message)

·消息通信:节点间最重要的通信机制(基于发布/订阅模型)。

·消息是以发布/订阅(Publish/Subscribe)的方式传递。

3.话题(Topic)

·发布者(Talker):针对给定话题发布消息的节点。

·订阅者(Listener):关注话题并订阅特定类型数据的节点。

·订阅者与发布者互相不知道存在

ROS基于发布/订阅模型的话题通信:

4.服务 (Service)

·服务:同步传输模式(基于话题的客户端/服务器(Client/Server)模型),包含用于请求的通信数据类型和用于应答的通信数据类型。

·ROS只允许一个节点提供指定命名的服务

5.ROS节点管理器(ROS Master)

·ROS节点管理器:顾名思义,节点的控制器,保证节点有序的执行

·ROS节点管理器通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数。

3.文件系统

1.功能包(Package)

2.功能包清单(Package Manifest)

3.元功能包(Meta Package)

4.消息

5.服务

6.代码(Code)

1.功能包

·功能包:ROS软件的基本单元,包含ROS节点、库、配置文件等。

功能包文件结构:

·config:放置功能包中的配置文件。

·include:放置功能包中需要用到的头文件。

·scripts:放置可以直接运行的python文件。

·src:放置需要编译的C++文件。

·launch:放置功能包的启动文件。

·msg:放置功能包自定义的消息类型。

·srv:放置功能包自定义的服务类型。

·action:放置功能包自定义的动作指令。

·CMakeLists.txt:编译器编译功能包的规则。

·package.xml:功能包清单:记录功能包基本信息,作者信 息、许可信息、依赖选项、编译标志等。

<build_depend>depeng</build_depend>标签:功能包中代码编译时的依赖

<run_depend>depend</run_depend>标签:功能包中可执行程序运行时的依赖

ROS功能包常用命令:

ROS命令_ros复制到llib中-CSDN博客

命令作用
catkin_create_pkg <包名> [依赖]创建功能包
rospack获取功能包的信息
catkin_make编译工作空间
rosdep自动安装功能包依赖的其他包
roscd功能包目录跳转
roscp拷贝功能包中的文件

rosed

编辑功能包中的文件
rosrun运行功能包中的可执行文件
roslaunch运行启动文件

2.元功能包

·元功能包:一种特殊的功能包,只包含package.xml元功能包清单文件。

·作用:将多个功能包整合成为逻辑独立的功能包。

·元功能包的package.xml文件需要包含引用

<export>

        <metapackage/>

</export>

·元功能包只需要<run_depend>标签

ROS通信机制

·话题通信机制

·服务通信机制

·参数管理机制

1.话题通信机制

发布/订阅模型的话题通信:

 通信建立的过程:

【RPC】RPC基本介绍_牧心.的博客-CSDN博客

1.发布者注册

Talker启动,通过端口1234使用RPC向ROS Master注册发布者的信息(例如发布消息的话题名),然后将节点的注册信息加入注册列表。

2.订阅者注册

Listener启动,通过RPC向ROS Master注册订阅者消息(例如订阅的话题名)。

3.信息匹配

ROS Master根据Listener的订阅信息在注册列表中查找,没有找到匹配的发布者就等待发布者出现,匹配到了就通过RPC向订阅者发送发布者的RPC地址信息。

4.订阅者发送连接请求

订阅者接收到ROS Master发送的地址信息后,通过RPC向发布者发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP/UDP)。

5.发布者确认连接请求

【精选】TCP协议详解 (史上最全)_开放式tcp-CSDN博客

发布者接收到订阅者发送的连接请求后,通过RPC向订阅者确认连接(自身的TCP地址信息)。

6.订阅者与发布者建立网络连接

订阅者接到确认请求后,使用TCP与Talker建立网络连接。

7.发布者向订阅者发布数据

建立连接后,发布者向订阅者发送话题消息数据。

2.服务通信机制

·服务是带应答的通信机制

服务器/客户端的服务通信机制:

 通信建立的过程:

1.发布者注册 

Talker启动,通过端口1234使用RPC向ROS Master注册发布者的信息(例如发布消息的话题名),然后将节点的注册信息加入注册列表。

2.订阅者注册

Listener启动,通过RPC向ROS Master注册订阅者消息(例如订阅的话题名)。

3.信息匹配

ROS Master根据Listener的订阅信息在注册列表中查找,没有找到匹配的服务发布者就等待发布者出现,匹配到了就通过RPC向订阅者发送发布者的TCP地址信息。

4.订阅者与发布者建立网络连接

Listener接收到确认请求后,用TCP尝试与Talker建立网络连接, 发送服务的请求数据。

5.发布者向订阅者发布服务应答数据 

Talker接收到服务请求和参数后,执行服务功能,执行完成,向Listener发送应答数据。

3.参数管理机制

参数管理机制:

1.发布者设置变量 

Talker使用RPC向ROS Master发送参数设置数据(参数名和参数值);ROS Master数据保存到参数列表。

2.订阅者查询参数值

Listener通过RPC向ROS Master发送参数查找请求(要查找的参数名)。

3.ROS Master向订阅者发送参数值

ROS Master根据Listener的请求从参数列表中查找参数,找到,用RPC将参数值发送给Listener。

注释:发布者更新参数,订阅者需要重新查询

4.话题和服务的区别

相关文章:

ROS学习笔记(4):ROS架构和通讯机制

前提 前4篇文章以及帮助大家快速入门ROS了&#xff0c;而从第5篇开始我们会更加注重知识积累。同时我强烈建议配合B站大学的视频一起服用。 1.ROS架构三层次&#xff1a; 1.基于Linux系统的OS层&#xff1b; 2.实现ROS核心通信机制以及众多机器人开发库的中间层&#xff1b…...

深度新闻稿件怎么写?新闻稿怎么写得有深度?

深度新闻稿件&#xff0c;顾名思义&#xff0c;是对新闻事件进行深入挖掘和分析的稿件。它不仅仅是对事件的简单报道&#xff0c;更注重对事件背后的社会现象、原因、影响等方面进行深度剖析&#xff0c;从而使读者能够全面、深入地了解事件。这种稿件要求作者具备较高的新闻敏…...

百度智能云千帆大模型平台黑客马拉松报名开启!

比赛简介 创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级&#xff0c;还是主图生成带来的素材生产效率提升&#xff0c;又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制&#xff0c;亦或者是为学生提供更符合真实的口语练习环…...

数据库 | 看这一篇就够了!最全MySQL数据库知识框架!

大家好&#xff01; 作为一名程序员&#xff0c;每天和各种各样的“数据库”打交道&#xff0c;已经成为我们的日常。当然&#xff0c;立志成为一名超级架构师的我&#xff0c;肯定要精通这项技能。咳咳&#xff01;不过饭还是要一口一口吃的&#xff0c;“数据库”这个内容实在…...

Android 控件背景实现发光效果

主要实现的那种光晕效果&#xff1a;中间亮&#xff0c;四周逐渐变淡的。 这边有三种发光效果&#xff0c;先上效果图。 第一种、圆形发光体 实现代码&#xff1a;新建shape_light.xml&#xff0c;导入以下代码。使用时&#xff0c;直接给view设置为background。 <?xml …...

安全狗亮相厦门市工信领域数据安全宣贯培训会

10月31日&#xff0c;厦门市工业和信息化局&#xff08;市大数据管理局&#xff09;顺利举办厦门市工信领域数据安全宣贯培训。 作为国内云原生安全领导厂商&#xff0c;安全狗以厦门市工业领域数据安全管理支撑单位身份受邀出席此次会议。 据悉&#xff0c;此次活动旨在贯彻…...

最长回文子串

问题 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同…...

从瀑布模式到水母模式:ChatGPT引领软件研发的革新之路

ChatGPT引领软件研发的革新之路 概述操作建议本书优势 内容简介作者简介专家推荐读者对象目录直播预告写在末尾&#xff1a; 主页传送门&#xff1a;&#x1f4c0; 传送 概述 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了…...

一种使用wireshark快速分析抓包文件amr音频流的思路方法

解决方案&#xff1a; 1. 使用wireshark过滤amr,并导出原始数据文件&#xff1b; 2.使用ue的二进制编辑模式&#xff0c;编辑该文件&#xff0c;添加amr头&#xff0c;6个字节数据“#!AMR”&#xff0c;字节数据为 23 21 41 4D 52 0A 3.修正格式&#xff1a;通过抓包发现&#…...

银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…...

InnoDB - 双写机制

双写机制用于提高数据持久性和可靠性。 双写机制的核心思想是&#xff0c;将写操作先写入一个临时缓冲区&#xff0c;然后再写入实际的数据文件。这个临时缓冲区通常是固定大小的内存缓冲区&#xff0c;称为双写缓冲。这个机制的主要目的是避免数据文件在写入时出现损坏或数据…...

【蓝桥杯选拔赛真题08】C++最大值最小值平均值 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++最大值最小值平均值 一、题目要求 1、编程实现 2、输入输出 二、算法分析</...

软考高级系统架构设计师系列之:系统开发基础知识、项目管理、信息安全和网络安全、计算机网络章节选择题详解

软考高级系统架构设计师系列之:系统开发基础知识、项目管理、信息安全和网络安全、计算机网络章节选择题详解 一、产品配置二、需求管理三、需求跟踪四、软件生命周期五、RUP六、耦合与内聚七、软件文档八、软件需求九、软件活动十、项目时间管理十一、需求管理十二、项目范围…...

0基础学习PyFlink——时间滑动窗口(Sliding Time Windows)

在《0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)》我们介绍了不会有重复数据的时间滚动窗口。本节我们将介绍存在重复计算数据的时间滑动窗口。 关于滑动窗口&#xff0c;可以先看下《0基础学习PyFlink——个数滑动窗口&#xff08;Sliding Count Windows&#x…...

API安全之《大话:API的前世今生》

写在前面&#xff1a;本文结合API使用的业界现状&#xff0c;系统性地阐述API的基本概念、发展历史、表现形式等基础内容&#xff0c;主要包含以下内容&#xff1a; 1.什么是API 2.API的发展历史 3.现代API常用消息格式 4.top N 互联网企业API 使用现状 当前的世界是一个信…...

H5或者Vue实现二维码识别

前言 1、扫码识别库采用开源的zxing/library 2、支持js&#xff0c;Vue&#xff0c;lit等实现 原文章地址和代码仓库地址 1、在界面创建video标签用来显示摄像头内容 <!-- 视区 --><!-- lit写法 --> <video ${ref(this.videoRef)} class"xy-scan-wrap…...

stm32整理(三)ADC

1 ADC简介 1.1 ADC 简介 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道&#xff0c;可测量来自 16 个外部 源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续 采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位…...

Redis-持久化+主从架构

文章目录 Redis的持久化RDB模式异步持久化的实现AOF模式总结 Redis的主从架构1.端口以及文件调试测试2.主从配置3.数据同步原理&#xff08;第一次同步为全局同步&#xff09;4.增量同步5.主从配置优化6.问:master主机怎么判断从机slave是不是第一次同步数据&#xff1f; Redis…...

STM32H750之FreeRTOS学习--------(四)中断管理

四、FreeRTOS中断管理 中断的概念不再过多叙述&#xff0c;学习过逻辑的都知道 中断的执行过程 中断请求 外设产生中断请求&#xff08;GPIO外部中断、定时器中断等&#xff09;响应中断 CPU停止执行当前程序&#xff0c;转而去执行中断处理程序&#xff08;ISR&#xff09;…...

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...