Das letzte Bild sieht ein wenig so aus, als wenn x und y vertauscht sind. Das könnte mein Fehler sein, vielleicht habe ich einfacht x und y bei der centroid oder der drawcorss Funtion vertauscht.
Ich muss gestehen, dass ich da immer ein wenig durcheinander komme.
Die Bild Matirzen sind immer in bild(zeile,spalte) angeordnet.
Wenn man die Kooerdinalten in (x,y) angibt, wäre es ja genau verkehrt rum, weil ja die Zeile eher der y-Richutn und die Spalte eher der x-Richtung entspricht also (zeile,spalte)=(y,x).
Jetzt brauchen wir ein Programm, welches ein Bild abspeichert, damit man es in Scilab einlesen kann. Bei Linux habe ich dazu das Programm "webcam" benutzt, aber das gibt es für windows vermutlich nicht.
Unter Linux habe ich es genauso verwendet, wie die ASURO-Steueroutinen: Einfach mit "unix pragrammname" aufgerurfen. Dann hat mir "webcam" ein Bild abgespeichert und Scilab konnte es automatisch wieder einlesen.
Um das Problem zu lösen, habe ich folgenden Thread eröffnet:
Vielleicht kann man ja eines der Programme verwenden, die bei Deiner Webcam mitgeliefert wurden.
Oder vielleicht läst sich doch etwas im Internet finden, ich bin mir sicher, dass irgendjemand das schon mal gemacht hat. Du kannst ja eventuell auch mal mit google suchen.
Hallo Stochri,
ich glaub auch das wir das hinbekommen. Ich hab schon mal im Netz gesucht bis jetzt aber noch nichts gefunden
Aber das ändert sich hoffentlich bald.
Hi,
ich hab jetzt endlich nach langem suchen bei winload ein geeignetes Programm gefunden. Es lädt alle paar sekunden ein aktuelles Bild unter dem Namen "cam" in ein Verzeichnis. Nun kann ich das immer wieder aktualisierte Bild in Scilab hochladen. Und das beste, mit dem Programm hat meine Webcam ne viel bessere Bildqualität (warum auch immer oder mir kommts nur so vor)
Jedenfalls wird Asuro überall perfekt erkannt. Es ist zwar nicht genau wie dein Programm aber es müsste doch eigenlich auch gehen.
Na super !
bestimmt läßt sich das Programm verwenden. Vielleicht kannst Du ja den Link posten, wo Du es gefunden hast, dann können es eventuelle Mitleser auch verwenden.
Die ursprünglichen Routinen funktionieren so, dass mit "asuropos" die Position des ASURO bestimmt wird. Die Funktion "asuropos" hast Du ja jetzt schon kennengelernt.
Jetzt musst Du die Positonsbestimmung nur in die ursprüngliche Funktion einbauen, sodass sie Dir nach dem Aufruf die position des ASURO zuverlässig zurückliefert.
Eventuell muss doch noch eine Helligekeitsanpassung eingebaut werden. Deshalb ist es so wichtig, dass Du die Postionsbestimmung ausgiebig testest.
Bei mir sieh der Aufruf von "asuropos" so aus:
-->[x y]=asuropos()
Size: 240 rows X 320 columns
Truecolor Image
Warning :redefining function: y
y =
92.266304
x =
100.54891
Der ASURO wird also an der Position (100,92) gefunden.
Die Funktion asuropos wird von der Funktion "gopos" benötigt.
Diese Funktion fährt den Asuro an eine gewünschte Postion.
Die Funkton wird folgendermaßen aufgerufen:
gopos([100 150])
100,150 sind die Koordinaten.
Es ist allerdings wichtig, das die Funktion "turn" kalibriert ist und sich der ASURO beim Aufruf von
turn(360)
einigermßen genau um 360° dreht.
Übrigens: bei Scilab gibt es einen Unterschied zwischen Dateien, die mit sci und mit sce enden.
Dein Initialisierunsscribt rufst Du mit name.sce auf.
Funktionen wie z.B. asuropos.sci werden normalerweise mit exec asuropos.sci in scilab geladen aber noch nicht ausgeführt.
Nach dem Laden kann eine Funktion ausgeführt werden, und zwar so wie weiter oben beschrieben.
Wenn Du etwas an der Funktion mit dem Editor änderst, musst du die Funktion aus sclab mit
clear asuropos
löschen und danach die geänderte Funktion wieder mit
exec asuropos.sci
laden.
Praktischerweise schreibe ich das immer in eine Zeile
Jedoch gehts mal wieder nicht richtig. Also zuerst muss ich ja asuropos mit exec laden. Das geht. Aber wenn ich dann-->[x y]=asuropos() eingebe kommen immer die selben Coordinaten. Hier als Beispiel:
-->exec('C:\Dokumente und Einstellungen\Mike1\Eigene Dateien\Asuro Programme\scifiles\asuropos.sci');disp('exec done');
Warning :redefining function: asuropos
exec done
-->[x y]=asuropos()
Size: 288 rows X 352 columns
Truecolor Image
y =
176.5
x =
144.5
Eigentlich funktioniert es nur sind x,y immer gleich.
Mit der Funktion gopos ist es ähnlich. Asuro fährt fährt zwei Schritte vorwärts und hält an. Auch wenn ich unterschiedliche Zahlen eingebe. Alos nicht gopos([100 150]) sondern gopos([90 190]).Dann müsste er doch wo anders hinfahren. Wenigsten hab ich die Kalibrierung von turn hinbekommen. Bei turn(360) dreht er fast punktgenau um 360Grad.
Ich hoffe du weißt wo der Fehler liegt und kannst mir helfen.
Lesezeichen