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安装,省去编译源码的麻烦。
安装完系统后,第一件事是换源。国内网络环境你懂的,不换源的话,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
.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了。
/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装好了。
2.3.3 Eigen——矩阵运算的瑞士军刀
Eigen是个纯头文件库,安装最简单:
sudo apt install libeigen3-dev
验证方式:
dpkg -l | grep libeigen3-dev
如果能看到版本号,那就装好了。Eigen不需要链接动态库,直接在代码里#include 就能用。
2.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
好了,环境搭建这块就这些。你照着做,应该半小时内就能搞定。如果遇到问题,别慌——大概率是版本冲突或者路径问题,检查一下就能解决。