Cadmiral removes traditional CNC constraints.

Simple CAD through custom CAM.

The Problem

Parts are typically made by modelling an object (CAD), converting the model to high-level commands (G-Code CAM), then converting the high-level commands to movement (CNC).

This restricts the machine to only movements that can be expressed as G-Code. G-Code is very simple (for great portability), allowing only straight lines and circles. Any other shapes (beziers, ellipses, complex contours, etc.) must be approximated using a verbose sequence of small lines and circles.

In addition to only approximating the desired design via G-Code, hobby CNC machines are often controlled by low power hardware that can't process the large quantities of G-Code in realtime. This further reduces accuracy, as approximations must be simplified to maintain smooth, pause-free movement.

The Solution

With fixed hardware, the only way to increase operation complexity is to reduce the processing required per step. Cadmiral accomplishes this by using intimate knowledge of the target machine to convert CAD models to CPU instructions. Because the entire CNC operation is now a simple sequence of CPU instructions, the computation during live machining is minimal: there is no network or disk I/O to read G-Code, no text parsing, no complex scheduling, and no guessing how many commands to buffer to avoid stalls.

Cadmiral can also produce more accurate results. Rather than approximating a design as G-Code, then approximating G-Code with movement instructions, Cadmiral performs a single conversion from model to movement.

From a user's point of view, machining is still carried out by simply sending the desired operation to the machine via network, SD, or serial. In a traditional configuration, the operation is a G-Code document that the machine attempts to parse, convert to movement, and schedule buffers, in realtime. Using Cadmiral, the operation is new firmware that can only perform the desired operation (with great efficiency).


Cadmiral is an ongoing hobby endeavor, and does not yet have a commercial release. Thus far, firmware generation works, and supports a wide variety of input shapes. The only supported output is ARMv7 instructions for stepper motors arranged in cartesian coordinates, driven by GPIO pins.