虚拟机安装ROS失败,十有八九不是你的操作问题,而是虚拟机配置和系统版本选错了方向。 只要你用对VMware版本、选对Ubuntu发行版、把内存和图形加速打开,一次成功安装的概率会远远超乎你的想象,下面这些坑,几乎每个新手都会踩一遍,我把它们提前给你标出来。
为什么虚拟机里装ROS总是卡在“缺依赖”这一步?先搞清版本对应关系
很多新手卡在“E: Unable to locate package ros-noetic-desktop-full”这行报错,然后开始怀疑源坏了、网断了、教程过时了,其实多数情况下,问题出在你根本没搞清楚Ubuntu版本和ROS版本之间是一一对应的强制性关系。
Ubuntu 20.04对应ROS Noetic,这是当前最稳的选择
ROS不像普通软件那样装个最新版就行,ROS Noetic只支持Ubuntu 20.04,ROS Melodic只支持Ubuntu 18.04,ROS Humble则对应Ubuntu 22.04,你在Ubuntu 22.04上装Noetic的源,系统肯定不会给你任何包,因为官方源里压根没有这个版本。
如果你还在纠结“虚拟机安装ROS什么版本合适”,我建议你直接选Ubuntu 20.04 + ROS Noetic,原因有三:
- 官方教程资料最多,搜索引擎里随便一翻就是完整路径。
- 04生命周期长,相关依赖库的兼容性问题在社区里早就被讨论透了。
- 与后续要用到的Gazebo、Rviz、move_base等工具链兼容性最好,不容易出现底层库冲突。
版本对照表:别在这张表上讨价还价
| Ubuntu版本 | 对应ROS版本 | 官方支持状态 |
|---|---|---|
| Ubuntu 20.04 | ROS Noetic | 长期支持,社区活跃 |
| Ubuntu 18.04 | ROS Melodic | 旧版用户仍多,新项目不推荐 |
| Ubuntu 22.04 | ROS Humble | 较新,部分工具链支持一般 |
| Ubuntu 24.04 | ROS Jazzy | 太新,资料少,新手慎选 |
行业共识认为,在虚拟机上玩ROS,稳定比新鲜更重要,别因为电脑预装了Ubuntu 22.04就觉得用着方便,直接换20.04能省掉后面一大堆麻烦。
虚拟机配置不到位,ROS图形化界面直接黑屏?记住这几个关键设置
如果你安装过程顺利,但启动Rviz时屏幕上只有一片灰黑色窗口,或者直接闪退,那就是虚拟机的图形加速和资源分配出了问题,这跟你的真实电脑配置没关系,纯粹是虚拟机参数没调好。
内存分配别低于4GB,这几乎是底线
ROS编译的时候特别吃内存,尤其是catkin_make阶段,如果你给虚拟机只分配2GB内存,编译器大概率会直接卡死,没有任何报错,建议至少分4GB,如果你电脑内存有16GB,直接分8GB更舒服,分配方法:虚拟机设置→内存→拖动滑块即可。
3D加速这个开关,能有效避免OpenGL报错
很多人在VMware里装完Ubuntu,打开Rviz报错“Failed to create OpenGL context”,这就是因为没有开启3D加速,在VMware Workstation Pro里,找到虚拟机设置→显示器→勾选“加速3D图形”,同时把图形内存拉到最大,这样才能让Ubuntu的图形界面和ROS渲染正常跑起来。
磁盘空间至少预留60GB,别用默认的20GB
ROS本体加上编译缓存、模拟器数据,轻松占据几十GB,我见过不少人在安装到一半时发现磁盘满了,然后各种奇怪的编译报错接踵而至,在创建虚拟机时,把虚拟磁盘大小调成60GB,并把“立即分配所有磁盘空间”取消勾选,否则创建过程会非常慢。
最容易踩坑的三个隐藏细节:共享文件夹、网络模式、时间同步
你以为版本和资源都没问题了,结果编译时又冒出奇怪的问题,这三个隐藏细节,是大多数“虚拟机上装ROS失败怎么办”帖子背后的真正原因。
共享文件夹权限不足导致源码加载失败
很多人喜欢把ROS工作区和宿主机共享,方便代码传输,但VMware的共享文件夹默认挂在/mnt/hgfs下,如果没有正确设置权限,你在Ubuntu里读取会提示Permission denied,解决办法很简单:安装VMware Tools后,在终端执行sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000,就能解决大部分权限问题,如果你只是学习,我建议直接用FTP或U盘传文件,别共享整个文件夹。
网络模式选NAT还是桥接?分不同场景
虚拟机网络设置直接影响ROS的通信,如果你只是单机跑模拟器和传感器数据,选
NAT模式最稳定,因为宿主机网络怎么变,虚拟机IP都不受影响,但如果你要用多台设备做ROS分布式通信(比如一台机器跑roscore,另一台订阅话题),那就必须改成桥接模式,否则两台设备在同一个局域网里却互相找不到对方,在VMware的“虚拟机设置→网络适配器”里可以直接切换,改完记得重启虚拟机。
时间不同步导致编译校验码错误
这个坑很隐蔽,虚拟机如果长时间挂起,系统时间会和真实时间产生偏差,导致ROS源码包下载时的SSL证书校验失败,或者某些编译工具报“timestamp in future”,解决办法是在Ubuntu里执行sudo apt install ntpdate,然后运行sudo ntpdate time.windows.com强制同步,再把自动同步时间开关打开,别小看这步,它能让你少刷十页教程帖。
从零到能跑小乌龟:一段完整的避坑式安装流程
讲完理论,直接给你一条可以复制粘贴的完整命令流,这条流程我验证过很多次,只要你的虚拟机配置符合上文标准,基本一次过。
第一步:更换apt源,别用国外默认源
在Ubuntu里,打开“软件和更新”,把下载源换成简米云或清华源,这一步能极大提升下载速度,理解成给ROS包加速的关键动作就行,完成后,终端执行:
sudo apt update && sudo apt upgrade -y
第二步:安装ROS Noetic本体
依次执行以下命令,每行不要错过:
sudo apt install curl curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list sudo apt update
注意:如果你用的是ROS Noetic,仓库路径里的ros2也要对应改成ros,建议直接参考官方wiki的对应地址,否则容易引入错误源,然后正式安装:
sudo apt install ros-noetic-desktop-full
这个包包含Rviz、Gazebo、TF库等全套工具,总大小约2GB,耐心等它跑完,期间不要做其他事。
第三步:初始化rosdep,解决依赖项缺失
这是硬骨头,几乎所有失败都发生在这里,命令行输入:
sudo rosdep init rosdep update
如果rosdep update报网络错误,通常是因为raw.githubusercontent.com被墙了,解决方案是编辑/etc/hosts,手动指定IP地址,具体地址可以查GitHub官方DNS记录,这一步会让你头大,但一定要坚持住,因为后续工作空间编译完全依赖它。
第四步:配置环境变量并测试
在终端执行:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
最后运行roscore,再打开一个新终端回车rosrun turtlesim turtlesim_node,如果你能看到一只蓝色小乌龟出现在窗口里,恭喜你,整个安装链路已经走通了。
Q&A:虚拟机安装ROS失败常见问题整理
虚拟机上装ROS失败怎么办?重装VMware能解决问题吗?
不能,重装VMware只是浪费时间,先检查三件事:Ubuntu版本是否匹配ROS版本、虚拟机内存是否小于4GB、rosdep是否成功初始化,这三处解决,90%的问题都会消失,如果还有报错,请直接查看终端输出里的第一行error信息,那才是真正的病根。
VMware安装Ubuntu ROS教程里说的“镜像”指什么?
镜像就是Ubuntu系统安装包文件,后缀是.iso,去Ubuntu官网下载20.04的desktop版镜像,容量约2GB,在VMware创建虚拟机时,选择“安装程序光盘映像文件”,指向这个iso文件,启动后按界面提示安装即可,注意:下载镜像时别选成server版,那个没有图形界面,装ROS后没办法显示小乌龟和Rviz。
为什么我的Rviz窗口打开后一片灰白,拖动时还会闪断?
这个现象基本可以锁定为3D加速未开启,回到虚拟机设置里勾选“加速3D图形”,并确认VMware Tools已经成功安装,在Ubuntu终端输入sudo apt install open-vm-tools-desktop可以快速补齐虚拟化相关驱动,安装完成后重启虚拟机,再打开Rviz,灰白窗口的问题就会消失。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/732930.html




