Roboter

  • Moin,

    möchte hier auch mal mein Projekt vorstellen um ggf. auch Anregungen zu erhalten.


    Habe mir letzte Woche einen RaspberryPi 4 beschafft und habe bisschen gebastelt.

    Das Grundmodel bildet der Cybot aus der Zeitschrift RealRobots von 2002, nach dem Prinzip: Kaufe alle zwei Wochen etwas für viel Geld und nach 1000 Ausgaben hast du was cooles (Ja, dafür ging mein Taschengeld damals drauf).


    Der ursprüngliche Roboter hatte Ultraschallsensoren, Lichtsensoren sowie einen "Linie folgen Funktion". Jedoch wurde ein Großteil der Datenverarbeitung in den Prozessoren getätigt, wodurch es einfacher ist, die Sensoren durch aktuelle Module zu ersetzen, anstatt die alten zu reaktivieren.


    Ich habe lediglich die Motoren, Fahrgestell, Motorplatine sowie die für LEDs und Buzzer behalten, den Rest übernimmt der Pi4.



    Aktueller Stand:

    Aktuell kann ich das Gefährt mit der Wiimote, bzw. dem Joystick vom Nunchuk fernsteuern und per Knopfdruck fertige Texte auf dem LCD-Display anzeigen lassen bzw. LEDs oder passiven Buzzer ansteuern.

    Das Display gibt auch Anweisungen bzw. Rückmeldung zum Verbinden der Wiimote.


    Aktuelle Probleme: Die Motoren laufen mit 9V (Batterien), hier muss ich mir noch was überlegen um die Spannung/Geschwindigkeit von Pi aus zu steuern. Außerdem sind die Motoren logischerweise nicht gebremst, was aktuell ein präzises fahren erschwert.


    Nächste Stufe:

    Ich habe mir Ultraschallsensoren bestellt, um ein automatisches Fahren ohne Kolisionen zu ermöglichen.

    Zusatzprojekt: Objekterkennung durch umfahren und analysieren der Objekte (Ist es eine Wand oder liegt etwas im Raum?)


    Geplante Stufen:

    Neues Fahrgestell: Mindestens vierrädrig und mit mehr Platz.


    Kamera: Zur Fernsteuerung ohne Sicht. Mit OpenCV Objekterkennung realisieren.


    Greifarm: Arm um Objekte zu greifen.

    Problem hier: Um es sinnvoll zu nutzen sind Servos jenseits der "Bastlergröße" notwendig und daher sehr teuer.

    Alternative: einzelner Greifer, der vorerst lediglich Objekte greifen und ggf. hinter sich herziehen kann.



    Aus Kostengründen wird nach den Sensoren wohl die Kamera der nächste Schritt sein oder ein selbst gebauter Greifer.



    Leicht utopisches Ziel:

    Der Roboter soll Objekte erkennen, und Gezielt bestimmte Objekte greifen können. (Z.B. "Such den Raum nach einer vollen Bierflasche ab und bring sie mir")




    Erste Frage an jemanden mit mehr Erfahrung.

    Ich spiele mit dem gedanken, einen Kompass einzusetzen um automatisch gerade Strecken zu fahren oder präzise Kurven zu fahren. Jedoch habe ich bei meiner Recherche nicht wirklich einen guten Chip dazu gefunden. Mir wird überall der HMC5883L empfohlen, jedoch ist dieser wohl nicht mehr zu bekommen und für den überall verfügbaren QMC5883L gibt es wohl noch keine einfach einzubindende Bibliothek. Hat da jemand eine Empfehlung für ein Magnetometer? Ist dies überhaupt sinvoll, da diese ja auch auf äußere Einflüsse reagieren? Hat jemand erfahrung, wie genau die sind?


    Alternativ würde ein neues Fahrgestell mit höherwertigen Antrieben ermöglichen über die Drehzahlen Informationen über Richtungsänderungen zu geben um so z.B. genaue Drehungen um 90 ° oder 180 ° zu ermöglichen, weswegen ich den Punkt, präzises Fahren, erst mal ausklammern würde.




    Grüße

    Bene

  • "Such den Raum nach einer vollen Bierflasche ab und bring sie mir"

    Endlich mal ein Projekt mit einem Sinnvollen Ziel. :thumbup:

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Schoenes Bastelprojekt. Einen Zahn muss ich dir aber ziehen: auch wenn du durch bessere Antriebe die Manoevrierfaehigkeit erhoehst - "dead reckoning", oder im deutschen Koppelnavigation, bei der man aus der geplanten Bewegung die Position bestimmt, sind zum scheitern verurteilt. Auch kleine Fehler durch Schlupf und Unebenheiten sowie numerische Integration sorgen ueber eher kurz als lang dafuer, dass du keine Ahnung hast, wo du bist.


    Abhilfe schaffen SLAM-Verfahren. Dafuer benutzt du zB QR-Codes auf Hindernissen, die du gut erkennen kannst, und weil du Form und Groesse kennst, gibt es in der OpenCV Routinen, um die Kamerposition aus aus einer solchen Aufnahme rueckschliessen kannst.

  • Endlich mal ein Projekt mit einem Sinnvollen Ziel. :thumbup:

    Man muss ja vorallem jetzt unabhängig werden.


    Schoenes Bastelprojekt. Einen Zahn muss ich dir aber ziehen: auch wenn du durch bessere Antriebe die Manoevrierfaehigkeit erhoehst - "dead reckoning", oder im deutschen Koppelnavigation, bei der man aus der geplanten Bewegung die Position bestimmt, sind zum scheitern verurteilt. Auch kleine Fehler durch Schlupf und Unebenheiten sowie numerische Integration sorgen ueber eher kurz als lang dafuer, dass du keine Ahnung hast, wo du bist.


    Abhilfe schaffen SLAM-Verfahren. Dafuer benutzt du zB QR-Codes auf Hindernissen, die du gut erkennen kannst, und weil du Form und Groesse kennst, gibt es in der OpenCV Routinen, um die Kamerposition aus aus einer solchen Aufnahme rueckschliessen kannst.

    Das habe ich mir schon gedacht, deswegen ja die Idee mit dem Kompass oder im Freien GPS.

    Mir ist schon klar, dass bei 3x in der Kurve um 1° abweichung schon dazu führt, dass ich nicht mehr weiß wo ich bin.


    QR-Codes zum testen sind eine sehr gute Idee, darauf würde ich in der finalen Version jedoch verzichten wollen, da das zu spezifisch in der Umgebung ist. Markante Objekte erkennen (z.B. die Tür ist vorne links und der Tich direkt hinter mir) und daraus Rückschlüsse ziehen ist ja im Grunde auch die Art und Weise, wie wir Menschen uns orientieren und das habe ich auch schon überlegt.

    Da muss ich mich aber erstmal mit der Kamera und OpenCV ausßeinander setzen, wie man das verwirklichen kann.


    Ich will aber erstmal Schritt für Schritt vorgehen und mich mit der Programmierumgebung vertraut machen.

  • GPS ist nicht genau genug, und der Kompass eher auch nicht durch Stoereinfluesse. Vor allem aber gibt der dir auch nur die Ausrichtung (bestenfalls genau auf 1-2 Grad laut Datenblatt), nicht die gefahrene Entfernung.


    Und auch wenn du natuerlich recht hast, dass ein QR Code (oder andere spezifische Eigenschaften der Umgebung) einer Generalisierung im Weg stehen - das ist trotzdem das Vorgehen, dass heutzutage ueblich ist. Freige Navigation hat noch *niemand* geknackt (glaub mir, ein guter Freund arbeitet als Lead-Engineer fuer eine selbstfahrende Auto-Firma), und wenn du dich da nicht erstmal bescheidest, wirst du nur vor der Wand enden. Eine andere Einschraenkung ist die Annahme einer sehr ebenen Flaeche & Entfernungssensoren, und dann ein schrittweise geupdatetes Modell. So machen das die besseren Roombas & Co. Damit faehrst du aber auch nicht ueber die Strasse.

  • GPS ist nicht genau genug, und der Kompass eher auch nicht durch Stoereinfluesse. Vor allem aber gibt der dir auch nur die Ausrichtung (bestenfalls genau auf 1-2 Grad laut Datenblatt), nicht die gefahrene Entfernung.


    Und auch wenn du natuerlich recht hast, dass ein QR Code (oder andere spezifische Eigenschaften der Umgebung) einer Generalisierung im Weg stehen - das ist trotzdem das Vorgehen, dass heutzutage ueblich ist. Freige Navigation hat noch *niemand* geknackt (glaub mir, ein guter Freund arbeitet als Lead-Engineer fuer eine selbstfahrende Auto-Firma), und wenn du dich da nicht erstmal bescheidest, wirst du nur vor der Wand enden. Eine andere Einschraenkung ist die Annahme einer sehr ebenen Flaeche & Entfernungssensoren, und dann ein schrittweise geupdatetes Modell. So machen das die besseren Roombas & Co. Damit faehrst du aber auch nicht ueber die Strasse.

    Ganz automon wird er natürlich nicht fahren können.

    Und verschiedene Updates sind natürlich geplant und die QR-Codes werden definitv bei der Steuerung per Kamera der erste Schritt sein


    Als erstes soll er auch mit den Ultraschallsensoren z.B. einen Raum "abmessen" und dann schaue ich weiter, was ich mit den Daten mache.

    Mir schwebt da vor, dass er z.B. einen rechteckigen Raum abfährt, sich die Maße merkt und dann selbstständig in die Mitte fährt. natürlich wird er die nicht genau treffen, aber ich könnte damit schon mal die Genauigkeit messen, wenn ich den Versuch X mal wiederhole.



    Erweitern würde ich das dann damit, dass er dann mit der Kamera in bestimmten Bereichen Objekte sucht.


    Also: "Fahre in Quadrant X und suche dort Objekt Y" Dann weiß er sicher nicht mehr genau wo er ist und müsste sich vor der nächsten Aufgabe einen Referenzpunkt suchen.


    Oder andersherum: Er fähr nach einem Muster den Raum ab und kann dann mit einer gewissen Tolleranz (Entfernungs- und Richtungsberechnung über angenommene Geschwindigkeit) sagen, in welchem Quadranten er das Objekt gefunden hat.

  • Na dann. Munter ans Werk. Es gibt diverse Paper und mit dem ROS (Robot Operating System) auch schon viele fertige Bausteine, um sowas umzusetzen.

  • Na dann. Munter ans Werk. Es gibt diverse Paper und mit dem ROS (Robot Operating System) auch schon viele fertige Bausteine, um sowas umzusetzen.

    Danke, werde mich bzgl. ROS mal einlesen.



    Uptade:


    Nun ist er kein ferngesteuertes Auto mehr, sondern man kann fast schon wirklich Roboter nennen.


    Mit den HC-SR04 Ultraschallsensoren, ist er jetzt in der Lage automatisch durch die Gegend zu fahren, ohne irgendwo gegen zu fahren.


    Es gibt zwar noch kleinere Probleme beim Erkennen von "schmalen" Objekten, wie z.B. Stuhlbein, jedoch denke ich wird das wohl auch noch an der Positionierung der Senosoren liegen, da sie nicht alles abdecken.


    Außerdem habe ich das Problem, dass die Abfrage der Ultraschallsensoren manchmal "hängt", das ist nach ersten Beobachtungen jedoch nach Erschütterungen passiert (schnelle richtungswechsel) weswegen es sein kann, dass die Verbindungen auf dem Breadboard nicht ganz sauber sind.


    Also nächstes werde ich versuchen mit den Sensoren etwas "nützliches" zu tun, wie z.B. Länge einer Wand ausmessen etc.

    Dies ist aktuell jedoch nicht ganz so einfach, da ich aktuell die Geschwindigkeit nicht regulieren kann, dafür müsste noch ein L293D angeschafft werden.

  • Du kannst mit Positionierung nur so viel erreichen. Und darfst auch nicht vergessen, dass ein breiter Sensor zwar gut vor Kollision schuetzt, aber wenig zu einer guten Kartenbildung beitragen kann. Eine Strategie, um hier zwei Fliegen mit einer Klapp zu schlagen, ist "active sensing". Also den Sensor bewegen. Entweder durch Gesamtbewedung des Systems, oder zB mit einem Pan/Tilt Servo.

  • Ich habe noch einen Sensor übrig, den ich zentral in die Mitte setzen könnte.

    Einen kleinen Servo, hätte ich auch zur Verfügung, da habe ich jedoch Bedenken bzgl. der Frequenz.

  • Ja, und wenn du ihn nicht schwenkst, kannst du die Bereiche nicht sehen, die der Sensor niemals abdeckt. Was genau daran ist besser?


    Du musst das schwenken natuerlich in Abstimmung mit der Fahrt tun. Je schneller die Fahrt, desto schnelle muss der Sweep werden. Was natuerlich Grenzen hat, mechanisch als auch vom Funktionsprinzip des Sensors her. Und die gemessenen Werte muessen Positionskompensiert werde. Aber mit einer Frequenz von 2-4Hz, die das Servo eigentlich schaffen sollte, bekommst du einen recht guten Ueberblick, wenn der langsames Schrittempo faehrt. Selbst wenn du nur auf Kollisionsvermeidung aus bist, ist das active sensing einem statischen ueberlegen.

  • Selbst wenn du nur auf Kollisionsvermeidung aus bist, ist das active sensing einem statischen ueberlegen.

    Was genau ist denn daran genau überlegen?


    Habe damit halt noch wenig erfahrung, aber ich würde sagen, dass eine dauerhafte Überwachung eines großen bereiches mit mehrere identifizierbaren Segmenten, sicherer ist, als eine zeitlich limitierte Überwachung der einzelnen Segmente.


    Ich denke, dass eine Kombination am zielführendsten ist.


    Oder in kritischen Bereichen, wie dem Vorrausbereich, mehr Sensoren um alles abzudecken.


    Dadurch habe ich zur Kollisionswarschnung einen breiten Bereich abgedeckt und kann zur "Kartenblidung" nur einzelnne verwenden.


    Aber ja, so brauche ich paar mehr GPIOs

  • Wenn du nur breite Sensoren hast, wie zB die klassischen Roomba Anstossbalken, dann kommt es sehr darauf an, was du dann als Strategie im Fall einer Kollision waehlst. Durch so einen Sensor hast du kaum Detail-Information ueber deine Umgebung. Die gewinnst du halt mit active Sensing. Wenn deine einzige Strategie in dem Fall "zufaellig wegdrehen & das beste hoffen" ist, wie die das gemacht haben - dann reicht das. In dem Moment, wo du da geplant raus willst, oder von vorne herein gar nicht erst rein willst, ist eine hoeher aufgeloeste Karte besser. Die bekommst du aber mit deinen breiten Sensoren nicht.


    Natuerlich ist es *noch* besser, alles zu kombinieren. Oder gleich einen Laserscanner zu benutzen, wo du mit >10Hz 240 Grad mit >1000 Abtastungen bekommst.

  • Wenn du nur breite Sensoren hast, wie zB die klassischen Roomba Anstossbalken, dann kommt es sehr darauf an, was du dann als Strategie im Fall einer Kollision waehlst.


    Aber auch mti einer breiten aufgebauten Anordnung von Sensoren, kann ich sagen ob das Hindernis links, schräg links vorne, genau vorraus, oder sonst wo ist.

    Oder habe ich da jetzt einen Denkfehler?

  • Grob, ja. Wenn dir das reicht, ist ja super. Dann hast du was du willst. Aber du bist doch derjenige, der sagt, das dir kleinere Objekte entgehen. Du brauchst also entweder mehr Sensoren, oder eben active sensing. Und letzteres wird üblicherweise feiner aufgelöste Informationen liefern. Natürlich mit dem trade off, dass du Zeit brauchst, einen sweep durchzuführen.

  • Grob, ja. Wenn dir das reicht, ist ja super. Dann hast du was du willst. Aber du bist doch derjenige, der sagt, das dir kleinere Objekte entgehen. Du brauchst also entweder mehr Sensoren, oder eben active sensing.


    Mich hat halt deine vorherige Aussage, dass active sensing vielen sensoren immer überlgen sei irritiert.


    Das ein beweglicher Sensor oder so viele Sensoren, dass die alles abdecken, besser sind als Sensoren, die nicht alles abdecken ist natürlich klar...

  • Wir kommen hier in dialektische Details. Ja, wenn du 1000 Sensoren hast, kannst du 1000 Datenpunkte gleichzeitig aufnehmen. Dann darfst du dich aber auch damit beschaeftigen, wie du Cross-Talk zwischen denen unterbindest. Die Aussage ist also nur im Kontext des hier praesentierten Roboters, und ahenlichen Projekten gueltig. War das jetzt so entscheidend?

  • Und die hier dargestellten Sensoren haben einen Abdeckbereich von ca. 30° also kann man die 90° im Vorrausbereich mit drei Sensoren gut abdecken.


    Tut mir Leid, wenn du dich auf den Schlips getreten fühlst, wenn ich nach einer erläuterung frage, wenn du eine Behauptung in den Raum stellst. Wollte dich damit in keisnter Weise angreifen.


    Da mein Sensor, der übrig war offensichtlich defekt ist (zeigt nur 0.00... bzw. negative Werte) und ich gerne bastle habe ich mich mit der Variante mit einem Sensor vorne auf einem Servo außeinander gesetzt.


    Hier komme ich jedoch nicht weiter bei der Frage, wie ich den Servo dauerhaft bewegen kann und parallel die Sensoren abfragen und Motoren ansteuern kann.


    Edit: Habe es hinbekommen, aber bin mit meiner Kösung nicht so zufriegen, aber mir fällt spontan keine elegantere Lösung ein.


    wirklich gut funktioniert es leider auch nicht.


    Edited once, last by b3nE ().