ROS学习笔记1(基础知识和ROS架构)

文章目录

  • ROS学习笔记1(基础知识和ROS架构)
    • 1. 什么是ROS
    • 2. ROS和其他机器人平台有什么不同
    • 3. ROS架构组成
      • 3.1 文件系统级别
      • 3.2 ROS架构组成——计算图层
    • 4. ROS安装文件夹架构
      • 4.1 bin文件夹
      • 4.2 include文件夹
      • 4.3 lib文件夹
      • 4.4 etc文件夹

1. 什么是ROS

ROS 是一个适用于机器人的开源的元操作系统,某些时候也是一种机器人框架(robot frameworks)。系统包括如下服务:

1. 硬件抽象
2. 底层设备控制
3. 常用函数实现
4. 进程间消息传递
5. 包管理

2. ROS和其他机器人平台有什么不同

Brian Gerkey(同时涉猎 Player 和 ROS)向ROS用户所写的关于ROS和Player区别的电子邮件中提到:

这个问题的答案,和许多问题一样,视情况而定。特别是取悦于你想要干什么。Player非常适合简洁的非铰接的移动平台。它的设计为那些激光雷达的先锋提供了简单的传感器和电机操作方法。

然而,ROS是围绕着基于驱动传感器(倾斜式激光,盘式/斜试头部传感器,机械臂传感器)的复杂移动处理平台设计的。与Player相比,ROS可以更方便的借助分布式计算设备,而且我可以肯定,越高级的应用越适用于ROS而不是Player。换句话说,Player提供了更多的硬件驱动,而ROS提供了更多算法。

关于你们针对OpenCV集成提出的问题,我想你们会发现ROS集成OpenCV的代码要比Player多一点。未来,当ROS和OpenCV团队明显重叠时,你们会发现这种差异将变得更大。

我发现ROS利用了大量的来自于Player工程的代码。ROS节点的代码重用了许多Player的驱动,而且Stage和Gazebo可在ROS社区中得到广泛的支持和良好的应用。

总结一下ROS的特点:

  1. 更方便地借助分布式计算设备
  2. 提供更多算法的支持
  3. 分布式的进程(节点),进程被封装在程序包和功能包集中。

3. ROS架构组成

ROS的纵向介绍主要从小到大,从深到浅进行介绍,整个ROS系统分为以下三个层次,如图

3.1 文件系统级别

文件系统级的概念如下:

  1. 功能包:功能包是ROS系统中软件组织的基本形式,包含运行的节点以及配置文件等。
  2. 功能包清单:这个清单是指明功能包的依赖关系、源文件编译标志信息等。功能包中的package.xml文件就是一个功能包清单。
  3. 综合功能包:将几个功能包组织在一起,即可形成综合功能包。
  4. 综合功能包清单:类似普通功能包清单.在格式上也有一定的限制。
  5. 消息类型:ROS中节点之间发送消息时需要事先进行消息说明。ROS中提供了标准类型消息,也可以自行定义。消息类型的说明存储在功能包下的msg文件内。
  6. 服务类型:定义了在ROS系统中由每个进程提供的关于服务请求和响应的数据结构。

3.2 ROS架构组成——计算图层

这个层次最深,主要是描述程序是如何运行的,也就是ROS当中很细节的层次,这个层次我们主要介绍几个概念,这几个概念分别是节点、节点管理器、话题、服务。

(1)节点
就是指功能,或者说是进程,也可以当做一个个软件模块。

(2)节点管理器
节点管理器说白了就是管理节点的,跟指挥中心一样,类似于每一个固定电话是一个节点,那节点管理器就是基站,总站。

(3)话题

首先介绍ROS的话题通讯,ROS的话题通讯信息流图如下:

看到这幅图可能是懵逼的,接下来我们详细介绍。

假设一个节点需要某种类型的信息,假设这种类型是“bar”,也就是我们所说的话题,那这个节点必须接收这种话题的信息,我们把这个节点称之为接收者或者订阅者(listener),因此它会向节点管理器(ROS Master)求助,节点管理器(ROS Master)然后便会帮助这个接收者(listener)找正在发布这种话题“bar”的节点,这个节点我们称之为发布者(talker)找到之后便会帮助这两个节点建立连接,然后通讯。

总体上来说一下步骤(图中步骤是七个,此处精简为五个步骤):

第一步信息的发布者(talker)和接收者(listener)都必须向节点管理器(ROS Master)注册自己的信息,就跟人员登记一样,节点管理器需要知道你这个节点的地址等信息,为什么需要知道呢,因为ROS的节点在实际机器人设计中,可能都存在于一个计算机之中,也可能分布于不同的计算机,因此需要地址等信息来对节点进行确定;

第二步节点管理器在确定需要通信的两个节点之后就会对两个节点的信息进行匹配

第三步接收者(listener)向发布者(talker)发送自己的TCP通讯协议以及连接请求

第四步发布者(talker)确定连接请求,然后自己的TCP地址发送给接收者(listener);

第五步:两个节点正式建立连接,并以TCP协议进行数据传输

4. ROS安装文件夹架构

ROS安装之后的安装目录默认在“计算机/opt/ros/”安装目录下,如下图所示,大家打开之后会看到下面这五个文件夹。

4.1 bin文件夹

文件夹下面保存的基本是一些可执行的程序和命令,很多都是在ROS的终端界面可以直接运行的命令行,而如果需要在终端中调用命令行运行命令,就必须找到这个命令行程序,也就需要找到bin文件夹,也就需要前面所说的脚本文件,此外,还需要设置环境变量,设置环境变量的方法很简单,系统为我们已经准备好了脚本文件,我们只用将这些脚本添加到ROS的终端配置文件里面即可。

4.2 include文件夹

这个文件夹比较重要,里面放置的是头文件,这个大家就比较熟悉了,学过C语言的都知道,每次我们在写程序的第一行就是#include <stdio.h>,这个里面就包含了一个头文件。

ROS里面的某一具体的头文件属于某一具体的功能包,如果一个功能包需要依赖另外一个功能包,也就是要与另外一个功能包建立联系,那必须要包含另外那个功能包的头文件,功能包的头文件在功能包安装的时候就被存放于这个文件夹。

4.3 lib文件夹

主要存放一些.so结尾的可执行程序

4.4 etc文件夹

主要存放ros和catkin配置文件

参考文章

ROS学习笔记基础2(基础知识和ROS架构)相关推荐

  1. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  2. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package). 一.创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次性创 ...

  3. ROS学习笔记四:用C++编写ROS发布与订阅

    一.创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...

  4. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  5. 前端学习笔记(js基础知识)

    前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...

  6. 家族关系查询系统程序设计算法思路_【学习笔记】数据库基础 - 查询优化

    目录 什么是数据库查询优化? 影响查询优化的因素 优化策略概述 查询优化的总体思路 语义优化 -- 内容等价性 语法优化(逻辑层优化)---语法等价性 执行优化(物理层优化) 查询优化在DBMS中的位 ...

  7. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)

    菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...

  8. 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

    菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...

  9. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

最新文章

  1. 串口调试助手c语言程序,串口调试助手C语言源程序
  2. es6 Promise
  3. nginx服务器远程无法访问,nginx首次安装远程无法访问
  4. JavaScript实现bellmanFord贝尔曼-福特算法(附完整源码)
  5. vue切换路由页面数据缓存_Vue-Router实现前端页面缓存
  6. Python基本数据类型之列表
  7. android listView的setOnScrollListener的使用
  8. UVA524 PrimeRingProblem素数环
  9. python画图颜色种类_Python可视化|matplotlib07-python colormap(颜色映射)(三)
  10. 【Linux】文件操作系统调用
  11. 部分排序算法c语言实现
  12. 【LeetCode】剑指 Offer 58 - I. 翻转单词顺序
  13. HTML-参考手册: HTML 音频/视频
  14. 面向接口编程详解---编程实例
  15. 项目管理软件浮出水面(转)
  16. 关于使用硬改的路由器的各种经历
  17. Kafka突然宕机怎么办
  18. java启动临时文件_springboot临时文件存储目录配置
  19. 微信小程序-腾讯云即时通信 IM 小程序直播(一)
  20. 科研小助手PubMed的插件PubMedy

热门文章

  1. C/C++网络编程工作笔记0001---网络编程的基本概念
  2. matlab | 与 || 的区别
  3. Linux操作问题解答
  4. delphi 整数类型的表述
  5. ftk学习记(输入法篇)
  6. python123测验答案第二周温度转换二_python123练习题
  7. dlut-KFQ概率上机1
  8. linux下qt生成dll,Qt 创建和使用动态链接库 - cibiren2011的专栏 - 博客频道 - CSDN.NET...
  9. windows c++ cjson 使用_cJSON源码剖析
  10. bch怎么挖_BCH与BSV的减半,给目前正在反弹中的行情带来什么?