Gmapping
框架
具体实现
调试测试
改进
Catographer
框架
Cartographer — Cartographer documentationhttps://google-cartographer.readthedocs.io/en/latest/
具体原理实现
论文:
Google Cartographer SLAM 原理 (Real-Time Loop Closure in 2D LIDAR SLAM 论文详细解读)_梦凝小筑的博客-CSDN博客_cartographer 回环检测本文前言 *转载请注明出处@梦凝小筑 本人的研究方向为激光SLAM,因此对于Google Cartographer 的经典算法十分感兴趣,但是苦于该算法的论文是英文写作,且该论文有着公式多,解释少的特点。因此在看了原论文和网上的各种论文解读,都没有能够完全把这块硬骨头吃下去。 机缘巧合,本人研究生课程高等运筹学大作业需要运用和Google Cartographer 中的闭环检测...
https://blog.csdn.net/weixin_36976685/article/details/84994701传感器交互
传感器预处理
预测
局部建图
scan match
scan-to-map,优化方程是啥?
M是双三次插值法(bicubic interpolation):
submap之间怎么切分的?如果一个scan在时间连续上的多个submap都有匹配呢(不是回环),怎么处理的,滑窗吗,如果是滑窗,那内存不是占用更多?
有了submap还要把雷达原始数据放到关键帧里,不是重复了吗?
构建因子图
位姿+submap?
全局建图
回环检测
Real-Time Correlative Scan Matching完全解析(CSM帧匹配算法)
全局位姿优化
最优化方程是啥?SPA
imu/里程计/landmark怎么参与到后端优化去的?
论文:
代码
ceres_scan_matcher_2d的Match函数主要是在有一个初值的情况下,匹配点云和栅格地图,需要详细去看实现;
correlative_scan_matcher_2d
fast_correlative_scan_matcher_2d
real_time_correlative_scan_matcher_2d
调试测试
安装
catographer最终输出的是静态链接库(libcartographer.a文件)
注意:catographer选择2.0发布版本,catographer_ros不要选择1.0发布版本,直接从master获取最新代码,从时间上去选版本。不然报错类似以下的各种文件缺失:
lidar_ws/src/cartographer_ros-1.0.0/cartographer_ros/cartographer_ros/assets_writer.cc:24:10: fatal error: cartographer/common/make_unique.h: 没有那个文件或目录
#include "cartographer/common/make_unique.h"
Loam
Loam_Velodyne(最原始版本)
https://github.com/cuitaixiang/LOAM_NOTEDhttps://github.com/cuitaixiang/LOAM_NOTED
Floam
https://github.com/wh200720041/floamhttps://github.com/wh200720041/floam
LOAM编译时出现BUG: #error PCL requires C++14 or above
CMakeLists.txt加上set(CMAKE_CXX_STANDARD 14)即可
BUG:fatal error: opencv/cv.h:
解决办法:
安装opencv3.4.6,并且将安装路径改为
cmake -D CMAKE_INSTALL_PREFIX=/home/zf/LIBS/opencv_lib ..
在CMakeLists.txt中增加:
set(OpenCV_DIR "/home/zf/LIBS/opencv_lib/share/OpenCV")
将lego-loam 包编译出错opencv fatal error: cv.h: No such file or directory | 易学教程
编译ALOAM时,遇到BUG:
/home/zf/ROS_PROJECT/src/3D_odom/LOAM/A-LOAM/src/kittiHelper.cpp:91:64: error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
91 | cv::Mat left_image = cv::imread(left_image_path.str(), CV_LOAD_IMAGE_GRAYSCALE);
| ^~~~~~~~~~~~~~~~~~~~~~~