2. 环境总览:课程目标、硬件与软件栈

说实话,每次开始一个新项目,我最先做的不是写代码,而是先把环境理清楚。你想想看,如果连手里有什么工具、目标是什么都没搞明白,后面肯定到处踩坑。这一章咱们就把整个课程的蓝图铺开,看看要准备哪些硬件,软件栈长什么样。我个人习惯先把大框架搭好,再往里面填细节。

2.1 课程目标 —— 我们要搭出什么?

这门课的目标很直接:从零开始,在一台带摄像头的笔记本(或者树莓派)上,搭建一个能跑起来的视觉SLAM地图构建环境。不是只装几个库就完事,而是真正把传感器数据、特征提取、后端优化串成一条流水线。我记得自己刚学SLAM时,最痛苦的就是“每个库都会装,但一跑就崩”。所以这门课会带着你一步步验证,确保每个环节都通。

🎯 核心里程碑:

  • 搭建 Ubuntu + ROS 底层系统
  • 安装并验证 OpenCV、Eigen、Sophus、Pangolin
  • 配置图优化库 g2o 或 Ceres(二选一,我建议都装)
  • 用真实数据集跑通完整的视觉里程计(VO)
  • 最终输出一张稀疏或半稠密的地图

说白了,学完这门课,你就能自己从零手写一个简化版的 ORB-SLAM 前端。嗯,这里要提醒一下:我们不追求工程级性能,但原理和流程必须完整。

2.2 硬件要求 —— 别被“高性能”吓到

很多同学一听到SLAM就觉得必须上 i9 + 独立显卡。其实不然。我带过的项目里,有在树莓派4B上跑通单目VO的。当然,体验上会卡一点,但学习完全够用。

硬件最低配置推荐配置备注
笔记本电脑i5 第8代 / 8GB RAMi7 第12代 / 16GB RAM带集成摄像头即可
树莓派树莓派4B (4GB)树莓派5 (8GB)需 USB 摄像头或 CSI 接口
摄像头720p USB 摄像头全局快门 / 双目笔记本自带摄像头也能用
存储64GB 可用空间128GB SSD数据集很占空间

💡 我的经验: 如果你用笔记本,记得把电源插上。SLAM 编译时 CPU 满载,电池撑不了多久。我曾经在咖啡厅用电池编译 g2o,结果编译到一半没电关机…… 嗯,从那以后我养成了编译前插电的习惯。

2.3 软件栈概览 —— 每一层都是什么角色?

整个软件栈就像叠罗汉,每一层负责一件事。我习惯从下往上理解:

应用层 · 视觉里程计 / 建图节点 中间件 · ROS Noetic (通信/驱动/工具) 视觉 & 数值库 OpenCV · Eigen · Sophus 优化 & 可视化 g2o / Ceres · Pangolin 操作系统 · Ubuntu 20.04 LTS 硬件抽象层 · 摄像头驱动 / USB / CSI

从上图能看明白:Ubuntu 是地基,ROS 是血管,OpenCV/Eigen 提供数学和视觉能力,g2o/Ceres 负责优化,Pangolin 让你看到结果。我刚开始接触时,总觉得“装个ROS就行了”,后来才发现每个库都有自己别扭的地方。比如 Eigen 是纯头文件库,但版本不对会导致编译错误——这个坑我替你们踩过了。

2.4 各组件速览 & 避坑

  • Ubuntu 20.04 —— ROS Noetic 的最佳搭档。别用 22.04,除非你想折腾 Docker。
  • ROS Noetic —— 机器人界的“Linux”。它管理节点、话题、服务。我个人习惯把所有传感器驱动都包装成 ROS 节点。
  • OpenCV 4.x —— 图像读取、特征提取、可视化。我建议从源码编译,这样能打开 contrib 模块。
  • Eigen 3.4+ —— 矩阵运算的瑞士军刀。注意:Sophus 依赖 Eigen,版本要匹配。
  • g2o / Ceres —— 图优化库。g2o 更直观,Ceres 更通用。我的建议是:先装 g2o 跑通流程,再试试 Ceres。
  • Pangolin —— 3D 可视化。用来显示相机轨迹和地图点,比 Rviz 轻量。

⚠️ 我曾经踩过的坑: 装 g2o 时忘了安装依赖 libsuitesparse-dev,结果编译报错一长串,当时我还以为是编译器坏了…… 后来发现只要一行 sudo apt install libsuitesparse-dev 就搞定。所以后面每装一个库,我都会强调依赖检查。

2.5 本章小结 & 下一步

好了,现在你心里应该有数了:我们有一台带摄像头的电脑,目标是把 Ubuntu、ROS、OpenCV、Eigen、g2o/Ceres 这一整套环境跑通。别担心,我会把每个步骤掰开揉碎,包括那些文档里没写的“小窍门”。