Skip to content

File plugin.hpp

File List > plugins > rk4_integrator > plugin.hpp

Go to the documentation of this file

#pragma once

#include "illixr/data_format/imu.hpp"
#include "illixr/error_util.hpp"
#include "illixr/phonebook.hpp"
#include "illixr/plugin.hpp"
#include "illixr/relative_clock.hpp"
#include "illixr/switchboard.hpp"

namespace ILLIXR {
class MY_EXPORT_API rk4_integrator : public plugin {
public:
    [[maybe_unused]] rk4_integrator(const std::string& name, phonebook* pb);
    void callback(const switchboard::ptr<const data_format::imu_type>& datum);

private:
    void                                      clean_imu_vec(time_point timestamp);
    void                                      propagate_imu_values(time_point real_time);
    static std::vector<data_format::imu_type> select_imu_readings(const std::vector<data_format::imu_type>& imu_data,
                                                                  time_point time_begin, time_point time_end);
    static data_format::imu_type interpolate_imu(const data_format::imu_type& imu1, const data_format::imu_type& imu2,
                                                 time_point timestamp);

    const std::shared_ptr<switchboard> switchboard_;

    // IMU Data, Sequence Flag, and State Vars Needed
    switchboard::reader<data_format::imu_integrator_input> imu_integrator_input_;

    // IMU Biases
    switchboard::writer<data_format::imu_raw_type> imu_raw_;
    std::vector<data_format::imu_type>             imu_vec_;
    duration                                       last_imu_offset_{};
    bool                                           has_last_offset_ = false;

    [[maybe_unused]] int    counter_       = 0;
    [[maybe_unused]] int    cam_count_     = 0;
    [[maybe_unused]] int    total_imu_     = 0;
    [[maybe_unused]] double last_cam_time_ = 0;
};

} // namespace ILLIXR