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.话题和服务的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/114394.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS开发:基于http开源一个网络请求库

前言 网络封装的目的&#xff0c;在于简洁&#xff0c;使用起来更加的方便&#xff0c;也易于我们进行相关动作的设置&#xff0c;如果&#xff0c;我们不封装&#xff0c;那么每次请求&#xff0c;就会重复大量的代码逻辑&#xff0c;如下代码&#xff0c;是官方给出的案例&am…

CSS3背景样式

在CSS 2.1中&#xff0c;background属性的功能还无法满足设计的需求&#xff0c;为了方便设计师更灵活地设计需要的网页效果&#xff0c;CSS3在原有background基础上新增了一些功能属性&#xff0c;可以在同一个对象内叠加多个背景图像&#xff0c;可以改变背景图像的大小尺寸&…

nodelist 与 HTMLCollection 的区别

原地址 https://cloud.tencent.com/developer/article/2013289 节点与元素 根据 W3C 的 HTML DOM 标准&#xff0c;HTML 文档中的所有内容都是节点&#xff1a; 整个文档是一个文档节点每个 HTML 元素是元素节点HTML 元素内的文本是文本节点每个 HTML 属性是属性节点注释是注…

基于C语言实现扫雷小游戏

扫雷游戏 1. 扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析 2. 扫雷游戏的代码实现3. 扫雷游戏的扩展 1. 扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 使用控制台实现经典的扫雷游戏 游戏可以通过菜单实现继续玩或者退出游戏 扫雷的棋…

【考研数学】概率论与数理统计 —— 第七章 | 参数估计(2,参数估计量的评价、正态总体的区间估计)

文章目录 一、参数估计量的评价标准1.1 无偏性1.2 有效性1.3 一致性 二、一个正态总体参数的双侧区间估计2.1 对参数 μ \mu μ 的双侧区间估计 三、一个正态总体的单侧置信区间四、两个正态总体的双侧置信区间写在最后 一、参数估计量的评价标准 1.1 无偏性 设 X X X 为总…

技能证里的天花板—阿里云云计算架构师ACE认证!

在当今的社会中&#xff0c;想要获得一份好工作、得到丰厚的报酬&#xff0c;唯一的方法就是证明自己优秀&#xff0c;能给公司创造价值&#xff0c;是大多数公司想要看到的。 那么在面试过程中&#xff0c;怎么样才能让面试官一眼就记住呢&#xff1f;那一定是有一份足够优秀…

JVM虚拟机:JVM的垃圾回收清除算法(GC)有哪些

垃圾回收清除算法 引用计数法 标记清除 拷贝算法 标记压缩 引用计数法 有一个引用指向对象,那么引用计数就加1,少一个引用指向,那么引用计数就减1,这种方法了解一下就好,JVM机会不会使用这种方法,因为它在每次对象赋值的时候都要维护引用计数器,且计数器本身也有一定的…

JAVA虚拟机-第2章 Java自动内存管理-异常实践

Java堆溢出 堆的参数设置&#xff1a;将堆的最小值-Xms参数与最大值-Xmx参数设置 public class HeapOOM {static class OOMObject {}public static void main(String[] args) {List<OOMObject> list new ArrayList<OOMObject>();while (true) {list.add(new OO…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具&#xff0c;本文简单介绍一下集成的步骤&#xff0c;并提供一份完整的checkstyle的代码规范格式文件&#xff0c;以及常见的格式问题的解决方法。 一&#xff0c;安装 打开idea的文件选项&#xff0c;选择设置&…

Unity3D实现页面的滑动切换功能

效果展示 Unity3D实现页面的滑动切换 效果 文章目录 前言一、先上代码二、创建UI1.创建Scroll View如下图&#xff0c;并挂载该脚本&#xff1a;2.Content下创建几个Itme 总结 前言 好记性不如烂笔头&#xff01; 一、先上代码 /*******************************************…

前端性能分析工具

前段时间在工作中,需要判断模块bundle size缩减对页面的哪些性能产生了影响, 因此需要了解前端的性能指标如何定义的,以及前端有哪些性能分析工具, 于是顺便整理了一篇笔记, 以供前端小白对性能这块知识点做一个入门级的了解. 页面渲染 在了解性能指标和分析工具之前,有必要先…

怎样去除视频中的杂音,保留人声部分?

怎样去除视频中的杂音&#xff0c;保留人声部分&#xff1f;这个简单嘛&#xff01;两种办法可以搞定&#xff1a;一是进行音频降噪&#xff0c;把无用的杂音消除掉&#xff1b;二是提取人声&#xff0c;将要保留的人声片段提取出来。 这就将两种实用的办公都分享出来&#xf…

datagrip出现 java.net.ConnectException: Connection refused: connect.

出现这样的情况要看一下hadoop有没有启动 start-all.sh nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/ /export/server/apache-hive-3.1.2-bin/bin/hive show databa…

Apache POI

文章目录 一、Apache POI介绍二、应用场景三、使用步骤1.导入maven坐标2.写入代码讲解3.读取代码讲解 一、Apache POI介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文…

pytorch 笔记:GRU

1 介绍 对于输入序列中的每个元素&#xff0c;每一层都计算以下函数&#xff1a; ht​ 是t时刻 的隐藏状态xt​ 是t时刻 的输入ht−1​ 是 t-1时刻 同层的隐藏状态或 0时刻 的初始隐藏状态rt​,zt​,nt​ 分别是重置门、更新门和新门。σ 是 sigmoid 函数∗ 是 Hadamard 乘积。…

coalesce函数(SQL )

用途&#xff1a; 将控制替换成其他值&#xff1b;返回第一个非空值 表达式 COALESCE是一个函数&#xff0c; (expression_1, expression_2, …,expression_n)依次参考各参数表达式&#xff0c;遇到非null值即停止并返回该值。如果所有的表达式都是空值&#xff0c;最终将返…

HarmonyOS鸿蒙原生应用开发设计- 元服务(原子化服务)图标

HarmonyOS设计文档中&#xff0c;为大家提供了独特的元服务图标&#xff0c;开发者可以根据需要直接引用。 开发者直接使用官方提供的元服务图标内容&#xff0c;既可以符合HarmonyOS原生应用的开发上架运营规范&#xff0c;又可以防止使用别人的元服务图标侵权意外情况等&…

关于网络编程的3个问题

一、TCP 和 UDP 可以同时绑定相同的端口吗&#xff1f; 答案&#xff1a;可以的 在数据链路层中&#xff0c;通过 MAC 地址来寻找局域网中的主机。在网络层中&#xff0c;通过 IP 地址来寻找网络中互连的主机或路由器。在传输层中&#xff0c;需要通过端口进行寻址&#xff0…

SpringCloud(五) Eureka与Nacos的区别

SpringCloud(二) Eureka注册中心的使用-CSDN博客 SpringCloud(四) Nacos注册中心-CSDN博客 在这两篇博文中我们详细讲解了Eureka和Nacos分别作为微服务的注册中心的使用方法和注意事项,但是两者之间也有一些区别. 一, Nacos实例分类 Nacos实例分为两种类型: 临时实例:如果实例…

[common c/c++] ring buffer/circular buffer 环形队列/环形缓冲区

前言&#xff1a; ring buffer / circular buffer 又名环形队列 / 环形缓冲区&#xff0c;其通过开辟固定尺寸的内存来实现反复复用同一块内存的目的。由于预先开辟了固定尺寸的内容&#xff0c;所以当数据满的时候&#xff0c;可以有两种处理方式&#xff0c;具体使用哪一种按…