Society of Robots - Robot Forum

Software => Software => Topic started by: Mehal on June 09, 2014, 10:01:09 PM

Title: Making a robot that solve a rubik's cube.
Post by: Mehal on June 09, 2014, 10:01:09 PM
I want to make a robot that can solve a rubik's cube as a part of my college tech-fest. I have sufficient knowledge of cubing, but not about programming.
My question is, how to make the robot decide the necessary algorithm and execute it.

PS. I have very little knowledge of programming, so please explain in simple language...THanks
Title: Re: Making a robot that solve a rubik's cube.
Post by: jwatte on June 10, 2014, 10:21:27 AM
Your proposal is actually a fairly advanced planning problem. Tackling that as your first program without a very hands-on tutor is unlikely to be successful.
Title: Re: Making a robot that solve a rubik's cube.
Post by: Mehal on June 10, 2014, 09:30:50 PM
So where do I need to focus on and from where to start??? What to learn for that?
Title: Re: Making a robot that solve a rubik's cube.
Post by: waltr on June 11, 2014, 08:56:51 AM
Get an Ardiuno board and start to learn how to program. First task is just blink an LED at the rate you wish.
Title: Re: Making a robot that solve a rubik's cube.
Post by: Mehal on June 12, 2014, 09:52:13 AM
Hey, by little knowledge of programming means I know these things. I have made a few simple basic robots.I have made a RC Car using Aurdino and A wall follower and line follower using AVR.....What next?????
Title: Re: Making a robot that solve a rubik's cube.
Post by: jwatte on June 12, 2014, 10:21:42 AM
First: Solving the cube likely needs more RAM than what's available in the Arduino. Thus, you need to find a computer that you can interface to your robot actuators, either using direct interface (like a serial bus, for example,) or by talking to a microcontroller which in turn talks to actuators.

Second: You need to design the actual gripper that will hold the cube. There are a minimum number of degrees of freedom you need here; while you can probably just clamp the bottom row in a tightener, you need the other arm to articulate in three rotational degrees, plus have a gripper, plus have an in/out degree of freedom.

Third: You need a way to "read" the cube. This would require a webcam or similar, hooked to your computer. OpenCV is a fine library to use to interface with webcams for robotics.

Fourth: Find a rubik's cube solver program that is open source on the Internet. Build it and examine the code to make sure you understand how it works.

Five: Tie all the software together such that you first take a picture of all six sides of the cube (moving it with the arm,) then let the solver program calculate the solution, then execute the solution by moving the arm/cube.


These are each a pretty meaty challenge, but they are all doable (you can google for various images and videos of robots that do this.)

If you want to write your own solver, then you should build a representation of the problem space using six surfaces with 3x3 colors, with an interconnectedness graph of how the different manipulations solve the cube, and then run a planner/search algorithm (a breadth-first search might eventually terminate, but uses a lot of RAM -- you can probably do better with directed search.)

That should give you terms to google for -- "breadth first graph search" and "forward planning algorithm" would be great starts.

Title: Re: Making a robot that solve a rubik's cube.
Post by: Mehal on June 18, 2014, 09:40:44 PM
Well ,I couldn't get any proper help from the internet, so I decided to try it on my own. I have made a simple program in C which asks me to input the colors on each facelet and then in output it shows where does each piece belong and how it needs to be oriented. But how to find the neccessary algorithm using this data?