The Solver

From ESE205 Wiki
Revision as of 05:46, 14 February 2016 by Oarias (talk | contribs) (→‎Gantt Chart)
Jump to navigation Jump to search

Jordan Aronson, Alex Herriott, Oscar Arias

Project Overview:

The robot should be able to take any scrambled rubik's cube and solve it without any input from outside systems, as in, all computation must happen on the microcontroller itself. It will do this by first using a camera to identify the colors on each side of the cube before plugging that input into a solving algorithm. Finally, using the solution generated, it will manipulate the cube using four grippers around the cube. Each of which will be able to both rotate the nearest face or the entire cube itself.


To build this, we need these things:

  • 1. Build a robot which includes a Raspberry Pi along with motors that can rotate parts of the cube horizontally and vertically.
  • 2. Create code to take the set of instructions and give them to the robot which will execute the necessary moves to solve the cube.
  • 3. Create code to detect the colors on a cube on each of its sides
    • Backlight the camera
  • 4. Convert an algorithm to solve a cube into Python and produce a set of instructions based on its given colors
  • 5. Connect the Raspberry Pi to the motors using circuitry


Challenges that we predict:

  • Designing grippers able to grasp and rotate the cube. It's unlikely we will be able to grip the cube with the surface with PLA filament, so we need some sort of foam surface to provide traction. We also need to make sure that when the cube is released by the gripper it is able to freely rotate.
  • Ensuring the grippers rotate exactly 90 degrees so the cube can rotate cleanly and subsequent moves will be able to be performed. Given we are using stepper motors, ensuring that the position of the steppers is zeroed before we start performing moves is important.
  • Trying to get the individual moves to take as little time as possible. The steppers that we are considering are relatively high torque and low power
  • Designing a convenient way for the cube to be inserted into the device and exit the device. We could possibly use some kind of platform on a screw that is able to raise and lower the cube out of the device.
  • Designing circuitry to connect the Pi (The Pi can’t deliver enough power or pins to drive all the necessary servos and steppers) Right now the servos will need one pin each (4 pins total) and the steppers need 4 pins each (16 pins total) that is a total of 20 pins, and the Pi has 17 GPIOs. We need a different method for driving the steppers than the ULN2003 drivers that come with them, or additional circuitry to drive all the inputs. For now we will try and drive the ULN2003 boards with two 8 bit shift registers, which will use 4 pins total, with the servos, that totals 8 pins. however, we are then limited in step speed, which may mean we have to invest in additional hardware, like the Adafruit motor HAT.
  • Finding a way to power both the Pi and the actuators from a wall adapter.
  • Finding a suitable open source algorithm that we can adapt to our robot to solve the cube.
  • Making sure the camera can distinguish the color patterns on each side of the cube and store each face's patterns to memory. We also may be able to detect the colors with the grippers in the way, we may not. That will require some experimentation.
  • Design code that can take that algorithm and translate it to what the robot can do. (The robot’s current design can only act on 4 faces at any given time. To access the other two, the cube must be rotated). We must make sure we know the position and orientation of the cube at all times so we know where to go next for our next action.


Gantt Chart

Gantt Chart Solver2.png


  • In our current design we have 4 end effectors on the cube that can rotate one side of the cube. These can therefore turn 4 sides of the cube from any position. The remaining two sides can be accessed by disengaging two of the grippers and rotating the entire cube to a new position.
  • The grippers that grip the cube will be operated by a mini servo mounted into the base of the gripper and then those grippers will be mounted to stepper motors. By using stepper motors, we are able to get continuous rotation on the grippers and accurate positioning.
Whole assembly.jpg
Gripper perspecitve.jpg
Stepper mount.jpg
Gripper front.jpg