第二章:环境搭建——Ubuntu系统配置、ROS安装、PCL库编译与安装

说实话,做激光雷达点云处理,最让人头疼的往往不是算法本身,而是环境搭建。我见过太多新手,花了两周配环境,最后心态崩了直接放弃。嗯,今天咱们就把这事一次性说清楚。

我个人习惯用Ubuntu 20.04 LTS,搭配ROS Noetic。这套组合我用了三年,踩过的坑比走过的路还多。你想想看,如果环境都配不好,后面那些炫酷的点云分割、配准算法,根本跑不起来。

环境搭建核心 Ubuntu 系统配置 ROS 安装 PCL 库编译 双系统 / 虚拟机 NVIDIA 驱动 源更新 & 依赖 Noetic / Melodic 选择 rosdep 初始化 工作空间创建 源码编译 / apt安装 VTK / Eigen 依赖 CMake 编译配置 三者缺一不可,顺序不能乱

2.1 Ubuntu系统配置——选对版本,少走弯路

先说说系统选择。我个人强烈推荐Ubuntu 20.04 LTS。为什么?因为ROS Noetic官方支持的就是20.04。你非要用22.04装ROS Noetic,也不是不行,但你会发现自己成了「孤勇者」——网上90%的教程都不适用。

核心建议:Ubuntu 20.04 LTS + ROS Noetic,这是目前最稳的组合。

安装方式有两种:双系统或者虚拟机。我建议有条件的直接上双系统。虚拟机跑点云处理?嗯,我试过,那个卡顿感会让你怀疑人生。尤其是后面你要跑PCL的ICP配准,虚拟机直接给你卡成PPT。

装好系统后,第一件事换源。别用官方源,慢得你想砸电脑。换成清华或者中科大的源:

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源列表
sudo gedit /etc/apt/sources.list

# 替换为清华源(Ubuntu 20.04)
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

# 更新
sudo apt update && sudo apt upgrade -y

小技巧:换源后记得装一些基础依赖,比如build-essential、cmake、git。我每次装新系统,第一件事就是跑这条命令:sudo apt install build-essential cmake git vim -y

如果你用的是NVIDIA显卡,记得装驱动。点云可视化需要GPU加速,不然那个点云旋转起来一卡一卡的。我曾经在一个项目里没装驱动,结果可视化帧率只有5帧,调试了三天才发现是驱动问题。

2.2 ROS安装——别被rosdep劝退

ROS安装本身不复杂,但rosdep这一步能劝退80%的人。我当年第一次装ROS,卡在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

# 4. 安装完整版ROS(推荐)
sudo apt install ros-noetic-desktop-full -y

装完之后,配置环境变量:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意:rosdep init如果报错,多半是网络问题。解决方案:手动下载rosdep的配置文件,或者使用代理。我个人的做法是直接跳过rosdep,手动安装依赖。虽然麻烦点,但比卡在那强。

接下来初始化rosdep:

sudo rosdep init
rosdep update

如果这一步卡住了,试试这个:

# 手动创建rosdep配置
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo touch /etc/ros/rosdep/sources.list.d/20-default.list

# 手动写入内容
echo "yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx" | sudo tee /etc/ros/rosdep/sources.list.d/20-default.list
echo "yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml" | sudo tee -a /etc/ros/rosdep/sources.list.d/20-default.list
echo "yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml" | sudo tee -a /etc/ros/rosdep/sources.list.d/20-default.list
echo "yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml" | sudo tee -a /etc/ros/rosdep/sources.list.d/20-default.list
echo "gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte" | sudo tee -a /etc/ros/rosdep/sources.list.d/20-default.list

最后创建你的工作空间:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.3 PCL库编译与安装——两种方式,各有利弊

PCL(Point Cloud Library)是点云处理的核心库。安装方式有两种:apt直接安装,或者源码编译。

方式 优点 缺点 推荐场景
apt安装 简单快速,一行命令搞定 版本较旧,缺少部分模块 初学者、快速验证
源码编译 版本最新,功能完整 编译耗时,依赖多 正式项目、需要最新特性

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

sudo apt install libpcl-dev pcl-tools -y

装完就能用。简单吧?但要注意,apt安装的PCL版本可能比较老。比如Ubuntu 20.04默认装的是PCL 1.10,而最新版已经是1.14了。

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

我个人习惯用源码编译。虽然慢,但你能拿到完整的模块,包括那些apt没有的。而且出了问题,你能直接看源码调试。

# 1. 安装依赖
sudo apt install libboost-all-dev libeigen3-dev libflann-dev libvtk7-dev libvtk7-qt-dev -y

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

# 3. CMake配置
cmake -DCMAKE_BUILD_TYPE=Release \
      -DBUILD_visualization=ON \
      -DBUILD_surface_on_nurbs=ON \
      -DBUILD_tools=ON \
      ..

# 4. 编译(-j4表示用4核编译,根据你的CPU调整)
make -j4

# 5. 安装
sudo make install

关键点:编译PCL时,VTK依赖一定要装对。如果你要可视化点云,-DBUILD_visualization=ON必须打开。我曾经忘了开这个选项,结果编译完发现没有可视化模块,又重编了一次,白白浪费两小时。

编译时间取决于你的机器。我当年用一台i5笔记本,编译了将近40分钟。嗯,趁这个时间泡杯咖啡,或者看看文档,别干等着。

2.4 验证环境——跑个例子试试

环境搭好了,怎么知道对不对?跑个简单的PCL例子验证一下。

# 创建一个测试文件
mkdir ~/pcl_test && cd ~/pcl_test
touch test_pcl.cpp

写入以下代码:

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

int main (int argc, char** argv)
{
    pcl::PointCloud<pcl::PointXYZ> cloud;
    cloud.width = 5;
    cloud.height = 1;
    cloud.is_dense = false;
    cloud.points.resize(cloud.width * cloud.height);

    for (size_t i = 0; i < cloud.points.size(); ++i)
    {
        cloud.points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud.points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
        cloud.points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
    }

    pcl::io::savePCDFileASCII("test_pcd.pcd", cloud);
    std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;

    return (0);
}

编译运行:

# 创建CMakeLists.txt
cat > CMakeLists.txt << EOF
cmake_minimum_required(VERSION 3.5)
project(pcl_test)
find_package(PCL REQUIRED)
include_directories(\${PCL_INCLUDE_DIRS})
link_directories(\${PCL_LIBRARY_DIRS})
add_definitions(\${PCL_DEFINITIONS})
add_executable(pcl_test test_pcl.cpp)
target_link_libraries(pcl_test \${PCL_LIBRARIES})
EOF

# 编译
mkdir build && cd build
cmake ..
make
./pcl_test

如果看到输出"Saved 5 data points to test_pcd.pcd",恭喜你,环境搭建成功了!

避坑指南:如果编译时报找不到PCL,检查一下find_package(PCL REQUIRED)这行。我曾经因为路径问题,折腾了半天才发现是CMake没找到PCL的Config文件。解决方案:export PCL_DIR=/usr/local/share/pcl-1.10,手动指定路径。

好了,环境搭好了,后面就可以开始真正的点云处理了。记住,环境搭建是基础,基础不牢,地动山摇。我见过太多人因为环境问题放弃了这个方向,其实只要按步骤来,没那么难。


可可精品资料库