![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
cartographer解析系列
文章平均质量分 66
南山&M
这个作者很懒,什么都没留下…
展开
-
Cartographer源码阅读2D&3D-PGM生成及地图发布 pgm生成
参考链接: https://blog.csdn.net/yeluohanchan/article/details/108887777.原创 2021-10-09 09:58:59 · 212 阅读 · 0 评论 -
Cartographer源码阅读-删除Submap机制
目录Cartographer源码阅读-删除Submap机制Cartographer源码阅读-删除Submap机制参考链接: https://blog.csdn.net/yeluohanchan/article/details/108887441.原创 2021-10-09 09:57:30 · 222 阅读 · 0 评论 -
Cartographer源码阅读2D-后端优化-SPA
目录Cartographer源码阅读2D-后端优化-SPASPA优化:类Cartographer源码阅读2D-后端优化-SPASPA优化:类// 存放Node的信息struct NodeSpec2D { common::Time time; // 该帧的时间 transform::Rigid2d local_pose_2d;// 不带重力对齐的LocalSLAM下的位姿 transform::Rigid2d global_pose_2d;// 不带重力对齐的GlobalSLAM下的位姿原创 2021-10-09 09:52:25 · 285 阅读 · 0 评论 -
Cartographer源码阅读2D-后端回环计算
目录Cartographer源码阅读2D-后端回环计算ConstraintBuilder2D回环计算接口:MaybeAddConstraint()回环计算方法构造分支定界匹配类:DispatchScanMatcherConstruction()分支定界FastCorrelativeScanMatcher2D类接口同一入口:生成低分辨率候选解GenerateLowestResolutionCandidates()低分辨率候选解打分:ComputeLowestResolutionCandidates()打分Sc原创 2021-10-09 09:42:41 · 433 阅读 · 0 评论 -
Cartographer源码阅读-2D后端-PoseGraph2D
目录Cartographer源码阅读-2D后端-PoseGraph2D后端PoseGraph2D添加Node获取当前轨迹(Local SLAM坐标系)在Global SLAM坐标系下的位姿:GetLocalToGlobalTransform()回环计算接口:ComputeConstraintsForNode()将submap加入优化问题:InitializeGlobalSubmapPoses()执行优化:DispatchOptimization()Cartographer源码阅读-2D后端-PoseGra原创 2021-10-09 09:26:30 · 325 阅读 · 0 评论 -
Cartographer源码阅读2D-前端Node稀疏化-MotionFilter
Cartographer源码阅读2D-前端Node稀疏化-MotionFilter在trajectory_builder_2d.cc的LocalTrajectoryBuilder2D::AddAccumulatedRangeData函数中,执行稀疏化任务,即,在AddAccumulatedRangeData函数中调用InsertIntoSubmap函数,在InsertIntoSubmap函数内调用(motion_filter_.IsSimilar(time, pose_estimate)函数,进行稀疏化,原创 2021-10-09 09:06:05 · 174 阅读 · 0 评论 -
Cartographer源码阅读2D-前端Submap生成及数据插入
Cartographer源码阅读-2D前端Submap生成及数据插入前端CSM位姿计算后,将激光点云转换到Local SLAM的坐标系下,插入submaps中,该submaps指的是前端LocalTrajectoryBuilder2D中维护的ActiveSubmap2d。ActiveSubmap2D类class ActiveSubmaps2D { public: explicit ActiveSubmaps2D(const proto::SubmapsOptions2D& options原创 2021-10-09 09:02:03 · 726 阅读 · 0 评论 -
Cartographer源码阅读2D-前端CSM-CeresScanMatcher2D
Cartographer源码阅读2D-前端CSM-CeresScanMatcher2D基本原理:其实,在代码里实现的时候,又加上了旋转和平移的残差,防止点云匹配的结果和初值差太多。CeresScanMatcher2D类class CeresScanMatcher2D { public: explicit CeresScanMatcher2D(const proto::CeresScanMatcherOptions2D& options); virtual ~CeresScanMa原创 2021-10-09 08:39:06 · 313 阅读 · 0 评论 -
Cartographer源码阅读2D-前端暴力匹配-RealTimeCorrelativeScanMatcher2D
Cartographer源码阅读2D-前端暴力匹配-RealTimeCorrelativeScanMatcher2D使用暴力匹配的思想,解决当前激光帧和submap匹配的问题:假定在SLAM的过程中,车体的运动是连续有界的,即运动速度是不可能达到无穷大,根据车体的运动速度,可以预测当前帧和上一帧之间的最大相对运动大小是多少,假设我们已经知道上一帧经过CSM解算过的位姿,我们将所有可能的位姿和当前激光帧组合到一起,生成可能解。然后,遍历所有可能解,把所有的可能解投射到submap上:计算当前激光帧通过其位原创 2021-10-09 08:27:23 · 363 阅读 · 0 评论 -
Cartographer源码阅读-2D前端-位姿外推器-PoseExtrapolator
Cartographer源码阅读-2D前端-位姿外推器-PoseExtrapolatorPoseExtrapolator类,继承于PoseExtrpolatorInterface类class PoseExtrapolatorInterface { public: struct ExtrapolationResult { // The poses for the requested times at index 0 to N-1. std::vector<transform::原创 2021-09-29 14:26:17 · 525 阅读 · 0 评论 -
Cartographer源码阅读2D&3D----前端自适应滤波----AdaptiveVoxelFilter()
Cartographer源码阅读2D&3D----前端自适应滤波----AdaptiveVoxelFilter()基本原理:调用体素滤波,如果体素滤波后点数大于阈值,则返回,如果小于阈值,则接着使用二分法进行体素滤波。前端使用接口Local_Trajectory_builder.cc // 对重力对齐的点云数据进行自适应滤波 const sensor::PointCloud& filtered_gravity_aligned_point_cloud = sensor原创 2021-09-28 22:05:25 · 642 阅读 · 0 评论 -
cartographer源码阅读----2D前端根据时间戳滤波(RangeDataCollator)
cartographer源码阅读----2D前端根据时间戳滤波(RangeDataCollator)基本原理:根据当前激光帧的时间戳和上一帧激光帧的时间戳,找到当前激光帧和上一帧激光帧时间重叠的激光点,滤除时间重复的点。在Local_Trajectory_builder.cc中,AddRangeData的对象的类型是RangeDataCollator,作用是将时间上未对齐的雷达数据,进行对齐,滤掉重叠的点class RangeDataCollator { public: explicit Ra原创 2021-09-28 21:37:01 · 500 阅读 · 0 评论 -
cartographer源码解读----前端2D体素滤波(VoxelFilter)
cartographer源码解读----前端2D体素滤波(VoxelFilter)VoxelFilter类基本原理:将xyz分别除以分辨率,并取整,得到xyz所在cell的id(x,y,z),再将该三个整数分别放入3*32个字节的数中(很好的技巧,避免了大量的遍历和比较),插入voxelFileter::voxel_set_中,后面如果是第一次插入该数,则保留该点,如果之前存在该数,即意味着有其他点落在该网格内,不再保留该点。最新一版的代码,并没有VoxelFilter类,但依然在voxel_fil原创 2021-09-28 17:29:42 · 1239 阅读 · 0 评论 -
cartographer源码解读——2D前端(LocalTrajectoryBuilder2D)
cartographer源码解读——2D前端(LocalTrajectoryBuilder2D)前端的主要功能点云数据处理:滤波、畸变校正位姿外推器推算位姿暴力匹配、CSM匹配生成submap生成Node传入后端sensors数据通过在cartographer_ros中获取并传入cartographer中,由GlobalTrajectoryBuilder.cc中的AddSensorData()函数,将sensor数据传入前后端,首先考虑前端本节将讲述LocalTrajectoryBuil原创 2021-09-28 16:36:42 · 801 阅读 · 0 评论 -
cartographer源码解读-2D数据流动-数据分发
二、数据分发接收sensor数据原创 2021-09-12 21:05:40 · 529 阅读 · 0 评论 -
cartographer源码解读----2D&3D数据流动----轨迹添加(以2D雷达和轮速里程计为例)
cartographer源码解读----2D&3D数据流动----轨迹添加(以2D雷达和轮速里程计为例)入口:node_main.cc(cartographer_ros)void Run() { constexpr double kTfBufferCacheTimeInSeconds = 10.; //构建tf_buffer tf2_ros::Buffer tf_buffer{::ros::Duration(kTfBufferCacheTimeInSeconds)}; tf2_r原创 2021-09-10 10:42:10 · 850 阅读 · 0 评论