(零)基础概念篇

欢迎前往《Qt+librviz开发》系列专栏查看更多内容!

⚠️ 须知:《Qt+librviz开发》专栏系列文章并非零基础入门文章!在开始学习之前,读者需要确保已经掌握以下基础知识:①C++基础;②Qt开发基础;③英语阅读能力基础(有阅读英文文档需求);《Qt+librviz开发》专栏系列文章允许读者在对Linux、ROS无任何基础及了解的前提下学习,但笔者建议有基本的了解后再来学习会更加顺利。

可参考链接:

  1. C++基础:面向对象程序设计(基础);
  2. Qt开发基础:Qt从入门到实战|传智教育_哔哩哔哩_bilibili、Qt开发;
  3. ROS官网:ROS - Robot Operating System
  4. ROS wiki:ROS维基
  5. ROS media:ROS 媒体(可以获取到 ROS 及其发行版本的所有 logo、海报和插画)

本文只针对《Qt+librviz开发》专栏系列文章中涉及到的专业名词和概念进行最基本的解释,不会做深入探讨。读者如果对某个概念感兴趣可以参考本文提供的参考链接或者自行搜索。

本文适用对象是使用过Windows系列操作系统的同学,撰写目标是方便读者在阅读后续文章时不会产生不必要的困惑,所以如果读者在完成本文学习的基础上阅读后续文章时还是对某个名词概念感到困惑,请务必前往本文的评论区告知笔者!


正文:

vmware

(零)基础概念篇_第1张图片

vmware 是一家提供云计算和虚拟化软件和服务的公司。它提供了多种产品和服务,包括用于云基础架构、云管理、安全性和网络的多云服务,以及用于构建和运行云原生应用程序的解决方案。

参考链接

  1. VMware 中国 - 交付面向企业的数字化基础 | CN
  2. 关于 VMware 公司 | CN

VMware Workstation Pro

(零)基础概念篇_第2张图片

VMware Workstation Pro 是一款业界标准的桌面虚拟机软件,它可以在 Linux 或 Windows PC 上运行虚拟机。它具有 DirectX 11 和 OpenGL 4.3 3D 加速图形支持,“暗黑模式”用户界面、支持 Windows 11,vctl CLI 用于运行和构建容器和 Kubernetes 集群,支持最新的 Windows 和 Linux 操作系统,支持同时运行多个虚拟机。作为付费软件支持免费下载 30 天试用版。

参考链接

  1. Windows 虚拟机 | Workstation Pro | VMware | CN
  2. 下载 VMware Workstation Pro | CN

VMware Workstation Player 是一款可以在 Linux 或 Windows PC 上轻松运行多个操作系统作为虚拟机的软件。它使用 VMware vSphere Hypervisor 技术提供简单且安全的本地虚拟化解决方案,可以用于教育、培训、企业桌面交付等用途。VMware Workstation Player 是免费的,它与 VMware Workstation Pro 都属于 VMware Workstation 系列产品;两者之间的比较可以参考官方商店,但最重要的区别是 VMware Workstation Player 只能同时运行一个虚拟机。

参考链接

  1. VMware Workstation Player | VMware | CN
  2. VMware Workstation Player - VMware Customer Connect
  3. COMPARE WORKSTATION PLAYER AND WORKSTATION PRO

LTS

LTS(Long-Term Support)意为长期支持。指的是软件的特定版本被长期稳定地支持和维护。LTS 版本在发布后会获得一定的维护周期,通常为几年或更长时间。在这个维护周期内,开发者会为 LTS 版本提供安全补丁和错误修复,并确保这些版本的稳定性和兼容性。

EOL

EOL(End of Life)意为生命周期结束,指的是软件版本不再提供支持和更新的时间点

参考链接

  1. 什么是长期支持(LTS)版本?什么是Ubuntu LTS? - 知乎

Qt

(零)基础概念篇_第3张图片

Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface)程序,当然也可以开发不带界面的命令行(Command User Interface)程序。

Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要。当然 Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。

Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone,嵌入式系统 QNX、VxWorks 等等。

LTS in Qt

Qt 的 LTS 版本通常会提供3年的支持时间。这意味着在这3年内,该版本会持续收到错误修复和安全更新。不过,对于某些版本,支持时间可能会延长。例如,Qt 5.15 LTS 版本的支持时间被延长到了5年。我们可以在 Qt 官方维基的主页查看 Qt 的发行版本信息。

Qt Platform Support

我们可以在 Qt 的官方文档网站查看 Qt 不同发行版本的支持平台情况,比如我们可以查看 Qt 6.5 LTS 支持平台。

参考链接

  1. Qt | 跨平台软件设计与开发工具

Qt Creactor

Qt Creactor 是跨平台的集成开发环境(IDE),旨在为开发者带来最好的体验。 Qt Creator 可在 Windows、Linux 和 macOS 桌面操作系统上运行,并允许开发人员在桌面、移动和嵌入式平台创建应用程序。

参考链接

  1. Qt Creactor:用于应用程序开发的跨平台IDE

build system

build system(构建系统)是一个软件工具或工具的集合,它使从源代码构建应用程序或软件系统的过程自动化。构建系统获取源代码和其他必要的文件,例如库和配置文件;并生成编译后的可执行文件、库或其他输出格式。

构建系统通常包括许多步骤,例如将源代码编译为目标代码,将目标代码链接到二进制可执行文件中,并将二进制文件打包成可分发的格式,例如安装程序或软件存储库的包。

构建系统还可以执行其他任务,例如运行自动化测试、生成文档和管理软件系统不同组件之间的依赖关系。

常见的构建系统包括 Make、CMake、Gradle 和 Maven。它们在软件开发中广泛使用,以自动化构建过程,并确保软件可以跨不同平台和环境一致地构建。

参考链接

  1. C/C++构建系统简介 - 知乎
  2. make, makefile, cmake, qmake 都是什么? 以及有何区别? - 知乎

CMake

(零)基础概念篇_第4张图片

CMake 是一个开源、跨平台的设计来用于构建、测试和打包软件的系列工具。它可以自动生成用于不同平台的编译器和构建工具所需的构建文件,如 Ninja、Makefiles、Visual Studio 项目文件、Xcode 工程文件等。CMake 使用 CMakeLists.txt (组态档)文件来描述构建过程和依赖关系,然后生成所需的构建文件。

参考链接

  1. CMake
  2. make, makefile, cmake, qmake 都是什么? 以及有何区别? - 知乎
  3. CMake应用:CMakeLists.txt完全指南 - 知乎
  4. Writing CMakeLists Files —— Mastering CMake

qmake

qmake 是一种用于 Qt 应用程序的构建系统和自动化工具,它与 CMake 类似,用于生成适用于不同平台和编译器的 Makefile 文件。你可以在任何软件项目中使用 qmake,不管它是不是用 Qt 编写的。

qmake 是 Qt 的一个组成部分,可以方便地与 Qt 应用程序一起使用。它使用 .pro 文件描述项目结构、依赖关系和构建过程,然后生成适合当前平台和编译器的 Makefile 文件,以便进行编译、链接等操作。.pro 文件支持多种配置选项,例如指定源文件、头文件、库文件、预处理器宏等等。

  • qmake包含支持Qt开发的附加功能,自动包括 moc 和 uic 的构建规则。

  • qmake还可以为Microsoft Visual studio生成项目,而不需要开发人员更改项目文件。

  • 值得一提的是,虽然 qmake 简单易上手,但在最新的 Qt 6 中,qmake 已经不再是官方推荐的构建系统了(但仍然支持)。Qt 6 的构建系统已经移植到了 CMake,CMake 成为 Qt 6 的首选构建工具。

参考文献

  1. qmake Manual
  2. Qt 6 Build System
  3. Build System Changes in Qt 6 | Qt 6.5
  4. Qt and CMake: The Past, the Present and the Future
  5. 如何评价Qt6弃用qmake,全面转向CMake? - 知乎

uic、moc、rcc

当我们使用 Qt 框架开发 GUI 应用程序时,通常需要使用 Qt 的一些辅助工具,其中包括 uicmocrcc

  • uic(User Interface Compiler):Qt 的 UI 文件是使用 XML 格式编写的,uic 是将这些 UI 文件编译成 C++ 代码的工具。编译后的 C++ 代码可以被 Qt 程序直接使用,用于创建 GUI 界面。
  • moc(Meta Object Compiler):Qt 提供了信号与槽机制来实现对象之间的通信,moc 负责将使用了这种机制的 C++ 代码扩展成原生 C++ 代码。这个工具可以实现 C++ 的一些扩展功能,例如信号与槽、动态属性和元对象等。
  • rcc(Resource Compiler):rcc 用于将 Qt 应用程序所需的资源文件(例如图像、音频和翻译文件)编译成 C++ 代码。这样,这些资源文件就可以被静态地嵌入到 Qt 程序中,使得程序的分发和部署变得更加简单。

当我们创建的 Qt 项目使用的构建系统是 CMake 时,CMakeLists.txt 内通常会包含如下几句代码以使用这些工具:

   set(CMAKE_AUTOUIC ON)
   set(CMAKE_AUTOMOC ON)
   set(CMAKE_AUTORCC ON)

参考链接

  1. User Interface Compiler (uic) | Qt 6.5
  2. Using the Meta-Object Compiler (moc) | Qt 6.5
  3. Resource Compiler (rcc) | Qt 6.5

ROS

(零)基础概念篇_第5张图片

ROS 是一个开源的机器人元操作系统,提供了一般操作系统所能提供的基本服务,包括硬件抽象、低级设备控制、常用功能实现、进程之间的消息传递以及包管理。此外,它还提供了用于获取、构建、编写和跨多台计算机运行代码的工具和库。ROS 在某些方面类似于“机器人框架”,比如 Player、Orocos、CARMEN、Orca、MOOS 等。

⚠️ 需要注意的是:ROS 是机器人元操作系统,并不是计算机操作系统。ROS 并不能像 Windows 或 Linux 那样直接安装运行于计算机硬件之上。ROS 作为机器人元操作系统需要在其支持的计算机操作系统上安装

ROS入门书籍推荐

笔者入门参考书籍是由 胡春旭 编著,由 机械工业出版社 出版的 《ROS机器人开发实践》

(零)基础概念篇_第6张图片

参考链接

  1. ROS系列书籍–机械工业出版社
  2. ROS - 商品搜索 - 京东

ROS1

ROS1 是 ROS 的最初版本,它于2007年首次发布,主要面向教育和研究领域也是《Qt+librviz开发》专栏系列文章选择的 ROS 版本。ROS1 采用了一些传统的软件架构和通信方式,例如基于 TCP/IP 的 ROS Master 和 ROS 节点之间的通信方式。ROS1 的系统架构如下图所示:

(零)基础概念篇_第7张图片

ROS1 发行版本列表(截止到撰稿日期):

发行版本 发布日期 海报 海龟 停止支持日期
ROS Noetic Ninjemys(推荐) 2020年5月23日 (零)基础概念篇_第8张图片 在这里插入图片描述 2025年5月
ROS Melodic Morenia 2018年5月23日 (零)基础概念篇_第9张图片 在这里插入图片描述 2023年5月
ROS Lunar Loggerhead 2017年5月23日 (零)基础概念篇_第10张图片 在这里插入图片描述 2019年5月
ROS Kinetic Kame 2016年5月23日 在这里插入图片描述 2021年4月
ROS Jade Turtle 2015年5月23日 (零)基础概念篇_第11张图片 在这里插入图片描述 2017年5月
ROS Indigo Igloo 2014年7月22日 (零)基础概念篇_第12张图片 (零)基础概念篇_第13张图片 2019年4月
ROS Hydro Medusa 2013年9月4日 (零)基础概念篇_第14张图片 (零)基础概念篇_第15张图片 2015年5月
ROS Groovy Galapagos 2012年12月31日 (零)基础概念篇_第16张图片 在这里插入图片描述 2014年7月
ROS Fuerte Turtle 2012年4月23日 (零)基础概念篇_第17张图片 在这里插入图片描述
ROS Electric Emys 2011年8月30日 在这里插入图片描述
ROS Diamondback 2011年3月2日 在这里插入图片描述
ROS C Turtle 2010年8月2日 (零)基础概念篇_第18张图片 在这里插入图片描述
ROS Box Turtle 2010年3月2日 (零)基础概念篇_第19张图片 在这里插入图片描述

ROS Noetic 是 ROS1 的最后一个发行版本,主要目标是为那些需要继续使用 ROS1 的开发人员/组织提供 Python3 支持。ROS Noetic 之后就没有更多的 ROS1 了。

ROS2

ROS2 是 ROS 的新版本,于2015年开始开发,2017年12月8日发布第一个 ROS2 的正式版 —— Ardent Apalone,ROS2 主要面向实际的机器人应用和工业领域。ROS2 在设计上更加注重可靠性、安全性和可扩展性,采用了一些新的软件架构和通信方式,例如 DDS(Data Distribution Service,数据分发服务)通信协议和 ROS2 节点之间的直接通信方式。ROS2 的系统架构如下图所示:

(零)基础概念篇_第20张图片

参考链接

  1. 分布式实时通信 —— DDS技术 - 知乎

ROS2 发行版本列表(截止到撰稿日期):

发行版本 发布日期 海报 停止支持日期
Jazzy Jalisco 2024年5月 待定 2029年5月
Iron Irwini 2023年5月23日 (零)基础概念篇_第21张图片 2024年11月
Humble Hawksbill(推荐) 2022年5月23日 (零)基础概念篇_第22张图片 2027年5月
Galactic Geochelone 2021年5月23日 (零)基础概念篇_第23张图片 2022年12月9日
Rolling Ridley 2020年6月 (零)基础概念篇_第24张图片
Foxy Fitzroy 2020年6月5日 (零)基础概念篇_第25张图片 2023年5月
Eloquent Elusor 2019年11月22日 (零)基础概念篇_第26张图片 2020年11月
Dashing Diademata 2019年5月31日 (零)基础概念篇_第27张图片 2021年5月
Crystal Clemmys 2018年12月14日 (零)基础概念篇_第28张图片 2019年12月
Bouncy Bolson 2018年7月2日 (零)基础概念篇_第29张图片 2019年7月
Ardent Apalone 2017年12月8日 2018年12月

Rolling Ridley 是 ROS2 的一个持续开发版本,该版本最初是作为 Foxy 版本的 Rolling 镜像发布。其会不断更新,当然有时也会包括破坏性的更改。它主要用于希望其软件包发布并准备好用于下一个稳定版本的 ROS2 的开发和维护人员。通常建议 ROS2 用户使用最新的稳定版本即可。

Why Turtle

从上面 ROS1 和 ROS2 的发布版本列表我们很容易就发现,ROS 一直使用乌龟作为其吉祥物,这不禁令人感到好奇。其实这是因为 ROS 的创始人和早期员工都是软件工程师,他们大多很小的时候就开始学习编程。那时他们用的是 LOGO 语言,一种面向儿童的计算机编程语言。在 LOGO 的图形系统的虚拟世界里有一只小乌龟,编程学习者可以通过输入指令,让海龟在画面上走动。因此,那个动来动去的小海龟在所有编程学习者里,最深入人心。ROS 里面有一个 turtlesim 系统,就是受 LOGO 的海龟绘图系统启发,帮助人们学习 ROS 而设计的。

World Turtle Day , May 23rd

每年的5月23日是世界乌龟日,该纪念日始于2000年,由美国海龟救援组织赞助。这一天的目的是帮助人们庆祝和保护海龟和陆龟以及它们正在消失的栖息地,并鼓励人类采取行动帮助它们生存和繁荣。ROS1 和 ROS2 有许多个发行版本都是在这一天发布的(包括 ROS2 最新的 Iron Irwini)。

LTS in ROS

ROS(包括 ROS1 和 ROS2) 的发行版本也有 LTS 版本,支持周期通常为5年。比如 ROS1 的 Noetic、Melodic、Kinetic、Indigo;ROS2 的 Foxy、Humble 发行版本。


Linux

Linux 全称 GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统。其内核(Kernel)由芬兰人林纳斯﹒本纳第克特﹒托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布。是一个基于 POSIX 的多用户、多任务、支持多线程和多CPU的操作系统。支持32位和64位硬件,能运行主要的 Unix 工具软件、应用程序和网络协议。

Linux 本身指的是操作系统内核。不过,现在人们已经习惯了用Linux 来形容整个基于 Linux 内核,并且使用 GNU 工程各种工具和应用程序的操作系统(也被称为GNU/Linux),而基于这些组件的 Linux 软件被称为 Linux 发行版。

参考链接

  1. Linux 简介 | 菜鸟教程
  2. Linux_维基百科

Shell

Shell 中文可以称之为“壳”或者“壳层”,与“内核”(Kernel)相对应;是指“为用户提供操作界面”的软件。

参考链接

  1. shell_百度百科
  2. Shell_维基百科
  3. Shell 教程 | 菜鸟教程

Linux 命令

Linux 命令是一种文本界面下的指令,是设计来使用 Shell 与内核交互的。用户可以通过 Linux 终端(当我们使用 ctrl+alt+T 打开一个 Linux 终端时,系统会自动启动一个 Shell 程序) 在命令行中输入命令,它们通常由一个命令名称和一些选项和参数组成,Shell 会将这些命令解释并传递给内核执行。

Linux 命令中的特殊符号

  • ~:在 Linux 命令中,符号 ~ 代表主目录,即当前登录用户的用户目录。例如,cd ~ 命令将跳转到您的主目录;
  • #:注释符号,在命令之前或之后出现,后面跟随注释文字,不会被执行;
  • ;:在 shell 中,分号是担任“连续指令”功能的符号,可以在一行中依次执行多个命令;
  • .:在 shell 中,一个句点符号表示当前目录;
  • ..:在 shell 中,两个句点符号表示当前目录的上一层目录;
  • 'string':被单引号括住的内容,将被视为单一字符串;
  • || 管道符号表示连接上一个指令的标准输出,作为下个指令的标准输入;
  • !:感叹号通常代表反逻辑;
  • $:一个常用用法是变量替换的代表符号,如果想引用一个变量,$ 符号应作为前导符添加到变量名之前(更多用法还请自行搜索);
  • &:后台运行符,用于使命令在后台运行而不占用终端;

参考链接

  1. Linux 命令大全 | 菜鸟教程

Linux 命令行补全

在 Linux 中,当我们输入字符后,按下 tab 键,如果仅有唯一匹配,则 Shell 会自动补全以这些字符开头的 命令 / 文件名称 / 目录名称,如果不是唯一匹配,那么再按一次 tab 键,Shell 会列出所有可用匹配。这个功能被称作“Linux 命令行补全”。

Linux 发行版

Linux 的发行版有很多,比较知名的有 Ubuntu、CentOS、Debian、Fedora、RedHat、OpenSUSE、Arch Linux等;《Qt+librviz开发》专栏系列文章选择的 Linux 发行版本为 Ubuntu

参考链接

  1. Download Linux | Linux.org
  2. 什么是 Linux 发行版?为什么它被称为“发行版”? - 知乎

软件包管理系统

大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。软件包管理系统是在计算机中管理软件包的工具组合。

参考链接

  1. 软件包管理系统_维基百科
  2. Linux 包管理基础:apt、yum、dnf 和 pkg - 知乎

Ubuntu

(零)基础概念篇_第30张图片

Ubuntu 中文可以称之为“乌班图”,一个基于 Debian 发行版和 GNOME3 桌面环境的 Linux 操作系统。Ubuntu 是开放源代码的自由软件,这使得用户可以登录 Ubuntu 官网免费下载该软件的安装包。

参考链接

  1. Ubuntu_百度百科
  2. Ubuntu_维基百科

LTS in Ubuntu

Ubuntu 的发行版本也有 LTS 版本,自2006年以来,Ubuntu 每六个月发布一个非 LTS 版本,每两年发布一个 LTS 版本,直到现在。Ubuntu 的 LTS 版本一般是偶数年的4月份发布,比如 16.0418.0420.0422.04,也是稳定的 Ubuntu 版本。Ubuntu LTS 的生命周期是5年,Ubuntu 背后的公司 Canonical 提供安全更新和补丁。5年结束后,官方还提供3年或者5年的扩展支持维护(ESM),不过这个服务是付费的,如果你是 Ubuntu 的 Member 则可以免费获得。

我们可以在 Ubuntu 官方维基网站上查看所有的 Ubuntu 发行版本列表。

gedit

gedit 是为 GNOME 桌面环境设计的一款文本编辑器,gedit 是 GNOME 的默认文本编辑器,也是 GNOME 核心应用程序的一部分,直到2022年3月 GNOME 版本42才将默认的文本编辑器更改为 GNOME Text Editor。

APT

APT(Advanced Packaging Tools)是 Debian 及其派生的 Linux 软件包管理器,可以自动下载、配置、安装二进制或者源代码格式的软件包。在 Debian 系统中,APT 构建与 dpkg 之上,用来处理 deb 格式的软件包。

参考链接

  1. apt_百度百科
  2. APT_维基百科

ROS 1 Platform Support

ROS1 平台支持官方支持的平台是 Ubuntu 平台。我们可以按照 ROS 官方推荐选择 ROS1 和对应的 Ubuntu 发行版本。

参考链接

  1. Installation | ROS 1
  2. Getting Started | ROS 2

ROS 2 Platform Support

ROS2 平台支持我们可以前往 ROS2 各发行版本官方文档的 “Installation” 页查看,如下图是 ROS 2 Humble 的 “Installation” 页:
(零)基础概念篇_第31张图片


⚠️ 注意

因为《Qt+librviz开发》专栏系列文章选择的 ROS 版本为 ROS1,从这里开始下面的内容开始介绍 ROS1 中的一些专业名词概念,需要注意的是其中有些概念在 ROS2 中已经不再适用!有关 ROS2 和 ROS1 的区别与对比以及到底该选择哪个 ROS 版本进行开发,还请读者自行搜索~

参考链接

  1. Changes between ROS 1 and ROS 2
  2. 翻译官小鱼带你看:史上最详细ROS2与ROS1对比,没有之一 - 知乎
  3. ROS1和ROS2如何选?(机器人操作系统2021)

ROS Master

ROS 主站为 ROS 系统中的其余节点提供命名和注册服务。它跟踪发布者和订阅者的话题以及服务。主节点的作用是使各个ROS节点能够相互定位。一旦这些节点找到彼此,它们就会相互对等通信。

  • 主站还提供参数服务器。

  • 主站最常使用 roscore 命令运行,该命令加载 ROS 主站以及其他基本组件。

  • ROS2 中摒弃了 ROS Master 和参数服务器,ROS2 在运行节点之前也不需要先使用 roscore 命令运行主站了。ROS2 节点之间使用一种名为 “Discovery” 的发现机制来帮助彼此建立连接。

参考链接

  1. ROS 基本概念
  2. ROS Master

ROS Node

ROS 节点是一个执行计算的进程。节点被组合成一个图,并使用流话题、RPC 服务和参数服务器相互通信。这些节点旨在以细粒度(fine-grained)的规模运行;一个机器人控制系统通常由许多节点组成。例如,一个节点控制激光测距仪,一个节点控制机器人的轮子电机,一个节点执行定位,一个节点执行路径规划,一个节点提供系统的图形视图,等等。

Node Tools

rosnode 是一个用于显示节点相关信息的命令行工具,比如罗列当前正在运行的 ROS 节点(rosnode list)。有关如何使用此工具的文档,请参阅 rosnode。

参考链接

  1. ROS Nodes
  2. ROS 节点

ROS Topic

ROS 话题被命名为总线,节点通过其交换消息。话题具有匿名发布/订阅语义,这将消息的产生和消费解耦。通常,节点不知道它们正在与谁通信。相反,对数据感兴趣的节点订阅相关话题;生成数据的节点发布到相关话题。一个话题可以有多个发布者和订阅者。

话题用于单向、流式的通信。需要执行远程过程调用(例如接收请求响应)的节点应该使用服务。此外还有用于维护少量状态的参数服务器。

Topic Tools

rostopic 是一个用于与 ROS 话题交互的命令行工具。例如:

  1. rostopic list :罗列当前所有话题。
  2. rostopic echo /topic_name :显示发布到“/topic_name”话题内的消息。有关更多文档,请参阅 rostopic 页面。

参考链接

  1. ROS Topics

ROS Service

发布/订阅模型是一种非常灵活的通信范式,但其多对多单向传输并不适用于 RPC 请求/回复交互,而此类交互在分布式系统中通常又是必需的。ROS 中的请求/回复是通过ROS 服务完成的,该服务由一对消息定义:一条用于请求,一条用于回复。提供服务的 ROS 节点以字符串名称提供服务,然后客户端通过发送请求消息并等待回复来调用服务。客户端库通常将这种交互呈现给程序员,就好像它是一个远程过程调用。

服务是使用 srv 文件定义的,这些文件由 ROS 客户端库编译成源代码。

客户端可以与服务建立持久连接,从而以降低对服务提供者更改的健壮性为代价实现更高的性能(说大白话就是“建立持久连接可以实现更高的性能,但连接期间如果服务提供者出现了变动,则可能会导致客户端出现问题”)。

Service Tools

rossrv :显示.srv数据结构的相关信息。有关如何使用此工具的文档,请参阅 rossrv。

rosservice :罗列和查询 ROS 服务。

参考链接

  1. ROS Services

ROS Message

ROS 节点之间的通信是通过发布ROS 消息到话题实现的。消息是一个简单的数据结构,由类型化字段组成。支持标准基元类型(整数、浮点数、布尔值等),以及基元类型的数组。消息可以包含任意嵌套的结构和数组(非常类似于 C 结构)。

节点还可以在 ROS 服务调用过程中交换请求和响应消息。这些请求和响应消息在 srv 文件中定义。

Msg Tools

rosmsg 是一个用于显示消息相关信息的命令行工具,比如显示.msg数据结构。有关如何使用此工具的文档,请参阅 rosmsg。

参考链接

  1. ROS Messages

ROS Bag

ROS 袋子是 ROS 中用于存储 ROS 消息数据的一种文件格式。袋子 — 因其.bag扩展名而得名 — 在 ROS 中起着重要作用。并且 ROS 已经编写好了各种工具来允许用户存储,处理,分析和可视化它们。

Bag Tools

  1. rosbag :用于录制、播放和其他操作的统一控制台工具。
  2. rqt_bag :用于可视化 bag 文件数据的图形工具。
  3. rostopic :echolist 命令与 bag 文件兼容。
  4. Foxglove Studio :用于播放、分析和可视化 bag 文件的浏览器和桌面工具。
  5. Webviz :一个基于浏览器的工具,用于查看数据和 ROS bag 文件。

参考链接

  1. ROS Bags

ROS Parameter Server

ROS 参数服务器是一个共享的多变量字典,可通过网络API访问。节点在运行时可使用该服务器存储以及检索参数。由于 ROS 参数服务器不是为高性能而设计的,因此最适合用于静态、非二进制数据(例如配置参数)。它旨在全局可见,以便工具可以轻松检查系统的配置状态,并在必要时进行修改。

参数服务器是使用 XMLRPC 实现的,并在 ROS Master 内部运行,这意味着它的 API 可以通过普通的 XMLRPC 库访问。

Parameter Tools

rosparam 命令行工具允许您使用 YAML 语法在参数服务器上查询和设置参数。

参考链接

  1. ROS Parameter Server

ROS 工作空间

ROS 工作空间简单来说相当于工程或者项目,编写ROS程序之前,首先需要创建ROS工作空间。它是管理和组织ROS工程项目文件的地方。

它的下层主要有四个一级目录:

文件夹名称 描述
src 源空间
build 编译空间
devel 开发空间
install 安装空间

其中,最顶层的工作空间文件夹(可以任意命名)和 src 文件夹(必须命名为"src")是需要自己创建的;builddevel 文件夹由 catkin_make 命令自动创建;install 文件夹由 catkin_make install 命令自动创建。

参考链接

  1. ROS工作空间 - 知乎
  2. ROS的目录文件结构 - 知乎

Catkin

Catkin 是从 ROS Groovy 开始推荐使用的用于构建软件包的构建系统(build system)。Catkin 是基于 CMake 的编译构建系统,对 CMake 进行了扩展,对 ROS 这样的大体量的工程有更好的支持,同时也简化了操作。

ROS2 的软件包构建工具为 colcon。它支持多种构建系统,能够在所有主要平台(Linux、macOS、Windows)上构建任何类型的软件包(catkin、ament、CMake、Python setuptools、gradle、bazel、cargo等)。

参考链接

  1. ROS2编译器colcon是个啥,比catkin好用吗? - 知乎
  2. A universal build tool

参考链接

  1. catkin/conceptual_overview - ROS wiki
  2. ROS入门笔记(七):详解ROS文件系统 - 知乎
  3. make, makefile, cmake, qmake 都是什么? 以及有何区别? - 知乎

RViz

(零)基础概念篇_第32张图片

RViz 是 ROS 的一个3D可视化工具。在 RViz 中,可以使用 XML 对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来,帮助开发者实现所有可检测信息的图形化显示。

RViz 本身是使用 C++ 语言编写的,使用 OGRE(开源3D图形引擎) 和 OpenGL(2D和3D图形API) 生成和渲染2D和3D图形,使用 Qt 库作为其 GUI 框架。所以如果我们想在自己的 GUI 应用程序中嵌入 RViz,使用 Qt 框架是很不错的选择。

RViz已经集成在桌面完整版的 ROS 系统当中。根据之前了解的情况,我们其实很容易就能想到 RViz 在 ROS 中也是作为一个 ROS 节点运行的。我们可以通过 rosrun rviz rvizrviz 命令运行 RViz 节点。

librviz

RViz的开源库,允许用户在自己的程序中使用RViz的显示及其他功能。这意味着我们可以在自己的图形用户界面(GUI)中嵌入RViz可视化窗口。

参考链接

  1. rviz
  2. librviz tutorial

你可能感兴趣的:(Qt+librviz开发,qt,c++,linux,ubuntu)