cartographer从入门到精通(一):cartographer介绍

一、cartographer重要文档

有关cartographer的资料有2个比较重要的网站,我们的介绍也是基于这两个网站,其中会加入自己的一些理解,后续也有一些对代码的修改,来实现我们想完善的功能。

1-Cartographer
2-Cartographer ROS
第1个是Cartographer的核心,它会编译成一个库文件供他人使用
第2个是作者写了个ros包来调用Cartographer的核心库来实现建图、导航的便捷展示。

二、Cartographer的安装

Cartographer是一个SLAM系统,它提供了2D和3D激光的建图功能,并支持多种平台和多种传感器配置。

技术概述
  • Cartographer的架构图
  • 在这里插入图片描述

我们可以看到白色框出来的三个区域,分别是

  • Input Sensor Data(数据输入模块)
  • Local SLAM(局部SLAM模块)
  • Global SLAM (background thread)(全局SLAM模块)

下面我们分别介绍一下这几个模块

Input Sensor Data(数据输入模块)

数据输入模块可以接收激光雷达(Range Data)、电机编码器(Odometry Pose)、陀螺仪(IMU Data)、还有固定坐标系位姿(Fixed Frame Pose)数据,这里的固定坐标系位姿(Fixed Frame Pose)数据在代码中有注释提到是GPS数据,其实也可以是其他类似GPS信号的数据源,顾名思义只要是固定坐标系下的位姿数据就可以。
如激光雷达:
在这里插入图片描述
如电机
在这里插入图片描述
如陀螺仪
在这里插入图片描述
以上品牌只作为参考,具体应用需要适配合适的传感器。

Local SLAM(局部SLAM模块)

输入的一帧一帧激光数据通过Scan Matching进行匹配,然后传给后端进行回环检测和优化,但是如果所有激光帧数据都传给后端,那计算量会非常大,而且很多是冗余的数据,所以算法要对数据进行筛选和过滤,Motion Filter就是做这个功能的,Motion Filter通过检测距离、角度、时间的变化来进行过滤传入后端的激光帧数据,比如上一帧激光与当前帧激光的距离变化大于0.1米、或者角度变化大于1度、或者时间间隔大于1秒,才会把数据帧传入后端,不满足要求的就会被丢弃(Dropped)。最后传入后端的激光帧会生成一个叫做Submap(子图)的数据结构。

Global SLAM (background thread)(全局SLAM模块)

以为Local SLAM会存在局部累计误差,所以需要Global SLAM来解决这个问题,解决的方式就是通过构建的各种约束进行优化来实现,所以这个模块首先要构建约束(主要包括INTRA和INTER两种约束,我们后面再来解释),构建完约束,接着就要进行优化了,Sparse Pose Adjustment就是来进行优化的。优化完成后累计误差就会被消除,同时之前有误差的位姿也会被调整,所以新进来的数据就要在此基础上进行调整,所以作者说Extrapolate all poses that were added later(推断后面添加进来的位姿)

局部SLAM会带来的累计误差,后端优化可以纠正累计误差:
在这里插入图片描述

其他模块
  • Voxel Filter(fixed size)(体素过滤)
  • Adaptive Voxel Filter(自适应体素过滤)
  • PoseExtrapolator(位姿推断器)
  • IMU Tracker(gravity alignment)(IMU跟踪器)
  • InsertionResult(传入后端时封装的一种数据结构,包含所有输入的数据)
Voxel Filter(fixed size)(体素过滤)

由于输入的激光数据比较密集,实际上我们用不到那么多数据,所以Voxel Filter的作用就是下采样,用来减少数据输入。fixed size代表下采样的间隔是固定的,这个数值可以自己设置。

Adaptive Voxel Filter(自适应体素过滤)

与Voxel Filter不同,Adaptive Voxel Filter是自适应的算法,就是在满足足够的点数据数量为前提,通过自适应调整采样间隔来实现这个目标。目的是在满足匹配精度要求为前提,使用尽量少的数据,这样也可以减少激光匹配时的计算量。

PoseExtrapolator(位姿推断器)

这个类是用来做位姿推断的,顾名思义他的作用就是用来推断位姿的,具体使用的数据有激光位姿、imu数据、odom数据。这个类可以精确到每一帧的位姿推断,所以在cartographer中也用来矫正初始激光数据的运动畸变,非常重要。

IMU Tracker(gravity alignment)(IMU跟踪器)

IMU Tracker是用来做imu的位姿跟踪的,用来辅助PoseExtrapolator进行位姿推断。

InsertionResult

作为传入后端时封装的一种数据结构,InsertionResult包含所有输入的数据,用来进行后端的优化。

开始使用

Cartographer是一个独立的C++库,如果想快速使用,建议使用ROS整合的应用

使用ROS整合的应用

ROS整合的代码可以在这里下载Cartographer ROS repository,您还可以在这里Cartographer ROS Read the Docs site找到关于此应用的完整文档。

编译Cartographer库

以 Ubuntu 18.04 为例

# Install the required libraries that are available as debs.
sudo apt-get update
sudo apt-get install -y \clang \cmake \g++ \git \google-mock \libboost-all-dev \libcairo2-dev \libceres-dev \libcurl4-openssl-dev \libeigen3-dev \libgflags-dev \libgoogle-glog-dev \liblua5.2-dev \libsuitesparse-dev \lsb-release \ninja-build \python3-sphinx \stow# Install Protocol Buffers and Abseil if available.
# No need to build it ourselves.
case "$(lsb_release -sc)" injammy|bullseye)sudo apt-get install -y libgmock-dev protobuf-compiler libabsl-dev ;;focal|buster)sudo apt-get install -y libgmock-dev protobuf-compiler ;;bionic);;
esac
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
sudo stow absl
VERSION="v3.4.1"# Build and 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
# Build and install Cartographer.
cd cartographer
mkdir build
cd build
cmake .. -G Ninja
ninja
CTEST_OUTPUT_ON_FAILURE=1 ninja test
sudo ninja install
系统要求

尽管Cartographer也可能运行在其他系统上,但是只在满足以下要求的系统上进行过验证。

已知的问题

32位系统上的eigen库有对齐问题,会导致系统内存冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯省赛真题46】python数字币统计 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析

目录 python数字币统计 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python数字币统计 第十四届蓝桥杯青少年组python比赛省赛真题 一、题目…

中国航天:星舰与猛禽发动机数据分析

文章目录 MainReference Main 马斯克坚信,随着星舰的全面投入运营,SpaceX将能够承担地球上主轨道超过99%的载荷质量。这款第三代星舰的起飞推力将跃升至10000吨以上,其有效载荷质量亦将高达200吨以上。 不仅如此,每次发射的成本控…

吊车安全监控:车载监控系统在吊装作业中的应用

在吊装作业中,安全始终是第一位的。然而,由于吊车臂长、视野受限以及操作过程中的不确定性,事故风险总是存在的。为了解决这些问题,现代吊车普遍采用了摄像头监控系统,通过实时传输的图像,为司机提供全方位…

【逆运动学】六轴机器人运动学逆解上位机控制

六轴机器人逆运动学上位机控制 最终效果 通过开发的上位机软件,实现对机械臂末端的精准操控。该软件接收输入的坐标与角度参数,经过算法处理计算出机械臂各关节轴的目标角度。随后,这些角度值被转换为对应的脉冲宽度调制(PWM&am…

telegram mini APP或游戏开发之bot设置

无意中发现telegram上居然也能发布小程序和游戏了,感觉发现了新大陆一样,自己好玩试了下。 参考教程 要在telegram上开发一个mini App或者game,创建一个专属于你的机器人就必不可少了。 创建bot机器人 在telegram上搜索@BotFather或者点击该这里BotFather。 如下图: 进…

一款轻量级的WPF UI库---Adonis UI

Adonis UI适用于 WPF 应用程序的轻型 UI 工具包,提供经典但增强的 Windows 视觉对象 组件内容 几乎所有 WPF 控件的模板的默认样式为方便起见,可根据需要使用两种配色方案(浅色和深色),也可用于自定义样式支持在运行时更改配色方案支持其他自定义配色方案提供水印等功能的…

查看VUE中安装包依赖的版本号

查看VUE中安装包依赖的版本号 全部依赖包版本查看某个依赖的例:查看stompjs 应用命令npm ls stompjs 全部依赖包版本 使用npm命令 使用 npm ls 命令可以列出项目中所有已安装的依赖包及其版本。 使用 npm list --depth1 命令可以列出项目中直接依赖的包及其版本&a…

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…

第4章 客户端-客户端案例分析

1 Redis内存陡增 1.1.现象 服务端现象&#xff1a;Redis主节点内存陡增&#xff0c;几乎用满maxmemory&#xff0c;而从节点内存并没有变化&#xff08;正常情况下主从节点内存使用量基本相同&#xff09;。 客户端现象&#xff1a;客户端产生了OOM异常&#xff0c;也就是Redis…

小白快速入门canvas画海报

小编以微信小程序原生语言举例 wxml页面&#xff1a; <canvas type"2d" id"myCanvas" style"width:375px;height:667px;"></canvas> js页面&#xff1a; import drawQrcode from ../../../utils/qrcode/weapp.qrcode.esmdata: {…

中小企业数字化转型如何选择适合自己的MES系统?

随着信息技术的飞速发展&#xff0c;数字化转型已成为中小企业提升竞争力、实现可持续发展的关键途径。在数字化转型过程中&#xff0c;制造执行系统&#xff08;MES&#xff09;作为连接企业资源计划&#xff08;ERP&#xff09;与车间现场管理的桥梁&#xff0c;扮演着至关重…

Docker Compose 入门

想象一下在服务器上运行静态页面的场景。对于这项任务&#xff0c;NGINX 服务器是一个不错的选择。我们在 static-site/index.html 路径下有一个简单的 HTML 文件&#xff1a; 通过使用 Docker&#xff0c;我们将使用以下官方镜像运行 NGINX 服务器 docker run --rm -p 8080:…

Stop Motion Studio Pro for Mac:Mac上的动画大师,让你的创意无限流动!

Stop Motion Studio Pro for Mac为创作者们提供了一个直观且易于使用的平台&#xff0c;让他们能够将静态的物体和场景转化为生动有趣的定格动画。&#x1f3a5; 无论是制作简单的玩具动画&#xff0c;还是复杂的电影级场景&#xff0c;这款软件都能轻松应对&#xff0c;让你的…

mfc140.dll怎么安装?mfc140.dll丢失安装详细解决方法

当电脑出现找不到mfc140.dll丢失问题&#xff0c;我们需要怎么办&#xff1f;怎么解决mfc140.dll丢失问题&#xff1f;mfc140.dll到底是什么&#xff1f;下面我给大家详细介绍与分析&#xff0c;最重要的是mfc140.dll的解决方法&#xff01; 一、文件丢失原因分析 在分析mfc14…

Pycharm导入内置库或者第三方库时标红,no module named ‘xxx‘

各版本的Pycharm都有可能会出现这样的问题&#xff1a;有些时候内置库和第三方库被标红为“No module named xxx”&#xff0c;而自己的库却能被正常导入。 本人是在使用远程ssh解释器时遇到的。实际运行该代码文件时&#xff0c;能够正常运行&#xff08;若不能正常运行则可能…

基于lio-sam的重定位和增量式建图

文章目录 遇到的问题解决思路预览效果详细过程预先构建地图订阅初始估计姿态加载全局地图ICP配准计算初始位姿参考遇到的问题 为了复用上个生命周期录制的轨迹,我需要用到重定位功能,现有的开源方案中,可以实现该功能,但存在以下问题:在预先构建的地图之外,无法实现定位…

uboot中内存DDR测试之mtest使用

相关代码路径: cmd/mem.c配置: make ARCHarm CROSS_COMPILEaarch64-linux-gnu- menuconfigCC cmd/mem.o cmd/mem.c: In function do_mem_mtest: cmd/mem.c:883:10: error: CONFIG_SYS_MEMTEST_START undeclared (first use in this function); did you mean CONFIG_SYS_…

教你如何找视频、音乐素材

很多时候&#xff0c;视频剪辑从业者都面临着寻找视频素材和音乐素材的问题。没有剪辑影视的视频素材&#xff0c;视频被层层水印覆盖&#xff0c;剪辑出来的视频效果不是很好。今天就给大家分享一些视频、音乐素材网站&#xff0c;再也不用为找素材头疼了&#xff01; 教你如何…

铁塔基站直流侧电能计量模块AMC16-DETT-安科瑞黄安南

AMC16-DETT 基站直流电能计量模块主要是针对有共享需求&#xff0c;且开关电源无分用户电量计量功能的基站而设计的。仪表可对六个回路的直流电能进行计量&#xff0c;并可为配套的霍尔传感器提供工作电流&#xff0c;同时可通过上位机软件实现零漂校准&#xff0c;具有遥测、遥…

一键解决外勤难题,精细化管理轻松get!

行程打卡是企业总部和分店、销售管理与销售、行政与员工保持信息对称的重要方式&#xff0c;也是区域负责人、督导和行政日常重要的工作之一。 行程打卡不仅承载着确保品牌运营的标准性和一致性的目标&#xff0c;同时也是为了收集行程各阶段存在的问题和不足&#xff0c;对后续…