Program Listing for File BufferedPva.hpp
↰ Return to documentation for file (src/navtk/inertial/BufferedPva.hpp)
#pragma once
#include <memory>
#include <utility>
#include <navtk/aspn.hpp>
#include <navtk/filtering/containers/TimestampedDataSeries.hpp>
#include <navtk/not_null.hpp>
#include <navtk/utils/Ordered.hpp>
namespace {
template <typename D, typename T>
bool safe_deref(const navtk::filtering::TimestampedDataSeries<D, T>& buf,
typename navtk::utils::RingBuffer<std::shared_ptr<D>>::const_iterator& it) {
return it != buf.cend() && *it != nullptr;
}
} // namespace
namespace navtk {
namespace inertial {
class BufferedPva {
public:
virtual ~BufferedPva() = default;
BufferedPva(const BufferedPva&) = default;
BufferedPva& operator=(const BufferedPva&) = default;
BufferedPva(BufferedPva&&) = default;
BufferedPva& operator=(BufferedPva&&) = default;
virtual void add_data(not_null<std::shared_ptr<aspn_xtensor::AspnBase>> data) = 0;
std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude> calc_pva(
const aspn_xtensor::TypeTimestamp& time) const;
not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> calc_pva() const;
std::pair<aspn_xtensor::TypeTimestamp, aspn_xtensor::TypeTimestamp> time_span() const;
std::pair<int64_t, int64_t> nsec_time_span() const;
bool in_range(const aspn_xtensor::TypeTimestamp& t) const;
virtual std::shared_ptr<aspn_xtensor::MeasurementImu> calc_force_and_rate(
const aspn_xtensor::TypeTimestamp& time) const;
virtual std::shared_ptr<aspn_xtensor::MeasurementImu> calc_force_and_rate(
const aspn_xtensor::TypeTimestamp& time1, const aspn_xtensor::TypeTimestamp& time2) const;
protected:
BufferedPva(std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude> pva = nullptr,
double expected_dt = 1.0,
double buffer_length = 60.0);
BufferedPva(const aspn_xtensor::MeasurementPositionVelocityAttitude& pva,
double expected_dt = 1.0,
double buffer_length = 60.0);
filtering::TimestampedDataSeries<aspn_xtensor::MeasurementPositionVelocityAttitude,
aspn_xtensor::TypeTimestamp>
pva_buf;
std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude> calc_pva_no_check(
const aspn_xtensor::TypeTimestamp& time) const;
};
} // namespace inertial
} // namespace navtk