简介:这份PDF文档面向初次接触ROS的机器人方向学习者与高校学生,聚焦在VMware虚拟机中搭建Ubuntu并安装ROS的完整流程,帮助零基础读者在不改动本机系统的前提下快速获得可用的ROS学习环境。资源包共1个PDF文件,约25.9MB,内容以图文步骤为主,涵盖虚拟机创建、Ubuntu安装配置、ROS仓库添加与基础包安装、环境变量设置及talker节点验证等环节,并附有许可证密钥输入、处理器与内存分配等细节提示,便于对照操作与排错。目前已有750人学习下载,适合作为入门阶段的实操参考,也可供需要重装或迁移环境的读者按图索骥,减少配置过程中的试错成本。
1. 虚拟机里跑通 Ubuntu + ROS:为什么老手反而推荐这种“绕路”方案
刚接触机器人操作系统的开发者,十有八九会在第一步卡住:手头只有一台 Windows 笔记本,直接双系统怕把引导搞崩,装 WSL 又担心硬件仿真和图形界面出问题。这时候 VMware 里装一套 Ubuntu 再叠 ROS,反而是最稳的起步路径——虚拟机快照就是后悔药,装崩了回滚三十秒,宿主机一根毛都不掉。这份资源围绕的就是这条链路:VMware 建虚拟机、装 Ubuntu LTS、再在系统里把 ROS 环境拉起来,从下载、分区、用户名密码设置到处理器和内存分配,一步步落到可复现的操作。适合刚入门 ROS、需要隔离环境做课程设计或跑仿真 Demo 的从业者,也适合想在不折腾主力机的前提下快速验证算法包的人。下面按我实际拆装的顺序讲,参数和坑都标清楚。
2. 建虚拟机前的选型与资源分配:别让默认值坑了你
2.1 版本搭配:Ubuntu LTS 与 ROS 发行版的对应关系
这套环境最容易翻车的地方不是安装过程,而是版本没对齐。ROS 1 和 ROS 2 对 Ubuntu 版本有硬绑定关系,装错了后面apt install直接报依赖冲突。常见做法是先定 ROS 版本,再倒推 Ubuntu 版本,而不是反过来。
| ROS 版本 | 推荐 Ubuntu | 说明 |
|---|---|---|
| ROS 2 Foxy | 20.04 LTS | 长期支持,教程多,适合入门 |
| ROS 2 Humble | 22.04 LTS | 生态较新,部分包要求更高 |
| ROS 1 Noetic | 20.04 LTS | 老项目、老教材仍在用 |
我一般建议新手锁 20.04 + Foxy 这套组合,资料最全,遇到问题搜得到答案。虚拟机软件用 VMware Workstation Player 就够,个人学习场景不需要 Pro 的克隆和快照管理高级功能,但如果你要做多环境对比,Pro 的完整快照更省心。镜像一定选 LTS 的桌面版 ISO,服务器版没有图形界面,后面跑 RViz 和 Gazebo 会很难受。
2.2 处理器、内存、磁盘的参数怎么给
项目正文里提到“分配处理器数量”,这一步很多人随手点默认,结果编译 ROS 包时风扇狂转、系统卡死。虚拟机的资源分配原则是:给足但不贪多,留够宿主机自己喘气。
- 处理器核心:宿主机是 4 核就给 2 核,8 核给 4 核,别把物理核心全划走,否则宿主机调度会拖慢虚拟机。
- 内存:最低 4GB,跑 Gazebo 仿真建议 8GB。低于 4GB 编译大型包会触发 OOM。
- 磁盘:项目正文建议 20GB 以上,我的经验是直接给 40GB 并选“拆分成多个文件”,避免单个大文件在 NTFS 上出问题。ROS 桌面版全套装完加上工作空间,20GB 很快见底。
在 VMware 的“自定义硬件”里改这些值,改完再启动。注意“虚拟化 Intel VT-x/EPT”这一项要勾上,否则虚拟机里再跑容器或嵌套虚拟化会失败。
2.3 创建虚拟机的完整操作路径
按下面顺序走,每一步对应 VMware 新建向导里的一个界面:
- 选“创建新的虚拟机”,类型选“自定义(高级)”,这样能控制磁盘和硬件细节。
- 安装来源选“稍后安装操作系统”,避免向导自动挂载 ISO 时跳过语言和分区设置。
- 客户机操作系统选 Linux,版本选 Ubuntu 64 位。
- 命名虚拟机并指定存储路径,路径别放中文目录,后面挂共享文件夹容易出编码问题。
- 磁盘容量填 40GB,选“将虚拟磁盘拆分成多个文件”。
- 进入“自定义硬件”,内存给 4096MB 以上,处理器给 2 个,勾选虚拟化引擎相关选项。
- 在“新 CD/DVD”里选“使用 ISO 映像文件”,指向下载好的 Ubuntu ISO。
提示:ISO 挂载这一步如果忘了做,启动后会提示找不到操作系统,不是镜像坏了,是光驱没接上。
3. Ubuntu 安装过程:分区、账户与首次启动的实操细节
3.1 安装向导里真正需要你决策的几屏
启动虚拟机后进入 Ubuntu 安装界面,语言选中文或英文都行,我习惯英文,后面终端报错信息搜起来命中率高。关键决策集中在三屏:
第一屏是安装类型,选“正常安装”还是“最小安装”。做 ROS 开发选正常安装,最小安装会缺不少桌面组件,后面还得手动补。第二屏是“安装类型”,选“清除整个磁盘并安装 Ubuntu”——这里清的是虚拟磁盘,不是你的物理硬盘,放心点。第三屏是时区和账户,用户名建议全小写、不带特殊字符,因为 ROS 的工作空间路径和某些脚本对大小写敏感。
分区这块,新手直接用向导的自动分区即可,它会分一个 ext4 根分区加一个 swap。如果你磁盘给得小,swap 会自动缩水,编译大包时可能不够用,可以在“其他选项”里手动把 swap 设到 2GB 以上。手动分区时注意挂载点:/用 ext4,swap单独一块,别把/boot单独拆出来,虚拟机场景没必要还增加复杂度。
3.2 安装完成后的第一轮系统配置
装完重启,第一件事是装 VMware Tools 或 open-vm-tools,解决分辨率自适应和宿主机剪贴板共享。在 Ubuntu 终端里执行:
# 更新软件源索引,确保拿到最新包列表 sudo apt update # 安装开源虚拟机工具,替代手动挂载 VMware Tools 镜像 sudo apt install -y open-vm-tools open-vm-tools-desktop # 重启使显示驱动和剪贴板共享生效 sudo rebootopen-vm-tools-desktop负责图形相关的自适应分辨率和拖拽文件,少了它窗口会固定在 800x600。装完重启,VMware 菜单里的“安装 VMware Tools”就不用管了,开源版功能覆盖了日常需求。
接着换软件源。默认源在国外,apt update慢得让人怀疑人生。在“软件和更新”里把下载服务器换成国内镜像,或者直接改/etc/apt/sources.list。换完再跑一次sudo apt update && sudo apt upgrade -y,把系统补到最新。这一步别省,ROS 的依赖链很长,基础包版本太旧会在后面装 ROS 时连环报错。
3.3 快照:装 ROS 之前必须做的一件事
系统干净、更新完毕、还没动 ROS 的时候,关机做一次完整快照,命名成“clean-ubuntu”。这是整篇流程里性价比最高的操作。ROS 安装涉及添加第三方源、导入密钥、装几百个包,任何一步搞乱,有快照就能三十秒回到干净状态,没有就得重装系统。后面每装完一个大阶段(比如 ROS 基础包装完、工作空间建好)再补一个快照,形成回滚链。
4. 在 Ubuntu 里装 ROS:源配置、密钥与验证的完整命令链
4.1 添加 ROS 软件源与密钥的正确姿势
项目正文给的命令链里用了apt-key adv导入密钥,这个方式在新版 Ubuntu 上会报弃用警告,虽然还能用,但我建议换成把密钥写到独立 keyring 文件的方式,避免以后系统升级时密钥管理混乱。以 ROS 2 Foxy 为例,完整流程如下:
# 安装添加第三方源所需的工具 sudo apt install -y software-properties-common curl gnupg lsb-release # 启用 universe 仓库,ROS 依赖的部分包在这里 sudo add-apt-repository universe -y # 下载 ROS 官方 GPG 密钥并转存为 keyring 文件 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ -o /usr/share/keyrings/ros-archive-keyring.gpg # 把 ROS 源写入 sources.list.d,签名用上面下载的 keyring echo "deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | \ sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null # 刷新索引,确认没有 GPG 报错 sudo apt update$(lsb_release -cs)会自动取当前 Ubuntu 的代号,20.04 是focal,22.04 是jammy,这样源地址和系统版本自动对齐,不用手写。signed-by参数把密钥绑定到这个源,是现在 Debian 系推荐的做法。执行完apt update如果看到NO_PUBKEY报错,说明密钥没写对路径,回头检查 keyring 文件是否存在、权限是否可读。
4.2 安装桌面版与初始化 rosdep
源配好后装桌面版全套:
# 安装 ROS 2 Foxy 桌面版,含 RViz、demo 节点和常用工具 sudo apt install -y ros-foxy-desktop # 初始化 rosdep,用于自动解析包依赖 sudo rosdep init rosdep updateros-foxy-desktop比ros-base多了图形工具和示例节点,入门阶段别省这点空间。rosdep init偶尔会因为网络问题失败,报“cannot download default sources”,多试两次或者换个时间段即可,这一步只是拉一个索引文件,不涉及系统改动。rosdep update同理,失败重跑不影响已装好的包。
环境变量写入.bashrc:
# 每次开终端自动加载 ROS 环境 echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc source ~/.bashrc # 检查环境变量是否生效 printenv | grep ROSprintenv | grep ROS应该能看到ROS_DISTRO=foxy、ROS_VERSION=2等变量。如果为空,说明.bashrc没被加载或者路径写错,检查文件末尾那行 source 是否存在。
4.3 用 talker/listener 验证通信链路
验证安装最直接的方式是跑官方 demo 节点,开两个终端:
# 终端一:启动发布者,每秒发一条消息 ros2 run demo_nodes_cpp talker # 终端二:启动订阅者,接收并打印消息 ros2 run demo_nodes_cpp listener看到 listener 终端持续打印I heard: [Hello World: N],说明 ROS 的发布订阅通信正常,DDS 中间件工作正常。如果 talker 能跑但 listener 收不到,常见原因是两个终端的环境变量不一致,或者虚拟机网络模式导致 DDS 发现失败——VMware 的 NAT 模式一般没问题,桥接模式在某些网络下会干扰组播,遇到这种情况把虚拟机网络改成 NAT 再试。
5. 避坑与排查:虚拟机装 ROS 最容易翻车的五个地方
5.1 现象:虚拟机启动黑屏或卡在 GRUB
原因通常是 ISO 没挂载成功,或者虚拟磁盘控制器类型和镜像不兼容。解决:关机进虚拟机设置,确认 CD/DVD 指向了正确的 ISO 且“启动时连接”勾选;如果还不行,把磁盘控制器从 SATA 改成 SCSI 或反过来试。另外宿主机开了 Hyper-V 时,VMware 的虚拟化会冲突,表现为启动极慢或黑屏,需要在 Windows 功能里关掉 Hyper-V 再重启宿主机。
5.2 现象:apt update报 GPG 错误或 404
原因有两个:一是 ROS 源里的 Ubuntu 代号和实际系统不匹配,比如在 22.04 上写了focal;二是密钥文件路径和signed-by里写的不一致。解决:用lsb_release -cs确认代号,检查/etc/apt/sources.list.d/ros2.list内容,再核对 keyring 文件路径。404 还可能是镜像源同步延迟,换回官方源试一次能排除。
5.3 现象:编译 ROS 包时内存不足被 kill
原因是虚拟机内存给少了,或者没配 swap。colcon build并行编译几个大包,峰值内存很容易超过 4GB。解决:关机把内存加到 8GB;临时方案是在虚拟机里加 swap 文件:
# 创建 4GB swap 文件并启用 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 写入 fstab 实现开机自动挂载 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab编译时还可以用colcon build --parallel-workers 2限制并行数,用时间换内存。
5.4 现象:RViz 或 Gazebo 打不开、界面花屏
原因是虚拟机 3D 加速没开或显存不够。解决:虚拟机设置里勾选“加速 3D 图形”,显存拉到 1GB 以上;Ubuntu 里确认open-vm-tools-desktop已安装。Gazebo 对显卡要求更高,如果宿主机是集成显卡,把 Gazebo 的渲染后端切到软件渲染能跑但很慢,做轻量仿真够用,大规模场景建议上物理机。
5.5 现象:宿主机和虚拟机之间复制粘贴失效
原因是open-vm-tools-desktop没装或没重启。解决:确认包已安装,sudo systemctl restart vmtoolsd重启服务,还不行就重启虚拟机。剪贴板共享依赖 VMware 的拖拽通道,虚拟机设置里“选项”标签下的“客户机隔离”要允许复制粘贴。
6. 进阶:把虚拟机环境做成可复用的开发底座
环境跑通只是起点,真正省时间的是把它固化成可复制的底座。我的习惯是:干净系统一个快照,装完 ROS 基础包一个快照,建好工作空间再一个快照,三层回滚链覆盖绝大多数翻车场景。工作空间用标准结构,源码放src,编译产物和build、install、log目录用.gitignore排除,这样整个src可以打包带走,换台机器重新colcon build就能复现。
共享文件夹这块,VMware 的共享目录挂载在/mnt/hgfs/下,但 ROS 编译对文件系统有要求,直接在共享目录里colcon build会因为权限和符号链接问题失败。正确做法是把源码复制到虚拟机本地磁盘再编译,共享目录只用来传文件。传大文件用scp或直接拖拽都比共享目录稳。
再进一步,可以把装好的环境导出成 OVA 模板,团队里人手一份,省掉每人重复装系统的时间。导出前记得清理~/.bash_history和临时文件,把虚拟机磁盘压缩一遍,OVA 体积能小不少。验证模板是否可用,别只看能不能开机,跑一遍ros2 run demo_nodes_cpp talker加listener,再开一次 RViz 加载一个示例配置,通信和图形两条链路都通了才算合格。
从那以后我每次新建虚拟机,都强制先做干净快照再动 ROS,装完基础包立刻补第二个快照,编译大包前先看内存和 swap。这套习惯让我少重装了至少七八次系统。希望帮到你。
本文还有配套的精品资源,点击获取