29std::map<std::string, std::vector<NodeInfo>> _registeredNodes;
 
   33std::map<std::string, std::vector<std::string>> _registeredNodeDataTypes;
 
   41template<std::derived_from<Node> T>
 
   42void registerNodeType()
 
   46    info.type = T::typeStatic();
 
   49    for (
const InputPin& pin : obj.inputPins)
 
   51        info.pinInfoList.emplace_back(pin.kind, pin.type, pin.dataIdentifier);
 
   53    for (
const OutputPin& pin : obj.outputPins)
 
   55        info.pinInfoList.emplace_back(pin.kind, pin.type, pin.dataIdentifier);
 
   58    _registeredNodes[T::category()].push_back(info);
 
   63template<std::derived_from<NodeData> T>
 
   64void registerNodeDataType()
 
   66    _registeredNodeDataTypes[T::type()] = T::parentTypes();
 
   90        if (pinInfo.kind == searchPinKind && pinInfo.type == pin->
type)
 
   95                    && std::ranges::find(endPinDataIdentifier, startPinParentNodeType) != endPinDataIdentifier.end())
 
 
  110    return _registeredNodes;
 
 
  115    for (
const auto& childType : childTypes)
 
  117        for (
const auto& parentType : parentTypes)
 
  119            if (childType == parentType)
 
  123            for (
const auto& [dataType, parentTypes] : _registeredNodeDataTypes)
 
  125                if (dataType == childType)
 
  127                    for (
const auto& parentTypeOfChild : parentTypes)
 
 
  144    std::vector<std::string> returnTypes;
 
  145    if (_registeredNodeDataTypes.contains(type))
 
  147        const auto& parentTypes = _registeredNodeDataTypes.at(type);
 
  150        if (!parentTypes.empty())
 
  152            returnTypes.insert(returnTypes.end(), parentTypes.begin(), parentTypes.end());
 
  156        for (
const auto& parentType : parentTypes)
 
  159            if (!parentParentTypes.empty())
 
  161                returnTypes.insert(returnTypes.end(), parentParentTypes.begin(), parentParentTypes.end());
 
 
  183#if __linux__ || __APPLE__ 
  249    registerNodeType<Combiner>();
 
  250    registerNodeType<Demo>();
 
  251    registerNodeType<GroupBox>();
 
  252    registerNodeType<Merger>();
 
  253    registerNodeType<Terminator>();
 
  254    registerNodeType<TimeWindow>();
 
  256    registerNodeType<RtklibPosConverter>();
 
  257    registerNodeType<UartPacketConverter>();
 
  258    registerNodeType<UbloxGnssObsConverter>();
 
  259    registerNodeType<UbloxGnssOrbitCollector>();
 
  260    registerNodeType<VectorNavBinaryConverter>();
 
  262#if __linux__ || __APPLE__ 
  263    registerNodeType<MavlinkSend>();
 
  265    registerNodeType<UdpSend>();
 
  266    registerNodeType<UdpRecv>();
 
  268    registerNodeType<CsvLogger>();
 
  269    registerNodeType<KmlLogger>();
 
  270    registerNodeType<MatrixLogger>();
 
  271    registerNodeType<RinexObsLogger>();
 
  272    registerNodeType<UartDataLogger>();
 
  273    registerNodeType<VectorNavDataLogger>();
 
  274    registerNodeType<WiFiObsLogger>();
 
  276    registerNodeType<AllanDeviation>();
 
  277    registerNodeType<ErrorModel>();
 
  278    registerNodeType<GnssAnalyzer>();
 
  279    registerNodeType<RealTimeKinematic>();
 
  280    registerNodeType<SinglePointPositioning>();
 
  281    registerNodeType<ImuIntegrator>();
 
  282    registerNodeType<LooselyCoupledKF>();
 
  283    registerNodeType<LowPassFilter>();
 
  284    registerNodeType<PressToHgt>();
 
  285    registerNodeType<ImuFusion>();
 
  286    registerNodeType<WiFiPositioning>();
 
  288    registerNodeType<CsvFile>();
 
  289    registerNodeType<RinexNavFile>();
 
  290    registerNodeType<RinexObsFile>();
 
  291    registerNodeType<EmlidFile>();
 
  292    registerNodeType<RtklibPosFile>();
 
  293    registerNodeType<NmeaFile>();
 
  294    registerNodeType<UbloxFile>();
 
  295    registerNodeType<EmlidSensor>();
 
  296    registerNodeType<UbloxSensor>();
 
  297    registerNodeType<ImuFile>();
 
  298    registerNodeType<KvhFile>();
 
  299    registerNodeType<VectorNavFile>();
 
  300    registerNodeType<KvhSensor>();
 
  301    registerNodeType<Navio2Sensor>();
 
  302    registerNodeType<VectorNavSensor>();
 
  303    registerNodeType<UlogFile>();
 
  304    registerNodeType<PosVelAttFile>();
 
  305    registerNodeType<MultiImuFile>();
 
  306    registerNodeType<EspressifSensor>();
 
  307    registerNodeType<ArubaSensor>();
 
  308    registerNodeType<WiFiObsFile>();
 
  310    registerNodeType<ImuSimulator>();
 
  311    registerNodeType<BaroSimulator>();
 
  317    registerNodeType<Plot>();
 
  319    registerNodeType<PosVelAttInitializer>();
 
 
  351    registerNodeDataType<NodeData>();
 
  353    registerNodeDataType<DynamicData>();
 
  354    registerNodeDataType<StringObs>();
 
  356    registerNodeDataType<EmlidObs>();
 
  357    registerNodeDataType<GnssCombination>();
 
  358    registerNodeDataType<GnssObs>();
 
  359    registerNodeDataType<RtklibPosObs>();
 
  360    registerNodeDataType<RtkSolution>();
 
  361    registerNodeDataType<SppSolution>();
 
  362    registerNodeDataType<UbloxObs>();
 
  364    registerNodeDataType<ImuObs>();
 
  365    registerNodeDataType<ImuObsSimulated>();
 
  366    registerNodeDataType<ImuObsWDelta>();
 
  367    registerNodeDataType<KvhObs>();
 
  368    registerNodeDataType<VectorNavBinaryOutput>();
 
  370    registerNodeDataType<InsGnssLCKFSolution>();
 
  371    registerNodeDataType<Pos>();
 
  372    registerNodeDataType<PosVel>();
 
  373    registerNodeDataType<PosVelAtt>();
 
  375    registerNodeDataType<WiFiObs>();
 
  376    registerNodeDataType<WiFiPositioningSolution>();
 
  378    registerNodeDataType<BaroPressObs>();
 
  379    registerNodeDataType<BaroHgt>();
 
 
  429    if (nodeData == 
nullptr) { 
return nullptr; }
 
  432    if (nodeData->getType() == 
DynamicData::type()) { 
return std::make_shared<DynamicData>(*std::static_pointer_cast<const DynamicData>(nodeData)); }
 
  433    if (nodeData->getType() == 
StringObs::type()) { 
return std::make_shared<StringObs>(*std::static_pointer_cast<const StringObs>(nodeData)); }
 
  435    if (nodeData->getType() == 
EmlidObs::type()) { 
return std::make_shared<EmlidObs>(*std::static_pointer_cast<const EmlidObs>(nodeData)); }
 
  436    if (nodeData->getType() == 
GnssCombination::type()) { 
return std::make_shared<GnssCombination>(*std::static_pointer_cast<const GnssCombination>(nodeData)); }
 
  437    if (nodeData->getType() == 
GnssObs::type()) { 
return std::make_shared<GnssObs>(*std::static_pointer_cast<const GnssObs>(nodeData)); }
 
  438    if (nodeData->getType() == 
RtklibPosObs::type()) { 
return std::make_shared<RtklibPosObs>(*std::static_pointer_cast<const RtklibPosObs>(nodeData)); }
 
  439    if (nodeData->getType() == 
RtkSolution::type()) { 
return std::make_shared<RtkSolution>(*std::static_pointer_cast<const RtkSolution>(nodeData)); }
 
  440    if (nodeData->getType() == 
SppSolution::type()) { 
return std::make_shared<SppSolution>(*std::static_pointer_cast<const SppSolution>(nodeData)); }
 
  441    if (nodeData->getType() == 
UbloxObs::type()) { 
return std::make_shared<UbloxObs>(*std::static_pointer_cast<const UbloxObs>(nodeData)); }
 
  443    if (nodeData->getType() == 
ImuObs::type()) { 
return std::make_shared<ImuObs>(*std::static_pointer_cast<const ImuObs>(nodeData)); }
 
  444    if (nodeData->getType() == 
ImuObsSimulated::type()) { 
return std::make_shared<ImuObsSimulated>(*std::static_pointer_cast<const ImuObsSimulated>(nodeData)); }
 
  445    if (nodeData->getType() == 
ImuObsWDelta::type()) { 
return std::make_shared<ImuObsWDelta>(*std::static_pointer_cast<const ImuObsWDelta>(nodeData)); }
 
  446    if (nodeData->getType() == 
KvhObs::type()) { 
return std::make_shared<KvhObs>(*std::static_pointer_cast<const KvhObs>(nodeData)); }
 
  447    if (nodeData->getType() == 
VectorNavBinaryOutput::type()) { 
return std::make_shared<VectorNavBinaryOutput>(*std::static_pointer_cast<const VectorNavBinaryOutput>(nodeData)); }
 
  449    if (nodeData->getType() == 
InsGnssLCKFSolution::type()) { 
return std::make_shared<InsGnssLCKFSolution>(*std::static_pointer_cast<const InsGnssLCKFSolution>(nodeData)); }
 
  450    if (nodeData->getType() == 
InsGnssTCKFSolution::type()) { 
return std::make_shared<InsGnssTCKFSolution>(*std::static_pointer_cast<const InsGnssTCKFSolution>(nodeData)); }
 
  451    if (nodeData->getType() == 
Pos::type()) { 
return std::make_shared<Pos>(*std::static_pointer_cast<const Pos>(nodeData)); }
 
  452    if (nodeData->getType() == 
PosVel::type()) { 
return std::make_shared<PosVel>(*std::static_pointer_cast<const PosVel>(nodeData)); }
 
  453    if (nodeData->getType() == 
PosVelAtt::type()) { 
return std::make_shared<PosVelAtt>(*std::static_pointer_cast<const PosVelAtt>(nodeData)); }
 
  455    if (nodeData->getType() == 
WiFiObs::type()) { 
return std::make_shared<WiFiObs>(*std::static_pointer_cast<const WiFiObs>(nodeData)); }
 
  456    if (nodeData->getType() == 
WiFiPositioningSolution::type()) { 
return std::make_shared<WiFiPositioningSolution>(*std::static_pointer_cast<const WiFiPositioningSolution>(nodeData)); }
 
  458    if (nodeData->getType() == 
BaroPressObs::type()) { 
return std::make_shared<BaroPressObs>(*std::static_pointer_cast<const BaroPressObs>(nodeData)); }
 
  459    if (nodeData->getType() == 
BaroHgt::type()) { 
return std::make_shared<BaroHgt>(*std::static_pointer_cast<const BaroHgt>(nodeData)); }
 
 
Computes Allan Deviation.
Barometric Height Storage Class.
Barometric Pressure Storage Class.
Barometer observation simulator.
Calculates differences between signals.
Data Logger for CSV files.
Demo Node which demonstrates all capabilities.
File Reader for Emlid log files.
Adds errors (biases and noise) to measurements.
Allows creation of GNSS measurement combinations.
GNSS measurement combinations.
GNSS Observation messages.
File Reader for Imu log files.
Combines signals of sensors that provide the same signal-type to one signal.
Data storage class for simulated IMU observations.
Data storage class for one VectorNavImu observation.
Parent Class for all IMU Observations.
Imu Observation Simulator.
Loosely-coupled Kalman Filter INS/GNSS errors.
Tightly-coupled Kalman Filter INS/GNSS errors.
Data Logger for Pos data as KML (Keyhole Markup Language) files (input for Google Earth)
File Reader for Kvh log files.
Data storage class for one KVH Imu observation.
Utility class for logging to console and file.
#define LOG_TRACE
Detailled info to trace the execution of the program. Should not be called on functions which receive...
Kalman Filter class for the loosely coupled INS/GNSS integration.
Data Logger for matrices.
File reader for Multi-IMU data log files.
File Reader for NMEA files.
Utility class which specifies available nodes.
Plots data into ImPlot Windows.
Position, Velocity, Attitude Initializer from GPS and IMU data.
Position, Velocity and Attitude Storage Class.
Position and Velocity Storage Class.
Pressure to height converter.
Real-Time Kinematic (RTK) carrier-phase DGNSS.
File reader for RINEX Navigation messages.
File reader for RINEX Observation messages.
Logger for GnssObs to RINEX observation files.
RTK Node/Algorithm output.
Convert RTKLib pos files into PosVel.
File Reader for RTKLIB Pos files.
RTKLIB Pos Observation Class.
Single Point Positioning (SPP) / Code Phase Positioning.
Node receiving UDP packages from the Skydel GNSS simulator Instinct plugin.
Wrapper for String Messages.
Terminator for open signals. Mainly used for test flows.
Limits measurement data from any source to a user-defined timewindow.
Data Logger for Uart packets.
File Reader for ubx files.
Convert UbloxObs into GnssObs.
Collects UBX-RXM-SFRBX messages and provides the Orbit information.
File Reader for ULog files.
Converts VectorNavBinaryOutput.
Binary Outputs from VectorNav Sensors.
Data Logger for VectorNav observations.
File Reader for Vector Nav log files.
Data Logger for WiFi observations.
Espressif Observation Class.
WiFi Positioning Algorithm output.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static bool _autostartWorker
Flag which prevents the worker to be autostarted if false.
virtual std::string type() const =0
String representation of the Class Type.
Pins in the GUI for information exchange.
Node * parentNode
Reference to the parent node.
std::vector< std::string > dataIdentifier
One or multiple Data Identifiers (Unique name which is used for data flows)
Type type
Type of the Pin.
static bool dataIdentifierHaveCommon(const std::vector< std::string > &a, const std::vector< std::string > &b)
Checks if the first list of data identifiers has a common entry with the second.
Kind kind
Kind of the Pin (Input/Output)
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
static std::string type()
Returns the type of the data class.
static std::vector< std::string > GetStaticDataDescriptors()
Returns a vector of data descriptors.
static std::string type()
Returns the type of the data class.
Sends a navigation solution via the MAVLink protocol.
bool NodeDataTypeAnyIsChildOf(const std::vector< std::string > &childTypes, const std::vector< std::string > &parentTypes)
Checks if any of the provided child types is a child of any of the provided parent types.
const std::map< std::string, std::vector< NodeInfo > > & RegisteredNodes()
Reference to List of all registered Nodes.
std::vector< std::string > GetParentNodeDataTypes(const std::string &type)
Get the Parent Node Data Types of the specified Node Data Type.
void RegisterNodeDataTypes()
Register all available NodeData types for the program.
bool TypeHasDynamicData(const std::string &type)
Wether the specified Node Data Type can have dynamic data.
void RegisterNodeTypes()
Register all available Node types for the program.
std::vector< std::string > GetStaticDataDescriptors(const std::vector< std::string > &dataIdentifier)
Returns a vector of data descriptors for the pin data identifiers.
std::shared_ptr< NodeData > CopyNodeData(const std::shared_ptr< const NodeData > &nodeData)
Creates a copy of the data.
Holds information for registered nodes.
std::function< Node *()> constructor
Constructor.
std::string type
Class Type of the node.
bool hasCompatiblePin(const Pin *pin) const
Checks if the node has a pin which can be linked.
std::vector< PinInfo > pinInfoList
List of port data types.
Kind of the Pin (Input/Output)
@ Delegate
Reference to the Node object.
@ Float
Floating Point Number.
Asynchronous data link - receiver node.
Asynchronous data link - sender node.