Ich habe es mit toio geschafft! Tomo no Kai (inoffiziell) präsidierte, Herr Kato bewarb sich um TMMF2020 und gewann! Ich werde auch wegen der Beziehung teilnehmen. Tokyo Maker Faire hat mehrmals als Gast teilgenommen, aber in dieser Geschichte wollte ich eines Tages ausstellen! (Gegen Ende Januar 2020) muss dies springen.
Klicken Sie hier für den zweiten Teil
Obwohl wir ausstellen konnten, hatten wir uns nicht entschieden, was wir herausbringen sollten. Was das Material betrifft, das ich habe, habe ich es mit toio gemacht! Tomo no Kai (inoffiziell) kündigte auf dem LT-Treffen "[toio de Bundodo](https://drive.google.com/open?id=1WtYxdY3I7hE6E7Z5tO8CB8ilkmFBkLVX" an ) ”,“ Dreimal schneller drehen ”, aber ich möchte trotzdem neues Material erstellen. Da dies jedoch das erste Mal ist, dass wir ausstellen, ist es nichts Falsches, wenn wir zu viel technisch versuchen und versagen oder wenn es nicht täglich fertiggestellt wird. Also habe ich beschlossen, mit dem folgenden Konzept zu denken.
Insbesondere erfordert der Motorsteuerungsbefehl zum Festlegen der Zielwertkoordinaten der neuen Funktion keine Rotationssteuerung des Motors, während die Position der Matte auf der Hostseite wie in der Vergangenheit ständig überwacht wird, so dass der Umfang der BLE-Kommunikation zwischen dem Toio-Kernwürfel und dem Host Kann erwartet werden, reduziert zu werden. In einer Umgebung wie Maker Faire, in der die drahtlose Kommunikation im 2,4-GHz-Band wahrscheinlich überfüllt ist, trägt sie zu einem stabilen Betrieb bei und verbessert vor allem die Batterielebensdauer.
Ich wollte, dass es wie ein Spiel für Kinder aussieht, also beschloss ich, es so einfach wie das Schießen eines beweglichen Toio-Kernwürfels mit so etwas wie einer Waffe und das Besiegen zu machen. Legen Sie etwas wie -ähnliches
Da die Gerätekonfiguration als Host-Computer in BLE integriert ist, wird Raspberry Pi 3B (im Folgenden als RasPi abgekürzt) verwendet, RasPi und Notebook-PC werden direkt über ein kabelgebundenes LAN verbunden, eine feste IP-Adresse wird zugewiesen und Tera von der Notebook-PC-Seite. Es wird davon ausgegangen, dass das Programm durch Anmelden mit ssh von term etc. gestartet und beendet wird. Es wäre schön gewesen, so etwas wie einen Startknopf an das RasPi anzuhängen, um es auszuführen, aber da es verschiedene Probleme geben würde, habe ich mich zuerst einfach angemeldet und einen Menschen das Programm ausführen lassen. Darüber hinaus ist RasPi mit einem Lautsprecher-pH-Wert für die Ausgabe von Soundeffekten und einem LCD2USB-Modul zur Anzeige von Partitur und Status ausgestattet.
Wie auch immer, [[Motorsteuerungsbefehl zum Festlegen von Zielwertkoordinaten](https://toio.github.io/toio-spec/docs/ble_motor#%E7%9B] in toio core cube firmware ver.2 hinzugefügt % AE% E6% A8% 99% E6% 8C% 87% E5% AE% 9A% E4% BB% 98% E3% 81% 8D% E3% 83% A2% E3% 83% BC% E3% 82% BF Schauen wir uns% E3% 83% BC% E5% 88% B6% E5% BE% A1 an. Entsprechend den Spezifikationen gibt es die folgenden zwei Typen.
Diesmal ist der Ziel-Toio-Kernwürfel eine außer Kontrolle geratene Bewegung (als Bewegung Galaga A9% E3% 82% AC), [GAPLUS](https://ja.wikipedia.org/wiki/%E3%82%AE%E3%83%A3%E3%83%97%E3%83%A9% E3% 82% B9) Ich wollte die Bewegung bis zur Bildung der Formation unmittelbar nach Spielbeginn machen), also die zweite "[Mehrere Zielkoordinaten angeben Motorsteuerungstyp 0x04](https: //toio.github. io / toio-spec / docs / ble_motor #% E8% A4% 87% E6% 95% B0% E7% 9B% AE% E6% A8% 99% E6% 8C% 87% E5% AE% 9A% E4% BB % 98% E3% 81% 8D% E3% 83% A2% E3% 83% BC% E3% 82% BF% E3% 83% BC% E5% 88% B6% E5% BE% A1) "ist besser für die Verwendung geeignet Es scheint zu passen. Es scheint sich zu bewegen, indem mehrere Zielkoordinaten der Reihe nach genäht werden.
"[Mehrere Zielkoordinaten angegeben Motorsteuerungstyp 0x04](https://toio.github.io/toio-spec/docs/ble_motor#%E8%A4%87%E6%95%B0%E7%9B%AE%" E6% A8% 99% E6% 8C% 87% E5% AE% 9A% E4% BB% 98% E3% 81% 8D% E3% 83% A2% E3% 83% BC% E3% 82% BF% E3% Um die tatsächliche Bewegung von "83% BC% E5% 88% B6% E5% BE% A1)" zu bestätigen, habe ich es mit toio gemacht! Tomo no Kai (inoffiziell) Python-Bibliothek tomotoio, die in der LT-Meeting-Demo verwendet wird (tomotoio / tree / master / tomotoio) wurde geringfügig geändert, um Motorsteuerungspakete vom Typ 0x04 ausgeben zu können.
tomotoio/cube.Fügen Sie der Cube-Klasse von py eine solche Methode hinzu
def setMotor4(self, ctrlid: int, goals, writemode:int, timeout: int = 0, movingtype: int = 0, maxspeed: int = 0, speedtype: int =0):
Der Name ist "setMotor4 ()" ohne Verdrehung. Nun, alles, was Sie tun müssen, ist, mehrere Zielpositionen (x, y, Θ) für Ziele anzugeben und diese in ein 0x04-Motorsteuerungspaket zu codieren und zu senden. "[Mehrere Zielkoordinaten angegeben Motorsteuerungstyp 0x04](https://toio.github.io/toio-spec/docs/ble_motor#%E8%A4%87%E6%95%B0%E7%9B%AE%" E6% A8% 99% E6% 8C% 87% E5% AE% 9A% E4% BB% 98% E3% 81% 8D% E3% 83% A2% E3% 83% BC% E3% 82% BF% E3% Gemäß "83% BC% E5% 88% B6% E5% BE% A1)" können bis zu 29 Zielpositionen angegeben werden. Wenn Sie also so viele Positionen angeben können, können Sie diese in einer komplizierten Flugbahn verschieben. ist.
Da es möglich ist, mehrere Positionen anzugeben, muss ein Array von Positionen erstellt werden, um sich entlang dieser Position zu bewegen. Es gibt jedoch keine elegante Möglichkeit, alle Positionen einer komplizierten Umlaufbahn mathematisch zu berechnen (ich habe die Mathematik übersprungen ...), daher spezifizieren Menschen die Positionen von Hand. Ich habe ein Skript geschrieben, das die Koordinaten liest, wenn der Toio-Kernwürfel fest auf die Matte gedrückt wird und die untere Taste gedrückt ist, sie an die Host-Seite sendet, die Koordinaten in der Reihenfolge auf der Host-Seite aufzeichnet und sie dann in Text ausgibt. Verwenden Sie diese Option, um einige Koordinaten der Punkte auf der Umlaufbahn zu erfassen, die Sie verschieben möchten. Dieses Mal habe ich vor, die beiden Toio-Kernwürfel gleichzeitig zu bewegen, um zu entkommen, aber ich werde manuell eine Flugbahn erstellen, in der die beiden Toio-Kernwürfel wahrscheinlich kollidieren und nicht kollidieren.
Verteilen Sie einige Koordinaten entsprechend der Flugbahn, die Sie bewegen möchten. Wenn Sie angeben, dass Sie sich bewegen möchten, während Sie die Richtung ändern, anstatt nach dem Ändern der Richtung zur nächsten zu wechseln, ist die Flugbahn nicht linear, sondern bis zu einem gewissen Grad gekrümmt.Ich habe das erstellte Koordinatenarray in setMotor4 () eingefügt und versucht, es zu verschieben, aber es funktioniert nicht. Ich fragte mich, warum und als es sich um RasPi (raspbian) BLE-Kommunikation handelte, betrug die Standardgröße der MTU 23 Oktette und die tatsächliche Nutzlast nur 20 Oktette. Sie wurde gesendet, wenn viele Zielkoordinaten eingegeben wurden, um ein langes Paket zu erstellen. Es stellte sich heraus, dass die Ursache nicht getan zu sein scheint. Je nach System scheint es, dass die MTU-Größe von BLE erhöht werden kann, um mit einer Länge von mehr als 23 Oktetten zu kommunizieren, aber selbst wenn ich verschiedene Dinge mit RasPi ausprobiert habe, war es völlig nutzlos. Wir haben nicht viel Zeit, um live zu gehen, also werden wir die Erweiterung der MTU-Größe aufgeben und zu etwas wechseln, das wir mit 20 Oktetten machen können. Im Bereich von 20 Oktetten können nur 2 Sätze von Zielkoordinaten eingegeben werden. Glücklicherweise benachrichtigen Sie Fliegen, wenn der Toio-Kernwürfel die Zielkoordinaten erreicht, und es war eine Spezifikation, dass zusätzliche Zielkoordinaten auch während der Bewegung gestapelt werden können.
Ich habe es so implementiert. Auf diese Weise konnten wir die Bewegung des Nähens mehrerer Koordinaten nacheinander realisieren. Passen Sie danach, während Sie das zuvor gesammelte Koordinatenarray platzieren und den Toio-Kernwürfel tatsächlich bewegen, die Parameter des Geschwindigkeitswertes und des Geschwindigkeitstyps an (z. B. schrittweise Erhöhung der Geschwindigkeit), sodass er sich so bewegt.
Ich schieße auf den Ziel-Toio-Kernwürfel, aber ich dachte, dass die folgenden drei als Trefferurteil verwendet werden könnten.
Erstens habe ich mich nicht entschieden, warum ich den Toio-Kernwürfel (das Ziel oben) abschießen soll, aber irgendwie nerf, [Rubber gun](https: / Ich dachte vage nach Die Zeichnung des Ausstellungsraums wurde jedoch veröffentlicht (2020/1/24), und als ich sie betrachtete, war es ein Tisch mit einer Breite von 180 cm und einer Tiefe von 45 cm. Es ist sehr klein, weil auch andere Personen ausgestellt werden. Es stellt sich heraus, dass es fast keine Entfernung zum Schießen gibt. Da Sie aus nächster Nähe schießen, ist Nerf zu mächtig. Wenn Sie ihn treffen, wird das mit Lego erstellte Ziel getrennt, sodass es unbrauchbar ist. Die Luftpistole vom Zylindertyp ist schwieriger zu zielen als ich erwartet hatte und es ist sehr mühsam, weil es sich um einen einzelnen Schuss handelt. Aus diesem Grund habe ich mich für eine Gummipistole mit durchgehendem Ring entschieden.
Als ich die Kollisionserkennung, Horizontalerkennung und Haltungserkennung des Bewegungssensors versuchte, während ich tatsächlich mit der Ringgummipistole schoss, fiel der Toio-Kernwürfel nicht in dem Maße herunter, in dem der Ringgummi traf. Daher wird die Haltungserkennung nicht übernommen. Testen Sie, ob die Vibration um den Gummiring durch Kollisionserkennung und horizontale Erkennung unterschieden werden kann. Wir haben die Winkelschwelle für die horizontale Erkennung und die Schwelle für die Kollisionserkennung auf verschiedene Weise angepasst und uns letztendlich entschieden, nur die Kollisionserkennung zu verwenden. Es wurde jedoch festgestellt, dass sich dieser Schwellenwert in Abhängigkeit vom Gewicht des auf dem Toio-Kernwürfel platzierten Werts ändert. Daher musste ein Wert festgelegt werden, der dem Ziel entspricht. Bei dieser Methode gibt es auch das Problem, dass selbst wenn die Toio-Kernwürfel miteinander kollidieren, dies als Treffer gewertet wird. Es ist jedoch schwierig, die Flugbahn so zu steuern, dass sie nicht kollidieren. Diesmal schließe ich meine Augen. Ich habe es gemacht.
Ich wollte mit LEGO ein Ziel machen, aber ich konnte es nicht zu groß machen, also aufgrund meiner Gedanken LEGO Minecraft % B4-LEGO-30393-% E3% 83% 9E% E3% 82% A4% E3% 83% B3% E3% 82% AF% E3% 83% A9% E3% 83% 95% E3% 83% 88- % E3% 82% B9% E3% 83% 86% E3% 82% A3% E3% 83% BC% E3% 83% 96% E3% 81% A8% E3% 82% AF% E3% 83% AA% E3 % 83% 83% E3% 83% 91% E3% 83% BC / dp / B07NDXJNPH / ref = pd_aw_sbs_21_1 / 356-7905405-7675543? _Encoding = UTF8 & pd_rd_i = B07NDXJNPH & pd_rd_r = bff3a3a6-0f6e-4187-bd60-25e75d4c1c8f & pf_rd_r = BSHJKFDE63WHGZ46HVZM & psc = 1 & refRID = BSHJKFDE63WHGZ46HVZM]) wurde übernommen. Sie können eine Geschichte hinzufügen, um die herumlaufenden Kriechpflanzen zu besiegen, und die Idee ist, dass sie bei Grundschülern beliebt sein wird.
Da das Ziel festgelegt wurde, passen Sie die Aufprallerkennungsschwelle entsprechend dem Gewicht und die Geschwindigkeit so an, dass sie beschleunigt oder verlangsamt, während Sie sich entlang der Flugbahn gemäß der Koordinatenanordnung bewegen. Wenn Sie zu plötzlich anhalten oder die Richtung ändern, wird dies als Schock behandelt und es wird ein "Treffer". Stellen Sie ihn daher auf eine moderate Geschwindigkeit ein. Wenn es "getroffen" wird, drückt es aus, dass es trifft, indem es sich einige Sekunden lang dreht. In dieser Zeit haben wir Ad-hoc-Maßnahmen hinzugefügt, z. B. zu verhindern, dass es als "Treffer" behandelt wird, selbst wenn es erneut trifft.
Ich wollte einen Soundeffekt machen, wenn ich "traf", also hatte ich Pimoronis Speaker pHat zur Hand, also habe ich ihn in RasPi integriert. Ich habe versucht, es anzurufen. Wählen Sie die Tonquelle auf der kostenlosen Materialseite "Soundeffektlabor" und wählen Sie den Ton "Boyoyon". Ich habe Pygame für die Wiedergabe auf Python verwendet. ("Sound mit Pygame lesen und abspielen")
Als es ein "Hit" wurde, wollte ich die Partitur hinzufügen und irgendwo anzeigen, aber ich dachte, es wäre langweilig, ein HDMI-Display normal anzuschließen, also bekam ich es auf der Tokyo Maker Faire PIXOO Ich habe versucht, es anzuzeigen, aber ich habe aufgegeben, weil ich die Kontrolle über RasPi mit Bluetooth nicht erreichen konnte. Ich hatte zufällig ein Zeichenanzeige-LCD-Modul mit LCD2USB Spezifikationen, also habe ich es geändert, um es stattdessen anzuzeigen. Nun, in der Produktion hat sich der Spieler die Partitur überhaupt nicht angesehen, aber es war praktisch für mich, das Skript zu starten / zu stoppen und den Status zu sehen.
USB port 1602 LCD Module for Pi (LCD2USB) Python-Bibliothek für LCD2USB https://pypi.org/project/lcd2usb/
Obwohl es nahe daran ist, auf das Ziel zu zielen, um sich zu bewegen, dachte ich, dass es für kleine Kinder schwierig sein würde, und entschied mich daher auch für einen einfachen Modus. Das Ziel soll stationär sein, und wenn es trifft, drückt es "Treffer" aus und bewegt sich dann schnell an einen anderen Ort und stoppt.
[](http://www.youtube.com/watch v = OX2hYu_99j0)
Es endet, wenn Sie es mehrmals treffen.
Das Ziel bewegt sich, sobald das Spiel beginnt. Es bewegt sich entlang einer festen Flugbahn, aber auf den ersten Blick fühlt es sich an, als würde es zufällig davonlaufen. Punkte werden hinzugefügt, wenn der Gummiring trifft, und er endet, wenn alle vorgegebenen Bewegungsmuster ausgeführt wurden.
[](http://www.youtube.com/watch?v=Su- xKABGDyg)
Ich wollte die Position und Geschwindigkeit der Umlaufbahnen der beiden Toio-Core-Würfel so einstellen, dass sie nicht miteinander kollidieren. Wenn jedoch einer von ihnen im Trefferzustand stoppt, verschiebt sich der Laufzeitpunkt und es kommt irgendwo zu einer Kollision. Es gibt Zeiten, aber ich habe beschlossen, mich nicht darum zu kümmern.
Jedes Spiel startet das Skript jedes Mal neu. Wählen Sie beim Betrachten des Alters des Kunden aus, ob der Start einfach oder etwas chaotisch ist.
Ich habe verschiedene Anpassungen vorgenommen und es geschafft, es am 14. Februar am Tag vor der Produktion zum Laufen zu bringen.
Fortsetzung von Teil 2
Recommended Posts