⚠️ 在开始之前,您需要确保您已经为 Qt 配置好了 ROS 开发环境了。如果您还没有配置好,可以参考这篇文章
本文将着手探讨如何在 Qt Creator 上编辑 ROS 项目(工作空间)。
在(零)基础概念篇介绍 ROS 工作空间 时曾说过 “最顶层的工作空间文件夹(可以任意命名)和 src 文件夹(必须命名为"src")是需要自己创建的”。那么我们先创建如下的文件目录:
workspace #在用户目录(~)新建一个“workspace”专门用于存放ROS工作空间
└── catkin_ws1 #这是ROS工作空间文件夹,名字自拟
└── src #创建一个一级目录“src”文件夹
文件目录创建完成后,打开 Qt Creator,点击左上角 “文件”==>“New Project” 新建项目,在 “其他项目” 分区中找到 “ROS Workspace” 新建一个 ROS 工作空间:
在弹出的对话框中,我们需要为项目命名并选择工作空间的路径,随后点击下一步:
项 | 描述 |
---|---|
Name | Qt Creator 中 ROS 项目显示的名字,建议与我们创建的工作空间文件夹名称保持一致 |
Distribution | ROS 发行版路径 |
Build System | 构建系统。不出意外的话有三个可选项:①CatkinMake(就是 Catkin);②CatkinTools;③Colcon;任选一个即可,它们都可以用来构建和管理 ROS 软件包,笔者直接按默认使用 CatkinTools(当然最稳妥的还是选择第一个 —— CatkinMake) |
Workspace Path | 工作空间目录 |
下一步来到“汇总”页面,如果不打算添加到版本控制系统的话就可以直接点击 “完成” 了:
可以看到,创建 ROS 项目只会添加后缀为 .workspace 的 XML 文件,这个文件包含了 Qt Creator 中用于管理 ROS 工作空间的配置信息和设置,可以用于在 Qt Creator 中方便地打开和编辑 ROS 工作空间。
XML 文件不一定要用 .xml 作为文件后缀,文件后缀名只是一种帮助用户和计算机识别文件类型的方式,它并不影响文件的内容或格式。因此,XML文件可以使用任何后缀名,只要它遵循XML语法规则即可。同理,同为轻量级标记语言的 JSON、YAML、TOML 也是如此
可以看到 .workspace 文件内容其实很简单:一是指定了 ROS 发行版的文件路径;二是指定了默认的构建系统为我们刚才选择的 CatkinTools。
刚才我们选择构建系统是用一个下拉框选择的,而下拉框中的每一项都是有索引的,从0开始。我们选择的 CatkinTools 是第二项(索引为1)。
完成 ROS 项目创建后,如果我们此时关闭该项目,则可以看到除了 .workspace 文件,Qt Creator 还会自动创建一个与 .workspace 文件同名的后缀为 .workspace.user 的 XML 文件,用于存储与 ROS 工作空间相关的用户特定设置和配置。
.workspace.user 文件只包含用户的设置,而不包含 Qt Creator 用于管理 ROS 工作空间的配置信息。因此,如果我们想分享 ROS 项目,只需要分享 .workspace 文件,而不需要分享 .workspace.user 文件。
如果您还没有现成的 ROS 包,您可以前往笔者的 Github 仓库下载。
(下载下来的压缩包解压后记得把文件夹名称中的“-master”删除)
由于我们创建 ROS 工程时选择的构建系统是 CatkinTools,Ubuntu 20.04 没有自带这个工具,我们需要先下载安装它:
首先同步源:
sudo apt-get update
然后安装 catkin_tools 包:
sudo apt-get install python3-catkin-tools
此外由于我们现有的 ROS 包用到了 ROS 的地图服务(map_server)包,但 ROS Noetic 并没有自带这个包,我们需要先安装这个包:
首先同步源:
sudo apt-get update
然后安装 map_server 包:
sudo apt-get install ros-noetic-map-server
安装完 map_server,还是接着新建 ROS 工程的内容。ROS 工程创建完成后,我们前往 ROS 工程的 src 文件夹下粘贴我们现有的 ROS 包:
随后回到 Qt Creator,关闭并重新打开项目,Qt Creator 会花一点时间自动构建该软件包,耐心等待即可,完成后如下图所示:
接着前往 “项目”>“构建和运行”>“运行”==>“执行档” 指定软件的可执行文件所在路径:
可执行文件一般在 “devel”(开发空间)>“lib”>(与我们导入的 ROS 包同名的那个文件夹)下。
以本文提供的 ROS 包为例,可执行文件的绝对路径为:
/home/xjy/workspace/catkin_ws1/devel/lib/qviz_demo/qviz_demo
在(零)基础概念篇介绍 ROS Master 时曾介绍过“ROS Master 为 ROS 系统中的其余节点提供命名和注册服务”(在 ROS 中,一个应用程序进程表现为一个 ROS Node)。所以在运行我们的 ROS 软件之前,我们需要先启动 ROS Master:
在 Ubuntu 桌面使用 ctrl+alt+T
快捷键打开一个终端,然后使用 roscore
命令启动 ROS Master,如下图所示:
完成后,就可以愉快地运行我们的 ROS 软件啦~
(由于我们是在本机上运行的 roscore
,所以这里我们 ROS Master 的地址即回环地址)
如果我们没有现有的 ROS 软件包,那么这个时候可能就需要我们自己新建软件包了。使用 ros_qtc_plugin 插件新建 ROS 包只会添加两个文件:CMakeLists.txt 和 package.xml,这也是任何 ROS 功能包都必须包含的两个文件。其中 CMakeLists.txt 文件用于描述构建过程和依赖关系等内容;package.xml 用于描述软件包的名称、版本号、描述信息、邮件地址、作者、许可证以及其他 catkin 包依赖关系等内容。
由于笔者水平及时间有限,就并没有研究如何从新建一个 ROS 软件包到添加各种源码并成功运行的全过程;这里仅演示如何新建 ROS 包,更多内容还请感兴趣的读者自行摸索了。
由于我们创建 ROS 工程时选择的构建系统是 CatkinTools,Ubuntu 20.04 没有自带这个工具,我们需要先下载安装它:
首先同步源:
sudo apt-get update
然后安装 catkin_tools 包:
sudo apt-get install python3-catkin-tools
ROS 工程创建完成后,我们右击项目名称,点击 “添加新文件”:
(或者左上角 “文件(F)”==>“New File”)
选择 ROS 分类下的 Package 添加即可:
在 “Package Details” 页面,除了包名称(Name)是必填项,其他所有项都是默认填写有内容或者可忽略不填(后续有需求随时可在 CMakeLists.txt 或 package.xml 内手动添加相应内容):
- Name:软件包名称,ROS 约定软件包名称应是小写字母 + 下划线(_)分割单词的格式。ROS 软件包名称是其在 ROS 系统中的唯一标识符,因此请确保使用唯一的名称。
- Path:软件包的路径,指定软件包的存储位置。通常,ROS 软件包被存储在ROS 工作空间的 src 目录下。
- Version:软件包的版本号,用于标识软件包的不同版本。ROS 软件包版本号通常采用 Semantic Versioning 规范,即 major.minor.patch(主版本号.次版本号.修订号)格式。
- License:软件包的许可证类型,用于说明软件包的使用和分发条款。如果对许可证不太了解,可以参考:什么是License?许可证?协议?都有哪些License? - 知乎。
- Dependencies/Catkin:ROS 软件包依赖的其他 ROS 软件包的名称,通常在这一栏我们需要填写对
roscpp
的依赖以使用 ROS 的 C++ 接口。如果想要添加多个依赖,可以使用英文逗号(,)或者空格隔开。- Dependencies/System:ROS 软件包依赖的系统库的名称,通常这一栏可以不填。
- Dependencies/Boost:ROS 软件包依赖的 Boost 库的名称(Boost 是一个开源的、免费的 C++ 库集合,包含了大量的高质量、可重用的代码库。Boost 库覆盖了广泛的 C++ 编程领域,包括容器、日期时间、算法、数值计算、多线程、文件系统、正则表达式等方面),通常这一栏可以不填。
- Description:ROS 软件包的简要描述,通常包括软件包的用途、功能、特性等。这些信息将在软件包的 package.xml 文件中被包含,并在使用
rospack
命令或者其他 ROS 工具时显示出来。
填写完成后,点击 “下一步(N)”==>“完成(F)” 即可成功向 ROS 工程添加一个新建的 ROS 软件包。完成后如下图所示: