class mola::MulranDataset

Overview

RawDataSource from Mulran datasets. Each “sequence” directory contains these sensor streams:

  • lidar : Ouster OS1-64 LIDAR. As mrpt::obs::CObservationPointCloud with XYZIRT channels.

  • gps : Consumer-grade GNSS receiver, as mrpt::obs::CObservationGPS with a message type NMEA GGA (mrpt::obs::gnss::Message_NMEA_GGA). HDOP in that struct is computed as reported standard deviation from the dataset, divided by HDOP_REFERENCE_METERS.

  • radar : Navtech CIR204-H (Not implemented yet).

  • imu : As mrpt::obs::CObservationIMU.

  • Ground truth poses

Point clouds are published as mrpt::obs::CObservationPointCloud with clouds of types mrpt::maps::CPointsMapXYZIRT, with these populated fields:

  • XYZ

  • I : Intensity, range [0.0 - 1.0?]

  • T : Time of each point, in range [-0.05, 0.05] seconds (scan rate=10 Hz), such that “t=0” (the observation/scan timestamp) corresponds to the moment the scanner is facing forward.

Expected contents under base_dir directory:

Example base_dir : /mnt/storage/MulRan/ Sequences: KAIST01, KAIST02, etc.

MulRan/
├── KAIST01
   ├── data_stamp.csv
   ├── global_pose.csv
   ├── gps.csv
   ├── navtech_top_stamp.csv
   ├── Ouster
      ├── 1561000444390857630.bin
      ├── 1561000444489636410.bin
      ...
   ├── ouster_front_stamp.csv
   └── xsens_imu.csv
...
#include <MulranDataset.h>

class MulranDataset:
    public mola::RawDataSourceBase,
    public mola::OfflineDatasetSource,
    public mola::Dataset_UI
{
public:
    // structs

    struct Entry;

    // fields

    static constexpr double HDOP_REFERENCE_METERS = 4.5;

    // methods

    virtual void spinOnce();
    virtual bool hasGroundTruthTrajectory() const;
    virtual trajectory_t getGroundTruthTrajectory() const;
    mrpt::obs::CObservationPointCloud::Ptr getPointCloud(timestep_t step) const;
    mrpt::obs::CObservationGPS::Ptr getGPS(timestep_t step) const;
    mrpt::obs::CObservationIMU::Ptr getIMU(timestep_t step) const;
    virtual size_t datasetSize() const;
    virtual mrpt::obs::CSensoryFrame::Ptr datasetGetObservations(size_t timestep) const;
    bool hasGPS() const;
    virtual size_t datasetUI_size() const;
    virtual size_t datasetUI_lastQueriedTimestep() const;
    virtual double datasetUI_playback_speed() const;
    virtual void datasetUI_playback_speed(double speed);
    virtual bool datasetUI_paused() const;
    virtual void datasetUI_paused(bool paused);
    virtual void datasetUI_teleport(size_t timestep);
};

Inherited Members

public:
    // structs

    struct SensorViewerImpl;

    // methods

    virtual void initialize(const Yaml& cfg) = 0;
    virtual size_t datasetSize() const = 0;
    virtual mrpt::obs::CSensoryFrame::Ptr datasetGetObservations(size_t timestep) const = 0;
    virtual bool hasGroundTruthTrajectory() const;
    virtual trajectory_t getGroundTruthTrajectory() const;
    virtual size_t datasetUI_size() const = 0;
    virtual size_t datasetUI_lastQueriedTimestep() const = 0;
    virtual double datasetUI_playback_speed() const = 0;
    virtual void datasetUI_playback_speed(double speed) = 0;
    virtual bool datasetUI_paused() const = 0;
    virtual void datasetUI_paused(bool paused) = 0;
    virtual void datasetUI_teleport(size_t timestep) = 0;

Methods

virtual void spinOnce()

Runs any required action on a timely manner

virtual bool hasGroundTruthTrajectory() const

Returns true if a groundtruth is available for the vehicle trajectory.

See also:

getGroundTruthTrajectory()

virtual trajectory_t getGroundTruthTrajectory() const

If hasGroundTruthTrajectory() returns true, this returns the dataset groundtruth for the vehicle trajectory.

Note that timestamps for datasets are not wall-clock time (“now”), but old timestamps of when original observations were grabbed.

See also:

hasGroundTruthTrajectory()

mrpt::obs::CObservationPointCloud::Ptr getPointCloud(timestep_t step) const

Direct programmatic access to dataset observations. The return may be nullptr if the given index is not of the requested type.

step is in the range 0 to getGroundTruthTrajectory()-1

virtual size_t datasetSize() const

Number of different time steps available to call getObservations()

virtual mrpt::obs::CSensoryFrame::Ptr datasetGetObservations(size_t timestep) const

Returns the set of observations available for the given time step.

virtual size_t datasetUI_size() const

Number of different time steps available to call getObservations()

virtual size_t datasetUI_lastQueriedTimestep() const

Returns the latest requested observation, range [0, datasetSize()]

virtual void datasetUI_teleport(size_t timestep)

Forces continue replaying in this moment in time