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.rhkb.cn/news/177838.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的四种部署方案

这篇文章介绍Reids最为常见的四种部署模式&#xff0c;其实Reids和数据库的集群模式差不多&#xff0c;可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署&#xff0c;其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境…

40 深度学习(四):卷积神经网络|深度可分离卷积|colab和kaggle的基础使用

文章目录 卷积神经网络为什么要卷积卷积的具体流程池化tensorflow代码 深度可分离卷积原理介绍计算量对比代码参数计算例子 colab 和 kagglecolabkaggle如何在colab上使用kaggle的数据 卷积神经网络 卷积神经网络的基本结构 1&#xff1a; (卷积层(可选)池化层) * N全连接层 *…

网络安全应急响应工具(系统痕迹采集)-FireKylin

文章目录 网络安全应急响应工具(系统痕迹采集)-FireKylin1.FireKylin介绍【v1.4.0】 2021-12-20【v1.0.1】 2021-08-09 2.客户端界面Agent支持的操作系统FireKylinAgent界面使用方式比较传统方式与FireKylin比较无法可达目标的场景应用对比 3.使用教程设置语言Agent配置&#x…

离散傅里叶变换中的能量守恒公式(帕斯瓦尔定理)及其程序举例验证

离散傅里叶变换中的能量守恒公式&#xff08;帕斯瓦尔定理&#xff09;及其程序举例验证 一、 离散傅里叶变换中的能量守恒公式 离散傅里叶变换中的能量守恒公式&#xff1a; ∑ n 0 N − 1 ∣ x [ n ] ∣ 2 1 N ∑ k 0 N − 1 ∣ X [ k ] ∣ 2 (1) \sum\limits_{n 0}^{N…

【C++】医学影像信息管理系统源码

狭义的医学影像信息系统是指基于医学影像存储和通信系统的管理系统&#xff0c;从技术上解决了影像处理技术。临床信息系统是指支持医院医务人员临床活动&#xff0c;收集和处理患者临床医疗信息的信息管理系统。放射科信息系统是指放射科挂号、分诊、影像诊断报告、信息查询、…

pycharm 断点调试python Flask

以flask框架为例&#xff0c;其启动命令为 python app.py runserver 后面需要拼接runserver 点击开始断点 参考&#xff1a;https://www.cnblogs.com/bigtreei/p/14742015.html

vue-cli5.0.x优雅降级,配置项目兼容旧版浏览器

兼容低版本谷歌浏览器 vue-cli5.0.x脚手架下的&#xff0c;如何降低项目版本以适用于底版本的浏览器。 直接使用默认配置打包部署出来的项目再40&#xff0c;60、70版本的谷歌浏览器跑不起来&#xff0c;蓝屏或者浏览器白屏一般这种情况都需要通过Babel去做转换&#xff0c;我…

什么?前端又出新轮子了?ofa.js

不需要打包的 MVVM JavaScript 框架 无需繁琐学习&#xff0c;无需 npm、nodejs、webpack&#xff0c;即刻上手 <script src"https://cdn.jsdelivr.net/gh/kirakiray/ofa.js/dist/ofa.min.js"></script>官方文档 取代 jQuery 在许多小型项目中&#x…

【机器学习合集】模型设计之注意力机制动态网络 ->(个人学习记录笔记)

文章目录 注意力机制1. 注意力机制及其应用1.1 注意力机制的定义1.2 注意力机制的典型应用 2. 注意力模型设计2.1 空间注意力机制2.2 空间注意力模型2.3 通道注意力机制2.4 空间与通道注意力机制2.5 自注意力机制2.5 级联attention 动态网络1. 动态网络的定义2. 基于丢弃策略的…

Debian或Ubuntu静态交叉编译arm和aarch64

Debian或Ubuntu静态交叉编译arm和aarch64 介绍术语ARM架构前置条件从源代码编译一个简单的C程序configure和make交叉编译关于静态链接和依赖关系使用 musl libc 实现与 configure 和 make 进行交叉编译 ARM 正在获得越来越多的关注&#xff0c;并且越来越受欢迎。直接在这些基于…

深度学习_3 数据操作之线代,微分

线代基础 标量 只有一个元素的张量。可以通过 x torch.tensor(3.0) 方式创建。 向量 由多个标量组成的列表&#xff08;一维张量&#xff09;。比如 x torch.arange(4) 就是创建了一个1*4的向量。可以通过下标获取特定元素&#xff08;x[3]&#xff09;&#xff0c;可以通…

Web3时代:探索DAO的未来之路

Web3 的兴起不仅代表着技术进步&#xff0c;更是对人类协作、创新和价值塑造方式的一次重大思考。在 Web3 时代&#xff0c;社区不再仅仅是共同兴趣的聚集点&#xff0c;而变成了一个价值交流和创新的平台。 去中心化&#xff1a;超越技术的革命 去中心化不仅仅是 Web3 的技术…

Linux进程概念(1)

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容为进程的概念做铺垫&#xff0c;主要介绍冯诺依曼体系结…

Pycharm安装jupyter和d2l

安装 jupyter: jupyter是d2l的依赖库&#xff0c;没有它就用不了d2l pycharm中端输入pip install jupyter安装若失败则&#xff1a; 若网速过慢&#xff0c;则更改镜像源再下载&#xff1a; pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip …

【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL

ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【二】ElasticSearch的高级查询Quer…

Mac之NVM|通过brew安装、更新、卸载、重新安装nvm

文章目录 导文通过brew安装NVM通过brew更新NVM通过brew卸载NVM通过brew重新安装NVM 导文 Mac之NVM 通过brew安装、更新、卸载、重新安装 通过brew安装NVM brew install nvm通过brew更新NVM brew upgrade nvm通过brew卸载NVM brew uninstall nvm通过brew重新安装NVM brew re…

快手协议算法最新版

快手的协议分析是指对快手算法系统进行分析&#xff0c;以了解其推荐内容和个性化用户体验的机制。 然而&#xff0c;一般来说&#xff0c;协议分析的目标是理解算法系统中各个组成部分的功能和作用&#xff0c;以及它们之间的相互关系。以下是一些常见的分析方向&#xff1a;…

Python 自动化(十六)静态文件处理

准备工作 将不同day下的代码分目录管理&#xff0c;方便后续复习查阅 (testenv) [rootlocalhost projects]# ls day01 day02 (testenv) [rootlocalhost projects]# mkdir day03 (testenv) [rootlocalhost projects]# cd day03 (testenv) [rootlocalhost day03]# django-admi…

springboot--多环境配置快速切换开发、测试、生产环境

多环境配置快速切换开发、测试、生产环境 前言1、使用1.1指定环境Profile({"dev","test"})Spring Profiles 提供一个隔离配置的方式&#xff0c;使其仅在特定环境生效 任何Component,Configuration或ConfigurationProperties 可以使用Profile标记&#xff…

损失函数总结(十四):RMSELoss、LogCosh Loss

损失函数总结&#xff08;十四&#xff09;&#xff1a;RMSELoss、LogCosh Loss 1 引言2 损失函数2.1 RMSELoss2.2 LogCosh Loss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLoss、NLLLoss、CTCLoss、PoissonNLLLos…