-         

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 55

Thema: ASURO mit Kamera ferngesteuert

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2

    ASURO mit Kamera ferngesteuert

    Anzeige

    Hallo Zusammen,
    so, jetzt habe ich es geschaft, den ASURO mit einer Kamera fernzusteuern. Es funktiniert zwar noch nicht ganz so schnell, wie bei den Fussbalrobotern der Midsize-Leage, aber immerhin.

    Das Setup:
    - Logitech Quickcam Pro4000, 1m über Boden
    - USB-Infrarot Transceiver daneben
    - SCILAB mit SIP zur Steuerung und Bildverarbeitung

    Zum Test habe ich dem Roboter mal die Wegpunkte des NIkolaushauses vorgegeben und die Bahn aufgezeichnet. Das ganze siehe ein wenig wackelig aus, besonders an der oberen Kante. Bei der oberen Kante bestand das Problem, dass der ASURO am Rand des Erfassungsbereiches der IR-Sendediode gefahren ist und teilweise Kommandos verloren hat. Die IR-Sendediode des USB-Transceivers hat leider nur einen Öffnungswinkel von 17°, sodass der Lichkegel relativ schmal ist. Ich möchte die Kamera und den Sender aber höher hängen, damit der Aktionsradius des ASURO größer gemacht werden kann.

    Die ersten Bilder der Bildverarbeitung habe ich hier gepostet:
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=15731

    Gruss,
    stochri
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken kameranikolaus.jpg  

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    Hallo stochri,

    Gratulation, sieht super aus =D>

    Nur so als Idee: Du könntets noch eine (andersfarbige?) Markierung anbringen oder die LESDs anschalten und detektieren. Dann hast du auch die Orientierung.

    Wieviele Bilder pro Sekunde analysierst du? Magst du ein wenig mehr über die Bilderkennung berichten (fertige Software oder selbst geschrieben)? Im anderen Beitrag erwähnst du SCILAB (habe ich googeln können), aber was ist SIP (23.000.000 Hits, z.T. recht lustig)?

    Gruß Red Baron

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo Red Baron,
    Nur so als Idee: Du könntets noch eine (andersfarbige?) Markierung anbringen oder die LESDs anschalten und detektieren
    Da habe ich zuerst auch dran gedacht. Ich wollte aber schnell zu einem Ergebnis kommen und die Erkennung mehrer Punkte hätte meine Algorithmus gleich etwas komplizierter und störanfälliger gemacht.
    Aber man könnte das Nikolaushaus sowieso nicht zeichnen, wenn man den Winkel des Roboters nicht kennen würde.
    Deshalb bin ich folgendermaßen vorgegangen:

    0. Bestimme den Standort
    1. Fahre einen kleinen Schritt
    2. Lege eine Gerade durch die beiden Punkte
    3. Ermittle den Winkel
    4. Ermittle den Winkel zur Zielposition
    5. Drehe um den Differenzwinkel

    Mit dem Programm http://www.roboternetz.de/phpBB2/vie...=145769#145769 im ASURO kann kann ich nur in ca10° Schritten drehen. Deshalb fährt der ASURO immer einen kleinen Schritt, die Kamera bestimmt dann die Position und korrigiert nötigenfalls die Richtung.
    Dass das Bild wie eine Handzeichnung aussieht, könnte mit der geringen Winkelauflösung beim Drehen zusammenhängen.

    Fahren und Drehen kann der ASURO mit dem Programm immer nur in kleinen Schritten. Gegenüber der Methoden dem ASURO per Infrarot einen Drehwinkel und ein Kommando zu übermitteln stört es in diesem Fall nicht, wenn einmal ein Befehl bei der Übertragung verloren geht. Im schlimmsten Fall bewegt sich der ASURO dann minimal in eine falsch Richtung. Er wird aber dann im nächsten Schritt durch die Bildverarbeitung wieder korrigiert.

    Hier noch die Links:
    SCILAB: http://www.scilab.org/
    SIP: http://siptoolbox.sourceforge.net/

    Gruss,
    stochri

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hier das Scriptfile für die Bildaufnahme und die Bestimmung der Position des ASURO über die Farbe. Zur Bildaufnahme verwende ich das Programm "webcam" ( linux). Leider bremmst dieses Verfahren die ganze Bildauswertung ziemlich stark ab, weil der Aufruf von webcam ca.2 Sekunden dauert.
    Es würde mich sehr freuen, wenn jemand eine Lösung wüßte, das ganze zu beschleunigen. Mit kdetv können die Bilder der Kamera immerhin in Echtzeit dargestellt werden, also müßte es auch ein Möglichkeit geben, die Daten schneller in SCILAB reinzukriegen.

    Code:
    function [xcp,ycp]=asuropos()
    // Take picture and calculate Position
    //
    // 4.1.2006 stochri
    
    clear x
    clear r
    unix webcam
    x=imread('webcam.jpeg');
    hsv=rgb2hsv(x);
    hsv(:,:,3)=1;
    r=hsv2rgb(hsv);
    
    red=[1 0 0];
    green=[0 1 0];
    blue=[0 0 1];
    ref=red;
    colorerror=sqrt( (r(:,:,1)-ref(1)).^2 + (r(:,:,2)-ref(2)).^2 + (r(:,:,3)-ref(3)).^2)/sqrt(2);
    //xset('window',1);
    //xbasc
    //imshow(colorerror);
    
    bw=im2bw(colorerror,0.3);
    //xset('window',2);
    //xbasc
    //imshow(bw);
    
    [xcp ycp]=centroid(1-bw)
    
    endfunction
    //
    // -------------------------------------------------------------------------
    // This file ist made for scilab the free mathematical toolbox 
    //
    // Copyright (C) 2006  stochri
    //
    // This program is free software; you can redistribute it and/or modify
    // it under the terms of the GNU General Public License as published by
    // the Free Software Foundation; either version 2 of the License, or
    // (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details.
    //
    // You should have received a copy of the GNU General Public License
    // along with this program; if not, write to the Free Software
    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    // -------------------------------------------------------------------------
    //

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    Hallo storchi,

    selbermachen sollte eigentlich nicht so schwierig sein:
    http://www.roboternetz.de/wissen/ind...itung_Tutorial oder
    http://de.wikipedia.org/wiki/Segment...bearbeitung%29

    Ich hab' leider keine Webcam. Wie kommt man bei solch einem Gerät an die Daten 'ran? Gibt es einen (mehr oder weniger) kontinuierlichen Datenstrom? Treiber? (Ich habe Windows XP und nutze Visual Studio (VB und C#))

    Gruß Red Baron

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo Red Baron,
    das Tuturial habe ich schon gesehen. Allerdings muss ich sagen, dass es ein wenig kurz gefasst ist. Wobei die Transformation der RGB Daten in das HSV Format das weseentliche Element meines Programmes ist. Hier mal der Ausschnitt aus dem obigen SCILAB Scribt:

    Mit

    rgb2hsv

    wandle ich die Daten ins HSV Format um und setze dann die Helligkeit

    hsv(:,:,3)=1;

    auf Maximum. Dann werden die Daten zurücktransformiert.
    Danach wird die Vektordifferenz zur Farbe rot berechnet und das Bild mit

    bw=im2bw(colorerror,0.3);

    in ein Schwarzweisbild umgewandelt. Dann einfach der Flächenschwerpunkt

    [xcp ycp]=centroid(1-bw)

    ermittelt. Der Flächenschwerpunkt enspricht der aktuellen Position des ASURO.

    Das ganze läuft bei mir unter Linux. Das Programm "webcam" speichert beim Aufruf ein Bild als File in das aktuelle Verzeichnis ( ein ähnliches Programm zu finden, sollte bei XP kein Problem sein). Das Bild lese in Scilab mit

    x=imread('webcam.jpeg');

    ein ( da müßte es wohl auch ein Bildeinlesfunktion für VB irgendwo geben). Aber ich kenne mich damit nicht aus.


    Eigentlich kann man mit einer Webkamera und einem ASURO schon ganz schön viel machen. Wenn man nur einen ASURO hat, kann man damit schon ein 1-Roboter Fussbalspiel programmieren. Die Bilderkennung muss nur den Ball und den ASURO erkennen und wissen wo das Tor ist. Das Programmieren am PC hat den großen Vorteil, dass die langwierige Fehlersuche im ASURO entfällt, weil die Steuerung ja auf dem PC läuft. Und heute erst wieder habe ich eine Webkamera für 10€ gesehen.
    Und falls es bei dir mit XP nicht klappt, kannst Du ja eine Linux-Partition installieren. Ich poste dann hier alle SCILAB Files, damit du den Roboter steuern kannst. Allerdings muss man natürlich darauf achten, eine Webkamera zu kaufen, für die es einen Linuxtreiber gibt.
    Ich habe mir übrigens die Logitech Quickcam Pro4000 gekauft, weil die einen CCD Chip drin hat und im Vergleich zu meiner alten Quickcam Messenger eine wesentlich bessere Bildqualität hat. Die kostet allerdings 50€.

    Gruss,
    stochri

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    Hallo Storchi,

    vielen Dank für die vielen Informationen.

    Ich glaube, dass das Speichern der Daten auf Platte und das Wiedereinlesen einiges an Zeit kostet (einige 100 mSec zumindest). Deshalb meine Frage nach dem Datenstrom.

    Was SCILAB so genau gemacht, weiß ich nicht. Aber es sieht so aus, als ob das Bild mehrfach und jedesmal komplett bearbeitet wird. Ich glaube es wird schneller, wenn man auf jeden Bildpunkt/-ausschnitt die Operationen direkt nacheinander ausführt und dann erst zum nächsten Bildpunkt geht (bin mir aber nicht sicher).

    Eine andere Möglichkeit der Optimierung ginge vielleicht etwa so:
    Wenn man einmal den Ort des ASURO bestimmt hat und die ungefähre Geschwindigkeit kennt, kann man in etwa abschätzen, wo er beim nächsten Bild sein wird. Dann braucht man nur noch diesen Bildausschnitt (mit einem bisschen Sicherheitsaufschlag) zu analysieren. Also statt 600 x 800 (480.000 Bildpunkte) nur noch z.B. 100 x 200 (20.000 Bildpunkte, Faktor 24). Das könnte zu einer höheren Abtastrate führen, was wiederum die Möglichkeit der Bildrezierung erhöht.

    SCILAB hatte ich schon einmal runtergeladen (zum Berechnen von Regelkreisen). Ich hab' aber zu blöd angestellt und bin damit nicht klar gekommen. Kennst du eine Seite (vielleicht sogar auf deutsch), die einen Einstieg in das Programm ermöglicht?

    Ich hab' mitlerweile nachgeschaut, eine Webcam kostet wirklich nicht viel. Ich werde mir wohl eine zulegen. Denn das, was du gemacht hast, finde ich schon echt spannend! Bis dahin werde ich mal ein paar Versuche mit dem geposteten jpeg deines ASUROs machen.

    Gruß Red Baron

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo Stochri,
    kennst Du xawtv ?
    Das ist ein echt gutes Video Capturing Programm, damit habe ich auch schon einiges aus der Konsole raus gemacht, vielleicht geht es damit schneller...

    Gruß Sebastian

    Edit:

    Was ist, wenn Du Dir eine RAMdisk einrichtest, um die Bilder im Speicher zu belassen, und nicht erst auf die Festplatte zu schreiben? Das könnte eventuell auch schneller gehen, oder ?

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo Red Baron,
    Ich glaube, dass das Speichern der Daten auf Platte und das Wiedereinlesen einiges an Zeit kostet (einige 100 mSec zumindest).
    Das Speichern auf die Platte wird vielleicht schon 100mSec oder so um den Dreh dauern. Bei mir scheint es allerdings eher der Aufruf der webcam-Funktion zu sein. Es dauert nämlich in der Kommandozeile auch so ca.2 Sekunden. Es könnte natürlich auch damit zusammenhängen, dass ein jpeg-Bild gespeichert wird und dafür wird die Komprimirungsroutine wohl auch etwas Zeit benötigen.

    Was SCILAB so genau gemacht, weiß ich nicht. Aber es sieht so aus, als ob das Bild mehrfach und jedesmal komplett bearbeitet wird.
    Sieht so aus, als wenn Du es schon ausprobiert hast? Ich habe festgestellt, dass das Anzeigen des Bildes sehr viel Zeit braucht. Wenn man die Anzeige abschaltet, geht die Verarbeitung wesentlich schneller. Mein Positionsfindealgortihmus braucht, wenn man das Bildladen wegläst und die Bildausgabe abschaltet 260ms (bei 320x240 Punkten). Und meinen Rechner habe ich momentan nur auf der halben Geschwindigkeit laufen (1.2GHz ). Wenn ich auf 2.6GHz hochtakte, rechne ich mit einer Ausführungszeit von unter 150ms.

    Also statt 600 x 800 (480.000 Bildpunkte) nur noch z.B. 100 x 200 (20.000 Bildpunkte, Faktor 24). Das könnte zu einer höheren Abtastrate führen, was wiederum die Möglichkeit der Bildrezierung erhöht
    Klar eine Reduzierung der Punkteanzahl erhöht die Geschwindigkeit. Aber wie schon erwähnt, macht ja momentan eher das Bildeinlesen mit mehr als 2Sekunden im Vergleich zu den 150ms Auswerung den großen Anteil

    SCILAB hatte ich schon einmal runtergeladen (zum Berechnen von Regelkreisen). Ich hab' aber zu blöd angestellt und bin damit nicht klar gekommen. Kennst du eine Seite (vielleicht sogar auf deutsch), die einen Einstieg in das Programm ermöglicht?
    Scilab Kurzeinführung: http://www.nt.fh-koeln.de/fachgebiet.../scilabein.pdf
    Ansonsten bei der Bildverarbeitungstoolbox exec(SIPDEMO)

    Ich hab' mitlerweile nachgeschaut, eine Webcam kostet wirklich nicht viel. Ich werde mir wohl eine zulegen
    Na, immer drauf los ! Bildverarbeitung ist ja ein hochaktuelles und spannendes Thema. Mich wundert ja, dass die Leute hier im Robterforum so wenig damit machen.
    Wenn Du Dir eine Kamera kaufst und es nicht wirklich eng ist mit dem Geld, würde ich die bessere kaufen. Mit der Bildverarbeitung ist es wie sonst in der Messtechnik: Wenn der Sensor schlecht ist, macht das die Signalauswertung meistens nicht einfacher !

    Gruss,
    stochri

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Hallo Sebastian
    kennst Du xawtv ?
    Ich dachte immer, das sei der Fernseher, so wie kdetv.

    Was ist, wenn Du Dir eine RAMdisk einrichtest, um die Bilder im Speicher zu belassen, und nicht erst auf die Festplatte zu schreiben?
    Hab ich auch schon mal dran gedacht, ich weiss aber nicht, wie man mit Linux eine Ramdisk einrichtet. Bei webcam gibt es die Möglichkeit, jede Sekunde ein Bild auf die Platte zu schreiben, die habe ich aber verworfen, weil die Bildaufnahme mit der Auswertung synchronisiert sein muss. Wenn ich mit "top" die Systemlast anschaue, braucht "webcam" ca. 7%CPU time. Scheint noch einigermaßen ok.

    Gruss,
    stochri

Seite 1 von 6 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •