news 2026/5/25 2:19:52

Ubuntu 20.04上源码编译ROS2 Humble,我踩过的那些坑和最终解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04上源码编译ROS2 Humble,我踩过的那些坑和最终解决方案

Ubuntu 20.04源码编译ROS2 Humble避坑指南:从崩溃边缘到完美运行

当你在Ubuntu 20.04上尝试源码编译ROS2 Humble时,官方文档看起来就像是一份完美的食谱——直到你真正开始动手。作为一名经历过无数次失败才最终成功的开发者,我想分享那些官方文档没告诉你的关键细节和解决方案。

1. 环境准备:那些容易被忽略的细节

在开始之前,大多数人会直接跳到安装步骤,但环境配置中的小细节往往决定了整个过程的成败。

1.1 系统基础配置

首先检查你的Ubuntu 20.04系统是否满足以下基本要求:

  • GCC版本:至少需要GCC 7以上,但建议使用GCC 9或10
  • Python版本:ROS2 Humble需要Python 3.8+
  • 磁盘空间:至少预留15GB空间用于源码和编译

验证GCC版本:

gcc --version

如果版本过低,升级方法:

sudo apt install gcc-9 g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9

1.2 区域设置(locale)的正确配置

区域设置问题会导致各种奇怪的编译错误,特别是当系统默认不是UTF-8时。以下是完整配置流程:

  1. 首先检查当前设置:
locale
  1. 如果输出中没有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
  1. 验证设置是否生效:
locale

2. 网络问题:跨越那道看不见的墙

在安装过程中,网络问题是最常见的障碍之一,特别是对于国内开发者。

2.1 解决raw.githubusercontent.com访问问题

这个域名经常无法访问,导致rosdep initrosdep update失败。解决方法是在/etc/hosts中添加:

185.199.108.133 raw.githubusercontent.com 185.199.109.133 raw.githubusercontent.com 185.199.110.133 raw.githubusercontent.com 185.199.111.133 raw.githubusercontent.com

注意:IP地址可能会变化,如果上述IP失效,可以通过https://www.ipaddress.com/查询最新的IP。

2.2 使用国内镜像源加速

对于国内用户,可以使用清华或中科大的镜像源加速下载:

# 备份原有源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 替换为清华源 sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list sudo sed -i 's@//.*security.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list

对于ROS2的软件源,也可以使用国内镜像:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

3. 依赖安装:避开那些隐藏的陷阱

依赖问题是ROS2安装过程中最令人头疼的部分之一,特别是当某些包无法正常安装时。

3.1 rosdep初始化与更新

rosdep initrosdep update是常见的失败点。如果遇到问题,可以尝试以下步骤:

  1. 手动创建rosdep的sources.list.d文件:
sudo mkdir -p /etc/ros/rosdep/sources.list.d/ sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
  1. 然后运行更新:
rosdep update

如果仍然失败,可以尝试使用--include-eol-distros参数:

rosdep update --include-eol-distros

3.2 跳过特定包的安装

有些包如fastcdr和rti-connext-dds-6.0.1可能会造成问题,可以在安装时跳过它们:

rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

4. 源码编译:优化你的构建过程

当所有依赖都安装完成后,就可以开始编译ROS2源码了,但这个过程也有不少需要注意的地方。

4.1 选择合适的构建工具

ROS2 Humble推荐使用colcon作为构建工具。在编译前,建议安装一些有用的插件:

sudo apt install python3-colcon-common-extensions python3-colcon-mixin

4.2 编译命令与参数

基本的编译命令是:

colcon build --symlink-install

但为了优化编译过程,可以添加以下参数:

  • --parallel-workers:设置并行编译的工作线程数,通常设置为CPU核心数
  • --cmake-args:传递额外的CMake参数
  • --packages-up-to:只编译特定包及其依赖

例如,使用4个线程编译:

colcon build --symlink-install --parallel-workers 4

4.3 解决常见编译错误

在编译过程中可能会遇到各种错误,以下是一些常见问题的解决方法:

  1. 内存不足:如果系统内存不足,可以尝试减少并行编译线程数或增加swap空间:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  1. Python模块缺失:有些ROS2包需要额外的Python模块,可以通过pip安装:
python3 -m pip install -U \ flake8-blind-except \ flake8-builtins \ flake8-class-newline \ flake8-comprehensions \ flake8-deprecated \ flake8-import-order \ flake8-quotes \ "pytest>=5.3" \ pytest-repeat \ pytest-rerunfailures

5. 环境配置与测试

编译完成后,还需要正确配置环境才能使用ROS2。

5.1 设置环境变量

将以下内容添加到~/.bashrc文件中:

source ~/ros2_humble/install/setup.bash

如果你同时安装了多个ROS版本,可以设置一个简单的切换机制:

echo "Which ROS version to use? (1) ROS1 Noetic (2) ROS2 Humble" read choose case $choose in 1) source /opt/ros/noetic/setup.bash;; 2) source ~/ros2_humble/install/setup.bash;; esac

5.2 验证安装

运行以下命令验证ROS2是否安装成功:

ros2 doctor

这个命令会检查你的ROS2环境并报告任何问题。如果一切正常,你应该能看到类似以下的输出:

All 5 checks passed

5.3 运行示例节点

为了进一步验证,可以尝试运行ROS2的示例talker和listener节点:

在一个终端中运行:

ros2 run demo_nodes_cpp talker

在另一个终端中运行:

ros2 run demo_nodes_py listener

如果能看到talker发送消息而listener接收消息,说明你的ROS2 Humble安装完全成功了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 2:12:52

2026年最值得用的10款免费AI写作工具推荐

AI写作工具在2026年迎来了爆发式增长,越来越多的免费工具让普通人也能高效创作。本文整理了10款最值得用的免费AI写作工具,涵盖博客、营销文案、学术写作等多个场景。一、AI Writing Assistant - 全能型免费写作工具AI Writing Assistant(use…

作者头像 李华
网站建设 2026/5/25 2:01:03

2026年元届象GEO优化服务,真实口碑如何?

2026年,AI搜索已彻底渗透商业。当客户习惯问DeepSeek、豆包“推荐哪家装修公司”时,你的品牌能否出现在前三条?这已不是“要不要做”的问题,而是“谁能精准做到”的竞争。在此背景下,一款名为【元届象GEO】的系统&…

作者头像 李华
网站建设 2026/5/25 1:59:16

保姆级教程:在Ubuntu 18.04上用RTX 3060复现ICCV 2021的PMF点云分割模型

平民硬件实战:RTX 3060复现PMF点云分割模型的完整指南当ICCV 2021的PMF(Perception-aware Multi-sensor Fusion)论文提出融合视觉与点云数据的新范式时,许多研究者都被其精妙的跨模态设计所吸引。但面对动辄需要专业级GPU的复现要…

作者头像 李华
网站建设 2026/5/25 1:57:32

考研数据结构代码实现之顺序栈(基于王道书)

代码实现基于王道书上给的代码&#xff0c;代码如有缺陷之处&#xff0c;欢迎指正~说明&#xff1a; .h文件用于声明 .cpp文件用于定义 main.cpp 用于测试注&#xff1a;代码在VS2022调试测试顺序栈&#xff1a;Sqstack.h#pragma once #include<stdio.h> #include<std…

作者头像 李华