学习笔记15--机器人操作系统

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》。
此专栏是关于《自动驾驶汽车平台技术基础》书籍的笔记.



1.机器人操作系统

  1. 一个优秀的软件计算框架的3个特征:

    1. 高效的开发支持;
    2. 可灵活配置的模块;
    3. 丰富的调试工具;
  2. R O S {\rm ROS} ROS概述

    • 机器人操作系统: R O S {\rm ROS} ROS.
    • R O S {\rm ROS} ROS系统起源于2007年斯坦福大学人工智能实验室与机器人技术公司 W i l l o w   G a r a g e {\rm Willow \space Garage} Willow Garage的个人机器人项目间的合作,2008年后由 W i l l o w   G a r a g e {\rm Willow \space Garage} Willow Garage公司全面接管并进行迭代开发和维护;
    • R O S {\rm ROS} ROS提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理等;同时,提供一些工具和程序库用于获取、建立、编写和运行多机整合的应用;
  3. R O S {\rm ROS} ROS特点

    R O S {\rm ROS} ROS运行架构是一种使用 R O S {\rm ROS} ROS通信模块实现模块间 P 2 P {\rm P2P} P2P的松耦合的网络连接的处理架构,支持若干种类型的通信,包括基于服务的同步 R P C {\rm RPC} RPC(远程过程调用)通信、基于 T o p i c {\rm Topic} Topic的异步数据流通信、还包括参数服务器上的数据存储,但 R O S {\rm ROS} ROS本身不具备实时性;

    R O S {\rm ROS} ROS主要特点:

    • 点对点设计

      一个使用 R O S {\rm ROS} ROS的系统包括一系列进程,这些进程存在于多个不同的主机且在运行过程中通过端对端的拓扑结构进行联系;

      R O S {\rm ROS} ROS点对点设计示例如下所示:
      1

    • 多语言支持

      R O S {\rm ROS} ROS支持多种主流编程语言,如: C + + 、 P y t h o n 、 J a v a 、 O c t a v e {\rm C++、Python、Java、Octave} C++PythonJavaOctave L s i p {\rm Lsip} Lsip,也支持其他多种编程语言的接口实现;

      R O S {\rm ROS} ROS的特殊性主要体现在消息通信层,其利用 X M L − R P C {\rm XML-RPC} XMLRPC机制实现端对端的连接和配置;为了支持交叉语言, R O S {\rm ROS} ROS利用了简单的、语言无关的接口定义语言去描述模块间的消息传送.接口定义语言使用了简短的文本去描述每条消息的结构,也允许消息的合成.

      R O S {\rm ROS} ROS的消息处理系统完全与编程语言无关,可支持多种编程语言自由结合与适配使用.

    • 精简与集成

      R O S {\rm ROS} ROS建立的系统具有模块化的特点,各模块中的代码可以单独编译,且编译使用的 C M a k e {\rm CMake} CMake工具使其自始至终贯彻精简的理念. R O S {\rm ROS} ROS系统将复杂的代码实现封装在各个库中,并创建了一些短小精干的应用程序以显示 R O S {\rm ROS} ROS库的功能.这种方式允许对 R O S {\rm ROS} ROS的代码进行简单移植并复用于任何新系统中.另一个优势在于,对代码的单元测试也变得较为容易,一个独立的单元测试程序可以测试代码库中很多的特性.

      R O S {\rm ROS} ROS有一个活跃的社区,大量开发者在社区中对其进行维护和升级,包括升级其软件库、对应用程序打补丁等,从而不断升级 R O S {\rm ROS} ROS的源代码.

    • 工具包丰富

      为了管理复杂的 R O S {\rm ROS} ROS软件框架,开发者利用大量的小工具去编译和运行多种多样的 R O S {\rm ROS} ROS组件,以维持一个精简的内核,避免去创建一个庞大的开发和运行环境.
      2

  4. R O S {\rm ROS} ROS总体框架

    R O S {\rm ROS} ROS主要分为两大部分:

    • m a i n {\rm main} main:核心部分,主要由 W i l l o w   G a r a g e {\rm Willow \ Garage} Willow Garage公司和一些开发者设计、提供及维护,提供一些分布式计算的基本工具,及整个 R O S {\rm ROS} ROS核心部分的程序;
    • u n i v e r s e {\rm universe} universe:全球范围的代码,由不同国家的 R O S {\rm ROS} ROS社区组织开发和维护;一种是库的代码,如: O p e n C V 、 P C L {\rm OpenCV、PCL} OpenCVPCL等;库的上一层是从功能角度提供的代码,如:人脸识别,这些功能会调用下层的库;最上层的代码是应用级的代码,控制机器人完成某一确定的功能;

    从另一个角度对 R O S {\rm ROS} ROS分级,主要分为3个级别:计算图级、文件系统级、社区级,如下图所示:
    3

    1. 计算图级

      • 计算图是 R O S {\rm ROS} ROS处理数据的一种点对点的网络形式;程序运行时,所有进程及它们所进行的数据处理,都将会通过一种点对点的网络形式表现出来;

      • 节点

        节点是一些执行运算任务的进程, R O S {\rm ROS} ROS利用规模可增长的方式使代码模块化:一个典型的系统由很多节点组成,当许多节点同时运行时,可以方便地将端对端的通信绘制成一个图表,这个图表中,进程就是图中的节点,端对端的连接关系由其中的弧线连接表现;

      • 消息

        节点间通过传递消息进行通信,如下图所示,每一个消息都是一个严格的数据结构;原有标准的数据类型(如:整型、浮点型、布尔型等)都是支持的,也支持原始数组类型;
        4

      • 主题

        消息以一种发布或订阅的方式传递;一个节点可以在一个给定的主题中发布消息;一个节点针对某个主题关注与订阅特定类型的数据;可能同时有多个节点发布或订阅同一个主题的消息;

      • 服务

        R O S {\rm ROS} ROS中,一项服务用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应;

      • R O S {\rm ROS} ROS控制器

        R O S {\rm ROS} ROS控制器 ( R O S   M a s t e r ) ({\rm ROS \ Master}) (ROS Master)使所有节点有条不紊地执行, R O S   M a s t e r {\rm ROS \ Master} ROS Master通过 R P C ( R e m o t e   P r o c e d u r e   C a l l   P r o t o c o l ,远程过程调用 ) {\rm RPC(Remote\ Procedure \ Call\ Protocol,远程过程调用)} RPC(Remote Procedure Call Protocol,远程过程调用)提供登记列表和对其他计算图表的查找;没有控制器,一个节点将无法找到其他节点,并交换信息或调用服务;

        控制节点订阅和发布消息的模型如下图所示:
        5

    2. 文件系统级

      R O S {\rm ROS} ROS文件系统级主要指:在硬盘上面查看的 R O S {\rm ROS} ROS源代码的组织形式,如下图所示:
      6

      • R O S {\rm ROS} ROS的软件以包的形式组织,每个包里包含节点、 R O S {\rm ROS} ROS依赖库、数据套、配置文件、第三方软件或任何其他逻辑;包的目标是提供一种易于使用的结构以便其软件的重复使用;

      • 堆是包的集合,提供一个完整的功能; R O S {\rm ROS} ROS是一种分布式处理框架,这使可执行文件能被单独设计,且在运行时松散耦合,这些过程可以封装到包和堆中,以便共享和分发;

        M a n i f e s t s ( m a n i f e e s t . x m l ) {\rm Manifests(manifeest.xml)} Manifests(manifeest.xml):提供关于 p a c k a g e {\rm package} package元数据,包括它的许可信息和 p a c k a g e {\rm package} package间依赖关系,及语言特性信息;

        S t a c k m a n i f e s t s ( s t a c k . x m l ) {\rm Stackmanifests(stack.xml)} Stackmanifests(stack.xml):提供关于 S t a c k {\rm Stack} Stack元数据,包括它的许可信息和 S t a c k {\rm Stack} Stack间依赖关系;

    3. 社区级

      R O S {\rm ROS} ROS社区级概念是 R O S {\rm ROS} ROS网络上进行代码发布的一种表现形式,结构如下图所示:
      6

猜你喜欢

转载自blog.csdn.net/qq_39032096/article/details/127306968