Final Project: Semi-Randomized Path for Clay 3D Printing
For this project, I wanted to develop an algorithm to generate a randomized path for a clay 3D printer to follow. I thought this project was interesting because downward moves are generally avoided for 3D printing to prevent tool-head collision with the part, but I wanted to challenge this rule of thumb. I had the path traverse a set of points in a cylinder, and I used this to make a vase. I hadn't seen anyone else do something like this in the clay 3d printing space, so it was cool to do something completely new.
Supplies
Rhino
MATLAB
Potterbot
Glaze
Step 1: Cylinder Points Setup
In Grasshopper, I created a cylinder and subdivided it to generate the points. I initially tried to write the pathfinding algorithm in Python within Grasshopper, but I am more comfortable using MATLAB. To accommodate this, I streamed the contents of the cylinder points to a CSV file that MATLAB would reference.
Step 2: Initial Path Rules
I sketched out what the path could look like in 2D and came up with the following rules:
Must be one continuous path
There cannot be more than 3 semi-completed layers along the z-axis (3 is a guess)
The next point must already have clay (or the build plate) beneath it
The 3 semi-completed layer rule ensures that unfilled points towards the bottom of the print aren't left behind and that the nozzle won't plunge into the print.
Step 3: MATLAB Implementation
The MATLAB code imports the CSV of cylindrical points, rearranges the points according to the rules I define, and outputs the path as a CSV which is imported back into Grasshopper. I am most comfortable coding in MATLAB, and because this project was very code-intensive, I found that it was faster for me to use MATLAB rather than use a Python node directly in Grasshopper.
Step 4: First Path & Visualization
The initial rules produced the path as seen in the image on the left. I visualized the path in Grasshopper by sweeping a circle along the path.
This was a poorly defined set of rules because the path would typically fail within the first 3 layers due to the limit of 3 semi-completed layers. I had to generate many paths to find one that completed the cylinder.
Step 5: Path Rules II
At this point, I met with my classmate to brainstorm how to improve the rules for 3D printing, and we determined that the path should start off with a few planar layers before starting the randomized path to establish good print bed adhesion at the beginning of the print. She also suggested implementing continuous layers above the randomized layers if I couldn't generate a complete path. I implemented this later.
The new rules are as follows:
Must be one continuous path
There cannot be more than 3 semi-completed layers along the z-axis
The next point must already have clay (or the build plate) beneath it
No vertically upward moves
First 5 layers are continuous
The restriction of vertically upward moves helps keep the path moving along the cylinder rather than failing the 3 layer rule quickly. This did help, but the path still failed pretty early.
Step 6: Print 1
I converted the path from a CSV file to GCode for the Potterbot within Grasshopper and ran the print. The feed rate was too fast on the first print, so I slowed it down to 0.5x speed, and this produced a useful result. There weren't enough layers of the randomized path to see what the path would look like in clay, so my next step was to improve the length of the randomized path.
Step 7: Path Rules III
New rules:
Must be one continuous path
There cannot be more than 3 semi-completed layers along the z-axis
The next point must already have clay (or the build plate) beneath it
No vertically upward moves
First 5 layers are continuous
Move diagonally downward whenever possible
The 3 semi-completed layer restriction was the limiting factor in the path length, and I noticed there was enough clearance with the nozzle to move diagonally downward more than 3 layers. With these observations, I redefined that rule so that the path would move diagonally downward whenever it had the option to. This allowed for mostly complete paths that only failed at the top of the cylinder.
Step 8: Print 2
This print was a great proof of concept, it successfully printed the complete path. It looks much more organic than I imagined, almost woven. With the success of this print, I decided I wanted to make a vase with this technique which required adding a base and implementing a continuous path on the top to make it look finished.
Step 9: Print 3
I implemented the base and continuous top path to the MATLAB code and made a small test print. The test print was successful and gave me the confidence to move forward with the large vase.
Step 10: Print 4
The final vase has an 80mm diameter and a 200mm height (though it shrinks in the kiln). The print was successful and took 40 minutes.
Step 11: Glazing & Conclusion
I applied colored underglaze and transparent glaze to my prints. The prints were porous before the glaze, but the glaze filled in the cracks and they are watertight now. I'm very happy with how this project turned out. It's hard to tell how the randomized path portion of the vase was made (it doesn't look 3d printed, but seems tedious to do by hand) which is my favorite part of this piece.