Qt6 ROS Template 是一个基于 Qt6 构建的 ROS Noetic 人机交互界面模板。本项目旨在为开发者提供一个快速入门的框架,方便用户在此基础上进行 ROS 人机交互界面的开发。它融合了 Qt6 的现代化 UI 设计能力和 ROS 的强大机器人开发生态,为机器人应用的图形界面开发提供了一个理想的起点。
本项目的开发灵感来自于 Qt5 版本的 ros_qt_demo 项目。然而,与 Qt5 版本相比,本项目进行了重大改进:
-
双重编译支持:本模板不仅支持在 ROS 环境下使用
catkin_make
进行编译,还可以直接在 Qt Creator 中打开和编译,无需复杂的配置步骤。 -
简化开发流程:相比 Qt5 版本需要各种配置才能在 Qt Creator 中进行开发,本项目实现了"开箱即用"的体验,大大简化了开发流程。
-
增强的灵活性:开发者可以根据自己的偏好选择使用 ROS 工具链或 Qt Creator 进行开发,提供了更大的灵活性。
- 集成 Qt6 和 ROS Noetic,提供现代化的 UI 设计和强大的机器人开发能力
- 双重编译支持:兼容 ROS 的
catkin_make
和 Qt Creator 的构建系统- 可以在只有 ROS 的环境下使用
catkin_make
进行编译 - 可以在只有 Qt6 的环境下使用 Qt Creator 编译并打开项目
- 可以在 ROS 和 Qt6 环境下同时使用
catkin_make
或 Qt Creator 对项目进行编译
- 可以在只有 ROS 的环境下使用
- 无需复杂配置,可直接在 Qt Creator 中打开项目进行开发
- 预配置的 CMakeLists.txt,简化了 Qt 和 ROS 的集成过程
- 包含基本的 ROS 节点和 Qt 主窗口实现,可作为开发起点
- 提供了 ROS launch 文件,方便启动和管理节点
- 支持在 ROS 和非 ROS 环境下编译运行,增强了项目的灵活性
- 相比 Qt5 版本,大大简化了开发流程,提高了开发效率
- 操作系统:Ubuntu 20.04 LTS
- ROS 版本:Noetic
- Qt 版本:6.x
- CMake 版本:3.16 或更高
有两种方法可以安装 ROS Noetic:
-
根据官方指南进行安装
-
使用 Auto ROS Installer(推荐):
git clone https://github.com/XKHoshizora/auto-ros-installer.git cd auto-ros-installer
详细安装方法请查看项目主页的说明。
推荐使用 Qt 官方安装器安装 Qt6:
-
下载 Qt Installer: 访问 Qt 官方下载页面,下载适用于 Linux 的在线安装程序。
-
授予执行权限:
chmod +x qt-online-installer-linux-<x64/arm64>-<version>.run
-
运行安装程序:
./qt-online-installer-linux-<x64/arm64>-<version>.run
-
配置 Qt Creator 快捷方式: 使用以下命令创建并打开
qtcreator
文件sudo nano /usr/bin/qtcreator
向
qtcreator
文件中添加以下内容:#!/bin/sh export QT_HOME=/home/<user>/Qt/Tools/QtCreator/bin $QT_HOME/qtcreator $*
-
为
qtcreator
文件添加可执行权限:sudo chmod a+x /usr/bin/
-
启动 Qt Creator:
qtcreator
-
安装其他依赖
如果在运行 Qt Creator 时遇到问题,请安装以下依赖:
sudo apt install libxcb-xinerama0 libxcb-xinerama0-dev libxcb-cursor0
mkdir -p ~/qt6_ws/src
cd ~/qt6_ws/src
git clone https://github.com/XKHoshizora/qt6_ros_template.git
在你的工作空间内执行以下命令即可编译该功能包:
cd ~/qt6_ws
catkin_make
- 打开 Qt Creator
- 选择 "File" > "Open File or Project"
- 导航到
~/qt6_ws/src/qt6_ros_template
目录中,选择CMakeLists.txt
文件并打开 - 配置并打开项目,左侧可以正常显示项目文件,即说明编译成功。若编译失败,则只会显示一个
CMakeLists.txt
文件。
-
在你的工作空间内执行以下命令即可编译该功能包:
cd ~/qt6_ws catkin_make
-
需要在 Qt Creator 中打开项目进行开发时,首先要通过第一步的编译。接着按照以下步骤进行操作:
- 打开 Qt Creator
- 选择 "File" > "Open File or Project"
- 导航到
~/qt6_ws/src
并选择CMakeLists.txt
文件(注意,是选择工作空间下的CMakeLists.txt
文件,而不是功能包内的文件) - 进入到配置页面后,点击
Import Build From...
选项右侧的Details
按钮。点击Browse...
按钮找到qt_ws/build
目录并点击右上角的Open
按钮打开。点击Import
按钮完成导入。 - 勾选
Imported Kit
和Build
选项,并去掉除此之外的所有选项。 - 点击右下角的
Configure Project
按钮完成配置并开始编项目。 - 左侧可以正常显示项目文件,即说明编译成功。若编译失败,则只会显示一个
CMakeLists.txt
文件。
首先确保已经根据上面的步骤完成了编译。然后在工作空间下执行以下命令:
source ~/qt6_ws/devel/setup.bash
roslaunch qt6_ros_template demo.launch
# 如果您想指定不同的 ROS_HOSTNAME 或 ROS_IP,可以这样使用:
roslaunch qt6_ros_template demo.launch ros_hostname:=your_hostname ros_ip:=your_ip
通过 Qt Creator 编译并打开项目后,点击左侧绿色的 Run
按钮,或使用 Ctrl + R
快捷键运行。
首先确保已经根据上面的步骤完成了编译。然后在工作空间下执行以下命令:
source ~/qt6_ws/devel/setup.bash
roslaunch qt6_ros_template demo.launch
# 如果您想指定不同的 ROS_HOSTNAME 或 ROS_IP,可以这样使用:
roslaunch qt6_ros_template demo.launch ros_hostname:=your_hostname ros_ip:=your_ip
或通过 Qt Creator 编译并打开项目后,点击左侧绿色的 Run
按钮,或使用 Ctrl + R
快捷键运行。
测试时推荐使用 rosrun
命令进行测试,此时需要提前在新的终端使用 roscore
命令运行 ros master
,然后在另一个新的终端输入以下命令来启动 ROS 节点:
rosrun qt6_ros_template qt6_ros_template_node
节点成功运行之后,按照以下步骤测试应用程序的各项功能:
-
连接到 ROS
- 点击应用程序中的"Connect"按钮。
- 验证"ROS Status"标签是否变为绿色并显示"Connected"。
-
更改话题
- 在"Change Topic"输入框中输入新的话题名称(例如"/test_topic")。
- 点击"Change Topic"按钮。
-
发布消息
- 在"Publish"输入框中输入一条消息。
- 点击"Publish"按钮。
- 在新终端中使用以下命令验证已发布的消息:
rostopic echo /test_topic
-
订阅消息
- 在新终端中,向已订阅的话题发布一条消息:
rostopic pub /test_topic std_msgs/String "data: '来自命令行的问候'" -1
- 验证消息是否出现在应用程序的日志视图中。
- 在新终端中,向已订阅的话题发布一条消息:
-
测试断开连接
- 点击"Disconnect"按钮。
- 验证"ROS 状态"标签是否变为红色并显示"Disconnected"。
- 尝试发布消息并验证是否失败。
-
测试 ROS Master 故障
- 使用应用程序连接到 ROS。
- 在运行 roscore 的终端中,使用 Ctrl+C 停止它。
- 观察应用程序的日志视图和控制台输出是否有断开连接的消息。
-
环境变量使用
- 勾选"Use environment variables"复选框。
- 验证主 URL 和 ROS IP 字段是否从环境变量中填充。
-
设置的保存和加载
- 在应用程序中更改一些设置。
- 关闭应用程序并重新打开。
- 验证设置是否正确恢复。
如果遇到任何问题:
- 确保在启动应用程序之前运行
roscore
。 - 检查您的 ROS 环境变量(
ROS_MASTER_URI
和ROS_IP
)是否正确设置。 - 如果在多台机器上运行 ROS,请验证网络连接。
- 检查控制台输出和应用程序日志中是否有任何错误消息。
本项目使用了标准的 CMake 构建系统,并遵循了 Qt 项目的目录结构。
qt6_ros_template/
├── CMakeLists.txt
├── package.xml
├── include/
│ ├── qt6_ros_template/
│ └── mainwindow.h
├── msg/
├── resources/
│ ├── images/
│ │ └── icon.png
│ └── resource.qrc
├── scripts/
├── src/
│ ├── main.cpp
│ ├── mainwindow.cpp
│ └── qt6_ros_template_node.cpp
├── srv/
├── ui/
│ └── mainwindow.ui
└── launch/
└── demo.launch
- 修改
src/mainwindow.cpp
和ui/mainwindow.ui
以自定义 UI。 - 在
src/qt6_ros_template_node.cpp
中添加 ROS 功能。 - 更新
CMakeLists.txt
以包含新的源文件或依赖项。
-
问题:编译时出现 "Qt6 not found" 错误。 解决方案:确保 Qt6 正确安装,并且 CMAKE_PREFIX_PATH 包含 Qt6 安装路径。
-
问题:ROS 相关的函数未定义。 解决方案:确保已 source devel/setup.bash,并且 package.xml 中包含所有必要的依赖。
-
问题:在 Qt Creator 中无法找到 ROS 头文件。 解决方案:在 Qt Creator 的项目设置中,添加 ROS 的 include 路径(通常在 /opt/ros/noetic/include)。
我们欢迎并感谢任何形式的贡献!如果您想为项目做出贡献,请遵循以下步骤:
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature
) - 提交您的更改 (
git commit -m 'Add some AmazingFeature'
) - 将您的更改推送到分支 (
git push origin feature/AmazingFeature
) - 创建一个新的 Pull Request
- 0.1.0
- 初始版本
- 基本的 Qt6 和 ROS Noetic 集成
- 实现了双重编译支持(ROS 环境和 Qt Creator)
本项目基于 MIT 许可证 - 查看 LICENSE 文件了解详情
项目维护者:XKHoshizora - [email protected]