Projekt Malroboter

Hallo Zusammen,

ich bin neu hier und habe mich hier im Zuge eines geplanten Projektes mit einem ESP32 angemeldet. Vielleicht kann ich etwas Hilfe bekommen, vielleicht ist die Sache aber auch für Andere interessant.

Ich würde gerne ein kleines Roboterauto bauen, welches mehr oder minder zufällig über eine große umrandete Fläche fährt. Die Fläche ist dabei ruhig mehrere Quadratmeter groß und ringsum mit einer Bande versehen. Die Position des Autos auf der Fläche muss (irgendwie) ermittelt werden soll auf einer Bitmap im Speicher nachgeführt werden. Wenn das Auto an eine Stelle kommt, bei der auf der Bitmap eine „1“ gesetzt ist, soll das Auto nach unten auf der Fläche einen farbigen Punkt hinterlassen. Das „Pixel“ der Bitmap wird dann gelöscht. Das Auto soll solange umherfahren, bis die Bitmap vollständig „leer“ ist.

Das Auto soll dabei ganz autonom agieren, es gibt also keine „äußere“ Instanz wie z.B. eine Kamera, die die ganze Szene überblickt und auch keinen externen Computer der irgendwas koordiniert.

Am Ende ist geplant, das mehrere identische Autos auf derselben Fläche umhergefahren, wobei jedes Auto für eine andere Farbe zuständig ist. Die jeweiligen Bitmaps sind pro Farbe vorbestimmt und sollen z.B. auf einer SD-Karte gespeichert werden, die man vorher ins Auto steckt. So soll dann mit der Zeit ein großes farbiges Bild entstehen. Die Farbpunkte auf der Bodenfläche, die eine Leinwand ist, müssen dabei nicht perfekt in einem Raster liegen, sondern dürfen ruhig leicht variabel sein oder sich auch überlappen. Die Punktgröße liegt dabei zwischen 5 und 10 mm im Durchmesser.

Angedacht ist ein Differential-Antrieb, also zwei große Räder die sich unabhängig voneinander drehen können, so ist lenken und sogar drehen auf der Stelle möglich. Hinzu kommt ein drittes kleines Stützrad vorne, welches sich frei drehen kann.

Soweit die Idee…

Folgendes habe ich schon gemacht: Ich habe mir ein ESP32-Kit mit allerhand Sensoren gekauft, die Arduino IDE installiert (Mac) und eine Reihe von Tutorials durchgespielt um ein Gefühl für die Sache zu bekommen. Das hat ganz gut funktioniert.

Dann habe ich mit der Stromversorgung begonnen. Vier 18650 Akkus, zwei parallel, die dann seriell verschaltet, liefern 7,4 V und haben hoffentlich genug Kapazität für die Sache. Ein passendes 2S BMS dazu, das 8 A leistet, schützt die Akkus beim Entladen und mit einem USB-C 2S Lademodul können die Akkus geladen werden. Das habe ich bereits gebaut und das funktioniert auch wie gedacht.

Jetzt wird es schwieriger und theoretisch. Ich habe mir zwei ausreichend leistungsfähige DC-Motoren ausgesucht nebst passenden Treibern. Dazu ein Boost Converter ausreichender Leistung der die Quellspannung auf die nötigen 12 V bringt. Ein Buck Converter liefert 3,3 V und versorgt den ESP32 sowie die Encoder der Motortreiber. Alle GND sind zusammengeführt und vor den Motortreibern sind passende Elkos zur Entstörung.

Durchaus möglich, dass ich mich technisch nicht immer korrekt ausdrücke, ich hoffe man versteht trotzdem was ich meine.

Das ist der aktuelle Schaltplan, so wie ich meine, dass es reicht und richtig sein könnte. Es fehlt hier noch die Sensorik und anderes, aber für Erste konzentriere ich mich mal auf das Fahren.

Nun würde mich interessieren, was Andere davon halten. Ist das soweit in Ordnung und praktikabel?

Interessantes Projekt mit doch recht vielen Herausforderungen für einen Einstieg.
Das aller wichtigste wird die Positionserfassung sein in diesem Projekt. Das Fahrzeugt sollte ja dann im Idealfall in Mäander Form über die Fläche fahren.
Der Erste Gedanke ist das du auf jeden Fall den Drehgeber an dem Antrieb richtig aus zu werten und in die Ansteuerung übernehmen, damit sich beide Räder exakt gleich bewegen.
Hier ist die Auswertung und die Reaktion auf Abweichung elementar wichtig, so dass dein Malroboter immer "gerade" fährt und nicht nach Links oder Rechts driftet macht.
Altertnativ kann man an dieser Stelle auch Schrittmotoren arbeiten da diese exakte/definierte Bewegungen machen über die Schritte und diese dann auch per Drehgeber auswerten das hier keine Schritt-Verluste stattfinden.

Am einfachsten ist auf jeden Fall kleine "Arbeitspakete" Projektschritte machen.

  • Roboter richtig geradeaus fahren lassen
  • Erfassung der Position auf der Fläche
  • Wie setzte ich mehrere Referenzpunkte da keine Absolute Position möglich auf einer Fläche wie beim "3D Drucker"
  • Auslesen der Info aus der Bitmap
  • Vergleich "Wo bin ich in Real" "Wo bin ich auf der Bitmap" / Was mache ich bei Abweichung (Fehlererkennung)
  • Fabsprühmechanik und was dazu gehört.

Wenn der erste Robot läuft:

  • Gegenseite Überwachung vor Crash
  • Wie fahre ich aneinander Vorbei und bin dann wieder in der "Spur"
  • Wie weiß jeder Robot wo die anderen sind und wann ist es "gefährlich" Stichwort ESP-NOW

Das nur mal so ein paar Gedanken.
Vor allem beim Anfang nicht zu viel auf einmal gleichzeitig denn dann wird Trouble Shooting hart.

Gruß
DerDani

Edit: Verständlichkeit

Nee,

  1. VM von DRV8871 darf nur einmal angeschlossen werden, siehe
    Pinouts | Adafruit DRV8871 Brushed DC Motor Driver Breakout | Adafruit Learning System

  2. Ob Du 3,3 V an "VIN" vom ESP32 anschließen darfst, mußt Du überprüfen!

Ich sehe das Hauptproblem darin, dass jedes "Auto" seine Position und Ausrichtung selber ermitteln muss.
Wie gedenkst du das zu lösen?

Auch die Kollisionsvermeidung, bei mehreren Autos scheint mir auf den ersten Blick schwierig zu werden.

Ich würde mich mal mit den Technik des Apfelmännchen beschäftigen. Auch unter " Mandelbrot-Menge bekannt.

Wenn man da die richtigen Parameter eingibt, kann man feine Bilder in einen Bereich erstellen, ohne das man zu viel sich mit den Sensoren beschäftigen muss.
Habe ich in meiner Jugendzeit mal auf den C=64 gemacht. War voll cool.

Ansonsten hast du bei deinen Bild ein logischen Fehler, bzw. musst ein Stiftwechsler einbauen. Zu viele Punkte ergeben nämlich ansonsten meist eine 1-Farbe Fläche kein Bild. ;)

Gruß

Pucki

Vielen Dank für deine Gedanken.

Ja, die Positionserfassung wird bestimmt nicht einfach. Generell will ich vermeiden das Auto linear, also in geraden Bahnen die Fläche abfahren zu lassen. Das Auto soll zufällig und chaotisch über die Fläche fahren. Ich dachte nach einer zufälligen Wegstrecke oder nach Kontakt mit Wänden oder einem anderen Auto eine neue zufällige Richtung zu wählen, sodass die Autos wirklich einfach kreuz und quer fahren.

Vielleicht kann man zur Positionsbestimmung Sensoren an die Ecken des Rahmens platzieren, und die Entfernung messen, sodass sich die Position durch Triangulierung berechnen lässt. Ein Kontakt mit der Wand liesse sich auch zur Korrektur nutzen. Vielleicht ist es auch sinnvoll zuerst die Fläche einmal am Rand abzufahren, um die Anzahl der Schritte bzw. die Länge der Wege als Referenz zu benutzen. Die Encoder in den Motoren sind vielleicht auch nützlich. Die Präzision der Lage, bzw. der gesetzten Farbpunkte muss nicht sonderlich hoch sein. Aber soweit bin ich ja noch nicht :)

Ich glaube auch, dass ein Auto nicht wissen muss, wo die anderen Autos gerade sind. Auch ob ein Auto gegen eine Wand fährt, oder gegen ein anderes Autos stösst, muss nicht unterschieden werden, er ändert danach einfach nur seine Richtung. Denke ich :)

Freilich muss ich erstmal soweit kommen, überhaupt ein Auto fahren zu lassen, bis dahin wird es noch andere Probleme zu lösen geben, da bin ich sicher.

Hi agmue,

das habe ich noch nicht so recht verstanden. Ich dachte der erste VM/GND wäre für die „Last“, also die 12 V für den Motor, und der andere „VM/GND“ für die Logik, in meinem Falle 3,3 V. Ok, das muss ich mir nochmal genau durchlesen.

Bei VIN sagt das gelieferte Referenzblatt zum ESP32 3,3 V. Aber das checke ich auch nochmal.

Besten Dank.

Dazu habe in der Antwort an volvodani schon was geschrieben.
Aus der Sicht eines Autos sollte egal sein, ob da noch andere Autos fahren. Eine Kollision, egal ob anderes Auto oder Wand, hat nur einen Richtungswechsel zur Folge. Die Positionsbestimmung wird schwierig, da bin ich sicher. Das gehe ich an, wenn ich soweit komme, überhaupt ein Auto fahren zu lassen. Triangulation scheint mir weitere Versuche wert zu sein.

Apfelmännchen und Mandelbrot finde ich nett, aber das Bild was entstehen soll, ist vorbestimmt. Das ist eher künstlerisch ein Haufen bunter Punkte, die vorher nach Farben getrennt werden. So entsteht pro Farbe ein Bitmap welches nur die Lage der Punkte definiert. Das Auto mit der roten Farbe bekommt dann das Bitmap mit den Pixeln für die roten Punkte usw.

Ich denke, da hast Du falsch gedacht, zumindest verstehe ich die Beschreibung von Adafruit anders:

You do not have to provide a logic level power supply to the chip

Es gibt nur VMOTOR.

Wenn Du uns verrätst, um welchen ESP32 es sich handelt, könnten wir eventuell mitdenken :wink:

Bei den umfangreichen Aufgaben mußt Du eventuell einen ESP32 mit mehr Speicher einsetzen. Ich verwende beispielsweise einen ESP32-S3 N16R8.

Fals ich das gut verstehe, jedes Auto soll nur auf eine Farbe reagieren, es gibt Farbnsoren für ESP was die taugen weiß ich nicht

OK.

Die Positionsberechnung würde ich durch eine mitlaufende Kugel machen.
Schau mal ob du irgendwo eine alte PC-Maus findest auf den Flohmarkt die noch mit einer Kugel arbeitet. Die baust du einfach unter dein Auto und liest damit die Position aus. Oder du machst dich über die Funktionsweise einer modernen Maus schlau.

Dann musst du nur noch auf deiner Fläche ein 0-Punkt bestimmen, denn das Auto erkennt. Danach kannst du sehr genau positionieren. Die üblichen Methoden mit Ultraschall / Infrarot halte ich für zu ungenau. Wobei gilt, je teurer je genauer.

Dürfen die Autos (wenn mehr als 1 Auto) miteinander "reden". Dann könnten die ihre Position ja melden.

Gruß

Pucki

Das wird nicht gelingen!

Wieso nicht.
Das hat fast 50 Jahre mit einer PC-Maus geklappt. Ich muss halt nur die 2 Lichtschranken auslesen. Aber fairer weise muss ich zugeben, das ich von einer glatten Fläche ausgehe, was aber in Fall des TO wohl Voraussetzung ist.

Gruß

Pucki

Ist das eine Frage?

Wenn ja, dann:

Wieso nicht?

Schlupf.

Ehrlich gesagt, so genau weiß ich das gar nicht. Ich habe bei Amazon das Elegoo ESP-32 Super Starter Kit gekauft. Das müsste dann das DEV Kit V1 sein. Auf dem Chip selbst steht nur EPS-32. Ich zeige mal ein Bild...

Wenn der Speicher nicht reicht oder es erforderlich sein sollte, nehme ich halt einen anderen.

Ich glaube, das hast du falsch verstanden. Das Auto braucht dafür keine Sensoren, es braucht keine Farbe erkannt zu werden. Das Auto setzt nur einen Farbkleks ab, wenn das Bitmap an der entsprechenden Stelle ein gesetztes Bit hat. Welche Farbe das gerade ist, spielt für das Auto keine Rolle.

Eine geniale Idee. Die werde ich mir merken und auf jeden Fall genauer untersuchen. Bin gespannt warum @combie meint, das würde nicht gelingen.

Habe ich doch schon gesagt!

Ja, Danke, das hatte sich überschnitten.