Introduction: Swarmscapers: Autonomous Mobile 3D Printing Robots
Swarmscapers is a 2 month long research project conducted in the Creative Architecture Machines studio, taught by Jason Kelly Johnson and Michael Shiloh at California College of the Arts in the Digital Craft Lab. It is a collaboration between Clayton Muhleman, Alan Cation, and Adithi Satish. A huge impetus behind the CAM studio as a whole is questioning what happens when architects become innovators of their own technological tools rather than mere users of prepackaged CAD suites and fabrication machines designed by engineers. No one on our team has a background in engineering or electronics, and this is not about architects trying to become engineers and optimize existing technologies. Rather, the studio questions what kind of creative potential architectural designers inventing their own machines can unlock, and speculates what broader socio-cultural ideas arise from architecture that is fabricated by these machines.
Swarmscapers explores the potential of an autonomous swarm of robots capable of operating independently in hostile environments. Utilizing on-site materials to create inhabitable structures, the robotic swarm's behavior materializes through a slow and constant process of layered 3d-printing. This projects the architectural potential of emerging robotic and fabrication technologies through a bottom-up rule-based system. Each unit within the robotic swarm acts as an individual agent embedded with a specific rule-set that drives its behavior and allows it to coordinate with other agents in the system. These agents 3d print large, architectural structures that calcify and emerge from the landscape where the impetus for structure is to develop future encampments in extreme environments, places where humans could not otherwise build. Extreme heat and the abundance of raw materials in the desert make it an ideal testing bed for the robotic swarm to operate, creating emergent seed buildings for future habitations that are ready for human occupancy over the course of multiple decades.
In order to test this wider vision, we established a laboratory-like setting focused on using at least one mobile robot to 3d print scaled objects within a 48" x 48" x 20" build volume. There were 2 major constants within our larger concept that allowed us to focus our research and achieve our goal in a 2 month time frame, which were to create a gantry-less mobile powder bed and inkjet head 3d printer (the specific technology of a Z Corp 3d printer), and to utilize on-site granular materials as building materials. It was important for our machine to remain gantry-less and mobile because it implies that multiple machines will one day be able to autonomously 3d print entire buildings, and it implies that these printers are relatively small compared to the buildings they are 3d printing. The advantages to using powder bed and inkjet head 3d printing as a technology, is that it allows us to print without scaffolding and create highly intricate shapes, and it allows us to reuse the leftover materials so that there is a minimal amount of waste during construction. In addition, our method can work with almost any granular material including sand, rice, semolina, salt, and sawdust. Since it is important to use materials found on site, we conducted our larger 3d prints in sawdust because CCA generates 6 dumpsters full of sawdust per week. Sawdust is abundant and it is extremely lightweight, making it an ideal material for us to test. The robot works by driving on top of the sawdust based on a tool-path defined in the computer, and dropping a binding agent on the material, hardening it in place. It does this repeatedly, layer by layer until the object is complete.
Step 1: Outline of Subsequent Steps
It can seem like a complex process in order to start 3d printing with a Swarmscaper, so we are breaking this down into primary steps with sub-steps in between:
1) ROBOT HARDWARE - all of the pieces needed to assemble and wire your Swarmscaper
1.1) Necessary Supplies, Materials and Related Files (Step 2)
1.2) Robot Assembly (Step 3)
1.3) Wiring the Robot (Step 4)
2) ROBOT SOFTWARE - all of the necessary software and programming for the Swarmscaper
2.1) Necessary Software and Related Files (Step 5)
2.2) Making the Programming work (Step 6)
2.3) Making XBEE Work and Other Software Nuances (Step 7)
3) PRINT-BED - all of the pieces needed to assemble the print-bed for the robot to operate within
3.1) Necessary Supplies, Materials, and Related Files (Step 8)
3.2) Construction of the Print-bed (Step 9)
3.3) Material Studies for Possible Construction Materials (Step 10)
4) 3D PRINTING WITH A SWARMSCAPER! (Step 11)
5) POTENTIAL POSSIBILITIES AND NEXT STEPS (Step 12)
The way we are organizing these steps, it is important to look through all of the steps before gathering the supplies to get started. Because there are a lot of supplies, software, and files associated with making this project work, we separated this longer list into multiple steps. For convenience, Look at STEP 2, STEP 5, and STEP 8 for all necessary supplies, software, and files needed to build your own Swarmscaper.
It is also important to note that this project was completed with access to a 3d printer, a laser cutter, and standard wood-shop tools (drills, saws, etc). We used a Flashforge Creator and an Ultimaker 2 for 3d printers, and a Lasercam laser cutter with a 2' x 4' bed size. It is possible to not need to use the laser cutter, however the 3d printers and shop tools are absolutely necessary.
Step 2: Robot: Materials and Plans for Assembly
3D Printable Components
To assemble the parts for the drone, first you'll need access to a 3D printer to print the main parts of the body, the cogs to drive the treads, as well as print the treads themselves. The attached .zip has everything required to print out the parts for the drone. The zip contains a collection of .stl files that you can upload to your 3d printer slicing software of choice. We successfully printed these files on a Creator Flashforge and an Ultimaker 2 while producing the robots, so they should've give you too much trouble. All files were designed to print without scaffolding or rafts.
To fasten the chassis and frame together, you'll need some 8-32 stainless (all metal parts should be stainless, this little robot is going to get very wet and dirty!) all thread, some 1/8" thick nylon washers, locking nuts and 1/4" O.D. Aluminum sleeves to sit over the top of the thread and hold the cogs. Also, make sure you have some zip ties to attach the reservoir to the main frame. Make sure you reference the axonometric drawing for assembly.
The electronics for the swarmscaper drone are comprised of two stacks of electronics. One is a power module that supplies 7volts to the drive motors and the pump motor. We used a combination of some Adafruit LiPo chargers, 2000 maH LiPo batteries and a DC Voltage converter
The second is the control module that controls the motors and communicates to the computer. The control module shield stack is comprised of an Arduino Uno, an Adafruit battery shield & LiPo battery, two X-Bee Series 1's, an X-Bee shield as well as an X-Bee USB adapter so you can control it from your computer, and then your own H-bridge motor controller and Mosfet transistor to control the peristaltic pump. Alternatively, you can pick yourself up a Moto Mama hbridge/xbee shield and save yourself some soldering. That'll replace the Xbee shield and your H-Bridge controller and it comes with an ENORMOUS heat sink, which looks cool!
The motors we like to use are the Fingertech Spark 360:1 geared DC's. Get all that stuff together and you'll be ready to start building your very own mobile, autonomous 3D printer!
Step 3: Robot Assembly
To assemble the robot, take a close look at the attached exploded axonometric drawing. The stainless all thread acts as the major lateral structure, with the axles for the cogs providing rigidity to the tracks. The cog at the front of the track is adjustable in order to get the right amount of slack in the tread assembly. If your treads start binding and clicking too much, just move this cog backwards and you should be rolling smoothly. Note that the DC motors need to be installed in order to support the drive cogs. To keep the drive cogs straight, use a socket screw held in place by a lock nut from the outer track to rest inside the inside of the cog. This will keep the drive cog from bending under load and keep your drone happy.
The only step of preparation required for the 3D printed parts is to make sure you seal your reservoir so it can hold liquids without leaking. We printed all our parts in PLA, which seems to work well with a polyurethane sealer, like this one.
After you have the main frame assembled, the main frame attaches via four zip ties. The reservoir then clips on and all you need to do is attach your electronics and you're ready to print!
Step 4: Wiring the Robot
To wire your robot, assemble the power and control shield stacks onto their constituent frames and then make sure you run the higher voltage power to the pump circuit and into the correct pin on your H-Bridge shield. There's plenty of comprehensive tutorials online on how to make an h-bridge to drive brushless motors out there. Adafruit's always a good source for these kinds of guides. Keep in mind that whatever circuit you use to run your motors, you need to be able to reverse the direction as well as control speed. Here's another Adafruit guide on how to handle a Mosfet.
Now just make sure you're running power and control to the right components and get ready to print!
Step 5: Necessary Software and Related Files
All of the animal themed software that we used to design and program the printer:
Rhinoceros 3D - a 3D modelling program, also known as Rhino
Grasshopper 3D - a visual programming language for Rhino. It is a plug-in we used to generate form as well as command the robot.
Plug-ins to the Plug-in (Grasshopper) necessary for our script to run:
Firefly - used to connect Grasshopper to the arduino for interactive programming
Python Component - used for programming commands to input into Firefly's Uno Write component
Weaverbird - component for mesh subdivision and utilities
Starling - for mesh booleans
Kangaroo - a physics simulator with other useful utilities
All of the non-animal themed software:
Arduino IDE - needed to upload firmata to the arduino board itself
Reactivion - for vision tracking and reading fiducial markers. You can also download fiducial markers from their website.
XCTU - for sending wireless signals from one XBEE to the other.
Step 6: Making the Programming Work
Once all of the plugins and software have been installed, the Grasshopper definition in the previous step should be ready to go.
The script works by a point-to-point method controlled by vision tracking, where it divides a curve into a series of points, and the robot moves from one point to the next in order, depositing binding agent as it goes. Once it reaches the first point, the parastaltic pump is turned on, and the robot starts depositing the binding liquid. A camera picks up the fiducial marker and locates the robot in space (which is in Rhino) based on the recognition of the marker. The fiducial is recognized as a plane in Grasshopper, that is broken down into vector components. These vectors are how the direction and angle of the machine are calculated in order for the robot to be able to move from point to point, drawing the shape that was given.
The first thing to do is get the Arduino loaded with the firefly firmatta so it can run through grasshopper. You will need to open Arduino IDE, go to 'File' and hover over 'Sketchbook'. Click on the file that says 'Firefly Firmatta'. All you need to do for this is go to where it says BAUDRATE and change the number from 115200 to 9600. This will allow wireless communication with the XBEE. Pay attention to which serial port you are using, because it should match the serial port in grasshopper. You need to select the serial port by clicking 'Tools' > 'Serial Port' and select which serial port to use. Make sure that your arduino is hooked up to your computer now, and press the upload button. This is something you only need to do once, then your Arduino is about ready to go.
The important controls of the Grasshopper script are along the left-hand side. The serial port and the Uno Write boolean toggles must be set to true for the script to work. To toggle anything to true or false, simply double click it. To change text, just double click, and to change a number on the number slider, you can either double click and type in a value or you can slide it with your mouse.
For each layer, you will have to change the layer item value on the slider in the green bubble. The proximity tolerance is adjustable, it is how close the robot gets to a point before it triggers the next point. Once the robot reaches Tolerance Angle 1, it slows one of it's wheels to the LOW SPEED value, while the other wheel remains at HIGH SPEED. Once it reaches Tolerance Angle 2, all of the wheels move forward at HIGH SPEED. All of these values can be adjusted, however the the LOW SPEED should never drop below 60, because that is the motor's limit. You could try and drop it lower to see what happens! The divisions of the curve should be at a higher division count for larger curves, and a lower division for smaller curves, you will have to adjust as you go.
The killswitch is there just in case something goes awry. Toggle it to true to turn all systems off. Setting up the XBEE and the Re
Step 7: Making XBEE Work and Reactivision Nuances
The XBEE has to be set up on a server through the XCTU software. You must add a new device and give it a unique registration in order for it to communicate. One XBEE needs to be attached to a USB mini-B to your computer, while the other is hooked up to a shield that plugs into the arduino on the robot. This allows for wireless communication between grasshopper and the Swarmscaper.
Here are a few good links that we looked at in order to set this up properly: http://www.future-cities-lab.net/blog/2012/11/29/x...
As for Reactivision, the software has to be open while everything is running in order for Firefly to read it. If it is not open, the script to control the robot will not work.
It takes a little bit of tinkering in order to make the physical environment match what is happening in the computer. If you press the 'i' key in Reactivision, it will give a menu for flipping the x and y axes of the camera. We found that if we kept the x-axis the same, and inverted the y-axis, then the camera projected information correctly in Grasshopper. However, this may be different with a different webcam. Another thing that we found helpful was to turn our webcam's auto-focus feature off, as it disrupted the camera's ability to read the fiducial marker.
Step 8: Print Bed Box: Necessary Supplies, Materials, and Related Files
This step will require a trip to the lumber yard. Here is the standard lumber and hardware that you need:
8 - 2x4 pieces cut down to 24" each, and 12 - 2x4s cut down to 48" each
1 full 48" x 96" x 3/4" sheet of plywood cut in half to 2 48" x 48" sheets. 1 of these is the base for the print bed, and the other will be cut down and serve as the compression member for the printing process.
5 - 24" x 48" sheets of 1/4" acrylic - 4 will be used as the sliding sides of the print bed, while 1 will be used for the camera mount.
1 box of 100: 3-1/2" deck screws, 1 box of 100: 2" deck screws, and 1 box of 100: 3/4" deck screws
8 - 2-3/8" x 2-3/8" x 9/16" steel angle brackets, and 4 - 2-3/8" x 2-3/8" x 3" steel angle brackets
4 castors that lock in place
4 halogen work lamps - this helps reduce dry time in half by adding heat to the process.
1 large tarp
At least 1 powerful vacuum, such as a shop vac, in which the material can be recycled.
Optional if trying to contain dust: 100 ft of 6 mil polyethylene vapor barrier to construct a containment around the work-space.
Perhaps one of the most important materials: The binding agent!
You will need A LOT of Aleene's Tacky glue. For our prints we used a dilution ratio of 2:1 - 2 parts water and 1 part tacky glue. We recommend buying tacky glue by the gallon on amazon.
You will also need a high definition WEBCAM. We used a standard Logitec with a 1080 x 960 resolution.
Step 9: Construction of the Print-bed
The construction of the print bed is fairly straight forward. It was slightly over-designed to account for 2000 lbs of sand if we decided to go down that route. Refer to the above drawings with the corresponding order of instructions.
8 of the 48" 2x4s should be cut down to 44-1/2". They overlap and stack, and go together like in the second drawing above.
3 of the 48" 2x4s need to be ripped down to 3" wide (as opposed to the actual dim: 3-1/2"). These act as joists for the base floor of the print bed.
The sheet of 48"x48"x3/4" plywood attaches directly on top of these.
For the column frames that the acrylic slides into, these need to be notched down the center at 1" using the table saw with a dado blade set to a little bit larger than 1/4" to account for tolerances. The bottom members are 2x4s that are ripped in half on the table saw, and they are notched to the same specification right down the center.
Once this is together, slot the acrylic pieces in place, and attache the camera mount.
**A spec sheet with further drawings and more information will be added soon in this section**
Step 10: Material Research and Possibilities
Through various studies, we have proven a method for printing with sawdust, and we are confident that any granular material could work with further exploration into different binding agents.
In our experiments, we found that sand works really well, however it takes much longer to fix than sawdust when using polyvinyl acetate as a binding agent because of the layering process. Due to this constraint, we opted for sawdust because it is ready for excavation after 24 hours.
There were 2 primary experiments that we conducted that tested dry time and layering. In the first experiment, we hypothesized that varying the speed of deposition as well as adding heat would yield differing dry times for the materials. Adding heat ended up doubling the dry time for materials, where the heat source was a halogen lamp. Different speeds, however, seemed to have little affect over dry time, despite greater material saturation.
In the layering test we hypothesized that sand would take longer to dry with PVA than sawdust, even though it dries harder and stronger when exposed to air. Our tests proved this to be the case, which made sawdust a much more viable option to continue our printing tests. Sawdust dries without problem when submerged under multiple layers with PVA, while sand needs some exposure to air.
It would be interesting to conduct more of these experiments with different binding agents that might be more suitable to a material such as sand.
Step 11: Printing With a Swarmscaper!
It is important to take safety precautions when working with fine particulates. We recommend wearing safety goggles as well as respirators so you do not inhale the dust particles in the air.
Before putting any material into the bed, we recommend placing a thick sheet of cardboard, foam-core, or plywood down that is slightly smaller than the dimensions of the print bed. This will be the base for the model that is output, and it makes it so that the model can be easily removed without damage.
Due to time constraints, we manually laid the material into the bed with a shovel, and evened it out by hand. The first thing to do here is take the shovel and scoop 2 shovels full of sawdust (or another granular material you are trying) into the bed. The amount of scoops required per layer may be tweaked and varied, we just found that 2 scoops worked well for what we were doing. Smooth out the sawdust top layer by hand.
The next important step is to compress the sawdust. We took a 24" x 46" x 3/4" piece of plywood, placed it in the bed, and then stood on it in order to compress it. This allows for the robot to be able to drive on top of the sawdust with little trouble.
These things need to be repeated for every single layer. And don't worry, the compression step does not harm the print! It in fact helps the glue bind to the sawdust more efficiently.
Now, you need to fill the robot's hopper with the 2:1 glue/water solution, and place it in the print bed. It is best to place it as close to the first point in grasshopper/rhino as possible. This is mainly due to some known bugs in our script that could screw a few things up. Try to get it in line with the direction that the bot will be driving, and do not touch the point exactly. Make sure that all of the batteries are charged, and turn on the switch for the robot to start.
In Grasshopper, Make sure everything is aligned correctly, and make sure that the log has been reset and is triggered to false. This must be reset for every single layer. Turn on the Uno Write and Open Port by turning them to True. These can be left toggled to true for the remainder of the time you print.
Make sure that the halogen lamps are turned on. These add heat to the print, which we found to help double drying time.
Time to watch the Swamscaper go! It will travel from point to point until it reaches the last point, and everything will turn off (except for the electronics of course, you will need to switch this off).
Remove the robot, and repeat laying the material and everything else mentioned above. Just dump 2 more scoops of sawdust on top of the last layer.
For excavation, we waited at least 24 hours before we touched the print. If there was a more efficient and quickly drying binding agent used, this wait time could be reduced. To excavate, we removed the acrylic walls of the print-bed and let the sawdust surrounding the object spill out onto a tarp. We then carefully took the vacuum and vacuumed around the object and in it until all of the excess dust was removed.
It is possible to strengthen the object with a spray adhesive or lacquer after the object is finished.
Step 12: Project Potential Among Possibilities for Advancement
We believe that the potential of Autonomous Mobile 3d printing is enormous, and with enough time and research, that this is a viable method for 3d printing actual buildings in the future. There is of course, much more work to be done.
The concept of autonomous machines constructing architecture in bottom up ways will require a huge amount of research into sensory systems, communication systems, advanced machine vision, as well as machine learning. We are also grappling with ideas of materiality and scalability. We theorize that this method is immediately scalable, and it could be achieved by multiple species of robots working together in order to build. One type would lay granular material on the ground, while another type deposits binding agent, and another excavates. This alone is charged with a lot of research work to be done.
Some things we are immediately considering in order to move this project forward, is to advance the scale of the print size, work on automatically laying material, further advancing material potentials, and utilizing a more robust binding agent. We would also like to work on having multiple machines work together for collaborative construction. We think that this would require a more robust form of machine vision, and we may look into other ways of tracking location instead of fiducial markers.
We are excited to continue this research, and further develop the autonomous swarm of mobile 3d printing robots.