Mecanum-Roboter mit mehreren Modi steuern

Hallo zusammen,

wie angekündigt habe ich mir ein konkretes Projekt überlegt um ein besser in die Materie hinein zu finden.
Ich habe mir bereits einen Mecanum-Roboter gebaut und will ihn mit verschiedenen Modi laufen lassen:

  1. Bluetooth Steuerung - bereits erledigt allerdings mit DC-Motoren nachdem die Motoren dabei waren (werden noch umgerüstet)
  2. Autonomer Modus - in Arbeit (mit Ultrasonic-Sensoren)
  3. Fernzugriff - offen

Jetzt ist meine Frage wie füge ich die verschiedenen Modi so zusammen damit ich am Anfang bei Start Mecanum-Roboter die Auswahl habe welchen Modi ich verwenden möchte? Habe jetzt gerade zwei Sketches die man immer nach Bedarf Hochladen muss. Eine Auswahl auf einem Display mit Taster wäre nicht schlecht. Ich dachte zwecks Übersicht an eine Switch-Case-Anweisung. Bin ich hier auf dem Holzweg oder gibt es zu dem Anwendungsfall schon geschickte andere Lösungen?

Grüße Baril

(deleted)

Hallo Peter,

danke für deine Hilfe. Ich muss leider noch auf ein Bauteil warten aber dann wird getestet.

Grüße
Baril

Bezüglich des Autonomen Modus des Mecanum Roboters habe ich noch eine weitere Frage. Ich habe es bereits geschafft, dass der Roboter mit den Ultraschallsensoren an jeder Seite den Mecanum so zu steuern damit der Roboter nirgends mehr anfährt. Erinnert an einen Staubsaugroboter der im Chaosprinzip die Wohnung saugt.

Ich würde aber gerne den Roboter so steuern das er, wenn er eingeschaltet wird erstmal in eine Ecke fährt (Initialisierungsfahrt) und dann den Raum systematisch in Bahnen abfährt. Hat sowas schon einmal jemand gemacht und gibt es dazu evtl. Beispiele die hier im Forum bekannt sind? Ich meine mich zu erinnern, dass es auch Staubsaugroboter gibt die nach diesem Prinzip arbeiten aber ich weiß nicht wie die Staubsaugroboter funktionieren bzw. ob sie so funktionieren wie ich es mir denke.

Ich hatte mir folgende überlegt: (siehe auch Bild)
0. Initialisierungsfahrt weiß ich noch nicht

  1. Roboter steht in der Ecke (FrontSensor + RechterSensor an der Wand)
    --> Ultraschallsensoren sind so eingestellt, wenn zwei Sensoren <10cm erreicht haben fährt Roboter Rückwärts
  2. Roboter steht in Ecke andere Seite des Raumes (HeckSensor + RechterSensor an der Wand)
    --> Roboter versetzt sich um ca. 30cm nach links und fährt danach Vorwärts die nächste Bahn
  3. Roboter wiederholt seine Schritte bis zum Ende vom Raum

Mögliche Probleme:
--> Orientierung im Raum - Roboter versetzt nicht ganz gerade und fährt schief im Raum
--> Was passiert wenn der Raum schrägen oder andere Unregelmäßigkeiten hat

Gibt es hier andere evtl. klügere Ansätze um das Problem zu lösen?

Grüße
Baril

(deleted)

Hallo Peter,
danke für deine Antworten.
0. Also Bake ist nicht in meinem Sinne nachdem ich gerne hätte das sich der Roboter in verschiedenen Räumen ohne Hilfe zurecht findet. Es wäre vom Prinzip auch egal welche er Ecke anfährt somit müsste die Initialisierungsfahrt eigentlich mit den Ultraschallsensoren funktionieren. Glaube ich zumindest.

  1. Super somit wäre ein bedenken schon einmal aus der Welt.
  2. Ok, also braucht der Roboter noch einen Kompass der im vorgibt in welcher Richtung er unterwegs ist und sobald eine zu große Abweichung vorhanden ist wird eine Kurskorrektur eingeleitet. Werde ich mich mal erkundigen und einbauen.
  3. Ich wollte eigentlich nicht jeden Raum erst vermessen bevor er seine Bahnen ziehen kann. Ich erkundige mich mal wie dies Staubsaugbots das machen vielleicht finde ich etwas heraus.

Das Projekt nimmt auf jeden Fall schon wieder größere Ausmaße an als gedacht :-D…

Grüße
Baril

Gut also die Staubsaugroboter verwenden SLAM - Simultaneous Localization and Mapping das übersteigt den geplanten Umfang des Projektes bei weitem und ich denke auch die Fähigkeiten des Arduinos und meiner eigenen.
Ich denke ich mache mich mal an eine weniger präzise Variante mit den vorhandenen Sensoren und hoffe es funktioniert am Ende des Tages.

Moin Peter,

so bin jetzt soweit mit dem Menü und habe sogar ein LC-Display und Bedientasten dran gebaut. Hab jetzt nur das Problem das mir nur Müll auf dem Display angezeigt wird bzw. jetzt gerade nichts. Habe bereits den Kontrast eingestellt und die I2C-Adresse ausgelesen und eingestellt, allerdings ändert sich nichts an der Anzeige bzw. dem Menü wenn ich die Tasten drücke. Jetzt habe ich ein bisschen gelesen über die Taktrate vom I2C Bus nur verstehe ich nicht genau wie man die richtig einstellt.

Wenn ich es mit…
Wire.setClock(10000);
versuche im setup() ändert sich auch nichts auf meiner Anzeige.

Welche Fehler könnten es noch sein?

Grüße
Baril

Rahmenbedingung:
Arduino Mega
LCD 1602A
LCM1602 Interface

DisplayTest.txt (2.07 KB)

(deleted)

Super hat geklappt und hab auch gleich noch den Fehler beim Code gefunden. Ich hatte mehr als 16 Zeichen verwendet somit ging es dann nicht bzw. nur mit komischen Zeichen.

Danke!

Grüße
Baril

(deleted)

Ich wollte mich mal an die Umrüstung des Mecanum-Roboters auf Stepper Motoren machen.

Ich benutze Accel Stepper, allerdings kann ich keine Funktion ausmachen die man verwendet, wenn man quasi kein Ziel hat für den Stepper hat. Sondern eine unbestimmte Strecke zurücklegen will. Also erstmal ähnlich wie bei den DC Motoren Vorwärts und Rückwärts ansteuern bis ich per Signal stoppe.

Wie geht das bei Stepper Motoren?

Grüße
Baril

(deleted)

Ja gut ok ich dachte das hätte ich schon verstanden. Also muss ich immer eine Mindestzahl von Schritten vorgeben. Aber trotzdem verstehe ich nicht wie es jetzt z.B. bei veränderten Strecken funktionieren soll.
Sagen wir mal ich fahre auf eine Wand zu die unbestimmt weit entfernt ist. Ich will aber kurz vor der Wand stehen bleiben mit Hilfe eines Ultraschallsensors der mir bei 10cm Abstand das Signal zum Stoppen auslöst. Wie realisiert man das mit Stepper Motor?

Wie das mit den MobaTools geht, kann ich dir sagen: Lass den Motor mit rotate(1) drehen bis Du stoppen willst. dann mit rotate(0) anhalten.
Aber grundsätzlich dürfte das auch mit der AccelStepper so gehen, dass man den Zielpunkt erstmal weit weg legt, und dann, wenn man stoppen will auf die aktuelle Position setzt ( bzw. ein klein wenig weiter, damit Platz für den Bremsweg bleibt ).

Tach zusammen,

hab jetzt den vorgeschlagenen Kompass von Peter mal angeschossen und initialisiert.
Dabei ist mir eine Idee gekommen wie ich den Kompass sinnvoll in meine zukünftige Autonome-Steuerung integrieren könnte. Ich dachte mir ich nehme ein einfaches Linienverfolgungsprogramm um mache die Kurskorrektur immer genau dann wenn normalerweise der Schwarz/weiß-Sensor auslösen würde und ich eine zu große Abweichung der Richtung vom Kompass-Modul habe. Somit sollte der Roboter einer geraden Linie folgen.

Was haltet ihr davon? Gute Idee oder nicht?

Grüße
Baril