cartographer
文章平均质量分 76
学习记录
古路
这个作者很懒,什么都没留下…
展开
-
cartographer_FixedRatioSampler
比例采样器 cartographer::common::FixedRatioSampler 目的是按照固定的比例采样数据。所有的距离传感器都只有一个采样器,所以就算不同的传感器也会同等的按照比例来选择。所以这样看来,并不是按照固定速率采用数据。而是对数据进行了按比例选择使用。构造函数设置频率 ratio。原创 2022-10-19 10:37:01 · 234 阅读 · 1 评论 -
cartographer_lua
了解 cartographer 参数读取流程,从这儿也能看出大致框架,理清思路。同时也可方便去除 protobuf 依赖。要习惯 protobuf。总结 从 cartographer_ros 的launch文件到底层的参数是如何传递的。原创 2022-10-13 11:49:12 · 228 阅读 · 0 评论 -
cartographer_thread_pool
整个SLAM中实时进入任务队列的主要为计算约束,当加入节点数超过参数时,才进行一次优化。线程池看源代码更好理解,这里就不贴代码了。看看测试用例,了解使用过程。[task_b、task_c执行完后通知task_d并开始执行][task_a执行完后通知task_b并开始执行]循环,执行 WhenDone 【优化】。,也就是执行完这三个函数后会跳出。[后台开始执行task_a][后台开始执行task_c]原创 2022-10-10 10:25:22 · 884 阅读 · 0 评论 -
cartographer_optimization_problem_2d
主要业务逻辑回到中。具体的优化这一部分就是在中进行实现。前面计算约束结果为:将节点与子图原点在global坐标系下的相对位姿 与 约束 的差值作为残差项残差计算代码:2.2.第二种残差-Landmarklandmark数据 与 通过2个节点位姿插值出来的相对位姿 的差值作为残差项主要是 之间的约束:略.节点与节点间在global坐标系下的相对坐标变换 与 通过里程计数据插值出的相对坐标变换 的差值作为残差项节点与节点间在global坐标系下的相对坐标变换 与 相邻2个节点在local坐标系下的相对坐原创 2022-06-23 17:36:18 · 617 阅读 · 2 评论 -
cartographer_fast_correlative_scan_matcher_2d分支定界粗匹配
是对real_time_correlative_scan_matcher_2d算法采用分支定界进行加速优化。mapping/internal/2d/scan_matching/fast_correlative_scan_matcher_2d.cc :mapping/internal/2d/scan_matching/real_time_correlative_scan_matcher_2d.原创 2022-06-23 10:52:35 · 1063 阅读 · 2 评论 -
cartographer_pose_graph_2d
本文主要学习了pose_Graph中的部分逻辑,特别是后端优化中的两种约束计算。不规范类图:部分数据结构:节点与约束的概念Tgl∗Tln=TgnT_{gl} * T_{ln} = T_{gn}Tgl∗Tln=Tgn :将节点在local坐标系下的位姿转成global坐标系下的位姿TglT_{gl}Tgl :TlnT_{ln}Tln:node在local map frame坐标系下的位姿这一步主要就是将 节点 添加到 的 中。这里添加的节点位姿,实际上从前端结果可以看出,这里也有另原创 2022-06-22 15:34:07 · 608 阅读 · 0 评论 -
cartographer_backend_constraint
cartographer 后端约束示意图原创 2022-06-22 14:24:11 · 198 阅读 · 0 评论 -
cartographer_local_trajectory_builder_2d
对前端做一个总结。前端的主要功能:(1)点云数据处理:滤波、畸变校正(2)位姿外推器推算位姿(3)暴力匹配(scan-to-submap)(4)CSM匹配(5)生成Submap(6)生成Node传入后端系统整体概览:前端概览:cartographer_ros的submap获取与保存参考参考......原创 2022-06-21 15:09:59 · 352 阅读 · 0 评论 -
cartographer_ceres_scan_matcher_2d
同样的以 M(x)M(x)M(x) 概率越大越好,通过 1−M(x)1-M(x)1−M(x)则转为求最小值,也就是转为了最优化问题。最终目标要求最优的 T=(Tx,Ty,Tθ)T = (T_x,T_y,T_{\theta})T=(Tx,Ty,Tθ) 通过优化求解。常数 2 不影响结果,直接丢掉。cartographer 在代码实现过程中直接使用的 ceres 自动求导,没有对以上公式推导的细节进行代码实现。误差项的定义与计算在如下文件中:对外接口实现在 中,核心函数...原创 2022-06-16 10:54:02 · 1353 阅读 · 0 评论 -
cartographer_real_time_correlative_scan_matcher_2d
实时相关性扫描匹配:暴力匹配。主要实现在 与 中,接口函数核心函数为 .相关配置参数:整体思路:1、在设定的初始位置,在窗口范围内搜索,提取出每个候选位姿。2、计算出每个候选位姿下,点云打在栅格图上面的概率,计算其和。3、概率和最大的候选位姿,就为所要寻找的最佳位姿。1.SearchParametersstep 2 根据配置参数初始化 SearchParameters位于中。参考。余弦定理:根据参数角度搜索的范围窗口大小以及角度搜索步长求取角度搜索窗口的步数:所以,参数设原创 2022-06-15 17:12:16 · 790 阅读 · 0 评论 -
cartographer_probability_grid
首先从 上层进入,由于cartographer支持 2D 和 3D,所以在代码基本是面向接口编程的, 不完整类图如下(画得不是很规范,将就看):ActiveSubmaps2D 类:核心函数就是 .这部分代码辨别坐标时:默认resolution:0.05–>5cm/pixel.分辨率还是挺高的,比较耗内存。2.栅格地图的更新这一小节主要搬迁至这篇文章,备忘。相关常量和数值的计算在 里面。举例:假设 looccu = 0.9,lofree = -0.7。那么,显而易见,一个栅格状态的原创 2022-06-15 10:09:38 · 1377 阅读 · 1 评论 -
cartographer_pose_extrapolator
PoseExtrapolator 主要用于前端里程计:PoseExtrapolator主要思想: 采用匀速运动学模型预测未来时间time处的pose. 而匀速运动学模型的平移速度(线速度)是由角速度是由私有变量:数据结构:1.添加观测1.1. AddImuData向imu数据队列中添加imu数据,并进行数据队列的修剪 向odom数据队列中添加odom数据,并进行数据队列的修剪 ,并计算角速度与线速度.从 odometry_data_ 里面取出最老的与最新的两帧的数据。2.状态量的更新与校准Add原创 2022-06-13 15:05:44 · 558 阅读 · 0 评论