KillerKosti
11.11.2021, 18:35

+2Mindstorms 51515 mit Python Script und PS4 Controller steuern

Guten Abend,

Da ich selber wenig Material gefunden habe, würde ich hier doch einmal gerne etwas dazu schreiben. Bin momentan noch am Handy, werde aber noch den Threads mit Links,Code und Fotos anreichern.

Langweilige Vorgeschichte:

Ich habe bald wieder Winterpause und bin deshalb sowieso zu Hause und dachte - fang ich halt Mal wieder mit Lego ab (was ich zuletzt vor gefühlt 10 Jahren gemacht habe als der Motorisierte Raupenbagger auf dem Markt war (8043).

Hab die letzten Jahre durch Emergency Wuppertal (eine Mod für Emergency 5) viel mit C++ zutun gehabt und bin wohl deshalb bei Mindstorms gelandet. Den 51515 habe ich nach langem hin und her genommen, da er Bluetooth, weniger Gewicht und Motoren mit absoluter Nullpunktstellung besitzt (ernsthaft,wie geil ist dass denn???). Und den kannste sogar mit dem PS4 Controller steuern - Take my Money Lego .

Und dann kam ein bisschen die Ernüchterung:

Ich baue halt den fahrenden Roboter (M.V.P) mit dem Aufsatz zum Schießen. Das bauen ging auch flott von der Hand und der Roboter verbindet sich prima über Bluetooth (sogar noch besser über USB). Hab mir so das erste Scratch Programm angeschaut und war erstmal ein bisschen ratlos - also ernsthaft da willst du anfangen zu programmieren und das vorgegebene Programm hat schon Hardcoded "Schalter" drin, bei denen man nicht wirklich weiß, wie sie funktionen (z.B. die Kalibrierungsfunktion für die Lenkung). Finde ich immer noch ein bisschen schade.
Als nächstes hab ich den Dualshock Controller genommen und das Programm geladen, bei dem man mit dem Controller fahren kann. Ging bis auf kleine Verzögerungen beim Tastendrücken doch ganz gut.
Wollte das dann über das Handy laufen lassen und habe erst dann gemerkt, dass das Programm irgendwie gar nicht auf dem Mindstorms drauf ist... nach Recherche habe ich dann mitbekommen, dass man für Fernsteuerung im Streaming-Modus sein muss und das deshalb das Programm nicht auf dem kleinen Brick ist (da kein Download stattfinded).
Über Android habe ich dasselbe Programm laufen lassen und was passiert? Die Controllerbelegung klappt nicht - die analogen Schultertasten werden nicht erkannt. Alle Knöpfe sind irgendwie woanders - vieles funktioniert einfach nicht... und das fand ich doch schon sehr sehr ärgerlich!
Willste halt Python nehmen und dann stellt man erstmal fest - wow es gibt kein offizielles Lego Projekt (z.B. die 5 kleinen Roboter die in der 51515 Box sind), zu denen auch nur 1 Zeile Code existiert und das ist schon mega traurig. Oder?

Das Projekt:

Anfangs wollte ich eine direkte Verbindung zwischen PS4 Controller und dem Brick hinbekommen. Ich kenne mich aber mit Bluetooth nicht aus und mit Python erst recht nicht. Bei meiner Recherche habe ich aber einen interessanten Blog gefunden How to Remote Control your Mindstorms Roboter und zumindest ein bisschen mit der APP und dem Code rumgespielt. Am Ende habe ich die Verbindung zwischen beiden Geräten aber nur 2 x bei ca. 30 Versuchen hinbekommen und sie war schnell wieder weg, weil ich in der App den falschen Button gedrückt habe - welcher einen Motor ansteuert, der nicht angeschlossen war. Aber immerhin habe ich da Mut bekommen und zumindest gesehen, dass der Roboter Bluetooth kann (und dass sogar ohne pybricks und ubluetooth Libary).

Tage später bin ich auf die Idee gekommen, den Code noch einmal auszuprobieren, aber statt mit dem Smartphone wollte ich den Roboter mit einem Bluetoothfähigen Mikrocontroller koppeln. Den ESP32 - er besitzt auch schon eine Biblothek um den PS4 Controller zu handeln und ich habe auch sogar noch eine IR-Diode mit der ich Powerfunction Signale senden könnte.

Prinzipiell habe ich eine Verbindung zwischen den drei Geräten schon realisieren können, habe aber bisher nur in den Log vom Brick geschrieben und noch keine Motoren angesteuert. Die Verbindung geht auch recht schnell, bisher muss man nur darauf achten, erst das Brick Programm auzuführen, dann den ESP32 zu resetten und dann den Controller per PS-Taste zu verbinden

Ich werde in den kommenden Motoren anschließen und vlt sogar schon meinen Lego Kran.

Der nächste Schritt wäre sich über eine stromversorgung vom ESP32 gedanken zu machen. Hatte schon die Idee, dass ich das Lego Powered Up LED-Kabel opfer und mit einem Tiefsetsteller die Spannung auf 5 oder 3,3 V bringe (keine Ahnung ob das funktioniert). Müsste da auch mal nach den Specs schauen

Ansonsten könnte man noch viele bunte Dioden anschließen, dann leuchtet es schön beim Vorwärts und Rückwärts fahren und so weiter

LG

Der Code ist halt ein bisschen dirty
Python Brick Code [TEST]
ESP32 Code
PS4 Controller mit ESP32 verbinden
PS4 Controller Button Events



Lok24 , JuL gefällt das


Lok24
11.11.2021, 18:44

Als Antwort auf den Beitrag von KillerKosti

+1Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Hallo,

klingt interessant, aber verstanden habe ich das nicht.

Der Gamecontroller schickt Befehle an den ESP und der dann an das Hub?
Der ESP fähert im Roboter mit oder ist nur "irgendwo" im Raum?



KillerKosti gefällt das


KillerKosti
11.11.2021, 23:19

Als Antwort auf den Beitrag von KillerKosti

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Das ist das Objekt was ich fernsteuern möchte:

Ein Kran mit 8 Motoren angelehnt an den 42009 Ultimate. Der Turm hat 4 Pf Motoren und 2 Reciever.Die Basis 3 medium Winkelmotoren und den großen Powered Up Technic Motor (XL)-die Basis wird also vom Mindstorms Brick gesteuert.



[image]



Der Esp32 ist der Mittelsmann zwischen der Fernsteuerung (Dualshock Controller) und sowohl dem Brick über Bluetooth als auch den 2 Recievern über IR (mittels IR Senderdiode). Den Teil habe ich aber noch nicht getestet. Für Bt ist es eigentlich egal wo der Esp liegt, aber wegen dem IR Part würfe ich ihn gerne mitfahren lassen. Ich habe theoretisch unter dem Drehkranz noch viel Bauraum dafür

Größenvergleich Esp32 mit Steckbrett

[image]



Technicmaster0
12.11.2021, 09:29

Als Antwort auf den Beitrag von KillerKosti

+1Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Moin.
Das mit der direkten Steuerung ohne Gerät dazwischen ist tatsächlich gar nicht so einfach. Bisher geht das nur in Python mit der Lego Powered Up Remote (88010) und die hat vermutlich nicht genügend Tasten. Außerdem weiß ich nicht, ob die Bibliotheken dafür noch aktuell sind. Pybricks ist nicht nötig.
Für die Kommunikation zwischen der Außenwelt und dem RI könnte es außerdem hilfreich sein, sich https://github.com/brickl...ub-Communication-Hacks anzuschauen. Inzwischen kann man in der Scratch-Programmierung Befehle über BLE verschicken und die halten sich fast an den Standard, sind also auch mit anderen Geräten schickbar.

Zur Spannungsversorgung kann man grundsätzlich den RI hub nehmen. Es gibt für die Motoren 2 Pins, an denen 9V anliegen (in der Praxis eher 7.2V) und 2 Pins mit 3.3V (können auch mal nur 3V sein). Außerdem gibt es 2 UART Pins.

Last but not least: Mit dem Farb- und Abstandssensor (88007) aus LEGO Boost kann der Roboter Erfinder theoretisch auch Power Functions Signale versenden. Unterstützt wird das aber nicht offiziell und die Reichweite des Signals ist relativ gering. Für Python hab ich mal eine Bibliothek geschrieben: https://github.com/Tcm0/SPIKELibs



KillerKosti gefällt das


Lok24
12.11.2021, 10:10

Als Antwort auf den Beitrag von KillerKosti

Editiert von
Lok24
12.11.2021, 10:56

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Hallo,

vielen Dank, das macht es klarer.
Also ist der Weg
Controller -> ESP -> BT-RI / IR-PF

Dann dient der ESP aber nur als Protokollumsetzer.
Ein anderer Weg wäre das RI-HUB durch ein technic-Hub zu ersetzen, dann wäre die gesamte Logik im ESP, und für den gibt es C++ Bibliotheken für den ESP. Aber da sind die neuesten Bibliotheken offnbar nicht für alle Controller verfügbar.
Das habe ich hier schon gezeigt mit dem M5Stack ATOM.
Ansonsten so wie technimaster0 beschrieben hat.



KillerKosti
13.11.2021, 11:33

Als Antwort auf den Beitrag von KillerKosti

Editiert von
KillerKosti
13.11.2021, 11:39

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Das die Bluetooth Protokolle öffentlich sind, habe ich schon gesehen und beim Boost, wurde da ja schon ein bisschen rumgebastelt. Ich muss aber auch ein bisschen gestehen, das ist mir schon irgendwie wieder ein bisschen zu techy (gewesen). Aber ich habe zumindest ne Ahnung, wie es umsetzbar wäre.

Irgendwie träume ich auch schon von nem zweiten RI Kit, aber alleine der Baustein mit Akku ist ja bei ca. 120€ gelistet und dann denke ich mir halt auch nöööö.

Das mit den Pins klingt ja schonmal gut. Irgendwie auch hier schade, dass man so ein Kabel für 10€ opfern muss (also selber Kabel crimpen habe ich noch nie gemacht und auch kein Zubehör dafür, so dass mir die "offizielen" Steckkontakte von Aliexpress auch net so viel nützen). Ich meine der ESP32 kostet ja auch 10€ und da kannste halt viel mehr mit machen

Das mit dem Sensor habe ich tatsächlich noch nicht gefunden. Super! (Habe meine Diode sowieso verpolt weil 5V mit S für Signal vertauscht und jetzt ist die hinüber ) und muss auf Ersatz warten.

Das Projekt mit dem Atom finde ich auch toll. Und sehr schön, dass es auch andere Leute gibt, die nicht alles mit dem Handy bedienen wollen

LG

Ich denke morgen habe ich dem RI beigebracht, die Werte zu nutzen um die Motoren laufen zu lassen

PS: Wie ist es denn so mit der Programmierbarkeit vom Technic Hub? Wäre vlt noch ne günstigere Alternative (wobei dann hätte ich auch gerne wieder Akkus). Dann wäre vlt der Knickgelenkvolvo für 150€ net so schlecht zum ausschlachten.



Lok24
13.11.2021, 12:15

Als Antwort auf den Beitrag von KillerKosti

Editiert von
Lok24
13.11.2021, 13:01

+1Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Hallo,

danke für die Rückmeldung.

KillerKosti hat geschrieben:

PS: Wie ist es denn so mit der Programmierbarkeit vom Technic Hub? Wäre vlt noch ne günstigere Alternative (wobei dann hätte ich auch gerne wieder Akkus). Dann wäre vlt der Knickgelenkvolvo für 150€ net so schlecht zum ausschlachten.


Also: das Hub kostet in D ab 12,-- €, nein das ist kein Tippfehler.

https://www.bricklink.com...2DE%22,%22iconly%22:0}

Deine vorhandenen Motoren kannst Du anschliessen.

Ein technic-L kostet unter 10,--
https://www.bricklink.com...2DE%22,%22iconly%22:0}

Die aus dem RI unter 20,--

Ein M5Stack Atom kostet in D um die 18,-- (eckstein)

Als Akkus benutze ich Eneloop AA . Die kann ich auch wechseln und brauche nicht das Modell an den Strom zu hängen, für mich der Grund kein RI zu kaufen. Aber das ist weltanschaulich.
Es gibt auch Lösungen von LEGO-Freunden mit Lipos fertig zu kaufen.

Das technic-Hub macht BLE.
Es gibt für den ESP eine Bibliothek, legoino
https://github.com/corneliusmunz/legoino
Das ist dann C++ und die Intelligenz im ESP.

Das Protokoll ist auch offengelegt.

Oder eben Pybricks, das ist dann python, da gibt es auch schon rudelweise Beispiele, das macht auch dein RI-Hub, dass Programm wird dann fest in das Hub geladen. Aber ob man dem einen Controller beibringen kann? LEGO - FB geht.



KillerKosti gefällt das


KillerKosti
14.11.2021, 11:10

Als Antwort auf den Beitrag von KillerKosti

Editiert von
KillerKosti
14.11.2021, 11:12

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Also soweit geht nun alles, was ich mit Bluetooth steuern kann (also Stützen ein/aus und hoch /runter). Lenkung und Antrieb.

Der ESP hat irgendwo noch ein Problem, bei dem er sich aufhängt. Ich vermute, dass der Speicher zu klein ist, wenn er mit dem PS4 Controller gekoppelt wird und zwischendurch schon Signale sendet[momentan Dauerbetrieb ] (da es dann auftritt) - und darunter leidet im Moment die Frequenz, mit der Signale verschickt werden. Das muss ich noch ein bisschen Optimieren, weil ich hatte mir schon so ca. 10- 20 Signale pro Sekunde (10-20 Hz) statt 4 Signale gewünscht. Aber das sollte machbar sein.

Habe auch schon angefangen ein bisschen zu spielen, so dass er jetzt piept, wenn er rückwärts fährt und der ESP auf dem Steckbrett eine weiße Diode ansteuert.

Ansich bin ich sehr zufrieden vor allem mit der stufenlosen* Regelbarkeit von Antrieb und Lenkung... und auch ein bisschen stolz . Ich freue mich schon auf die IR-Dioden und das Multimeter, die am Montag kommen sollen.

Danke auch für die Links. Hatte den Technikbrick bei 36€ im Kopf. Eneloops sind auch gut - also mir ist es am Ende egal, was für ein Akku hauptsache wiederaufladbar. . Die Motoren für 10- 20 sind auch nice.

*also es gibt schon Stufen aber halt 100 - das ist ja fast wie analog



Lok24
14.11.2021, 11:43

Als Antwort auf den Beitrag von KillerKosti

Editiert von
Lok24
14.11.2021, 11:43

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Hallo,

schön dass es tut.

KillerKosti hat geschrieben:

(da es dann auftritt) - und darunter leidet im Moment die Frequenz, mit der Signale verschickt werden. Das muss ich noch ein bisschen Optimieren, weil ich hatte mir schon so ca. 10- 20 Signale pro Sekunde (10-20 Hz) statt 4 Signale gewünscht. Aber das sollte machbar sein.

Ja, sicher, zwei Methoden:

- nur senden wenn die Geschwidigkeit sich ändern soll
(also alten Befehl merken, nur neuen senden wenn anders)
- und wenn es hurtig gehen soll immer in 2er oder 3er Schritten hochschalten

Falls es mal ein Filmchen geben sollte.....



Ruppie
14.11.2021, 12:58

Als Antwort auf den Beitrag von KillerKosti

Editiert von
Ruppie
14.11.2021, 12:59

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

KillerKosti hat geschrieben:

Also soweit geht nun alles, was ich mit Bluetooth steuern kann (also Stützen ein/aus und hoch /runter). Lenkung und Antrieb.

Der ESP hat irgendwo noch ein Problem, bei dem er sich aufhängt. Ich vermute, dass der Speicher zu klein ist, wenn er mit dem PS4 Controller gekoppelt wird und


Auch wenn es zunächst Abschreckend wirken mag, ich empfehle die in Bezug auf Ordnung und Programmorganisation mal einen Blick auf die Verwendung von FreeRTOS.
Dazu gibt es eine Reihe einfacher Tutorials(auch im CT MAKE Magazin) und ein empfehlenswertes Buch aus dem Elektor Verlag
Wenn du glaubst du hast ein größeres Resourcenproblem empfehle ich dir zudem die Verwendung einer ESP32 Variante mit 2 Kernen (die haben wohl nicht alle).
Solltest du der Meinung sein 4MB Flash genügen nicht, den ESP32 gibt es auch mit 8MB , meines Wissens.



KillerKosti
19.11.2021, 07:24

Als Antwort auf den Beitrag von KillerKosti

Editiert von
KillerKosti
19.11.2021, 07:25

Re: Mindstorms 51515 mit Python Script und PS4 Controller steuern

Kleines Statusupdate:

[image]


Komme gerade nicht so viel zum basteln. Habe gestern dann Mal eine LED zerschnitten und nach dem Pinout hier im Forum so verbunden,als ob ein Zugmotor dran wäre. Die Leitungen Motor2 und GND sind dann an einen Spannungswandler angeschlossen,der die Spannung auf 5V halten soll. Auf der anderen Seite kommt dann ein USB Kabel (welches auf dem Bild schon wieder abgefallen ist). Und daran ist schlussendlich der ESP32 angeschlossen