Grbl is software for controlling the motion of machines that make things. If the maker movement was an industry, Grbl would be the industry standard.
Most MakerBots and open source 3D printers have Grbl in their hearts. It has been adapted for use in hundreds of projects including laser cutters, automatic hand writers, hole drillers, graffiti painters and oddball drawing machines. Due to its performance, simplicity and frugal hardware requirements Grbl has grown into a little open source phenomenon.
When we ordered our first computer controlled mill in 2007 we were stumped as to how we would control it. Common practice at the time was to rescue an ancient beige box PC with a parallell printer port and use that to pulse the stepper motors. That just felt wrong. We wanted a simple embedded system that would talk USB with our laptops.
Choosing a controller
We decided on the Arduino for several reasons. Most importantly it was, and still is, the most popular embedded system in the DIY community. It is a touchingly simple computer. A beautifully simple processor that was actually designed here in Norway.
Yet it is a terrifyingly puny machine in the face of this task. Its 2kb of memory laughable even by early 80s standards. Here you go, a picture of the Arduino with enough bits of 80s phenomenon Billy Idol to completely fill its working memory:
What Grbl has to do in 2kb:
- Parse G-Code, a cryptic computer language hailing from the 50s used to describe the idealised actions of milling machines.
- Build a model of those actions and translate them into a physically possible sequence of motions for the given machine.
- Execute these motions by sending a unwavering stream of concerted high frequency pulses to the stepper motors that are actually moving the tool.
Making it all fit
Getting the Arduino to do this in a robust and timely manner felt exactly like threading your run of the mill camel through the eye of a needle. The planner was especially interesting to design. It is the part that looks at a section of the intended movements and calculates sensible cornering speeds and smooth accelleration profiles to ensure accurate operation within the realm of the physically possible. It took us almost a year of tinkering and toying around in C and Mathematica to get it right. Our implementation is not theoretically optimal, but it is really good, simple and computationally spartan.
Apart from the home milling enthusiasts using Grbl to control their machines, the code has been adopted and adapted by a myriad of projects. At the time of writing (June 2013) we found over 120 projects on Github built around our planner implementation.
Even Westvang using Grbl to make a kawaii stencil for his daughters ^..^ .
Some projects using Grbl
Synthetos designed and sells the grblShield – an Arduino shield with powerful stepper drivers.
Franklin W. Olin College of Engineering built this awesome hand-writer Herald.
Edward Ford designed and sells the powerful and simple CNC mill Shapeoko. It seems to be the most consistent provider of bona fide Grbl users these days.
University of Queensland designed this compact PCB mill for its students to have a cheap and fast method of prototyping printed circuit boards for team projects and other research based projects.
Building from our planner, Emmanuel Gilloz got his 3D printer to move at unprecedented speeds. So much so that his YouTube viewership accused him of speeding the video up.
The 3D-printer firmware Sailfish incorporates our planner and was the official firmware for Makerbots until they lost their way and went closed source. (Our licence precludes integration into closed source projects.)
The very popular and malleable 3D-printer firmware Marlin uses Grbl for motion control.
Supercolluder for the gig economy
Machine learning in search of the uncanny
Simple surface, intricate clockwork
Own a small slice of Norway
Efficient text input for mobile and wearable devices
Friendly community for the Norwegian cultural fringe.
Laser sintered topological maps for cars and social scientists
Helping liberate Norwegian geodata