OpenBuilds Ox CNC Router


Contributors: Jesse Jenkins, Candace Hazelwood, Steven Fan, Richard Cawley

Visit our Services page if you’d like something routed for you.


A 3-axis flying gantry (4’x4′) mechanical kit is assembled. A 3D printer is used to make cable chain for tidy and cheap wire management. A BeagleBone Black development platform with Machinekit software (LinuxCNC) is configured to control a Xylotex motor driver box connected to an Openbuilds Ox direct-drive pulley and belt motion system. A vacuum dust-collection system is designed, CNC-routed and installed. A steel table is made to mount the table onto.

Parts list

An up-to-date parts list is here


We purchased a 1500mm x 1500mm Openbuilds Ox mechanical kit from Ooznest in the UK. This kit contains all of the metal plates, bearings, wheels, extrusions, tee nuts, screws and other misc. hardware for the CNC flying gantry machine. We bought the stepper motors, the stepper motor drivers, and the stepper motor power supplies as an integrated package from Xylotex. Note: This package comes with stronger motors than what would have come in the Ooznest mechanical kit. The Xylotex stepper motors are dual output shaft (so that encoders can be added later). They are rated at 40V and 425 oz-in of torque when wired in parallel. The Xylotex stepper drivers are 1/16th microstepping for micron-level resolution.

For control electronics we purchased a BeagleBone Black (BBB) with the Xylotex DB25/LD26 cape and the Xylotex DB25 breakout board (BOB). The BOB is hooked up to the emergency stop button, three mechanical endstops (one for each axis) also purchased from Xylotex, and 5V power for logic pull-up.

The most recent version of the Machinekit (LinuxCNC) software package was obtained from github for free. The configuration files for the LinuxCNC software was pieced together from xylotex.ini and xylotex.hal and comet.ini and comet.hal obtained from github for free. Our customized Xylotex.INI and Xylotex.HAL files for the openbuilds ox can be found on github here for free.

The spoiler board is 49″ x 49″ x 3/4″ MDF drilled and bolted into the frame extrusions using M5 x 20 mm flat head socket headed cap screws and tee nuts. We 3d-printed the cable chains (e-chains) using orange PLA obtained from Hatchbox using a MOST Delta 3D printer, the files for the cable chain can be found on thingiverse. We used a Ryobi router I had sitting around in the shed. We modified a spindle mount to clear the z-axis screws that came with a 3kW water-cooled spindle package we purchased from to mount our Ryobi router to the gantry. The dust collection system was designed and fabricated using the functional CNC router. Flexible conveyor belt brushes were purchased from McMaster-Carr to use for the dust shoe.

Build Pictures:

Build Notes:

Configuring Electronics for CNC router

Setup: BeagleBone Black with a DB25/26 cape from Xylotex and Breakout Board from xylotex (BOB)

Flashing Machinekit (LinuxCNC and peripherals) onto a MicroSD card

  1. go to for instructions
  2. Download the MOST RECENT version of machine kit as SD boot version. (or an eMMC flasher version if you can find it…I didn’t)

  3. Extract the xz file with The Unarchiver (for MacOSx) to create a .img file from the img.xz file
  4. Use Pifiller (for MacOSx) to burn the img file to a microSD card. I used a kingston 8GB microSDHC.
  5. Follow insructions on

To burn the SD to the eMMC BBB flash memory.

  1. I used the tutorial found here:

Configuring LinuxCNC INI and HAL files

To configure linux CNC, you must edit the INI and HAL files. HAL stands for hardware abstraction layer and is made up of instruction set architectures nonspecific to hardware and OS. The syntax is to come, basically need to read about Hal and ini on

The LinuxCNC integrator Manual

I used this link to calculate steps per inch

I initially tried adding the real-time component to the HAL: Loadrt gantrykins. This component got the two y motors talking to each other but they moved independently as joints (bad). So I asked more questions on the xylotex forum and machinekit forum.

They suggested I look at comet.ini and comet.hal in the most recent machinekit release, (based on suggestion by xylotex forum admin), this resolved some issues I was getting involving axis movement. 

Essentially, to make this concise the HAL needs to label each pin ( either an input or an output) with a name i.e. signal1 and then assign that name a source and a destination. See the HAL section in the linuxcnc manual for more information.

So I used comet.hal and comet.ini as a good starting point. I had to retain the PID functions from the xylotex.hal to satisfy the EMCMOT or PRUCONF modules. Otherwise I would get a following error (see below “errors I got”).

Our most recent updates to the INI and HAL files we created can be found on github here


hpg: stepgen.02.maxvel is too big for current step timings & position-scale, clipping to max possible

Following error –


Do I need to use the velocity-command parameters? Apparently not because I commented out these parameters and the machines works fine.

Problem: The newest release fails at the line  addf estop-latch.0 servo-thread. 

Solution: Used the stock estop code written in the xylotex.hal file.

problem: linuxcnc won’t boot, the machinekit banner pops up but axis never starts and there are no errors or debug page. 

solution: Check to make sure the code doesn’t have any accidental slashes

Errors or Problems with LinuxCNC toolpaths

When I started prototyping the dust collection system I noticed some errors in the pieces (figure 1 and figure 2 below). These errors are in the trajectory planning portion of LinuxCNC. When setting up a machine the tolerance must be specified correctly. The default value for the Xylotex.ini profile is G64 P0.1 Q0.1G64 is continuous mode with specified tolerance, which when the machine units are in inches leads to a very large (0.1″) tolerance.

Production Notes:

We’re using Autodesk Fusion 360 for creating toolpaths. Use the EMC (enhanced machined controller.cps) configuration file for post processing.  I bought a new 1/4″ spiral up cut flat end mill. Making the tool table in AXIS is simple.


Vacuum / Dust-collection System:

Designed to be two pieces that clip together using magnets. I took ideas from people on youtube and several other sources. Drawn up in CAD, the top piece was routed out of 3/4″ plywood, it was faced to 1/2″ followed by a 2D contour with ramping set at 0.3″ at 12 inches per minute (ipm).

The mobile, modular base

With great help from our shopmate Richard Cawley we finished the base onto which the CNC router is mounted. The base is made from 1.5″ square steel tubing and a recycled rolling cart on locking casters. It has storage for several 4’x4′ sheets of plywood, features a pivoting laptop stand, a shelf for the control and motion electronics, and a pivoting dust-collection hose stand.