VMware 虚拟机安装 Ubuntu 20.04 与 ROS Noetic 完整指南 简介这份PDF文档面向ROS初学者与机器人方向的学生系统讲解如何在VMware虚拟机中搭建Ubuntu环境并完成ROS安装解决新手缺少独立Linux设备、担心误操作损坏系统的问题适合零基础入门与课程实验环境准备。资源包共1个PDF文件约25.9MB内容以图文步骤为主涵盖虚拟机创建、Ubuntu安装配置、ROS仓库添加与基础包安装、环境变量设置及talker节点验证等环节并附有许可证密钥填写、处理器与内存分配等细节提示便于对照操作与排错。目前已有750人学习下载可作为搭建ROS学习环境时的参考手册帮助读者少走弯路快速进入ROS功能学习与项目实践。1. 虚拟机里跑 ROS为什么我坚持先装 Ubuntu 20.04 而不是 22.04上周帮一个刚进实验室的同学收拾烂摊子他在 VMware 里装了 Ubuntu 22.04然后照着某篇教程硬装 ROS 1 Noeticapt install报了一屏依赖冲突折腾到凌晨两点还没跑通roscore。这不是他手笨是版本组合从第一步就选错了。ROS 和 Ubuntu 是强绑定关系Noetic 只认 20.04Humble 才认 22.04装之前不把这张对照表理清楚后面每一步都是给自己挖坑。这篇笔记记录的是我在 VMware 里从零搭一套 Ubuntu 20.04 ROS Noetic 的完整过程适合刚接触机器人开发、不想动实体机双系统的新手也适合想快速复制一套干净实验环境的熟手。装完能跑通talker/listener才算真正落地。2. 装之前先把版本和环境定死VMware、Ubuntu、ROS 三者的对应关系2.1 版本对照表选错一个后面全乱ROS 的发行版和 Ubuntu 版本是一一锁死的这不是建议是硬约束。我见过太多人拿着 22.04 的镜像去装 Noetic最后卡在Unable to locate package ros-noetic-desktop-full上还以为是源写错了。先把这张表存下来ROS 版本对应 Ubuntu支持状态适用场景ROS NoeticUbuntu 20.04 LTS2025 年 5 月前维护ROS 1 生态、大量存量教程和包ROS 2 FoxyUbuntu 20.04 LTS已停止维护想尝鲜 ROS 2 但不换系统ROS 2 HumbleUbuntu 22.04 LTS长期支持新项目、ROS 2 主力版本我一般给新手的建议是如果目标是学 ROS 1 那套经典教程导航、机械臂、SLAM 老包直接上 Ubuntu 20.04 Noetic别犹豫。如果明确要学 ROS 2那就 22.04 Humble一步到位。最怕的是 22.04 装 Noetic 这种错配纯属自找麻烦。2.2 VMware 版本与宿主机资源分配VMware Workstation Player 对个人学习是够用的Pro 版多了快照管理和克隆如果你打算反复折腾环境Pro 的快照功能能省很多事——装崩了直接回滚比重新装一遍快得多。宿主机这边我给虚拟机的配置底线是内存4GB 起步8GB 舒服。2GB 能装但编译 ROS 包时会卡到怀疑人生。处理器2 核以上记得在虚拟机设置里勾选「虚拟化 Intel VT-x/EPT」。磁盘40GB 起步。ROS 桌面完整版加上后续的依赖包20GB 很快见底。提示磁盘类型选「将虚拟磁盘存储为单个文件」性能比拆成多个文件好迁移时也少一个文件夹的麻烦。2.3 镜像和安装包的获取路径Ubuntu 20.04 的桌面镜像去官网的 old-releases 目录找因为 20.04 已经不算最新 LTS 了主下载页不一定摆在最显眼的位置。文件名类似ubuntu-20.04.6-desktop-amd64.iso下载完对一下 SHA256别嫌麻烦镜像损坏导致的安装中途报错是最难排查的一类问题。VMware 本体从官网下 Workstation Player 即可安装过程一路下一步装完重启一次再开虚拟机避免网络驱动没加载全。3. 在 VMware 里创建 Ubuntu 20.04 虚拟机从新建到进入桌面3.1 新建虚拟机的关键选项打开 VMware选「创建新的虚拟机」走「自定义高级」而不是「典型」因为典型模式会帮你做一堆默认决策后面想改反而绕。到了安装来源那一步选「稍后安装操作系统」——这一步很多人图省事直接选 ISO结果 VMware 的简易安装会接管 Ubuntu 的安装流程跳过用户名、分区这些关键设置装完发现账户密码是它随机生成的很别扭。操作系统类型选 Linux → Ubuntu 64 位。命名建议带上用途和版本比如ros-noetic-u2004以后虚拟机多了不至于分不清哪个是哪个。磁盘容量填 40GB选「将虚拟磁盘拆分成多个文件」还是单个文件按前面说的选单个。3.2 硬件参数与 ISO 挂载创建完成后先别急着开机点「编辑虚拟机设置」把内存调到 4096MB处理器数量 2、每个处理器核心数 1总核心 2。然后在 CD/DVD 那一栏选「使用 ISO 映像文件」浏览到刚才下载的 Ubuntu 镜像。网络适配器保持 NAT 就行虚拟机访问外网装包没问题宿主机也不用额外配路由。# 开机前在宿主机确认 ISO 完整性Linux/macOS 宿主机 sha256sum ubuntu-20.04.6-desktop-amd64.iso # 和官网公布的校验值逐位比对不一致就重新下载这段校验命令看着简单但它是排除「装到一半报 I/O 错误」的第一道防线。Windows 宿主机可以用 PowerShell 的Get-FileHash达到同样目的。3.3 Ubuntu 安装过程中的分区与账户设置开机进入 Ubuntu 安装界面语言选中文或英文都行我习惯英文避免终端里中文路径带来的编码问题。安装类型选「最小安装」还是「正常安装」——如果你确定只跑 ROS最小安装能省不少空间但后面装 ROS 依赖时可能缺一些基础库新手还是选正常安装稳妥。分区这一步选「清除整个磁盘并安装 Ubuntu」因为虚拟磁盘本来就是空的不用担心误伤。用户名和密码记牢后面sudo全靠它。安装过程大约 15 到 30 分钟取决于宿主机性能。装完提示重启记得在重启前把 ISO 从虚拟光驱里「断开连接」否则又会从光盘启动。注意第一次进桌面后先跑一次sudo apt update sudo apt upgrade -y把系统补丁打全再装 VMware Tools现在叫 open-vm-tools否则分辨率拖影、剪贴板不通这些小毛病会一直烦你。sudo apt install -y open-vm-tools open-vm-tools-desktop # open-vm-tools 提供宿主机与虚拟机的时间同步、共享文件夹支持 # desktop 版本额外提供剪贴板共享和自适应分辨率装完重启一次屏幕能自动铺满窗口、宿主机复制的内容能粘进虚拟机说明工具生效了。这一步不做后面在虚拟机里敲长命令全靠手打效率低得离谱。4. 在 Ubuntu 20.04 上安装 ROS Noetic源、密钥、环境变量三步走4.1 配置软件源与密钥ROS 的 apt 源不在 Ubuntu 默认列表里得手动加。先确保universe仓库开启再添加 ROS 源。这里有个坑网上很多老教程用的密钥服务器是hkp://keyserver.ubuntu.com:80国内网络环境下经常超时我一般换成hkp://keyserver.ubuntu.com:80的 443 端口版本或者直接用curl拉取密钥文件。# 开启 universe 仓库并更新索引 sudo apt install -y software-properties-common sudo add-apt-repository universe -y sudo apt update # 添加 ROS Noetic 源注意 $(lsb_release -cs) 在 20.04 上会展开为 focal sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main /etc/apt/sources.list.d/ros-latest.list # 用 curl 方式拉取密钥比 apt-key 更稳apt-key 在新版系统里已标记废弃 sudo apt install -y curl curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key | sudo apt-key add -$(lsb_release -cs)这行别手写死focal虽然结果一样但用命令展开能避免以后换系统时忘记改。密钥导入成功后sudo apt update不应该再报NO_PUBKEY的警告如果报了说明密钥没进去回头检查 curl 那步是不是被网络拦了。4.2 安装 ROS 桌面完整版ROS 的安装包分几个层级ros-noetic-desktop-full包含 ROS、rqt、rviz、机器人通用库和 2D/3D 仿真器是学导航和 SLAM 的标配ros-noetic-desktop少了仿真器ros-noetic-ros-base只有核心通信库。新手直接上 full别省那点空间后面缺 Gazebo 再补装更麻烦。sudo apt update sudo apt install -y ros-noetic-desktop-full # 安装体积约 2GB 左右下载时间取决于源的速度 # 如果卡在某个包上可以换国内镜像源把 sources.list.d 里的地址替换掉安装过程中如果出现E: Sub-process /usr/bin/dpkg returned an error code大概率是某个包配置失败先跑sudo dpkg --configure -a修复再重新apt install。这个报错在磁盘空间不足时也会出现装之前df -h看一眼根分区余量。4.3 初始化 rosdep 与环境变量rosdep是 ROS 的依赖管理工具装包时自动解析系统依赖不初始化的话后面编译工作空间会各种缺库。初始化分两步先rosdep init写配置文件再rosdep update拉取索引。国内网络下raw.githubusercontent.com经常连不上rosdep update会卡住或超时常见做法是换用本地镜像的 rosdistro 索引或者多试几次。# 初始化 rosdep sudo rosdep init rosdep update # 把 ROS 环境变量写入 bashrc每次开终端自动生效 echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc # 验证环境变量是否生效 echo $ROS_DISTRO # 应输出 noeticsource那行必须写进~/.bashrc只在当前终端 source 一次关掉窗口就失效下次开终端roscore直接 command not found。echo $ROS_DISTRO是最快的自检手段输出noetic说明环境变量链路通了。4.4 安装构建工具与创建 catkin 工作空间ROS 的包不是直接扔在系统目录里开发的得有自己的 catkin 工作空间。先装python3-rosdep、python3-rosinstall这些构建工具再建目录结构。# 安装常用构建和工具链 sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential # 创建 catkin 工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make source devel/setup.bashcatkin_make第一次跑会编译基础包输出一堆日志最后看到[100%] Built target就算成功。devel/setup.bash也要写进~/.bashrc否则你自己写的包编译完找不到。工作空间目录名catkin_ws是社区惯例不是强制但跟着惯例走别人给的命令你能直接抄。5. 装完必做的验证与排错从 roscore 到 talker/listener 全链路自检5.1 最小验证链路roscore 能不能起来装完 ROS 第一件事不是急着跑 demo而是确认roscore能正常启动。开一个终端敲roscore正常输出会打印 ROS master 的地址、ROS_MASTER_URI 和几个参数服务器信息。如果报Command roscore not found回去检查~/.bashrc里 source 那行有没有写对路径如果报端口占用说明之前有残留进程killall roscore清掉再试。# 终端 1启动 ROS master roscore # 终端 2确认节点列表此时应该只有 /rosout rosnode listrosnode list能返回/rosout说明 master 和节点通信正常这是整条链路的地基。地基不稳后面跑什么都是玄学。5.2 talker/listener 双向验证roscore起来后另开两个终端分别跑 talker 和 listener。talker 每秒发一条hello world消息listener 收到后打印出来。两个终端都能看到消息流动才算 ROS 通信真正跑通。# 终端 2发布者 rosrun roscpp_tutorials talker # 终端 3订阅者 rosrun roscpp_tutorials listener如果 talker 报[ERROR] ... Cannot locate node说明roscpp_tutorials包没装sudo apt install ros-noetic-roscpp-tutorials补上。如果 listener 收不到消息先rostopic list看/chatter话题在不在再rostopic echo /chatter直接看数据流逐层缩小范围比瞎猜快得多。5.3 常见翻车现场与修复对照现象原因解决apt update报 NO_PUBKEYROS 密钥未导入或过期重新执行 curl 导入密钥那步rosdep update超时访问 rosdistro 索引受阻换本地镜像索引或重试多次catkin_make报缺 Python 模块未装 python3-rosdep 等工具补装构建工具链后重跑虚拟机内分辨率无法自适应未装 open-vm-tools-desktopapt install后重启roscore端口被占用上次进程未退出killall roscore后重启这张表是我自己踩过和帮别人修过的合集遇到问题先对表八成能定位到。剩下两成看终端报错的第一行ROS 的报错信息通常第一行就点明了缺什么包或哪个路径不对。5.4 快照装完立刻打一个后悔药环境跑通之后第一件事是在 VMware 里打快照命名成ros-noetic-clean。后面不管装什么包把系统搞崩了回滚到这个点十分钟恢复比重新装一遍系统加 ROS 快一个数量级。我一般会在装完 ROS、装完某个大依赖、跑通某个 demo 之后各打一个快照形成一条时间线出问题能精确回退到某个状态而不是一刀切回原点。6. 收尾验证用一个小工作空间确认整条工具链真的通了前面跑通 talker/listener 只证明 ROS 运行时没问题但开发链路写包、编译、运行还没验证。我习惯在收尾时建一个最小功能包从catkin_create_pkg到catkin_make再到rosrun走一遍全通了才算这套环境真正可用。# 在 catkin 工作空间里创建一个最小包 cd ~/catkin_ws/src catkin_create_pkg my_first_pkg roscpp rospy std_msgs # 回到工作空间根目录编译 cd ~/catkin_ws catkin_make source devel/setup.bash # 确认包能被 ROS 找到 rospack find my_first_pkgrospack find返回包的绝对路径说明工作空间的环境变量和包索引都正常。这一步过了你就可以往src里扔自己的节点代码编译运行不会再有环境层面的拦路虎。再补一个我每次都会做的检查确认ROS_PACKAGE_PATH里包含你的工作空间。echo $ROS_PACKAGE_PATH # 正常应包含 /opt/ros/noetic/share 和 ~/catkin_ws/src如果只看到/opt/ros/noetic/share说明devel/setup.bash没 source 或者没写进~/.bashrc回头补上。这个变量决定了 ROS 能不能找到你自己写的包很多人编译成功但rosrun找不到包根子就在这。最后说个习惯。从那以后我每次装完一套 ROS 环境都会按「roscore → talker/listener → 建包编译 → 打快照」这个顺序强制走一遍四步全绿才认为环境交付。中间任何一步报错宁可停下来修也不带着隐患往下装因为 ROS 的依赖是链式的前面一个小问题拖到后面会放大成一片报错排查成本翻好几倍。这套流程帮我省下的时间远比多花的那二十分钟多。希望帮到你。本文还有配套的精品资源点击获取