Documentation: https://minipada.github.io/ros2_data_collection
Source code: https://github.com/minipada/ros2_data_collection
Humble |
---|
For detailed instructions:
- Setup
- Demos
- Concepts
- Data Pipeline
- Measurements
- Conditions
- Data validation
- Groups
- Destinations
- Configuration examples
- Infrastructure setup
- CLI tools
- Requirements
- Future work and Roadmap
- Contributing
- FAQ
- About and contact
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).
- Performance Monitoring: Collecting data from a robot allows you to monitor its performance and identify areas for improvement. For example, you can use data to analyze the robot's motion and identify areas where it may be experiencing issues or inefficiencies.
- Fault Diagnosis: Data collection can also be used to diagnose faults and troubleshoot issues with the robot. By collecting data on various aspects of the robot's behavior, you can identify patterns or anomalies that may indicate problems with the system.
- Machine Learning: Data collected from robots can be used to train machine learning models, which can be used to improve the robot's performance and behavior. For example, you can use data collected from sensors to train models for object detection or path planning.
- Research and Development: Data collection is important for research and development in robotics. By collecting data on the behavior of robots in different scenarios, researchers can gain insights into how robots can be designed and optimized for different applications.
- Inventory Management: Data collection can be used to monitor inventory levels and track the movement of goods within a warehouse. This can help managers identify which products are in high demand and optimize the placement of products to improve order fulfillment times.
- Resource Allocation: Data collection can also help managers allocate resources more efficiently. For example, by monitoring the movement of people and goods within a warehouse, managers can identify bottlenecks and areas of congestion and adjust staffing and equipment allocation to address these issues.
- Process Improvement: Data collection can be used to monitor and analyze the performance of various processes within a warehouse. By identifying areas of inefficiency or errors, managers can develop strategies for improving these processes and increasing productivity.
- Predictive Maintenance: Data collection can be used to monitor the performance of equipment and identify potential maintenance issues before they occur. This can help managers schedule maintenance more effectively and avoid costly downtime due to equipment failure.
- Open source: Currently all tools on the market are not open source. This project is in MPL-2.0 license, in summary you can use without asking permission and without paying
- Modular approach: based on pluginlib and greatly inspired by Nav2 for its architecture
- Reliable data collection: validate and send data to create APIs and dashboards
- Flexible data collection: set polling interval for each measurement or collect every measurement with StringStamped messages
- Customizable validation: validate data using existing or customized JSON schemas
- Easy to extend: add new measurements or destinations by simply adding a plugin
- Flexible data collection conditions: collect data based on conditions such as whether the robot is moving or if a field is equal to a value
- Trigger-based data collection: collect data when a defined set of combination of all, any, or no condition are met
- Customizable record collection: configure the number of records to collect at the start and when a condition is activated.
- Data inspection: inspect data from camera input including barcode and QR codes
- Fast and efficient: high performance, using Fluent Bit for backend processing, and designed to minimize code duplication and reduce human errors
- Grouped measurements: measurements can be grouped using the group node based on the ApproximateTimeSynchronizer
- File saving: files can be saved, including map_server maps, camera images, and any file produced by a measurement
- Easy to use: designed to be easy to learn and use
- No C++ 3rd party library required: all 3rd party libraries have a vendor package in the repository
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.