3. 环境搭建
说实话,做激光雷达SLAM这几年,我踩过最多的坑反而不是算法本身,而是环境搭建。你想想看,好不容易调通了一个滤波算法,结果发现PCL版本不对,或者ROS节点死活跑不起来——这种挫败感,我太熟悉了。
所以这一章,咱们就把地基打牢。我会把我在Ubuntu、ROS、PCL和Open3D上积累的经验,一股脑倒给你。跟着我的步骤走,保证你少走弯路。
3.1 Ubuntu系统准备——别选错了版本
我个人习惯用Ubuntu 20.04 LTS。为什么?因为ROS Noetic对它支持最好,而且PCL 1.12的apt源直接可用。你如果非要用22.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
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
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])
3.5 知识体系总览
下面这张图,是我梳理的本章知识结构。你可以把它当作一张地图,随时回来对照。
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 不报错
嗯,到这里,你的环境就算彻底搭好了。后面所有的滤波算法,都会在这个基础上跑起来。别急,慢慢来,环境稳了,后面才顺。