3、开发环境搭建:Ubuntu + ROS2 + PCL + Open3D + Python环境配置,Docker镜像推荐
说实话,做激光雷达感知这件事,最让人头疼的往往不是算法本身,而是环境配置。我见过太多同学在群里问「为什么我编译不过」「为什么我点云显示不出来」——十有八九是环境没搭好。
这一章,我就带你把这套环境彻底搞定。咱们的目标是:一次配好,到处能用。
3.1 为什么选这套组合?
先说说我为什么推荐这套技术栈。你想想看,做激光雷达感知,核心工作流无非是:
- 读数据(ROS2 bag / 离线文件)
- 处理点云(滤波、分割、聚类)
- 可视化调试(看看效果对不对)
- 算法验证(跑通流程)
Ubuntu + ROS2 是自动驾驶行业的标配,PCL 是点云处理的工业级库,Open3D 在 Python 生态里做可视化特别方便。这套组合,说白了就是「工程落地 + 快速验证」两手抓。
核心思路:ROS2 负责数据流,PCL 负责底层算法,Open3D 负责可视化调试,Python 负责快速原型。各司其职,互不打架。
3.2 系统与基础依赖
我个人习惯用 Ubuntu 22.04 LTS。为什么?因为 ROS2 Humble 官方支持的就是 22.04,省心。
装好系统后,先把基础依赖拉满:
sudo apt update
sudo apt install -y \
build-essential \
cmake \
git \
wget \
python3-pip \
python3-venv \
libeigen3-dev \
libflann-dev \
libboost-all-dev \
libvtk9-dev \
libvtk9-qt-dev
嗯,这里要注意:VTK 版本一定要对。我遇到过有人装了 VTK8 和 VTK9 混在一起,编译 PCL 时各种符号冲突,排查了一下午。
3.3 ROS2 Humble 安装
ROS2 的安装其实很简单,但有几个坑。我直接给你最稳的步骤:
# 1. 设置 locale
sudo apt update && sudo apt install locales
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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
# 3. 安装 ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop
# 4. 配置环境
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
小技巧:如果你网络不好,可以用清华镜像源替换官方源。我曾经在客户现场用 4G 网络装 ROS2,等了两个小时……后来学乖了,提前把 deb 包下载好。
3.4 PCL 编译安装
PCL 我建议源码编译。为什么?因为 apt 安装的版本通常比较老,而且缺少一些关键模块(比如 GPU 加速)。
# 下载源码
git clone https://github.com/PointCloudLibrary/pcl.git
cd pcl && git checkout pcl-1.14.0
# 编译安装
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DBUILD_GPU=ON \
-DBUILD_apps=ON \
-DBUILD_examples=ON ..
make -j$(nproc)
sudo make install
编译时间大概 20-30 分钟,取决于你的机器。这时候可以去泡杯咖啡。
避坑指南:我曾经在编译 PCL 时忘了装 VTK,结果可视化模块全部缺失。检查一下 cmake 输出,确保看到 VTK: YES。
3.5 Open3D 与 Python 环境
Open3D 用 pip 装就行,但要注意 Python 版本。我推荐用 Python 3.10:
# 创建虚拟环境
python3 -m venv lidar_env
source lidar_env/bin/activate
# 安装 Open3D
pip install open3d==0.18.0
# 安装其他常用库
pip install numpy matplotlib scipy scikit-learn
验证一下:
python3 -c "import open3d as o3d; print(o3d.__version__)"
如果输出版本号,说明装好了。
3.6 验证整个链路
环境搭好了,咱们跑个简单的例子验证一下。写一个 Python 脚本,用 Open3D 生成点云,再用 ROS2 发布:
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import PointCloud2
import numpy as np
import open3d as o3d
class PointCloudPublisher(Node):
def __init__(self):
super().__init__('pcd_publisher')
self.publisher = self.create_publisher(PointCloud2, '/lidar_points', 10)
self.timer = self.create_timer(1.0, self.publish_cloud)
def publish_cloud(self):
# 生成随机点云
points = np.random.rand(1000, 3).astype(np.float32)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(points)
# 转换为 ROS2 消息
# ... (转换代码略)
self.publisher.publish(msg)
self.get_logger().info('Published point cloud')
def main(args=None):
rclpy.init(args=args)
node = PointCloudPublisher()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
跑起来之后,用 rviz2 订阅 /lidar_points 话题,你应该能看到随机点云在跳动。
3.7 Docker 镜像推荐
说实话,每次换机器都要重配环境,真的很烦。我的建议是:用 Docker 一劳永逸。
这里推荐几个我常用的镜像:
| 镜像名称 | 内容 | 适用场景 |
|---|---|---|
| osrf/ros:humble-desktop | ROS2 Humble 基础 | 纯 ROS2 开发 |
| pointcloudlibrary/pcl:latest | PCL 1.14 + 依赖 | 点云算法开发 |
| nvidia/cuda:12.2-devel-ubuntu22.04 | CUDA + Ubuntu 22.04 | GPU 加速点云处理 |
我自己维护了一个整合镜像,包含 ROS2 + PCL + Open3D + CUDA,Dockerfile 如下:
FROM nvidia/cuda:12.2-devel-ubuntu22.04
# 安装 ROS2
RUN apt update && apt install -y curl gnupg lsb-release
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
RUN 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" | tee /etc/apt/sources.list.d/ros2.list > /dev/null
RUN apt update && apt install -y ros-humble-desktop python3-pip
# 安装 PCL
RUN apt install -y libpcl-dev
# 安装 Open3D
RUN pip3 install open3d numpy matplotlib
CMD ["bash"]
使用建议:构建镜像时加上 --network=host,避免 DNS 解析问题。我一般在项目根目录放一个 docker-compose.yml,把数据目录挂载进去,这样代码和容器分离,方便管理。
3.8 知识体系总览
下面这张图,帮你把整个环境搭建的逻辑串起来:
从底层操作系统到上层应用,再到容器化部署,这条链路清晰明了。你只要按这个顺序一步步来,基本不会出问题。
3.9 写在最后
环境搭建这件事,说白了就是「耐心 + 细心」。我刚开始做的时候也踩过不少坑,比如 ROS2 和 ROS1 的冲突、PCL 和 VTK 版本不匹配、Open3D 在虚拟环境里找不到 CUDA……但只要你按照上面的步骤来,应该能一次搞定。
如果遇到问题,先检查版本号,再看编译日志。90% 的问题都是版本不匹配导致的。
好了,环境搭好了,下一章咱们就开始真正处理点云数据了。