本笔记来源于:http://wiki.ros.org/ROS/Concepts

  1. ROS文件系统级别
    文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括:
    1. 包(Packages):
      包是ROS中资源组织的主要单元,一个包可以包含ROS运行时进程(Nodes),可以是一个ROS依赖库,数据库,配置文件等任何有用的组织单元。
      包是ROS中可以编译和发布的元单元。
    2. 元包(Metapackages
      元包是一种特殊的包,他仅用来表示其它一组包的组织方式。最常见的元包是rosbuild栈的后向兼容转换器。
    3. 包信息(Package Manifests
      包信息文件(package.xml)包含包的名称、版本、描述、许可证信息、依赖项以及其它元信息,例如导出包。包信息文件package.xmlREP-0127中进行了定义。
    4. 仓库(Repositories
      仓库是一个包集合,该集合中的包共享一个版本控制系统(VCS),这些包有相同版本并且可以通过catkin自动发布工具bloom进行发布。一个仓库可以映射为一个rosbuild栈,一个代码仓库也可以只包含一个包。
    5. 消息(msg)类型
      消息描述,存储在my_package/msg/MyMessageType.msg,用于表示发送到ROS中的消息的数据结构。
    6. 服务(srv)类型
      服务类型,存储在my_package/srv/MyServiceType.srv, 用于定义在ROS中使用的服务(services)请求或响应的数据。
  2. ROS计算图级别
    计算图是ROS用于进程间传递数据的P2P网络,最基础的计算图概念包括如下,在ros_comm的仓库中进行实现:
    1. 节点(Nodes:)
      节点是ROS中进行计算的进程,个人理解一个Node实现一个功能模块,比如机器人控制系统中,一个Node用于测距,一个用于定位,一个用于控制电机等。
      一个节点用client library进行编写,例如用roscpprospy。(看文档,ros支持很多开发语言,详情可以参见client library)。
    2. 主机(Master
      主机用于提供其它计算图的命名注册和查询等功能,没有主机的话,每个节点将找不到其他节点,不能进行通信,也不能调用服务。
    3. 参数服务器(Parameter Server
      参数服务器用于提供将数据通过键来存储在中心位置(类似整个系统中的全局变量?),参数服务器现在是主机中的一个部分。
    4. 消息(Messages
      节点中通过消息传递进行通信,消息是一个带有数据类型成员的简易数据结构,该数据结构支持标准的基本数据结构(整型、浮点型和逻辑型变量等)及其数组。类似与C语言中的结构体。
    5. 主题(Topics
      消息通过发布者/订阅者机制进行传递,节点通过将消息发布给一个特定主题进行消息发送。主题是和消息内容相关的命名。一个进程可以发布或者订阅多个主题,多个进程也可以发布和订阅一个主题。
      主题的发布者和订阅者不知道彼此的存在,这样做可以使两者解耦。
    6. 服务(Services
      发布/订阅机制使用主题进行实现,而这种不适合于请求/响应机制,请求/响应机制用服务进行实现。服务通过两种数据结构实现,一个用于请求,一个 用于发送,提供节点通过一个命名(name)来提供服务,
      客户节点通过发送请求,来等待响应,实现数据交换。服务常用于远程过程调用。
    7. 数据包(Bags
      数据包用于是一种用于ROS消息数据存储和回放的数据格式,数据包是一种重要的存储数据的机制,不好进行数据收集但是对算法的开发和测试十分必要。
      主机节点用于计算图中各个节点的命名服务,用于存储ROS节点的注册信息,以及主题和服务信息,当注册信息发生变化时,可以调用回调函数来动态创建连接(节点启动时自动进行主题的发布和订阅?)。命名在ROS中很重要,节点、主题、消息和参数都有他们的命名。每个ROS客户端库都提供了进行命名重映射的命令行工具。
  3. ROS社区级别
    该部分无笔记,若要参考请直接点击英文wiki。
  4. 命名
    1. 计算图资源命名
      图资源命名具有层次命名结构,可以为所有计算图资源命名,包括:节点(Nodes)、主题(Topics)、参数(Parameters)和服务(Services)。
      1. 命名规则
        1. 命名开头必须为大小写字母([a-z|A-Z]), 波浪号 (~) 或者斜杠 (/,作为路径层次划分符号)。
        2. 后续可以为大小写字母及数字([0-9|a-z|A-Z]),下划线(_)。
      2. 命名解析
          • base(基命名)

          • relative/name(相对命名)

          • /global/name(全局命名)

          • ~private/name(私有命名,当前下一级的)

    2. 包资源命名
      除了不能有~之外,其它和图资源命名一样。
      总结来说就是,斜杠(/)表示路径层次,波浪(~)表示图中的私有路径,然后命名标识符需要以字母开头,后续可以用字母、数字或者下划线。
    3. 命名重映射。
      从命令行启动一个ROS节点的时候,该节点内的任何命名可以通过重映射参数(Remapping Arguments)进行重映射。
  5. 代码接口
    命名有关的代码接口见ros_cpp中的接口:roscpp::names API reference

ROS学习笔记2-基本概念的更多相关文章

  1. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  2. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  3. ROS学习笔记二:ROS系统架构及概念

    本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...

  4. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  5. ROS学习笔记八:基于Qt搭建ROS开发环境

    1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...

  6. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  7. ROS学习笔记1-引言

    该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...

  8. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  9. ROS学习笔记(一) : 入门之基本概念

    目录 基本概念 1. Package 2. Repositories 3. Computation Graph 4. Node 5. Master 6. Message 7. Topic 8. Ser ...

随机推荐

  1. 001. 使用IDEA新建一个JAVA最简单的Spring MVC JAVAWEB程序

    1. 我们打开一个空的IDEA 2. 选择Java之后点击Next 3. 点击Next创建空白工程 4. 给工程取个名字,叫MYIDEA 5. 勾选之后,点击This Window按钮 6. 我们可以 ...

  2. python - 关于json和pickle两个序列化模块的区别

    传送门 https://stackoverflow.com/a/20980488/5955399 区别 json:用于字符串(unicode text)和python基本数据类型间进行转换.优点:跨语 ...

  3. 关于sarima模型的描述,时间序列的理论与方法(第二版)(美 布洛克威尔)有一部分比较值得看

  4. js 模拟鼠标拖动

    window.addEventListener('message', function (event) { if (event.source != window) return; if (event. ...

  5. 将图片转化为base64编码字符串

    pom依赖 <dependency> <groupId>org.ops4j.base</groupId> <artifactId>ops4j-base- ...

  6. 【PAT甲级】1025 PAT Ranking (25 分)(结构体排序,MAP<string,int>映射)

    题意: 输入一个正整数N(N<=100),表示接下来有N组数据.每组数据先输入一个正整数M(M<=300),表示有300名考生,接下来M行每行输入一个考生的ID和分数,ID由13位整数组成 ...

  7. 使用 TestFight 构建 Beta 测试版本

    ---恢复内容开始--- Beta测试属于软件开发周期中的一环,测试的重点就是让一些活生生的人去使用你的App,不断测试然后反馈.你需要让你的测试成员发现尽可能多的bug,以便你在公开发布之前将其修复 ...

  8. MySQL的默认隔离级别的实现依赖于MVCC和锁,准确点说就是一致性读和锁。

    MySQL的默认隔离级别的实现依赖于MVCC和锁,准确点说就是一致性读和锁.

  9. Windows下载编译Qt5 Gui

    安装工具 Python 这个安装的时候没记录下来,网上查一下,大把, 就不补了. ActivePerl https://www.cnblogs.com/dilex/p/10591579.html 下载 ...

  10. 对于JAVA语言的一点理解

    java作为一门面向对象的语言,现在常常被用于企业服务器端的后台开发.同时,C语言可能更多地是用于嵌入式的开发,所谓的嵌入式就是航天飞机上的设备软件之类的东西.但是,我逐渐发现,我们平时所说的java ...