Program Listing for File MovementDetectorPos.hpp

Return to documentation for file (src/navtk/inertial/MovementDetectorPos.hpp)

#pragma once

#include <memory>
#include <vector>

#include <navtk/aspn.hpp>
#include <navtk/inertial/MovementDetectorPlugin.hpp>
#include <navtk/inertial/MovementStatus.hpp>
#include <navtk/not_null.hpp>

namespace navtk {
namespace inertial {

class MovementDetectorPos : public MovementDetectorPlugin {
public:
    MovementDetectorPos(const double speed_cutoff = 0.2, const double zero_corr_distance = 100.0);

    MovementStatus process(not_null<std::shared_ptr<aspn_xtensor::AspnBase>> data) override;

    aspn_xtensor::TypeTimestamp get_time() override;

private:
    /* At least one position has been received */
    bool ready_to_test = false;

    /* Last position received */
    std::shared_ptr<aspn_xtensor::MeasurementPosition> last = nullptr;

    /* Stores ctor params */
    double speed_cutoff       = 0.0;
    double zero_corr_distance = 100.0;

    /*
     * Calculate the 1 sigma NED uncertainty between pos and whatever data is stored in last.
     *
     * @param pos Most recent position measurement
     * @param est_spd Norm of NED delta position between pos and last, divided by dt (m/s)
     * @param dt Delta time between pos and last, sec.
     */
    Vector calc_sig(not_null<std::shared_ptr<aspn_xtensor::MeasurementPosition>> pos,
                    double est_spd,
                    double dt);
};
}  // namespace inertial
}  // namespace navtk