2. 环境搭建
说实话,做感知联调最怕什么?不是算法调不通,而是环境搭到一半系统崩了。我见过太多新手一上来就装最新版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 知识体系总览
下面这张图是我自己总结的环境搭建逻辑,你照着这个顺序来,基本不会出问题:
你看,整个流程是自底向上的。系统层没配好,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,不超过两小时。