第2章 · 开发环境全家桶安装
说实话,搞SLAM仿真联调,最怕什么?不是算法调不通,而是环境装到一半崩溃了。我见过太多同学卡在依赖地狱里,最后连个roscore都起不来。这一章,咱们就把地基打扎实——Ubuntu 20.04、ROS Noetic、Gazebo、Rviz,再加上Eigen3和Sophus这些必备库,一步到位装好。
2.1 系统准备:Ubuntu 20.04 配置
我个人习惯用Ubuntu 20.04作为SLAM开发的主力系统。为什么不是22.04?因为ROS Noetic对20.04的支持最原生,很多二进制包直接apt就能装,省去编译的麻烦。如果你用的是双系统或者虚拟机,记得给磁盘留至少60GB空间——后面仿真场景、数据集会慢慢吃掉不少。
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生态最成熟的版本。安装过程其实很固定,但有几个坑我帮你踩过了。
- 添加ROS源 —— 用中科大或清华的镜像,速度更快。
- 安装桌面完整版 —— 包含Gazebo、Rviz、各种工具包。
- 初始化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
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则提供了李群李代数的实现。这两个库都是纯头文件或轻量编译,安装起来很快。
| 库名 | 版本建议 | 安装方式 | 用途 |
|---|---|---|---|
| Eigen3 | 3.3.7 或 3.4.0 | sudo apt install libeigen3-dev | 矩阵运算、四元数、旋转矩阵 |
| Sophus | 1.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就行。
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版本。
- 所有工具装完后,用一个小测试包验证整个工具链。