PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pfadplannung mit webcam



cyberbot
17.04.2004, 21:25
Hallo,

ich möchte folgendes tun. Eine webcam montiert auf meinem roboter nimmt bilder auf. bilderkennung und so ist kein problem. ich suche allerdings noch nach algorhytmen um aus dem bild einen pfad zu einem bestimmten ziel (möglichst schnell) zu konstruiren. diesen pfad soll der roboter dann abfahren.

danke schon mal für eure hilfe

Manf
17.04.2004, 21:33
Was wird denn auf den Bildern zu sehen sein?
Bekannte Objekte zur Orientierung oder soll sich der Roboter Bild für Bild durch eine unbekannte Umgebung "hangeln"?

"Zu einem bestimmten Ziel": Wodurch bestimmt? Durch die Positon oder durch das Aussehen?

Gibt es Pfade? Wodurch bestimmt? Ist es eine natürliche Umgebung oder eine Laborumgebung?

Ist noch alles offen, oder gibt es schon ein paar Festlegungen?

Manfred

cyberbot
17.04.2004, 21:43
Hallo Manfred

der roboter soll von einem vordefinierten punkt (in einer beliebigen orientation) starten und zu einem Ort A (gekennzeichnet dadurch dass einen neon lampe in der nähe ist) fahren, hier soll er einige manipulationen durchführen und dann weiter zu einem nächsten Ort B (wiederum durch eine neon lampe gekennzeichnet) fahren und wieder einige manipulationen durchführen [falls weitere manipulationen notwendig sind, muss er wieder zurück zu A und dann zu B usw.] Auf seinem Weg trifft er auf Hindernisse (die soweit ich bis jetzt weiss Ziegelsteine sind und sich deutlich von der Bodenfarbe unterscheiden) die er umfahren sollte. Damit dies möglichst schnell geschieht, dachte ich ein Bild aufzunehmen um daraus die kürzeste / schnellste Strecke die er fahren soll abzuleiten. Da die gesamte fläche etwa 3x7m² ist, denk ich dass ein bild reicht um zumindest in die Nähe der Zielpunkte zu kommen zumal der Abstand wischen A und B nur etwa 3-4m ist. Alternativ/zusätzlich könnte ich auch mit den sharp laser sensoren (5hab ich) arbeiten aber das halte ich für deutlich langsamer. ich habe ausserdem noch eine linearkamera, us-sensor und ev. eine zweite webcam.

Manf
17.04.2004, 21:55
Das bedeutet, der Roboter fährt in einer abgegrenzten Umgebung, die für die Aufgabe hergerichtet ist. Die Aufgabe ist in einer Wettbewerbsumgebung, unter Beobachtung, (also keine Alltagstauglichkeit mit Schutzmaßnahmen gefordert).
Wenn Ziegelsteine die Hindernisse sind, dann ist die übrige Umgebung wohl eine weiße, ebene, rutschfeste Fläche?
Das Ziel ist durch eine Neolampe gekennzeichnet, so richtig in gelb?
(Je mehr man weiß desto mehr kann man einbringen.) Ist der Einsatz der Kamera Bedingung oder eine eigne Strategie?
Ist es nur Ziel die Aufgabe zu lösen oder muß man alles aufbieten um besser, schneller? zu sein als als die Konkurrenz?
Manfred

cyberbot
17.04.2004, 22:05
genau, abgegrenzte wettbewerbsumgebung, wie gesagt, ca 3x7m², begrenz durch eine 30cm hohe wand (wenn ichs richtig im kopf hab). der boden ist in einer hellbraunen/beigen farbe die ziegelsteine wahrscheinlich grau, so dass man sie gut auf einem bild unterscheiden können sollte. Die Beiden Neons befinden sich in den diagonal gegenüberliegenden ecken, die jeweiligen ziele ca 1m von ihnen entfernt. der kameraeinsatz ist als eine strategie zur kollisions vermeidung gedacht um langsames herumfahren mit der sharp sensoren zu vermeiden und sofort die gesamte bahn zwischen zwei punkte mehr oder weniger vorgeben zu können (vorsteuerung) die sharp sensoren und der us werden dann nur noch zur evtl, korrekture bzw. für andere aufgaben eingesetzt. das ziel ist es schneller als die konkurrenz zu sein, und die navigation ist eigentlich "nur" eine nebenaufgabe, die hauptaufgabe sind die manipulationen, aufladen bei A und abladen bei B.

danke fürs interesse

Manf
17.04.2004, 22:31
Kann man die Ziegelsteine eigentlich auch mit aufladen und irgendwo abladen, damit man die Stecke frei hat?
Oder konkret: "bilderkennung und so ist kein problem" für einige vielleicht schon. Du hast offensichtlich Erfahrung damit, einige im Forum wohl auch. Mit welchen Mitteln soll die Bildanalyse gemacht werden, oder was ist schon klar und auf welcher Ebene siehst Du offene Punkte?
Rastergröße, Zahl der Zieglesteine, festgeklebt, Routing? Bilderkennung Umsetzung, Störunterdrückung? Fangen wir irgendwo an! Bis wann muß es fertig sein?
Manfred

cyberbot
17.04.2004, 22:44
die ziegelsteine dürfen weder bewegt, noch zerstört werden.
was die bildverarbeitung betrifft (es wird in c programmiert): ich kann im bild herausfinden (mit filtern, edge detection etc.), wo sich (im bild) die zeigelsteine befinden und ihnen und ihrer direkten umgebung z.b. den wert 0 zuweisen. die neons erhalten z.b den wert 10, alles andere den wert 1.
was mir jetzt nicht unmittelbar klar, ist ist, wie ich dem roboter klar mache dass er jetzt genau dahin fahren soll. ich meine, ich habe da die matrix mit lauter 0 und 1 und der 10, aber wie bestimme ich den perfekten weg durch diese 1en? moment, es kommt mir gerade eine Idee: ich gebe für neon einen grösseren wert, z.b. 100, und die pixel in der direkten umgebung erhalten 99, die pixel in deren umgebung (nach aussen hin) dann 98, (ausgeschlossen jene mit einer 0) usw. der robo muss nun nur noch in aufsteigender reihenfolge die pixel auf dem boden abfahren. ist das realisierbar? wo siehst du evtl. probleme bei der implementierung? was muss beachtet werden wenn von den pixeln auf die tatsächliche entfernung zurückgerechnet wird (durch höhe und neigung der kamera) und die motoren angesteuert werden?
cyberbot

Manf
18.04.2004, 06:23
Vom Startfeld ausgehend, den jeweils angrenzenden Nachbarfeldern den nächstgrößeren Wert zu geben ist ein üblicher Algorithmus.
Parallel dazu geht man gleichzeitig von Ziel aus und dekrementiert entsprechend bis man sich trifft.
Man kann dann von diesem Berührungspunkt aus den Weg absteigend zum Start und aufsteigend zum Ziel finden.

Die Verzerrung des Bildes durch den Betrachtungswinkel sollte man so gut wie möglich korrigieren. Es wäre sicher am einfachsten, wenn man hierfür die Ränder der Fläche heranziehen kann. Wie hoch ist denn die Kamera über dem Boden? Sind von dort aus alle Hindernisse zu sehen, oder überdecken sie sich auch?
Sind die oberen Flächen der (gleichhohen?) Ziegelsteine von den Seitenflächen zu unterscheiden?
Manfred

Johannes
18.04.2004, 08:47
Moin Cyberbot,
kannst du vielleicht mal ein Kamerabild posten? Dann können wir uns besser vorstellen, wie das ganze aussieht.

Ich glaube, dass der Algo mit den steigenden Pixelwerten zu überdimensioniert für das Problem ist. Ich würde eher in die Richtung gehen, nur in einer Pixelreihe (z.B. der untersten) zu schauen, wo kein Stein ist. Der Roboter muss sich dann immer so drehen, dass in der Mitte der Pixelreihe Boden zu sehen ist.

Stehen die Steine einzeln herum? Oder bilden sie auch Sackgassen?

Gruß
Johannes

cyberbot
18.04.2004, 09:20
@manfred

es ist noch nicht ganz sicher, wie hoch die kamera über dem boden sein wird, ich denke mal es wird ein kompromiss zwischen genauigkeit(sprich auflösung) und möglichst viel information. ich denke aber, dass es gehen sollte, dass man wenigstens alle hindernisse (gleichgrosse ziegelsteine) zwischen zwei punkten erkennbar machen kann. (ob sie sich überdecken hängt dann davon ab wie nah sie beieinander sind und wie der kamerawinkel ist) Die Seitenflächen sind ebenfalls wie braun/beige wie der boden und werden auf dem bild wahrscheinlich nur teilweise zu sehen sein.

@Johannes
ich hab leider noch kein kamerabild, ausserdem steht der parcours noch gar nicht ;-)
ich denke mit nur einer Pixelreihe auslesen wird der roboter nicht zwangsläufig am gewünschten endziel ankommen, sondern "nur" den hindernissen ausweichen. die steine an sich stehen an einem vorher nicht festgelegten ort, so dass sie prinzipiell auch sackgassen bilden könnten, was ich allerdings für nicht sehr wahrscheinlich halte.

Es sind auch insgesamt nur sechs Steine (wenn ichs richtig im kopf hab), darum denk ich, dass es nicht zu kompliziert sein sollte, dass man schnell an ihnen vorbei navigiert.

Johannes
18.04.2004, 09:35
Ok, aber wenn es nur 6 Steine sind, dann sollte der Unterschied zwischen einfachem Ausweichen und Berechnen des kürzesten Weges gering sein. Bedenke auch, dass eine Berechnung Zeit braucht. Die Frage ist, wie oft du den Weg neu berechnen willst. Um so weiter die Steine entfernt sind, um so schwerer wirst du sie von einander trennen können. Eventuell sind also mehrere Berechnungen nötig. Aber ich kann das schlecht einschätzen.

Gruß
Johannes

P.S. Was für einen Roboter hast du denn? Wo findet die Bildauswertung statt?

18.04.2004, 10:40
wir haben ein robbi mit pentium 166 auf dem linux läuft, darauf wird die auswertung stattfinden uns sollte eigentlich recht schnell gehen, da in der zeit sonst nichts gerechnet wird. ich denke mal dass es maximal zwei bilddurchläufe brauchen wird, je nach positionierung der kamera, da der gesamte platz, wie oben beschrieben, nur etwa 3x7m² ist.

cyberbot
18.04.2004, 10:41
da war dann wohl ich ;-)

Johannes
18.04.2004, 10:55
Warst du schon mal hier in diesem Thread: https://www.roboternetz.de/phpBB2/viewtopic.php?t=1256 ?

Mich würde mal interessieren, wie ihr die ganzen Sachen mit der Stromversorgung gelöst habt, welche Akkus, etc...

Gruß
Johannes

NumberFive
18.04.2004, 12:43
Hallo

ganz ehrlich bei dir kling das so also währe bild erkennung in zwei minuten programmiert. wenn du schon so weit bist steiene und die
neonlange zu erkennen wurde mich ehrlich gesagt die Software
sehr interessiern vor allem wie schnell bist du ?
Zur Nav:
wenn du weist wo das licht ist kannst du doch auch bestimmen ob es rechts oder in der linke hälfte ist dann kannst du den robi drehen bist es in der mitte ist. dann kennst du die richtigung in die du muß. dann bild erkunng aus voll gaß bis die sharb ein hinderniss erkennen. cam an nach rechts oder links drehen 90° langsam fahren bis seitliche ir melder frei melden drehen bis lampe in der mitte und weiter. oder denke ich da jetzt zu einfach ?

Gruß

Johannes
18.04.2004, 13:48
Hallo Numberfive,
mich wundert das ganze auch einwenig bzw. es interessiert mich ;-)

Gruß
Johannes

cyberbot
18.04.2004, 16:00
zur bilderkennung, da ich weiss was auf den bildern zu sehen sein wird, nämlich der boden, die neons, oder das ziel und diese auch deutlich (d.h. verschiedene farben) unterscheidbar sind ist es nicht schwer diese objekte zu erkennen. ein bild (digital) ist ja im wesentlichen nur eine matrix von pixeln die z.b. die farbwerte der einzelnen pixel speichert. jetzt kann man ja sehr leicht über diese matrix iterieren und auswerten ob der jeweilige pixel zu einem hindernis oder zum boden gehört. hat man gar das ziel im blick, kann man durch den oben beschrieben algo sofort einen pfad generieren und schenll abfahren. soweit zur theorie ;-)
Die roboterplatform ist uns vorgegeben, da die navigation nicht die hauptaufgabe darstellt, sondern "nur" einen teil.

NumberFive
18.04.2004, 21:18
hallo,

habe ich das jetzt richtig verstanden die software exitiert nicht?
wenn dem so ist dann progrmmier sie erst einmal wenn
ich das falsch verstanden habe dann will ich die haben. Denn dann denk ich komplett verkehrt und programmiere totalen overhead.
Ich will hier niemanden entmutigen weill wenn es tut ist das bestimmt die nächste generation von robis wenn die software nicht exitiert helfe ich natürlich mit mein wissen aus aber mich würde schon mal dann die ganze beschreibung interresieren. denn ich denke ne cam kann man heute noch nicht forder zu mindetens nicht von private leuten.

18.04.2004, 21:46
hallo NumberFive

was ich bis jetzt gemacht habe war einen kanten erkennungs algo (google -> canny edge detector) und eine sog. wavefront planner in einer gegebenen karte (siehe oben: algo mit werte für pixel vergeben) in MatLab programmiert, da der code relativ ähnlich zu dem von C ist und es sogar Konvertierungsprogramme von M nach C gibt denk ich dass ich es schaffen könnte eine kombination von beiden zu schreiben. Wo ich dann noch bedenken habe, ist von dem pfad den ich berechne zurückzurechnen (möglichst genau) auf die steuerung der motoren um diesen pfad dann tatsächlich abfahren zu können.
übrigens ist für diesen zweck eine einfache, handelsübliche webcam gedacht, also nichts teueres oder so.

gruss
cyberbot

NumberFive
18.04.2004, 22:03
die Cam spiel fast keine rolle ic denkda kann man fast alles nehmen.
mit dem cany schaffe ich auch nur lastmal den canny auf ein normles bild von 240X340 punkten los das dauert. ich habst gemessen bei mir fast 2 minuten bis der zu rück kommt. das i für den robi viel zu langsam.
ist alles in c++ geschrieben un das bild liegt bei mir als array of float vor oder arry of byte jenach dem. die erbnisse kannst du dir in dem oben genaten therad mal ansehen. hast du bilder von deine ergbnissen ?

Gruß

cyberbot
18.04.2004, 22:14
hmm, müsste sie (die m-files) suchen ist schon ne weile her. was für einen prozessor hast du auf deinem robbi? davon hängt die geschwindigkeit ja schliesslich auch ab.

gruss