赞
踩
1 Cartographer的介绍
Cartographer是一种用于构建实时二维和三维地图的开源算法库。它由Google开发,旨在支持机器人和自动驾驶车辆的定位和环境建模。Cartographer结合了激光雷达和惯性测量单元(IMU)的数据,并利用了多传感器数据的时间同步性,以高效地生成准确的地图。
Cartographer的主要特点包括:
(1)并行扫描匹配(Parallel Scan Matching):Cartographer使用并行计算来加快扫描匹配的速度。它将激光雷达数据划分为多个子集,并在并行处理器上同时处理这些子集,以实现快速的扫描匹配。
(2)位姿图优化(Pose Graph Optimization):Cartographer使用图优化技术来估计机器人的姿态和地图的拓扑结构。通过优化位姿图,可以提高地图的准确性和一致性,并减少传感器噪声和误差的影响。
(3)实时地图更新:Cartographer能够在机器人移动时实时更新地图。它通过处理连续的激光雷达数据流,并根据新的观测信息和机器人的运动来更新地图。这使得Cartographer适用于实时应用,如机器人导航和建筑物内的环境建模。
(4)支持二维和三维地图:Cartographer支持构建二维和三维地图。对于二维地图,它可以处理激光雷达数据,而对于三维地图,它可以使用激光雷达和IMU数据来进行建模。
2 Cartographer的框架
从上面的系统框图中可以看出, catographer算法的输入是各类传感器,其中包括有雷达数据,里程计位姿,IMU数据和GPS数据。雷达数据首先经过一个体素滤波器,再经过自适应体素滤波与由里程计和IMU融合构成位姿估计器生成local slam ,在local slam中 的扫描匹配使用 google 自家的seres库进行非线性求解,然后是构成子图,子图的构建过程通过运动滤波器。当子图不再生成时则会加入到global slam中,位姿间的约束通过稀疏位姿调整。
3. Cartographe的r安装
因为运行cartographer需要很多依赖,因此第一步就是解决依赖的问题,执行下面的指令安装必要的库:
- sudo apt-get install \
- clang \
- cmake \
- g++ \
- git \
- google-mock \
- libboost-all-dev \
- libcairo2-dev \
- libcurl4-openssl-dev \
- libeigen3-dev \
- libgflags-dev \
- libgoogle-glog-dev \
- liblua5.2-dev \
- libsuitesparse-dev \
- lsb-release \
- ninja-build \
- stow \
- python3-wstool \
- python3-rosdep \
- python3-sphinx \
- libatlas-base-dev
接下来是安装abseil库:
- git clone https://github.com/abseil/abseil-cpp.git
- cd abseil-cpp
- git checkout 215105818dfde3174fe799600bb0f3cae233d0bf # 20211102.0
- mkdir build
- cd build
- cmake -G Ninja \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
- -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \
- ..
- ninja
- sudo ninja install
- cd /usr/local/stow
接下来是ceres库
-
- sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
-
- GitHub - ceres-solver/ceres-solver: A large scale non-linear optimization library
-
- mkdir build
- cd build
-
- cmake ..
-
- make -j4
-
- sudo make install
-
-
然后安装proto3
- git clone https://github.com/google/protobuf.git
- cd protobuf
- git checkout tags/${VERSION}
- mkdir build
- cd build
- cmake -G Ninja \
- -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
- -DCMAKE_BUILD_TYPE=Release \
- -Dprotobuf_BUILD_TESTS=OFF \
- ../cmake
- ninja
- sudo ninja install
最后再安装cartographer
- cd cartographer
- mkdir build
- cd build
- cmake .. -G Ninja
- ninja
- CTEST_OUTPUT_ON_FAILURE=1 ninja test
- sudo ninja install
由于本人使用的github上大神注释好源码的版本,因此这里主要是按照该项目的安装演示,首先是到GitHub - xiangli0608/cartographer_detailed_comments_ws: cartographer work space with detailed comments该链接中克隆到自己的系统上。
4.Cartographer的编译
进入到工作空间,然后找到cat_make.sh脚本,执行./cat_make.sh,即可对整个工程进行编译。成功编译后会显示有四个功能包包含进去。
5. Cartographer的运行
5.1 2d 建图实验
执行指令 roslaunch cartographer_ros lx_rs16_2d_outdoor.launch
效果图:
5.2 3d 建图实验
执行指令:
roslaunch cartographer_ros lx_rs16_3d.launch
效果图
5.3 纯定位模式
执行指令:
roslaunch cartographer_ros lx_rs16_2d_outdoor_localization.launch
效果图
5.4官方数据集测试
先下载官方的数据集,点击该链接即可Running Cartographer ROS on a demo bag — Cartographer ROS documentation
5.4.1官方数据集2d建图测试
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag
效果图
5.4.2官方数据集3d建图测试
执行指令:ghm@ghm-QNLXS:~$ roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
效果图:
5.2.3 纯定位测试
执行指令:(1) roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag
等建图完成之后,再运行(2) roslaunch cartographer_ros demo_backpack_2d_localization.launch load_state_filename:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag.pbstream bag_filename:=${HOME}/Downloads/b2-2016-04-27-12-31-41.bag
(1)所完成的工作生成一张地图,然后保存地图的配置文件,这样在(2)才可以在所对应的地图中进行定位测试。
效果图:
结语:本文中学习了如何将cartographer安装到自己的系统,并成功通过cartographer对自制的数据集和官方的数据集进行建图和定位测试,数据集的获取可以私信。
下一篇预告:使用husky机器人对自定义的gazebo仿真环境进行测试。
参考链接:
https://github.com/cartographer-project/cartographer
Running Cartographer ROS on a demo bag — Cartographer ROS documentation
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。