1. 问题背景与环境准备
最近在Ubuntu 20.04系统上部署Cartographer SLAM系统时,遇到了一个典型的依赖缺失问题。Cartographer作为Google开源的2D/3D SLAM(同步定位与地图构建)系统,在机器人导航领域应用广泛,但其复杂的依赖关系常常让新手头疼。
我的工作空间结构如下:
code复制~/cartographer_ws/
├── src/
│ ├── cartographer
│ ├── cartographer_ros
│ └── ceres-solver
在首次执行catkin_make_isolated --install --use-ninja命令时,系统提示找不到catkin_make_isolated命令。这是因为没有正确设置ROS环境变量导致的。解决方法很简单:
bash复制source /opt/ros/noetic/setup.bash
注意:这个操作需要在每个新的终端会话中执行,或者可以将其添加到~/.bashrc文件中实现自动加载。
2. Abseil库缺失问题分析
当环境变量设置正确后,构建过程开始执行,但很快遇到了第一个实质性错误:
code复制CMake Error at CMakeLists.txt:32 (find_package):
By not providing "Findabsl.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "absl", but
CMake did not find one.
这个错误表明Cartographer需要Google的Abseil C++库(简称absl),但系统中没有安装。Abseil是Google开源的C++基础库集合,提供了许多标准库的增强功能,Cartographer使用它来处理各种基础数据结构、字符串操作和并发编程等任务。
检查Ubuntu官方仓库发现,没有直接可用的absl包:
bash复制apt search absl
返回结果为空,这意味着我们需要从源码编译安装Absei
