Cartographer安装全攻略:从零开始到实战测试(手把手教学)
1. 为什么选择Cartographer如果你正在寻找一个开源的实时SLAM同步定位与地图构建解决方案Cartographer绝对值得考虑。它由谷歌开发特别擅长处理大规模环境下的2D/3D建图任务。我在实际项目中使用过多次最直观的感受是它对激光雷达数据的处理非常高效而且生成的栅格地图质量相当不错。Cartographer最大的优势在于它的实时性和可扩展性。比如在机器人导航项目中我测试过在16核CPU上它能实时处理每秒数万点的激光数据。对于初学者来说它的另一个优点是文档相对完善社区支持也比较活跃。不过要注意的是它对系统环境的要求比较严格这也是为什么很多人在安装阶段就会遇到各种问题。2. 安装前的准备工作2.1 硬件与系统要求根据我的经验Cartographer在以下环境中运行最稳定操作系统Ubuntu 18.04/20.04推荐LTS版本ROS版本Melodic或Noetic内存至少8GB处理大型地图建议16GBCPU四核以上实测双核机器编译会非常慢注意如果你用的是Windows系统建议使用WSL2或直接安装双系统。我在WSL1上尝试过由于文件系统性能问题编译过程异常缓慢。2.2 基础环境配置首先更新系统软件包这个步骤看似简单但很重要sudo apt-get update sudo apt-get upgrade -y接着安装一些基础开发工具sudo apt-get install -y build-essential cmake git wget如果你打算用ROS需要先完成ROS基础安装。这里以Melodic为例sudo sh -c echo deb http://packages.ros.org/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-get update sudo apt-get install ros-melodic-desktop-full3. 两种安装方式详解3.1 二进制安装推荐新手这是最快捷的方式适合只想快速体验Cartographer功能的用户sudo apt-get install ros-$(rosversion -d)-cartographer*安装完成后验证roscd cartographer_ros如果能正常进入目录说明安装成功。不过要注意二进制版本可能存在两个问题版本可能不是最新的某些高级功能可能被禁用3.2 源码安装完整功能3.2.1 安装依赖库这是最关键的步骤之一缺少任何依赖都可能导致后续编译失败sudo apt-get install -y \ cmake \ g \ git \ google-mock \ libboost-all-dev \ libcairo2-dev \ libeigen3-dev \ libgflags-dev \ libgoogle-glog-dev \ liblua5.2-dev \ libsuitesparse-dev \ libwebp-dev \ ninja-build \ protobuf-compiler \ python-sphinx3.2.2 Protobuf3特别处理Cartographer需要Protobuf3但ROS默认安装的是Protobuf2这会导致版本冲突。我踩过这个坑解决方法如下先卸载旧版本sudo apt-get remove libprotobuf-dev protoc --version # 确认是否已卸载安装Protobuf3依赖sudo apt-get install autoconf automake libtool curl make g unzip克隆并编译Protobuf3.6.0git clone -b v3.6.0 https://github.com/protocolbuffers/protobuf.git cd protobuf git submodule update --init --recursive ./autogen.sh ./configure make -j$(nproc) make check sudo make install sudo ldconfig最后确保protoc路径正确sudo cp /usr/local/bin/protoc /usr/bin4. 编译Cartographer4.1 创建工作空间建议单独创建一个工作空间mkdir -p ~/carto_ws/src cd ~/carto_ws/src克隆必要的仓库git clone https://github.com/googlecartographer/cartographer_ros.git git clone https://github.com/googlecartographer/cartographer.git git clone https://github.com/ceres-solver/ceres-solver.git4.2 编译Ceres SolverCeres是Cartographer依赖的优化库cd ceres-solver mkdir ceres-bin cd ceres-bin cmake .. make -j$(nproc) make test sudo make install4.3 编译Cartographer核心这一步耗时较长在我的i7笔记本上约30分钟cd ~/carto_ws rosdep update rosdep install --from-paths src --ignore-src --rosdistro$(rosversion -d) -y cd src/cartographer mkdir build cd build cmake .. -G Ninja ninja ninja test sudo ninja install4.4 编译ROS接口最后编译ROS封装cd ~/carto_ws catkin_make_isolated --install --use-ninja source install_isolated/setup.bash5. 测试与验证5.1 下载测试数据集官方提供了几个示例bag文件wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag5.2 运行2D建图测试启动2D建图demoroslaunch cartographer_ros demo_backpack_2d.launch bag_filename:${HOME}/Downloads/cartographer_paper_deutsches_museum.bag你应该能在RViz中看到实时构建的地图。我建议首次运行时打开终端查看输出信息确保没有警告或错误。5.3 常见问题解决问题1rosdep初始化失败sudo rosdep init rosdep update问题2缺少依赖项如果编译报错缺少某个库可以用apt-file查找sudo apt-get install apt-file sudo apt-file update apt-file search 缺少的头文件名.h问题3Protobuf版本冲突如果遇到protobuf相关错误可以检查版本protoc --version确保输出是libprotoc 3.6.06. 进阶配置建议安装完成后你可能需要调整一些参数以获得更好的性能优化编译选项 在cmake时添加-DCMAKE_BUILD_TYPERelease调整线程数 ninja编译时可以使用ninja -j$(nproc)内存不足处理 如果编译过程中被kill可以尝试ninja -j2 # 减少并行编译任务数保存配置文件 建议将环境变量写入bashrcecho source ~/carto_ws/install_isolated/setup.bash ~/.bashrc我在实际使用中发现Cartographer对激光雷达的校准质量非常敏感。如果建图效果不理想建议先检查传感器的标定数据。另外对于室内场景将trajectory_builder_2d.lua中的submaps.num_range_data调小如从90改为60可以提升细节表现。