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.