第二章 环境搭建:Ubuntu + ROS Noetic 安装与Navigation Stack源码编译
说实话,做机器人导航这么多年,我见过太多人在环境搭建这一步就卡住了。有的装完ROS发现依赖冲突,有的编译Navigation Stack报错到怀疑人生。其实说白了,环境搭建就像盖房子的地基——地基没打好,后面调参调得再好也白搭。
这一章,我就带你一步步把整个开发环境搭起来。我会把我在项目中踩过的坑、总结的经验都告诉你。嗯,咱们开始吧。
2.1 操作系统选择与Ubuntu 20.04安装
ROS Noetic的官方支持系统是Ubuntu 20.04(Focal Fossa)。别问我为什么不用22.04——Noetic就是为20.04量身定做的,用其他版本你会遇到各种奇奇怪怪的依赖问题。
安装Ubuntu 20.04时,我个人的习惯是:
- 磁盘分区: 至少给Ubuntu留80GB空间,ROS + Navigation Stack + 数据集很容易就吃掉30GB
- 交换分区: 如果你的内存小于16GB,建议设置8GB交换分区。编译大型包时内存不够会直接OOM
- 网络配置: 安装时就连上网络,让系统自动更新到最新补丁
2.2 ROS Noetic完整安装
ROS的安装其实不复杂,但有几个细节不注意就会翻车。我整理了一个标准流程,你照着做就行。
2.2.1 添加软件源与密钥
# 设置sources.list
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
2.2.2 安装ROS Noetic桌面完整版
sudo apt install ros-noetic-desktop-full
这个命令会安装ROS核心、rqt、rviz、仿真工具等所有常用组件。大概需要下载1.5GB左右,喝杯咖啡的功夫就装好了。
2.2.3 初始化rosdep
sudo rosdep init
rosdep update
rosdep是用来解决依赖的利器。但注意——rosdep update经常因为网络问题失败。我曾经在客户现场折腾了半小时,最后发现是公司网络屏蔽了raw.githubusercontent.com。解决办法是挂代理,或者手动下载依赖列表。
2.2.4 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
这一步很多人会忘。不执行的话,每次打开终端都要手动source,烦得很。
2.3 Navigation Stack源码编译
为什么不用apt直接装?因为apt版本太老了,而且你没法修改源码。做导航调参,不改源码几乎不可能。所以我建议你从源码编译。
2.3.1 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
第一次编译会生成build和devel目录。如果报错,99%是因为缺少依赖。
2.3.2 克隆Navigation Stack源码
cd ~/catkin_ws/src
git clone https://github.com/ros-planning/navigation.git
cd navigation
git checkout noetic-devel
注意分支!一定要切到noetic-devel。我见过有人直接clone master分支,结果编译出一堆C++17的语法错误。
2.3.3 安装依赖库
Navigation Stack依赖三个核心库:Eigen3、PCL、OpenCV。下面我分别说。
| 依赖库 | 版本要求 | 安装方式 | 用途 |
|---|---|---|---|
| Eigen3 | ≥ 3.3 | sudo apt install libeigen3-dev |
矩阵运算、位姿变换 |
| PCL | ≥ 1.10 | sudo apt install libpcl-dev |
点云处理、障碍物检测 |
| OpenCV | ≥ 4.2 | sudo apt install libopencv-dev |
图像处理、特征提取 |
2.3.4 编译Navigation Stack
cd ~/catkin_ws
catkin_make -j4
-j4表示用4个线程并行编译。如果你的CPU是8核以上,可以试试-j8。但注意——内存不够的话并行编译会直接崩。我16GB内存的笔记本用-j8编译,swap直接飙到10GB。
如果编译报错,先检查这几个常见问题:
- 缺少XXX.h头文件: 用
rosdep install --from-paths src --ignore-src -r -y自动安装缺失依赖 - C++版本不匹配: 在CMakeLists.txt里加
set(CMAKE_CXX_STANDARD 14) - PCL/OpenCV版本冲突: 用
pkg-config --modversion pcl_common和pkg-config --modversion opencv4检查版本
2.4 工作空间配置与验证
编译成功后,别忘了配置工作空间的环境变量:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
然后验证一下:
roscd nav_core
echo $ROS_PACKAGE_PATH
如果能看到你的工作空间路径,说明配置成功。
export ROS_WORKSPACE=~/catkin_ws,这样在终端里随时可以用$ROS_WORKSPACE快速定位工作空间。
2.5 环境搭建知识体系
下面这张图总结了整个环境搭建的流程和依赖关系,你保存下来,以后搭建环境时对照着看。
2.6 常见问题与避坑指南
环境搭建这块,我踩过的坑比走过的路还多。下面这几个问题你大概率会遇到:
我曾经在客户现场折腾了半小时,最后发现是公司网络屏蔽了raw.githubusercontent.com。解决办法:
export ROS_DISTRO=noeticrosdep update --include-eol-distros或者直接挂代理。
这通常是PCL或OpenCV版本不匹配导致的。检查一下:
pkg-config --modversion pcl_commonpkg-config --modversion opencv4如果版本不对,用apt重新安装。
减少并行编译线程数:
catkin_make -j2或者增加swap空间:
sudo fallocate -l 8G /swapfilesudo mkswap /swapfilesudo swapon /swapfile
好了,环境搭建就到这里。你按照这个流程走下来,应该不会出大问题。如果还有报错,别慌——99%的问题都是依赖没装全,用rosdep install扫一遍基本都能解决。