ROSEDA Materials Dataset
DISTRIBUTION STATEMENT A: Approved for public release: distribution unlimited. AFRL-2024-6234
This dataset was generated for an experiment to determine if a machine learning model can predict the rheological flow behavior of a material, using only a photo of a test print pattern and the relevant print process parameters. Details of the experiment and how the data was generated can be found in our
article in
Advanced Intelligent Systems.
This dataset contains Herschel-Bulkley rheological data on 15 materials used in Direct-Ink-Write 3D printing, found in the
material_data table. Each material was printed in a test print pattern which was photographed, and has its own table of print data and links to the segmented pattern. The code used to process the data is also included. Running the
process_data.py
Python script should reproduce the processed data from the original procedure logs and pattern images.
material_data table
This table contains the ink material compositions and properties. These rheological properties were measured via oscillatory shear rheometry, and the resultant stress-strain curve was fit with a Herschel-Bulkley model of the form $\tau = \tau_\gamma + k\dot\gamma^n$. In this equation, $\tau$ is the shear stress, $\dot\gamma$ is the strain rate, and the fit parameters are the shear yield stress ($\tau_\gamma$), the consistency index ($k$), and the flow index ($n$).
The rheological data was obtained using the rheometer's TA Instruments' TRIOS software, which is not open-source. However we still have the original stress-strain curve data files for further analysis. We include a script,
RheoCalc.py
, that shows how one could fit the data to a Herschel-Bulkley model using least-squares fitting.
Ink_Name,
str, name of the ink. The name is of the form "MS{n} Ink{m}" where
n indicates the Material System of the ink, and
m is the number we assigned for that ink in that system. There are two material systems, MS1 and MS2.
Composition,
str, a string listing the composition of the ink in mass percentages
Yield_Stress_Pa,
float, the yield stress of the ink in Pascals
Yield_Stress_Pa_SEM,
float, the standard error in the measurement (SEM) of the yield stress, in Pascals
Yield_Stress_Pa_SD,
float, the standard deviation (SD) of the yield stress, in Pascals
Consistency_Index_Pa_sn,
float, the consistency index of the ink in Pa s^n, with n being the flow index
Consistency_Index_Pa_sn_SEM,
float, SEM of the consistency index
Consistency_Index_Pa_sn_SD,
float, SD of the consistency index
Flow_Index,
float, the flow index of the ink, unitless
Flow_Index_SEM,
float, the SEM of the flow index
Flow_Index_SD,
float, the SD of the flow index
Rheometer_Files,
str, a string listing the names of the rheometer files from which the rheology was procured. These are located in the
rheometer_files directory
Print_Dir,
str, the name of the directory containing the print files, which is also the name of the table containing the print data on the ink. This is of the form "MS{n}_Ink{m}"
The Test Print Pattern
Each ink was printed in a pattern as shown below 10 times, creating 10 samples of each ink. This pattern has been divided into four sections, labeled A, B, C, D. In addition to the photos of the patterns, there are also procedure logs (proclogs) and motion files associated with each print.
Section A: Each line was printed with a different rate and number of pump delays. There are no motion files associated with this section.
Section B: Each line was printed with a different translational speed. There is a motion file associated with printing each line.
Section C: Each C-shape was printed with a different pump pressure. There is a motion file associated with printing each C-shape.
Section D: The tip was dragged through the line at different speeds. There is a motion file associated with printing the line.
These pattern images have been processed to segment out the individual sections and binarize them into black and white images such as the ones below. These individual segmented images are the subject of the Ink tables. The image processing code is in the "image_processing" directory. For each section (A, B, C, or D) of the pattern, it is cropped from the rest of the pattern using a template matching algorithm. The cropped section is then binarized using k-means, and glare is removed using erosion and dilation. The binarized image is then cropped into individual labeled segments.
The original images are not all the same scale. The MS2 ink patterns were photographed at 18.61 $\pm$ 0.22 pixels/mm, while MS1 patterns were photographed at 20.55 $\pm$ 0.12 pixels/mm. To correct for this, all the MS2 pattern images are first rescaled by a factor of 1.1 so that they are also 20.55 pixels/mm.
*Note: MS2 Ink12 has some anomalies in the pattern for samples 4, 6, and 8.
The Ink Tables
These tables link the segmented images as seen above to the relevant print process parameters used to print those segments. There is a table for each ink.
The print data is contained in the procedure log (proclog) associated with the print. The proclog is a verbose json containing hierarchical data on the events that occurred in during print. To make these proclogs less unwieldy, the proclogs are first converted to
proclog
Python class instances, which converts the proclog to a pandas dataframe and contains wrapper functions for interrogating the proclog. They are then queried for events associated with each section of the print pattern so that relevant print parameters can be recorded. All the proclog processing code is in the "print_processing" directory.
The Ink tables are slightly different depending on if the ink is in MS1 or MS2, because those systems were printed with different versions of APE and thus have different proclog formats. Most notably, the proclogs for the MS1 data do not contain G-code, so that information is not in the MS1 tables.
The tables have these columns:
section,
str, the section of the pattern, A1-7, B1-5, C1-10, or D1-4
sample,
int, The sample number, 1-10
binarized_image_name,
str, The filepath to the binarized image. These are of the form "MS{n}
Ink{m}_sample{j}{section}_bin.png" In which
j is the sample number and
section is the section of the pattern, i.e.
B1 or
C8.
color_image_name,
str, The filepath to the unbinarized image. These are of the form "MS{n}
Ink{m}_sample{j}{section}_color.png"
source_image_name,
str, The filepath to the original photo of the entire test print pattern from which the binarized image is cropped from.
image_rescale_value,
float, The factor that the original photo was rescaled. MS2 pattern photos were rescaled at 1.1 so they match the resolution of the MS1 pattern photos. Thus, the original 1200x1600 photos are rescaled to 1320x1760.
coordinates,
list, The x,y-coordinates (in pixels) used to crop the rescaled photo to get the binarized cropped image. MS1 photos are not rescaled, so these coordinates are the same for the original photo.
proclog_file,
str, The filepath to the proclog associated with this print
start_event,
int, the index of the proclog class at which the relevant information for this section begins
end_event,
int, the index of the proclog class at which the relevant information for this section ends
speed,
float, translational speed, mm/s
pressure,
float, pump pressure, PSI
*Note: There are some anomalies with the pump pressure information in the proclogs:
- For MS1 inks, the proclogs do not state the pressure that section A was printed at. However those pressures were filled in as the same pressure used in for the B section.
- For MS2 Ink 12, a high-pressure adapter was used, so the pressures listed in the proclog are incorrect. The correct pressures were added to their tables afterward.
- In the proclogs, the "e_log" for the pump events list the pressure in kPa. This is incorrect. There is a bug in the logging code that resulted in "kPa" being logged. The pressures are actually in PSI.
tip_height,
float, tip height above the print, mm
delay,
list, a list of pump delays, in s, only relevant for section A
dragspeed,
float, the translational speed at which the tip was dragged through the ink, in mm/s, only relevant for section D
motion_file,
str, the path to the motion file associated with this section of the print, not available for section A
gcode,
str, The G-code associated with the section, only available for MS2 Ink data