Robot solveur de Rubik’s Cube

Bonjour à toutes et à tous,

Nous sommes Bilal, Mélissa et Rémi, 3 étudiants en seconde année de classe préparatoire à Polytech Angers. Dans le cadre de notre cursus, nous avons choisi de réaliser un solveur de Rubik’s Cube. Pour cela, nous étions accompagnés de notre tuteur M. Lagrange.

Après un semestre de projet, voici le résultat final que nous avons obtenu :

Vidéo de notre projet final

Pour fabriquer ce solveur, nous nous sommes répartis le travail, et nous avons séparé notre projet en plusieurs parties :

  • Etude
  • Conception CAO
  • Programmation
  • Montage

L’Étude

Pour commencer, nous avons réfléchi à la façon de concevoir le solveur et avons procédé à des recherches.

Nous n’avions pas de contrainte spécifique pour notre projet, le but n’étant pas d’atteindre des performances de compétition, notamment en termes de vitesse.

Ainsi, nous avons choisi les fonctionnalités suivantes :

  • une interface graphique permettant de donner des instructions au robot.
  • l’utilisation de la méthode de résolution classique pour le solveur.
  • la possibilité pour le robot de mélanger le Rubik’s Cube tout seul.
  • le fait de ne pas utiliser de capteur pour connaître l’état du cube : celui-ci est entré par l’utilisateur au lancement du programme.
Premier Schéma réalisé du solveur

Afin de mettre ce cahier des charges en application, nous avons opté pour une structure cubique entourant le Rubik’s Cube, avec un moteur pour chaque face.

Pour cela, nous avons eu besoin de :

  • MakerBeams (équerre, profilé, cube coin)
  • Un Rubik’s cube
  • 6 moteurs Dynamixel AX-12A
  • un starter kit Dynamixel

Nous avons choisi les moteurs Dynamixel que M. Lagrange nous avait recommandé car ils correspondaient à nos critères.

La Conception CAO

Lors de la partie conception, nous avons réalisé à l’aide de SolidWorks, un logiciel de CAO, les différentes pièces nécessaires pour la structure de notre projet. Cela nous a permis de nous assurer que le solveur était faisable.

Cet assemblage contient des pièces de notre création imprimées en 3D, qui relient les moteurs et le Rubik’s Cube. Nous avons donc dû tester plusieurs prototypes différents afin de voir lequel fonctionnerait le mieux.

Assemblage 3D représentant la pièce reliant le Rubik’s Cube au moteur
Assemblage final du solveur sur SolidWorks
Différents prototypes des pièces imprimées en 3D

La Programmation

Patron du cube

Pour le programme, nous avons suivi la méthode de résolution classique d’un Rubik’s cube car c’est cette méthode que nous connaissons le mieux. Pour ce faire, nous avons réalisé une simulation du Rubik’s Cube en Python à l’aide d’un patron du cube.

La méthode classique résout le cube étage par étage, nous avons donc divisé le programme en plusieurs fonctions simples pour chaque partie de la résolution.

Le cube étant bloqué dans la structure, nous avons ajouté un programme qui permet de le mélanger aléatoirement pour qu’il puisse fonctionner en autonomie.

Afin de lier les moteurs au programme, nous avons dû utiliser une bibliothèque python distribuée par Dynamixel.

Pour finir le programme, nous avons ajouté une interface grâce à pygame (bibliothèque graphique) permettant de donner des instructions au programme et de relier les différentes parties.

Version finale de l’interface de notre programme

Le Montage

L’assemblage à réellement commencé avec l’arrivé des moteurs. Nous avons pu construire une structure en MakerBeams pour les tenir. Ensuite, nous avons relié les moteurs en série, et l’un d’eux à la carte, pour qu’ils puissent être connectés au programme.

Branchement entre moteur et ordinateur
Solveur final

Conclusion

Finalement, nous avons réussi à construire un solveur de Rubik’s Cube capable de mélanger et résoudre un Rubik’s Cube. Cependant, nous avons pu remarquer que dans certaines situations, les faces ne tournaient pas en raison de l’imprécision de la pièce reliant le moteur et le cube. Il faudra donc l’améliorer pour éviter ce défaut.

Nous avons trouvé ce projet très intéressant car il nous a permis de nous améliorer en programmation et en modélisation 3D. De plus, l’aspect concret nous a permis de voir l’avancement de notre projet. Enfin, cela nous a permis de travailler en équipe et en autonomie des compétences qui nous serons très importantes dans notre futur professionnel.

Si vous souhaitez en savoir plus, vous trouverez notre rapport ci-dessous

Merci à tous d’avoir lu notre article !

Bilal, Mélissa et Rémi