karto探秘之open_karto 第一章 --- 数据结构
目录
2 class LaserRangeFinder : public Sensor
3 class SensorData : public Object
4 class LaserRangeScan : public SensorData
5 class LocalizedRangeScan : public LaserRangeScan
6 class LocalizedRangeScanWithPoints : public LocalizedRangeScan
1 抽象类 Sensor
这个类为抽象类,无具体实现,只有一个成员变量
Parameter<Pose2>* m_pOffsetPose; 这个变量定义了雷达坐标系与base_link间的偏差
2 class LaserRangeFinder : public Sensor
这个类继承Sensor,定义了激光雷达数据的各个参数,如 最大最小距离,最大最小角度,角度分辨率,一帧雷达的点的个数,以及Sensor中定义的雷达坐标系与base_link间的偏差
3 class SensorData : public Object
SensorData是所有传感器数据的基类,定义了如下变量
/**
* ID unique to individual sensor
*/
kt_int32s m_StateId;
/**
* ID unique across all sensor data
*/
kt_int32s m_UniqueId;
/**
* Sensor that created this sensor data
*/
Name m_SensorName;
/**
* Time the sensor data was created
*/
kt_double m_Time;
CustomDataVector m_CustomData;
4 class LaserRangeScan : public SensorData
存储了最原始的扫描深度数据
kt_double* m_pRangeReadings; // 一帧scan的所有距离值,指向数组的指针
kt_int32u m_NumberOfRangeReadings; // 一帧scan的点数,也就是数组的个数
5 class LocalizedRangeScan : public LaserRangeScan
LocalizedRangeScan包含来自激光测距传感器传感器的单次扫描的二维空间和位置信息中的范围数据。 里程表位置是记录范围数据时机器人报告的位置。 校正后的位置是由映射器(或定位器)计算出的位置
/**
* Average of all the point readings
* 所有点读数的平均值
*/
Pose2 m_BarycenterPose;
/**
* Vector of point readings
* 将laser的扫描数据转换为 在世界坐标系中的二维坐标结果,在Update()函数中实现
*/
PointVectorDouble m_PointReadings;
/**
* Vector of unfiltered point readings
* 去掉雷达数据中nan数值后前的集合
*/
PointVectorDouble m_UnfilteredPointReadings;
/**
* Bounding box of localized range scan
* 这帧雷达数据的bounding box
*/
BoundingBox2 m_BoundingBox;
/**
* Internal flag used to update point readings, barycenter and bounding box
*
*/
kt_bool m_IsDirty;
6 class LocalizedRangeScanWithPoints : public LocalizedRangeScan
LocalizedRangeScanWithPoints是LocalizedRangeScan的扩展,带有预先计算的点。
7 class ScanManager
管理设备的扫描数据
m_RunningScans 实时维护的局部激光数据链,首末两帧距离在一定距离范围内,且满足一定数据规模,否则需要删除末端数据帧。维护当前局部数据链
LocalizedRangeScanVector m_Scans;
// 短时间内存储的一系列雷达点
// 存储依据为:1 最初的雷达数据与最新的雷达数据 的frame_link 不超过一定距离,2 数量不超过一定数量
LocalizedRangeScanVector m_RunningScans;
LocalizedRangeScan* m_pLastScan;
kt_int32u m_RunningBufferMaximumSize;
kt_double m_RunningBufferMaximumDistance;
8 class MapperSensorManager
以不同的名字来管理不同的雷大设备,可以返回指定名字的雷达设备的上一帧的雷达数据
typedef std::map<Name, ScanManager*> ScanManagerMap;
9 class CorrelationGrid : public Grid<kt_int8u>
用于扫描匹配的相关网格的实现
/**
* The point readings are smeared by this value in X and Y to create a smoother response.
* Default value is 0.03 meters.
*/
kt_double m_SmearDeviation;
// Size of one side of the kernel
kt_int32s m_KernelSize;
// Cached kernel for smearing
kt_int8u* m_pKernel;
// region of interest
Rectangle2<kt_int32s> m_Roi;
REFERENCES
Karto_slam框架与代码解析 https://blog.csdn.net/qq_24893115/article/details/52965410
Karto SLAM之open_karto代码学习笔记(一) https://blog.csdn.net/wphkadn/article/details/85144186
上一篇: 几个常用的存储过程,适用于ORACLE 博客分类: 数据库
下一篇: 学习过程中对回调函数的理解