Rubiks Cube Solver

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Rubiks Cube Solver mit Bilderkennung

Projekt:

Die Idee war die Entwicklung einer Software, welche einen Rubiks Cube mit Hilfe von Farberkennung einliest und einen entsprechenden Lösungsalgorithmus ausgibt. Die Software sollte ausschließlich mit einer vorhandenen Webcam, plattformübergreifend funktionieren.

 Projektteam: Ermin Camic, Florian Köhler, Johannes Schicktanz
 Bearbeitung: Wintersemester 2015/16 (Interaktionspraktikum, BEI)

Anwendungsablauf

Der Benutzer hält einen Rubiks Cube in die Webcam um alle 6 Würfelseiten einzulesen. Um die Eingabe möglichst intuitiv zu halten, erhält der Nutzer eine Ausgabe über die momentan erkannten Farben. Zudem werden dem Benutzer alle eingelesenen Seiten in Form eines Würfelkreuzes angezeigt. Der Benutzer muss in der momentanen Version der Software das Einlesen der Würfelseiten mittelns Tastendruck auslösen.

Problemstellungen

Die Herausforderung bei der Eingabe liegt darin, eine unerlaubte Drehung (bei der Eingabe) des Würfels auszuschließen.

Durch die Vielzahl verschiedener Würfel-farb-kombinationen entstehen Inkompatibilitäten mit dem verwendeten Lösungsalgorithmus. Daher haben wir uns auf die Anwednung eines Standard Rubiks Cube's festgelegt.

Durch die spiegelnde Oberfläche vieler Würfel, der verschiedenen Beleuchtung der Anwendungsumgebung, sowie der Monitorstrahlung erweist sich die Farberkennung als schwierig.

Hardware

Ziel ist es, die Anwendung auf einen einfachen PC mit einer Webcam auszuführen, sodass keine zusätzlichen Komponenten benötigt werden und möglichst viele Nutzer die Anwendung ausführen können.

Software

Quellcode

Die Quellcodes zu diesem Projekt sind hier verfügbar.

Benutzte Komponenten

Die Implementierung wurde mit Hilfe des plattformunabhängigen open-source-frameworks OpenFrameworks (http://openframeworks.cc/) durchgeführt.

Die Implementierungssprache ist C++ (Entwicklungsumgebung: CodeBlocks). Es wurde großen Wert auf die Einhaltung fundamentaler OOD (Objekt Orientiertes Design) Prinzipien gelegt.


Die Komponenten der Implementierung sind:

Solver:

   Wendet einen Lösungsalgorithmus auf die 
   vom Würfel übergebenen Eingaben an.

RubiksCube:

   Repräsentiert den Würfel durch seine 6 Seiten.
   Zuordnung der eingelesenen Seiten erfolgt über 
   den mittleren Stein (welcher sich nie bewegt).

Anwendungsoberfläche:

   Enthält eine Einleseroutine zur Eingabe der Würfelseiten durch eine vorgegebene Maske.
   Die Ausgabe des Würfels erfolgt durch ein Würfelkreuz.

UML-Diagramm der Implementierung:

RubiksCube uml.png

Ausführung des Programms

Der Einleseablauf wird vom Programm vorgegeben. Jede Seite wird über den Tastendruck 's' eingelesen. Bei erfolgreicher Eingabe aller Würfelseiten wird nach Eingabe der Taste 'c' der Lösungsalgorithmus ausgegeben.

Beispiel einer Eingabe:

RubiksCube InAktion.png

Der Eingelesene Würfel wird dem Nutzer als Zwischenausgabe wie folgt dargelegt.

RubiksCube RubiksKreuz.png

Die Lösung wird in Form einer Zeichenkette dargestellt.

Die Buchstaben stehen dabei für die Drehrichtung, die Zahlen für die Anzahl an Drehungen die man im Uhrzeigersinn machen muss.

 F: Front := Vorderseite
 B: Back  := Rückseite
 D: Down  := Unterseite
 R: Right := Rechte Seite
 L: Left  := Linke Seite


RubiksCube SchriftLoesung.png