从 0 开始:Mac 下 UTM 虚拟机安装 ROS Noetic(Ubuntu 20.04)

ROS(Robot Operating System)是机器人开发的核心框架,Mac 系统因内核和依赖限制无法直接安装 ROS,通过 UTM 虚拟机搭建 Ubuntu 20.04 环境是最便捷的解决方案。本文完整记录从 0 开始在 Mac 的 UTM 中安装 Ubuntu 20.04 + ROS Noetic 的全过程,解决安装中遇到的源配置、权限异常、硬盘挂载、网络访问等核心问题,适合 ROS 新手参考复刻。

一、环境准备

  1. 软件版本匹配(关键!)
    表格
    组件 版本 / 规格 说明
    主机系统 MacOS(任意版本) 无需额外配置,仅需安装 UTM
    虚拟机工具 UTM(最新版) 免费开源,可从 App Store 或官网下载
    Ubuntu 镜像 Ubuntu 20.04.6 Desktop AMD64 ROS Noetic 仅适配 Ubuntu 20.04(focal)
    ROS 版本 Noetic Ninjemys 对应 Ubuntu 20.04,稳定版
    虚拟机配置 内存≥4G,硬盘≥150G ROS 完整版安装需足够存储空间
  2. UTM 创建虚拟机(基础步骤)
    打开 UTM,点击「新建」→ 选择「Virtualize」→ 选择「Linux」;
    挂载下载好的 Ubuntu 20.04 ISO 镜像文件;
    配置虚拟机参数:内存建议 4G+,硬盘容量设置 150G+;
    启动虚拟机,进入 Ubuntu Live 模式(选择「Try Ubuntu」)。
    二、Ubuntu 系统安装(解决 Live 模式核心限制)
  3. 问题背景
    Live 模式下 Ubuntu 运行在内存中,存在空间不足、系统服务不全、依赖链缺失等问题,无法安装 ROS 完整版,必须将系统永久安装到虚拟机硬盘。
  4. 安装向导启动(解决权限报错)
    在 Live 桌面点击「Install Ubuntu」,若提示Error getting authority: Could not connect: No such file or directory,执行以下命令修复权限:
    bash
    运行

重启权限管理服务

sudo systemctl restart dbus

授予图形界面权限

sudo xhost +si:localuser:root

重置显示环境变量

export DISPLAY=:0

sudo -E env "DISPLAY=$DISPLAY" ubiquity

  1. 硬盘分区配置(关键!)

安装类型选择「其他选项」,对 150G 硬盘进行手动分区:

/dev/sda1:EFI 分区,512M,文件系统选择FAT32(自动生成,无需修改);

/dev/sda2:根分区(/),剩余全部空间,文件系统选择Ext4,勾选「格式化此分区」;

确认「安装启动引导器的设备」为/dev/sda(整个硬盘),点击「现在安装」;

按提示完成时区(上海)、用户名 / 密码设置,等待安装完成。

  1. 修复「重启仍进入 Live 模式」问题

安装完成后重启,若仍进入 Ubuntu Live 界面,原因是 UTM 优先从 ISO 镜像启动:

关闭虚拟机,在 UTM 虚拟机设置中找到「CD/DVD」选项;

将挂载的 ISO 镜像改为「None」,彻底移除镜像文件;

重新启动虚拟机,选择 GRUB 菜单中的「Ubuntu」,进入完整安装的系统。

三、ROS Noetic 安装(核心步骤 + 问题解决)

  1. 系统基础环境更新
    bash
    运行

更新系统包缓存并升级

sudo apt update && sudo apt upgrade -y

安装ROS必备基础工具

sudo apt install -y curl wget gnupg2 lsb-release build-essential

  1. 配置 ROS 国内源(解决访问慢 / 签名失败)

问题:官方源访问慢 + 公钥验证失败

原生 ROS 源依赖 GitHub 和海外服务器,国内访问易超时,且公钥导入失败会提示NO_PUBKEY F42ED6FBAB17C654。

解决方案:使用中科大源

bash

运行

添加中科大ROS源(适配Ubuntu 20.04)

添加 ROS 源

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

添加密钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

更新软件包列表

sudo apt update

运行

安装ROS Noetic完整版(含GUI、仿真、教程)

sudo apt install -y ros-noetic-desktop-full

  1. 解决 rosdep 初始化失败(最大坑!)

问题现象

执行sudo rosdep init时提示:

bash

运行

ERROR: cannot download default sources list from:

https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list

Website may be down.

原因:国内网络无法访问 GitHub 的raw.githubusercontent.com域名。

解决方案:安装 rosdepc(国内镜像版)

bash

运行

卸载原生rosdep

sudo apt remove -y python3-rosdep

安装pip工具

sudo apt install -y python3-pip

安装rosdepc(清华源加速)

sudo pip install rosdepc -i https://pypi.tuna.tsinghua.edu.cn/simple

初始化+更新(国内镜像,100%成功)

sudo rosdepc init

rosdepc update

  1. 配置 ROS 环境变量(永久生效)

bash

运行

将环境变量写入.bashrc,终端启动自动加载

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

立即生效环境变量

source ~/.bashrc

  1. 验证 ROS 安装成功

bash

运行

启动ROS核心(无红色报错则成功)

roscore

新开终端启动可视化工具(验证GUI功能)

rviz

新开终端启动仿真工具(验证仿真功能)

gazebo

✅ 成功标志:

roscore终端输出started core service /rosout;

rviz能打开 3D 可视化窗口,gazebo能加载仿真界面。

四、常见问题汇总(避坑指南)

表格

问题现象 原因 解决方案

df -lh看不到 150G 硬盘分区 分区未挂载,仍在 Live 模式 移除 ISO 镜像,从硬盘启动完整系统

E: Unable to locate package ros-noetic-desktop-full ROS 源未正确添加 / 生效 直接指定focal版本添加源,而非依赖lsb_release -sc自动获取

zsys daemon connection refused Live 模式下系统快照服务未启动 忽略该警告,不影响 ROS 安装和使用

ubiquity安装向导无法启动 图形界面权限 / DBUS 服务未启动 重启 dbus 服务 + 重置 DISPLAY 环境变量

rosdepc update超时 国内镜像偶尔波动 多执行 1-2 次,或检查虚拟机网络连接

五、最终验证命令(一键回顾)

bash

运行

1. 验证硬盘挂载(确认/dev/sda2为根目录)

df -lh

2. 验证ROS环境

source /opt/ros/noetic/setup.bash

roscore

3. 验证核心工具

rviz

gazebo

总结

Mac 下 UTM 安装 ROS 的核心逻辑:

先将 Ubuntu 完整安装到虚拟机硬盘,彻底避开 Live 模式的空间 / 权限限制;

改用国内源(中科大 / 清华)解决 ROS 源访问慢、公钥验证失败问题;

用 rosdepc 替代原生 rosdep,解决 GitHub 资源访问限制;

确保硬盘分区正确挂载,为 ROS 安装提供足够存储空间。

完成以上步骤后,即可在 Mac 的 UTM 中拥有完整的 ROS Noetic 开发环境,满足机器人开发、仿真、可视化等全流程需求。

相关推荐
Ruiery23 分钟前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
丰锋ff3 小时前
压缩命令笔记
linux
GeW4 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
by209994 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
cq林志炫5 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
无人生还别怕6 小时前
如何搭建k8s服务(containerd部署)
linux·云原生·容器·kubernetes·openanolisos
全栈探索者7 小时前
从素材到成片:ffmpeg 拼接、转码与字幕,一条流水线交付
macos·ffmpeg·aigc·comfyui·视频剪辑
企鹅侠客7 小时前
Linux CPU 负载平均值(Load Average)详解:从原理到实践
linux·运维·服务器·服务器负载
易点云徐源7 小时前
HP 暗影精灵 PRO 16 安装双系统后,开机直接进入 Windows,按 F9 才能进入 Ubuntu:GRUB 菜单不显示的处理方法
linux·运维·ubuntu
第404号工位8 小时前
离职退电脑前别只点“清空回收站”!手把手教你彻底抹除凭证与数字痕迹
linux·python·架构