The idea is to use various two axis plates as builders. The most basic configuration will be to put two corexy's as the walls, allowing for a 4th axis by rotating the bed.

However, what I would really love, is a pseudo 5-axis configuration.

Aluminum CoreXY

Laser cut components that allows for end effector mounting, x and y gantry movement, and the holding of the aluminum rods. I then waterjet aluminum to create the entire base and the x and y pieces.

The x and y pieces are hot glued to bushings on the aluminum rods. The belts are held onto the gantry by using teeth and using an acrylic square to squish the teeth together. The gantry itself is moved with two stepper motors in an hbot configuration. The plastic pulleys keep the belt in tension and move the gantry accordingly.


The corexy uses the following dynamics to determine how much each motor should move to translate rotation of the stepper motors into the x y coordinate system. The image below is from Ilans page (
Therefore, the forward matrix (A,B to X,Y) is [0.5, 0.5 ; 0.5 -0.5].
The reverse matrix (X,Y to A,B) is [1, 1; 1, -1]

Using gestalt, I created a Virtual Machine for CoreXY^2. The code is similar to example virtual machines, except that stepper motors are initiated as pulleys in initKinematics(), and their rotations are translated into x and y coordinates based on the matrix above.

def initKinematics(self):
    # drive components of h-bot. Inputs are A/B stepper motors, outputs are X/Y in machine coordinates.
    # elements.elementChain.forward(
        # microstep => input microstepcount -> 1/microstepCount -> steps 
        # stepper =>   input stepAngle (degrees) -> stepAngle/360 -> revolutions
        # pulley =>    input pitchDiameter (mm)
        # invert =>    if it is inputted backwards. false = its correct connection])
    self.xAxis = elements.elementChain.forward([elements.microstep.forward(1), elements.stepper.forward(1.8), elements.pulley.forward(2.03), elements.invert.forward(False)])
    self.yAxis = elements.elementChain.forward([elements.microstep.forward(1), elements.stepper.forward(1.8), elements.pulley.forward(2.03), elements.invert.forward(False)])

    # define an H-BOT configuration
    self.stageKinematics = kinematics.hbot()        # add invertX = True, invertY = True if needed

Some Documentation

The necessary components to build 1 corexy system

The necessary components to run and control 1 corexy system

Modifications made due to scaling issues. Had to laser cut a portion to allow bolt heads to be placed in line with acrylic pieces holding rods in place.

Three systems built and running!

Coupling corexy with more motion. Input is a list of moves as [mm,mm,mm,deg].

To Do