Tag Archives: FPGA servo control


FPGA-controlled robot solves Rubik’s cube

Alex Whiteway, Sungjoon Park, and Rameez Qurashi‘s final project for their ECE 5760 course at Cornell was FPGA-controlled mechanical arms to solve Rubik’s cube. While the arms rotate the cube, each cube face is scanned by a camera and the scanned data are passed into a Rubik’s cube solving algorithm, which then computes what the next moves would be towards solving the cube. The move instructions are sent to the FPGA, which in turn sends PWM signals to the servos to rotate the cube accordingly.

FPGA-controlled Rubik's solver

FPGA-controlled Rubik’s solver

They write,

A variety of Rubik’s cube solvers (including a few FPGA implementations) have been created as hobby projects, but there are as of now no FPGA implementations that physically solve a cube. The other FPGA implementations merely give the user instructions on how to solve a specific cube. The most efficient Rubik’s cube solvers used more complex and efficient algorithms than we did, but because of time constraints we used a less efficient, but still effective algorithm detailed below. We sped up certain stages of this algorithm by creating lookup tables to look up the most effective combination of moves instead of computing a possibly suboptimal solution. We could have used a fourth arm to improve our solving time by decreasing the number of moves necessary to solve the cube, but we chose not to purchase a fourth arm due to budget constraints. Since the servos take up to a few seconds per move, the Nios has usually completed the solving algorithm before the arms are able to complete the first move.

Here’s the Youtube video of their cube solver in action: