ROS学习笔记(2)——ROS架构

2023-05-16

ROS学习笔记(2)——ROS架构

  • 0、学习来源
  • 1、ROS架构
  • 2、文件系统级
    • 2.1 工作空间
  • 3、计算图级
  • 4、ROS开源社区级
    • 4.1 发行版(Distribution)
    • 4.2 软件库(Repository)
    • 4.3 ROS维基(ROS Wiki)
    • 4.4 Bug提交系统(Bug Ticket System)
    • 4.5 邮件列表(Mailing list)
    • 4.6 ROS问答(ROS Answer)
    • 4.7 博客(Blog)

0、学习来源

《ROS机器人高效编程》第2章
中科院软件所-机器人操作系统入门(ROS入门教程)(MOOC链接、B站链接)

1、ROS架构

ros架构被划分为三个部分,分别为:

  • 文件系统级(Filesystem level)
  • 计算图级(Computation Graph level)
  • 社区级(Community level)

2、文件系统级

文件系统级架构

  • 功能包(Package):是ROS中的原子级,是创建ROS程序的最小结构,是catkin编译的基本单元。包含ROS运行的进程(节点)、配置文件等。
  • 功能包清单(Package Manifest):包含功能包、许可证、依赖关系、编译标志等信息。由package.xml文件管理。
  • 元功能包(Metapackage):将几个功能包组织在一起,就是元功能包。在ROS Fuerte中,称为功能包集(Stack)。
  • 元功能包清单(Metapackage manifest):类似普通功能包,但有一个XML格式的到处标记(package.xml)。在结构上有一定限制。
  • 消息类型(Message(msg) type):消息是一个进程发送到其他进程的信息。它的说明存储在.msg文件中。
  • 服务类型(Service(srv) type):为ROS中由每个进程提供的服务定义请求和响应数据结构,它的说明存储在.srv文件中。
  • 动作类型:类似Service,带有状态反馈的通讯方式,它的说明存储在.action文件中。1

下面为一个完整的包结构:

#包结构
package
├── CMakeLists.txt
├── package.xml
├── include(头文件目录)
│   └── *.h
├── src(代码目录)
│   ├── *.cpp
│   └── *.py
├── scripts(脚本文件目录)
│   ├── *.py
│   └── *.sh
├── msg(自定义消息目录)
│   └── *.msg
├── srv(自定义服务目录)
│   └── *.srv
├── action(自定义动作目录)
│   └── *.action
├── launch(launch文件目录,多个可执行文件组织,一次性运行多个可执行文件)
│   └── *.launch
└── yaml(param/config 配置文件目录)
    └── *.yaml

2.1 工作空间

工作空间(如下catkin_ws)是一个包含编译空间(build)、开发空间(devel)、源文件空间(src)的文件夹。

  • 源文件空间(Source space):src文件夹中放置了功能包、项目等。空间中最重要的一个文件是CMakeLists.txt。
  • 编译空间(build space):在build文件夹里,保存有功能包和项目的缓存信息、配置和其他中间文件。
  • 开发空间(Development pace):devel文件夹用来保存编译后的程序,是无须安装就能用来测试的程序。

下图所示的是一个典型的工作空间:

catkin_ws
├── build
│   ├── catkin
│   ├── catkin_generated
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── Makefile
│   └── ...
├── devel
│   ├── env.sh
│   ├── include
│   ├── lib
│   ├── setup.bash
│   ├── setup.sh
│   ├── setup.zsh
│   └── ...
└── src
    ├── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
    └── ...

3、计算图级

ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发送的信息,并将自身数据发布到这个网络上。

在这一层级中最基本的概念包括节点、节点管理器、参数服务器、消息、服务、主题和消息记录包,这些概念都以不同的方式向计算图级提供数据。2
在计算图级

  • 节点(node):节点是主要的计算执行进程。通过创建并将节点链接到ROS网络,可以让它与其他节点进程进行交互。
  • 节点管理器(master):节点管理器用于节点的名称注册和查找等。它也设置节点间的通信。如果在整个ROS中没有节点管理器,就无法与节点、服务、消息等通信。由于ROS本身就是一个分布式网络系统,所以可以在某一台计算机上运行节点管理器,在该管理器或其他计算机上运行节点。
  • 参数服务器(Parameter Server):参数服务器能够使数据通过密钥存储在一个系统的核心位置。通过参数,就能够在运行时配置节点或改变节点的工作任务。
  • 消息(message):节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的信息数据。
  • 主题(topic):每个消息都必须有一个名称以便被ROS网络分发。当一个节点发送数据时,我们就说该节点正在向主题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。主题的名称必须是唯一的,否则在同名主题之间的消息路由就会发生错误。
  • 服务(service):在发布主题时,正在发送的数据能够以多对多的方式交互。但当你需要从某个节点获得一个请求或应答时,就不能通过主题来实现了。在这种情况下,服务能够允许我们直接与某个节点进行交互。此外,服务必须有唯一的名称。
  • 消息记录包(bag):消息记录包是一种用于保存和回放ROS消息数据的文件格式。

我认为主题和服务最大的区别是:

  • 主题(topic):发布者持续发送数据,不管接收者。接受者持续接收数据,只要有数据能接收就接收,接收不到就等着。
  • 服务(service):服务请求者向服务提供者要求获取数据,那么服务提供者就进行一次相应,返回一次数据;请求者不请求获取数据,服务提供者就不发布数据。双方不进行多余的数据发布、接收操作。

4、ROS开源社区级

ROS开源社区级的概念主要是ROS资源,其能够通过独立的网络社区分享软件和知识。
这些资源包括以下几个。

4.1 发行版(Distribution)

  • ROS发行版是可以独立安装、带有版本号的一系列元功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。

4.2 软件库(Repository)

  • ROS依赖于代码存储库的联网,在这里不同的机构能够发布和分享各自的机器人软件组件。

4.3 ROS维基(ROS Wiki)

  • ROS Wiki是用于记录有关ROS信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及做其他事情。

4.4 Bug提交系统(Bug Ticket System)

  • 如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。

4.5 邮件列表(Mailing list)

  • ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。

4.6 ROS问答(ROS Answer)

  • 用户可以使用这个资源去提问题。

4.7 博客(Blog)

  • 可以看到定期更新、照片和新闻。网址:http://www.ros.org/news。

  1. 书里没有,根据 “中科院软件所-机器人操作系统入门(ROS入门教程)” 中提到的内容进行了补充(但是不确定Action是否可以补充在这里)。 ↩︎

  2. 我总觉得这部分内容里(包括文字和那张图),少了动作(Action),但是书却里没有(《ROS机器人高效编程》,图也是书里面的),不知道是不是我理解错了。 ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习笔记(2)——ROS架构 的相关文章

  • C# winform窗体及其控件的自适应

    为了提升用户的体验 xff0c 窗体不能再固定其大小 xff08 用户不能随意改变窗体的大小 xff09 xff0c 所以要做到窗体适应电脑屏幕的分辨率 xff0c 窗体中的控件要跟随窗体的变化比例而变化 通过网上查找学习 xff0c 发现
  • 学校人力资源管理系统——E-R图

    分局E R图 根据需求分析该学校人力资源管理系统中实体包括 xff1a 教职工 xff0c 部门 xff0c 职称 xff0c 职务 xff0c 学籍经历 xff0c 奖惩 xff1b 局部E R图设计如下 xff1a 教职工 xff08
  • TVM编译与python环境配置

    提示 xff1a 仅记录一下本次成功安装的过程用于参考 目录 前言 一 源码下载 二 编译 1 安装依赖 2 安装llvm 3 开始编译 4 设置python环境 前言 记录一下tvm的编译流程与python环境安装 环境 xff1a ro
  • apache反向代理tomcat时x-forwarded-for为null的问题

    apache 在用ProxyPass时会自动在header中设置X Forwarded For X Forwarded Host和X Forwarded Server xff08 http httpd apache org docs 2 2
  • APP_CTL_HEAP_SZ 堆中没有足够的存储器可用来处理语句

    Caused by COM ibm db2 jdbc DB2Exception IBM CLI Driver DB2 NT SQL0973N 34 APP CTL HEAP SZ 34 堆中没有足够的存储器可用来处理语句 SQLSTATE
  • OpenCV颜色识别

    彩色模型 数字图像处理中常用的采用模型是RGB xff08 红 xff0c 绿 xff0c 蓝 xff09 模型和HSV xff08 色调 xff0c 饱和度 xff0c 亮度 xff09 xff0c RGB广泛应用于彩色监视器和彩色视频摄
  • vmware占用磁盘空间增加(ubuntu虚拟机占用空间小)

    vmware占用磁盘空间大 xff0c 但是用df h指令看ubuntu虚拟机占用的空间没有这么大 xff0c 可以试着用下面的三种方法清理vmware占用的空间 方法一 xff1a 使用vmware自带的工具就能收回占用的部分空间 那个工
  • 进临界区(关全局中断)是否会影响数据的接收?

    在嵌入式的编程中 xff0c 经常会使用嵌入式实时操作系统 xff0c 比如FreeRTOS xff0c RTT等 而在使用这些操作系统时 xff0c 会有一个临界区的概念 xff0c 一般操作是 1 xff0c 进入临界区 xff1b 2
  • source insight 4.0 护眼背景色设置

    1 xff0c 打开source insight 4 0 2 xff0c 选择options下的preferences 3 xff0c 选择window background xff0c 双击打开 xff1b 4 xff0c 在颜色中将色调
  • octet和byte

    在看BLE协议时 xff0c 看到了数据包格式的定义 packet format xff0c 定义如下 xff1a Preamble 1 octet Access Address 4 octets PDU 2 to 257 octets C
  • 如何解决SSL/TLS握手过程中失败的错误?

    Fixes for the SSL TLS Handshake Failed error for both internet users and site owners It s time for another technical art
  • 学校人力资源管理系统——逻辑结构设计

    E R 图向关系模型的转换 第一步 把六个实体类型转化成五个模式 xff1a 教职工 职工编号 xff0c 姓名 xff0c 性别 xff0c 出生年份 xff0c 学历 xff0c 民族 xff0c 婚姻状态 xff0c 政治面貌 xff
  • 无线持续攻击(wireless duration attack)

    抓空口包时发现一种奇怪的ack帧 duration位长度是32767us 看到omnipeek将它定义为wireless duration attack 看起来是路由器回复设备的ack 而设备也是发了一个奇怪的pspoll帧 节能位置1 乱
  • .bashrc文件在哪?

    linux的bashrc文件在 home目录下 xff0c 但是是一个隐藏bai文件 xff0c 在文件管理器里面du按Ctrl 43 H即可显示 显示为 bashrc xff0c 前zhi面小点儿表示隐藏文件 xff09 也可以直接利用t
  • Cotex-M内核双堆栈指针MSP和PSP

    MSP和PSP 的含义是Main Stack Pointer 和Process Stack Pointer 在逻辑地址上他们都是R13 xff1b 权威手册上说的很清楚PSP主要是在Handler的模式下使用 xff0c MSP主要在线程模
  • TCP/IP协议栈之LwIP-pbuf

    pbuf结构体就是一个描述协议栈中数据包的数据结构 xff1a Main packet buffer struct struct pbuf next pbuf in singly linked pbuf chain struct pbuf
  • Linux使用wpa_supplicant手动配置连接WiFi

    wpa supplicant是Linux BSD Mac OSX和Windows的WPA的服务 支持WPA和WPA2 IEEE 802 11i RSN xff0c 它适用于台式机 笔记本和嵌入式系统 xff0c Supplicant是在客户
  • 使用python快速将主机字节序转为网络字节序

    1 进入python环境 这里以win10自带的wsl win10子系统为操作环境进入Python命令行 2 引入网络字节序标准库 这里使用Python自带的socket库 3 将待转换的主机数据使用socket htons 或者socke
  • ∏这个是什么符号?

    是各项连乘的运算符号 读大写的 xff08 pai xff09 例如 xff1a i 61 1 xff08 符号下面 xff09 n xff08 符号上面 xff09 ai 符号右面 表示a1 a2 an 符号下面表示右面式子可变参量的下限
  • python获取图片的颜色信息

    span class pun style font family none font size 14px span h1 style font family none font size 24px padding 5px margin 5p

随机推荐

  • Python:TypeError: 'int' object is not callable

    一个函数的部分代码如下 xff1a python view plain copy def loadData len 61 dataSet len trainingSet extend dataSet len 3 4 testSet exte
  • FreeRTOS — 消息队列

    以下内容转载自安富莱电子 xff1a http forum armfly com forum php FreeRTOS 的一个重要的通信机制 消息队列 xff0c 消息队列在实际项目中应用较多 1 消息队列 1 1 消息队列的概念及其作用
  • 学校人力资源管理系统——物理结构设计

    新 建学校人力资源管理系统 数据库 1 创建相关表 1 1 创建部门信息表 部门信息表的创建代码如下 xff0c 部门信息表在SQL中的信息显示如图6 1所示 create table 部门信息表 部门编号 char 6 not null
  • python 安装serial模块

    想用Python来实现对串口的控制 xff0c 写好了脚本 xff0c 现在将这个脚本拿到另外一个电脑上去运行 xff1b 运行时提示错误 xff0c 说是没有安装serial模块 xff0c 于是乎安装 pip install seria
  • Doxygen使用教程(个人总结)

    简介Doxygen 一 xff0e 什么是Doxygen Doxygen 是一个程序的文件产生工具 xff0c 可将程序中的特定批注转换成为说明文件 通常我们在写程序时 xff0c 或多或少都会写上批注 xff0c 但是对于其它人而言 xf
  • STM32F401 I2S(full duplex)全双工示例代码

    USER CODE BEGIN Header 64 file main c 64 brief Main program body This notice applies to any and all portions of this fil
  • 一、认识与学习Linux中的BASH 之 1.1 什么是bash

    1 1 什么是bash 1 1 1 什么是bash bash全称为The Bourne Again shell xff0c 是Bourne Shell的扩展 xff0c 是基于GUN构架发展出来的语言 xff0c 有很灵活和强大的编程接口
  • 阿里云ECS服务器环境搭建(1) —— ubuntu 16.04 图形界面的安装

    阿里云ECS服务器环境搭建 xff08 1 xff09 ubuntu 16 04 图形界面的安装 1 背景 在我们购买阿里云ECS服务器之后 xff0c 默认的系统环境是很干净的 xff0c 我购买的是ubuntu16 04 xff0c 远
  • Python+pandas+每天股票涨了多少

    第一步 xff1a 得到某支股票历年来的交易数据 方法见 xff1a https blog csdn net zwy 0309 article details 108217342 在此 xff0c 我使用以下脚本得到股票 xff08 代码
  • 2021-06-02

    在ROS中仿真模型中添加gps传感器 获取gps传感器模型包为自己的机器人添加gps传感器将gps之中的经度纬度坐标转化为自己地图中的坐标 1 获取gps传感器模型包 link http wiki ros org hector gazebo
  • Dockerfile如何编写(指令详解)

    本文个人博客地址 xff1a https www leafage top posts detail 21525V8AP Dockerfile Dockerfile 描述了组装镜像的步骤 xff0c 其中每条指令都是单独执行的 除了FROM指
  • 关于Home Lab的搭建——硬件选择篇(迷你主机)(一)

    关于Home Lab 这个名词出自哪里 xff0c 我也不清楚 不过 xff0c 可以这样来理解Home Lab xff0c Home Lab是一台作为实验使用的电脑 xff0c 试验的内容多数是关于计算机网络的搭建 系统安装 测试 xff
  • Adaboost基本二分类算法

    最早类型的Adaboost是由Yoav Freund和Robert E Schapire提出的 xff0c 一种用于二分类的boosting集成学习方法 也是李航 统计学习方法 中所介绍的Adaboost 它将一系列弱分类器的线性组合 xf
  • Springboot 项目金蝶中间件AAS-9.0启动报错 javax.persistence.Table.indexes()[Ljavax/persistence/Index 问题解决

    Springboot 项目金蝶中间件AAS 9 0启动报错 java lang NoSuchMethodError javax persistence Table indexes Ljavax persistence Index问题解决方法
  • CMakeLists配置(常用的)

    一 xff1a 最小组成 cmake 最小版本需求 cmake minimum required VERSION 2 8 project 名字 project MyEsp32AllCode 可执行文件生成 add executable PR
  • SLAM学习笔记(四)定位

    原创博客 xff1a http blog csdn net renshengrumenglibing viewmode 61 contents 机器人定位的目的是为了知道 自己在什么地方 xff0c 目前 xff0c 机器人定位的方法可以分
  • SLAM实习岗位面经

    一 地平线 一面主要是在问关于SLAM岗位的技术问题 xff0c 然后还问了一些比较简单的C 43 43 基础知识 其实总体而言 xff0c 面试的问题都比较基础 xff0c 比较考验SLAM基本功 xff0c 如果只知道一些SLAM皮毛的
  • Canal数据库监听

    1 什么是canal canal是用java开发的基于数据库增量日志解析 xff0c 提供增量数据订阅 amp 消费的中间件 目前 xff0c canal主要支持了MySQL的binlog解析 xff0c 解析完成后才利用canal cli
  • linux下安裝mitmproxy 详解傻瓜式文档

    前言 xff1a mitmproxy 就是用于 MITM 的 proxy xff0c MITM 即中间人攻击 xff08 Man in the middle attack xff09 用于中间人攻击的代理首先会向正常的代理一样转发请求 xf
  • ROS学习笔记(2)——ROS架构

    ROS学习笔记 xff08 2 xff09 ROS架构 0 学习来源1 ROS架构2 文件系统级2 1 工作空间 3 计算图级4 ROS开源社区级4 1 发行版 xff08 Distribution xff09 4 2 软件库 xff08