We have designed a Rubik's cube Simulator and paired it with motion tracking to enable a virtual experience of solving a Rubik's cube. If the user does not have a physical cube with him, or wishes to enjoy the puzzle in a more exciting manner, our software is there to fill the gap. No special equipment or hardware is required to run the simulation, just a webcamera, and a PC, and our the game is ready to be played.
Our project can be divided into 3 parts, the first is desigining the cube model, second is writing the python program using OpenCV to enable Computer Vision, and third is creating interface and algorithms for movement of the cube. None of these tasks were easy, and each required division of labour among our team to be completed on time.
We created a 3D model of the cube in Blender. However, as we were using this software for the first time, the learning curve was steep, and it took a lot of efforts to create structure and textures, and make the final object.
Using OpenCV wasn't easy either. Each of the gestures had to be manually created, and modified & tested several times before we could finalise it.
Creating an interface for the deployment of the cube model was insanely difficult. Initially, we tried to use the Python scripting within Blender itself to write the algorithms, and execute it within the software. However, we faced several walls in this approach, Not only is bpy (Blender API for Python) very complicated, the algorithm for movement of the cube was complex as well. Hence, we tried using other methods, such as Ursina (a Python Game Engine), and Unreal Engine. But our efforts in these directiosn were unsuccessful as well. Ursina did not work with Python 3.12, and Unreal engine kept crashing because of limited CPU capacity.
In the end, we used vpython to make the project in python itself. Since the algorithm for movement and solution of the scrambled cube was beyond our scope, given the time crunch, we decided to use public libraries and imported the code for the same.
We have completed most of our objectives for this project, however, we deviated significantly from our initial plan, and had to take several detours to make the model functional.
Tracks Applied (3)
Discussion