DOI: 10.5061/dryad.7pvmcvf56
title: The microDelta: Downscaling robot mechanisms enables ultra-fast and high precision movement

description: Physical scaling laws predict that miniaturization of robotic mechanisms
 should enable exceptional robot performance on metrics such as speed and
 precision. While these scaling laws have been explored in a variety of
 microsystems, the benefits and limitations of downscaling 3D robotic
 mechanisms have yet to be assessed due to limitations in microscale 3D
 manufacturing. In this work, we use the Delta robot as a case study for
 these scaling laws. We present two sizes of 3D-printed Delta robots, the
 microDeltas, measuring 1.4 mm and 0.7 mm in height, which are the smallest
 and fastest Delta robots ever demonstrated. 3D printing with two-photon
 polymerization and subsequent metallization enabled the miniaturization of
 these 3D robotic parallel mechanisms integrated with electrostatic
 actuators for exceptionally high bandwidths. The smallest microDelta was
 able to operate at over 1000 Hz and achieved precisions of less than 1 µm
 by taking advantage of its small size. The microDelta's relatively
 high output power was demonstrated with the launch of a small projectile,
 highlighting the utility of miniaturized robotic systems for applications
 ranging from manufacturing to haptics. 
description: # microDelta data & code repository (Dryad package) **Dataset DOI:**
 10.5061/dryad.7pvmcvf56\ **Manuscript:** *The microDelta: downscaling
 robot mechanisms enables ultra-fast and high precision movement* (Science
 Robotics) &gt; This README provides **usage notes up front** for all file
 types, followed by a **folder-by-folder guide** to the Dryad package. It
 is written to help users open files with commonly available tools and to
 explain how the pieces relate (data ↔ processing scripts ↔ figures). ---
 ## Usage Notes — file types in this Dryad package The submission currently
 includes the following file types: | Extension | What it is | How to open
 / use | Typical role in this package | | --------- |
 ------------------------------------------------------------------ |
 -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | `.txt` | Plain text tab/CSV-like time series exports (e.g., TEMA tracking). | Any text editor or software that can read CSV files | Raw data inputs for scripts; units are usually **pixels** from tracking unless stated otherwise. | | `.mlx` | **MATLAB Live Script** (code + narrative). | MATLAB (Live Editor). | End-to-end processing and plotting scripts to recreate figures/analyses for each experiment. | | `.m` | MATLAB/Octave script or function. | MATLAB or GNU Octave (when no Live-Script–only features are used). | These files are generally helper utilities called by `.mlx`. | | `.slx` | Simulink/Simscape models. | MATLAB Simulink / Simscape Multibody. | Mechanism and stiffness models used by modeling scripts. | | `.mat` | MATLAB data files. | MATLAB | Intermediate/compiled data (e.g., precomputed Bode/workspace points). | | `.csv` | Comma‑separated values. | Any spreadsheet editor. | Small tabular inputs (e.g., actuator voltage tables). | | `.SLDPRT` | **SolidWorks Part** CAD files for the robots. | SolidWorks; free **eDrawings Viewer** (view‑only); web‑based **Onshape** can import; *some* imports work in FreeCAD. | Reference design geometry (millimeters in CAD correspond to micrometers in the fabricated robots — see notes below). | | `.ino` | Arduino sketch. | Arduino IDE 2.x. | MicroDelta controller used during experiments. | | `.jpg` | Image file. | Any image viewer. | Figure illustration (e.g., salt jump still). | | `.md` | Markdown. | Any text editor. | This README. | **Companion / association rules.** Most Live Scripts (`.mlx`) expect raw data files (`.txt`/`.mat`) in the **same subfolder**. Please keep the folder structure intact or add the repository root to the MATLAB path so relative reads work. **Units & calibration.** Trajectory tracking files exported from TEMA are in **pixels**; scripts apply pixel→micron conversion using image scale factors. Frequency-response filename patterns may include the frequency (e.g., `..._0.2Hz.txt`). --- ## How the repository is organized Top-level folders mirror the study workflow. For each, we summarize the context, subfolders, and how files relate. ``` microDelta_paper_repository/ ├─ Design/ ← CAD for both robot sizes (MicroDelta-1X and MicroDelta-0.5X) ├─ Experiments/ ← Data collection from the robots & files to analyze that data ├─ Modeling/ ← Models, simulations, and derived calculations ├─ Testing/ ← Calibration and measurement quality checks └─ README.md ``` ### Naming conventions * **MD1X** → the larger microDelta (≈ 1× scale in the paper). * **MD05X** → the smaller microDelta (≈ 0.5× linear scale). * Files prefixed with `MD1X_...` or `MD05X_...` are specific to one robot; files starting with `MD_...` compare or apply to both. &gt; Note on CAD scale: **SolidWorks models are in millimeters but represent micrometer-scale hardware** (1 mm in CAD ≈ 1 µm in the printed mechanism). --- ## Folder-by-folder guide ### 1) `Design/` — Robot geometry * `MD1X_Robot.SLDPRT`, `MD05X_Robot.SLDPRT`: SolidWorks part files for the two robot sizes (view with SolidWorks or the free eDrawings Viewer; importable in Onshape).\ *Purpose:* reference geometry and dimensions used in modeling and fabrication documentation. --- ### 2) `Experiments/` — Data collected on hardware & corresponding analysis Organized by task; each task folder contains raw data (`.txt`), precompiled data (`.mat`), and Live Scripts (`.mlx`) that process and plot results. * **`Frequency Response/`** * `MD1X/` and `MD05X/`: Live Scripts compute Bode-like magnitude vs. frequency from circular trajectory runs; subfolders like `MD1X_air_data/` and `MD1X_vacuum_data/` hold trial data with frequency encoded in filenames (e.g., `..._0.2Hz.txt`) from frequency response experiments in air and vacuum respectively. * Top-level comparison scripts (e.g., `MD_Robots_Compare*.mlx`) overlay results across robots/conditions. * **`Trajectory Tracking/`** * `MD1X/`, `MD05X/` with `data/` (TEMA exports such as `..._circle_track_calibrated.txt`) and `trajs/` (reference trajectory generators). * Live Scripts (e.g., `MD1X_Circle.mlx`) load the paired `*_track_calibrated.txt` file, apply pixel→µm conversion, compute accuracy/precision, and plot XY traces. * **`Robot Stiffness/`** * `MD1X/`, `MD05X/`: Simscape models (`*_Stiffness_Model.slx`) and Live Scripts to generate theoretical stiffness curves and validate against experimental voltage–angle tests (`*_voltage_angle_test_data*.txt` / `.mat`). * **`Projectile Launch/`** * `data/` provides `Salt_Position.txt` and `Salt_Velocity.txt` (tracked salt grain position/velocity exported from TEMA software). * `MD1X_Salt_Jump_Plotting.mlx` plots height/velocity versus time and reproduces the figure panel from the paper. *Tip:* If you don’t use MATLAB, the `.txt` files can be analyzed in Python/R following the same steps described in the Live Scripts (load, scale, compute metrics). --- ### 3) `Modeling/` — Models, simulations, and derived calculations * **`MicroDelta Control/`** * `MicroDelta_Controller.ino`: Arduino sketch used to drive actuators during tests. * `MD1X/`, `MD05X/` contain Simscape models (`*_Simscape.slx`), parameter files (`*_Parameters.mlx`), forward kinematics, and Live Scripts for simulation/trajectory following. `trajs/` subfolders provide reference trajectory generators and initial coordinate sets (`*.mat`). * **`Mechanism Stiffness Analysis/`** * Live Scripts produce mechanism stiffness predictions; some runs export `.mat` for validation in `Experiments/Robot Stiffness`. * **`Workspace Analysis/`** * Live Scripts render/compute reachable workspace; `simscape/` holds a Simscape model used for geometry; `trajs/` and `vars/` hold exported workspace point sets (`*.mat`). * **`Calculations/`** * Subfolders such as `response_time/`, `robot_scaling_trends/`, and `salt_jump_forces/` include standalone Live Scripts and input tables (`.csv`) used for supplemental analyses and plots. --- ### 4) `Testing/` — Calibration and measurement quality * **`Calibration/`** * For each robot (`MD1X/`, `MD05X/`), `*_lines_[un]calibrated.txt` provide pre/post-calibration line traces; `*_Lines_Calibration.mlx` computes improvements in tracking accuracy. * **`TEMA Accuracy/`** * Static-tracking tests (`MD1X_tema_uncertainty.txt`, `MD05X_tema_uncertainty.txt`) with Live Scripts (`*_TEMA_Uncertainty.mlx`) that estimate pixel-level measurement uncertainty and propagate to micron-scale units. --- ### **Repository structure** ``` \---microDelta_paper_repository | README.md | +---Experiments | +---Frequency Response | | | (Scripts for frequency response plots comparing both robots) | | | MD_Robots_Compare.mlx | | | MD_Robots_Compare_ErrorBar.mlx | | | MD_Robots_Compare_Single.mlx | | | | | +---MD05X | | | | (MicroDelta-0.5X frequency response analysis scripts) | | | | MD05X_bode_circle_traj.mlx | | | | MD05X_Bode_Plot_Data.mlx | | | | | | | \---MD05X_air_data | | | (Raw data for microDelta-0.5X frequency response in air) | | | MD05X_bode_data.mat | | | smallermicrodelta_0.2Hz.txt (Raw data) | | | ... (Additional frequency data files) | | | | | \---MD1X | | | (Scripts for frequency response analysis) | | | MD1X_Bode_Plot_Compare_Vacuum.mlx | | | MD1X_Bode_Plot_Compare_Vacuum_ErrorBar.mlx | | | MD1X_Bode_Plot_Data.mlx | | | MD1X_Bode_Plot_Data_Vacuum.mlx | | | | | +---MD1X_air_data | | | (Data and reference trajectory) | | | circle_pattern.mlx | | | MD1X_Bode_Data.mat | | | LP2_freq_smaller_radius_0.2Hz.txt (Raw data) | | | ... (Additional frequency data files) | | | | | \---MD1X_vacuum_data | | (Data and reference trajectory) | | circle_pattern.mlx | | MD1X_bode_data_vacuum.mat | | MicroDelta_Regular_LP4_0.2Hz.txt | | ... (Additional vacuum frequency data files) | | | +---Projectile Launch | | | (Scripts for plotting salt jump data) | | | importfile.m (Helper function) | | | MD1X_Salt_Jump_Plotting.mlx | | | Salt_Jump_Apex.jpg | | | | | \---data | | (Raw data for salt trajectory tracking) | | Salt_Position.txt | | Salt_Velocity.txt | | | +---Robot Stiffness | | +---MD05X | | | (Scripts and data for stiffness modeling and validation) | | | MD05X_Stiffness_Model.slx (Simscape model) | | | MD05X_Stiffness_Model_Data.mlx | | | MD05X_Stiffness_Test_Data.mlx | | | MD05X_Stiffness_Validation.mlx (Plotting script) | | | MD05X_voltage_angle_model_data.mat | | | MD05X_voltage_angle_test_data.mat | | | MD05X_voltage_angle_test_data.txt (Raw data) | | | | | \---MD1X | | (Scripts and data for stiffness modeling and validation) | | MD1X_Stiffness_Model.slx | | MD1X_Stiffness_Model_Data.mlx | | MD1X_Stiffness_Validation.mlx (Plotting script) | | MD1X_voltage_angle_model_data.mat | | MD1X_voltage_angle_test_data_inner.txt (Raw data) | | MD1X_voltage_angle_test_data_outer.txt (Raw data) | | MD1_Parameters.mlx | | | \---Trajectory Tracking | +---MD05X | | | (Scripts for trajectory tracking analysis) | | | distToSeg.m (Helper function) | | | MD05X_Asterisk.mlx | | | MD05X_Circle.mlx | | | MD05X_Star.mlx | | | MD05X_Workspace_Horizontal.mlx | | | MD05X_Workspace_Vertical.mlx | | | | | +---data | | | (Raw trajectory tracking data) | | | MD05X_asterisk_track_calibrated.txt | | | MD05X_circle_track_calibrated.txt | | | MD05X_star_track_calibrated.txt | | | MD05X_workspace_horiz_calibrated.txt | | | MD05X_workspace_vert_calibrated.txt | | | | | \---trajs | | (Reference trajectory generation scripts) | | circle_traj.mlx | | line_traj.mlx | | star_traj.mlx | | workspace_traj_horiz.mlx | | workspace_traj_horiz_points.mat | | workspace_traj_vert.mlx | | workspace_traj_vert_points.mat | | | \---MD1X | | (Scripts for trajectory tracking analysis) | | distToSeg.m (Helper function) | | MD1X_Asterisk.mlx | | MD1X_Circle.mlx | | MD1X_Star.mlx | | MD1X_Workspace_Horizontal.mlx | | MD1X_Workspace_Vertical.mlx | | | +---data | | (Raw trajectory tracking data) | | MD1X_asterisk_track_calibrated.txt | | MD1X_circle_track_calibrated.txt | | MD1X_star_track_calibrated.txt | | MD1X_workspace_horiz_calibrated.txt | | MD1X_workspace_vert_calibrated.txt | | | \---trajs | (Reference trajectory generation scripts) | circle_traj.mlx | line_traj.mlx | star_traj.mlx | workspace_traj_horiz.mlx | workspace_traj_horiz_points.mat | workspace_traj_vert.mlx | workspace_traj_vert_points.mat | +---Modeling | +---Calculations | | | (Calculation scripts for analyzing scaling trends and capacitance) | | | microDelta_capacitance_approx.mlx | | | microDelta_scaling_calculations.mlx | | | | | +---response_time | | | (Script for calculating system response time) | | | response_time.mlx | | | | | +---robot_scaling_trends | | | (Data and scripts for analyzing scaling trends) | | | microDelta comparison - Sheet1.csv (Compiled data from literature) | | | size_trend_plot.mlx | | | | | \---salt_jump_forces | | (Scripts for calculating salt jump forces) | | salt_jump_calc.mlx | | | +---Mechanism Stiffness Analysis | | (Scripts for mechanism stiffness modeling) | | MD1X_Mechanism_Stiffness_Model.mlx | | MD1X_Model_Stiffness.mat | | | +---MicroDelta Control | | | (Arduino code for MicroDelta control) | | | MicroDelta_Controller.ino | | | | | +---MD05X | | | | (Scripts for MicroDelta-0.5X modeling and simulation) | | | | actuator_voltage.csv | | | | arduino_line.txt | | | | MD05X_Forward_Kinematics.mlx | | | | MD05X_Parameters.mlx | | | | MD05X_Simscape.slx (Simscape model) | | | | MD05X_Simulation_and_Modeling.mlx | | | | MD05X_Sine_Approximator.mlx | | | | | | | \---trajs | | | (Reference trajectory generation scripts) | | | circle_pattern.mlx | | | heart_pattern.mlx | | | line_pattern.mlx | | | spiral_pattern.mlx | | | star_pattern.mlx | | | triangle_pattern.mlx | | | vertical_pattern.mlx | | | x0_coords.mat | | | x0_coords_xy.mat | | | | | \---MD1X | | | (Scripts for MicroDelta-1X modeling and simulation) | | | actuator_voltage.csv | | | arduino_line.txt | | | MD1X_Forward_Kinematics.mlx | | | MD1X_Parameters.mlx | | | MD1X_Simscape.slx (Simscape model) | | | MD1X_Simulation_and_Modeling.mlx | | | MD1X_Sine_Approximator.mlx | | | | | \---trajs | | (Reference trajectory generation scripts) | | circle_pattern.mlx | | heart_pattern.mlx | | line_pattern.mlx | | spiral_pattern.mlx | | star_pattern.mlx | | triangle_pattern.mlx | | vertical_pattern.mlx | | workspace_pattern.mlx | | workspace_pattern_xy.mlx | | x0_coords.mat | | x0_coords_xy.mat | | | \---Workspace Analysis | | (Scripts for workspace analysis and rendering) | | MD05X_Parameters.mlx | | MD05X_Workspace_Points_Generate.mlx | | MD05X_Workspace_Render.mlx | | MD1X_Workspace_Render.mlx | | | +---simscape | | (Simscape model) | | MD05X_Simscape.slx | | | +---trajs | | | (Export of workspace coordinates) | | | MD05X_x0_coords.mat | | | | | +---MD05X | | | (Reference trajectory generation scripts) | | | MD05X_workspace_pattern.mlx | | | MD05X_workspace_pattern_xy.mlx | | | MD05X_x0_coords.mat | | | MD05X_x0_coords_xy.mat | | | | | \---MD1X | | (Reference trajectory generation scripts) | | MD1X_workspace_pattern.mlx | | MD1X_workspace_pattern_xy.mlx | | MD1X_x0_coords.mat | | MD1X_x0_coords_xy.mat | | | \---vars | (Exported workspace coordinates) | MD05X_workspace_coords.mat | +---Testing | +---Calibration | | +---MD05X | | | (Scripts and data for calibration plots) | | | MD05X_lines_calibrated.txt (Raw data) | | | MD05X_Lines_Calibration.mlx | | | MD05X_lines_uncalibrated.txt (Raw data) | | | MD05X_line_pattern.mlx | | | | | \---MD1X | | (Scripts and data for calibration plots) | | MD1X_lines_calibrated.txt (Raw data) | | MD1X_Lines_Calibration.mlx | | MD1X_lines_uncalibrated.txt (Raw data) | | MD1X_line_pattern.mlx | | | \---TEMA Accuracy | (Scripts for Analyzing TEMA tracking uncertainty) | MD01X_TEMA_Uncertainty.mlx | MD05X_TEMA_Uncertainty.mlx | MD05X_tema_uncertainty.txt (Raw data) | MD1X_tema_uncertainty.txt (Raw data) | total_uncertainty_calc.mlx | \---Design (CAD files for microDelta robots) MD05X_Robot.SLDPRT MD1X_Robot.SLDPRT ``` --- ## Reproducing figures at a glance 1. Pick a task (e.g., **Experiments → Frequency Response → MD1X**). 2. Open the corresponding Live Script (e.g., `MD1X_Bode_Plot_Data.mlx`) in MATLAB. 3. Run the script; it loads the raw data in the same folder, processes it, and produces the plots shown in the paper. 4. Use the top-level comparison scripts in `Experiments/Frequency Response/` to overlay robots/conditions. &gt; **MATLAB/Toolboxes.** Live Scripts use base MATLAB; analyses that call Simscape require the **Simscape Multibody** toolbox for `.slx` models. GNU Octave can run many `.m` helpers, but `.mlx` and `.slx` require MATLAB. --- ## Provenance & citation * **How to cite the dataset:** Man, Kim, & Bergbreiter (2025). *The microDelta: downscaling robot mechanisms enables ultra-fast and high precision movement*. Dryad. DOI: 10.5061/dryad.7pvmcvf56. * **How to cite the article:** Please cite the Science Robotics paper when using data, models, or scripts. **Correspondence:** [sbergbre@andrew.cmu.edu](mailto:sbergbre@andrew.cmu.edu) ---