ROS2 Humble在Windows上安装这件事说难不难说简单却也藏了不少坑。我自己在Windows 10和Windows 11两台机器上都完整走过一遍流程从包管理器选择到OpenCV联调踩过的坑不算少。这篇就按实际操作的顺序把整个安装过程、关键细节和避坑经验一次性说清楚给准备在Windows下搞ROS2开发的朋友做个参考。先说结论Windows下跑ROS2 Humble是完全可行的适合做学习验证、算法原型验证以及和Windows生态工具链混用的场景。如果你是做实际机器人部署那还是老老实实上Ubuntu 22.04毕竟官方支持力度完全不同。但如果你手头只有Windows机器或者你的工作流离不开Windows软件那这篇攻略就是为你准备的。1. 安装前的整体思路与版本选型1.1 为什么选Humble而不是Foxy很多刚接触ROS2的朋友会纠结选哪个发行版。目前还在维护周期内的主要有Foxy、Galactic、Humble和Rolling其中Humble是LTS版本支持到2027年而Foxy已经接近维护尾声。单从学习投入产出比来看选Humble是更合理的选择。比较有意思的是Humble官方明确支持Ubuntu 22.04但Windows下的支持属于可用但需自行折腾的状态。我实测下来Humble在Windows 10 21H2以上和Windows 11上都能稳定运行核心功能和Linux版基本一致只是在某些第三方库的集成上需要额外处理。Foxy和Humble的差别简单说三点API稳定性Humble对rclcpp的接口做了不少优化有些Foxy里被标记为deprecated的写法在Humble里直接移除。DDS实现Humble默认使用Cyclone DDS和Fast DDS双实现Foxy主要用Fast DDS。工具链版本Humble带的Python版本更高3.10OpenCV版本也更新。1.2 Windows下的安装路径选择Windows下装ROS2 Humble有两条路用官方预编译包或者用Chocolatey自动安装。官方文档推荐的是Chocolatey方式它会自动处理大部分依赖省去手动装Visual Studio组件、Python、OpenCV等一堆东西的麻烦。我自己两次安装分别用了两种方式对比下来强烈建议走Chocolatey。原因有三个手动装依赖容易漏尤其是VC Redistributable和Python版本不匹配的问题排查起来非常头疼。Chocolatey会自动配置环境变量包括ROS_DOMAIN_ID、RMW_IMPLEMENTATION等关键参数。卸载的时候Chocolatey能清理得更干净手动装的话残留文件会拖累后续重装。提示无论选哪条路先把系统更新到最新补丁Windows 10至少要到21H2Windows 11建议直接最新版。旧版本系统装ROS2时容易出现DLL缺失问题。2. Chocolatey安装与基础环境配置2.1 安装ChocolateyChocolatey是Windows下的包管理器类似Linux的apt或brew。ROS2 Humble官方文档推荐先用它装一堆依赖所以第一步就是把它搞定。安装Chocolatey之前先打开一个管理员权限的PowerShell窗口。这一步很关键没有管理员权限会报一堆错。执行以下命令Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString(https://community.chocolatey.org/install.ps1))第一行是临时放开脚本执行策略第二行是启用TLS 1.2加密协议第三行是真正下载并执行安装脚本。等它跑完关闭并重新打开PowerShell输入choco --version验证是否安装成功。能输出版本号就说明OK了。2.2 通过Chocolatey安装基础依赖ROS2 Humble在Windows上需要以下基础组件choco install -y python --version3.10.11 choco install -y visualstudio2022community choco install -y visualstudio2022-workload-vctools choco install -y git choco install -y cmake choco install -y colcon-common-extensions choco install -y curl choco install -y wget choco install -y openssl choco install -y opencv这里有几个容易出问题的点Python版本问题Humble官方要求Python 3.10而Windows下默认choco装的可能是3.11或更高版本。我建议直接用--version参数锁死3.10.11因为后续编译一些ROS2的Python包时过新的Python版本会出现兼容性问题。比如我遇到过No module named rosidl_adapter的报错排查半天发现是Python版本太高导致包编译产物不匹配。Visual Studio 2022配置默认的社区版就够用但一定要勾选visualstudio2022-workload-vctools这个workload它包含了C编译所需的全部工具链。如果漏装了这个后续编译节点代码时会报cl.exe找不到的错误。OpenCV版本choco装OpenCV时默认装的是最新版如果遇到版本冲突可以指定版本比如choco install opencv --version4.8.0。我实际测试中4.8.0和4.9.0都能和ROS2 Humble正常配合。注意Chocolatey安装Visual Studio耗时会比较长视网络情况可能在20到40分钟。中间如果断网了重新执行安装命令即可已装好的组件不会被重复下载。2.3 验证基础环境装完基础依赖后先做个快速验证。打开一个新的PowerShell窗口分别执行以下命令python --version cl cmake --version git --version这里的cl是Visual Studio的C编译器如果提示找不到说明VCTools没装全需要回到Chocolatey补装。python --version必须显示3.10.x其他版本会有隐患。环境验证通过后建议顺手把pip源切成国内镜像如果你也在国内网络环境。这一步不是必须的但能省掉后面大量等待时间pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple3. ROS2 Humble核心安装步骤3.1 下载与安装ROS2 Humble基础环境就绪后开始装ROS2本身。官方提供两种方式方式一直接下载zip包推荐从ROS2官方GitHub Release页面下载ros2-humble-*-windows-AMD64.zip解压到某个目录比如C:\dev\ros2_humble。为什么要手动解压而不是用安装工具因为官方包里已经带好了所有Python依赖和第三方库解压即用省事且可控。解压后需要手动配置环境变量。在PowerShell里执行$env:AMENT_PREFIX_PATH C:\dev\ros2_humble\install $env:PYTHONPATH C:\dev\ros2_humble\install\Lib\site-packages $env:CMAKE_PREFIX_PATH C:\dev\ros2_humble\install $env:PATH C:\dev\ros2_humble\install\bin;C:\dev\ros2_humble\install\Scripts;$env:PATH这些变量建议写进PowerShell Profile或者系统环境变量否则每次新开窗口都得重设。方式二用Chocolatey自动安装如果你不想手动解压和配路径可以这样choco install -y ros2-humbleChocolatey会自动下载包并把环境变量全局配置好过程中的依赖检查也更省心。但这种方式的问题是你不太清楚它到底把包装在哪个位置后续如果手动改文件会找不到路径。我个人推荐方式一可控性更强。方式二适合完全不想碰环境变量的新手。3.2 验证ROS2是否安装成功配置好环境变量后新开一个PowerShell窗口执行ros2 --help ros2 topic list第一条能看到帮助信息就说明ROS2核心装好了。第二条会提示no topics这是正常的因为现在还没有任何节点在跑。更彻底的验证方式是跑一下官方自带的demoros2 run demo_nodes_cpp talker如果终端开始周期性输出Publishing: Hello World说明ROS2核心功能完整。这时候再开一个窗口ros2 run demo_nodes_py listener能看到接收消息就说明节点通信正常。这两个demo同时验证了C和Python两种语言接口都没问题。3.3 安装rviz2rviz2是ROS2的可视化工具做机器人开发基本离不开它。在Windows下如果通过Chocolatey装的ROS2rviz2一般会直接带上如果手动解压zip包需要确认一下。在PowerShell执行ros2 run rviz2 rviz2如果提示找不到rviz2就单独装。手动装的话可以用pippip install ros2-rviz2不过这种方式装的rviz2依赖兼容性有时候会有问题。我实际测过zip包里自带的rviz2是完整可用的界面和Linux下的一致渲染性能在Windows 11上甚至感觉更流畅一些。提示rviz2在Windows下首次启动可能会比较慢大概需要10到20秒。如果一直白屏没反应检查一下显卡驱动更新到最新版能解决大部分渲染问题。4. OpenCV集成与图像处理配置4.1 Windows下OpenCV与ROS2的关联OpenCV和ROS2的关系很紧密做视觉SLAM、目标检测、图像传输都离不开。Windows下OpenCV有两种用法作为ROS2节点的依赖库比如你写了一个图像处理节点用cv_bridge把sensor_msgs/Image转换成cv::Mat这时候需要OpenCV的C库。作为独立图像处理工具你只是想在Windows下用OpenCV做图像处理和ROS2分开跑。这篇主要讲第一种情况因为第二种直接pip install opencv-python就完事了没什么坑。4.2 安装OpenCV并配置环境如果你是通过Chocolatey装的OpenCV那环境变量基本已经配好了。手动验证一下opencv_version能输出版本号说明装好了。在PowerShell里还需要确认一下系统环境变量是否包含OpenCV的bin目录一般是C:\Program Files\OpenCV\bin或类似路径。如果在编译时找不到OpenCV库多半是OpenCV_DIR这个CMake变量没配好。在CMakeLists.txt中引用OpenCV通常会这样写find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(your_node ${OpenCV_LIBS})在Windows下编译时一个常见的坑是CMake能找到OpenCV头文件却找不到库文件。这时候需要手动指定OpenCV_DIRcmake -DOpenCV_DIRC:\Program Files\OpenCV\build ..4.3 Windows下用CMake编译OpenCV项目实操这部分单独拿出来讲是因为我在Windows下用CMake编译OpenCV项目时踩过不少坑。具体流程如下第一步准备项目结构opencv_demo/ ├── CMakeLists.txt ├── src/ │ └── main.cpp └── build/第二步编写CMakeLists.txtcmake_minimum_required(VERSION 3.20) project(opencv_demo) set(CMAKE_CXX_STANDARD 17) find_package(OpenCV REQUIRED) find_package(rclcpp REQUIRED) find_package(sensor_msgs REQUIRED) find_package(cv_bridge REQUIRED) add_executable(image_processor src/main.cpp) target_link_libraries(image_processor ${OpenCV_LIBS} rclcpp::rclcpp sensor_msgs::sensor_msgs cv_bridge::cv_bridge )第三步编译cd build cmake .. -DOpenCV_DIRC:\Program Files\OpenCV\build cmake --build . --config Release编译过程中如果报错找不到cv_bridge说明ROS2的环境变量没配置好重新检查一下第三节里的环境变量设置尤其是AMENT_PREFIX_PATH。4.4 OpenCV图像处理的小案例既然涉及到OpenCV顺手分享一个在Windows下做图像采集并发布的ROS2节点demo。这个可以验证整条链路摄像头 → OpenCV处理 → ROS2消息发布是否通畅。#include rclcpp/rclcpp.hpp #include sensor_msgs/msg/image.hpp #include cv_bridge/cv_bridge.h #include opencv2/opencv.hpp class ImagePublisher : public rclcpp::Node { public: ImagePublisher() : Node(image_publisher) { publisher_ this-create_publishersensor_msgs::msg::image(image_topic, 10); timer_ this-create_wall_timer( std::chrono::milliseconds(100), std::bind(ImagePublisher::timer_callback, this)); } private: void timer_callback() { // 这里用一张纯色图模拟摄像头数据实际项目中替换为VideoCapture cv::Mat frame(480, 640, CV_8UC3, cv::Scalar(100, 150, 200)); auto msg cv_bridge::CvImage(std_msgs::msg::Header(), bgr8, frame).toImageMsg(); publisher_-publish(*msg); RCLCPP_INFO(this-get_logger(), Publishing image); } rclcpp::Publishersensor_msgs::msg::image::SharedPtr publisher_; rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char **argv) { rclcpp::init(argc, argv); rclcpp::spin(std::make_sharedImagePublisher()); rclcpp::shutdown(); return 0; }编译并运行这个节点后在另一个终端执行ros2 topic echo /image_topic就能看到消息数据。这说明ROS2和OpenCV的集成已经跑通了。5. 常见问题与排查技巧实录5.1 问题速查表我在安装和使用过程中碰到过的问题整理成一张表方便对照排查错误现象根本原因解决办法cl.exe找不到Visual Studio VCTools未安装重装visualstudio2022-workload-vctoolsNo module named rosidl_adapterPython版本过高包编译不匹配降级Python到3.10.x并重装相关包或在虚拟环境内重新pip installCMake查不到OpenCVOpenCV_DIR未指定编译时加-DOpenCV_DIR安装路径rviz2启动白屏显卡驱动问题更新显卡驱动关闭硬件加速试试节点间通信超时DDS发现机制被防火墙拦截在防火墙中放行ROS2相关端口或设置ROS_DOMAIN_ID统一ros2: command not found环境变量没有全局配置手动配置PATH和AMENT_PREFIX_PATH5.2 DDS通信问题深度排查ROS2的消息传递机制基于DDSData Distribution Service在Windows下这个机制比Linux更容易出问题主要体现在节点间互相发现不了。Windows防火墙默认会拦截DDS使用的UDP多播端口。解决方案是在管理员PowerShell里执行netsh advfirewall firewall add rule nameROS2 DDS dirin actionallow protocolUDP localport7400-7600另外如果发现同一个ROS2网络环境里有多组设备而它们之间互相干扰可以通过设置不同的ROS_DOMAIN_ID来隔离。这个值是一个0到101的整数设置后只和相同ID的节点通信$env:ROS_DOMAIN_ID 42这个小技巧在多个项目并行测试时非常实用。我在一个实验室场景里同时跑了三个项目分别用0、42、66三个域ID互不干扰。5.3 Colcon编译工作区的坑在Windows下用colcon编译自定义工作区时有几个细节需要特别注意。首先必须从Developer PowerShell启动否则环境变量不完整。在开始菜单里搜Developer PowerShell for VS 2022用这个编译才不会有路径问题。其次编译前记得source一下ROS2的环境call C:\dev\ros2_humble\install\setup.bat如果是PowerShell用C:\dev\ros2_humble\install\setup.ps1第三colcon默认的build和install目录在Windows下偶尔会出现权限问题。如果遇到Access is denied错误检查一下工作区目录的权限或者把整个工作区放到用户目录下比如C:\Users\你的用户名\ros2_ws别放在C盘根目录或Program Files下。5.4 Windows Terminal集成优化既然是在Windows下做开发一个好的终端能大幅提升效率。Windows Terminal微软官方终端对ROS2开发有很大帮助你可以把PowerShell窗口标签页重命名、分屏方便同时跑多个节点。配置PowerShell Profile把ROS2环境自动加载进去这样每次打开终端就不用手动source了。编辑Profile文件notepad $PROFILE在文件里加入$env:ROS_DOMAIN_ID 0 C:\dev\ros2_humble\install\setup.ps1保存后重新打开终端ROS2环境就自动就绪了。6. 操作过程中的若干体会装完整个环境到现在我已经在Windows上跑了好几个ROS2项目包括图像传输、坐标变换和简单的导航仿真。有几个心得体会愿意分享出来。第一点版本锁定比追求最新更重要。Python锁3.10、OpenCV用4.8或4.9、Visual Studio用2022的稳定版这条路走下来最省心。我之前试过用最新Python和最新OpenCV踩了一堆兼容性的坑。第二点环境管理尽量集中。所有ROS2相关的东西包括工作区、依赖库尽量放在同一个盘符和目录层级下这样排查问题时路径清晰也不容易出现权限或路径过长的问题。Windows下路径默认有260个字符限制ROS2的include路径很容易超最好通过注册表把这个限制放宽或者尽量缩短工作区路径。第三点把DDS排查放到网络问题首位。Windows下节点通信出问题十有八九是防火墙或域配置的问题不要一开始就去怀疑代码逻辑。我在一个项目里被两台电脑之间通信问题折磨了两天最后发现是防火墙策略的问题改完就通了。第四点持续集成有条件就上。如果项目规模起来了建议配置GitHub Action在虚拟机上跑colcon build做持续编译验证这样能提前暴露跨平台的编译问题。Windows下编译比Linux慢不少但好在可以无人值守跑。最后再分享一个小技巧。如果你需要在一台Windows机器上同时管理多个ROS2版本或项目环境用conda给不同项目创建隔离的Python环境很有用。ROS2本身和conda配合需要一点技巧但合理配置后能避免很多改了一个项目另一个项目跑不了的尴尬情况。Windows下的ROS2 Humble环境搭好了后续无论是学教程、做算法验证还是给机器人做上位机开发都会顺畅很多。这篇里记录的步骤和坑都是实操过后总结出来的希望对你有用。
企业数字化 ERP 产品动态
相关推荐
SIW与微带线转换器设计:三种过渡结构S参数对比与优化 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:04:48
芯邦CBM2099扩容U盘修复:APTool量产打回真实容量 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:04:39
树莓派5供电不足排查指南:PD协议、线材损耗与USB掉盘解决方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:04:39
低空空域智能管控怎么做?物理AI+数字孪生完整技术架构解析 低空空域智能管控的最优物理AI方案,不应只是“无人机监控大屏”,而应该是一套能够完成空域数字化、实时感知、航线规划、仿真推演、风险预测、智能调度和应急处置的闭环系统。按照城市级数字孪生能力、空域数据融合、飞行器实时感知、仿真预测、多机协同… · 2026/9/24 14:47:47
G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序 G6 径向布局(Radial Layout)实战指南:同心圆分层、节点防重叠与聚类排序 【免费下载链接】G6 ♾ A Graph Visualization Framework in JavaScript. 项目地址: https://gitcode.com/gh_mirrors/g6/G6
径向布局(Radial Layou… · 2026/9/24 14:47:47
webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流 webnovel-writer 冲突设计实战:从一句核心冲突到整卷危机链的完整工作流 【免费下载链接】webnovel-writer 基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。 项目地址: htt… · 2026/9/24 14:47:47
工业 AI 项目Sim‑to‑Real鸿沟,公共产业载体可以补齐哪些中间环节 Sim‑to‑Real(仿真到现实鸿沟)是工业 AI、具身智能赛道老生常谈的技术难题。模型在仿真环境指标表现优秀,部署到真实工厂、真实硬件之后,受光照、摩擦、噪声、设备公差影响,效果出现明显跳水。对于中小 AI 团队、硬件… · 2026/9/24 14:47:47
LanceDB 清理操作统计:RemovalStats 接口深度解析(Node.js SDK) 向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 LanceDB 的 Node.js… · 2026/9/24 14:47:41
叉车司机考试题库怎么用?理论加实操备考思路 叉车司机证是特种设备作业人员证的一种,考试分理论知识和实际操作两部分。很多考生是在职的仓库、物流、工厂人员,下班后时间零散,翻书看不进去,刷题又不知道从哪下手。我们整理了 5 道高频自测题,覆盖理论卷里反复出现… · 2026/9/24 14:47:39
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44