Data Pipeline
flowchart LR
dc_bringup_launch["DC Bringup Launch"]
yaml_param["YAML Parameter file"]
ros_middleware["ROS middleware"]
subgraph m_s["Measurement Server"]
direction LR
meas_node["Measurement Node"]
measurement_plugins["Measurement plugins"]
meas_topics_out["ROS Topics"]
end
subgraph d_s["Destination Server"]
direction LR
dest_node["Destination Node"]
dest_plugins["Destination plugins"]
end
subgraph g_s["Group Server"]
direction LR
group_node["Group Node"]
group_grouped_data["Grouped data"]
group_topics_out["ROS Topics"]
end
subgraph flb["Fluent Bit"]
direction LR
flb_server["Fluent Bit Server"]
flb_mem_buff["Memory buffer"]
flb_storage_buff["Storage buffer"]
flb_record["Record"]
flb_ros2_plugin["ROS2 plugin"]
flb_output["Outputs"]
end
dc_bringup_launch--2.starts-->meas_node
dc_bringup_launch--3.starts-->dest_node
dc_bringup_launch--4.starts-->group_node
dc_bringup_launch--1.loads-->yaml_param
meas_node--2.1.initializes-->measurement_plugins
measurement_plugins--"2.2.publish to"-->meas_topics_out
dest_node--3.1.starts-->flb_server
dest_node--3.2.initializes-->dest_plugins
dest_node--3.3.loads-->flb_ros2_plugin
flb_ros2_plugin--"3.3.subscribes to"-->meas_topics_out
flb_ros2_plugin--"3.3.subscribes to"-->group_topics_out
group_node--"4.1.subscribes to"-->meas_topics_out
group_node--4.2.generates-->group_grouped_data
group_grouped_data--"4.3.publishes to"-->group_topics_out
flb_ros2_plugin--3.4.generates-->flb_record
flb_record--"3.5.stores in"-->flb_mem_buff
flb_record--"3.7.stores in"-->flb_storage_buff
flb_mem_buff--3.6.flushes-->flb_output
flb_storage_buff--3.8.flushes-->flb_output
group_topics_out--"4.4.sends to"-->ros_middleware
meas_topics_out--"2.3.sends to"-->ros_middleware
ros_middleware--"when data received, sends to"-->flb_ros2_plugin
The data flow precised in this flowchart summarizes how data moves:
- DC Bringup loads the yaml configuration file
- DC Bringup starts the measurement node
- Measurement plugins are loaded and data starts to be collected
- Each plugin publishes what it collected on a ROS topic
- DC Bringup starts the destination node
- Fluent Bit server is started: as soon as it receives records, it goes through filters and then is flushed to desired destinations
- Destination plugins are loaded
- ROS2 Fluent Bit plugin is loaded: it subscribes to measurement and group output topics
- Fluent Bit filters are initialized: it edits data received, modify the tags to match the desired output(s) and edit the timestamp field if required
- DC Bringup starts the group node
- Subscribes to measurement and group topics outputs
- When all measurements of a group are received, it groups the JSONs into a new one
- It publishes the grouped data on another topic