2. 环境搭建与常见问题:ROS2安装、依赖缺失、环境变量配置

说实话,搞ROS2导航,第一步就把人卡住的情况我见得太多了。很多同学一上来就急着跑导航算法,结果环境没搭好,报错信息能刷满整个终端。今天我就把这些年踩过的坑、总结的经验,一次性说清楚。

2.1 ROS2版本选择与安装

ROS2的版本选择,说白了就是看你用哪个Ubuntu版本。我个人习惯用LTS版本搭配,稳定省心。

Ubuntu版本 推荐ROS2版本 支持周期
Ubuntu 22.04 Humble Hawksbill 2027年
Ubuntu 20.04 Foxy Fitzroy 2023年(已停止)
Ubuntu 24.04 Jazzy Jalisco 2029年

嗯,这里要注意:千万别混用版本。我在项目中遇到过有人用Ubuntu 22.04装Foxy,结果编译导航包时各种ABI不兼容,折腾了两天才发现是版本问题。

核心建议:如果你刚开始学导航,直接用Ubuntu 22.04 + ROS2 Humble。这是目前最成熟的组合,社区资源最多,遇到问题也好搜解决方案。

2.2 安装步骤与避坑指南

安装其实就几步,但每一步都有坑。我按顺序说:

  1. 设置locale - 确保UTF-8支持
  2. 添加ROS2源 - 别用默认源,慢得要命
  3. 安装基础包 - 建议装desktop版本
  4. 安装导航相关包 - navigation2、tf2等

警告:千万不要用sudo apt install ros-humble-desktop直接装!先检查你的sources.list里有没有ROS2的源。我曾经帮一个同事排查问题,发现他装了一整天,结果装的是ROS1 Noetic,因为源没配对。

正确的安装命令是这样的:

# 设置locale
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

# 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe

# 添加ROS2 GPG key
sudo apt update && 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

# 添加源到sources.list
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 安装ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

小技巧:如果你在墙内,建议用镜像源。把packages.ros.org换成mirrors.ustc.edu.cn/ros2,速度能快10倍。我每次重装系统都这么干。

2.3 依赖缺失问题

依赖缺失,说白了就是你的系统里缺了某些库。ROS2导航包依赖的东西特别多,我列几个常见的:

  • Eigen3 - 线性代数库,导航算法必备
  • PCL - 点云库,激光雷达数据处理用
  • OpenCV - 视觉处理,有些导航方案会用到
  • Boost - C++基础库,几乎每个包都依赖

你想想看,如果缺了Eigen3,编译costmap_2d的时候就会报一堆模板错误。我刚开始搞导航时,看到那些几百行的模板报错直接懵了。

解决依赖缺失,我推荐用这个命令:

# 自动安装缺失的依赖
rosdep install --from-paths src --ignore-src -r -y

# 如果rosdep没装,先装它
sudo apt install python3-rosdep
sudo rosdep init
rosdep update

经验之谈:rosdep不是万能的。有些第三方库它检测不到,比如librealsense(Intel RealSense相机驱动)。遇到这种情况,手动去GitHub上找安装脚本,或者用vcpkg、conan来管理。

2.4 环境变量配置

环境变量配置,这是ROS2新手最容易忽略的地方。说白了就是告诉系统:ROS2装在哪,怎么找到它。

核心环境变量就这几个:

  • ROS_DOMAIN_ID - 多机通信时用来隔离网络
  • RMW_IMPLEMENTATION - 中间件实现,默认是Fast DDS
  • AMENT_PREFIX_PATH - 包安装路径

我建议在~/.bashrc里加上:

# ROS2环境变量
source /opt/ros/humble/setup.bash
export ROS_DOMAIN_ID=0
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

# 如果你有工作空间
source ~/ros2_ws/install/setup.bash

注意:source的顺序很重要!先source系统级的setup.bash,再source工作空间的。我曾经因为顺序反了,导致自定义消息类型一直找不到,排查了半天。

2.5 验证环境是否正常

装完了,怎么知道环境对不对?我一般跑这几个命令:

# 检查ROS2版本
ros2 --version

# 检查环境变量
echo $ROS_DISTRO

# 跑个简单的talker-listener测试
ros2 run demo_nodes_cpp talker &
ros2 run demo_nodes_cpp listener

如果能看到talker在发消息,listener在收消息,那环境基本就OK了。

我的习惯:每次新装完环境,我都会跑一遍navigation2的示例。用ros2 launch nav2_bringup tb3_simulation_launch.py,如果能看到小乌龟在Rviz里动起来,那导航环境就完全没问题了。

2.6 知识体系总览

下面这张图,我把环境搭建的核心逻辑画出来了。你照着这个流程走,基本不会出大问题:

ROS2导航环境搭建核心流程 1. 版本选择 Ubuntu + ROS2匹配 2. 系统安装 源配置 + 包安装 3. 依赖安装 rosdep + 手动 4. 环境变量配置 bashrc + source顺序 5. 环境验证 talker-listener + 导航示例 常见问题 版本混用/依赖缺失 每个步骤都有对应的避坑指南,详见正文 版本匹配是关键 源配置别搞错 依赖缺失最常见

这张图把整个环境搭建的流程串起来了。你从版本选择开始,一步步往下走,每一步都有对应的解决方案。我建议你把这张图存下来,每次搭环境时对照着看,能省不少时间。