Home > Ideas, Mindstorms > NXT Killough Platform

NXT Killough Platform

November 4th, 2013 Leave a comment Go to comments

Simple variant of a holonomic Killough platform, controlled by a gaming pad using the NXT unit.  


Completion date: 03/11/2012
Power: electric (NXT brick)
Language: ROBOTC
Bricks: 1
Motors: 3 x NXT motor
Sensors: none
Dimensions: 34 studs in diameter
Weight: 0.748 kg

A Killough platform is a fascinating vehicle capable of holonomic drive, or, in other words, of driving in any direction. This is possible thanks to the use of at least three separate omniwheels, driven by at least three independent motors. I have built one Killough platform 5 years ago, but it was based on Power Functions system, and thus difficult to control, as no less than two motors have to be working together to move the platform in desired direction. This time I decided to put together a version with the NXT unit at its heart, simplifying steering.

The platform itself was dead simple, with a triangular chassis with three NXT motors around and the NXT unit on top. The omniwheels were simple too, each fitter with 12 rollers spaced 30 degrees apart. This time the rollers were equipped with tires, improving the vehicle’s traction considerably.

The control program, which is included below in full, was making use of the Xbox pad’s joystick to control the direction and speed of driving, and of the Xbox pad’s triggers to control rotating in place. The pad was connected to my PC over WiFi, and the control program was reading commands from it and sending them over Bluetooth link to the NXT unit. The control algorithm, responsible for translating the joystick’s movements to three motors, was fairly simple, and it assumed that the B motor was at vehicle’s front. The code below should be simple enough. Note the joystick position readout being divided by 20, in order to eliminate errors at the start, resulting from the joystick not returning to the perfect zero-zero position.

The model worked as intended, although the ride was kind of shaky due to 30-degrees gaps between the rollers, and it was difficult to control when going sideways, most likely because if uneven weight distribution between the omniwheels resulting from all the shaking. This issue could be solved by using custom LEGO -compatible omniwheels, a number of which is available now, but I have not yet came in possession of any of them.

Platform control program:

#include "JoystickDriver.c"

task main()
  bMotorReflected[motorA] = true;
  bMotorReflected[motorB] = true;
  bMotorReflected[motorC] = true;
    int goY = joystick.joy1_y1 /20;
    int goX = joystick.joy1_x1 /20;

      if (joystick.joy1_x2 == 126) // rotate left
        motor[motorA] = 100;
        motor[motorB] = 100;
        motor[motorC] = 100;
      else if (joystick.joy1_x2 == -128) // rotate right
        motor[motorA] = -100;
        motor[motorB] = -100;
        motor[motorC] = -100;
      else if (goY == 0 && goX == 0)
        motor[motorA] = 0;
        motor[motorB] = 0;
        motor[motorC] = 0;
        motor[motorA] = (goY - goX) * -40;
        motor[motorB] = goX * -20;
        motor[motorC] = (goY + goX) * 40;

    nxtDisplayCenteredTextLine(0, "BATTERY: %3.1fV", nImmediateBatteryLevel / (float) 1000);
    nxtDisplayTextLine(2, "Y1: %d", goY);
    nxtDisplayTextLine(3, "X1: %d", goX);


1.jpg dsc07115.jpg dsc07117.jpg dsc07118.jpg dsc07123.jpg dsc07129.jpg dsc07131.jpg


YouTube Preview Image
Categories: Ideas, Mindstorms Tags: ,
  1. Sariel
  2. ctw100s
    March 6th, 2014 at 01:44 | #2

    Are there any Killough Platforms in real life? If so, what are they used for? When I look up ‘Killough Platform’ on Google all I see are Lego Killough Platforms.

  3. Sariel
    February 2nd, 2014 at 23:33 | #3


  4. February 2nd, 2014 at 21:34 | #4

    Hi! Nice work, what complier do you use?

  1. No trackbacks yet.