Documentation: https://minipada.github.io/ros2_data_collection
Source code: https://github.com/minipada/ros2_data_collection
Humble |
---|
For detailed instructions:
The DC (Data Collection) project aims at integrating data collection pipelines into ROS 2. The goal is to integrate data collection pipelines with existing APIs to enable data analytics, rather than live monitoring, which already has excellent tools available. As companies increasingly turn to autonomous robots, the ability to understand and improve operations for any type of machine in any environment has become crucial. This involves mostly pick and drop and inspection operations. This framework aims at helping collecting, validating (through JSON schemas) and sending reliably the data to create such APIs and dashboards.
DC uses a modular approach, based on pluginlib and greatly inspired by Nav2 for its architecture. Pluginlib is used to configure which measurements are collected and where the data goes. Measurements and destinations are pluginlib plugins. In addition to pluginlib, most plugins use Fluent Bit in the backend: Fluent Bit is a super fast, lightweight, and highly scalable logging and metrics processor and forwarder. It is the preferred choice for cloud and containerized environments. Developed and interfaced in C, it has already many features we directly can use, especially: high performance, reliability and data integrity (backpressure handling and data buffering in memory and filesystem).
And inherited from Fluent Bit:
Here is an example of a pipeline:
flowchart LR
pl_camera1["Camera bottom"]
pl_camera2["Camera middle"]
pl_camera3["Camera top"]
pl_condition_moving["Moving"]
pl_cpu["CPU"]
pl_cmd_vel["Command velocity"]
pl_memory["Memory"]
pl_position["Position"]
pl_speed["Speed"]
pl_storage["Storage"]
pl_uptime["Uptime"]
pl_network["Network"]
pl_network_boot["Network"]
pl_os_boot["OS"]
subgraph m_n["Measurement node"]
subgraph cond["Condition plugins"]
pl_condition_moving
end
subgraph measurements["Measurement plugins"]
pl_camera1
pl_camera2
pl_camera3
pl_cpu
pl_cmd_vel
pl_memory
pl_position
pl_speed
pl_storage
pl_uptime
pl_network
pl_network_boot
pl_os_boot
end
end
subgraph g_n["Group node"]
gr_boot_system["System (boot)"]
gr_system["System"]
gr_robot["Robot"]
gr_inspection["Inspection"]
end
subgraph d_n["Destination node"]
pl_pgsql["PostgreSQL"]
pl_minio["Minio"]
pl_s3["S3"]
end
pl_camera1 -- if not --> pl_condition_moving --> gr_inspection
pl_camera2 -- if not --> pl_condition_moving --> gr_inspection
pl_camera3 -- if not --> pl_condition_moving --> gr_inspection
pl_cpu --> gr_system
pl_memory --> gr_system
pl_uptime --> gr_boot_system
pl_network_boot --> gr_boot_system
pl_os_boot --> gr_boot_system
pl_storage --> gr_system
pl_cmd_vel --> gr_robot
pl_position --> gr_robot
pl_speed --> gr_robot
pl_network -- Network ping and online status --> pl_pgsql
gr_boot_system -- os, network interfaces\n, permissions and uptime --> pl_pgsql
gr_robot -- Robot cmd_vel, position. speed --> pl_pgsql
gr_system -- Available space,\n memory used and cpu usage --> pl_pgsql
gr_inspection -- Image paths on s3 and minio --> pl_pgsql
gr_inspection -- Raw, rotated and/or inspected images --> pl_minio
gr_inspection -- Raw, rotated and/or inspected images --> pl_s3
This program is under the terms of the Mozilla Public License Version 2.0.
For any inquiry, please contact David (d.bensoussan@proton.me). If your inquiry relates to bugs or open-source feature requests, consider posting a ticket on our GitHub project. If your inquiry relates to configuration support or private feature development, reach out and we will be able to support you in your projects.