3. 环境搭建

说实话,做激光雷达SLAM这几年,我踩过最多的坑反而不是算法本身,而是环境搭建。你想想看,好不容易调通了一个滤波算法,结果发现PCL版本不对,或者ROS节点死活跑不起来——这种挫败感,我太熟悉了。

所以这一章,咱们就把地基打牢。我会把我在Ubuntu、ROS、PCL和Open3D上积累的经验,一股脑倒给你。跟着我的步骤走,保证你少走弯路。

3.1 Ubuntu系统准备——别选错了版本

我个人习惯用Ubuntu 20.04 LTS。为什么?因为ROS Noetic对它支持最好,而且PCL 1.12的apt源直接可用。你如果非要用22.04,也不是不行,但很多老项目会出兼容性问题。

⚠️ 我曾经犯过的错: 有次为了赶项目,直接在Ubuntu 22.04上装ROS2 Humble,结果发现某个老版本的PCL滤波库死活编译不过。最后花了整整两天回退到20.04。所以,听我一句劝——做SLAM开发,20.04是最稳的。

3.2 ROS Noetic 安装——三步搞定

ROS是激光雷达SLAM的骨架。没有它,点云数据根本流不起来。安装其实很简单,但要注意顺序。

# 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'

# 2. 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 安装完整桌面版(推荐)
sudo apt update
sudo apt install ros-noetic-desktop-full

安装完成后,别忘了初始化rosdep。这一步很多人会卡住,因为网络问题。我建议你换个时间再试,或者用代理。

sudo rosdep init
rosdep update

然后设置环境变量,这样每次打开终端就不用重新source了。

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
💡 我的小技巧: 如果你同时装了ROS1和ROS2,可以在.bashrc里写个别名,比如alias ros1='source /opt/ros/noetic/setup.bash',这样切换起来很方便。

3.3 PCL 安装——两种方式,看你需求

PCL(Point Cloud Library)是点云处理的核心。安装方式有两种,我分别说说它们的适用场景。

方式一:apt安装(推荐新手)

sudo apt install libpcl-dev pcl-tools

这种方式最快,装完就能用。但版本是固定的——Ubuntu 20.04对应PCL 1.12。如果你只是做课程练习,完全够用。

方式二:源码编译(推荐进阶)

如果你需要最新特性,或者要修改PCL源码,那就得自己编译了。我项目中就遇到过需要修改体素滤波源码的情况,这时候源码安装就派上用场了。

# 下载源码
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
mkdir build && cd build

# 配置并编译
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
sudo make install
⚠️ 注意: 源码编译大概需要30-60分钟,取决于你的机器性能。编译时记得加-j参数,不然单核编译会等到你怀疑人生。

3.4 Python Open3D 环境搭建——轻量级点云处理

说实话,我越来越喜欢用Open3D做快速原型验证。它的API设计得很人性化,而且可视化效果比PCL好太多。安装更是简单到令人发指。

pip install open3d

对,就这一行。但要注意,最好在虚拟环境里装,避免和系统Python包冲突。

# 创建虚拟环境
python3 -m venv pcl_env
source pcl_env/bin/activate

# 安装Open3D
pip install open3d numpy matplotlib

装完后,你可以跑个简单的测试,看看能不能正常显示点云。

import open3d as o3d
import numpy as np

# 生成随机点云
points = np.random.rand(1000, 3)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)

# 可视化
o3d.visualization.draw_geometries([pcd])
💡 我常用的组合: 做算法验证用Open3D(快、方便),做工程部署用PCL(稳定、功能全)。两者互补,不冲突。

3.5 知识体系总览

下面这张图,是我梳理的本章知识结构。你可以把它当作一张地图,随时回来对照。

激光雷达点云滤波环境搭建 Ubuntu 20.04 LTS ROS Noetic PCL + Open3D 系统配置 驱动安装 核心安装 工作空间 apt安装 源码编译 pip安装 虚拟环境 核心原则:先系统 → 再ROS → 最后点云库 验证方式:跑通一个简单的点云订阅/发布节点

3.6 验证环境——跑个栗子看看

环境搭好了,怎么知道它能不能用?我一般会跑一个最简单的点云发布节点来验证。

# 创建ROS工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make

# 创建一个测试包
cd src
catkin_create_pkg pcl_test roscpp pcl_ros
cd ..
catkin_make

然后在pcl_test/src里写一个简单的发布节点,发布一个随机点云。如果能在rviz里看到点云,说明环境完全OK。

✅ 验证清单:
  • rosnode list 能看到你的节点
  • rostopic echo /pcl_topic 能看到点云数据
  • rviz里能正常显示点云
  • Python里 import open3d 不报错

嗯,到这里,你的环境就算彻底搭好了。后面所有的滤波算法,都会在这个基础上跑起来。别急,慢慢来,环境稳了,后面才顺。