第2章:开发环境搭建——Ubuntu系统安装与配置、ROS安装、C++与Python开发环境配置、CMake与Eigen3库安装

说实话,很多同学学SLAM,第一关就卡在了环境搭建上。

我记得刚入行那会儿,光装个ROS就折腾了两天,最后发现是Ubuntu版本选错了。嗯,这种坑我踩过不少,所以这一章我带你一步步把地基打牢。你想想看,如果连编译器都找不到头文件,后面的算法再牛也跑不起来。

2.1 Ubuntu系统安装与配置

我个人习惯用Ubuntu 20.04 LTS,搭配ROS Noetic。为什么选这个组合?因为目前主流的SLAM库(比如ORB-SLAM3、VINS-Fusion)都在这个版本上测试得最充分。

⚠️ 版本选择警告: 千万别用Ubuntu 22.04装ROS Noetic,依赖会冲突到你怀疑人生。我曾经在22.04上硬着头皮编译,最后libboost版本不兼容,浪费了整整一个下午。

安装步骤其实很简单,但有几个细节要注意:

  1. 下载镜像:去清华源或者中科大源下载ISO,速度比官网快10倍。
  2. 分区建议:/boot给500MB,swap给内存大小,/给50GB以上(SLAM工程编译起来很吃空间)。
  3. 换源:装完系统第一件事就是换源,不然apt update能卡到你崩溃。
# 备份原源
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

2.2 ROS(机器人操作系统)安装

ROS说白了就是SLAM的“高速公路”。没有它,你得自己写进程间通信、消息订阅、TF变换……想想就头大。

安装ROS Noetic,我建议用官方脚本,但要注意顺序:

# 1. 设置sources.list
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-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

# 3. 安装完整桌面版(包含rviz、gazebo等)
sudo apt update
sudo apt install ros-noetic-desktop-full -y

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

# 5. 设置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
💡 个人经验: 如果你在公司内网或者网络环境不好,rosdep update经常失败。我的做法是手动下载rosdep的yaml文件放到本地,然后配置ROS_DISTRO和ROSDEP_SOURCE_PATH。具体方法可以搜一下“rosdep 本地源”,能省不少时间。

2.3 C++与Python开发环境配置

C++是SLAM的主力语言,Python用来做数据分析和可视化。两者都得配好。

C++环境

Ubuntu自带gcc,但版本可能不够新。SLAM工程经常需要C++14甚至C++17的特性。

# 安装g++和构建工具
sudo apt install g++ gdb make -y

# 检查版本
g++ --version  # 建议9.0以上

我个人习惯装个Clang作为备用编译器。为什么?因为有时候gcc报的错误信息太晦涩,Clang的错误提示更友好。比如模板实例化失败时,Clang会直接告诉你哪个类型不匹配。

Python环境

千万别用系统自带的Python3做开发!我吃过这个亏——装了个numpy,结果把系统包管理器搞坏了。

# 安装pip和virtualenv
sudo apt install python3-pip python3-venv -y

# 创建虚拟环境
python3 -m venv slam_env
source slam_env/bin/activate

# 安装常用库
pip install numpy scipy matplotlib opencv-python
⚠️ 注意: ROS的Python包(比如rospy)必须安装在系统Python里,不能装在虚拟环境。所以我的做法是:系统Python只装ROS相关包,其他所有第三方库都放在虚拟环境里。

2.4 CMake与Eigen3库安装

CMake是C++工程的构建工具,Eigen3是SLAM里最常用的线性代数库。这两个是标配。

CMake安装

Ubuntu源里的CMake版本通常比较老。我建议从官网下载最新版。

# 方法一:apt安装(版本可能较旧)
sudo apt install cmake cmake-gui -y

# 方法二:源码安装(推荐)
wget https://github.com/Kitware/CMake/releases/download/v3.28.0/cmake-3.28.0.tar.gz
tar -xzf cmake-3.28.0.tar.gz
cd cmake-3.28.0
./bootstrap && make -j4 && sudo make install

# 验证
cmake --version

Eigen3安装

Eigen3是纯头文件库,安装非常简单。但要注意,SLAM里经常用到Eigen的Geometry模块,这个需要单独包含。

# 安装Eigen3
sudo apt install libeigen3-dev -y

# 查看安装路径
dpkg -L libeigen3-dev | grep -E "\.hpp$" | head -5
# 通常安装在 /usr/include/eigen3/

写CMakeLists.txt时,记得这样引用:

find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIRS})

# 或者更现代的方式
target_link_libraries(your_target Eigen3::Eigen)
🔑 核心要点: Eigen3默认使用堆栈分配,对于固定大小的矩阵(比如3x3、4x4)效率极高。但如果你要处理动态大小的矩阵(比如几百维),记得用Eigen::Dynamic,否则栈溢出会直接Segmentation fault。我曾经在优化BA问题时,不小心声明了一个Eigen::MatrixXd,结果没指定大小,程序跑着跑着就崩了,查了半天才发现是栈空间不够。

2.5 知识体系总览

下面这张图概括了本章所有内容的关系。你可以把它当作一个检查清单:

开发环境搭建知识体系 Ubuntu 20.04 LTS 系统 ROS Noetic(机器人操作系统) C++ 开发环境(g++/Clang) Python 开发环境(虚拟环境) CMake 构建系统 Eigen3 线性代数库 SLAM 工程开发就绪

这张图从下往上看:底层是Ubuntu系统,上面跑ROS,再上面是C++和Python两套开发环境,最上层是CMake和Eigen3。每一层都依赖下一层,缺一不可。

💡 我的建议: 装完所有环境后,写一个简单的测试程序——用Eigen3创建一个旋转矩阵,然后通过ROS发布出去,再用Python订阅并打印。这个“Hello World”级别的程序能验证你的整个链路是否通畅。我每次搭建新机器都会跑一遍这个测试,确保没有遗漏。

好了,环境搭好了,接下来就可以真正开始写SLAM代码了。记住,环境问题是最不值得花时间纠结的——如果卡住了,先检查版本兼容性,再检查环境变量,最后检查网络。这三板斧能解决90%的问题。


专注资料整理