第2章 · 开发环境全家桶安装

说实话,搞SLAM仿真联调,最怕什么?不是算法调不通,而是环境装到一半崩溃了。我见过太多同学卡在依赖地狱里,最后连个roscore都起不来。这一章,咱们就把地基打扎实——Ubuntu 20.04、ROS Noetic、Gazebo、Rviz,再加上Eigen3和Sophus这些必备库,一步到位装好。

🎯 本章目标: 从零搭建一个可复现的SLAM开发环境,所有工具链经过我实测验证。装完你能跑通第一个ROS例程,并且Gazebo里能打开一个仿真世界。
📦 开发环境全家桶 · 依赖关系 Ubuntu 20.04 LTS ROS Noetic Gazebo 11 Rviz Eigen3 Sophus 其他依赖

2.1 系统准备:Ubuntu 20.04 配置

我个人习惯用Ubuntu 20.04作为SLAM开发的主力系统。为什么不是22.04?因为ROS Noetic对20.04的支持最原生,很多二进制包直接apt就能装,省去编译的麻烦。如果你用的是双系统或者虚拟机,记得给磁盘留至少60GB空间——后面仿真场景、数据集会慢慢吃掉不少。

💡 我的建议: 安装系统时语言选English,避免终端出现中文乱码。如果你已经装了中文版,问题也不大,但记得把locale设置为en_US.UTF-8。

装好系统后,第一件事更新软件源:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git vim cmake build-essential

嗯,这里要注意:build-essential包含了gcc/g++,后面编译Sophus和Ceres都靠它。我曾经在一台新机器上忘了装这个,结果编译报错一脸懵……

2.2 ROS Noetic 安装与验证

ROS Noetic是ROS1的最后一个长期支持版,也是目前SLAM生态最成熟的版本。安装过程其实很固定,但有几个坑我帮你踩过了。

  1. 添加ROS源 —— 用中科大或清华的镜像,速度更快。
  2. 安装桌面完整版 —— 包含Gazebo、Rviz、各种工具包。
  3. 初始化rosdep —— 这一步经常因为网络问题失败,我后面会讲怎么破。
# 设置sources.list (清华源)
sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install -y ros-noetic-desktop-full
⚠️ 避坑指南: 我曾经在配置rosdep时卡了半小时,因为sudo rosdep init总是报网络错误。解决方案:手动下载20-default.list文件放到/etc/ros/rosdep/sources.list.d/下,或者使用代理。如果你也遇到,直接搜“rosdep init 失败 解决方法”就行。

验证安装是否成功:

source /opt/ros/noetic/setup.bash
roscore
# 如果看到 started core service [/rosout] 就说明成了

我个人习惯把source /opt/ros/noetic/setup.bash加到~/.bashrc里,这样每次打开终端不用手动source。你想想看,要是每次都要敲一遍,多烦人。

2.3 Gazebo 与 Rviz 安装

Gazebo和Rviz其实在ros-noetic-desktop-full里已经包含了。但Gazebo的模型库有时候需要单独下载,否则打开仿真世界时一片空白。

# 安装Gazebo模型库(可选,但推荐)
git clone https://github.com/osrf/gazebo_models.git ~/.gazebo/models
# 验证Gazebo
gazebo --version
# 验证Rviz
rviz

如果你运行gazebo后窗口闪退,大概率是显卡驱动问题。我在一台NVIDIA笔记本上遇到过,安装nvidia-driver-470后解决。另外,虚拟机用户建议启用3D加速。

🔧 快速自检: 打开终端,输入rosrun rviz rviz,如果能看到Rviz界面,说明ROS和Rviz都正常。再输入gazebo --verbose,等几秒看到灰色地面,Gazebo就绪。

2.4 依赖库安装:Eigen3 与 Sophus

Eigen3是SLAM里最常用的线性代数库,Sophus则提供了李群李代数的实现。这两个库都是纯头文件或轻量编译,安装起来很快。

库名版本建议安装方式用途
Eigen33.3.7 或 3.4.0sudo apt install libeigen3-dev矩阵运算、四元数、旋转矩阵
Sophus1.22.x (非模板版)源码编译SO3/SE3 李群李代数
fmt (Sophus依赖)7.1.3+sudo apt install libfmt-dev格式化输出
# Eigen3 安装
sudo apt install -y libeigen3-dev
# 验证版本
pkg-config --modversion eigen3

# Sophus 安装 (推荐使用非模板版本)
git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff   # 切换到稳定commit
mkdir build && cd build
cmake ..
make -j4
sudo make install

编译Sophus时,如果报错找不到fmt,先安装libfmt-dev。我记得有一次在Ubuntu 20.04上默认的fmt版本太旧,导致Sophus编译失败,后来从源码装了fmt 8.0才搞定。所以如果你遇到类似问题,别慌,升级fmt就行。

📌 小经验: 安装完Sophus后,可以用ls /usr/local/lib/cmake/Sophus/检查是否生成了cmake配置文件。后面我们在CMakeLists.txt里直接find_package(Sophus REQUIRED)就能用。

2.5 环境验证:跑一个最小SLAM测试

所有东西装完后,我们快速验证一下整个链路。创建一个ROS工作空间,写一个简单的节点,用Eigen和Sophus做个位姿变换,然后通过Rviz可视化。

mkdir -p ~/slam_ws/src && cd ~/slam_ws
catkin_make
source devel/setup.bash
# 创建一个测试包
cd src && catkin_create_pkg test_slam roscpp eigen3 sophus
# 编译 & 运行
catkin_make
rosrun test_slam test_node

如果编译通过且节点能输出位姿信息,恭喜你——环境全家桶已经就绪。后面每一章我们都会在这个工作空间里添加新功能。

✅ 本章核心要点:
  • Ubuntu 20.04 + ROS Noetic 是SLAM仿真联调最稳的组合。
  • Gazebo和Rviz随ROS一起安装,但模型库和驱动需要额外留意。
  • Eigen3用apt装,Sophus建议源码编译,注意fmt版本。
  • 所有工具装完后,用一个小测试包验证整个工具链。