第2章:开发环境搭建——Ubuntu系统安装与配置、ROS安装、C++与Python开发环境配置、CMake与Eigen3库安装
说实话,很多同学学SLAM,第一关就卡在了环境搭建上。
我记得刚入行那会儿,光装个ROS就折腾了两天,最后发现是Ubuntu版本选错了。嗯,这种坑我踩过不少,所以这一章我带你一步步把地基打牢。你想想看,如果连编译器都找不到头文件,后面的算法再牛也跑不起来。
2.1 Ubuntu系统安装与配置
我个人习惯用Ubuntu 20.04 LTS,搭配ROS Noetic。为什么选这个组合?因为目前主流的SLAM库(比如ORB-SLAM3、VINS-Fusion)都在这个版本上测试得最充分。
安装步骤其实很简单,但有几个细节要注意:
- 下载镜像:去清华源或者中科大源下载ISO,速度比官网快10倍。
- 分区建议:/boot给500MB,swap给内存大小,/给50GB以上(SLAM工程编译起来很吃空间)。
- 换源:装完系统第一件事就是换源,不然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
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
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)
2.5 知识体系总览
下面这张图概括了本章所有内容的关系。你可以把它当作一个检查清单:
这张图从下往上看:底层是Ubuntu系统,上面跑ROS,再上面是C++和Python两套开发环境,最上层是CMake和Eigen3。每一层都依赖下一层,缺一不可。
好了,环境搭好了,接下来就可以真正开始写SLAM代码了。记住,环境问题是最不值得花时间纠结的——如果卡住了,先检查版本兼容性,再检查环境变量,最后检查网络。这三板斧能解决90%的问题。