Under the Hood: Fab@Home Software
The community has done a great job developing software for the Model 1. Unfortunately, the Model 2 is not compatible with Model 1 software due to the new machine's motor types and new low-level libraries (provided by the motor manufacturer). Two Cornell undergraduates during the Spring of 2009 tried to integrate the new Model 2 machine with the Model 1 software, but met difficulties integrating the new machine's libraries with the Model 1 software.
In order to roll out the Model 2, we had to think about writing new code and it served as a natural point to reflect on the software platform as a whole. Some things on the wishlist included increased software modularity, support for solenoids/steppers/dc motors+encoders, importing more than just STLs, and easily sharing print jobs between users (see Dan's post on the App Model).
So far, I've been working with a team of six other Cornell CS students to think about the design of the software's second edition. We have separated the code into three major areas: core library, printer-driver, and "FabApps." The first two stem directly from the current Model 1 software implementation: core library code (algorithms and data structures for printing) and a printer-driver (hardware communication). For these libraries, most of the functionality stays the same as the Model 1 software but it's reformed to work on the cross-platform Qt framework and be much more modular. This will allow any part of the process to be rewritten without affecting the others, and it makes the code itself more developer-friendly. Also, rather than having tools and materials be defined together in static files, we imagine having a Qt Script which will dynamically manage the print sequence depending on the particular tool and material. This will allow for novel control parameters such as temperature, pressure and any future desired control element that the user wishes to add.
The third component is brand new. "FabApps" (see Dan's post on the App Model) are easily sharable bundled print jobs. The idea is that rather than requiring all users to know CAD and understand the full inner-workings of Fab@Home, they could simply download a FabApp (in an iPhone-esque manner) and gain utility without technical skill. We are developing this third software component to support the creation and execution of FabApps. We envision community members sharing their work through FabApps, and we would like them to be able to do so without needing to have advanced programming experience. That's why we are creating a FabApp Maker. The FabAppMaker is a GUI-based wizard-like program that allows you select meshes, adjust application settings (like the title-bar name, splash page, about box) and add custom tools then package everything into one single cross-platform file which can be shared with others. We will also release a GUI-based program that is very similar to the Model 1 software -- we are calling this the FabStudio, which advanced users can employ for a more traditional 3d printing workflow.
This is a new and very exciting extension of the Fab@Home that could bring 3d printing even closer to becoming a common household tool. We are still in the very early stages of development, and any ideas or suggestions are welcome.