2. 环境搭建:Ubuntu系统配置、ROS/ROS2安装、依赖库安装

说实话,做感知联调最怕什么?不是算法调不通,而是环境搭到一半系统崩了。我见过太多新手一上来就装最新版Ubuntu,结果驱动不兼容,折腾两天还没进ROS的门。今天我就把压箱底的环境搭建流程掰开揉碎讲给你听。

2.1 Ubuntu系统配置——打好地基

我个人习惯用Ubuntu 20.04 LTS,原因很简单:ROS1 Noetic和ROS2 Foxy都能完美支持,而且NVIDIA驱动、CUDA这些坑都被前人踩平了。你想想看,要是选个太新的版本,连显卡驱动都要自己编译,何必呢?

系统版本推荐:

  • Ubuntu 20.04 LTS(最稳妥,ROS1/ROS2通吃)
  • Ubuntu 22.04 LTS(适合ROS2 Humble,但部分旧库要手动编译)

装完系统第一件事,换源。别用官方源,慢得让人抓狂。我一般用清华源或者中科大源,速度能快10倍不止。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(Ubuntu 20.04)
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

# 更新
sudo apt update && sudo apt upgrade -y

注意:我曾经因为没换源,apt install一个包下了半小时,最后还断连了。换源是第一步,别偷懒。

接下来装一些基础工具,这些是后面编译ROS和依赖库的必需品:

sudo apt install -y build-essential cmake git vim curl wget
sudo apt install -y python3-pip python3-dev
sudo apt install -y net-tools htop

2.2 ROS/ROS2安装——感知系统的神经中枢

ROS说白了就是感知模块的"消息总线"。摄像头数据、激光雷达点云、毫米波雷达目标,全都要靠ROS节点来收发。我建议你根据项目需求选版本:

ROS版本 对应Ubuntu 适用场景
ROS Noetic 20.04 传统感知算法、成熟项目
ROS2 Foxy 20.04 实时性要求高、多机通信
ROS2 Humble 22.04 最新特性、长期支持

这里我以ROS Noetic为例,因为目前很多感知开源项目还是基于它。安装过程其实就三步:

# 1. 添加ROS源
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

# 2. 安装完整桌面版(包含rviz、gazebo等)
sudo apt update
sudo apt install -y ros-noetic-desktop-full

# 3. 初始化rosdep
sudo rosdep init
rosdep update

小技巧:安装完成后,记得把ROS环境变量加到.bashrc里,不然每次开终端都要source一遍,烦得很。

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

如果你选ROS2,流程也差不多,只是源和包名不同。嗯,这里要注意一点:ROS2和ROS1不能同时运行,但可以装在同一台机器上,通过ros1_bridge桥接。

2.3 依赖库安装——感知算法的"工具箱"

感知联调离不开三大库:OpenCV(图像处理)、Eigen(矩阵运算)、PCL(点云处理)。我按顺序讲,你跟着装就行。

2.3.1 OpenCV——视觉感知的基石

OpenCV版本很关键。太新的版本有些旧接口被删了,太旧的又缺新功能。我个人推荐4.5.5,稳定且兼容性好。

# 安装依赖
sudo apt install -y libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

# 下载源码编译(推荐)
cd ~
git clone https://github.com/opencv/opencv.git -b 4.5.5
cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D WITH_GTK=ON \
      -D WITH_FFMPEG=ON ..
make -j$(nproc)
sudo make install

避坑指南:我曾经直接用apt install libopencv-dev,结果装的是3.2版本,很多新函数用不了。后来全部卸载重编,折腾了一下午。所以,老老实实源码编译吧。

2.3.2 Eigen——矩阵运算的"瑞士军刀"

Eigen是个纯头文件库,安装超级简单。但要注意,它没有.so文件,编译时只需要include路径正确就行。

sudo apt install -y libeigen3-dev

# 验证安装
dpkg -l | grep eigen

为什么感知要用Eigen?说白了,传感器标定、坐标变换、卡尔曼滤波,全是矩阵运算。Eigen的模板元编程技术让它在编译期就优化好了,运行时速度飞快。我在做多传感器融合时,Eigen的Map类帮了大忙,可以直接把原始数据映射成矩阵,省去拷贝开销。

2.3.3 PCL——点云处理的"重型武器"

PCL安装比较重,依赖很多。我建议用apt安装,省心。如果非要源码编译,记得把CUDA支持打开,GPU加速效果很明显。

# apt安装(推荐)
sudo apt install -y libpcl-dev pcl-tools

# 验证
pcl_viewer --help

经验之谈:PCL的KD-Tree和体素滤波是点云预处理的核心。我在做激光雷达感知时,先用体素滤波降采样到1/10,再用KD-Tree做近邻搜索,速度能提升5倍以上。

2.4 知识体系总览

下面这张图是我自己总结的环境搭建逻辑,你照着这个顺序来,基本不会出问题:

Ubuntu 20.04 LTS 系统配置 ROS Noetic / ROS2 Foxy 安装 核心依赖库安装 OpenCV 4.5.5 Eigen 3.3.7 PCL 1.12 环境验证:编译测试例程

你看,整个流程是自底向上的。系统层没配好,ROS装不上;ROS没装好,依赖库编译会报错。所以别跳步,一步一步来。

2.5 环境验证——别让"装好了"变成"装废了"

装完所有东西后,一定要跑个测试。我习惯写一个简单的感知pipeline来验证:

# 验证OpenCV
python3 -c "import cv2; print('OpenCV version:', cv2.__version__)"

# 验证Eigen(C++测试)
echo '#include <Eigen/Dense>
#include <iostream>
int main() {
    Eigen::Matrix3f m;
    m << 1,2,3,4,5,6,7,8,9;
    std::cout << "Eigen works!\\n" << m << std::endl;
    return 0;
}' > test_eigen.cpp
g++ -o test_eigen test_eigen.cpp -I/usr/include/eigen3
./test_eigen

# 验证PCL
pcl_viewer -h &>/dev/null && echo "PCL installed"

最终检查清单:

  • ✅ Ubuntu系统能正常更新
  • ✅ ROS核心服务能启动(roscore)
  • ✅ OpenCV能读取摄像头
  • ✅ Eigen矩阵运算无报错
  • ✅ PCL能加载.pcd点云文件

环境搭建这块,说白了就是耐心活。我当年第一次搭感知环境,光PCL就编译了三个小时,最后发现是CUDA版本不匹配。所以,遇到问题别慌,先看日志,再查版本兼容性。嗯,今天就到这,你按这个流程走,基本一天内能把环境跑通。

最后提醒一句:装完所有东西后,做个系统快照或者写个安装脚本。下次换机器或者重装系统,直接跑脚本,省时省力。我自己的安装脚本已经迭代了十几个版本,现在新机器从零到跑通感知demo,不超过两小时。