DOI: 10.18419/darus-4817
title: Digital-Twin Data for Large-Scale 3D Printing

description: &lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
 &lt;meta charset="UTF-8"&gt;
 &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
 &lt;title&gt;MTRL_DATASET - Material Analysis Tools&lt;/title&gt;
 &lt;style&gt;
 body {
 font-family: Arial, sans-serif;
 line-height: 1.6;
 padding: 20px;
 }
 pre {
 background-color: #f4f4f4;
 padding: 10px;
 overflow-x: auto;
 }
 code {
 font-family: Consolas, monospace;
 }
 table {
 border-collapse: collapse;
 width: 100%;
 margin-bottom: 20px;
 }
 table, th, td {
 border: 1px solid #ccc;
 }
 th, td {
 padding: 8px;
 text-align: left;
 }
 h1, h2, h3, h4 {
 margin-top: 1.2em;
 }
 &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

 &lt;h2&gt;Overview&lt;/h2&gt;
 &lt;p&gt;This project contains a dataset from research on a data-informed digital twin for large-scale 3D printing. The data was collected through a series of experiments using two machines: (i) a Kuka KR50R2500 industrial robot and (ii) a MAI® MULTIMIX-3D mortar mixing pump. Additionally, measurements of the printed object's width were recorded during the experiments.&lt;/p&gt;
 &lt;p&gt;The dataset has been used to explore correlations between machine performance, material behavior, and the final printed structure. The accompanying codebase enables replication of the study’s results, offering tools for data processing, clustering, visualization, and the analysis of various material properties and printing parameters.&lt;/p&gt;
 &lt;p&gt;The experiments in this study were conducted in two phases:&lt;/p&gt;
 &lt;ol&gt;
 &lt;li&gt;
 &lt;strong&gt;Correlation Analysis:&lt;/strong&gt; The first phase focused on exploring the relationships between machine performance, material behavior, and the resulting printed object. Data from these experiments was then used to develop a clustering-based prediction model and a set of feedback control services to automate the operation of the Kuka robot and the mortar mixing pump.
 &lt;/li&gt;
 &lt;li&gt;
 &lt;strong&gt;Evaluation of Feedback Control:&lt;/strong&gt; In the second phase, the feedback control services were implemented in a new set of experiments to assess their effectiveness in optimizing the 3D printing process.
 &lt;/li&gt;
 &lt;/ol&gt;

 &lt;h2&gt;Project Structure&lt;/h2&gt;
 &lt;pre&gt;&lt;code&gt;MTRL_DATASET/
│
├── Data/
│ ├── Block_Tests/
│ │ ├── BlockTasks.json - Tasks data for block (evaluation ) tests
│ │ └── BlockMeasurements.json - Width measurements for different block types
│ │
│ └── Mixture_Experiments/
│ ├── PumpResponse_Clean.json - Clean pump response data for mixture experiments (used for clustering)
│ ├── PumpTasks.json - Task data for pump operations
│ └── WidthCorrelationTests.json - Data for width correlation tests
│
├── Clusters/ - Directory for saved ML models
│ ├── kmeans.pkl - Trained KMeans model
│ └── scaler.pkl - Fitted StandardScaler
|
├── Figs/ -Directory of all plots from the code
|
├── Blocks.py - Block data analysis and visualization
├── BlockMeasurements.py - Analysis of block measurement data
├── Clusters.py - Machine learning clustering of pump data
├── PumpData.py - Pump data analysis utilities
├── WidthCorrelations.py - Analysis of correlations between printed object width, Kuka robot velocity and pump reqeuncy
└── README.md - This file
&lt;/code&gt;&lt;/pre&gt;

 &lt;h2&gt;Data Description&lt;/h2&gt;

 &lt;h3&gt;01_Mixture Experiments Data&lt;/h3&gt;
 &lt;p&gt;The experiments in this section were done with 4 types of mixtures as follows:&lt;/p&gt;
 &lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mix&lt;/th&gt;
 &lt;th&gt;Clay (kg)&lt;/th&gt;
 &lt;th&gt;Sand (kg)&lt;/th&gt;
 &lt;th&gt;Water (kg)&lt;/th&gt;
 &lt;th&gt;Flow Table (mm)&lt;/th&gt;
 &lt;th&gt;Density (g/L)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;M1&lt;/td&gt;
 &lt;td&gt;5.00&lt;/td&gt;
 &lt;td&gt;7.50&lt;/td&gt;
 &lt;td&gt;3.00&lt;/td&gt;
 &lt;td&gt;169&lt;/td&gt;
 &lt;td&gt;2080&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M2&lt;/td&gt;
 &lt;td&gt;5.00&lt;/td&gt;
 &lt;td&gt;7.50&lt;/td&gt;
 &lt;td&gt;2.75&lt;/td&gt;
 &lt;td&gt;163&lt;/td&gt;
 &lt;td&gt;2100&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M3&lt;/td&gt;
 &lt;td&gt;5.00&lt;/td&gt;
 &lt;td&gt;7.50&lt;/td&gt;
 &lt;td&gt;2.50&lt;/td&gt;
 &lt;td&gt;147&lt;/td&gt;
 &lt;td&gt;2140&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M4&lt;/td&gt;
 &lt;td&gt;5.00&lt;/td&gt;
 &lt;td&gt;7.50&lt;/td&gt;
 &lt;td&gt;2.25&lt;/td&gt;
 &lt;td&gt;127&lt;/td&gt;
 &lt;td&gt;2196&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
 &lt;/table&gt;

 &lt;h4&gt;PumpResponse_Clean.json&lt;/h4&gt;
 &lt;p&gt;Contains cleaned pump response data including:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;Pump output power and current measurements&lt;/li&gt;
 &lt;li&gt;Mortar temperature readings&lt;/li&gt;
 &lt;li&gt;Pump pressure readings&lt;/li&gt;
 &lt;li&gt;Temporal data for pump operations&lt;/li&gt;
 &lt;/ul&gt;

 &lt;h4&gt;PumpTasks.json&lt;/h4&gt;
 &lt;p&gt;Contains task information related to pump operations:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;Task details for mixture experiments&lt;/li&gt;
 &lt;li&gt;Timing information for pump actions&lt;/li&gt;
 &lt;li&gt;Operational parameters and settings&lt;/li&gt;
 &lt;/ul&gt;

 &lt;h4&gt;WidthCorrelationTests.json&lt;/h4&gt;
 &lt;p&gt;Contains test data for analyzing correlations between:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;Width measurements&lt;/li&gt;
 &lt;li&gt;Pump frequency&lt;/li&gt;
 &lt;li&gt;Robot velocity&lt;/li&gt;
 &lt;/ul&gt;

 &lt;h3&gt;02_Block Tests Data&lt;/h3&gt;
 &lt;p&gt;The experiments in this section were conducted on 3 block types with the following features:&lt;/p&gt;
 &lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Block&lt;/th&gt;
 &lt;th&gt;Velocity (m/s)&lt;/th&gt;
 &lt;th&gt;Frequency (Hz)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;B1&lt;/td&gt;
 &lt;td&gt;0.11&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;B2&lt;/td&gt;
 &lt;td&gt;Adaptive&lt;/td&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;B3&lt;/td&gt;
 &lt;td&gt;0.11&lt;/td&gt;
 &lt;td&gt;Adaptive&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
 &lt;/table&gt;

 &lt;h4&gt;BlockMeasurements.json&lt;/h4&gt;
 &lt;p&gt;Contains width measurements (in mm) for three different blocks. This data is used for comparing width consistency across different block printing strategies.&lt;/p&gt;

 &lt;h4&gt;BlockTasks.json&lt;/h4&gt;
 &lt;p&gt;Contains detailed task data from the pump and the robot for block printing processes, including:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;Task IDs and names&lt;/li&gt;
 &lt;li&gt;Task types (ReadData, Read, SetValue)&lt;/li&gt;
 &lt;li&gt;Actors (KukaPassiveRead, MaiPrinter)&lt;/li&gt;
 &lt;li&gt;Timestamps for start and end times&lt;/li&gt;
 &lt;li&gt;Job identification (e.g., "BLOCK1")&lt;/li&gt;
 &lt;li&gt;Processing levels and indices&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;The file contains over 2300 task entries.&lt;/p&gt;

 &lt;h3&gt;03_Features&lt;/h3&gt;
 &lt;p&gt;Within both the &lt;code&gt;BlockTasks.json&lt;/code&gt; and &lt;code&gt;PumpTask.json&lt;/code&gt; files, every data point adheres to a standardized Task Data Schema that includes the following fields:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;&lt;strong&gt;_id:&lt;/strong&gt; A unique identifier for this record.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;task_id:&lt;/strong&gt; A unique identifier for the specific task or operation.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;name:&lt;/strong&gt; The name assigned to the task or process.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;type:&lt;/strong&gt; The category or type of operation (e.g., a data reading action).&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;main_actor:&lt;/strong&gt; The primary machine or module responsible for carrying out the task.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;description:&lt;/strong&gt; A brief textual description of the task.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;message:&lt;/strong&gt; A log message or status note associated with the operation.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;element_id:&lt;/strong&gt; A list of identifiers for related design elements (if any).&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;actors_data:&lt;/strong&gt; Contains information for the actors involved in the task (nested details are omitted).&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;job:&lt;/strong&gt; The job or process identifier associated with this record.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;level:&lt;/strong&gt; The hierarchical level or depth in a process, indicating its relative position.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;index:&lt;/strong&gt; A numerical order or position indicator for the task.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;start_time:&lt;/strong&gt; The timestamp marking the start of the task or operation.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;end_time:&lt;/strong&gt; The timestamp marking when the task was completed.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;response:&lt;/strong&gt; Contains the outcome or data returned by the task (nested details are omitted).&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;versions:&lt;/strong&gt; Version control or metadata information regarding this record.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;project:&lt;/strong&gt; The identifier for the project to which this record belongs.&lt;/li&gt;
 &lt;li&gt;&lt;strong&gt;author:&lt;/strong&gt; The user or entity that created or is responsible for this record.&lt;/li&gt;
 &lt;/ul&gt;

 &lt;h3&gt;04_Scripts&lt;/h3&gt;
 &lt;h4&gt;PumpData.py&lt;/h4&gt;
 &lt;p&gt;Analyzing and visualising pump tasks data for the 4 mixtures.&lt;/p&gt;
 &lt;h4&gt;WidthCorrelations.py&lt;/h4&gt;
 &lt;p&gt;Analyzes and visualises correlations between width measurements, robot velocity, and pump frequency.&lt;/p&gt;
 &lt;h4&gt;Clusters.py&lt;/h4&gt;
 &lt;p&gt;Implements machine learning clustering on pump data and visualises the results.&lt;/p&gt;
 &lt;h4&gt;Blocks.py&lt;/h4&gt;
 &lt;p&gt;Analyzes task data for different block types, calculates timing metrics, and visualises the results.&lt;/p&gt;
 &lt;h4&gt;BlockMeasurements.py&lt;/h4&gt;
 &lt;p&gt;Analyzes and visualises block width measurement data.&lt;/p&gt;

 &lt;h3&gt;05_Usage&lt;/h3&gt;
 &lt;h4&gt;Dependencies&lt;/h4&gt;
 &lt;p&gt;This project requires the following Python packages:&lt;/p&gt;
 &lt;ul&gt;
 &lt;li&gt;pandas&lt;/li&gt;
 &lt;li&gt;numpy&lt;/li&gt;
 &lt;li&gt;matplotlib&lt;/li&gt;
 &lt;li&gt;scikit-learn&lt;/li&gt;
 &lt;li&gt;joblib&lt;/li&gt;
 &lt;/ul&gt;
 &lt;p&gt;Install dependencies with:&lt;/p&gt;
 &lt;pre&gt;&lt;code&gt;pip install pandas numpy matplotlib scikit-learn joblib&lt;/code&gt;&lt;/pre&gt;
 
 &lt;h4&gt;Run the code&lt;/h4&gt;
 &lt;p&gt;To generate the full analysis and plots from the dataset, simply execute the &lt;code&gt;main.py&lt;/code&gt; file. Open your terminal, navigate to the code directory, and run:&lt;/p&gt;
 &lt;pre&gt;&lt;code&gt;cd path/to/your/code/directory
python main.py&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;For a more detailed overview of available parameters, run each of the individual Python files separately.&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;