【cartographer_slam源码阅读】4-6激光雷达数据的转换

2023-05-16

HandleLaserScanMessage()函数

在这里插入图片描述

作用:

  1. 利用 ToPointCloudWithIntensities函数 将ros中的数据转换为carto中定义的数据类型;
  2. 传入 HandleLaserScan() 函数中进行处理;

Note:

  1. sensor_msgs::LaserScan数据格式:
  2. PointCloudWithIntensities数据格式:

HandleMultiEchoLaserScanMessage() 函数同上类似;

HandlePointCloud2Message()函数

在这里插入图片描述

作用:

  1. 利用ToPointCloudWithIntensities函数 将ros中的数据转换为carto中定义的数据类型;
  2. 传入 HandleRangefinder() 函数中进行处理;

上面三个函数都调用了ToPointCloudWithIntensities函数,该函数根据传参数据格式不同进行了重载;

ToPointCloudWithIntensities()函数

LaserScanToPointCloudWithIntensities()函数

模板函数,处理ros格式的sensor_msgs::LaserScan and sensor_msgs::MultiEchoLaserScan数据格式,得到PointCloudWithIntensities类型数据;

数据格式

LaserScan(单回波激光雷达):

header: 消息头,包含了该消息的帧id、时间戳和坐标系信息。
angle_min: 扫描起始角度,单位为弧度。(180度)
angle_max: 扫描终止角度,单位为弧度。(-180度)
angle_increment: 角度分辨率,即每个激光束之间的角度差,单位为弧度。(-0.18度)
time_increment: 时间分辨率,相邻两激光点的扫描时间增量,单位为秒。
scan_time: 一次扫描的持续时间,单位为秒。(0.06秒)
range_min: 能够测量到的最小距离值,单位为米。(0米)
range_max: 能够测量到的最大距离值,单位为米。(40米)
ranges: 扫描得到的距离值数组,按照顺序存放,单位为米。
intensities: 扫描得到的反射强度值数组,如果激光雷达不支持反射强度测量,则该字段为空。

MultiEchoLaserScan(多回波激光雷达):

程序逻辑

  1. 激光雷达异常数据判断
    在这里插入图片描述
    在这里插入图片描述

最终需要得到的数据格式:


在这里插入图片描述
在这里插入图片描述
激光点在指定坐标系的坐标position;
激光点时间戳time;
激光点强度intensities;

  1. point坐标获取

(1)以单回波雷达数据的处理为例,HasEcho判断测距数据是否为空;
(2)取ranges测距里面的第一个值,注意(ranges 里面的值是按 扫描起始角度->扫描终止角度 顺序存储的);
(3)判断数据在激光雷达有限测距范围内;
(4)根据测得的距离以及扫描起始角度,角度分辨率信息,循环计算每个扫描点在设置坐标系下的坐标,原理如图;
(5)这里还定义了第一次扫描点的时间为0,依次按照时间增量递增(与后面的时间戳定义有关);
(6)激光雷达长时间未扫描到障碍物没有办法建图;
在这里插入图片描述

在这里插入图片描述

  1. intensities强度数据获取

(1)强度可以理解为障碍物对激光束的反射率;
(2)判断雷达原始数据中有强度数据,检查扫描点个数必须与强度数据对齐,即一个扫描点必须对应一个强度信息,满足则push到carto定义的强度数据中,否则push数据0进去;

在这里插入图片描述

  1. time数据获取

(1)激光雷达每帧数据自带时间戳为开始扫描的时间;
(2)获取points数据时,最后一个点的points.time数据记录了扫描一帧的用时duration,时间戳为每帧扫描结束后的时间;
(3)相应的,每个扫描点记录的时间改为points.time-duration(其实就是保证这一帧数据的时间戳加上points.time是每个扫描点的扫描时间);
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【cartographer_slam源码阅读】4-6激光雷达数据的转换 的相关文章

  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • 《视觉SLAM十四讲》学习笔记-第四讲部分习题的证明思路

    1 验证SO 3 SE 3 和Sim 3 关于乘法成群 证明 先看SO 3 定义为 SO 3 R R3 3 RR I det R 1 S O 3 R
  • SLAM笔记(四)运动恢复结构的几何数学(本征矩阵、单应矩阵、基础矩阵)

    1 间接法进行运动恢复的前提假设 对于结构与运动或视觉三维重建中 通常假设已经通过特征匹配等方法获取了匹配好的点对 先求出匹配点对再获取结构和运动信息的方法称作间接法 间接法最重要的三个假设是 1 拥有一系列两帧之间的匹配点对 但同时假设匹
  • LIO-SAM:在高斯牛顿法求解过程中用SO3代替欧拉角

    LIO SAM发表于IROS2020 是一个效果非常好的惯性 激光紧耦合里程计 我打算给我们的机器人搞一个激光里程计 于是打算把LIO SAM改一改搞过来 修改过程中发现一个问题 在里程计求解 mapOptimization的LMOptim
  • 正交矩阵的保范性:正交变换不改变向量的长度(范数)

    在推导使用SVD分解解方程时 用到了正交矩阵的保范性这一性质 1 正交矩阵定义 A mathbf A intercal A A A A
  • 【SLAM】卡尔曼滤波(Kalman Filter)

    卡尔曼滤波 Kalman filter 一种利用线性系统状态方程 通过系统输入输出观测数据 对系统状态进行最优估计的算法 由于观测数据中包括系统中的噪声和干扰的影响 所以最优估计也可看作是滤波过程 卡尔曼滤波器的原理解释如下 首先 我们先要
  • 使用EKF融合odometry及imu数据

    整理资料发现早前学习robot pose ekf的笔记 大抵是一些原理基础的东西加一些自己的理解 可能有不太正确的地方 当时做工程遇到的情况为机器人在一些如光滑的地面上打滑的情形 期望使用EKF利用imu对odom数据进行校正 就结果来看
  • 视觉SLAM实践入门——(20)视觉里程计之直接法

    多层直接法的过程 1 读图 随机取点并计算深度 2 创建图像金字塔 相机内参也需要缩放 并计算对应点的像素坐标 3 应用单层直接法 使用G N L M等方法 或者使用g2o ceres库 进行优化 源码中有一些地方会引起段错误 修改方法见下
  • 从零开始一起学习SLAM(9)不推公式,如何真正理解对极约束?

    文章目录 对极几何基本概念 如何得到极线方程 作业 此文发于公众号 计算机视觉life 原文链接 从零开始一起学习SLAM 不推公式 如何真正理解对极约束 自从小白向师兄学习了李群李代数和相机成像模型的基本原理后 感觉书上的内容没那么难了
  • [SLAM四元数基础系列一] 四元数定义 Hamilton vs JPL

    四元数定义 Hamilton vs JPL 简介 四种区分方式 Hamilton vs JPL 引用 不管是卡尔曼滤波或者BA优化形式的SLAM或者VIO系统中 都需要用到单位四元数 Quaternion 来表示旋转 主要是单位四元数表示旋
  • 深度相机Kinect2.0三维点云拼接实验(一)

    文章目录 摘要 Kinect2 0简介 工作原理 RGB相机成像原理 深度相机成像原理 总结 参考文献 摘要 Kinect2 0是微软推出的一款RGB D相机 它即支持普通相机的拍摄 也支持脉冲测量深度信息 本系列文章基于该传感器给出基本的
  • PnP 问题

    欢迎访问我的博客首页 PnP 问题 1 DLT 2 P3P 3 G2O 求解 PnP 3 1 单目 3 2 双目 4 自定义顶点与边优化内参 4 1 二元边 4 2 三元边 4 3 总结 5 参考 PnP Perspective n Poi
  • Eigen::aligned_allocator

    如果STL容器中的元素是Eigen库数据结构 例如这里定义一个vector容器 元素是Matrix4d 如下所示 vector
  • Ubuntu20.04安装各种库----简洁版

    目录 Eigen3 Sophus Pangolin Ceres g2o 建议先装anaconda再装ros python opencv啥该有的都有了 下面仅仅安装ros没有的库 Eigen3 作用 线性代数开源库 提供了有关线性代数 矩阵和
  • LeGO-LOAM中的数学公式推导

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • 视觉SLAM漫谈

    视觉SLAM漫谈 1 前言 开始做SLAM 机器人同时定位与建图 研究已经近一年了 从一年级开始对这个方向产生兴趣 到现在为止 也算是对这个领域有了大致的了解 然而越了解 越觉得这个方向难度很大 总体来讲有以下几个原因 入门资料很少 虽然国
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • 3.Open3D教程——点云数据操作

    点云数据 本教程阐述了基本的点云用法 随需要的文件链接 1 显示点云 import open3d as o3d import numpy as np print Load a ply point cloud print it and ren
  • Todesk突然高速通道使用已结束

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗
  • 什么是深度学习的无监督学习与有监督学习

    无监督学习 深度学习中的无监督学习方法是一种训练算法 它在没有标注输出的情况下从输入数据中学习模式和特征 这种方法的核心是探索和理解数据的内在结构和分布 而不是通过已知的输出来指导学习过程 无监督学习在深度学习领域有许多不同的形式和应用 以

随机推荐