在 Ubuntu 22.04 + ROS2 Humble 环境下设计图形化交互界面,有多种选择,从快速搭建原型到深度定制应用。以下是几种主流方法及其具体安装和使用步骤。
1. rqt -- ROS2 官方图形化工具框架
rqt 是基于 Qt 的插件化 GUI 框架,允许您通过拖拽插件快速构建界面,也支持开发自定义插件。
安装
bash
sudo apt update
sudo apt install ros-humble-rqt* # 安装所有常用 rqt 插件
使用
-
启动 rqt :
bashsource /opt/ros/humble/setup.bash rqt -
加载插件 :通过菜单栏
Plugins选择所需插件(如话题监视、参数动态配置等)。 -
开发自定义插件 :
-
创建 ROS2 包(Python):
bashros2 pkg create my_rqt_plugin --build-type ament_python --dependencies rqt_gui rqt_gui_py -
编写插件类(继承
rqt_gui_py.Plugin)并实现setup方法。 -
在
setup.py中添加entry_points,例如:pythonentry_points={ 'console_scripts': [ 'my_rqt_plugin = my_rqt_plugin.my_module:main', ], } -
编译并运行:
bashcolcon build --packages-select my_rqt_plugin source install/setup.bash rqt --force-discover # 重新扫描插件之后在 Plugins 菜单中即可找到您的插件。
-
2. RViz2 -- 3D 可视化工具
RViz2 是 ROS2 的 3D 可视化工具,主要用于显示机器人模型、传感器数据、地图等。您可以通过配置文件定制界面,也可以开发自己的显示插件。
安装
bash
sudo apt install ros-humble-rviz2
使用
-
启动 RViz2 :
bashsource /opt/ros/humble/setup.bash rviz2 -
加载显示项 :点击左下角
Add按钮,选择要显示的数据类型(如 RobotModel、LaserScan 等)。 -
保存配置 :通过
File -> Save Config As保存.rviz文件,下次可直接加载。 -
开发自定义显示插件 :需要 C++ 开发,参考 ROS2 RViz 插件教程。
3. Foxglove Studio -- 现代跨平台可视化工具
Foxglove Studio 是一款功能强大的可视化工具,支持 ROS2 桥接,界面现代,支持布局定制、实时数据回放、扩展开发等。
安装
-
AppImage 方式 (推荐,免安装):
-
从 Foxglove 官网 下载 Linux AppImage。
-
赋予执行权限并运行:
bashchmod +x Foxglove-Studio-*.AppImage ./Foxglove-Studio-*.AppImage
-
-
通过 apt 安装 (Ubuntu 22.04 可用):
bashsudo apt install -y software-properties-common sudo add-apt-repository ppa:foxglove/studio sudo apt update sudo apt install foxglove-studio
使用
- 启动 Foxglove Studio。
- 连接 ROS2 :
-
确保 ROS2 环境已 source(
source /opt/ros/humble/setup.bash)。 -
在 Foxglove 中点击 "Open connection",选择 "Rosbridge" 或 "ROS2"。
-
如果选择 Rosbridge,需先在终端启动 rosbridge:
bashros2 run rosbridge_server rosbridge_websocket然后在 Foxglove 中输入
ws://localhost:9090连接。
-
- 添加面板:通过左侧面板库拖拽各种面板(如 3D、Plot、Image 等),并订阅相应话题。
- 保存布局:可将布局保存为 JSON 文件,方便复用。
4. Qt + ROS2(C++) -- 自定义 GUI 应用
如果您需要完全定制化的界面,可以使用 Qt5/Qt6 结合 ROS2 C++ 库开发独立应用。
安装依赖
bash
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools \
libqt5svg5-dev libqt5websockets5-dev
# 确保 ROS2 Humble 已安装(桌面完整版)
创建 ROS2 包并集成 Qt
-
创建功能包 :
bashros2 pkg create my_qt_app --build-type ament_cmake --dependencies rclcpp std_msgs cd my_qt_app -
修改
CMakeLists.txt:cmakefind_package(Qt5 REQUIRED COMPONENTS Core Widgets) set(QT_LIBS Qt5::Widgets) add_executable(my_qt_app src/main.cpp) target_link_libraries(my_qt_app ${QT_LIBS} rclcpp::rclcpp) ament_target_dependencies(my_qt_app rclcpp std_msgs) install(TARGETS my_qt_app DESTINATION lib/${PROJECT_NAME}) -
编写 Qt 界面代码 (如
src/main.cpp):cpp#include <QApplication> #include <QPushButton> #include <rclcpp/rclcpp.hpp> int main(int argc, char *argv[]) { rclcpp::init(argc, argv); QApplication app(argc, argv); QPushButton button("Hello ROS2"); button.show(); auto node = std::make_shared<rclcpp::Node>("qt_node"); // 添加 ROS2 逻辑,例如定时器、订阅等 return app.exec(); } -
编译与运行 :
bashcolcon build --packages-select my_qt_app source install/setup.bash my_qt_app
5. PyQt5 / PySide2 + rclpy -- Python 快速开发
使用 Python 和 Qt 绑定库可以快速开发界面,并通过 rclpy 与 ROS2 交互。
安装 PyQt5 和 ROS2 Python 依赖
bash
sudo apt install python3-pyqt5 # 或 pip install PyQt5
# ROS2 Humble 的 Python 客户端已默认安装
编写示例应用
-
创建 Python 脚本 (如
my_gui.py):pythonimport sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton import rclpy from std_msgs.msg import String class MainWindow(QMainWindow): def __init__(self): super().__init__() self.node = rclpy.create_node('gui_node') self.pub = self.node.create_publisher(String, 'chatter', 10) button = QPushButton("Publish Hello") button.clicked.connect(self.publish_hello) self.setCentralWidget(button) def publish_hello(self): msg = String() msg.data = "Hello from GUI" self.pub.publish(msg) def main(): rclpy.init() app = QApplication(sys.argv) window = MainWindow() window.show() # 需要定期调用 rclpy.spin_once 处理 ROS 事件 timer = app.startTimer(100) # 每100ms触发一次 def process_ros(): rclpy.spin_once(window.node, timeout_sec=0) app.timerEvent = lambda event: process_ros() sys.exit(app.exec_()) rclpy.shutdown() if __name__ == '__main__': main() -
运行 :
bashsource /opt/ros/humble/setup.bash python3 my_gui.py同时可启动一个订阅者查看消息:
bashros2 topic echo /chatter
补充说明
- 环境设置 :使用任何 ROS2 命令前,务必 source ROS2 环境(
source /opt/ros/humble/setup.bash)。 - 工作空间 :若开发自定义包,建议创建工作空间(如
~/ros2_ws)并在其中构建。 - 调试 :可使用
ros2 run或直接运行可执行文件。