Skip to content

Instantly share code, notes, and snippets.

@ryaninvents
Last active August 29, 2015 14:16
Show Gist options
  • Save ryaninvents/c452aec398a7903c2e70 to your computer and use it in GitHub Desktop.
Save ryaninvents/c452aec398a7903c2e70 to your computer and use it in GitHub Desktop.
DOT diagram for calibration flow

This messy graph represents the high-level workflow for calibrating a Rostock-style delta 3D printer.

digraph analysis {
node [shape=plaintext];
size = "7.5,10";
weight = 10;
label="Assume points where x=0, y=0 to be calibrated via steps_per_mm. We can then\nmove the print head in Z being fully confident that it's moving the amount\nwe expect and in the direction we expect.";
Start [fillcolor=black,shape=box,style=rounded];
subgraph clusterCalib {
label="about 10 to 12 times";
SnapOriented [shape=box,label="camera snap\n(oriented standard)",style=filled];
SingleOriented [label="single oriented standard"];
}
InitialParameters [label="initial (guessed)\nparameters"];
CurrentParameters [label="current parameters"];
InitialUpload [label="upload to bot",shape=box,style=filled];
Intrinsic [label="camera intrinsic matrix",shape=box,style=bold];
Extrinsic [label="camera extrinsic matrix", shape=box,style=bold];
Start -> InitialParameters -> InitialUpload -> CurrentParameters -> Position1 ->
Laser1 -> LaserSnap1 -> SingleLaserImg ->
LaserUV1 -> LaserXYZ1;
subgraph clusterZHead {
label="for each planned z_head";
Position1 [label="position print head at\n(0,0,z_head)",shape=box,style=filled];
subgraph clusterLaser1 {
label="for each laser";
Laser1 [label="laser fire",shape=box,style=filled];
LaserSnap1 [label="camera snap", shape=box,style=filled];
SingleLaserImg [label="single laser image"];
LaserUV1 [label="laser spot (u,v)"];
LaserXYZ1 [label="laser spot (x,y,z)"];
}
LaserSpots1 [label="laser spots (x, y, z)\nsharing z_head"];
}
Intrinsic -> LaserXYZ1;
Extrinsic -> LaserXYZ1;
"camera snap (flat standard)" -> "single flat standard" -> Extrinsic;
SnapOriented-> SingleOriented -> Intrinsic ;
LaserXYZ1 -> LaserSpots1;
EPos[label="relative emitter orientations\nand positions on platform", shape=box, style=bold];
LaserSpots1-> EPos;
subgraph clusterXYHead {
label="for each planned (x_pred,y_pred,z_pred)\nprint head location";
Position2 [label="position print head at\n(x_pred,y_pred,z_pred)",shape=box,style=filled];
subgraph clusterLaser2 {
label="for each laser";
Laser2 [label="laser fire", shape=box, style=filled];
LaserCam2 [label="camera snap",style=filled,shape=box];
LaserImg2 [label="single laser image"];
LaserUV2 [label="laser spot (u,v)"];
LaserXYZ2 [label="laser spot (x,y,z)"];
}
LaserSpots2 [label="laser spots (x,y,z)\nsharing (x_pred, y_pred, z_pred)"];
RelativePrintHead [label="predicted and actual\nprint head location"];
}
Position2 -> Laser2 -> LaserCam2 -> LaserImg2 -> LaserUV2 -> LaserXYZ2 -> LaserSpots2;
Intrinsic -> LaserXYZ2;
Extrinsic -> LaserXYZ2;
EPos -> RelativePrintHead;
LaserSpots2 -> RelativePrintHead;
Newton [label="Newton optimization"];
RelativePrintHead -> Newton;
CurrentParameters -> Newton;
Newton -> "corrected parameters" ;
}
<body style="height:100%;overflow-y:scroll;"><img src="flow.png" style="width:100%;"></body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment