2DLidar
文章平均质量分 81
学习记录
古路
这个作者很懒,什么都没留下…
展开
-
Life-long Mapping
在长时间的建图过程中,基于图优化的 SLAM 的方法存在以下问题:PoseGraph 中的节点随着机器人走过的距离越来越多,以至于求解规模不断增大,影响优化效率。而 Lifelong Mapping 的基本思想是实现机器人在进行导航过程中进行建图,使得 PoseGraph 的规模不能随着运行轨迹的增长而增加,而是和建图面积相关联。实现 Lifelong Mapping 的思路是定期删除 PoseGraph 中冗余节点,在这过程中有两个问题需要考虑:SLAM 的目的是构建周边环境的地图。因此,选取冗余节点的时原创 2022-11-21 11:43:02 · 616 阅读 · 0 评论 -
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 评论 -
Kalman滤波器--从高斯融合推导
状态估计问题的求解思路:假设系统 kkk 时刻的观测量为 zkz_kzk ,状态量为 xkx_kxk ,这两个变量是符合某种分布的随机变量,且它们不相互独立。我们希望求出:P(xk∣x0,z1:k)P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{z}_{1: k}\right)P(xk∣x0,z1:k)根据贝叶斯法则,(估计中的概率公式参考)将系统状态的概率求解拆分如下:P(xk∣x0,z1:k)∝P(zk∣x原创 2022-06-28 10:55:07 · 479 阅读 · 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 评论 -
gmapping学习
gmapping学习0.引言1.SLAM问题2.demo0.引言本文只是根据资料自己学习的过程记录。参考资料写得十分好。gmapping 基于fast-slam,将slam问题分解为,定位与建图。回顾自己的学习,其实推导就很简单了。ref01.估计中的概率公式总结ref02.粒子滤波用于机器人定位ref03.栅格地图建立-Grid-Mapping1.SLAM问题将SLAM问题通过条件联合分布,分解为定位与建图两个部分。后续的针对内存爆炸以及粒子耗尽问题的解决就写了,看原博客原创 2021-12-16 18:07:22 · 299 阅读 · 0 评论 -
估计中的概率公式总结
估计中的概率公式总结0.引言1.基本概念2.贝叶斯公式3.独立4.条件联合分布5.条件贝叶斯公式6.马尔科夫0.引言近期遇到的概率公式,整理一下。1.基本概念条件概率 P(A∣B)P(A|B)P(A∣B) : BBB 发生的情况下,AAA 发生的概率。联合概率 P(A,B)=P(A∣B)P(B)P(A,B) = P(A|B)P(B)P(A,B)=P(A∣B)P(B) : AAA 、 BBB 同时发生的概率 = BBB发生 * BBB 发生时 AAA 发生。联合 = 条件 * 边缘边缘概率原创 2021-12-16 12:08:01 · 2339 阅读 · 2 评论 -
栅格地图建立-Grid-Mapping
占栅格地图-Occupancy Grid Map,理论推导及代码阅读。原创 2021-12-15 18:29:29 · 5553 阅读 · 0 评论 -
粒子滤波用于机器人定位
粒子滤波学习0.引言1.滤波结果2.数据集0.引言参考链接。基本是基于概率机器人进行实现的,是一个很好的学习材料。1.滤波结果添加了滤波后的轨迹显示,前期容易跳变,可以在刚开始的时候采用里程计发布,滤波稳定后再使用滤波后的path进行显示。2.数据集看到数据集说明文档最后一张图片中的箭头表示,以为TlrT_{lr}Tlr误写为了TrlT_{rl}Trl,实际上没有。只是箭头表示和自己的习惯不一样,其他是一样的,具体体现在Localizer::measurementUpdate()函原创 2021-11-25 11:24:45 · 1345 阅读 · 3 评论 -
EKF-SLAM原理推导
EKF-SLAM0.引言1. 运动模型1.1.里程计模型1.2.运动更新2.测量模型0.引言参考链接。基本是基于概率机器人进行实现的,是一个很好的学习材料。此博客只是个人学习记录。AlgorithmExtendedKalmanfilter(μt−1,Σt−1,ut,zt)Algorithm Extended Kalman filter \left(\mu_{t-1}, \Sigma_{t-1}, u_{t}, z_{t}\right)AlgorithmExtendedKalmanfilter(μ原创 2021-12-02 22:46:47 · 2700 阅读 · 10 评论 -
ROS msg数据结构记录
ROS nav_msgs/Path.msg数据结构ref#include <ros/ros.h>#include <ros/console.h>#include <nav_msgs/Path.h>#include <std_msgs/String.h>#include <geometry_msgs/Quaternion.h>#include <geometry_msgs/PoseStamped.h>#include原创 2021-11-22 22:03:25 · 2380 阅读 · 0 评论 -
轮式里程计标定及二维激光数据去畸变
二维激光数据去畸变00.引言01.里程计标定02.二维激光雷达畸变校正00.引言二维激光数据结构查看rosmsg show sensor_msgs/LaserScan:std_msgs/Header header // 数据的消息头 uint32 seq // 数据的序号 time stamp // 数据的时间戳 string frame_id // 数据的坐标系float32 angle_min // 雷达数据的起始角度(最小角度)float32 angle_max /原创 2021-04-30 22:32:26 · 1050 阅读 · 8 评论