• ROS学习笔记2-基本概念


    本笔记来源于: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
  • 相关阅读:
    【hdu6035】 Colorful Tree dfs序
    【GDOI2018模拟8】 数学竞赛 三角函数性质+记忆化搜索
    【BZOJ4184】shallot 线性基
    失分统计#1
    【learning】微信跳一跳辅助c++详解 轻松上万 【下】
    【2018北京集训十二】 coin 矩阵快速幂
    【learning】微信跳一跳辅助c++详解 轻松上万 【上】
    【2018北京集训6】Lcm DFT&FWT
    【BZOJ3143】【HNOI2013】游走 高斯消元
    【bzoj1855】 [Scoi2010]股票交易 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/spyplus/p/11423666.html
Copyright © 2020-2023  润新知