ROS学习(一)——ROS入门

注:主要是古月博客学习过程中的记录,其专栏为:https://www.guyuehome.com/category/column/ros-exploring

1.ROS简介

ROS(Robot Operating System)是用于机器人的一种次级操作系统,可以提供硬件抽象描述、底层驱动程序管理、共用功能执行、程序间的消息传递、程序发行包管理等功能。ROS的设计目标是在机器人研发中提高代码复用率,是一种分布式处理框架,可执行文件可以单独设计并在运行时松散耦合,这些过程可以封装到数据包和堆栈中进行共享和分发。
ROS的主要特点如下:

  • 点对点设计:使用ROS的系统包括一些列进程,这些进程存在于多个不同主机并且在运行过程中用过端对端的拓扑结构进行联系。ROS的这种点对点设计以及服务和节点管理器等极值可以分散由计算机视觉和语音识别等功能带来的实时计算压力,适应垛机器人遇到的挑战。
    在这里插入图片描述

  • 多语言支持:支持多种不同的语言,包括(C++、Python等)。ROS利用了简单的、语言无关的借口定义语言去描述模块之间的消息传送,支持交叉语言的使用。

  • 精简与集成

  • 工具包丰富

  • 免费与开源

2.ROS总体框架

ROS可以划分为三个级别:

  • 计算图级:描述程序如何运行
  • 文件系统级:程序文件如何组织和构建
  • 社区级:程序的分布式管理

2.1 计算图级

计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及它们进行的数据处理通过点对点的网络形式表现出来,这一级的重要概念:节点(Node)、消息(Message)、主题(Topic)、服务(Service)。

  • 节点:指的是一些执行运算任务的进程,可以被称为软件模块。多个节点同时运行时,可以将其端对端的通讯绘制成图表,进程为图中的节点,端对端的连接关系为图中的弧线连接。
  • 消息:节点之间通过传递消息进行通讯,每一个消息都是一个严格的数据结构
  • 主题:消息以发布/订阅的方式传递,一个节点可以在给定的主题中发布消息。一个节点针对某个主题关注与订阅特定类型的数据。可能由多个节点发布或者订阅同一个主题的消息。总体上,发布者和订阅者都不了解彼此的存在。
    在这里插入图片描述
  • ROS中的通信机制称为服务,一个服务使用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回复,类似于web服务器。

为了使所有节点可以有条不紊的执行,可以通过ROS的控制器实现(ROS Master)。ROS Master通过RPC(Romote Procedure Call Protocol,远程过程调用)提供登记列表和对其他计算图表的查找。没有控制器,节点无法找到其他节点。下图模型描述了ROS控制节点订阅和发布消息:
在这里插入图片描述
ROS的控制器给储存了ROS节点的主题和服务的注册信息,节点与控制器通信报告它们的注册信息。当节点与控制器通信时,可以接受关于其他已注册及节点的信息并与其他已注册节点建立联系。注册信息改变时控制器也会回馈这些节点,同事允许节点动态创建与新节点之间的连接。需要注意的是,节点与节点之间的连接是直接的,控制器仅提供了查询信息。

2.2 文件系统级

文件系统级主要指的硬盘上查看的ROS源代码的组织形式。该级别的概念包括:包(Package)、堆(Stack)。

  • 包:ROS的软件以包的形式组织起来,包含节点(Node)、ROS依赖库、数据套、配置文件、第三方软件和其他逻辑构成。包提供了一种易于使用的结构以便于ROS的重复使用。
  • 堆:堆是包的结合,提供了完整的功能,如导航功能,stack与版本号关联。

2.3 社区级

主要指的是ROS网络上发布的一种表现形式,类似于github中的项目。

3.ROS安装

网上关于ROS安装的教程有很多,下面列出一个Ubuntu 18.04可用的参考教程:
https://blog.csdn.net/haiyinshushe/article/details/84256137

也可以直接参考ROS的wiki教程http://wiki.ros.org/

参考:
[1] https://www.guyuehome.com/227
[2] https://www.guyuehome.com/229

猜你喜欢

转载自blog.csdn.net/space_dandy/article/details/114879932