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基本认知的更多相关文章

  1. 2015-2016机器人操作系统(ROS)及其应用暑期学校资料汇总 ROS Summer School 持续更新

    综合信息:2015    2016 课程资料:2015     2016 其他重要机器人.ROS相关学习活动 知乎关于ROS的话题 1 ROS的开发流程?http://www.zhihu.com/qu ...

  2. 如何使用ROS查找rgbdslam代码包框架的输入

    我想这是一个天大的错误,在没有对整个ROS下的代码有一个整体理性的认知时,我使用感性认知. 由于在跑他的测试代码时,只替换了两个节点的名称,相当于remap了它,以为就可以跑了,结果是不行的. 然后用 ...

  3. %iowait和CPU使用率的正确认知

    resources 理解 %IOWAIT (%WIO) LINUX系统的CPU使用率和LOAD Linux Performance Observability Tools How Linux CPU ...

  4. 【AI开发第一步】微软认知服务API应用

    目录 介绍 API分类 使用‘视觉’API完成的Demo 点击直接看干货 介绍 从3月份Google家的阿尔法狗打败韩国围棋冠军选手李世石,到之后微软Build2016大会宣布的“智能机器人”战略.种 ...

  5. 阿里云VPS服务器,ROS内网穿透

    Aliyun Windows Server 2008 R2中建立vpn服务器,ros中使用pptp拨号连接 2.在Aliyun服务器中,修改hosts,将内网分配的ip映射到指定的域名,在Aliyun ...

  6. NOIp2016 Day1&Day2 解题报告

    Day1 T1 toy 本题考查你会不会编程. //toy //by Cydiater //2016.11.19 #include <iostream> #include <cstd ...

  7. QT下调试基于ros的catkin项目

    1.首先告诉qt ros的搜索路径,通过修改qt creator 桌面启动程序来实现 sudo    gedit ~/.local/share/applications/DigiaQtOpenSour ...

  8. ROS学习(三)—— ROS文件系统

    一.预备工作 使用ros0tutorials程序包,先下载: sudo apt-get install ros-<distro>-ros-tutorials 其中<distro> ...

  9. ROS学习(二)—— 配置ROS环境

    一.管理环境 p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 如果你在查找和使用ROS软件包方面遇到了问题,请确保你已经正确配置了脚 ...

  10. ROS学习(一)—— 环境搭建

    一.配置Ubuntu软件仓库且选择ROS正确版本 二.添加source.list sudo sh -c 'echo "deb http://packages.ros.org/ros/ubun ...

随机推荐

  1. LeetCode刷题小白必看!如何科学地刷题,从0到1建立你的算法体系?

    大家好,我是忍者算法的作者,今天想和大家聊聊如何科学地刷题.如果你是一个刚开始刷题的小白,面对LeetCode上密密麻麻的题目感到无从下手,或者刷了一段时间却发现自己进步缓慢,那么这篇文章就是为你准备 ...

  2. PostgreSQL:数据库迁移与版本控制

    title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库 ...

  3. linux goreplay流量压测工具

    项目地址https://github.com/buger/goreplay 下载wget https://github.com/buger/goreplay/releases/download/v0. ...

  4. 流程控制之增强for循环

    语法 for (声明语句:表达式){    //代码语句} 实例: package com.yeyue.struct;​public class ForDemo05 {    public stati ...

  5. 访问控制模型 ABAC 的使用和设计原则

    访问控制(AC)的发展历程 访问控制(Access Control, AC)是保护系统资源的重要机制,决定"谁"可以访问"哪些"资源,并能执行"哪些操 ...

  6. 松下机器人示教器AUR01062触摸无反维修

    Panasonic松下机器人示教器AUR01062触摸无反应解决方案 松下机器人示教器现象:触摸屏幕时鼠标箭头无任何动作,没有发生位置改变. 原因:造成此现象产生的原因很多,下面就松下机器人维修中示教 ...

  7. Arduino语法--运算符

    本节介绍最常用的一些Arduino运算符,包括赋值运算符.算数运算符.关系运算符.逻辑运算符和递增/减运算符. 一. 赋值运算符 =(等于)为指定某个变量的值,例如:A=x,将x变量的值放入A变量. ...

  8. Typecho博客添加音乐外链支持Https

    首先选个音质和音乐比较全面的音乐站,这里选了网易云音乐,自己手机用的网易云音乐app,存了好多歌单,所以就选他了,但是想获取音乐文件链接,得去这儿:季春二九音乐站 其实很简单,参考下面. 1.先找到网 ...

  9. Processing中获取表格数据( .tsv\.csv )的经验分享

    在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便.在Prcocessing中帮我预留好了loadTable().loa ...

  10. Halcon学习教程(二) 测量量测相关(点到线距离,线到线距离,轮廓线距离,一维测量,圆形测量,矩形测量等)

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18740576 本篇讲一些测量用到的算子和实例,想了解更多就得去看看halcon实例里一维测量里 ...