2. 环境搭建

说实话,很多做感知联调的朋友,一上来就急着写代码、调算法。结果呢?环境没搭好,编译报错一整天,心态直接崩了。我当年刚入行时也犯过这毛病——Ubuntu装了个半残版本,ROS2选错分支,OpenCV和PCL版本冲突,折腾了整整三天才跑通一个Hello World。

所以这一章,咱们老老实实把地基打牢。你想想看,房子盖得再漂亮,地基不稳也是白搭。环境搭建这事儿,说白了就是一次性的苦功夫,但后面能省你无数个通宵。

2.1 Ubuntu系统配置——选对版本,少走弯路

我个人习惯用Ubuntu 22.04 LTS。为什么?因为ROS2的Humble Hawksbill版本对它支持最好,而且OpenCV 4.5、PCL 1.12这些库在22.04上都能直接apt安装,省去编译源码的麻烦。

⚠️ 避坑指南: 我曾经试过在Ubuntu 20.04上硬装ROS2 Humble,结果依赖冲突到怀疑人生。所以,听我一句劝——别跟版本过不去,22.04 LTS是目前最稳的选择。

安装完系统后,第一件事是换源。国内网络环境你懂的,不换源的话,apt update能卡到你怀疑人生。

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

# 替换为清华源(以22.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

嗯,这里要注意:换完源之后,记得装一些基础工具。我每次新装系统都会先跑一遍这个命令:

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

这些工具后面编译代码、调试程序都会用到。尤其是build-essential,少了它你连g++都用不了。

2.2 ROS2安装与配置——从零开始跑通话题通信

ROS2的安装其实不复杂,但步骤不能跳。我见过有人直接apt install ros-humble-desktop,结果缺了rosdep和colcon,后面编译自己的包时各种报错。

正确的姿势是这样的:

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

# 2. 添加ROS2源
sudo apt install software-properties-common
sudo add-apt-repository universe
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
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 3. 安装ROS2 Humble桌面版
sudo apt update
sudo apt install ros-humble-desktop python3-colcon-common-extensions

# 4. 初始化rosdep
sudo rosdep init
rosdep update
💡 小技巧: 安装完成后,记得把ROS2的环境变量加到.bashrc里。我习惯这样写:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
这样每次打开终端就不用手动source了。

装完之后怎么验证?很简单,开两个终端:

# 终端1:启动话题发布节点
ros2 run demo_nodes_cpp talker

# 终端2:启动话题订阅节点
ros2 run demo_nodes_py listener

如果你看到talker在发"Hello World",listener在收,那就说明ROS2装好了。我在项目中遇到过好几次,明明装好了但就是跑不通——后来发现是网络防火墙把DDS的端口给封了。嗯,这个坑后面再细说。

2.3 依赖库安装——OpenCV、PCL、Eigen

这三个库是感知联调的核心依赖。OpenCV处理图像,PCL处理点云,Eigen处理矩阵运算。说白了,它们就是感知算法的三驾马车。

2.3.1 OpenCV——图像处理的基础

我建议直接用apt安装,省事:

sudo apt install libopencv-dev python3-opencv

这样装的是OpenCV 4.5.4,对大多数项目来说够用了。如果你需要编译带contrib模块的版本,那就得从源码编译——不过那是进阶玩法,咱们先不折腾。

验证安装:

python3 -c "import cv2; print(cv2.__version__)"

如果输出了4.5.4,那就OK了。

⚠️ 注意: 我曾经在编译自己的C++项目时,发现OpenCV的头文件路径不对。后来检查发现,apt安装的OpenCV头文件在/usr/include/opencv4,而CMake默认找的是/usr/include/opencv。解决办法是在CMakeLists.txt里加上:
find_package(OpenCV REQUIRED)
它会自动帮你搞定路径。

2.3.2 PCL——点云处理的利器

PCL的安装稍微麻烦一点,因为它的依赖比较多。不过apt也能搞定:

sudo apt install libpcl-dev pcl-tools

装完之后,你可以用pcl_viewer命令打开一个点云文件试试。我习惯用这个命令测试:

pcl_viewer /usr/share/doc/libpcl-dev/examples/example.pcd

如果能看到一个三维点云窗口,那就说明PCL装好了。

💡 小技巧: PCL的版本兼容性是个大坑。ROS2 Humble默认依赖PCL 1.12,如果你自己编译了PCL 1.13,那链接时可能会报符号找不到的错误。所以,尽量用apt装,别自己编译。

2.3.3 Eigen——矩阵运算的瑞士军刀

Eigen是个纯头文件库,安装最简单:

sudo apt install libeigen3-dev

验证方式:

dpkg -l | grep libeigen3-dev

如果能看到版本号,那就装好了。Eigen不需要链接动态库,直接在代码里#include 就能用。

2.4 知识体系总览

下面这张图,是我自己总结的环境搭建核心逻辑。你照着这个流程走,基本不会出大问题:

感知联调环境搭建核心流程 Ubuntu 22.04 LTS ROS2 Humble 依赖库安装 OpenCV 4.5 PCL 1.12 Eigen 3.4 验证:话题通信测试 + 库版本检查 + 示例程序运行 按顺序安装,每步验证通过后再进行下一步

2.5 常见问题与避坑指南

问题 原因 解决办法
ROS2节点无法发现对方 DDS通信端口被防火墙拦截 关闭防火墙或开放7400-7500端口
OpenCV编译报找不到头文件 CMake搜索路径不对 使用find_package(OpenCV REQUIRED)
PCL链接时符号未定义 PCL版本与ROS2不匹配 统一使用apt安装的版本
Eigen编译报错 未正确包含头文件路径 在CMake中添加find_package(Eigen3 REQUIRED)

📌 核心要点:

  • Ubuntu 22.04 + ROS2 Humble + OpenCV 4.5 + PCL 1.12 + Eigen 3.4 是最稳的组合
  • 能用apt就别自己编译,省时间也省心
  • 每装完一个组件,立刻验证——别等到最后才发现问题
  • 环境变量配置要写入.bashrc,避免每次手动source

好了,环境搭建这块就这些。你照着做,应该半小时内就能搞定。如果遇到问题,别慌——大概率是版本冲突或者路径问题,检查一下就能解决。