Skip to content

File plugin.hpp

File List > plugins > realsense > plugin.hpp

Go to the documentation of this file

#pragma once

#include "illixr/data_format/imu.hpp"
#include "illixr/data_format/misc.hpp"
#include "illixr/data_format/opencv_data_types.hpp"
#include "illixr/data_format/pose.hpp"
#include "illixr/phonebook.hpp"
#include "illixr/relative_clock.hpp"
#include "illixr/switchboard.hpp"
#include "illixr/threadloop.hpp"

#include  // Include RealSense Cross Platform API

namespace ILLIXR {
class realsense : public plugin {
public:
    [[maybe_unused]] realsense(const std::string& name, phonebook* pb);
    void callback(const rs2::frame& frame);
    ~realsense() override;

private:
    typedef enum { UNSUPPORTED, D4XXI, T26X } cam_enum;

    typedef struct {
        rs2_vector data;
        int        iteration;
    } accel_type;

    void find_supported_devices(const rs2::device_list& devices);
    void configure_camera();

    const std::shared_ptr<switchboard>                   switchboard_;
    const std::shared_ptr<const relative_clock>          clock_;
    switchboard::writer<data_format::imu_type>           imu_;
    switchboard::writer<data_format::binocular_cam_type> cam_;
    switchboard::writer<data_format::rgb_depth_type>     rgb_depth_;
    std::mutex                                           mutex_;
    rs2::pipeline_profile                                profiles_;
    rs2::pipeline                                        pipeline_;
    rs2::config                                          config_;

    cam_enum cam_select_{UNSUPPORTED};
    bool     D4XXI_found_{false};
    bool     T26X_found_{false};

    accel_type  accel_data_{};
    int         iteration_accel_ = 0;
    int         last_iteration_accel_{};
    std::string realsense_cam_;

    std::optional<ullong>     first_imu_time_;
    std::optional<time_point> first_real_time_imu_;

    std::optional<ullong>     first_cam_time_;
    std::optional<time_point> first_real_time_cam_;
};

} // namespace ILLIXR