Windows下ROS2与Qt5开发环境搭建及实战案例解析

📅 发布时间:2026/7/10 7:58:08 👁️ 浏览次数:
Windows下ROS2与Qt5开发环境搭建及实战案例解析
1. 环境准备为什么选择Windows很多刚接触ROS2的朋友第一反应可能是在Ubuntu上搞开发毕竟ROS的“官方推荐”环境是Linux。但说实话我身边不少做机器人、自动驾驶或者工业自动化的朋友日常工作主力机就是Windows。原因很简单很多行业软件、办公套件、甚至是硬件驱动在Windows上的兼容性和易用性确实更好。所以在Windows上搭建一个能跑ROS2和Qt5的开发环境绝对不是“非主流”而是非常实际的需求。这次我们就来啃下这块硬骨头。我的目标是让你跟着步骤走能顺利在Windows 11Windows 10也适用只是ROS2版本选择不同上把ROS2 Humble或Foxy和Qt5.14.2的环境给配好并且能用PyCharm写Python节点用VS2019编译C节点最后还能用Qt5做个带界面的小应用。过程中会遇到不少坑别担心我会把我踩过的都告诉你让你少走弯路。你需要准备的东西不多一台Windows电脑建议Win11内存8G以上C盘留出至少20G空间一个稳定的网络环境部分依赖需要在线下载以及一点点耐心。整个流程从零开始到跑通第一个例程顺利的话大概需要2-3个小时。我们开始吧。1.1 核心组件版本选择与避坑指南版本兼容性是Windows下ROS2开发的第一道坎选错了后面全是坑。这里我直接给你结论ROS2版本这是最关键的选择。Windows 11 强烈推荐使用 Humble Hawksbill。它是ROS2的LTS长期支持版本对Windows的支持相对完善。如果你还在用 Windows 10那么请选择 Foxy Fitzroy。Foxy也是LTS但它的支持周期即将结束不过目前在Win10上是最稳定的选择。千万别在Win10上强行装Humble会有一堆编译和运行时问题。Qt版本我推荐Qt 5.14.2。这个版本比较经典与ROS2 Humble/Foxy的兼容性经过大量测试。更高版本的Qt 5如5.15.x理论上也可以但可能需要自己处理一些编译选项。务必注意要选择使用 MSVCMicrosoft Visual C编译器的版本比如msvc2017_64或msvc2019_64。后面我们的C程序编译依赖这个。Python版本ROS2 Humble官方推荐Python 3.8到3.10。我们按照主流教程选择Python 3.8.3。别用太新的Python 3.11很多ROS2的Python绑定可能还没适配。Visual Studio这是C编译的基石。我们需要Visual Studio 2019的社区版免费。安装时工作负载必须勾选“使用C的桌面开发”并且在右侧的“可选”组件中务必把“Windows 10 SDK”和“MSVC v142 - VS 2019 C x64/x86 生成工具”选上。不装的话后面colcon build编译C包时会直接失败。简单来说记住这个组合Win11 Humble Qt5.14.2 (msvc) Python3.8 VS2019。如果你是Win10就把Humble换成Foxy。按照这个来能避开80%的环境问题。2. 步步为营ROS2 Humble 安装全记录网上教程很多但往往缺了关键细节。我结合官方文档和多次实战把完整流程和原理给你捋清楚。我们会采用“离线安装包Chocolatey包管理器”的方式这比纯在线安装更可控、更快。2.1 安装Visual Studio 2019这一步是基础不能跳过。去微软官网下载VS2019社区版安装程序。运行后在安装界面确认勾选了“使用C的桌面开发”。然后点击这个工作负载右侧会展开详细信息。这里一定要确保“Windows 10 SDK”和“MSVC v142”被选中。其他组件像“.NET桌面开发”之类的如果你的项目不需要可以不装节省空间。安装过程比较长喝杯咖啡等着就行。2.2 配置包管理器 ChocolateyChocolatey 是Windows上的一个命令行包管理器类似于Ubuntu的apt。用它来安装后续的依赖非常方便。一定要用管理员身份打开CMD命令提示符然后执行下面这条命令%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command iex ((New-Object System.Net.WebClient).DownloadString(https://chocolatey.org/install.ps1)) SET PATH%PATH%;%ALLUSERSPROFILE%\chocolatey\bin执行完输入choco回车如果出现Chocolatey的版本信息和帮助说明就安装成功了。如果提示“不是内部或外部命令”可能需要重启一下CMD或者手动把Chocolatey的安装路径通常是C:\ProgramData\chocolatey\bin添加到系统的PATH环境变量里。2.3 安装Python与核心依赖接下来我们用Chocolatey安装指定版本的Pythonchoco install -y python --version 3.8.3安装完成后同样在CMD里输入python应该能进入Python交互界面显示版本是3.8.3。按CtrlZ再回车退出。这里有个关键操作你需要把Python的安装路径比如C:\Python38和它的Scripts路径比如C:\Python38\Scripts添加到系统环境变量PATH的最前面。这是因为系统可能自带了其他版本的Python我们要确保命令行优先使用我们刚装的3.8.3。然后安装一些C运行时库确保后续的二进制程序能跑起来choco install -y vcredist2013 vcredist1402.4 安装OpenSSL及其他编译依赖ROS2的通信比如DDS依赖安全连接所以需要OpenSSL。去OpenSSL官网下载Win64的安装包注意别下成Light版或Win32版。安装后需要设置一个环境变量。在CMD管理员里执行setx /m OPENSSL_CONF C:\Program Files\OpenSSL-Win64\bin\openssl.cfg这个命令是永久设置系统环境变量。接下来安装CMake等工具choco install -y cmake对于asio、eigen、tinyxml2这些ROS2编译时需要的库我强烈建议使用离线包。你可以从我提供的网盘链接见文末备注或者从ROS2官方推荐的仓库下载这些组件的.nupkg文件。假设你把所有离线包都放在了D:\ros2_offline_packages目录下那么安装命令是choco install -y -s D:\ros2_offline_packages asio cunit eigen tinyxml-usestl tinyxml2 bullet-s参数指定了本地源的位置。这样安装速度飞快且避免了网络问题。还有一个容易被忽略的依赖是xmllint。你需要把这个工具包解压到C:\xmllint然后把C:\xmllint\bin添加到系统PATH环境变量中。它是ROS2用于处理XML文件如package.xml的工具。最后升级pip并安装一堆Python依赖包。这些包是ROS2的Python接口、消息生成工具等所必需的python -m pip install -U pip setuptools59.6.0 python -m pip install -U catkin_pkg cryptography empy importlib-metadata lark1.1.1 lxml matplotlib netifaces numpy opencv-python PyQt5 pillow psutil pycairo pydot pyparsing2.4.7 pyyaml rosdistro这条命令执行时间较长请耐心等待。如果中途卡住或报错可以尝试使用国内镜像源例如-i https://pypi.tuna.tsinghua.edu.cn/simple。2.5 安装ROS2 Humble桌面版核心依赖搞定后终于可以安装ROS2本体了。首先告诉Chocolatey我们本地有一个ROS2的离线源假设离线包在D盘choco source add -nros-win -sD:\ROS2然后为了后续安装其他软件正常我们把默认的Chocolatey源调整一下优先级choco source remove -nchocolatey choco source add -nchocolatey -shttps://chocolatey.org/api/v2/ --priority1 choco upgrade chocolatey-windowsupdate.extension现在执行安装命令choco upgrade ros-humble-desktop --pre -y --execution-timeout0--execution-timeout0是为了防止安装超时。这个过程会持续一段时间它会从我们指定的本地源ros-win拉取所有ROS2组件进行安装。安装完成后最重要的一步测试。新开一个普通的CMD窗口不需要管理员执行call C:\opt\ros\humble\x64\local_setup.bat ros2 run turtlesim turtlesim_node如果弹出一个画着可爱小海龟的窗口恭喜你ROS2 Humble在Windows上安装成功了。这个call命令相当于Linux下的source用于加载ROS2的环境变量。3. 开发利器PyCharm与Qt5配置实战环境搭好了接下来就要让它为我们所用。我会分两部分讲如何用PyCharm愉快地写ROS2 Python节点以及如何配置Qt5来开发C GUI应用。3.1 PyCharm中配置ROS2 Python解释器用记事本写Python代码太痛苦了我们用专业的PyCharm。创建一个新的Python项目后关键是要让PyCharm知道ROS2的Python环境在哪里。打开PyCharm进入File - Settings - Project: your_project_name - Python Interpreter。点击右上角的齿轮图标选择Add。在弹出的添加解释器窗口选择System Interpreter然后点击右边的...浏览按钮。这个路径需要你手动找到C:\opt\ros\humble\x64\python.exe。选中它点击确定。回到项目你还需要把ROS2的Python包路径加到PyCharm的运行/调试配置里。进入Run - Edit Configurations。在你要运行的配置里找到Environment variables点击...添加一条Name为PYTHONPATHValue为C:\opt\ros\humble\x64\Lib\site-packages。这样PyCharm就能找到rclpy这些模块了。配置好后你就可以在PyCharm里直接运行像“Hello World”这样的ROS2发布者节点了。代码和Linux下几乎一模一样例如一个简单的发布者import rclpy from rclpy.node import Node from std_msgs.msg import String class MinimalPublisher(Node): def __init__(self): super().__init__(minimal_publisher) self.publisher_ self.create_publisher(String, topic, 10) timer_period 0.5 # seconds self.timer self.create_timer(timer_period, self.timer_callback) self.i 0 def timer_callback(self): msg String() msg.data Hello World: %d % self.i self.publisher_.publish(msg) self.get_logger().info(Publishing: %s % msg.data) self.i 1 def main(argsNone): rclpy.init(argsargs) minimal_publisher MinimalPublisher() rclpy.spin(minimal_publisher) minimal_publisher.destroy_node() rclpy.shutdown() if __name__ __main__: main()在PyCharm里运行这个脚本同时在另一个CMD窗口记得先call setup.bat里运行ros2 topic echo /topic你就能看到打印的消息了。这种开发体验比在终端里来回切换舒服太多。3.2 Qt5安装与环境变量陷阱对于C开发我们还需要Qt。去Qt官网下载在线安装器安装时勾选Qt 5.14.2和其下的MSVC 2017 64-bit组件。安装路径建议用默认的比如C:\Qt\5.14.2\。安装完Qt环境变量的设置是重中之重很多奇怪问题都源于此。你需要把Qt的bin目录添加到系统PATH但顺序有讲究。正确做法是打开“系统属性 - 高级 - 环境变量”。在“系统变量”中找到Path双击编辑。添加以下两条并确保它们的顺序如下C:\Qt\5.14.2\msvc2017_64\binC:\Qt\5.14.2\mingw73_64\bin(如果你也安装了MinGW版本)必须把msvc2017_64\bin放在mingw73_64\bin前面因为我们要用VS2019MSVC编译必须优先使用MSVC版本的Qt DLL。如果顺序反了运行时可能会提示找不到MSVC的Qt库或者链接到错误的库导致崩溃。4. C项目编译与Qt5 GUI集成这是最体现Windows开发特色的一部分我们需要在“VS2019开发人员命令提示符”下进行编译。4.1 使用colcon编译C ROS2节点首先找到并打开x64 Native Tools Command Prompt for VS 2019。这个命令行工具已经配置好了VS2019的编译环境。假设你的ROS2 C工作空间在D:\ros2_ws\src下有你的功能包。在这个命令提示符中依次输入# 切换到工作空间根目录 cd D:\ros2_ws # 加载ROS2环境 call C:\opt\ros\humble\x64\local_setup.bat # 编译整个工作空间 colcon build如果编译成功你会在工作空间下看到新增的build、install、log目录。install目录里就是编译好的可执行文件和库。要运行你编写的节点需要先切换到install目录下加载特定工作空间的环境cd D:\ros2_ws call install\local_setup.bat # 然后就可以用ros2 run了 ros2 run your_package_name your_node_name4.2 在ROS2节点中集成Qt5 GUI我们想在ROS2的C节点里弹出一个Qt窗口。这需要正确配置CMakeLists.txt。关键点如下cmake_minimum_required(VERSION 3.8) project(your_qt_ros_package) # 默认使用C14标准 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() # 寻找Qt5组件必须包含Core和Widgets find_package(Qt5 COMPONENTS Core Widgets REQUIRED) # 寻找ROS2的rclcpp等包 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) # 设置包含目录和库目录 include_directories( include ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) # 添加你的源文件 add_executable(qt_ros_node src/qt_ros_node.cpp) # 链接库注意Qt5的链接方式 target_link_libraries(qt_ros_node ${rclcpp_LIBRARIES} ${std_msgs_LIBRARIES} Qt5::Core Qt5::Widgets ) # 安装目标 install(TARGETS qt_ros_node DESTINATION lib/${PROJECT_NAME})在你的C源文件里就可以正常包含QtWidgets/QApplication和rclcpp/rclcpp.hpp创建一个既处理ROS2消息又拥有Qt界面的应用了。记得节点的spin需要放在Qt的事件循环中或者开一个单独的线程来运行rclcpp::spin。5. 疑难杂症与解决方案汇总这条路我踩过不少坑下面这些问题是高频出现的希望你能一次性避开。问题1编译C时报错Could NOT find Qt5SerialPort(或类似组件)原因你的Qt安装时没有勾选对应的模块如SerialPort, Charts等。解决重新运行Qt安装器确保在Qt 5.14.2 - MSVC 2017 64-bit下勾选了所有你需要的附加模块。然后在CMakeLists.txt中对应的find_package里加上它例如find_package(Qt5 COMPONENTS Core Widgets SerialPort REQUIRED)。问题2程序运行时提示“无法定位程序输入点于动态链接库...libpng16.dll上”原因系统在多个路径下找到了不同版本的libpng16.dll优先加载了错误的那个可能是之前安装其他软件带的。解决检查系统PATH环境变量确保C:\opt\ros\humble\x64\bin这个路径位于最前列。有时候路径末尾缺少反斜杠也可能引发问题可以检查一下。修改后务必关闭所有CMD和终端重新打开再测试。问题3Qt程序运行时提示“QSQLITE driver not loaded”原因ROS2 Foxy版本在Windows 10上与Qt的SQL插件兼容性有问题。Humble版本在Win11上此问题较少。解决最彻底的方案是将系统升级到Windows 11并使用ROS2 Humble。如果暂时不能升级可以尝试手动将Qt安装目录下plugins\sqldrivers文件夹里的qsqlite.dll及其依赖复制到你的可执行文件同级目录但这方法不稳定。问题4PyCharm能运行ROS2 Python节点但普通CMD里运行报错“No module named rclpy”原因PyCharm使用的是我们指定的特定Python解释器C:\opt\ros\humble\x64\python.exe而普通CMD使用的是系统默认的Python没有ROS2环境。解决在运行任何ROS2 Python脚本前必须在CMD中先执行call C:\opt\ros\humble\x64\local_setup.bat来激活环境。或者你可以将ROS2 Python的路径永久添加到系统的PYTHONPATH中但更推荐使用call的方式避免污染全局环境。问题5colcon build 编译时卡住或报网络错误原因在编译某些需要下载的依赖包时如某些Vendor包网络连接不稳定。解决最好的办法就是使用离线安装包这也是本文推荐的方式。如果必须在线可以尝试为命令行设置代理或者多次重试。