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__
248 registerNodeType<Combiner>();
249 registerNodeType<Demo>();
250 registerNodeType<GroupBox>();
251 registerNodeType<Merger>();
252 registerNodeType<Terminator>();
253 registerNodeType<TimeWindow>();
255 registerNodeType<RtklibPosConverter>();
256 registerNodeType<UartPacketConverter>();
257 registerNodeType<UbloxGnssObsConverter>();
258 registerNodeType<UbloxGnssOrbitCollector>();
259 registerNodeType<VectorNavBinaryConverter>();
261#if __linux__ || __APPLE__
262 registerNodeType<MavlinkSend>();
264 registerNodeType<UdpSend>();
265 registerNodeType<UdpRecv>();
267 registerNodeType<CsvLogger>();
268 registerNodeType<KmlLogger>();
269 registerNodeType<MatrixLogger>();
270 registerNodeType<RinexObsLogger>();
271 registerNodeType<UartDataLogger>();
272 registerNodeType<VectorNavDataLogger>();
273 registerNodeType<WiFiObsLogger>();
275 registerNodeType<AllanDeviation>();
276 registerNodeType<ErrorModel>();
277 registerNodeType<GnssAnalyzer>();
278 registerNodeType<SinglePointPositioning>();
279 registerNodeType<ImuIntegrator>();
280 registerNodeType<LooselyCoupledKF>();
281 registerNodeType<LowPassFilter>();
282 registerNodeType<PressToHgt>();
283 registerNodeType<ImuFusion>();
284 registerNodeType<WiFiPositioning>();
286 registerNodeType<CsvFile>();
287 registerNodeType<RinexNavFile>();
288 registerNodeType<RinexObsFile>();
289 registerNodeType<EmlidFile>();
290 registerNodeType<RtklibPosFile>();
291 registerNodeType<NmeaFile>();
292 registerNodeType<UbloxFile>();
293 registerNodeType<EmlidSensor>();
294 registerNodeType<UbloxSensor>();
295 registerNodeType<ImuFile>();
296 registerNodeType<KvhFile>();
297 registerNodeType<VectorNavFile>();
298 registerNodeType<KvhSensor>();
299 registerNodeType<Navio2Sensor>();
300 registerNodeType<VectorNavSensor>();
301 registerNodeType<UlogFile>();
302 registerNodeType<PosVelAttFile>();
303 registerNodeType<MultiImuFile>();
304 registerNodeType<EspressifSensor>();
305 registerNodeType<ArubaSensor>();
306 registerNodeType<WiFiObsFile>();
308 registerNodeType<ImuSimulator>();
309 registerNodeType<BaroSimulator>();
315 registerNodeType<Plot>();
317 registerNodeType<PosVelAttInitializer>();
348 registerNodeDataType<NodeData>();
350 registerNodeDataType<DynamicData>();
351 registerNodeDataType<StringObs>();
353 registerNodeDataType<EmlidObs>();
354 registerNodeDataType<GnssCombination>();
355 registerNodeDataType<GnssObs>();
356 registerNodeDataType<RtklibPosObs>();
357 registerNodeDataType<SppSolution>();
358 registerNodeDataType<UbloxObs>();
360 registerNodeDataType<ImuObs>();
361 registerNodeDataType<ImuObsSimulated>();
362 registerNodeDataType<ImuObsWDelta>();
363 registerNodeDataType<KvhObs>();
364 registerNodeDataType<VectorNavBinaryOutput>();
366 registerNodeDataType<InsGnssLCKFSolution>();
367 registerNodeDataType<Pos>();
368 registerNodeDataType<PosVel>();
369 registerNodeDataType<PosVelAtt>();
371 registerNodeDataType<WiFiObs>();
372 registerNodeDataType<WiFiPositioningSolution>();
374 registerNodeDataType<BaroPressObs>();
375 registerNodeDataType<BaroHgt>();
423 if (nodeData ==
nullptr) {
return nullptr; }
426 if (nodeData->getType() ==
DynamicData::type()) {
return std::make_shared<DynamicData>(*std::static_pointer_cast<const DynamicData>(nodeData)); }
427 if (nodeData->getType() ==
StringObs::type()) {
return std::make_shared<StringObs>(*std::static_pointer_cast<const StringObs>(nodeData)); }
429 if (nodeData->getType() ==
EmlidObs::type()) {
return std::make_shared<EmlidObs>(*std::static_pointer_cast<const EmlidObs>(nodeData)); }
430 if (nodeData->getType() ==
GnssCombination::type()) {
return std::make_shared<GnssCombination>(*std::static_pointer_cast<const GnssCombination>(nodeData)); }
431 if (nodeData->getType() ==
GnssObs::type()) {
return std::make_shared<GnssObs>(*std::static_pointer_cast<const GnssObs>(nodeData)); }
432 if (nodeData->getType() ==
RtklibPosObs::type()) {
return std::make_shared<RtklibPosObs>(*std::static_pointer_cast<const RtklibPosObs>(nodeData)); }
433 if (nodeData->getType() ==
SppSolution::type()) {
return std::make_shared<SppSolution>(*std::static_pointer_cast<const SppSolution>(nodeData)); }
434 if (nodeData->getType() ==
UbloxObs::type()) {
return std::make_shared<UbloxObs>(*std::static_pointer_cast<const UbloxObs>(nodeData)); }
436 if (nodeData->getType() ==
ImuObs::type()) {
return std::make_shared<ImuObs>(*std::static_pointer_cast<const ImuObs>(nodeData)); }
437 if (nodeData->getType() ==
ImuObsSimulated::type()) {
return std::make_shared<ImuObsSimulated>(*std::static_pointer_cast<const ImuObsSimulated>(nodeData)); }
438 if (nodeData->getType() ==
ImuObsWDelta::type()) {
return std::make_shared<ImuObsWDelta>(*std::static_pointer_cast<const ImuObsWDelta>(nodeData)); }
439 if (nodeData->getType() ==
KvhObs::type()) {
return std::make_shared<KvhObs>(*std::static_pointer_cast<const KvhObs>(nodeData)); }
440 if (nodeData->getType() ==
VectorNavBinaryOutput::type()) {
return std::make_shared<VectorNavBinaryOutput>(*std::static_pointer_cast<const VectorNavBinaryOutput>(nodeData)); }
442 if (nodeData->getType() ==
InsGnssLCKFSolution::type()) {
return std::make_shared<InsGnssLCKFSolution>(*std::static_pointer_cast<const InsGnssLCKFSolution>(nodeData)); }
443 if (nodeData->getType() ==
InsGnssTCKFSolution::type()) {
return std::make_shared<InsGnssTCKFSolution>(*std::static_pointer_cast<const InsGnssTCKFSolution>(nodeData)); }
444 if (nodeData->getType() ==
Pos::type()) {
return std::make_shared<Pos>(*std::static_pointer_cast<const Pos>(nodeData)); }
445 if (nodeData->getType() ==
PosVel::type()) {
return std::make_shared<PosVel>(*std::static_pointer_cast<const PosVel>(nodeData)); }
446 if (nodeData->getType() ==
PosVelAtt::type()) {
return std::make_shared<PosVelAtt>(*std::static_pointer_cast<const PosVelAtt>(nodeData)); }
448 if (nodeData->getType() ==
WiFiObs::type()) {
return std::make_shared<WiFiObs>(*std::static_pointer_cast<const WiFiObs>(nodeData)); }
449 if (nodeData->getType() ==
WiFiPositioningSolution::type()) {
return std::make_shared<WiFiPositioningSolution>(*std::static_pointer_cast<const WiFiPositioningSolution>(nodeData)); }
451 if (nodeData->getType() ==
BaroPressObs::type()) {
return std::make_shared<BaroPressObs>(*std::static_pointer_cast<const BaroPressObs>(nodeData)); }
452 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.
File reader for RINEX Navigation messages.
File reader for RINEX Observation messages.
Logger for GnssObs to RINEX observation files.
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::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.