Program Listing for File RawDataSourceBase.h

Return to documentation for file (include/mola_kernel/interfaces/RawDataSourceBase.h)

/* -------------------------------------------------------------------------
 *   A Modular Optimization framework for Localization and mApping  (MOLA)
 * Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
 * See LICENSE for license information.
 * ------------------------------------------------------------------------- */
#pragma once

#include <mola_kernel/Yaml.h>
#include <mola_kernel/interfaces/ExecutableBase.h>
#include <mola_kernel/interfaces/RawDataConsumer.h>
#include <mrpt/core/WorkerThreadsPool.h>
#include <mrpt/core/initializer.h>
#include <mrpt/core/pimpl.h>
#include <mrpt/io/CFileGZOutputStream.h>
#include <mrpt/obs/CObservation.h>

namespace mola
{
using timestep_t = std::size_t;

class RawDataSourceBase : public mola::ExecutableBase
{
    DEFINE_VIRTUAL_MRPT_OBJECT(RawDataSourceBase)

   public:
    RawDataSourceBase();
    virtual ~RawDataSourceBase();

    void attachToDataConsumer(RawDataConsumer& rdc);

    void initialize(const Yaml& cfg) override final;

   protected:
    virtual void initialize_rds(const Yaml& cfg) = 0;

   public:
   protected:
    void sendObservationsToFrontEnds(const CObservation::Ptr& obs);

    virtual void prepareObservationBeforeFrontEnds(
        const CObservation::Ptr& obs) const;

    void onDatasetPlaybackEnds();

   private:
    std::vector<RawDataConsumer*> rdc_;

    mrpt::io::CFileGZOutputStream export_to_rawlog_out_;
    mrpt::WorkerThreadsPool       worker_pool_export_rawlog_{
        1, mrpt::WorkerThreadsPool::POLICY_FIFO, "worker_pool_export_rawlog"};

    mrpt::WorkerThreadsPool gui_updater_threadpool_{
        1 /* 1 thread */, mrpt::WorkerThreadsPool::POLICY_FIFO,
        "gui_updater_threadpool"};

    struct SensorViewerImpl;
    std::map<std::string, mrpt::pimpl<SensorViewerImpl>> sensor_preview_gui_;

    bool force_load_lazy_load_         = false;
    bool quit_mola_app_on_dataset_end_ = false;
};

}  // namespace mola