自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 cartographer 代码思想解读(10)- slam前端LocalTrajectoryBuilder2D类(主流程)

cartographer 代码思想解读(10)- slam前端LocalTrajectoryBuilder2D类(主流程)local_trajectory_builder_2d处理流程local_trajectory_builder_2d类定义类含有变量输出结果MatchingResult结构体Odometry输入接口AddOdometryDataIMU输入接口AddImuData点云输入接口AddRangeData(核心处理方法)点云投影和滤波TransformToGravityAlignedFrame

2020-09-30 15:01:33 2468

原创 cartographer 代码思想解读(9)- 激光雷达畸变矫正

cartographer 代码思想解读(9)- 激光雷达畸变矫正本节为cartographer前端匹配算法中最后一个核心算法实现内容,下节将会这9节内容串起来构成cartographer中2dslam的前端总体接口local_trajectory_builder_2d类。此节激光矫正具体实现就是在local_trajectory_builder_2d实现的,单独列出来进行分析。是因为至今我使用的SLAM从未进行过矫正考虑,是因为室内机器人速度较低,同时雷达采用性能较好雷达,则可做简单的假设,认为影响较少。

2020-09-28 18:03:11 2629 2

原创 cartographer 代码思想解读(8)- 多激光传感器同步融合RangeDataCollator

cartographer 代码思想解读(8)- 多激光传感器同步融合RangeDataCollatorRangeDataCollator类定义AddRangeData()CropAndMerge()前面已经分析了cartographer前端的主要核心算法如插入更新和匹配算法等,其中激光雷达点云数据均为作为主要输入,使用时无需考虑具体几个传感器,传感器类型,可通认为是一个雷达产生的点云数据。但实际cartographer通过RangeDataCollator类将多种传感器进行了融合,并进行了时间同步,最后形

2020-09-28 17:26:13 2686 1

原创 cartographer 代码思想解读(7)-位姿估计器PoseExtrapolator实现

cartographer 代码思想解读(7)- 位姿估计器PoseExtrapolator实现pose_extrapolator类定义插入IMU数据 AddImuData()插入里程计数据 AddOdometryData()UpdateVelocitiesFromPoses()插入历史位置AddPose()航向角积分实现AdvanceImuTracker()ImuTracker类定义获取预测位置ExtrapolatePose(const common::Time time)思想总结cartographer

2020-09-25 17:02:36 3288 5

原创 cartographer 代码思想解读(6)- submap封装与维护

cartographer 代码思想解读(6)- submap封装与维护前面两节描述了submap2d的存储形式、表示形式、概率地图、继承关系,同时也包含了submap具体的初始化、更新原理和过程,即算法核心具体实现。这节主要描述下cartographer如何在代码中进行封装和调用的。cartographer代码中并没有直接调用submap的类进行处理,而是将submap类封装成submap2d进行调用,同时将其submap2d重新封装成了ActiveSubmaps2D类进行维护和管理。其代码目录如下:

2020-09-21 14:55:43 3328

原创 cartographer 代码思想解读(5)- probability grid地图更新2

cartographer 代码思想解读(5)- probability grid地图更新2gridmap插入新的rangesubmap和submap2d两个类含义submap2d 插入器CastRays实现gridmap更新查询表上节讲解了probability类以及基类grid存储内容,同时也分析了cartographer采用的概率初始化和更新的思想。本节接上节,分析cartographer概率更新代码具体实现。gridmap插入新的rangecartographer将新的一帧激光scan经过前端匹

2020-09-17 13:06:23 2759

原创 cartographer 代码思想解读(4)- probability grid地图更新1

cartographer 代码思想解读(4)- probability grid地图更新grid mapprobability mapprobability map cell 初始化probability grid地图更新前面3节分析cartographer 2d算法中的前端和闭环使用的匹配原理分析,采用的匹配方法均是采用scan-to-map的方法,比scan-to-scan的方法累计误差有所提高。其中匹配方法中的map如何获取,具体意义,本节通过分析相关源代码进行记录。在第一节已经讲过,由于cart

2020-09-16 16:35:57 3918 3

原创 cartographer 代码思想解读(3)- ceres优化库scan-match

cartographer 代码思想解读(3)- ceres优化库scan-matchceres匹配简单总结扫描匹配OccupiedSpaceCostFunction2D总结前两节分析了cartographer 中的相关匹配思想和相关匹配优化快速实现,但cartographer之所以局部slam即前端匹配的准确度极高,因为最终采用了优化匹配的方法,即比栅格化的地图相关匹配准确度更高。而cartographer将匹配转换成最小二乘思想,并采用自家的ceres库完成优化匹配。其详细的代码解释可参考他人博客:

2020-09-07 16:24:59 4526 1

原创 cartographer 代码思想解读(2)- 分支定界快速相关匹配

cartographer 代码思想解读(2)- 分支定界快速相关匹配分支界定基本原理源码解读顶层函数分层地图栈 PrecomputationGridStack2D上节描述cartographer中算法中的相关匹配算法,为前端的scan-match,由于其初始位置有一定确定和分布性,故采用基本的暴力扫描方法。本节描述相关匹配一种快速实现,主要应用于loop-scan。回环检测为后端处理重要步骤,即检测当前位置是否曾经来过,即采用当前scan在历史中搜索是否匹配。故其搜索范围及其位置不确定性较大,故carto

2020-09-04 13:52:16 5568 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除