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. 包管理
从这张图片来看,ROS是2007年诞生与斯坦福大学,斯坦福大学,世界名校,而且是专业研究机器人的,目前也在从事人工智能的研发,ROS诞生于这样的贵族,可见ROS的发展还是非常有前途的
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的特点:
更方便地借助分布式计算设备
提供更多算法的支持
分布式的进程(节点),进程被封装在程序包和功能包集中。
3. ROS架构组成
ROS的纵向介绍主要从小到大,从深到浅进行介绍,整个ROS系统分为以下三个层次,如图
在这里插入图片描述
3.1 文件系统级别
img
文件系统级的概念如下:
功能包:功能包是ROS系统中软件组织的基本形式,包含运行的节点以及配置文件等。
功能包清单:这个清单是指明功能包的依赖关系、源文件编译标志信息等。功能包中的package.xml文件就是一个功能包清单。
综合功能包:将几个功能包组织在一起,即可形成综合功能包。
综合功能包清单:类似普通功能包清单.在格式上也有一定的限制。
消息类型:ROS中节点之间发送消息时需要事先进行消息说明。ROS中提供了标准类型消息,也可以自行定义。消息类型的说明存储在功能包下的msg文件内。
服务类型:定义了在ROS系统中由每个进程提供的关于服务请求和响应的数据结构。
3.2 ROS架构组成——计算图层
这个层次最深,主要是描述程序是如何运行的,也就是ROS当中很细节的层次,这个层次我们主要介绍几个概念,这几个概念分别是节点、节点管理器、话题、服务。
(1)节点
就是指功能,或者说是进程,也可以当做一个个软件模块。
(2)节点管理器
节点管理器说白了就是管理节点的,跟指挥中心一样,类似于每一个固定电话是一个节点,那节点管理器就是基站,总站。
在这里插入图片描述
(3)话题
在这里插入图片描述
首先介绍ROS的话题通讯,ROS的话题通讯信息流图如下:
在这里插入图片描述
看到这幅图可能是懵逼的,接下来我们详细介绍。
假设一个节点需要某种类型的信息,假设这种类型是“bar”,也就是我们所说的话题,那这个节点必须接收这种话题的信息,我们把这个节点称之为接收者或者订阅者(listener),因此它会向节点管理器(ROS Master)求助,节点管理器(ROS Master)然后便会帮助这个接收者(listener)找正在发布这种话题“bar”的节点,这个节点我们称之为发布者(talker)找到之后便会帮助这两个节点建立连接,然后通讯。
http://ros.org/images/wiki/ROS_basic_concepts.png
总体上来说一下步骤(图中步骤是七个,此处精简为五个步骤):
第一步:信息的发布者(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配置文件
原文链接:https://blog.csdn.net/cliukai/article/details/90448874