一起自学SLAM算法:1.3 ROS系统架构

2023-05-16

 连载文章,长期更新,欢迎关注:


写在前面

第1章-ROS入门必备知识

        1.1 ROS简介

        1.2 ROS开发环境搭建

        1.3 ROS系统架构

        1.4 ROS调试工具

        1.5 ROS节点通信

        1.6 ROS其他重要概念

        1.7 ROS2.0展望

第2章-C++编程范式

第3章-OpenCV图像处理

第4章-机器人传感器

第5章-机器人主机

第6章-机器人底盘

第7章-SLAM中的数学基础

第8章-激光SLAM系统

第9章-视觉SLAM系统

第10章-其他SLAM系统

第11章-自主导航中的数学基础

第12章-典型自主导航系统

第13章-机器人SLAM导航综合实战


安装完ROS后,很多朋友应该迫不及待想立马开始写程序。由于ROS的架构比较复杂,为了后面写起代码来容易理解遇到的各种概念,这里先讨论一下ROS的系统架构,好让大家对ROS中的各种概念有一个全面性把控。按照官方的说法,可以从计算图、文件系统和开源社区分别来理解ROS架构[1]p28~30。

1.3.1 从计算图视角理解ROS架构

ROS中可运行程序的基本单位叫节点(node),节点之间通过消息机制进行通信,这样就组成了一张网状图,也叫计算图,如图1-5所示。

 图1-5  ROS的计算图结构

节点是可运行程序,通常也叫进程。ROS功能包中创建的每个可执行程序在被启动加载到系统进程中后,该进程就是一个ROS节点,如图1-5中的节点1、节点2、节点3等。节点之间通过收发消息进行通信,消息收发机制分为话题(topic)、服务(service)和动作(action)三种,如图1-5中的节点2与节点3、节点2与节点5采用话题通信,节点2与节点4采用服务通信,节点1与节点2采用动作通信。计算图中的节点、话题、服务、动作都要有唯一名称作为标识。ROS利用节点将代码和功能解耦,提高了系统的容错性和可维护性。所以最好让每个节点都具有特定的单一功能,而不是创建一个包罗万象的庞大节点。如果用C++编写节点,需要用到ROS提供的roscpp库;如果用Python编写节点,需要用到ROS提供的rospy库。

消息是构成计算图的关键,包括消息机制和消息类型两部分。消息机制有话题、服务和动作三种,每种消息机制中传递的数据都具有指定的数据类型(即消息类型),消息类型可分为话题消息类型、服务消息类型和动作消息类型。消息机制和消息类型将在1.5节中展开讲解。

数据包(rosbag)是ROS中专门用来保存和回放话题中数据的文件,可以将一些难以收集的传感器数据用数据包录制下来,然后反复回放来进行算法性能调试。

参数服务器(parameter server)能够为整个ROS网络中的节点提供便于修改的参数。参数可以认为是节点中可供外部修改的全局变量,有静态参数和动态参数。静态参数一般在节点启动时用于设置节点工作模式;动态参数可以用在节点运行时动态配置节点或改变节点工作状态,比如电机控制节点里的PID控制参数。

主节点(master)负责各个节点之间通信过程的调度管理。因此主节点必须要最先启动,主节点通过roscore命令来启动。

1.3.2 从文件系统视角理解ROS架构

ROS程序的不同组件要放在不同的文件夹中,这些文件夹根据不同的功能对文件进行组织,这就是ROS的文件系统结构,如图1-6所示。

 图1-6  ROS的文件系统结构

工作空间是一个包含功能包、编译包和编译后可执行文件的文件夹,用户可以根据自己的需要创建多个工作空间,在每个工作空间中开发不同用途的功能包。在图1-6中,我们创建了一个名为catkin_ws的工作空间,其中包含src、build和devel三个文件夹。src这个文件夹放置各个功能包和一个用于这些功能包的CMake配置文件CMakeLists.txt。这里说明一下,由于ROS中的源码采用catkin工具进行编译,而catkin工具又是基于cmake技术的,所以我们会在src源文件空间和各个功能包中都会见到一个CMake配置文件CMakeLists.txt,这个文件就是起配置编译的作用。build这个文件夹放置CMake和catkin编译功能包时产生的缓存、配置、中间文件等。devel这个文件夹放置编译好的可执行程序,这些可执行程序是不需要安装就能直接运行的。一旦功能包源码编译和测试通过后,可以将这些编译好的可执行文件直接导出与其他开发人员分享。

功能包是ROS中软件组织的基本形式,一个功能包具有用于创建ROS程序的最小结构和最少内容,它包含ROS节点源码、脚本、配置文件等。CMakeLists.txt是功能包配置文件,用于这个功能包cmake编译时的编译配置。package.xml是功能包清单文件,用xml的标签格式标记这个功能包的各类相关信息,比如包的名称、开发者信息、依赖关系等。主要作用是为了使安装和分发功能包更容易。include/<pkg_name>是功能包头文件目录,可以把你的功能包程序中包含的*.h头文件放在这里,include目录之所以还要加一级路径<pkg_name>是为了更好地区分自己定义的头文件和系统标准头文件,<pkg_name>用实际功能包的名称替代。不过这个文件夹不是必要项,比如有些程序没有头文件的情况。msg、srv和action三个文件夹分别用来存放非标准话题消息、服务消息和动作消息的定义文件,ROS支持用户自定义消息通信过程中使用的消息类型。这些自定义消息不是必要的,比如程序只使用标准消息类型的情况。scripts目录存放bash、python等脚本文件,非必须。launch目录存放节点的启动文件,*.launch文件用于启动一个或多个节点,在含有多个节点的大型项目中很有用,非必须。src目录存放功能包节点的源文件,一个功能包中可以有多个节点程序来完成不同的功能,每个节点程序都是可以单独运行的,这里用于存放这些节点程序的源文件,你可以在这里继续创建文件夹和文件来按你的需求组织源文件,源文件可以用C++、python等书写。

1.3.3 从开源社区视角理解ROS架构

ROS是开源软件,各个独立的网络社区分享和贡献软件及教程,形成了强大的ROS开源社区,如图1-7所示。

 图1-7  ROS的开源社区结构

ROS依赖于开源和共享的软件,这些代码由不同的机构共享和发布,比如GitHub源码共享、Ubuntu软件仓库发布、第三方库等。ROS的官方wiki是重要的文档讨论社区,在里面可以很方便地发布与修改相应的文档页面。ROS的answer主页里面有大量ROS开发者的提问和答案,对ROS开发中遇到的各种问题讨论很活跃。

源码仓库

  • Github下载:github.com/xiihoo/Books_Robot_SLAM_Navigation

  • Gitee下载(国内访问速度快):gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一起自学SLAM算法:1.3 ROS系统架构 的相关文章

随机推荐

  • ROS-自主导航与定位

    文章目录 1 xff0c 引言2 xff0c 全球导航卫星系统GNSS3 xff0c 惯性传感器4 xff0c GNSS和IMU融合形式1 xff09 融合形式 xff1a 松耦合2 xff09 融合形式 xff1a 紧耦合 5 xff0c
  • python 爬虫遇到验证码如何解决

    1 安装对应的库 安装tesseract https digi bib uni mannheim de tesseract 其中文件名中带有dev的为开发版本 xff0c 不带dev的为稳定版本 xff0c 可以选择下载不带dev的版本 x
  • Vector CANdb++的下载安装

    1 下载安装包 xff1a https download csdn net download m0 68158707 87657730 spm 61 1001 2014 3001 5501 2 解压缩后可得到如图两个文件 xff1a 将dl
  • 数据结构之顺序栈的操作(C语言附详细代码与解释)

    目录 一 xff0c seq stack h头文件代码 xff1a 二 xff0c seq stack c文件内 1 创建空栈 2 入栈 3 出栈 4 栈的清空和销毁 三 xff0c 详细代码 数据结构中的栈 xff0c 有顺序栈与链式栈两
  • 数据结构之链式队列的实现操作(C语言附详细代码与关键代码详解)

    目录 一 xff0c 关于链式队列程序编写的简要说明 二 xff0c linkqueue h头文件 三 xff0c 关键函数代码与详解 1 创建空的链式队列 2 入队 3 出队 4 销毁链式队列 四 xff0c linkqueue c文件详
  • 数据结构之二叉树(C语言附详细代码)

    目录 一 xff0c 树和二叉树 1 树 定义 关于树的一些概念 2 二叉树 定义 特殊的二叉树 二叉树的性质 二叉树的存储结构 顺序结构 只适用于完全二叉树 二叉树的遍历 二 xff0c 二叉树操作代码 1 头文件 2 函数代码 创建二叉
  • 共享内存(进程间的通信方式)

    目录 1 共享内存的特点 2 函数接口 3 有关共享内存的系统命令 1 共享内存的特点 xff08 1 xff09 共享内存是一种最高效的进程间的通信方式 xff0c 进程可以直接读写内存 xff0c 而进程之间不需要通过任何数据的拷贝 x
  • Linux-C语言编写-TCP服务端接收消息流程(含代码)简介(1)

    目录 服务端 第一步socket 第二步struct sockaddr in 第三步 可以与第二步合为一个步骤 bind 第四步listen 第五步accept 第六步recv 第七步close 详细代码 服务端 第一步socket 1 操
  • Linux-C语言编写-TCP客户端发送消息流程(含代码)简介(2)

    目录 第一步socket 第二步struct sockaddr in 第三步connect 第四步send 第五步close 详细代码 第一步socket 1 操作 xff1a 创建流式套接字 xff1b 2 所用函数 xff1a sock
  • 基于Linux下的Nand (Nor) Flash读写速度测试

    https blog csdn net qq 39721016 article details 117993088 基于Linux下的Nand xff08 Nor xff09 Flash读写速度测试 1 打开内核测试模块2 编译内核 xff
  • 关于结构体赋值的一个小知识点

    一 xff0c 如果结构体中定义了一个字符数组的成员变量 xff0c struct test int num char ch 32 TEST 当我们需要给字符数组赋值时 xff0c 我们可能会选择下列某种方式进行初始化 xff1a 1 可以
  • lighttpd服务器搭建教程

    目录 一 xff0c 下载安装 二 xff0c 配置服务器 1 创建目录以及移动文件位置 2 修改配置文件 三 xff0c 运行测试 四 xff0c 常见错误 环境 xff1a linux虚拟机 xff1b 一 xff0c 下载安装 1 下
  • 牛客中C++/C语言的一道练习题详解

    解题思路及涉及知识点 xff1a 先简单判断一下 xff0c 程序最终是要打印k的值 xff1b k的值由两次循环中的fun函数的返回值决定 xff1b fun函数中 xff0c 变量c是静态的 xff1b fun函数中第三行代码a 61
  • QT基本组件与常用类

    目录 一 设计师 Designer xff08 掌握 xff09 二 布局 Layout 2 1 布局的基本使用 xff08 掌握 xff09 2 2 布局属性 xff08 掌握 xff09 2 3 伸展器 xff08 掌握 xff09 2
  • QT多窗口编程与文件IO编程

    目录 一 消息对话框 QMessageBox xff08 掌握 xff09 二 常用窗口类 xff08 掌握 xff09 三 主窗口类 QMainWindow xff08 重点 xff09 四 parent参数 xff08 掌握 xff09
  • QT数据库-网络编程-打包

    目录 一 讲解之前 二 数据库基本操作 三 模糊查询 二 编程之前 三 通信结构 一 设置应用图标 xff08 熟悉 xff09 二 Debug和Release模式 xff08 掌握 xff09 三 动态链接库 xff08 掌握 xff09
  • Visual Studio 2022 的安装和创建C++项目

    下面我们来讲一下如何下载安装VS 2022并且创建C 43 43 项目 1 下载 首先 xff0c 我们来到VS的微软官网下载地址 xff1a https visualstudio microsoft com zh hans vs 然后点击
  • 一起自学SLAM算法:写在前面

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 一起自学SLAM算法:第1章-ROS入门必备知识

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其
  • 一起自学SLAM算法:1.3 ROS系统架构

    连载文章 xff0c 长期更新 xff0c 欢迎关注 xff1a 写在前面 第1章 ROS入门必备知识 1 1 ROS简介 1 2 ROS开发环境搭建 1 3 ROS系统架构 1 4 ROS调试工具 1 5 ROS节点通信 1 6 ROS其