3. 开发环境搭建
说实话,做激光雷达感知这几年,我见过太多同学卡在环境搭建这一步了。明明算法思路都懂,结果装个库折腾一整天,最后心态崩了。嗯,这一章咱们就把这些坑提前填上。
我个人习惯把环境搭建分成四块:操作系统、ROS通信框架、点云处理库PCL、Python生态。下面咱们一个一个来。
3.1 Ubuntu 20.04 系统配置
为什么选 Ubuntu 20.04?说白了,ROS Noetic 官方只支持这个版本。你装个 22.04 也能跑,但各种依赖问题会让你怀疑人生。我在项目里吃过这个亏,后来老老实实换回 20.04,世界清净了。
系统要求:
- Ubuntu 20.04 LTS (Focal Fossa) — 64位版本
- 至少 4GB 内存(8GB 以上更舒服)
- 硬盘剩余空间 50GB+(点云数据很占地方)
- NVIDIA 显卡(如果你打算用 GPU 加速)
装完系统第一件事,换源。别用官方源,慢得你想砸电脑。我个人习惯用清华源或者阿里云源。
# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 替换为清华源(用 sed 或者直接编辑都行)
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
小技巧:装完系统先装个 build-essential 和 git,后面编译 PCL 和 ROS 包都用得上。我一般还会装 vim 和 terminator,终端分屏看日志特别方便。
3.2 ROS Noetic 安装
ROS 说白了就是自动驾驶界的「操作系统」——它帮你管理传感器数据、控制消息收发。没有 ROS,你得自己写 socket 通信,那工作量就大了去了。
安装 ROS Noetic 其实就三步,但每一步都有坑。我当年第一次装的时候,卡在 rosdep init 那一步整整两小时。为什么会这样?因为网络问题。下面我把避坑方法一起写出来。
# 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 install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 3. 安装完整桌面版(推荐)
sudo apt update
sudo apt install ros-noetic-desktop-full -y
注意:安装过程如果报错说缺少依赖,别慌。运行 sudo apt --fix-broken install 修复一下就行。我曾经遇到过 libssl 版本冲突,手动降级后解决了。
装完 ROS 之后,别忘了初始化 rosdep:
sudo rosdep init
rosdep update
如果 sudo rosdep init 报网络错误,试试这个:
# 手动创建 rosdep 源列表
sudo mkdir -p /etc/ros/rosdep/sources.list.d
sudo echo "yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx" > /etc/ros/rosdep/sources.list.d/20-default.list
# ... 其他源同理,或者直接用代理
最后,把 ROS 环境变量加到 .bashrc 里,这样每次开终端就不用重新 source 了:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
验证安装:开三个终端,分别运行 roscore、rosrun turtlesim turtlesim_node、rosrun turtlesim turtle_teleop_key。如果能用键盘控制小乌龟动起来,说明 ROS 装好了。
3.3 PCL 库编译与安装
PCL(Point Cloud Library)是做点云处理绕不开的库。滤波、分割、配准、特征提取,全得靠它。Ubuntu 的 apt 源里虽然有 PCL,但版本太老,而且缺少一些关键模块。我个人强烈建议源码编译。
你想想看,apt 装的 PCL 1.10 连 pcl::gpu 模块都没有,你后面想做 GPU 加速怎么办?所以咱们自己编译 PCL 1.12。
3.3.1 安装依赖
sudo apt install -y \
cmake cmake-gui \
libboost-all-dev \
libeigen3-dev \
libflann-dev \
libvtk7-dev \
libvtk7-qt-dev \
libqhull-dev \
libusb-1.0-0-dev \
libproj-dev \
libpcap-dev
避坑指南:VTK 的版本一定要装 7.x,不要装 9.x。我曾经手贱装了 VTK9,结果 PCL 编译到一半报了一堆模板错误,排查了两天才发现是 VTK 版本不兼容。
3.3.2 下载并编译 PCL
# 下载源码
cd ~
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl
git checkout pcl-1.12.1
# 创建 build 目录
mkdir build && cd build
# CMake 配置(建议开启 GPU 模块)
cmake -DCMAKE_BUILD_TYPE=Release \
-DBUILD_GPU=ON \
-DBUILD_CUDA=ON \
-DBUILD_visualization=ON \
..
# 编译(-j 后面的数字是你的 CPU 核心数)
make -j4
# 安装
sudo make install
编译时间大概 20-40 分钟,取决于你的机器配置。这时候可以去泡杯咖啡,或者看看文档。
验证安装:写一个简单的 C++ 程序,包含 #include <pcl/io/pcd_io.h>,如果能编译通过,说明 PCL 装好了。
3.4 Python 环境配置
Python 在感知流程里主要做两件事:快速原型验证和数据预处理。C++ 写点云处理太慢了,用 Python 调 Open3D 几行代码就能可视化点云,效率高得多。
3.4.1 安装 Miniconda(推荐)
我建议用 Miniconda 而不是直接装系统 Python。为什么?因为项目多了,Python 版本和包依赖会打架。Conda 可以隔离环境,互不干扰。
# 下载 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 安装
bash Miniconda3-latest-Linux-x86_64.sh
# 创建感知专用环境
conda create -n lidar_perception python=3.8
conda activate lidar_perception
3.4.2 安装 NumPy
NumPy 是 Python 科学计算的基础。点云数据本质上就是 N×3 的数组,NumPy 处理起来得心应手。
pip install numpy==1.23.5
版本注意:NumPy 版本别装太新。1.24 以上版本对某些旧版 Open3D 不兼容。我建议锁定 1.23.x。
3.4.3 安装 Open3D
Open3D 是 Intel 开源的点云处理库,API 设计比 PCL 的 Python 绑定友好得多。可视化、体素滤波、ICP 配准,一行代码搞定。
pip install open3d==0.16.0
装完之后,跑个测试脚本看看:
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 的 draw_geometries 函数在远程服务器上可能打不开窗口。这时候可以用 o3d.visualization.draw_geometries([pcd], width=640, height=480) 指定窗口大小,或者用 o3d.io.write_point_cloud("test.pcd", pcd) 保存成文件,下载到本地看。
3.5 环境验证清单
所有东西装完后,我建议你跑一遍这个清单,确保每个组件都能正常工作:
| 组件 | 验证命令 | 预期结果 |
|---|---|---|
| ROS | roscore |
启动 master 节点,无报错 |
| PCL | pcl_viewer test.pcd |
显示点云窗口 |
| NumPy | python -c "import numpy; print(numpy.__version__)" |
输出 1.23.5 |
| Open3D | python -c "import open3d; print(open3d.__version__)" |
输出 0.16.0 |
嗯,到这里环境就全部搭好了。说实话,这个过程确实有点繁琐,但一次配好,后面写代码就顺畅了。我记得第一次完整配完环境时,那种「万事俱备」的感觉特别好——后面就可以专心搞算法了。
可可精品资料库