DAY1--ROS基本认知
1.ROS基本框架
ROS架构如下图所示,可以将其分为三个层次:OS层、中间层和应用层。

1.1 应用层
应用层是用户直接交互的部分,包含以下核心组件:
Master:
ROS的核心协调者,负责节点(Node)的注册、发现和通信管理。节点启动时向Master注册自身信息(如话题、服务名称),Master帮助节点建立直接连接(如发布者-订阅者)。Node:
节点的多个实例,代表系统中的独立功能单元。每个节点负责执行特定任务(如传感器数据处理、运动控制),通过ROS通信机制(话题、服务、动作)与其他节点交互。...:
表示应用层可能包含的其他组件,如可视化工具(Rviz)、仿真环境(Gazebo)或用户自定义的功能包。
1.2 中间层
中间层是ROS的核心功能实现层,提供通信、编程接口和优化机制:
ClientLibrary:
ROS客户端库(如roscpp、rospy、roslisp),为开发者提供编程接口。这些库封装了ROS通信的底层细节,简化节点的开发。TCPROS/UDPROS:
--TCPROS:基于TCP协议的通信方式,提供可靠、有序的数据传输,适用于大多数场景(如传感器数据流)。
--UDPROS:基于UDP协议的通信方式,支持低延迟、高效率的数据传输,适用于实时性要求高的场景(如控制指令)。
节点间通过这两种协议直接通信(无需Master转发),Master仅负责初始连接的建立。Nodelet API:
用于在同一进程中运行多个节点(Nodelet),避免进程间通信的开销,显著提升数据密集型任务(如图像处理)的性能。
1.3 OS层
OS层是ROS运行的底层操作系统支持:
- Linux:
ROS1主要依赖Linux(尤其是Ubuntu),其底层功能(如进程管理、网络通信、硬件驱动)由Linux操作系统提供。ROS2已扩展支持更多操作系统(如Windows、macOS),但传统ROS1架构通常与Linux深度绑定。
2.功能包
1)config:放置功能包中的配置文件,由用户创建,文件名可以不
同。
2)include:放置功能包中需要用到的头文件。
3)scripts:放置可以直接运行的Python脚本。
4)src:放置需要编译的C++代码。
5)launch:放置功能包中的所有启动文件。
6)msg:放置功能包自定义的消息类型。7)srv:放置功能包自定义的服务类型。
8)action:放置功能包自定义的动作指令。
9)CMakeLists.txt:编译器编译功能包的规则。
10)package.xml:功能包清单
3.ROS常用命令

3.1话题通信机制
在ROS中有两个节点:一个是发布者Talker,另一个是订阅者
Listener。两个节点分别发布、订阅同一个话题,启动顺序没有强制要
求,此处假设Talker首先启动,可分成图中所示的七步来分析建立通信
的详细过程。

1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所发布消息的话题名;ROS Master会将节点的注册信息加入注册列表中。2.Listener注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要订阅的话题名。3.ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的发布者,则等待发布者的加入;如果找到匹配的发布者信息,则通过RPC向Listener发送Talker的RPC地址信息。4.Listener发送连接请求
Listener接收到Master发回的Talker地址信息,尝试通过RPC向Talker发送连接请求,传输订阅的话题名、消息类型以及通信协议
(TCP/UDP)。5.Talker确认连接请求
Talker接收到Listener发送的连接请求后,继续通过RPC向Listener确认连接信息,其中包含自身的TCP地址信息。6.Listener尝试与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接。7.Talker向Listener发布数据
成功建立连接后,Talker开始向Listener发送话题消息数据。
从上面的分析中可以发现,前五个步骤使用的通信协议都是RPC,最后发布数据的过程才使用到TCP。ROS Master在节点建立连接的过程中起到了重要作用,但是并不参与节点之间最终的数据传输。节点建立连接后,可以关掉ROS Master,节点之间的数据传输并不会受到影响,但是其他节点也无法加入这两个节点之间的网络。
3.2服务通信机制
服务是一种带有应答的通信机制,通信原理如下图所示。与话题的通信相比,其减少了Listener与Talker之间的RPC通信。

1.Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所提供的服务名;ROS Master会将节点的注册信息加入注册列表中。2.Listener注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要查找的服务名。3.ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的服务提供者,则等待该服务的提供者加入;如果找到匹配的服务提供者信息,则通过RPC向Listener发送Talker的TCP地址信息。4.Listener与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接,并且发送服务的请求数据。5.Talker向Listener发布服务应答数据
Talker接收到服务请求和参数后,开始执行服务功能,执行完成后,向Listener发送应答数据。
DAY1--ROS基本认知的更多相关文章
- 2015-2016机器人操作系统(ROS)及其应用暑期学校资料汇总 ROS Summer School 持续更新
综合信息:2015 2016 课程资料:2015 2016 其他重要机器人.ROS相关学习活动 知乎关于ROS的话题 1 ROS的开发流程?http://www.zhihu.com/qu ...
- 如何使用ROS查找rgbdslam代码包框架的输入
我想这是一个天大的错误,在没有对整个ROS下的代码有一个整体理性的认知时,我使用感性认知. 由于在跑他的测试代码时,只替换了两个节点的名称,相当于remap了它,以为就可以跑了,结果是不行的. 然后用 ...
- %iowait和CPU使用率的正确认知
resources 理解 %IOWAIT (%WIO) LINUX系统的CPU使用率和LOAD Linux Performance Observability Tools How Linux CPU ...
- 【AI开发第一步】微软认知服务API应用
目录 介绍 API分类 使用‘视觉’API完成的Demo 点击直接看干货 介绍 从3月份Google家的阿尔法狗打败韩国围棋冠军选手李世石,到之后微软Build2016大会宣布的“智能机器人”战略.种 ...
- 阿里云VPS服务器,ROS内网穿透
Aliyun Windows Server 2008 R2中建立vpn服务器,ros中使用pptp拨号连接 2.在Aliyun服务器中,修改hosts,将内网分配的ip映射到指定的域名,在Aliyun ...
- NOIp2016 Day1&Day2 解题报告
Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...
- QT下调试基于ros的catkin项目
1.首先告诉qt ros的搜索路径,通过修改qt creator 桌面启动程序来实现 sudo gedit ~/.local/share/applications/DigiaQtOpenSour ...
- ROS学习(三)—— ROS文件系统
一.预备工作 使用ros0tutorials程序包,先下载: sudo apt-get install ros-<distro>-ros-tutorials 其中<distro> ...
- ROS学习(二)—— 配置ROS环境
一.管理环境 p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚 ...
- ROS学习(一)—— 环境搭建
一.配置Ubuntu软件仓库且选择ROS正确版本 二.添加source.list sudo sh -c 'echo "deb http://packages.ros.org/ros/ubun ...
随机推荐
- LeetCode刷题小白必看!如何科学地刷题,从0到1建立你的算法体系?
大家好,我是忍者算法的作者,今天想和大家聊聊如何科学地刷题.如果你是一个刚开始刷题的小白,面对LeetCode上密密麻麻的题目感到无从下手,或者刷了一段时间却发现自己进步缓慢,那么这篇文章就是为你准备 ...
- PostgreSQL:数据库迁移与版本控制
title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库 ...
- linux goreplay流量压测工具
项目地址https://github.com/buger/goreplay 下载wget https://github.com/buger/goreplay/releases/download/v0. ...
- 流程控制之增强for循环
语法 for (声明语句:表达式){ //代码语句} 实例: package com.yeyue.struct;public class ForDemo05 { public stati ...
- 访问控制模型 ABAC 的使用和设计原则
访问控制(AC)的发展历程 访问控制(Access Control, AC)是保护系统资源的重要机制,决定"谁"可以访问"哪些"资源,并能执行"哪些操 ...
- 松下机器人示教器AUR01062触摸无反维修
Panasonic松下机器人示教器AUR01062触摸无反应解决方案 松下机器人示教器现象:触摸屏幕时鼠标箭头无任何动作,没有发生位置改变. 原因:造成此现象产生的原因很多,下面就松下机器人维修中示教 ...
- Arduino语法--运算符
本节介绍最常用的一些Arduino运算符,包括赋值运算符.算数运算符.关系运算符.逻辑运算符和递增/减运算符. 一. 赋值运算符 =(等于)为指定某个变量的值,例如:A=x,将x变量的值放入A变量. ...
- Typecho博客添加音乐外链支持Https
首先选个音质和音乐比较全面的音乐站,这里选了网易云音乐,自己手机用的网易云音乐app,存了好多歌单,所以就选他了,但是想获取音乐文件链接,得去这儿:季春二九音乐站 其实很简单,参考下面. 1.先找到网 ...
- Processing中获取表格数据( .tsv\.csv )的经验分享
在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便.在Prcocessing中帮我预留好了loadTable().loa ...
- Halcon学习教程(二) 测量量测相关(点到线距离,线到线距离,轮廓线距离,一维测量,圆形测量,矩形测量等)
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18740576 本篇讲一些测量用到的算子和实例,想了解更多就得去看看halcon实例里一维测量里 ...