3. 开发环境搭建

说实话,做激光雷达感知这几年,我见过太多同学卡在环境搭建这一步了。明明算法思路都懂,结果装个库折腾一整天,最后心态崩了。嗯,这一章咱们就把这些坑提前填上。

我个人习惯把环境搭建分成四块:操作系统、ROS通信框架、点云处理库PCL、Python生态。下面咱们一个一个来。

开发环境搭建 Ubuntu 20.04 系统配置与驱动 ROS Noetic 通信框架与工具链 PCL 1.12 点云库编译与安装 Python环境 NumPy + Open3D 四者协同构成完整的激光雷达感知开发基础

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

嗯,到这里环境就全部搭好了。说实话,这个过程确实有点繁琐,但一次配好,后面写代码就顺畅了。我记得第一次完整配完环境时,那种「万事俱备」的感觉特别好——后面就可以专心搞算法了。

可可精品资料库