ROS环境彻底卸载与纯净安装指南:从清理到部署完整实践

1. 项目概述:一次彻底的ROS环境重建

搞机器人开发,尤其是用ROS(Robot Operating System)的朋友,估计都经历过环境崩掉的绝望。不管是版本升级、依赖冲突,还是手滑误操作,一个不干净的ROS环境就像房间里堆满的杂物,新项目根本无从下手。我最近就因为从ROS Noetic迁移到ROS 2 Humble,被旧环境残留的“幽灵”依赖折腾得够呛,最终决定彻底推倒重来。这个过程远不是sudo apt remove ros-*那么简单,它涉及到包管理、环境变量、工作空间源码、甚至系统级配置的深度清理。

这篇文章,就是我这次“血泪史”的完整复盘和总结。我将详细拆解在Ubuntu系统上,如何安全、彻底地卸载一个已有的ROS发行版(以ROS Noetic和ROS 2 Humble为例),并从头开始安装一个纯净的新环境。无论你是ROS 1的老用户想尝鲜ROS 2,还是单纯想解决当前环境“玄学”报错,这篇手把手的指南都能帮你避开我踩过的所有坑,实现一次真正“亲测有效”的环境重置。我们会从最根本的清理逻辑讲起,覆盖所有可能残留的角落,再一步步搭建起稳固的新环境。

2. ROS卸载的深度解析与“外科手术式”清理

很多人认为卸载ROS就是删除软件包,这其实是个巨大的误区。一个完整的ROS环境由四层构成:APT软件包用户环境配置工作空间源码与构建产物、以及潜在的全局配置与缓存。只清理第一层,后三层留下的“残骸”就是未来所有问题的根源。

2.1 核心清理逻辑与潜在风险

为什么不能简单粗暴地sudo apt purge ros-*?首先,通配符ros-*可能误伤名称中包含“ros”的其他无关软件包,导致系统不稳定。其次,ROS的核心包(如ros-noetic-desktop-full)与数百个依赖包形成复杂的网状结构,APT在卸载时,如果这些依赖包也被其他系统软件需要,它们会被保留。这些残留的依赖库版本可能与新ROS版本冲突。

更隐蔽的是环境变量。ROS依赖source /opt/ros/<distro>/setup.bash将大量路径注入到你的终端会话中。卸载软件包后,/opt/ros/<distro>/目录被删除,但如果你在~/.bashrc中保留了source命令,或者之前source过的工作空间devel/setup.bashinstall/local_setup.bash还在,那么终端里就会存在指向不存在路径的变量,导致任何ros*roscd等命令报“找不到命令”或“目录不存在”的错误,污染你的命令行环境。

工作空间(catkin或colcon build)是另一个重灾区。你编写的所有源码、以及编译生成的build,devel,install目录,都独立于APT管理。即使卸载了系统ROS包,这些目录依然存在。如果你在新环境中不小心source了旧工作空间的setup文件,就会引入旧的、可能不兼容的库和消息定义,引发难以调试的链接错误或运行时崩溃。

2.2 分步式彻底卸载操作指南

基于以上逻辑,我们必须进行分层、精确的清理。以下操作假设你当前系统安装的是 ROS Noetic 或 ROS 2 Humble/Humble,请根据你的实际情况替换<distro>noetic,humble,foxy等。

第一步:精确移除ROS软件包首先,通过APT精确移除ROS核心元包及其相关包,而不是使用通配符。

# 对于 ROS Noetic sudo apt remove --purge ros-noetic-* # 对于 ROS 2 Humble sudo apt remove --purge ros-humble-*

--purge参数会同时删除软件包的配置文件。这条命令会移除所有以ros-<distro>-开头的包,相对安全。执行后,APT会列出将被移除的包列表,请务必快速浏览一下,确认没有误伤关键系统包(如python3-rosdep这类工具包可能也会被移除,这没关系)。

第二步:清理残留依赖和配置ROS安装时会引入大量依赖。卸载主包后,这些依赖可能变成“无人认领”的孤儿包,占用空间且可能冲突。我们需要清理它们,并修复可能的包数据库问题。

# 自动移除不再需要的依赖包 sudo apt autoremove --purge # 清理下载的软件包缓存(可选,可释放空间) sudo apt clean # 检查并修复损坏的依赖关系 sudo apt --fix-broken install

第三步:清除环境变量配置这是关键一步,确保新开终端时不会自动加载不存在的ROS环境。

  1. 打开你的Shell配置文件(通常是~/.bashrc,如果你使用zsh则是~/.zshrc)。
    nano ~/.bashrc
  2. 仔细检查文件末尾,找到与ROS相关的source行。它们通常长这样:
    source /opt/ros/noetic/setup.bash source ~/catkin_ws/devel/setup.bash # 或者对于ROS 2 source /opt/ros/humble/setup.bash source ~/ros2_ws/install/local_setup.bash
  3. 在这些行的行首添加#符号将其注释掉,或者直接删除这些行。
    # source /opt/ros/noetic/setup.bash # source ~/catkin_ws/devel/setup.bash
  4. 保存并退出编辑器(在nano中按Ctrl+X,然后按Y,再按Enter)。
  5. 让当前终端立即生效(或者直接关闭终端重新打开):
    source ~/.bashrc

第四步:核弹级选项——删除工作空间如果你确定不再需要旧项目,或者想从一个绝对干净的状态开始,可以直接删除整个工作空间目录。此操作不可逆,请务必先确认已备份重要源码!

# 假设你的工作空间在 ~/catkin_ws 或 ~/ros2_ws rm -rf ~/catkin_ws ~/ros2_ws

如果你有多个工作空间,请一并处理。如果不确定,可以先重命名目录作为备份:

mv ~/catkin_ws ~/catkin_ws_backup

第五步:清理用户级缓存和配置一些ROS工具会在你的家目录下生成缓存和配置文件,例如~/.ros/。这个目录存放着节点日志、参数缓存等。彻底清理可以避免旧缓存干扰。

rm -rf ~/.ros/

对于ROS 2,可能还有~/.ros2/目录(如果存在)。

第六步(可选但推荐):重置rosdeprosdep是用于安装系统依赖的工具。它的缓存可能包含旧版本的信息。重置它有助于在新安装时获取正确的依赖列表。

sudo rm -rf /etc/ros/rosdep/sources.list.d/20-default.list sudo rosdep init # 这一步可能会失败,如果提示文件已存在,可以忽略 rosdep update

重要提示:在执行任何删除命令(尤其是rm -rf)前,请反复确认路径。一个在根目录下误打的空格(如rm -rf / catkin_ws)可能导致灾难性后果。建议先使用ls命令列出目录确认。

完成以上所有步骤后,你的系统应该已经基本清除了ROS的痕迹。可以通过在终端中输入roscoreros2等命令来验证,系统应该提示“命令未找到”。此时,我们便拥有了一个干净的“手术台”,可以开始安装新的ROS了。

3. ROS安装的精细化部署与验证

卸载干净后,安装过程反而相对标准。但“标准”不等于可以无脑复制粘贴,每一步的选择和验证都决定了最终环境的稳定性。这里我们以在Ubuntu 22.04上安装ROS 2 Humble Hawksbill为例,因为这是当前(撰写时)推荐的LTS(长期支持)版本。ROS Noetic在Ubuntu 20.04上的安装流程类似,主要区别在于软件源和包名。

3.1 安装前的系统准备与源配置

一个常见的误区是直接添加ROS源,而忽略了系统软件源和基础工具的配置。这可能导致后续安装因网络或依赖问题失败。

首先,确保你的Ubuntu系统软件源是最新的,并且启用了“universe”仓库,这是许多ROS依赖所在的社区维护仓库。

sudo apt update && sudo apt upgrade -y sudo apt install software-properties-common -y sudo add-apt-repository universe

接下来,需要将ROS 2的官方软件源添加到你的系统。这里强烈建议使用国内镜像源以大幅提升下载速度。清华大学和中科大的镜像都是优秀的选择。以下以清华源为例:

# 设置locale,确保正确解析字符 sudo apt update && sudo apt install locales -y sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8 # 添加ROS 2 GPG密钥 sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 将ROS 2仓库源添加到系统(使用清华镜像) echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

注意$(lsb_release -cs)会自动获取你的Ubuntu版本代号(如Jammy)。确保你安装的ROS 2版本与Ubuntu版本兼容。Humble支持Jammy(22.04)。

3.2 核心软件包安装与差异化选择

更新软件源缓存后,就可以安装ROS 2了。ROS 2提供了不同规模的套件:

  • ros-humble-ros-base:仅包含通信库、消息包和命令行工具。适合嵌入式计算或对空间有严格限制的场景。
  • ros-humble-desktop:包含ros-base外加GUI工具(如Rviz2、rqt)和部分教程。适合大多数桌面开发者。
  • ros-humble-desktop-full:包含desktop外加机器人仿真库(如Gazebo)、导航、感知等大量功能包。功能最全,但体积也最大。

对于初学者和大多数开发者,我推荐安装ros-humble-desktop。它提供了必要的开发工具,又不会像desktop-full那样引入过多你可能暂时用不到的包,减少潜在冲突。

sudo apt update sudo apt install ros-humble-desktop

安装过程会持续一段时间,取决于你的网速,需要下载几百MB到上GB的数据。如果中途遇到某个包下载失败(网络超时),可以重复运行sudo apt install ros-humble-desktop,APT会继续尝试下载未完成的包。

3.3 环境配置与持久化生效

安装完成后,ROS 2的核心文件位于/opt/ros/humble/。要让系统知道如何使用它们,必须“激活”环境。

source /opt/ros/humble/setup.bash

这条命令只在当前终端窗口有效。一旦关闭终端,环境就失效了。为了永久生效,我们需要将这条命令添加到Shell的启动配置文件中,就像我们之前清理旧环境时做的那样。

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

这样,每次新开终端,ROS 2环境都会自动配置好。如果你使用其他Shell(如zsh),请将~/.bashrc替换为对应的配置文件(如~/.zshrc)。

3.4 安装后必备工具与依赖管理

仅有ROS核心还不够,我们还需要两个关键工具:colconrosdep

  • colcon:是ROS 2的构建工具(相当于ROS 1的catkin_make)。用于编译你的工作空间。
    sudo apt install python3-colcon-common-extensions
  • rosdep:是一个用于安装ROS包所需系统依赖的利器。它通过读取包内的package.xml文件,自动安装所有必要的系统库(如OpenCV、PCL等)。在编译任何来自社区的ROS包之前,都应该先运行rosdep install
    sudo apt install python3-rosdep2 # 初始化rosdep(如果之前彻底清理过) sudo rosdep init # 更新rosdep的数据库(从ROS官方服务器获取依赖规则) rosdep update

    实操心得rosdep update有时会因为网络问题失败。如果遇到,可以尝试修改其源为国内镜像。编辑/etc/ros/rosdep/sources.list.d/20-default.list,将其中的raw.githubusercontent.comURL替换为ghproxy.com代理的URL或国内镜像地址。这是一个常见的提速技巧。

3.5 安装完整性验证与快速测试

安装完成后,必须进行验证。一个完整的验证流程应该覆盖核心命令行工具、C++和Python客户端库、以及可视化工具。

  1. 基础命令测试:打开一个新的终端(确保环境已加载),运行:

    ros2 --help

    你应该能看到一长串可用的ros2子命令列表,而不是“命令未找到”。

  2. 节点通信测试(C++/Python):ROS的核心是进程间通信。我们启动一个“说话”的节点和一个“听话”的节点来测试。

    • 终端1,启动一个发布字符串消息的节点(C++实现):
      ros2 run demo_nodes_cpp talker
    • 终端2,启动一个订阅并打印这些消息的节点(Python实现):
      ros2 run demo_nodes_py listener

    你应该在终端1看到Publishing: 'Hello World: <计数>',在终端2看到I heard: [Hello World: <计数>]。这证明ROS 2的核心通信机制(DDS)、C++和Python客户端库都工作正常。

  3. 可视化工具测试:关闭上述两个节点(按Ctrl+C)。测试Rviz2,这是ROS最重要的可视化工具。

    rviz2

    如果Rviz2图形界面成功启动,说明GUI相关的依赖也已就绪。

  4. 创建工作空间测试:最后,测试我们自己的开发流程是否通畅。

    mkdir -p ~/ros2_ws/src cd ~/ros2_ws colcon build

    即使src目录为空,colcon build也应该能成功执行,并生成build,install,log目录。然后在工作空间内source本地配置:

    source install/local_setup.bash

    至此,一个完整、纯净、可用的ROS 2开发环境已经搭建成功。

4. 跨版本迁移与混合环境管理实战

有时我们的需求不是简单的卸载重装,而是需要在同一台机器上维护多个ROS版本(例如,同时进行ROS 1 Noetic和ROS 2 Humble的开发),或者从ROS 1平滑迁移到ROS 2。这比单一环境管理要复杂得多,核心矛盾在于环境变量的隔离。

4.1 多版本共存的环境隔离方案

目标是在同一用户下,根据需要灵活切换ROS 1或ROS 2环境,且互不干扰。绝对不要将两个版本的setup.bash同时source~/.bashrc

方案一:手动切换(推荐,清晰可控)不在~/.bashrc中固化任何ROS版本。每次打开终端后,根据需要手动source

# 需要ROS 1 Noetic时 source /opt/ros/noetic/setup.bash # 需要ROS 2 Humble时 source /opt/ros/humble/setup.bash

为了更方便,可以创建别名(alias)放在~/.bashrc中:

# 在 ~/.bashrc 末尾添加 alias sros1='source /opt/ros/noetic/setup.bash' alias sros2='source /opt/ros/humble/setup.bash' alias sros1ws='source ~/catkin_ws/devel/setup.bash' alias sros2ws='source ~/ros2_ws/install/local_setup.bash'

这样,在终端里输入sros1就切换到ROS 1全局环境,输入sros1ws则切换到ROS 1的某个工作空间环境(会同时继承全局环境)。ROS 2同理。这种方法逻辑清晰,不易混淆。

方案二:使用环境管理脚本或工具对于更复杂的场景,可以编写简单的Shell函数来切换环境。例如,在~/.bashrc中添加:

function set_ros1() { # 取消可能存在的其他ROS环境 unset ROS_DISTRO unset ROS_VERSION unset ROS_PACKAGE_PATH # 设置ROS 1环境 source /opt/ros/noetic/setup.bash echo "ROS 1 Noetic environment activated." } function set_ros2() { # 取消可能存在的其他ROS环境 unset ROS_DISTRO unset ROS_VERSION # 设置ROS 2环境 source /opt/ros/humble/setup.bash echo "ROS 2 Humble environment activated." }

使用set_ros1set_ros2命令来切换。这个函数尝试先清理一些关键环境变量,但请注意,环境变量的完全清理非常困难,因此手动切换(方案一)在实践中更可靠。

核心原则一个终端会话,只激活一个ROS发行版的环境。永远不要在同一个终端里先后source两个不同版本的ROS。

4.2 ROS 1向ROS 2的迁移策略与桥接工具

项目从ROS 1迁移到ROS 2并非一蹴而就,尤其是当依赖的某些功能包尚未提供ROS 2版本时。ROS官方提供了ros1_bridge包,它可以在同一台机器上运行,双向转发ROS 1和ROS 2之间的消息,是实现渐进式迁移的关键。

安装ros1_bridge: 前提是系统中已经同时安装了ROS 1和ROS 2。对于Noetic和Humble:

# 首先激活ROS 1环境,安装必要的包 sros1 sudo apt install ros-noetic-ros1-bridge # 然后激活ROS 2环境,安装对应的包 sros2 sudo apt install ros-humble-ros1-bridge

使用ros1_bridge进行通信

  1. 启动ROS 1核心:roscore
  2. 在新的终端,启动ROS 2核心:ros2 daemon start(通常运行ROS 2节点时会自动启动)
  3. 在新的终端,激活混合环境并启动桥接器。这一步至关重要,必须同时加载ROS 1和ROS 2的环境:
    # 先加载ROS 1,再加载ROS 2,最后加载ros1_bridge source /opt/ros/noetic/setup.bash source /opt/ros/humble/setup.bash # 编译ros1_bridge(需要从源码编译以支持自定义消息) # 假设你的工作空间是 ~/bridge_ws mkdir -p ~/bridge_ws/src cd ~/bridge_ws/src git clone -b humble https://github.com/ros2/ros1_bridge.git cd ~/bridge_ws # 编译时需要指定两个版本的ROS路径 colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure
  4. 在编译后的工作空间中启动动态桥接:
    cd ~/bridge_ws source install/local_setup.bash ros2 run ros1_bridge dynamic_bridge
    此时,桥接器会打印出它发现的可桥接的话题。默认情况下,它会自动桥接所有在ROS 1和ROS 2中具有相同消息类型和话题名称的话题。

迁移路径建议

  1. 并行运行:利用ros1_bridge,让新开发的ROS 2组件与已有的ROS 1系统共存并通信。
  2. 逐模块替换:将系统划分为独立模块,逐个将ROS 1模块重写或移植为ROS 2模块,期间通过桥接保持整体系统运行。
  3. 最终切换:当所有关键功能都有ROS 2实现,且经过充分测试后,关闭ROS 1部分和桥接,全面转向ROS 2。

这种混合环境对系统管理要求更高,务必做好笔记,清晰记录每个终端窗口激活的是哪个环境,避免操作混乱。

5. 安装与使用过程中的典型问题全记录

即便按照指南操作,在实际安装和使用ROS时,依然会遇到各种各样的问题。下面是我总结的、最高频出现的几个“坑”及其解决方案。

5.1 软件源与网络问题排查

这是安装失败最常见的原因,尤其是在国内网络环境下。

问题1:sudo apt update时提示GPG errorNO_PUBKEY

Err:5 https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY XXXXXXXXXXXXXXXX

原因与解决:缺少ROS软件源的GPG密钥,或密钥已过期。重新下载并导入密钥:

# 移除可能存在的旧密钥文件 sudo rm -f /usr/share/keyrings/ros-archive-keyring.gpg # 重新下载密钥 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg # 再次更新 sudo apt update

问题2:sudo apt install ros-humble-desktop下载速度极慢或超时。原因与解决:默认的ROS官方源服务器在国外。我们已经换成了清华源。如果依然慢,可以尝试中科大源:

# 备份原有列表 sudo cp /etc/apt/sources.list.d/ros2.list /etc/apt/sources.list.d/ros2.list.bak # 编辑源列表,将 tuna.tsinghua 替换为 mirrors.ustc.edu.cn/ros2 sudo sed -i 's|mirrors.tuna.tsinghua.edu.cn/ros2|mirrors.ustc.edu.cn/ros2|g' /etc/apt/sources.list.d/ros2.list sudo apt update

也可以直接编辑/etc/apt/sources.list.d/ros2.list文件进行修改。

问题3:rosdep update失败,连接raw.githubusercontent.com超时。原因与解决rosdep的默认规则文件托管在GitHub上。解决方法是指定国内镜像或使用代理。

  • 方法A:修改rosdep。编辑/etc/ros/rosdep/sources.list.d/20-default.list,将所有的https://raw.githubusercontent.com替换为https://ghproxy.com/https://raw.githubusercontent.com
  • 方法B:手动下载规则文件。如果修改源无效,可以尝试从Gitee等国内镜像手动下载并放置到对应目录,但此方法较繁琐。

5.2 环境变量冲突与“Command not found”幽灵

问题4:已经安装了ROS,但终端提示ros2: command not foundroscore: command not found原因与解决:根本原因是环境变量没有正确加载。

  1. 检查~/.bashrc:确保source /opt/ros/humble/setup.bash这一行存在且没有被注释。
  2. 手动source:执行source ~/.bashrc或重新打开终端。
  3. 检查路径:确认/opt/ros/humble/bin目录是否存在,并且该目录是否在$PATH环境变量中。可以执行echo $PATH | grep ros查看。
  4. 多版本冲突:如果你安装了多个版本,确保~/.bashrc里只source了你当前想要的那个版本。用echo $ROS_DISTRO可以查看当前激活的发行版。

问题5:编译工作空间时,找不到ROS包(如find_package(roscpp REQUIRED)失败)。原因与解决:这通常是因为你忘记在编译前sourceROS的全局环境。对于catkin (ROS 1):

source /opt/ros/noetic/setup.bash cd ~/catkin_ws catkin_make

对于colcon (ROS 2):

source /opt/ros/humble/setup.bash cd ~/ros2_ws colcon build

务必养成习惯:在编译任何ROS工作空间前,先确认当前终端已source了正确版本的ROS基础环境。

5.3 编译与依赖安装的常见陷阱

问题6:colcon buildcatkin_make编译失败,提示找不到头文件或链接库。原因与解决:99%的情况是缺少系统依赖。这就是rosdep的用武之地。

  1. 在工作空间的src目录下,确保每个包都有正确的package.xml文件。
  2. 在工作空间根目录运行:
    rosdep install --from-paths src --ignore-src -r -y
    • --from-paths src:从src目录查找包。
    • --ignore-src:忽略已经是源码的包(即src下的包)。
    • -r:遇到错误继续安装,而不是停止。
    • -y:对所有提示回答“yes”。 这个命令会自动安装所有在package.xml中声明但系统缺失的依赖。

问题7:编译时出现Python版本警告或错误(例如Could not find a version that satisfies the requirement...)。原因与解决:ROS Noetic默认使用Python 3,ROS 2 Humble也使用Python 3。但你的系统可能有多个Python版本,或者pip指向了错误的版本。

  1. 确认Python版本:python3 --version
  2. 使用pip3而不是pip来安装Python包。
  3. 对于ROS工作空间内的Python包,尽量使用rosdep来管理依赖,而不是手动pip install。如果必须用pip,可以考虑在虚拟环境(venv)中操作,避免污染系统Python环境。

问题8:Gazebo无法启动,或启动后黑屏、模型加载失败。原因与解决:Gazebo的依赖复杂,且对硬件加速(显卡驱动)有要求。

  1. 安装显卡驱动:对于NVIDIA显卡,务必安装专有驱动。可以通过“软件和更新”->“附加驱动”选项卡选择安装,或使用命令行ubuntu-drivers工具。
  2. 安装完整Gazebo:ROS桌面版通常只安装Gazebo的ROS插件包,Gazebo本体可能没装全。可以尝试安装完整版:
    sudo apt install gazebo11 libgazebo11-dev # 对于ROS Noetic # 或 sudo apt install gazebo-fortress libgazebo-fortress-dev # 对于ROS 2 Humble (Gazebo Fortress)
  3. 环境变量:确保~/.bashrc中有export SVGA_VGPU10=0(对于某些VMware虚拟机)以及正确的GAZEBO_MODEL_PATH等环境变量设置。

5.4 快速问题诊断清单

当遇到问题时,可以按以下清单自查,能解决大部分“玄学”问题:

问题现象优先检查项常用命令/操作
任何ros2/ros1命令未找到1. 是否source ~/.bashrc或重开终端?
2.~/.bashrcsource路径是否正确?
3. 是否安装了对应版本的ROS包?
echo $ROS_DISTRO,which ros2,ls /opt/ros/
编译找不到ROS包/头文件1. 编译前是否source了ROS基础环境?
2.package.xml中依赖是否写对?
3. 是否用rosdep安装了系统依赖?
source /opt/ros/<distro>/setup.bash,rosdep check .
节点无法通信1.roscore(ROS 1) 或ros2 daemon是否在运行?
2. 网络配置(多机时)是否正确?
3. 话题/服务名称是否拼写正确?
ros2 topic list,rostopic list,ping <hostname>
Gazebo/Rviz2 黑屏/闪退1. 显卡驱动是否安装?
2. 是否启用了3D加速(虚拟机)?
3. 相关环境变量(如DISPLAY)是否正确?
nvidia-smi,glxinfo | grep render,echo $DISPLAY
rosdep update失败1. 网络能否访问GitHub?
2. 是否修改了20-default.list为国内镜像?
ping raw.githubusercontent.com, 检查/etc/ros/rosdep/sources.list.d/

记住,ROS社区的Wiki、问答网站和GitHub Issues是极其宝贵的资源。遇到错误信息,直接将其复制到搜索引擎中,很大概率能找到解决方案。耐心和细致地阅读错误日志,是解决ROS问题的终极法宝。