4、数据录制软件环境搭建:Ubuntu系统配置、ROS/ROS2安装、依赖库(Eigen, PCL, OpenCV)安装

好,咱们进入实战环节的第一步——搭环境。

说实话,我见过太多人卡在这一步。明明代码逻辑没问题,结果编译报错,查了半天发现是某个库版本不对。所以这一章,我会把每一步拆开揉碎了讲,把我踩过的坑也一并告诉你。

4.1 Ubuntu系统配置:别小看这一步

我个人习惯用 Ubuntu 20.04 LTS 或 22.04 LTS。为什么?因为 ROS 和 ROS2 对这两个版本支持最好。你想想看,如果选了个冷门版本,后面装依赖库时各种报错,那得多闹心。

核心建议:

  • 推荐 Ubuntu 20.04 + ROS Noetic(经典组合)
  • 或者 Ubuntu 22.04 + ROS2 Humble(新项目首选)

装完系统后,第一件事是换源。别用官方源,慢得让人抓狂。我一般用清华源或阿里云源,速度能快十倍。

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

# 替换为清华源(Ubuntu 20.04)
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

小技巧: 装完系统后,顺手把 vim、git、cmake、build-essential 这些基础工具装上。后面编译代码时你会感谢我的。

4.2 ROS/ROS2安装:选对版本很重要

ROS 和 ROS2 是两个不同的生态。ROS1 成熟稳定,ROS2 是未来趋势。我的建议是:如果你做新项目,直接上 ROS2;如果维护老项目,那就用 ROS1。

4.2.1 安装 ROS Noetic(Ubuntu 20.04)

# 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

# 4. 初始化 rosdep
sudo rosdep init
rosdep update

# 5. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

注意: 安装过程中如果 rosdep init 报网络错误,别慌。我曾经遇到过,原因是国内网络访问 GitHub 不稳定。解决办法是手动下载 rosdep 的配置文件,或者用代理。

4.2.2 安装 ROS2 Humble(Ubuntu 22.04)

# 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

# 3. 添加密钥
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

# 4. 添加源到 sources.list
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" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

# 5. 安装 ROS2 Humble
sudo apt update
sudo apt install ros-humble-desktop

# 6. 设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

个人经验: 装完 ROS 后,建议先跑一下 roscore(ROS1)或 ros2 run demo_nodes_cpp talker(ROS2),验证安装是否成功。我见过有人装完没验证,结果写代码时才发现少了个包,那才叫崩溃。

4.3 依赖库安装:Eigen, PCL, OpenCV

这三个库是传感器数据处理的核心。Eigen 做矩阵运算,PCL 处理点云,OpenCV 处理图像。说白了,它们就是你的工具箱。

4.3.1 Eigen:轻量级矩阵库

Eigen 是纯头文件库,安装非常简单。但要注意版本,太老的版本不支持某些新特性。

# 安装 Eigen3
sudo apt install libeigen3-dev

# 验证版本
pkg-config --modversion eigen3

我建议版本不低于 3.3.7。为什么?因为我在项目中遇到过,3.3.4 版本的 Eigen::Quaternion 在某些情况下会出精度问题,升级到 3.3.7 后就解决了。

4.3.2 PCL:点云处理利器

PCL 的安装稍微复杂一点,因为它依赖很多其他库。不过用 apt 安装的话,它会自动帮你解决依赖。

# 安装 PCL(完整版)
sudo apt install libpcl-dev pcl-tools

# 验证安装
pcl_viewer --version

避坑指南: 我曾经在 Ubuntu 18.04 上装 PCL 1.8,结果编译时一直报 undefined reference 错误。查了半天才发现是 VTK 版本冲突。解决办法是:先卸载旧版 VTK,再装 PCL。或者直接用 Ubuntu 20.04 + PCL 1.10,省心很多。

4.3.3 OpenCV:图像处理必备

OpenCV 的安装有两种方式:apt 安装(简单)和源码编译(灵活)。我一般用 apt 安装,够用了。

# 安装 OpenCV(包含 contrib 模块)
sudo apt install libopencv-dev python3-opencv

# 验证版本
pkg-config --modversion opencv4

如果你需要用到 SIFT、SURF 等非自由算法,那就得装 opencv-contrib 模块。apt 安装的版本默认不包含这些,需要从源码编译。

小建议: 装完 OpenCV 后,写个简单的程序测试一下:读取一张图片,显示出来。如果没问题,说明环境搭好了。别问我为什么强调这个——我见过有人装完 OpenCV 半年都没用过,等到真要用时发现根本跑不起来。

4.4 知识体系总览

下面这张图是我自己整理的,把这一章的核心逻辑串起来了。你一看就明白。

数据录制软件环境搭建 Ubuntu 系统配置 ROS / ROS2 安装 依赖库安装 Eigen(矩阵运算) PCL(点云处理) OpenCV(图像处理)

4.5 验证环境:跑一个完整示例

环境搭好了,怎么知道能不能用?我一般会写一个简单的测试程序,把三个库都调用一遍。

// test_env.cpp
#include <iostream>
#include <Eigen/Dense>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <opencv2/opencv.hpp>

int main() {
    // 测试 Eigen
    Eigen::Matrix3f mat;
    mat = Eigen::Matrix3f::Identity();
    std::cout << "Eigen OK: " << mat << std::endl;

    // 测试 PCL
    pcl::PointCloud<pcl::PointXYZ> cloud;
    cloud.width = 100;
    cloud.height = 1;
    cloud.points.resize(cloud.width * cloud.height);
    std::cout << "PCL OK: " << cloud.width << " points" << std::endl;

    // 测试 OpenCV
    cv::Mat img(100, 100, CV_8UC3, cv::Scalar(0, 255, 0));
    std::cout << "OpenCV OK: " << img.size() << std::endl;

    return 0;
}
# 编译
g++ -o test_env test_env.cpp `pkg-config --cflags --libs eigen3 pcl_common opencv4`

# 运行
./test_env

如果输出都正常,恭喜你,环境搭好了!

最后提醒: 编译时如果报找不到 pcl_common,试试用 pcl_io 或 pcl_visualization。不同版本的 PCL,pkg-config 的模块名可能不一样。嗯,这个坑我踩过。

好了,环境搭建就到这里。记住,这一步虽然枯燥,但基础打牢了,后面写代码才顺手。

可可精品资料库