Roboter soll mir hinterherfahren

  • Hallo,

    welche Verbindungsart würdet ihr anwenden damit ein Roboter immer einem Punkt hinterher fährt?

    Ultraschall?

    Bluetooth-Feldstärke?

    Infrarot? Wie?

    sonstiger Schall?

    ????


    Bin mal gespannt über eure Meinungen - irgendwie meine ich, dass ich irgendetwas anders ganz einfaches vergessen habe :conf:


    Danke

  • Wie genau soll es denn sein?

    Theoretisch kannst du die GPS-koordinaten deines Handys an den Roboter senden.


    Vll. würde es auch über ein elektromagnetisches Feld gehen, das du erzeugst und dessen Feldstärke der Roboter misst.


    Kamera ist allerdings wahrscheinlich am besten.

  • Am einfachsten ist es, die Richtung mit Ultraschall zu detektieren. Dazu selbst einen Ultraschallsender tragen, der kurze Ultraschallimpulse abgibt. Der Roboter muss 2 Mikrofone haben, damit er durch den Laufzeitunterschied zwischen den beiden empfangenen Signalen die Richtung erkennen kann. Wenn die Schallortung nicht funktioniert, wären Fledermäuse und Eulen längst verhungert und ausgestorben.

  • Egal welche Lösung - am besten wäre wohl ein Rundstrahler in irgendeiner Form den der zu verfolgende Körper auf dem Kopf trägt. Mehrere US-Strahler im Kreis angeordnet oder noch besser wäre irgendein Magnetfeld (Richtantenne dann erforderlich?)


    Gleichzeitig zu messen in welcher Richtung der zu verfolgende Körper steht und ob er sich nähert oder entfernt ist dann eine Zusatzherausforderung.

  • Redest du über eine Anwendung im inneren? Dann nein.

  • Mein Roboter bewegt sich derzeit frei im Raum und geht jedem Hindernis per US-Messung in mehreren Vorausrichtungen aus dem Weg. Wenn ich den Spieß jetzt umdrehe und voraus nach einem Hindernis suche welches in einem breiten Winkelbereich Reflexionen verursacht (Mensch) müsste ich doch die Sache vielleicht grob mal so hin bekommen? So werde ich das jetzt mal probieren wenn von Euch nicht noch geniale Lösungen kommen.

  • Mein Roboter bewegt sich derzeit frei im Raum und geht jedem Hindernis per US-Messung in mehreren Vorausrichtungen aus dem Weg. Wenn ich den Spieß jetzt umdrehe und voraus nach einem Hindernis suche welches in einem breiten Winkelbereich Reflexionen verursacht (Mensch) müsste ich doch die Sache vielleicht grob mal so hin bekommen? So werde ich das jetzt mal probieren wenn von Euch nicht noch geniale Lösungen kommen.

    Ich denke du wirst da so einfach nicht davonkommen. Bau dir erstmal eine Visualisierungen der sensor Ergebnisse, und schau, ob du die so gut unterschieden bekommst. Ein Mensch sind auch nur zwei dicke Stuhlbeine. Ohne ein bisschen Statistik (zb einem Kalman Filter), der eine Zuordnung für verschiedene Objekte über die Zeit erhält, so dass du dann eines davon verfolgen kannst, kann ich mir das zumindest nicht vorstellen.


    Eine IR-basierte Lösung ist da einfacher. Zb mit IR Filterfolie vor der Kamera & dann immer dem Punkt nach.


    Oder eben etwas nehmen, das diese Statistik schon eingebaut hat, wie der correlation tracker.

  • Ich hatte ja vorgeschlagen, Ultraschallsignale auszusenden und die Richtung über die Laufzeitdifferenz zu detektieren. Wenn der Roboter ohnehin Ultraschall zur Hinderniserkennung nutzt, ist das noch einfacher. Dann müssen nur die Impulse des Roboters mitgehört werden und in einer genau definierten Zeit nach dem Suchimpuls ein eigener Impuls gesendet werden. Dazu reicht ein breit abstrahlender Ultraschallsender. Der Roboter erkennt diesen Impuls und dessen Richtung und kann dieses "Hindernis" in seine Hinderniserkennung mit einrechnen.


    Wenn der Roboter immer einem Menschen folgen soll, dessen Körpertemperatur sich deutlich von der Umgebung unterscheidet, könnte man die Verfolgung auch über eine Infrarotkamera mit Mustererkennung machen. Das ist zwar auf der Seite des Roboters erheblich aufwändiger, aber dann muss die Person, der der Roboter folgen soll, keinerlei Vorkehrungen treffen, um sich dem Roboter kenntlich zu machen.

  • Ich hatte ja vorgeschlagen, Ultraschallsignale auszusenden und die Richtung über die Laufzeitdifferenz zu detektieren. Wenn der Roboter ohnehin Ultraschall zur Hinderniserkennung nutzt, ist das noch einfacher. Dann müssen nur die Impulse des Roboters mitgehört werden und in einer genau definierten Zeit nach dem Suchimpuls ein eigener Impuls gesendet werden.

    Und wenn sich der Mensch umdreht?


    Wenn der Roboter immer einem Menschen folgen soll, dessen Körpertemperatur sich deutlich von der Umgebung unterscheidet, könnte man die Verfolgung auch über eine Infrarotkamera mit Mustererkennung machen. Das ist zwar auf der Seite des Roboters erheblich aufwändiger, aber dann muss die Person, der der Roboter folgen soll, keinerlei Vorkehrungen treffen, um sich dem Roboter kenntlich zu machen.

    Und wenn ein anderer Mensch kreuzt oder dazu kommt?

  • Wenn du solche Probleme lösen willst, kommst du um probabilistische Methode nicht herum. Wie ich schon mehrfach schrieb. Dieses Problem ist nicht trivial. Es ist lösbar (es gibt ja zb hinterherfahrende Koffer), aber das sind nicht nur 3 simple Regeln & 20 Zeilen Code.

  • Ok, dann schaue ich mir als relativer Dummy in Sachen Filme und Kamera mal die dlib-Sache an. Kennt jemand für C++ eine fertige Beispielanwendung die ein MP4 "trackt". Das will ich dann erst auf PC und dann auf Raspi zum laufen bekommen.

    Wäre das der richtige Einstieg??

  • Es muss nicht dlib sein, du kannst auch US Signale tracken. Aber dafür gibts noch weniger Beispiele.


    Und hast du den link mal nachvollzogen? Adrian baut üblicherweise gut reproduzierbare Tutorials.

  • Bei US bleibt der schmale Abstrahlungswinkel aus Sicht der HC-SR04. Der Mensch muss dann immer mit der Körperseite, wo der Sender angebracht ist, zum Roboter stehen. Oder gibt es breiter strahlende US-Module?


    Adrian stellt nur Programmausschnitte vor und nur in Python. Ich müsste noch weiter vorne ansetzen mit einem kompletten Programm als Anhaltspunkt.

  • Das sprichwörtlich erste Ding auf der Seite ist ein großer Download Button. Da steckt der gesamte Code hinter.


    Bezüglich des US: da wirst du um einen sweep oder active sensing nicht rumkommen. Eine Kamera hat da natürlich Vorteile. Oder einen der preiswerten Laserscanner für ~80€ die es inzwischen gibt.


    Ah, gerade das mit Python gesehen: das sollte keinen signifikanten Unterschied machen. Und sonst hat die dlib auch Beispiele.

    Edited once, last by MistyFlower59469 ().

  • Und wenn sich der Mensch umdreht?


    Und wenn ein anderer Mensch kreuzt oder dazu kommt?

    Das war eigentlich schon erklärt. Wenn der Roboter das "Hindernis", dem er hinterherfahren soll, erkannt hat, schadet es nicht, wenn der Mensch sich umdreht und sein Signal für einige Zeit ausfällt. Dann folgt der Roboter dem erkannten Hindernis, bis dessen Signal wieder (zum Feinabgleich) verfügbar ist. Ohnehin fehlt die Information, in welchem Abstand der Roboter folgen soll. Das ist für die Auswahl der Sensoren wichtig. (Ultraschall über einen Abstand von mehr als 20 m geht kaum noch, das ebenfalls erwähnte GPS mit Übertragung der Koordinaten kann kleine Abstände nicht mehr sicher auflösen.)


    Mit der Entfernung beantwortet sich auch die Frage, ob überhaupt eine andere Person die Verbindung zum Roboter kreuzen kann. Ist eine solche Störung kurz, fährt der Roboter erst einmal so weiter wie vor der Störung und baut die Verbindung wieder auf, sobald die Störung vorbei ist. Nur wenn die Störung zu lange dauert oder der Mensch inzwischen die Richtung gewechselt hat, kann der Wiederaufbau der Verbindung scheitern. Für diese Fälle müssen Strategien in der Software hinterlegt sein, die die Reaktion der Software festlegen. Das gilt auch bei der Navigation über Wärmedetektion. Wenn eine andere (ebenfalls körperwarme) Person die Bahn kreuzt, ändern sich der Abstand zum "verfolgten" Menschen und dessen Bewegungsrichtung. Dann muss der Roboter die bisherige Bewegung des Menschen extrapolieren und die "Störbewegung" herausrechnen. Dauert die Störung zu lange, kann es auch hier sein, dass das Wiederauffinden des Verfolgten nicht mehr klappt. Was der Roboter dann machen soll (stehen bleiben und Alarm auslösen oder was immer....), muss natürlich auch in der Software hinterlegt sein.