欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

karto探秘之open_karto 第一章 --- 数据结构

程序员文章站 2024-03-25 09:22:52
...

目录

1 抽象类  Sensor 

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

7 class ScanManager

8 class MapperSensorManager

REFERENCES


 

 

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

相关标签: 激光SLAM