| Autor |
Topic  |
|
MarMac
Experte
   
Germany
1646 Posts |
Posted - 07 Jan 2005 : 12:39:45
Ich hab mich in diesen Weihnachtsferien mal wieder (oder eher: endlich wirklich) an dieses schon lang überlegte Projekt herangewagt.An alle, denen der Titel nichts sagt: Es geht um einen Roboter, der einen Rubik's Cube vollautomatisch richtet. Anreiz dafür ist u.a. ein Roboter, der es zu ziemlicher Berühmtheit geschafft hat, aber einie Reihe Eigenschaften hat, die mir nicht gefallen : - er ist nicht aus fischertechnik - er braucht einen manipulierten Würfel - er verwendet einen geklauten Algorithmus Ich hab deshalb das etwas zu ehrgeizige Ziel, sowas aus ft hinzubekommen. Einen ersten Versuch könnt ihr in diesem Video sehen: http://www.ftcommunity.de/forum/ftcs_grinder2_divx.avi (am besten mit rechtsklick-speichern unter runterladen, die Datei ist über 6MB groß) Das einlesen der Farben und der eigentliche Algorithmus fehlen noch, da muss ich mir erst ausführlich überlegen, wie ich das genau mache. Wenn ihr Ideen dazu habt, wäre ich dankbar. Was bereits funktioniert: Das Modell wird in dem Video autonom vom Robo-Interface gesteuert, ohne Kabel. Das RoboPro-Programm kann absolute Zugfolgen nach dem Motto "obere scheibe um 180°drehen, untere scheibe um 180° drehen" bereits in Drehbewegungen umsetzen - da ich diesen Prototyp so gebaut habe, dass die zu drehende Scheibe immer unten liegen muss, muss das Programm umrechnen. Außerdem wird schon mitgerechnet, wie die Farbverteilung nach dem drehen ist, wenn die Farben vorher bekannt waren. Insgesamt wärs schon, wenn das ganze mit RoboPro und ohne Kabel funktioneiren würde - ich hoff, das passt dann alles in den Speicher rein. Ich versuche im Programm auch, Speicherplatz gegen Rechenzeit zu tauschen - wenn der ein paar Minuten mal rechnet solls mir recht sein, wenns dafür überhaupt geht. |
remadus
Experte
   
Germany
1477 Posts |
Posted - 07 Jan 2005 : 17:23:48
Hallo MarMac,wenn ich das richtig verstanden habe, dann muß die Farbverteilung nur ein einziges mal aufgenommen werden. Danach verfolgt der Rechner ja die Drehungen und kennt die Farbverteilung. Ich weiß jetzt leider nicht, ob man alle sechs Seiten aufnehmen muß oder nur 5. Ich mache einmal einen verwegenen Vorschlag: wenn es möglich ist, eine WebCam an den Computer anzuschließen und von einem eigenen Programm aus eine Aufnahme auszulösen und diese als Bitmap zu speichern, dann ist der größte Schritt gemacht. Bei einer Bitmap weiß man nämlich, wo die Pixel sind. Jetzt muß man den Würfel in eine bekannte, reproduzierbare Position bringen und die Aufnahme machen. Aus der Bitmap-Datei werden jetzt 9 Pixel herausgesucht, die jeweils eine Farbseite repräsentieren. Im Pixelwert stehen die Farbanteile für Rot, Grün und Blau drin. Damit sind die Farben bekannt. Schaut die Kamera schräg von oben auf den Würfel, dann kann die zugewandte Seite aufgenommen werden und die Oberseite. Nach drei 90-Grad-Drehungen sind fünf Seiten klar. Die sechste Seite ist leider unten die. Jetzt kommt es drauf an, ob man aus der Farbverteilung von 5 Seiten die 6. erschließen kann. Das ist was für die Theoretiker hier. Vielleicht ist mein Vorschlag ja ein kleiner Anfang. Bis dann Remadus  |
Hathi
Experte
   
Switzerland
1117 Posts |
Posted - 07 Jan 2005 : 19:24:59
Was mir jetzt schon gefällt ist der Schalter vorne links, wunderschöne Konstruktion aus leuter fischertechnik teilen, solltest Du dir zum Patend anmelden *fg* Edited by - Hathi on 09 Jan 2005 00:31:02
|
MarMac
Experte
   
Germany
1646 Posts |
Posted - 07 Jan 2005 : 19:42:23
Ehrlich gesagt find ich meine Konstruktion furchtbar - nicht wegen den teilen, sondern weil mein Kippmechanismus mehr den Gesetzen des Zufalls wie denen der Mechanik gehorcht...@remadus: Ja, du hast sogar recht, es reichen 5 Seiten. Allerdings ist das kein größeres Problem, weil der Würfel ja sowieso in alle Richtungen gedreht werden kann - ich würde also die Kamera auf eine Seite (die Oberseite ) ausrichten, dann nach einer aufnahme die nächst seite nach oben drehen lassen usw. Bilder einer Kamera ins Programm zu kriegen ist kein Problem, das dazu notwendige Wissen habe ich mir schon vor knapp zwei Jahren angeeignet. Allerdings gibt's zwei Probleme: 1) Das Licht. Ich brauche eine gleichmäßige Beleuchtung, die recht hell ist, aber keine hellen Reflexionen erzeugt, die auf dem Kamerabild weiß werden würden. Ist's zu dunkel kann ich die Farben nicht zuverlässig unterscheiden. 2) Wie krieg ich meinen C-Kamera-"Treiber" in RoboPro rein? Eine Möglichkeit ist, auf eine "Plugin"-Schnittstelle von RoboPro zu warten. Dann geht aber der Betrieb im Downloadmodus mit Garantie nimmer. Überhaupt würde ich gerne mal wissen, wieviel Platz mein Programm bisher auf dem Interface belegt, und was noch frei ist... wenn das schon zur Hälfte voll ist kann ichs mit dem Downloadmodus sowieso vergessen. Alternative wäre, da über den COM-Port des Interfaces was zu drehen, weil man den ja irgendwann von RoboPro ansprechen können soll. Da wäre dann der Bastlergeist gefragt. Dritte Möglichkeit: gar keine Kamera, sondern mit Fotowiderständen messen. Da reichen Stücker zwei, durch drehen des Würfels können dann alle Felder abgetastet werden. fishfriend, du hattest doch mal Versuche mit LDRs und Farbe gemacht, oder? Edited by - MarMac on 07 Jan 2005 19:43:54 |
DerMitDenBitsTanzt
Experte
   
Germany
1568 Posts |
Posted - 07 Jan 2005 : 20:14:08
Hallo Markus,leider kann ich Dir mangels eigener Erfahrung bei der Farberkennung keinen Tipp geben, aber ich möchte meiner Begeisterung über den bisherigen Stand Deiner Maschine Ausdruck verleihen! Die Handhabung des Würfels scheint doch schon recht gut zu funktionieren. Jedenfalls so gut, dass es sich lohnen sollte, den Ansatz weiter zu verfolgen. Gruß, Frank |
MarMac
Experte
   
Germany
1646 Posts |
Posted - 07 Jan 2005 : 20:40:09
Danke, das macht mich etwas Optimistischer... aber leider war das aber die dritte Aufnahme, bei den zwei davor ging immer irgendwas schief. Deshalb auch der fette Knopf vorne-links Übrigens: Hab gard nochmal nachgedacht, und festgestellt, dass man doch alle 6 Seiten braucht, um die Positionen zu wissen: Es könnten ja aus der Fläche, die man nicht scannt, zwei oder mehrere Kantenwürfelchen in sich verdreht sein, so dass man jeweils nur die Farbe der nicht-gescannten seite sieht, und man sie damit nicht unterscheiden kann. |
fishfriend
Experte
   
Germany
3138 Posts |
Posted - 07 Jan 2005 : 21:26:44
Hallo... Jep. Beleuchte die Fläche mit der Farbe die du suchst. Die sieht dann sehr dunkel aus . Also am besten RGB-Leuchtsteine und einen LDR. Nacheinander die Leuchtsteine einschalten und den LDR-Widerstand messen. Daraus dann die Farbe "errechnen" (ausprobieren). Geht ganz einfach. Gruß Holger  |
remadus
Experte
   
Germany
1477 Posts |
Posted - 08 Jan 2005 : 08:57:14
Hallo,der Tip von Holger geht in eine gute Richtung. Als Lichtquelle schlage ich Leuchtdioden vor, weil die ziemlich spektralrein sind, das heißt, daß sie 'saubere' Farben liefern. Nacheinander damit die Flächen beleuchten und mittels LDR oder Fototransistor den Grauwert aufnehmen. So liefert jede Farbe einen Zahlentripel, der charakteristisch sein sollte. Das Video habe ich inzwischen auch gesehen. Beeindruckend, kann ich da nur sagen. Das Drehen und Kippen geschieht ziemlich flott. Alle Achtung. Falls der obere Halterahmen in der Höhe verstellt werden könnte, dann wäre die Drehmechanik in der Lage, eine oder zwei Reihen zu drehen. Eventuell könnte das zwei mal kippen ersparen. Nur mal so erwähnt. Das wird. Das sieht jetzt schon sehr gut aus. Bis dann Remadus  |
steffalk
Experte
   
Germany
469 Posts |
Posted - 08 Jan 2005 : 13:24:09
Tach auch!Respekt, MarMac! Sowohl für die Konstruktion als auch für den Anspruch, das nur mit RoboPro und im autonomen Modus machen zu wollen. Mir würde als Algorhytmus nichts anderes einfallen als ein brute force Backtracking-Algorhytmus. Ähnlich vielleicht dem alten Problem, 8 Damen so auf einem Schachbrett anzuordnen, dass keine die andere direkt schlagen kann. Erste Dame probieren. Nächste wandern lassen, bis sie von unten her nicht mehr geschlagen werden kann. Falls dies möglich ist, weiter zur nächsten - bis man bie der 8. angekommen ist, dann hat man eine Lösung. Gibt es für eine Dame keine unschlagbare Position: eine Dame zurück. Ist dies bei der 1. Dame wieder angekommen, sind wir fertig. Das ganze ist also ein rekursives Problem und kann sehr elegant auch mit einem rekursiven Algorhytmus gelöst werden. So ein Algorhytmus ist recht einfach und führt auf einem modernen Prozessor überraschend schnell zu Lösungen. Rubic's Cube ist natürlich komplexer: Mehr Stufen müssen durchgerechnet werden. Was mir im Moment aber gar nicht einfällt, ist eine Ende-Bedingung: Wann hat es keinen Sinn mehr, den probierten Weg weiter zu verfolgen? Der möglichst frühe Abbruch ist sehr wichtig für die Gesamtperformance. Letztlich würde ich dazu tendieren, lieber mehr Rechenzeit zu nehmen und wirklich die kürzestmögliche Zugfolge (vielleicht sogar optimiert durch Einbeziehen der Dauer der verschiedenen Vorgänge an der Maschine) zu finden. Ich würde vermuten, dass die aufgewendete Rechenzeit immer noch kleiner ist als die Zeit für die Mechanik. Rein gefühlsmäßig würde ich persönlich den Algorhytmus erstmal mit einer konventionellen Programmiersprache entwickeln (einfach weil ich vermute, dass ich damit schneller als mit RoboPro ans Ziel käme) und erst später sehen, ob und wie man das in RoboPro gießen kann. Gruß, Stefan  |
steffalk
Experte
   
Germany
469 Posts |
Posted - 08 Jan 2005 : 13:25:15
Tach auch - Nachtrag!Begeistert bin ich von der Methode, nur mit ft-Teilen Farben zu erkennen! Diese Idee muss ich nächstens mal selber ausprobieren. Ich würde dazu die alten Leuchtsteine mit den farbigen Kappen verwenden. Gruß, Stefan  |
remadus
Experte
   
Germany
1477 Posts |
Posted - 08 Jan 2005 : 16:53:49
Hallo Stefan,ob sich die Farbkappen von Fischertechnik eigenen, ist schnell festgestellt. Beleuchte den Farbwürfel damit und fotografiere den Würfel mit einer Webcam, die du auf Schwarzweiß umgestellt hast. Nimm ein Rot-, ein Grün- und ein Blaubild in Schwarzweiß auf. Wenn die sich nicht erheblich voneinander unterscheiden, dann wird es schwierig. Sind die Farbcharakteristiken der einzelnen Farbkappen nur schwach ausgeprägt, dann ist es so ähnlich, als wollte man Farben im Nebel erkennen. Als dann Remadus  |
MarMac
Experte
   
Germany
1646 Posts |
Posted - 08 Jan 2005 : 17:18:58
Naja, ich bin da optimistisch - ich hatte im Fremdlichtgeschützten "Käfig" bereits ganz ohne Farbiges Licht einmal Versuche mit dem Würfel und einem LDR gemacht, ich habe auch so schon alle Farben außer orange/gelb oder orange/rot unterscheiden können.Werds demnächst mal probieren, danke für die Tipps! @Stefan: Den Würfel mit dem Microcontroller des Interface zu "bruteforcen" halte ich für eher aussichtslos. Was ich aber machen könnte, wäre, das ganze halbwegs intelligent zu gestalten, d.h. z.b. erstmal nur ein "Stockwerk" mit roher Rechenleistung richten zu lassen, und danach für das zweite Stockwerk nur noch Zugfolgen zulassen, die das erste nicht weider zerstören etc. - das gibt zwar niemals eine optimale Lösung, aber müsste mit verhältnismäßig wenigen Programmbausteinen zu machen sein. Und das ist derzeit Hauptpriorität. Edited by - MarMac on 08 Jan 2005 17:21:50 |
thkais
Experte
   
Germany
1295 Posts |
Posted - 08 Jan 2005 : 22:56:53
Zunächst mal: Interessante Konstruktion. Geht einen ganz anderen Weg, sieht vielversprechend aus. Aber irgendwie kommt mir der ganze Thread ziemlich bekannt vor  Für den "normalen" Rubiks-Cube braucht man kein "brute force". Es gibt einige wenige einfache Züge, mit denen man den 3x3x3 Würfel richten kann - die kann ich seit ca. 20 Jahren auswendig Gabs nicht sogar mal ein Video "von Hand"? Ist wohl schon Jahre her... Mit dem RoboPro-Interface sollte es definitiv möglich sein, diese Algorithmen umzusetzen. Sogar der 4x4x4-Würfen läßt sich in bestimmten Grenzen auf den 3x3x3 zurückführen (leider nicht komplett, da der 4er keine feststehenden Mittelpunkte hat - der 3er schon. Die Anordnung der Mittelpunkte zueinander kann sich nicht ändern).Ich bin bei meinen Überlegungen zur Hardware immer wieder bei mindestens zwei, im 90°-Winkel zueinander angeordneten, Zangen gelandet. Die dritte, wie beim Lego-Cube-Solver, ist nicht unbedingt notwendig, auch wenn einige Züge (verdrehen der mittleren Ebene - kommt schon ab und an vor) dadurch vereinfacht werden. Hmpf - schon Wochen ohne ft zugebracht. Mußte sogar heute am Samstag arbeiten... Grummel. Gruß Thomas Bild
|
MarMac
Experte
   
Germany
1646 Posts |
Posted - 08 Jan 2005 : 23:57:44
Tja, der 4x4x4-Würfel ist auch so ne Sache... meinen Erkenntnissen nach reichen 2 Zugfolgen zuätzlich zu denen des 3x3x3ers, um ihn richten zu können. (eine für die zusätzlichen Kantenwürfel und eine für die inneren Flächen) Effizient ist das allerdings nicht, das letzte mal dass ich mich dran versucht hab hab ich über ne halbe Stunde gebraucht.Das Video vom normalen 3x3x3er gibt's übrigens noch: http://www.ftcommunity.de/forum/wuerfel.avi Ich hab da weniger als 2 minuten gebraucht seh ich grad... die ersten 10 sekunden so sind wildes verdrehen, nach der kurzen Pause dann gehts los. Natürlich wär's ne Möglichkeit, diesen von mir verwendeten Algorithmus auch dem Programm beizubringen, allerdings ist der mit so ca. 150 Drehungen (grobe Schätzung, wer auf dem Video mitzählen will, gerne!) nicht gerade der effizienteste - soweit ich weiß gehts theoretisch mit weniger als 30. Mit "bruteforcen" wirds allerdings nichts, ich habe berechnet, dass ich mit meiner bisherigen Implementierung nur max. 5000 virtuelle Drehoperationen/sekunde schaffen würde, womit man in einer Minute gerade mal alle Kombinationen für 6 aufeinanderfolgende Drehungen berechnen könnte - das reicht nichtmal für die ersten 4 Kantenwürfel.

|
thkais
Experte
   
Germany
1295 Posts |
Posted - 09 Jan 2005 : 11:08:49
@Marmac: Ganz so einfach ist es mit dem 4er nicht. Bedenke, daß die Mittelpunkte aus 4 Steinen bestehen, die nicht unbedingt die gleiche Farbe haben - auch die Zuordnung zueinander kann sich ändern. Der 3er besteht aus einem Kreuz, an dem die Mittelpunkte fest angeordnet sind - beim 4er sind sie frei beweglich. Theoretisch sind 18-20 Züge möglich. Es gibt hierzu mindestens ein PC-Programm, eines davon wird auch vom Lego-Solver verwendet. Allerdings arbeitet diese Software mit vorberechneten Tabellen, die mehrere 10 MB benötigen. Mein letzter Stand zur Software sieht in etwa diese Vorgehensweise vor: 1. Die erste Ebene lösen Hierbei mehrere Möglichkeiten im voraus berechnen und dann die kürzere verwenden. 2. Die zweite Ebene lösen ebenfalls mehrere Ansätze berücksichten 3. Das Gleiche für Ebene 3. Natürlich ist das nicht das Optimum, denn bei der Lösung z.B. der ersten Ebene wird nicht berücksichtigt, welche Auswirkungen eine bestimmte Lösung für die nachfolgenden Ebenen hat. Dies ist aber die einzige Möglichkeit, mit dem begrenzten Speicher und den (im Vergleich zu einem PC) begrenzten Rechenkapazitäten hinzukommen. Und genau darum gehts ja: Stand-alone. Mit einem PC kanns ja jeder.  Edit: Ich meine, daß es mal ein JF-Projekt gab, in dem ein Cube-Solver mit einer Art Roboter gelöst wurde. Dieses Projekt ist schon ewig alt, ich muß mal bei Gelegenheit surfen - da gabs einiges zu sehen. Gruß Thomas Bild
Edited by - thkais on 09 Jan 2005 11:10:58 |
MarMac
Experte
   
Germany
1646 Posts |
Posted - 09 Jan 2005 : 17:55:57
Ja, die jeweils 4 Innenwürfel sind beweglich, allerdings habe ich da eine Zugfolge, die einen "Dreickstausch" zwischen 2 nebeneinanderliegenden Innenwürfeln und einem weiteren inennwürfel auf einer benachbarten Seite durchführt - wenn man das nur oft genug dreht kriegt mans mit dieser einen Zugfolge hin. Ansonsten braucht man nur noch eine weitere Zugfolge, um auch die Kantenwürfel im Dreieck zu tauschen, alles andere geht nach meinen Erkenntnissen mit denselben Zugfolgen wie beim 3erwürfel. |
|