Ubuntu 20.04上ROS2 Humble安装保姆级教程(含网络问题解决与编译避坑)
Ubuntu 20.04上ROS2 Humble安装全流程指南与疑难解析
作为一名长期从事机器人开发的工程师,我深知在Ubuntu系统上搭建ROS2环境时可能遇到的各种"坑"。本文将分享一套经过实战验证的安装流程,特别针对网络连接问题和编译错误提供解决方案,帮助开发者一次性完成ROS2 Humble的安装配置。
1. 系统准备与环境检查
在开始安装ROS2之前,确保系统环境配置正确至关重要。许多安装失败的问题都源于基础环境的不兼容或配置错误。
首先检查系统语言环境编码是否为UTF-8,这对于ROS2的正常运行是必需的:
locale如果输出中LANG和LC_ALL不是en_US.UTF-8,需要执行以下命令进行设置:
sudo apt update && sudo apt install locales 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注意:修改语言环境后需要重新登录或重启终端才能生效
接下来更新系统软件包并安装必要的基础工具:
sudo apt update && sudo apt upgrade -y sudo apt install curl gnupg2 lsb-release -y2. ROS2软件源配置与网络问题解决
ROS2的安装需要从官方仓库下载软件包,但由于网络原因,国内用户常遇到连接问题。以下是经过优化的配置方案。
2.1 配置国内镜像源
为提高下载速度,建议先更换Ubuntu的软件源为国内镜像。以中科大源为例:
sudo sed -i 's|http://.*archive.ubuntu.com|http://mirrors.ustc.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://.*security.ubuntu.com|http://mirrors.ustc.edu.cn|g' /etc/apt/sources.list2.2 添加ROS2 GPG密钥
ROS2软件包需要验证GPG密钥,但官方密钥服务器可能无法访问。我们可以直接下载密钥文件:
sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/rosdistro/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg如果遇到raw.githubusercontent.com无法访问的问题,可以修改hosts文件:
echo "185.199.108.133 raw.githubusercontent.com" | sudo tee -a /etc/hosts2.3 添加ROS2软件源
使用以下命令添加ROS2 Humble的软件源:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null更新软件包索引:
sudo apt update3. ROS2 Humble安装与依赖处理
3.1 安装核心软件包
ROS2 Humble提供了多种安装变体,推荐安装桌面版(包含GUI工具):
sudo apt install ros-humble-desktop -y对于资源受限的环境,可以选择基础版:
sudo apt install ros-humble-ros-base -y3.2 解决rosdep初始化问题
rosdep是ROS的依赖管理工具,但初始化时经常失败。以下是解决方案:
首先安装rosdep:
sudo apt install python3-rosdep -y如果sudo rosdep init失败,可以手动创建配置文件:
sudo mkdir -p /etc/ros/rosdep/sources.list.d/ echo "yaml https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep.yaml" | sudo tee /etc/ros/rosdep/sources.list.d/20-default.list然后更新rosdep:
rosdep update提示:如果更新过程中出现超时错误,可以尝试多次执行
rosdep update
4. 从源码构建ROS2(可选)
对于需要自定义修改或开发ROS2本身的用户,可以从源码构建。以下是关键步骤:
4.1 准备工作
安装构建工具和依赖:
sudo apt install python3-colcon-common-extensions python3-vcstool -y python3 -m pip install -U flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-import-order flake8-quotes pytest pytest-repeat pytest-rerunfailures4.2 获取源码
创建工作空间并获取源码:
mkdir -p ~/ros2_humble/src cd ~/ros2_humble vcs import --input https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros2/ros2/humble/ros2.repos src4.3 安装依赖
使用rosdep安装依赖:
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"4.4 编译ROS2
使用colcon工具进行编译:
colcon build --symlink-install编译选项说明:
| 选项 | 说明 |
|---|---|
--symlink-install | 使用符号链接而非复制文件,节省空间 |
--packages-up-to | 仅编译指定包及其依赖 |
--packages-select | 仅编译指定包 |
--cmake-args | 传递额外CMake参数 |
5. 环境配置与验证
5.1 设置环境变量
将以下内容添加到~/.bashrc文件中,使ROS2环境变量自动生效:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc如果是从源码构建的,使用以下命令:
echo "source ~/ros2_humble/install/setup.bash" >> ~/.bashrc source ~/.bashrc5.2 验证安装
运行简单的发布/订阅示例验证安装:
在第一个终端运行发布者:
ros2 run demo_nodes_cpp talker在第二个终端运行订阅者:
ros2 run demo_nodes_py listener如果能看到消息传递,说明ROS2安装成功。
6. 常见问题与解决方案
6.1 网络连接问题
- 症状:
raw.githubusercontent.com无法访问 - 解决方案:
- 修改hosts文件(如前面所述)
- 使用国内镜像源替代
- 检查代理设置(如有)
6.2 rosdep初始化失败
- 症状:
sudo rosdep init返回错误 - 解决方案:
- 手动创建配置文件
- 使用国内镜像源
- 检查网络连接
6.3 编译错误
常见编译错误及解决方法:
| 错误类型 | 可能原因 | 解决方案 |
|---|---|---|
| 包找不到 | 依赖未安装 | 运行rosdep install |
| 头文件缺失 | 开发包未安装 | 安装对应的-dev包 |
| 链接错误 | 库路径问题 | 检查LD_LIBRARY_PATH |
6.4 运行时问题
- 症状:
ROS_DOMAIN_ID冲突 - 解决方案:设置不同的
ROS_DOMAIN_ID环境变量 - 命令:
export ROS_DOMAIN_ID=<唯一数字>
7. 性能优化与开发建议
7.1 编译加速
使用并行编译可以显著减少构建时间:
colcon build --symlink-install --parallel-workers 87.2 选择性编译
当只修改了特定包时,可以只重新编译该包:
colcon build --symlink-install --packages-select <包名>7.3 开发工具推荐
- IDE:VS Code + ROS插件
- 调试工具:
rqt_graph,ros2 topic echo - 性能分析:
ros2 run --prefix 'perf record -g'
在实际项目中,我发现保持ROS2环境的干净非常重要。建议为每个项目创建独立的工作空间,并使用colcon的--merge-install选项来避免冲突。
