82 [[nodiscard]] std::optional<double>
getValueAt(
size_t idx)
const override
134 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.timeOk()); }
137 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.dateOk()); }
140 if (
timeOutputs && (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)) {
return static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()); }
144 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)) {
return static_cast<double>(
imuOutputs->imuStatus); }
147 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(0)); }
150 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(1)); }
153 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)) {
return static_cast<double>(
imuOutputs->uncompMag(2)); }
156 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(0)); }
159 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(1)); }
162 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)) {
return static_cast<double>(
imuOutputs->uncompAccel(2)); }
165 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(0)); }
168 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(1)); }
171 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)) {
return static_cast<double>(
imuOutputs->uncompGyro(2)); }
180 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTime); }
183 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(0)); }
186 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(1)); }
189 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)) {
return static_cast<double>(
imuOutputs->deltaTheta(2)); }
192 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(0)); }
195 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(1)); }
198 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)) {
return static_cast<double>(
imuOutputs->deltaV(2)); }
219 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(0)); }
222 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(1)); }
225 if (
imuOutputs && (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)) {
return static_cast<double>(
imuOutputs->angularRate(2)); }
480 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.mode()); }
483 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsFix()); }
486 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorIMU()); }
489 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorMagPres()); }
492 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.errorGnss()); }
495 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()); }
498 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)) {
return static_cast<double>(
insOutputs->insStatus.gpsCompass()); }
519 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(0)); }
522 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(1)); }
525 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)) {
return static_cast<double>(
insOutputs->velBody(2)); }
537 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(0)); }
540 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(1)); }
543 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)) {
return static_cast<double>(
insOutputs->velEcef(2)); }
546 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(0)); }
549 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(1)); }
552 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)) {
return static_cast<double>(
insOutputs->magEcef(2)); }
555 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(0)); }
558 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(1)); }
561 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)) {
return static_cast<double>(
insOutputs->accelEcef(2)); }
564 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(0)); }
567 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(1)); }
570 if (
insOutputs && (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)) {
return static_cast<double>(
insOutputs->linearAccelEcef(2)); }
753 std::vector<std::string> descriptors;
758 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
760 descriptors.emplace_back(
"Time::TimeStartup [ns]");
762 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
764 descriptors.emplace_back(
"Time::TimeGps [ns]");
766 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
768 descriptors.emplace_back(
"Time::GpsTow [ns]");
770 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
772 descriptors.emplace_back(
"Time::GpsWeek");
774 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
776 descriptors.emplace_back(
"Time::TimeSyncIn [ns]");
778 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
780 descriptors.emplace_back(
"Time::TimeGpsPps [ns]");
782 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
784 descriptors.emplace_back(
"Time::TimeUTC::year");
785 descriptors.emplace_back(
"Time::TimeUTC::month");
786 descriptors.emplace_back(
"Time::TimeUTC::day");
787 descriptors.emplace_back(
"Time::TimeUTC::hour");
788 descriptors.emplace_back(
"Time::TimeUTC::min");
789 descriptors.emplace_back(
"Time::TimeUTC::sec");
790 descriptors.emplace_back(
"Time::TimeUTC::ms");
792 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
794 descriptors.emplace_back(
"Time::SyncInCnt");
796 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
798 descriptors.emplace_back(
"Time::SyncOutCnt");
800 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
802 descriptors.emplace_back(
"Time::TimeStatus::timeOk");
803 descriptors.emplace_back(
"Time::TimeStatus::dateOk");
804 descriptors.emplace_back(
"Time::TimeStatus::utcTimeValid");
810 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
812 descriptors.emplace_back(
"IMU::ImuStatus");
814 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
816 descriptors.emplace_back(
"IMU::UncompMag::X [Gauss]");
817 descriptors.emplace_back(
"IMU::UncompMag::Y [Gauss]");
818 descriptors.emplace_back(
"IMU::UncompMag::Z [Gauss]");
820 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
822 descriptors.emplace_back(
"IMU::UncompAccel::X [m/s^2]");
823 descriptors.emplace_back(
"IMU::UncompAccel::Y [m/s^2]");
824 descriptors.emplace_back(
"IMU::UncompAccel::Z [m/s^2]");
826 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
828 descriptors.emplace_back(
"IMU::UncompGyro::X [rad/s]");
829 descriptors.emplace_back(
"IMU::UncompGyro::Y [rad/s]");
830 descriptors.emplace_back(
"IMU::UncompGyro::Z [rad/s]");
832 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
834 descriptors.emplace_back(
"IMU::Temp [Celsius]");
836 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
838 descriptors.emplace_back(
"IMU::Pres [kPa]");
840 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
842 descriptors.emplace_back(
"IMU::DeltaTime [s]");
843 descriptors.emplace_back(
"IMU::DeltaTheta::X [deg]");
844 descriptors.emplace_back(
"IMU::DeltaTheta::Y [deg]");
845 descriptors.emplace_back(
"IMU::DeltaTheta::Z [deg]");
847 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
849 descriptors.emplace_back(
"IMU::DeltaVel::X [m/s]");
850 descriptors.emplace_back(
"IMU::DeltaVel::Y [m/s]");
851 descriptors.emplace_back(
"IMU::DeltaVel::Z [m/s]");
853 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
855 descriptors.emplace_back(
"IMU::Mag::X [Gauss]");
856 descriptors.emplace_back(
"IMU::Mag::Y [Gauss]");
857 descriptors.emplace_back(
"IMU::Mag::Z [Gauss]");
859 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
861 descriptors.emplace_back(
"IMU::Accel::X [m/s^2]");
862 descriptors.emplace_back(
"IMU::Accel::Y [m/s^2]");
863 descriptors.emplace_back(
"IMU::Accel::Z [m/s^2]");
865 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
867 descriptors.emplace_back(
"IMU::AngularRate::X [rad/s]");
868 descriptors.emplace_back(
"IMU::AngularRate::Y [rad/s]");
869 descriptors.emplace_back(
"IMU::AngularRate::Z [rad/s]");
875 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
877 descriptors.emplace_back(
"GNSS1::UTC::year");
878 descriptors.emplace_back(
"GNSS1::UTC::month");
879 descriptors.emplace_back(
"GNSS1::UTC::day");
880 descriptors.emplace_back(
"GNSS1::UTC::hour");
881 descriptors.emplace_back(
"GNSS1::UTC::min");
882 descriptors.emplace_back(
"GNSS1::UTC::sec");
883 descriptors.emplace_back(
"GNSS1::UTC::ms");
885 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
887 descriptors.emplace_back(
"GNSS1::Tow [ns]");
889 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
891 descriptors.emplace_back(
"GNSS1::Week");
893 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
895 descriptors.emplace_back(
"GNSS1::NumSats");
897 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
899 descriptors.emplace_back(
"GNSS1::Fix");
901 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
903 descriptors.emplace_back(
"GNSS1::PosLla::latitude [deg]");
904 descriptors.emplace_back(
"GNSS1::PosLla::longitude [deg]");
905 descriptors.emplace_back(
"GNSS1::PosLla::altitude [m]");
907 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
909 descriptors.emplace_back(
"GNSS1::PosEcef::X [m]");
910 descriptors.emplace_back(
"GNSS1::PosEcef::Y [m]");
911 descriptors.emplace_back(
"GNSS1::PosEcef::Z [m]");
913 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
915 descriptors.emplace_back(
"GNSS1::VelNed::N [m/s]");
916 descriptors.emplace_back(
"GNSS1::VelNed::E [m/s]");
917 descriptors.emplace_back(
"GNSS1::VelNed::D [m/s]");
919 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
921 descriptors.emplace_back(
"GNSS1::VelEcef::X [m/s]");
922 descriptors.emplace_back(
"GNSS1::VelEcef::Y [m/s]");
923 descriptors.emplace_back(
"GNSS1::VelEcef::Z [m/s]");
925 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
927 descriptors.emplace_back(
"GNSS1::PosU::N [m]");
928 descriptors.emplace_back(
"GNSS1::PosU::E [m]");
929 descriptors.emplace_back(
"GNSS1::PosU::D [m]");
931 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
933 descriptors.emplace_back(
"GNSS1::VelU [m/s]");
935 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
937 descriptors.emplace_back(
"GNSS1::TimeU [s]");
939 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
941 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::timeOk");
942 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::dateOk");
943 descriptors.emplace_back(
"GNSS1::TimeInfo::Status::utcTimeValid");
944 descriptors.emplace_back(
"GNSS1::TimeInfo::LeapSeconds");
946 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
948 descriptors.emplace_back(
"GNSS1::DOP::g");
949 descriptors.emplace_back(
"GNSS1::DOP::p");
950 descriptors.emplace_back(
"GNSS1::DOP::t");
951 descriptors.emplace_back(
"GNSS1::DOP::v");
952 descriptors.emplace_back(
"GNSS1::DOP::h");
953 descriptors.emplace_back(
"GNSS1::DOP::n");
954 descriptors.emplace_back(
"GNSS1::DOP::e");
956 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
958 descriptors.emplace_back(
"GNSS1::SatInfo::NumSats");
959 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
961 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
962 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Healthy", satId));
963 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Almanac", satId));
964 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag Ephemeris", satId));
965 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag DifferentialCorrection", satId));
966 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag UsedForNavigation", satId));
967 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag AzimuthElevationValid", satId));
968 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - flag UsedForRTK", satId));
969 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - cno", satId));
970 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - qi", satId));
971 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - el", satId));
972 descriptors.push_back(fmt::format(
"GNSS1::SatInfo::{} - az", satId));
975 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
977 descriptors.emplace_back(
"GNSS1::RawMeas::Tow [s]");
978 descriptors.emplace_back(
"GNSS1::RawMeas::Week");
979 descriptors.emplace_back(
"GNSS1::RawMeas::NumSats");
982 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
983 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - sys", satId));
984 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - svId", satId));
985 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - freq", satId));
986 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - chan", satId));
987 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - slot", satId));
988 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - cno", satId));
989 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag Searching", satId));
990 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag Tracking", satId));
991 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag TimeValid", satId));
992 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag CodeLock", satId));
993 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseLock", satId));
994 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseHalfAmbiguity", satId));
995 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseHalfSub", satId));
996 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PhaseSlip", satId));
997 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - flag PseudorangeSmoothed", satId));
998 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - pr", satId));
999 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - cp", satId));
1000 descriptors.push_back(fmt::format(
"GNSS1::RawMeas::{} - dp", satId));
1007 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
1009 descriptors.emplace_back(
"Att::VpeStatus::AttitudeQuality");
1010 descriptors.emplace_back(
"Att::VpeStatus::GyroSaturation");
1011 descriptors.emplace_back(
"Att::VpeStatus::GyroSaturationRecovery");
1012 descriptors.emplace_back(
"Att::VpeStatus::MagDisturbance");
1013 descriptors.emplace_back(
"Att::VpeStatus::MagSaturation");
1014 descriptors.emplace_back(
"Att::VpeStatus::AccDisturbance");
1015 descriptors.emplace_back(
"Att::VpeStatus::AccSaturation");
1016 descriptors.emplace_back(
"Att::VpeStatus::KnownMagDisturbance");
1017 descriptors.emplace_back(
"Att::VpeStatus::KnownAccelDisturbance");
1019 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
1021 descriptors.emplace_back(
"Att::YawPitchRoll::Y [deg]");
1022 descriptors.emplace_back(
"Att::YawPitchRoll::P [deg]");
1023 descriptors.emplace_back(
"Att::YawPitchRoll::R [deg]");
1025 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
1027 descriptors.emplace_back(
"Att::Quaternion::w");
1028 descriptors.emplace_back(
"Att::Quaternion::x");
1029 descriptors.emplace_back(
"Att::Quaternion::y");
1030 descriptors.emplace_back(
"Att::Quaternion::z");
1032 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
1034 descriptors.emplace_back(
"Att::DCM::0-0,Att::DCM::0-1,Att::DCM::0-2");
1035 descriptors.emplace_back(
"Att::DCM::1-0,Att::DCM::1-1,Att::DCM::1-2");
1036 descriptors.emplace_back(
"Att::DCM::2-0,Att::DCM::2-1,Att::DCM::2-2");
1038 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
1040 descriptors.emplace_back(
"Att::MagNed::N [Gauss]");
1041 descriptors.emplace_back(
"Att::MagNed::E [Gauss]");
1042 descriptors.emplace_back(
"Att::MagNed::D [Gauss]");
1044 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
1046 descriptors.emplace_back(
"Att::AccelNed::N [m/s^2]");
1047 descriptors.emplace_back(
"Att::AccelNed::E [m/s^2]");
1048 descriptors.emplace_back(
"Att::AccelNed::D [m/s^2]");
1050 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
1052 descriptors.emplace_back(
"Att::LinearAccelBody::X [m/s^2]");
1053 descriptors.emplace_back(
"Att::LinearAccelBody::Y [m/s^2]");
1054 descriptors.emplace_back(
"Att::LinearAccelBody::Z [m/s^2]");
1056 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
1058 descriptors.emplace_back(
"Att::LinearAccelNed::N [m/s^2]");
1059 descriptors.emplace_back(
"Att::LinearAccelNed::E [m/s^2]");
1060 descriptors.emplace_back(
"Att::LinearAccelNed::D [m/s^2]");
1062 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
1064 descriptors.emplace_back(
"Att::YprU::Y [deg]");
1065 descriptors.emplace_back(
"Att::YprU::P [deg]");
1066 descriptors.emplace_back(
"Att::YprU::R [deg]");
1072 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
1074 descriptors.emplace_back(
"INS::InsStatus::Mode");
1075 descriptors.emplace_back(
"INS::InsStatus::GpsFix");
1076 descriptors.emplace_back(
"INS::InsStatus::Error::IMU");
1077 descriptors.emplace_back(
"INS::InsStatus::Error::MagPres");
1078 descriptors.emplace_back(
"INS::InsStatus::Error::GNSS");
1079 descriptors.emplace_back(
"INS::InsStatus::GpsHeadingIns");
1080 descriptors.emplace_back(
"INS::InsStatus::GpsCompass");
1082 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
1084 descriptors.emplace_back(
"INS::PosLla::latitude [deg]");
1085 descriptors.emplace_back(
"INS::PosLla::longitude [deg]");
1086 descriptors.emplace_back(
"INS::PosLla::altitude [m]");
1088 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
1090 descriptors.emplace_back(
"INS::PosEcef::X [m]");
1091 descriptors.emplace_back(
"INS::PosEcef::Y [m]");
1092 descriptors.emplace_back(
"INS::PosEcef::Z [m]");
1094 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
1096 descriptors.emplace_back(
"INS::VelBody::X [m/s]");
1097 descriptors.emplace_back(
"INS::VelBody::Y [m/s]");
1098 descriptors.emplace_back(
"INS::VelBody::Z [m/s]");
1100 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
1102 descriptors.emplace_back(
"INS::VelNed::N [m/s]");
1103 descriptors.emplace_back(
"INS::VelNed::E [m/s]");
1104 descriptors.emplace_back(
"INS::VelNed::D [m/s]");
1106 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
1108 descriptors.emplace_back(
"INS::VelEcef::X [m/s]");
1109 descriptors.emplace_back(
"INS::VelEcef::Y [m/s]");
1110 descriptors.emplace_back(
"INS::VelEcef::Z [m/s]");
1112 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
1114 descriptors.emplace_back(
"INS::MagEcef::X [Gauss]");
1115 descriptors.emplace_back(
"INS::MagEcef::Y [Gauss]");
1116 descriptors.emplace_back(
"INS::MagEcef::Z [Gauss]");
1118 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
1120 descriptors.emplace_back(
"INS::AccelEcef::X [m/s^2]");
1121 descriptors.emplace_back(
"INS::AccelEcef::Y [m/s^2]");
1122 descriptors.emplace_back(
"INS::AccelEcef::Z [m/s^2]");
1124 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
1126 descriptors.emplace_back(
"INS::LinearAccelEcef::X [m/s^2]");
1127 descriptors.emplace_back(
"INS::LinearAccelEcef::Y [m/s^2]");
1128 descriptors.emplace_back(
"INS::LinearAccelEcef::Z [m/s^2]");
1130 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
1132 descriptors.emplace_back(
"INS::PosU [m]");
1134 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
1136 descriptors.emplace_back(
"INS::VelU [m/s]");
1142 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1144 descriptors.emplace_back(
"GNSS2::UTC::year");
1145 descriptors.emplace_back(
"GNSS2::UTC::month");
1146 descriptors.emplace_back(
"GNSS2::UTC::day");
1147 descriptors.emplace_back(
"GNSS2::UTC::hour");
1148 descriptors.emplace_back(
"GNSS2::UTC::min");
1149 descriptors.emplace_back(
"GNSS2::UTC::sec");
1150 descriptors.emplace_back(
"GNSS2::UTC::ms");
1152 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1154 descriptors.emplace_back(
"GNSS2::Tow [ns]");
1156 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1158 descriptors.emplace_back(
"GNSS2::Week");
1160 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1162 descriptors.emplace_back(
"GNSS2::NumSats");
1164 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1166 descriptors.emplace_back(
"GNSS2::Fix");
1168 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1170 descriptors.emplace_back(
"GNSS2::PosLla::latitude [deg]");
1171 descriptors.emplace_back(
"GNSS2::PosLla::longitude [deg]");
1172 descriptors.emplace_back(
"GNSS2::PosLla::altitude [m]");
1174 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1176 descriptors.emplace_back(
"GNSS2::PosEcef::X [m]");
1177 descriptors.emplace_back(
"GNSS2::PosEcef::Y [m]");
1178 descriptors.emplace_back(
"GNSS2::PosEcef::Z [m]");
1180 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1182 descriptors.emplace_back(
"GNSS2::VelNed::N [m/s]");
1183 descriptors.emplace_back(
"GNSS2::VelNed::E [m/s]");
1184 descriptors.emplace_back(
"GNSS2::VelNed::D [m/s]");
1186 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1188 descriptors.emplace_back(
"GNSS2::VelEcef::X [m/s]");
1189 descriptors.emplace_back(
"GNSS2::VelEcef::Y [m/s]");
1190 descriptors.emplace_back(
"GNSS2::VelEcef::Z [m/s]");
1192 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1194 descriptors.emplace_back(
"GNSS2::PosU::N [m]");
1195 descriptors.emplace_back(
"GNSS2::PosU::E [m]");
1196 descriptors.emplace_back(
"GNSS2::PosU::D [m]");
1198 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1200 descriptors.emplace_back(
"GNSS2::VelU [m/s]");
1202 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1204 descriptors.emplace_back(
"GNSS2::TimeU [s]");
1206 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1208 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::timeOk");
1209 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::dateOk");
1210 descriptors.emplace_back(
"GNSS2::TimeInfo::Status::utcTimeValid");
1211 descriptors.emplace_back(
"GNSS2::TimeInfo::LeapSeconds");
1213 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1215 descriptors.emplace_back(
"GNSS2::DOP::g");
1216 descriptors.emplace_back(
"GNSS2::DOP::p");
1217 descriptors.emplace_back(
"GNSS2::DOP::t");
1218 descriptors.emplace_back(
"GNSS2::DOP::v");
1219 descriptors.emplace_back(
"GNSS2::DOP::h");
1220 descriptors.emplace_back(
"GNSS2::DOP::n");
1221 descriptors.emplace_back(
"GNSS2::DOP::e");
1223 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1225 descriptors.emplace_back(
"GNSS2::SatInfo::NumSats");
1226 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
1228 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1229 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Healthy", satId));
1230 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Almanac", satId));
1231 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag Ephemeris", satId));
1232 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag DifferentialCorrection", satId));
1233 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag UsedForNavigation", satId));
1234 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag AzimuthElevationValid", satId));
1235 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - flag UsedForRTK", satId));
1236 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - cno", satId));
1237 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - qi", satId));
1238 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - el", satId));
1239 descriptors.push_back(fmt::format(
"GNSS2::SatInfo::{} - az", satId));
1242 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1244 descriptors.emplace_back(
"GNSS2::RawMeas::Tow [s]");
1245 descriptors.emplace_back(
"GNSS2::RawMeas::Week");
1246 descriptors.emplace_back(
"GNSS2::RawMeas::NumSats");
1249 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1250 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - sys", satId));
1251 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - svId", satId));
1252 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - freq", satId));
1253 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - chan", satId));
1254 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - slot", satId));
1255 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - cno", satId));
1256 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag Searching", satId));
1257 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag Tracking", satId));
1258 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag TimeValid", satId));
1259 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag CodeLock", satId));
1260 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseLock", satId));
1261 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseHalfAmbiguity", satId));
1262 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseHalfSub", satId));
1263 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PhaseSlip", satId));
1264 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - flag PseudorangeSmoothed", satId));
1265 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - pr", satId));
1266 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - cp", satId));
1267 descriptors.push_back(fmt::format(
"GNSS2::RawMeas::{} - dp", satId));
1277 [[nodiscard]] std::optional<double>
getDynamicDataAt(
const std::string& descriptor)
const override
1280 if (descriptor ==
"Time::TimeStartup [ns]") {
return static_cast<double>(
timeOutputs->timeStartup); }
1281 if (descriptor ==
"Time::TimeGps [ns]") {
return static_cast<double>(
timeOutputs->timeGps); }
1282 if (descriptor ==
"Time::GpsTow [ns]") {
return static_cast<double>(
timeOutputs->gpsTow); }
1283 if (descriptor ==
"Time::GpsWeek") {
return static_cast<double>(
timeOutputs->gpsWeek); }
1284 if (descriptor ==
"Time::TimeSyncIn [ns]") {
return static_cast<double>(
timeOutputs->timeSyncIn); }
1285 if (descriptor ==
"Time::TimeGpsPps [ns]") {
return static_cast<double>(
timeOutputs->timePPS); }
1286 if (descriptor ==
"Time::TimeUTC::year") {
return static_cast<double>(
timeOutputs->timeUtc.year); }
1287 if (descriptor ==
"Time::TimeUTC::month") {
return static_cast<double>(
timeOutputs->timeUtc.month); }
1288 if (descriptor ==
"Time::TimeUTC::day") {
return static_cast<double>(
timeOutputs->timeUtc.day); }
1289 if (descriptor ==
"Time::TimeUTC::hour") {
return static_cast<double>(
timeOutputs->timeUtc.hour); }
1290 if (descriptor ==
"Time::TimeUTC::min") {
return static_cast<double>(
timeOutputs->timeUtc.min); }
1291 if (descriptor ==
"Time::TimeUTC::sec") {
return static_cast<double>(
timeOutputs->timeUtc.sec); }
1292 if (descriptor ==
"Time::TimeUTC::ms") {
return static_cast<double>(
timeOutputs->timeUtc.ms); }
1293 if (descriptor ==
"Time::SyncInCnt") {
return static_cast<double>(
timeOutputs->syncInCnt); }
1294 if (descriptor ==
"Time::SyncOutCnt") {
return static_cast<double>(
timeOutputs->syncOutCnt); }
1295 if (descriptor ==
"Time::TimeStatus::timeOk") {
return static_cast<double>(
timeOutputs->timeStatus.timeOk()); }
1296 if (descriptor ==
"Time::TimeStatus::dateOk") {
return static_cast<double>(
timeOutputs->timeStatus.dateOk()); }
1297 if (descriptor ==
"Time::TimeStatus::utcTimeValid") {
return static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()); }
1299 if (descriptor ==
"IMU::ImuStatus") {
return static_cast<double>(
imuOutputs->imuStatus); }
1300 if (descriptor ==
"IMU::UncompMag::X [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(0)); }
1301 if (descriptor ==
"IMU::UncompMag::Y [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(1)); }
1302 if (descriptor ==
"IMU::UncompMag::Z [Gauss]") {
return static_cast<double>(
imuOutputs->uncompMag(2)); }
1303 if (descriptor ==
"IMU::UncompAccel::X [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(0)); }
1304 if (descriptor ==
"IMU::UncompAccel::Y [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(1)); }
1305 if (descriptor ==
"IMU::UncompAccel::Z [m/s^2]") {
return static_cast<double>(
imuOutputs->uncompAccel(2)); }
1306 if (descriptor ==
"IMU::UncompGyro::X [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(0)); }
1307 if (descriptor ==
"IMU::UncompGyro::Y [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(1)); }
1308 if (descriptor ==
"IMU::UncompGyro::Z [rad/s]") {
return static_cast<double>(
imuOutputs->uncompGyro(2)); }
1309 if (descriptor ==
"IMU::Temp [Celsius]") {
return static_cast<double>(
imuOutputs->temp); }
1310 if (descriptor ==
"IMU::Pres [kPa]") {
return static_cast<double>(
imuOutputs->pres); }
1311 if (descriptor ==
"IMU::DeltaTime [s]") {
return static_cast<double>(
imuOutputs->deltaTime); }
1312 if (descriptor ==
"IMU::DeltaTheta::X [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(0)); }
1313 if (descriptor ==
"IMU::DeltaTheta::Y [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(1)); }
1314 if (descriptor ==
"IMU::DeltaTheta::Z [deg]") {
return static_cast<double>(
imuOutputs->deltaTheta(2)); }
1315 if (descriptor ==
"IMU::DeltaVel::X [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(0)); }
1316 if (descriptor ==
"IMU::DeltaVel::Y [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(1)); }
1317 if (descriptor ==
"IMU::DeltaVel::Z [m/s]") {
return static_cast<double>(
imuOutputs->deltaV(2)); }
1318 if (descriptor ==
"IMU::Mag::X [Gauss]") {
return static_cast<double>(
imuOutputs->mag(0)); }
1319 if (descriptor ==
"IMU::Mag::Y [Gauss]") {
return static_cast<double>(
imuOutputs->mag(1)); }
1320 if (descriptor ==
"IMU::Mag::Z [Gauss]") {
return static_cast<double>(
imuOutputs->mag(2)); }
1321 if (descriptor ==
"IMU::Accel::X [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(0)); }
1322 if (descriptor ==
"IMU::Accel::Y [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(1)); }
1323 if (descriptor ==
"IMU::Accel::Z [m/s^2]") {
return static_cast<double>(
imuOutputs->accel(2)); }
1324 if (descriptor ==
"IMU::AngularRate::X [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(0)); }
1325 if (descriptor ==
"IMU::AngularRate::Y [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(1)); }
1326 if (descriptor ==
"IMU::AngularRate::Z [rad/s]") {
return static_cast<double>(
imuOutputs->angularRate(2)); }
1328 if (descriptor ==
"GNSS1::UTC::year") {
return static_cast<double>(
gnss1Outputs->timeUtc.year); }
1329 if (descriptor ==
"GNSS1::UTC::month") {
return static_cast<double>(
gnss1Outputs->timeUtc.month); }
1330 if (descriptor ==
"GNSS1::UTC::day") {
return static_cast<double>(
gnss1Outputs->timeUtc.day); }
1331 if (descriptor ==
"GNSS1::UTC::hour") {
return static_cast<double>(
gnss1Outputs->timeUtc.hour); }
1332 if (descriptor ==
"GNSS1::UTC::min") {
return static_cast<double>(
gnss1Outputs->timeUtc.min); }
1333 if (descriptor ==
"GNSS1::UTC::sec") {
return static_cast<double>(
gnss1Outputs->timeUtc.sec); }
1334 if (descriptor ==
"GNSS1::UTC::ms") {
return static_cast<double>(
gnss1Outputs->timeUtc.ms); }
1335 if (descriptor ==
"GNSS1::Tow [ns]") {
return static_cast<double>(
gnss1Outputs->tow); }
1336 if (descriptor ==
"GNSS1::Week") {
return static_cast<double>(
gnss1Outputs->week); }
1337 if (descriptor ==
"GNSS1::NumSats") {
return static_cast<double>(
gnss1Outputs->numSats); }
1338 if (descriptor ==
"GNSS1::Fix") {
return static_cast<double>(
gnss1Outputs->fix); }
1339 if (descriptor ==
"GNSS1::PosLla::latitude [deg]") {
return static_cast<double>(
gnss1Outputs->posLla(0)); }
1340 if (descriptor ==
"GNSS1::PosLla::longitude [deg]") {
return static_cast<double>(
gnss1Outputs->posLla(1)); }
1341 if (descriptor ==
"GNSS1::PosLla::altitude [m]") {
return static_cast<double>(
gnss1Outputs->posLla(2)); }
1342 if (descriptor ==
"GNSS1::PosEcef::X [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(0)); }
1343 if (descriptor ==
"GNSS1::PosEcef::Y [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(1)); }
1344 if (descriptor ==
"GNSS1::PosEcef::Z [m]") {
return static_cast<double>(
gnss1Outputs->posEcef(2)); }
1345 if (descriptor ==
"GNSS1::VelNed::N [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(0)); }
1346 if (descriptor ==
"GNSS1::VelNed::E [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(1)); }
1347 if (descriptor ==
"GNSS1::VelNed::D [m/s]") {
return static_cast<double>(
gnss1Outputs->velNed(2)); }
1348 if (descriptor ==
"GNSS1::VelEcef::X [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(0)); }
1349 if (descriptor ==
"GNSS1::VelEcef::Y [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(1)); }
1350 if (descriptor ==
"GNSS1::VelEcef::Z [m/s]") {
return static_cast<double>(
gnss1Outputs->velEcef(2)); }
1351 if (descriptor ==
"GNSS1::PosU::N [m]") {
return static_cast<double>(
gnss1Outputs->posU(0)); }
1352 if (descriptor ==
"GNSS1::PosU::E [m]") {
return static_cast<double>(
gnss1Outputs->posU(1)); }
1353 if (descriptor ==
"GNSS1::PosU::D [m]") {
return static_cast<double>(
gnss1Outputs->posU(2)); }
1354 if (descriptor ==
"GNSS1::VelU [m/s]") {
return static_cast<double>(
gnss1Outputs->velU); }
1355 if (descriptor ==
"GNSS1::TimeU [s]") {
return static_cast<double>(
gnss1Outputs->timeU); }
1356 if (descriptor ==
"GNSS1::TimeInfo::Status::timeOk") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.timeOk()); }
1357 if (descriptor ==
"GNSS1::TimeInfo::Status::dateOk") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.dateOk()); }
1358 if (descriptor ==
"GNSS1::TimeInfo::Status::utcTimeValid") {
return static_cast<double>(
gnss1Outputs->timeInfo.status.utcTimeValid()); }
1359 if (descriptor ==
"GNSS1::TimeInfo::LeapSeconds") {
return static_cast<double>(
gnss1Outputs->timeInfo.leapSeconds); }
1360 if (descriptor ==
"GNSS1::DOP::g") {
return static_cast<double>(
gnss1Outputs->dop.gDop); }
1361 if (descriptor ==
"GNSS1::DOP::p") {
return static_cast<double>(
gnss1Outputs->dop.pDop); }
1362 if (descriptor ==
"GNSS1::DOP::t") {
return static_cast<double>(
gnss1Outputs->dop.tDop); }
1363 if (descriptor ==
"GNSS1::DOP::v") {
return static_cast<double>(
gnss1Outputs->dop.vDop); }
1364 if (descriptor ==
"GNSS1::DOP::h") {
return static_cast<double>(
gnss1Outputs->dop.hDop); }
1365 if (descriptor ==
"GNSS1::DOP::n") {
return static_cast<double>(
gnss1Outputs->dop.nDop); }
1366 if (descriptor ==
"GNSS1::DOP::e") {
return static_cast<double>(
gnss1Outputs->dop.eDop); }
1367 if (descriptor ==
"GNSS1::SatInfo::NumSats") {
return static_cast<double>(
gnss1Outputs->satInfo.numSats); }
1368 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
1370 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1378 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1379 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - qi", satId)) {
return static_cast<double>(satellite.qi); }
1380 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - el", satId)) {
return static_cast<double>(satellite.el); }
1381 if (descriptor == fmt::format(
"GNSS1::SatInfo::{} - az", satId)) {
return static_cast<double>(satellite.az); }
1383 if (descriptor ==
"GNSS1::RawMeas::Tow [s]") {
return gnss1Outputs->raw.tow; }
1384 if (descriptor ==
"GNSS1::RawMeas::Week") {
return static_cast<double>(
gnss1Outputs->raw.week); }
1385 if (descriptor ==
"GNSS1::RawMeas::NumSats") {
return static_cast<double>(
gnss1Outputs->raw.numSats); }
1388 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1389 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - freq", satId)) {
return static_cast<double>(satellite.freq); }
1390 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - chan", satId)) {
return static_cast<double>(satellite.chan); }
1391 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - slot", satId)) {
return static_cast<double>(satellite.slot); }
1392 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1402 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - pr", satId)) {
return satellite.pr; }
1403 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - cp", satId)) {
return satellite.cp; }
1404 if (descriptor == fmt::format(
"GNSS1::RawMeas::{} - dp", satId)) {
return static_cast<double>(satellite.dp); }
1407 if (descriptor ==
"Att::VpeStatus::AttitudeQuality") {
return static_cast<double>(
attitudeOutputs->vpeStatus.attitudeQuality()); }
1408 if (descriptor ==
"Att::VpeStatus::GyroSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturation()); }
1409 if (descriptor ==
"Att::VpeStatus::GyroSaturationRecovery") {
return static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturationRecovery()); }
1410 if (descriptor ==
"Att::VpeStatus::MagDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.magDisturbance()); }
1411 if (descriptor ==
"Att::VpeStatus::MagSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.magSaturation()); }
1412 if (descriptor ==
"Att::VpeStatus::AccDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.accDisturbance()); }
1413 if (descriptor ==
"Att::VpeStatus::AccSaturation") {
return static_cast<double>(
attitudeOutputs->vpeStatus.accSaturation()); }
1414 if (descriptor ==
"Att::VpeStatus::KnownMagDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.knownMagDisturbance()); }
1415 if (descriptor ==
"Att::VpeStatus::KnownAccelDisturbance") {
return static_cast<double>(
attitudeOutputs->vpeStatus.knownAccelDisturbance()); }
1416 if (descriptor ==
"Att::YawPitchRoll::Y [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(0)); }
1417 if (descriptor ==
"Att::YawPitchRoll::P [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(1)); }
1418 if (descriptor ==
"Att::YawPitchRoll::R [deg]") {
return static_cast<double>(
attitudeOutputs->ypr(2)); }
1419 if (descriptor ==
"Att::Quaternion::w") {
return static_cast<double>(
attitudeOutputs->qtn.w()); }
1420 if (descriptor ==
"Att::Quaternion::x") {
return static_cast<double>(
attitudeOutputs->qtn.x()); }
1421 if (descriptor ==
"Att::Quaternion::y") {
return static_cast<double>(
attitudeOutputs->qtn.y()); }
1422 if (descriptor ==
"Att::Quaternion::z") {
return static_cast<double>(
attitudeOutputs->qtn.z()); }
1423 if (descriptor ==
"Att::DCM::0-0") {
return static_cast<double>(
attitudeOutputs->dcm(0, 0)); }
1424 if (descriptor ==
"Att::DCM::0-1") {
return static_cast<double>(
attitudeOutputs->dcm(0, 1)); }
1425 if (descriptor ==
"Att::DCM::0-2") {
return static_cast<double>(
attitudeOutputs->dcm(0, 2)); }
1426 if (descriptor ==
"Att::DCM::1-0") {
return static_cast<double>(
attitudeOutputs->dcm(1, 0)); }
1427 if (descriptor ==
"Att::DCM::1-1") {
return static_cast<double>(
attitudeOutputs->dcm(1, 1)); }
1428 if (descriptor ==
"Att::DCM::1-2") {
return static_cast<double>(
attitudeOutputs->dcm(1, 2)); }
1429 if (descriptor ==
"Att::DCM::2-0") {
return static_cast<double>(
attitudeOutputs->dcm(2, 0)); }
1430 if (descriptor ==
"Att::DCM::2-1") {
return static_cast<double>(
attitudeOutputs->dcm(2, 1)); }
1431 if (descriptor ==
"Att::DCM::2-2") {
return static_cast<double>(
attitudeOutputs->dcm(2, 2)); }
1432 if (descriptor ==
"Att::MagNed::N [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(0)); }
1433 if (descriptor ==
"Att::MagNed::E [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(1)); }
1434 if (descriptor ==
"Att::MagNed::D [Gauss]") {
return static_cast<double>(
attitudeOutputs->magNed(2)); }
1435 if (descriptor ==
"Att::AccelNed::N [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(0)); }
1436 if (descriptor ==
"Att::AccelNed::E [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(1)); }
1437 if (descriptor ==
"Att::AccelNed::D [m/s^2]") {
return static_cast<double>(
attitudeOutputs->accelNed(2)); }
1438 if (descriptor ==
"Att::LinearAccelBody::X [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(0)); }
1439 if (descriptor ==
"Att::LinearAccelBody::Y [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(1)); }
1440 if (descriptor ==
"Att::LinearAccelBody::Z [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelBody(2)); }
1441 if (descriptor ==
"Att::LinearAccelNed::N [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(0)); }
1442 if (descriptor ==
"Att::LinearAccelNed::E [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(1)); }
1443 if (descriptor ==
"Att::LinearAccelNed::D [m/s^2]") {
return static_cast<double>(
attitudeOutputs->linearAccelNed(2)); }
1444 if (descriptor ==
"Att::YprU::Y [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(0)); }
1445 if (descriptor ==
"Att::YprU::P [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(1)); }
1446 if (descriptor ==
"Att::YprU::R [deg]") {
return static_cast<double>(
attitudeOutputs->yprU(2)); }
1449 if (descriptor ==
"INS::InsStatus::Mode") {
return static_cast<double>(
insOutputs->insStatus.mode()); }
1450 if (descriptor ==
"INS::InsStatus::GpsFix") {
return static_cast<double>(
insOutputs->insStatus.gpsFix()); }
1451 if (descriptor ==
"INS::InsStatus::Error::IMU") {
return static_cast<double>(
insOutputs->insStatus.errorIMU()); }
1452 if (descriptor ==
"INS::InsStatus::Error::MagPres") {
return static_cast<double>(
insOutputs->insStatus.errorMagPres()); }
1453 if (descriptor ==
"INS::InsStatus::Error::GNSS") {
return static_cast<double>(
insOutputs->insStatus.errorGnss()); }
1454 if (descriptor ==
"INS::InsStatus::GpsHeadingIns") {
return static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()); }
1455 if (descriptor ==
"INS::InsStatus::GpsCompass") {
return static_cast<double>(
insOutputs->insStatus.gpsCompass()); }
1456 if (descriptor ==
"INS::PosLla::latitude [deg]") {
return static_cast<double>(
insOutputs->posLla(0)); }
1457 if (descriptor ==
"INS::PosLla::longitude [deg]") {
return static_cast<double>(
insOutputs->posLla(1)); }
1458 if (descriptor ==
"INS::PosLla::altitude [m]") {
return static_cast<double>(
insOutputs->posLla(2)); }
1459 if (descriptor ==
"INS::PosEcef::X [m]") {
return static_cast<double>(
insOutputs->posEcef(0)); }
1460 if (descriptor ==
"INS::PosEcef::Y [m]") {
return static_cast<double>(
insOutputs->posEcef(1)); }
1461 if (descriptor ==
"INS::PosEcef::Z [m]") {
return static_cast<double>(
insOutputs->posEcef(2)); }
1462 if (descriptor ==
"INS::VelBody::X [m/s]") {
return static_cast<double>(
insOutputs->velBody(0)); }
1463 if (descriptor ==
"INS::VelBody::Y [m/s]") {
return static_cast<double>(
insOutputs->velBody(1)); }
1464 if (descriptor ==
"INS::VelBody::Z [m/s]") {
return static_cast<double>(
insOutputs->velBody(2)); }
1465 if (descriptor ==
"INS::VelNed::N [m/s]") {
return static_cast<double>(
insOutputs->velNed(0)); }
1466 if (descriptor ==
"INS::VelNed::E [m/s]") {
return static_cast<double>(
insOutputs->velNed(1)); }
1467 if (descriptor ==
"INS::VelNed::D [m/s]") {
return static_cast<double>(
insOutputs->velNed(2)); }
1468 if (descriptor ==
"INS::VelEcef::X [m/s]") {
return static_cast<double>(
insOutputs->velEcef(0)); }
1469 if (descriptor ==
"INS::VelEcef::Y [m/s]") {
return static_cast<double>(
insOutputs->velEcef(1)); }
1470 if (descriptor ==
"INS::VelEcef::Z [m/s]") {
return static_cast<double>(
insOutputs->velEcef(2)); }
1471 if (descriptor ==
"INS::MagEcef::X [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(0)); }
1472 if (descriptor ==
"INS::MagEcef::Y [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(1)); }
1473 if (descriptor ==
"INS::MagEcef::Z [Gauss]") {
return static_cast<double>(
insOutputs->magEcef(2)); }
1474 if (descriptor ==
"INS::AccelEcef::X [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(0)); }
1475 if (descriptor ==
"INS::AccelEcef::Y [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(1)); }
1476 if (descriptor ==
"INS::AccelEcef::Z [m/s^2]") {
return static_cast<double>(
insOutputs->accelEcef(2)); }
1477 if (descriptor ==
"INS::LinearAccelEcef::X [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(0)); }
1478 if (descriptor ==
"INS::LinearAccelEcef::Y [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(1)); }
1479 if (descriptor ==
"INS::LinearAccelEcef::Z [m/s^2]") {
return static_cast<double>(
insOutputs->linearAccelEcef(2)); }
1480 if (descriptor ==
"INS::PosU [m]") {
return static_cast<double>(
insOutputs->posU); }
1481 if (descriptor ==
"INS::VelU [m/s]") {
return static_cast<double>(
insOutputs->velU); }
1484 if (descriptor ==
"GNSS2::UTC::year") {
return static_cast<double>(
gnss2Outputs->timeUtc.year); }
1485 if (descriptor ==
"GNSS2::UTC::month") {
return static_cast<double>(
gnss2Outputs->timeUtc.month); }
1486 if (descriptor ==
"GNSS2::UTC::day") {
return static_cast<double>(
gnss2Outputs->timeUtc.day); }
1487 if (descriptor ==
"GNSS2::UTC::hour") {
return static_cast<double>(
gnss2Outputs->timeUtc.hour); }
1488 if (descriptor ==
"GNSS2::UTC::min") {
return static_cast<double>(
gnss2Outputs->timeUtc.min); }
1489 if (descriptor ==
"GNSS2::UTC::sec") {
return static_cast<double>(
gnss2Outputs->timeUtc.sec); }
1490 if (descriptor ==
"GNSS2::UTC::ms") {
return static_cast<double>(
gnss2Outputs->timeUtc.ms); }
1491 if (descriptor ==
"GNSS2::Tow [ns]") {
return static_cast<double>(
gnss2Outputs->tow); }
1492 if (descriptor ==
"GNSS2::Week") {
return static_cast<double>(
gnss2Outputs->week); }
1493 if (descriptor ==
"GNSS2::NumSats") {
return static_cast<double>(
gnss2Outputs->numSats); }
1494 if (descriptor ==
"GNSS2::Fix") {
return static_cast<double>(
gnss2Outputs->fix); }
1495 if (descriptor ==
"GNSS2::PosLla::latitude [deg]") {
return static_cast<double>(
gnss2Outputs->posLla(0)); }
1496 if (descriptor ==
"GNSS2::PosLla::longitude [deg]") {
return static_cast<double>(
gnss2Outputs->posLla(1)); }
1497 if (descriptor ==
"GNSS2::PosLla::altitude [m]") {
return static_cast<double>(
gnss2Outputs->posLla(2)); }
1498 if (descriptor ==
"GNSS2::PosEcef::X [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(0)); }
1499 if (descriptor ==
"GNSS2::PosEcef::Y [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(1)); }
1500 if (descriptor ==
"GNSS2::PosEcef::Z [m]") {
return static_cast<double>(
gnss2Outputs->posEcef(2)); }
1501 if (descriptor ==
"GNSS2::VelNed::N [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(0)); }
1502 if (descriptor ==
"GNSS2::VelNed::E [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(1)); }
1503 if (descriptor ==
"GNSS2::VelNed::D [m/s]") {
return static_cast<double>(
gnss2Outputs->velNed(2)); }
1504 if (descriptor ==
"GNSS2::VelEcef::X [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(0)); }
1505 if (descriptor ==
"GNSS2::VelEcef::Y [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(1)); }
1506 if (descriptor ==
"GNSS2::VelEcef::Z [m/s]") {
return static_cast<double>(
gnss2Outputs->velEcef(2)); }
1507 if (descriptor ==
"GNSS2::PosU::N [m]") {
return static_cast<double>(
gnss2Outputs->posU(0)); }
1508 if (descriptor ==
"GNSS2::PosU::E [m]") {
return static_cast<double>(
gnss2Outputs->posU(1)); }
1509 if (descriptor ==
"GNSS2::PosU::D [m]") {
return static_cast<double>(
gnss2Outputs->posU(2)); }
1510 if (descriptor ==
"GNSS2::VelU [m/s]") {
return static_cast<double>(
gnss2Outputs->velU); }
1511 if (descriptor ==
"GNSS2::TimeU [s]") {
return static_cast<double>(
gnss2Outputs->timeU); }
1512 if (descriptor ==
"GNSS2::TimeInfo::Status::timeOk") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.timeOk()); }
1513 if (descriptor ==
"GNSS2::TimeInfo::Status::dateOk") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.dateOk()); }
1514 if (descriptor ==
"GNSS2::TimeInfo::Status::utcTimeValid") {
return static_cast<double>(
gnss2Outputs->timeInfo.status.utcTimeValid()); }
1515 if (descriptor ==
"GNSS2::TimeInfo::LeapSeconds") {
return static_cast<double>(
gnss2Outputs->timeInfo.leapSeconds); }
1516 if (descriptor ==
"GNSS2::DOP::g") {
return static_cast<double>(
gnss2Outputs->dop.gDop); }
1517 if (descriptor ==
"GNSS2::DOP::p") {
return static_cast<double>(
gnss2Outputs->dop.pDop); }
1518 if (descriptor ==
"GNSS2::DOP::t") {
return static_cast<double>(
gnss2Outputs->dop.tDop); }
1519 if (descriptor ==
"GNSS2::DOP::v") {
return static_cast<double>(
gnss2Outputs->dop.vDop); }
1520 if (descriptor ==
"GNSS2::DOP::h") {
return static_cast<double>(
gnss2Outputs->dop.hDop); }
1521 if (descriptor ==
"GNSS2::DOP::n") {
return static_cast<double>(
gnss2Outputs->dop.nDop); }
1522 if (descriptor ==
"GNSS2::DOP::e") {
return static_cast<double>(
gnss2Outputs->dop.eDop); }
1523 if (descriptor ==
"GNSS2::SatInfo::NumSats") {
return static_cast<double>(
gnss2Outputs->satInfo.numSats); }
1524 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
1526 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1534 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1535 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - qi", satId)) {
return static_cast<double>(satellite.qi); }
1536 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - el", satId)) {
return static_cast<double>(satellite.el); }
1537 if (descriptor == fmt::format(
"GNSS2::SatInfo::{} - az", satId)) {
return static_cast<double>(satellite.az); }
1539 if (descriptor ==
"GNSS2::RawMeas::Tow [s]") {
return gnss2Outputs->raw.tow; }
1540 if (descriptor ==
"GNSS2::RawMeas::Week") {
return static_cast<double>(
gnss2Outputs->raw.week); }
1541 if (descriptor ==
"GNSS2::RawMeas::NumSats") {
return static_cast<double>(
gnss2Outputs->raw.numSats); }
1544 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1545 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - freq", satId)) {
return static_cast<double>(satellite.freq); }
1546 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - chan", satId)) {
return static_cast<double>(satellite.chan); }
1547 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - slot", satId)) {
return static_cast<double>(satellite.slot); }
1548 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - cno", satId)) {
return static_cast<double>(satellite.cno); }
1558 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - pr", satId)) {
return satellite.pr; }
1559 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - cp", satId)) {
return satellite.cp; }
1560 if (descriptor == fmt::format(
"GNSS2::RawMeas::{} - dp", satId)) {
return static_cast<double>(satellite.dp); }
1563 return std::nullopt;
1567 [[nodiscard]] std::vector<std::pair<std::string, double>>
getDynamicData()
const override
1569 std::vector<std::pair<std::string, double>> dynData;
1574 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTARTUP)
1576 dynData.emplace_back(
"Time::TimeStartup [ns]",
static_cast<double>(
timeOutputs->timeStartup));
1578 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPS)
1580 dynData.emplace_back(
"Time::TimeGps [ns]",
static_cast<double>(
timeOutputs->timeGps));
1582 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSTOW)
1584 dynData.emplace_back(
"Time::GpsTow [ns]",
static_cast<double>(
timeOutputs->gpsTow));
1586 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_GPSWEEK)
1588 dynData.emplace_back(
"Time::GpsWeek",
static_cast<double>(
timeOutputs->gpsWeek));
1590 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESYNCIN)
1592 dynData.emplace_back(
"Time::TimeSyncIn [ns]",
static_cast<double>(
timeOutputs->timeSyncIn));
1594 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEGPSPPS)
1596 dynData.emplace_back(
"Time::TimeGpsPps [ns]",
static_cast<double>(
timeOutputs->timePPS));
1598 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMEUTC)
1600 dynData.emplace_back(
"Time::TimeUTC::year",
static_cast<double>(
timeOutputs->timeUtc.year));
1601 dynData.emplace_back(
"Time::TimeUTC::month",
static_cast<double>(
timeOutputs->timeUtc.month));
1602 dynData.emplace_back(
"Time::TimeUTC::day",
static_cast<double>(
timeOutputs->timeUtc.day));
1603 dynData.emplace_back(
"Time::TimeUTC::hour",
static_cast<double>(
timeOutputs->timeUtc.hour));
1604 dynData.emplace_back(
"Time::TimeUTC::min",
static_cast<double>(
timeOutputs->timeUtc.min));
1605 dynData.emplace_back(
"Time::TimeUTC::sec",
static_cast<double>(
timeOutputs->timeUtc.sec));
1606 dynData.emplace_back(
"Time::TimeUTC::ms",
static_cast<double>(
timeOutputs->timeUtc.ms));
1608 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCINCNT)
1610 dynData.emplace_back(
"Time::SyncInCnt",
static_cast<double>(
timeOutputs->syncInCnt));
1612 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_SYNCOUTCNT)
1614 dynData.emplace_back(
"Time::SyncOutCnt",
static_cast<double>(
timeOutputs->syncOutCnt));
1616 if (
timeOutputs->timeField & vn::protocol::uart::TimeGroup::TIMEGROUP_TIMESTATUS)
1618 dynData.emplace_back(
"Time::TimeStatus::timeOk",
static_cast<double>(
timeOutputs->timeStatus.timeOk()));
1619 dynData.emplace_back(
"Time::TimeStatus::dateOk",
static_cast<double>(
timeOutputs->timeStatus.dateOk()));
1620 dynData.emplace_back(
"Time::TimeStatus::utcTimeValid",
static_cast<double>(
timeOutputs->timeStatus.utcTimeValid()));
1626 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_IMUSTATUS)
1628 dynData.emplace_back(
"IMU::ImuStatus",
static_cast<double>(
imuOutputs->imuStatus));
1630 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPMAG)
1632 dynData.emplace_back(
"IMU::UncompMag::X [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(0)));
1633 dynData.emplace_back(
"IMU::UncompMag::Y [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(1)));
1634 dynData.emplace_back(
"IMU::UncompMag::Z [Gauss]",
static_cast<double>(
imuOutputs->uncompMag(2)));
1636 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPACCEL)
1638 dynData.emplace_back(
"IMU::UncompAccel::X [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(0)));
1639 dynData.emplace_back(
"IMU::UncompAccel::Y [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(1)));
1640 dynData.emplace_back(
"IMU::UncompAccel::Z [m/s^2]",
static_cast<double>(
imuOutputs->uncompAccel(2)));
1642 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_UNCOMPGYRO)
1644 dynData.emplace_back(
"IMU::UncompGyro::X [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(0)));
1645 dynData.emplace_back(
"IMU::UncompGyro::Y [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(1)));
1646 dynData.emplace_back(
"IMU::UncompGyro::Z [rad/s]",
static_cast<double>(
imuOutputs->uncompGyro(2)));
1648 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_TEMP)
1650 dynData.emplace_back(
"IMU::Temp [Celsius]",
static_cast<double>(
imuOutputs->temp));
1652 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_PRES)
1654 dynData.emplace_back(
"IMU::Pres [kPa]",
static_cast<double>(
imuOutputs->pres));
1656 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTATHETA)
1658 dynData.emplace_back(
"IMU::DeltaTime [s]",
static_cast<double>(
imuOutputs->deltaTime));
1659 dynData.emplace_back(
"IMU::DeltaTheta::X [deg]",
static_cast<double>(
imuOutputs->deltaTheta(0)));
1660 dynData.emplace_back(
"IMU::DeltaTheta::Y [deg]",
static_cast<double>(
imuOutputs->deltaTheta(1)));
1661 dynData.emplace_back(
"IMU::DeltaTheta::Z [deg]",
static_cast<double>(
imuOutputs->deltaTheta(2)));
1663 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_DELTAVEL)
1665 dynData.emplace_back(
"IMU::DeltaVel::X [m/s]",
static_cast<double>(
imuOutputs->deltaV(0)));
1666 dynData.emplace_back(
"IMU::DeltaVel::Y [m/s]",
static_cast<double>(
imuOutputs->deltaV(1)));
1667 dynData.emplace_back(
"IMU::DeltaVel::Z [m/s]",
static_cast<double>(
imuOutputs->deltaV(2)));
1669 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_MAG)
1671 dynData.emplace_back(
"IMU::Mag::X [Gauss]",
static_cast<double>(
imuOutputs->mag(0)));
1672 dynData.emplace_back(
"IMU::Mag::Y [Gauss]",
static_cast<double>(
imuOutputs->mag(1)));
1673 dynData.emplace_back(
"IMU::Mag::Z [Gauss]",
static_cast<double>(
imuOutputs->mag(2)));
1675 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ACCEL)
1677 dynData.emplace_back(
"IMU::Accel::X [m/s^2]",
static_cast<double>(
imuOutputs->accel(0)));
1678 dynData.emplace_back(
"IMU::Accel::Y [m/s^2]",
static_cast<double>(
imuOutputs->accel(1)));
1679 dynData.emplace_back(
"IMU::Accel::Z [m/s^2]",
static_cast<double>(
imuOutputs->accel(2)));
1681 if (
imuOutputs->imuField & vn::protocol::uart::ImuGroup::IMUGROUP_ANGULARRATE)
1683 dynData.emplace_back(
"IMU::AngularRate::X [rad/s]",
static_cast<double>(
imuOutputs->angularRate(0)));
1684 dynData.emplace_back(
"IMU::AngularRate::Y [rad/s]",
static_cast<double>(
imuOutputs->angularRate(1)));
1685 dynData.emplace_back(
"IMU::AngularRate::Z [rad/s]",
static_cast<double>(
imuOutputs->angularRate(2)));
1692 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1694 dynData.emplace_back(
"GNSS1::UTC::year",
static_cast<double>(
gnss1Outputs->timeUtc.year));
1695 dynData.emplace_back(
"GNSS1::UTC::month",
static_cast<double>(
gnss1Outputs->timeUtc.month));
1696 dynData.emplace_back(
"GNSS1::UTC::day",
static_cast<double>(
gnss1Outputs->timeUtc.day));
1697 dynData.emplace_back(
"GNSS1::UTC::hour",
static_cast<double>(
gnss1Outputs->timeUtc.hour));
1698 dynData.emplace_back(
"GNSS1::UTC::min",
static_cast<double>(
gnss1Outputs->timeUtc.min));
1699 dynData.emplace_back(
"GNSS1::UTC::sec",
static_cast<double>(
gnss1Outputs->timeUtc.sec));
1700 dynData.emplace_back(
"GNSS1::UTC::ms",
static_cast<double>(
gnss1Outputs->timeUtc.ms));
1702 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1704 dynData.emplace_back(
"GNSS1::Tow [ns]",
static_cast<double>(
gnss1Outputs->tow));
1706 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1708 dynData.emplace_back(
"GNSS1::Week",
static_cast<double>(
gnss1Outputs->week));
1710 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1712 dynData.emplace_back(
"GNSS1::NumSats",
static_cast<double>(
gnss1Outputs->numSats));
1714 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1716 dynData.emplace_back(
"GNSS1::Fix",
static_cast<double>(
gnss1Outputs->fix));
1718 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1720 dynData.emplace_back(
"GNSS1::PosLla::latitude [deg]",
static_cast<double>(
gnss1Outputs->posLla(0)));
1721 dynData.emplace_back(
"GNSS1::PosLla::longitude [deg]",
static_cast<double>(
gnss1Outputs->posLla(1)));
1722 dynData.emplace_back(
"GNSS1::PosLla::altitude [m]",
static_cast<double>(
gnss1Outputs->posLla(2)));
1724 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
1726 dynData.emplace_back(
"GNSS1::PosEcef::X [m]",
static_cast<double>(
gnss1Outputs->posEcef(0)));
1727 dynData.emplace_back(
"GNSS1::PosEcef::Y [m]",
static_cast<double>(
gnss1Outputs->posEcef(1)));
1728 dynData.emplace_back(
"GNSS1::PosEcef::Z [m]",
static_cast<double>(
gnss1Outputs->posEcef(2)));
1730 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
1732 dynData.emplace_back(
"GNSS1::VelNed::N [m/s]",
static_cast<double>(
gnss1Outputs->velNed(0)));
1733 dynData.emplace_back(
"GNSS1::VelNed::E [m/s]",
static_cast<double>(
gnss1Outputs->velNed(1)));
1734 dynData.emplace_back(
"GNSS1::VelNed::D [m/s]",
static_cast<double>(
gnss1Outputs->velNed(2)));
1736 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
1738 dynData.emplace_back(
"GNSS1::VelEcef::X [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(0)));
1739 dynData.emplace_back(
"GNSS1::VelEcef::Y [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(1)));
1740 dynData.emplace_back(
"GNSS1::VelEcef::Z [m/s]",
static_cast<double>(
gnss1Outputs->velEcef(2)));
1742 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
1744 dynData.emplace_back(
"GNSS1::PosU::N [m]",
static_cast<double>(
gnss1Outputs->posU(0)));
1745 dynData.emplace_back(
"GNSS1::PosU::E [m]",
static_cast<double>(
gnss1Outputs->posU(1)));
1746 dynData.emplace_back(
"GNSS1::PosU::D [m]",
static_cast<double>(
gnss1Outputs->posU(2)));
1748 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
1750 dynData.emplace_back(
"GNSS1::VelU [m/s]",
static_cast<double>(
gnss1Outputs->velU));
1752 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
1754 dynData.emplace_back(
"GNSS1::TimeU [s]",
static_cast<double>(
gnss1Outputs->timeU));
1756 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
1758 dynData.emplace_back(
"GNSS1::TimeInfo::Status::timeOk",
static_cast<double>(
gnss1Outputs->timeInfo.status.timeOk()));
1759 dynData.emplace_back(
"GNSS1::TimeInfo::Status::dateOk",
static_cast<double>(
gnss1Outputs->timeInfo.status.dateOk()));
1760 dynData.emplace_back(
"GNSS1::TimeInfo::Status::utcTimeValid",
static_cast<double>(
gnss1Outputs->timeInfo.status.utcTimeValid()));
1761 dynData.emplace_back(
"GNSS1::TimeInfo::LeapSeconds",
static_cast<double>(
gnss1Outputs->timeInfo.leapSeconds));
1763 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
1765 dynData.emplace_back(
"GNSS1::DOP::g",
static_cast<double>(
gnss1Outputs->dop.gDop));
1766 dynData.emplace_back(
"GNSS1::DOP::p",
static_cast<double>(
gnss1Outputs->dop.pDop));
1767 dynData.emplace_back(
"GNSS1::DOP::t",
static_cast<double>(
gnss1Outputs->dop.tDop));
1768 dynData.emplace_back(
"GNSS1::DOP::v",
static_cast<double>(
gnss1Outputs->dop.vDop));
1769 dynData.emplace_back(
"GNSS1::DOP::h",
static_cast<double>(
gnss1Outputs->dop.hDop));
1770 dynData.emplace_back(
"GNSS1::DOP::n",
static_cast<double>(
gnss1Outputs->dop.nDop));
1771 dynData.emplace_back(
"GNSS1::DOP::e",
static_cast<double>(
gnss1Outputs->dop.eDop));
1773 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
1775 dynData.emplace_back(
"GNSS1::SatInfo::NumSats",
static_cast<double>(
gnss1Outputs->satInfo.numSats));
1776 for (
auto& satellite :
gnss1Outputs->satInfo.satellites)
1778 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1786 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - cno", satId),
static_cast<double>(satellite.cno));
1787 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - qi", satId),
static_cast<double>(satellite.qi));
1788 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - el", satId),
static_cast<double>(satellite.el));
1789 dynData.emplace_back(fmt::format(
"GNSS1::SatInfo::{} - az", satId),
static_cast<double>(satellite.az));
1792 if (
gnss1Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
1794 dynData.emplace_back(
"GNSS1::RawMeas::Tow [s]",
gnss1Outputs->raw.tow);
1795 dynData.emplace_back(
"GNSS1::RawMeas::Week",
static_cast<double>(
gnss1Outputs->raw.week));
1796 dynData.emplace_back(
"GNSS1::RawMeas::NumSats",
static_cast<double>(
gnss1Outputs->raw.numSats));
1799 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
1800 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - freq", satId),
static_cast<double>(satellite.freq));
1801 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - chan", satId),
static_cast<double>(satellite.chan));
1802 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - slot", satId),
static_cast<double>(satellite.slot));
1803 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - cno", satId),
static_cast<double>(satellite.cno));
1813 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - pr", satId), satellite.pr);
1814 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - cp", satId), satellite.cp);
1815 dynData.emplace_back(fmt::format(
"GNSS1::RawMeas::{} - dp", satId),
static_cast<double>(satellite.dp));
1823 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_VPESTATUS)
1825 dynData.emplace_back(
"Att::VpeStatus::AttitudeQuality",
static_cast<double>(
attitudeOutputs->vpeStatus.attitudeQuality()));
1826 dynData.emplace_back(
"Att::VpeStatus::GyroSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturation()));
1827 dynData.emplace_back(
"Att::VpeStatus::GyroSaturationRecovery",
static_cast<double>(
attitudeOutputs->vpeStatus.gyroSaturationRecovery()));
1828 dynData.emplace_back(
"Att::VpeStatus::MagDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.magDisturbance()));
1829 dynData.emplace_back(
"Att::VpeStatus::MagSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.magSaturation()));
1830 dynData.emplace_back(
"Att::VpeStatus::AccDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.accDisturbance()));
1831 dynData.emplace_back(
"Att::VpeStatus::AccSaturation",
static_cast<double>(
attitudeOutputs->vpeStatus.accSaturation()));
1832 dynData.emplace_back(
"Att::VpeStatus::KnownMagDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.knownMagDisturbance()));
1833 dynData.emplace_back(
"Att::VpeStatus::KnownAccelDisturbance",
static_cast<double>(
attitudeOutputs->vpeStatus.knownAccelDisturbance()));
1835 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YAWPITCHROLL)
1837 dynData.emplace_back(
"Att::YawPitchRoll::Y [deg]",
static_cast<double>(
attitudeOutputs->ypr(0)));
1838 dynData.emplace_back(
"Att::YawPitchRoll::P [deg]",
static_cast<double>(
attitudeOutputs->ypr(1)));
1839 dynData.emplace_back(
"Att::YawPitchRoll::R [deg]",
static_cast<double>(
attitudeOutputs->ypr(2)));
1841 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_QUATERNION)
1843 dynData.emplace_back(
"Att::Quaternion::w",
static_cast<double>(
attitudeOutputs->qtn.w()));
1844 dynData.emplace_back(
"Att::Quaternion::x",
static_cast<double>(
attitudeOutputs->qtn.x()));
1845 dynData.emplace_back(
"Att::Quaternion::y",
static_cast<double>(
attitudeOutputs->qtn.y()));
1846 dynData.emplace_back(
"Att::Quaternion::z",
static_cast<double>(
attitudeOutputs->qtn.z()));
1848 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_DCM)
1850 dynData.emplace_back(
"Att::DCM::0-0",
static_cast<double>(
attitudeOutputs->dcm(0, 0)));
1851 dynData.emplace_back(
"Att::DCM::0-1",
static_cast<double>(
attitudeOutputs->dcm(0, 1)));
1852 dynData.emplace_back(
"Att::DCM::0-2",
static_cast<double>(
attitudeOutputs->dcm(0, 2)));
1853 dynData.emplace_back(
"Att::DCM::1-0",
static_cast<double>(
attitudeOutputs->dcm(1, 0)));
1854 dynData.emplace_back(
"Att::DCM::1-1",
static_cast<double>(
attitudeOutputs->dcm(1, 1)));
1855 dynData.emplace_back(
"Att::DCM::1-2",
static_cast<double>(
attitudeOutputs->dcm(1, 2)));
1856 dynData.emplace_back(
"Att::DCM::2-0",
static_cast<double>(
attitudeOutputs->dcm(2, 0)));
1857 dynData.emplace_back(
"Att::DCM::2-1",
static_cast<double>(
attitudeOutputs->dcm(2, 1)));
1858 dynData.emplace_back(
"Att::DCM::2-2",
static_cast<double>(
attitudeOutputs->dcm(2, 2)));
1860 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_MAGNED)
1862 dynData.emplace_back(
"Att::MagNed::N [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(0)));
1863 dynData.emplace_back(
"Att::MagNed::E [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(1)));
1864 dynData.emplace_back(
"Att::MagNed::D [Gauss]",
static_cast<double>(
attitudeOutputs->magNed(2)));
1866 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_ACCELNED)
1868 dynData.emplace_back(
"Att::AccelNed::N [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(0)));
1869 dynData.emplace_back(
"Att::AccelNed::E [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(1)));
1870 dynData.emplace_back(
"Att::AccelNed::D [m/s^2]",
static_cast<double>(
attitudeOutputs->accelNed(2)));
1872 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELBODY)
1874 dynData.emplace_back(
"Att::LinearAccelBody::X [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(0)));
1875 dynData.emplace_back(
"Att::LinearAccelBody::Y [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(1)));
1876 dynData.emplace_back(
"Att::LinearAccelBody::Z [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelBody(2)));
1878 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_LINEARACCELNED)
1880 dynData.emplace_back(
"Att::LinearAccelNed::N [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(0)));
1881 dynData.emplace_back(
"Att::LinearAccelNed::E [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(1)));
1882 dynData.emplace_back(
"Att::LinearAccelNed::D [m/s^2]",
static_cast<double>(
attitudeOutputs->linearAccelNed(2)));
1884 if (
attitudeOutputs->attitudeField & vn::protocol::uart::AttitudeGroup::ATTITUDEGROUP_YPRU)
1886 dynData.emplace_back(
"Att::YprU::Y [deg]",
static_cast<double>(
attitudeOutputs->yprU(0)));
1887 dynData.emplace_back(
"Att::YprU::P [deg]",
static_cast<double>(
attitudeOutputs->yprU(1)));
1888 dynData.emplace_back(
"Att::YprU::R [deg]",
static_cast<double>(
attitudeOutputs->yprU(2)));
1895 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_INSSTATUS)
1897 dynData.emplace_back(
"INS::InsStatus::Mode",
static_cast<double>(
insOutputs->insStatus.mode()));
1898 dynData.emplace_back(
"INS::InsStatus::GpsFix",
static_cast<double>(
insOutputs->insStatus.gpsFix()));
1899 dynData.emplace_back(
"INS::InsStatus::Error::IMU",
static_cast<double>(
insOutputs->insStatus.errorIMU()));
1900 dynData.emplace_back(
"INS::InsStatus::Error::MagPres",
static_cast<double>(
insOutputs->insStatus.errorMagPres()));
1901 dynData.emplace_back(
"INS::InsStatus::Error::GNSS",
static_cast<double>(
insOutputs->insStatus.errorGnss()));
1902 dynData.emplace_back(
"INS::InsStatus::GpsHeadingIns",
static_cast<double>(
insOutputs->insStatus.gpsHeadingIns()));
1903 dynData.emplace_back(
"INS::InsStatus::GpsCompass",
static_cast<double>(
insOutputs->insStatus.gpsCompass()));
1905 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSLLA)
1907 dynData.emplace_back(
"INS::PosLla::latitude [deg]",
static_cast<double>(
insOutputs->posLla(0)));
1908 dynData.emplace_back(
"INS::PosLla::longitude [deg]",
static_cast<double>(
insOutputs->posLla(1)));
1909 dynData.emplace_back(
"INS::PosLla::altitude [m]",
static_cast<double>(
insOutputs->posLla(2)));
1911 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSECEF)
1913 dynData.emplace_back(
"INS::PosEcef::X [m]",
static_cast<double>(
insOutputs->posEcef(0)));
1914 dynData.emplace_back(
"INS::PosEcef::Y [m]",
static_cast<double>(
insOutputs->posEcef(1)));
1915 dynData.emplace_back(
"INS::PosEcef::Z [m]",
static_cast<double>(
insOutputs->posEcef(2)));
1917 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELBODY)
1919 dynData.emplace_back(
"INS::VelBody::X [m/s]",
static_cast<double>(
insOutputs->velBody(0)));
1920 dynData.emplace_back(
"INS::VelBody::Y [m/s]",
static_cast<double>(
insOutputs->velBody(1)));
1921 dynData.emplace_back(
"INS::VelBody::Z [m/s]",
static_cast<double>(
insOutputs->velBody(2)));
1923 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELNED)
1925 dynData.emplace_back(
"INS::VelNed::N [m/s]",
static_cast<double>(
insOutputs->velNed(0)));
1926 dynData.emplace_back(
"INS::VelNed::E [m/s]",
static_cast<double>(
insOutputs->velNed(1)));
1927 dynData.emplace_back(
"INS::VelNed::D [m/s]",
static_cast<double>(
insOutputs->velNed(2)));
1929 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELECEF)
1931 dynData.emplace_back(
"INS::VelEcef::X [m/s]",
static_cast<double>(
insOutputs->velEcef(0)));
1932 dynData.emplace_back(
"INS::VelEcef::Y [m/s]",
static_cast<double>(
insOutputs->velEcef(1)));
1933 dynData.emplace_back(
"INS::VelEcef::Z [m/s]",
static_cast<double>(
insOutputs->velEcef(2)));
1935 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_MAGECEF)
1937 dynData.emplace_back(
"INS::MagEcef::X [Gauss]",
static_cast<double>(
insOutputs->magEcef(0)));
1938 dynData.emplace_back(
"INS::MagEcef::Y [Gauss]",
static_cast<double>(
insOutputs->magEcef(1)));
1939 dynData.emplace_back(
"INS::MagEcef::Z [Gauss]",
static_cast<double>(
insOutputs->magEcef(2)));
1941 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_ACCELECEF)
1943 dynData.emplace_back(
"INS::AccelEcef::X [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(0)));
1944 dynData.emplace_back(
"INS::AccelEcef::Y [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(1)));
1945 dynData.emplace_back(
"INS::AccelEcef::Z [m/s^2]",
static_cast<double>(
insOutputs->accelEcef(2)));
1947 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_LINEARACCELECEF)
1949 dynData.emplace_back(
"INS::LinearAccelEcef::X [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(0)));
1950 dynData.emplace_back(
"INS::LinearAccelEcef::Y [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(1)));
1951 dynData.emplace_back(
"INS::LinearAccelEcef::Z [m/s^2]",
static_cast<double>(
insOutputs->linearAccelEcef(2)));
1953 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_POSU)
1955 dynData.emplace_back(
"INS::PosU [m]",
static_cast<double>(
insOutputs->posU));
1957 if (
insOutputs->insField & vn::protocol::uart::InsGroup::INSGROUP_VELU)
1959 dynData.emplace_back(
"INS::VelU [m/s]",
static_cast<double>(
insOutputs->velU));
1966 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_UTC)
1968 dynData.emplace_back(
"GNSS2::UTC::year",
static_cast<double>(
gnss2Outputs->timeUtc.year));
1969 dynData.emplace_back(
"GNSS2::UTC::month",
static_cast<double>(
gnss2Outputs->timeUtc.month));
1970 dynData.emplace_back(
"GNSS2::UTC::day",
static_cast<double>(
gnss2Outputs->timeUtc.day));
1971 dynData.emplace_back(
"GNSS2::UTC::hour",
static_cast<double>(
gnss2Outputs->timeUtc.hour));
1972 dynData.emplace_back(
"GNSS2::UTC::min",
static_cast<double>(
gnss2Outputs->timeUtc.min));
1973 dynData.emplace_back(
"GNSS2::UTC::sec",
static_cast<double>(
gnss2Outputs->timeUtc.sec));
1974 dynData.emplace_back(
"GNSS2::UTC::ms",
static_cast<double>(
gnss2Outputs->timeUtc.ms));
1976 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TOW)
1978 dynData.emplace_back(
"GNSS2::Tow [ns]",
static_cast<double>(
gnss2Outputs->tow));
1980 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_WEEK)
1982 dynData.emplace_back(
"GNSS2::Week",
static_cast<double>(
gnss2Outputs->week));
1984 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_NUMSATS)
1986 dynData.emplace_back(
"GNSS2::NumSats",
static_cast<double>(
gnss2Outputs->numSats));
1988 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_FIX)
1990 dynData.emplace_back(
"GNSS2::Fix",
static_cast<double>(
gnss2Outputs->fix));
1992 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSLLA)
1994 dynData.emplace_back(
"GNSS2::PosLla::latitude [deg]",
static_cast<double>(
gnss2Outputs->posLla(0)));
1995 dynData.emplace_back(
"GNSS2::PosLla::longitude [deg]",
static_cast<double>(
gnss2Outputs->posLla(1)));
1996 dynData.emplace_back(
"GNSS2::PosLla::altitude [m]",
static_cast<double>(
gnss2Outputs->posLla(2)));
1998 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSECEF)
2000 dynData.emplace_back(
"GNSS2::PosEcef::X [m]",
static_cast<double>(
gnss2Outputs->posEcef(0)));
2001 dynData.emplace_back(
"GNSS2::PosEcef::Y [m]",
static_cast<double>(
gnss2Outputs->posEcef(1)));
2002 dynData.emplace_back(
"GNSS2::PosEcef::Z [m]",
static_cast<double>(
gnss2Outputs->posEcef(2)));
2004 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELNED)
2006 dynData.emplace_back(
"GNSS2::VelNed::N [m/s]",
static_cast<double>(
gnss2Outputs->velNed(0)));
2007 dynData.emplace_back(
"GNSS2::VelNed::E [m/s]",
static_cast<double>(
gnss2Outputs->velNed(1)));
2008 dynData.emplace_back(
"GNSS2::VelNed::D [m/s]",
static_cast<double>(
gnss2Outputs->velNed(2)));
2010 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELECEF)
2012 dynData.emplace_back(
"GNSS2::VelEcef::X [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(0)));
2013 dynData.emplace_back(
"GNSS2::VelEcef::Y [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(1)));
2014 dynData.emplace_back(
"GNSS2::VelEcef::Z [m/s]",
static_cast<double>(
gnss2Outputs->velEcef(2)));
2016 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_POSU)
2018 dynData.emplace_back(
"GNSS2::PosU::N [m]",
static_cast<double>(
gnss2Outputs->posU(0)));
2019 dynData.emplace_back(
"GNSS2::PosU::E [m]",
static_cast<double>(
gnss2Outputs->posU(1)));
2020 dynData.emplace_back(
"GNSS2::PosU::D [m]",
static_cast<double>(
gnss2Outputs->posU(2)));
2022 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_VELU)
2024 dynData.emplace_back(
"GNSS2::VelU [m/s]",
static_cast<double>(
gnss2Outputs->velU));
2026 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEU)
2028 dynData.emplace_back(
"GNSS2::TimeU [s]",
static_cast<double>(
gnss2Outputs->timeU));
2030 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_TIMEINFO)
2032 dynData.emplace_back(
"GNSS2::TimeInfo::Status::timeOk",
static_cast<double>(
gnss2Outputs->timeInfo.status.timeOk()));
2033 dynData.emplace_back(
"GNSS2::TimeInfo::Status::dateOk",
static_cast<double>(
gnss2Outputs->timeInfo.status.dateOk()));
2034 dynData.emplace_back(
"GNSS2::TimeInfo::Status::utcTimeValid",
static_cast<double>(
gnss2Outputs->timeInfo.status.utcTimeValid()));
2035 dynData.emplace_back(
"GNSS2::TimeInfo::LeapSeconds",
static_cast<double>(
gnss2Outputs->timeInfo.leapSeconds));
2037 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_DOP)
2039 dynData.emplace_back(
"GNSS2::DOP::g",
static_cast<double>(
gnss2Outputs->dop.gDop));
2040 dynData.emplace_back(
"GNSS2::DOP::p",
static_cast<double>(
gnss2Outputs->dop.pDop));
2041 dynData.emplace_back(
"GNSS2::DOP::t",
static_cast<double>(
gnss2Outputs->dop.tDop));
2042 dynData.emplace_back(
"GNSS2::DOP::v",
static_cast<double>(
gnss2Outputs->dop.vDop));
2043 dynData.emplace_back(
"GNSS2::DOP::h",
static_cast<double>(
gnss2Outputs->dop.hDop));
2044 dynData.emplace_back(
"GNSS2::DOP::n",
static_cast<double>(
gnss2Outputs->dop.nDop));
2045 dynData.emplace_back(
"GNSS2::DOP::e",
static_cast<double>(
gnss2Outputs->dop.eDop));
2047 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_SATINFO)
2049 dynData.emplace_back(
"GNSS2::SatInfo::NumSats",
static_cast<double>(
gnss2Outputs->satInfo.numSats));
2050 for (
auto& satellite :
gnss2Outputs->satInfo.satellites)
2052 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
2060 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - cno", satId),
static_cast<double>(satellite.cno));
2061 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - qi", satId),
static_cast<double>(satellite.qi));
2062 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - el", satId),
static_cast<double>(satellite.el));
2063 dynData.emplace_back(fmt::format(
"GNSS2::SatInfo::{} - az", satId),
static_cast<double>(satellite.az));
2066 if (
gnss2Outputs->gnssField & vn::protocol::uart::GpsGroup::GPSGROUP_RAWMEAS)
2068 dynData.emplace_back(
"GNSS2::RawMeas::Tow [s]",
gnss2Outputs->raw.tow);
2069 dynData.emplace_back(
"GNSS2::RawMeas::Week",
static_cast<double>(
gnss2Outputs->raw.week));
2070 dynData.emplace_back(
"GNSS2::RawMeas::NumSats",
static_cast<double>(
gnss2Outputs->raw.numSats));
2073 SatId satId(
getSatSys(satellite.sys),
static_cast<uint16_t
>(satellite.svId));
2074 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - freq", satId),
static_cast<double>(satellite.freq));
2075 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - chan", satId),
static_cast<double>(satellite.chan));
2076 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - slot", satId),
static_cast<double>(satellite.slot));
2077 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - cno", satId),
static_cast<double>(satellite.cno));
2087 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - pr", satId), satellite.pr);
2088 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - cp", satId), satellite.cp);
2089 dynData.emplace_back(fmt::format(
"GNSS2::RawMeas::{} - dp", satId),
static_cast<double>(satellite.dp));