Carpentry Compiler helps woodworkers design objects that they can actually make
As the holidays approach, people might be thinking of neat do-it-yourself woodworking projects to give as gifts. But there's often a disconnect between designing an object and coming up with the best way to make it.
Now researchers at the University of Washington have created Carpentry Compiler, a digital tool that allows users to design woodworking projects. Once a project is designed, the tool creates optimized fabrication instructions based on the materials and equipment a user has available. The team presented this research Nov. 19 at SIGGRAPH Asia in Brisbane, Australia.
"To make a good design, you need to think about how it will be made," said senior author Adriana Schulz, an assistant professor in the Paul G. Allen School of Computer Science & Engineering. "Then we have this very difficult problem of optimizing the fabrication instructions while we are also optimizing the design. But if you think of both design and fabrication as programs, you can use methods from programming languages to solve problems in carpentry, which is really cool."
For Carpentry Compiler, the researchers created a system called Hardware Extensible Languages for Manufacturing, or HELM. HELM is composed of two different programming languages: a high-level language for designing an object, and then a low-level language for the fabrication instructions.
"Say I want to make a piece of wood that's cut at a 45-degree angle," Schulz said. "In the design user interface, I create a box and then I draw a line where I want the cut to be and tell the computer 'Remove this part.' That's the high-level language. Then the low-level language says 'Take a two-by-four, take your chop saw, set up your chop saw for a 45-degree angle, align the lumber to your chop saw and chop.'"
As the user designs an object using the high-level language, which looks similar to standard CAD software, a compiler verifies that the design is possible based on what tools and materials the user has specified they have. Once the user is finished designing, the compiler comes up with a set of optimal fabrication instructions based on different costs.
"If you want to make a bookcase, it will give you multiple plans to make it," Schulz said. "One might use less material. Another one might be more precise because it uses a more precise tool. And a third one is faster, but it uses more material. All these plans make the same bookcase, but they are not identical in terms of cost. These are examples of tradeoffs that a designer could explore."
The compiler has to sift through a huge space of possible combinations of instructions to find the best ones. But if it treats fabrication instructions like a program, then it can use programming tricks to simplify its search and select promising candidates.
"One program might have a good way to make the edge of the table; another one finds a good way to make the legs," said co-author Zachary Tatlock, an associate professor in the Allen School. "And we can find those and recombine them to make the best overall plan."
Currently Carpentry Compiler is optimizing fabrication plans based on fabrication time and precision. In the future, the team would like it to take into account grain orientation and uncertainty in using specific types of tools. From there, the team hopes to expand this idea to more complex projects—such as a project that requires woodworking and 3-D printing.
"The future of manufacturing is about being able to create diverse, customizable high-performing parts," Schulz said. "Previous revolutions have been about productivity mostly. But now it's about what we can make. And who can make it."
More information: Chenming Wu et al, Carpentry compiler, ACM Transactions on Graphics (2019). DOI: 10.1145/3355089.3356518