C++Guns – RoboBlog blogging the bot

12.02.2009

PIV Tag 12

Filed under: particle tracking system — Thomas @ 14:02

gpiv war wieder das heutige Thema. gpiv_combing unterstütze nicht das ppm Format. coriander hingegen speichert bevorzugt im ppm Format ab. Das oder raw. Aber bei raw ist mir gpiv bisher immer abgestürzt. Da liegt die Idee natürlich nahe in einem kleinen Scipt erstmal alle Bilder in ein von gpiv_combing unterstützes Format zu bringen. Ich hab mich da für pgm entschieden. Das kostet natürlich Zeit. Zeit die ich nicht aufbringen will. Also hab ich mir den Code angeschaut und ppm Unterstützung eingebau. War auch ganz einfach. Dabei habe ich festgestellt, dass das Programm die Bilder intern erstmal alle ins png Format umwandelt.

Beim Wasserradprojekt hab ich es geschafft den Messverstärker über die Serielleschnittstelle zu steuern. Zwei Problem gab es dabei. Erstens musste man erstmal feststellen, dass die Masseleitung des Kabels am Gerät ab war und zweitens wie man die Partität auf Gerade stellt. Bin ich irgendwie zu doof dafür :)

10.02.2009

SGI O2 und Debian

Filed under: Allgemein — Tags: , , — Thomas @ 18:02

Heute viel mir eine SGI O2 [1] in die Hände. Also das Teil ist von 1997 und hat wenn ich mich nicht verlesen habe ganz 200MHz. Die Installation von Debian ist eigentlich garnicht so schwer, wenn man ein paar Sachen weiss. Zum einen kann diese Bios da keine Ports größer als 32767 öffnen. Das ist schlecht wenn man versucht das Image per tftp hochzuladen und einfach nichts passiert. Ich habe diese Information auch nur zufällig gefunden und ich erlaube mir mal hier die Lösung zu zitieren:

The PROM of the Indy don't handle source ports over 32767. So we have to:

* echo "2048 32767" > /proc/sys/net/ipv4/ip_local_port_range

The same PROM also has problem with MTU discovery. So go on and:

* echo "1" > /proc/sys/net/ipv4/ip_no_pmtu_disc

Die Quelle ist mir leider verloren gegangen. Jedenfalls habe ich mich dann weiter an die Anleitung [2] gehalten und es hat fast alles funktioniert. Dort wird am Anfang auf ein Image verwiesen, welches ich auch installiert habe. Aber ich denke, jedes andere MIPS fähige Image sollte auch gehen. Die Installation selbst lief wie gesagt problemlos. Nur vor dem ersten booten gibt es wieder eine Kleinigkeit zu beachten. Es heisst

setenv OSLoadFilename Linux

Und nicht

setenv OSLoadFilename linux

Man beachte das große L bei Linux. Beim ersten booten gab es auch gleich eine Kernel Panic. Er hatte wohl irgendwelche Schmerzen wegen der Festplatte. Aber ich konnte nicht alle Meldungen mitlesen, deswegen hab ich sie mir über die serielle Schnittstelle ausgegeben. Wie in der Anleitung angegeben, passiert dies durch setenv console d1. Aber Vorsicht, der Bildschirm bleibt dann dunkel und alle Informationen bis zum login screen gehen ueber die serielle raus. Übrigends habe ich kein spezielles SGI RS232 Kabel benutzt. Ein "normales" voll durchkontaktieres Kabel geht also auch. Die Kernel Panic trat auch nicht wieder auf. Wahr wohl der Schock das Erstemal Linux zu booten ;)

Übrigends, ihr braucht eine PS2 Maus um auf diesen Maintenance Knopf beim starten zu drücken. USB Maus mit PS2 Adapter gehen nicht.

Nach der Installation waren 500MB Festplattenplatz belegt und noch 1.5GB frei. Auch der RAM mit 256MB war noch nicht komplett belegt. Mir gefällt das Teil irgendwie. Mal sehen was sich damit noch anfängen lässt. Ein paar ext. SCSI Platten wären nett :)

[1] http://images.google.de/images?hl=de&q=sgi+o2&btnG=Bilder-Suche&gbv=1
[2] http://js1.kicks-ass.org/~js1/debianO2.html

07.02.2009

*buntu

Filed under: Allgemein — Thomas @ 13:02

Das hab ich heute auf einer Xbuntu Kiste gefunden

5381 ? S 0:00 /bin/dd bs 1 if /proc/kmsg of /var/run/klogd/kmsg

Zitiat: "das ist eine armselige implementierung der kernel->syslog brücke ;)"
Meine Rede ;)

04.02.2009

PIV Tag 11

Filed under: particle tracking system — Thomas @ 22:02

Heute lästern wir mal etwas über Matrox. Um genauer zu sein über Mil-Lite. Ein Softwarepaket für industrielle Bildverarbeitung, welche auch unter Linux zu nutzen ist. Das steht jedenfalls überall so, funktioniert aber nicht wirklich. Erst muss in irgendeiner Headerdatei festgelegt werden, dass man wirklich Linux nutzt. Dann noch ein paar Include Datei korrigieren und alle Dateien die einen Großbuchstaben enthalten umbenennen, da Windows den Unterschied zwischen "A" und "a" nicht kennt. Die Softwareentwickler übrigends auch nicht, keiner von ihnen! Nach diesen Änderungen compiliert das mitgelieferte Testprogramm auch, nur linken mag es nicht. Ich weiss auch nicht, was ich den Compiler an Linkeroptionen mitgeben soll. Es gibt zwar eine mil.lib und mil.dll aber die mit angeben löst das Problem auch nicht. Ich hätte das ganze ja liebend gern unter Windows ausprobiert, aber er findet keinen Kameratreiber wenn ich das Beispiel starte. Einfach so von heute auf morgen geht es nicht mehr. Wie immer....

Aber halb so schlimm. Ich hab von meinem Prof. gehört, dass IDL auch ganz toll Bilder bearbeiten kann. Nur unterlieg das mal wieder einer Lizenz, aber dafür gibts ja die GDL. Ein IDL Klon unter der GPL ohne GUI. Und LPG kostet übrigens bei Jet jetzt .609 stat .599

Äh was? Jetzt nochmal zum mitschreiben.

IDL (Interactive Data Language) [1] steht unter einer Lizenz die Geld kostet. GDL (GNU Data Language) [2] ist ein Klon der nichts kostet. Nachteil: er hat keine GUI (Graphical User Interface) [3]. Und LPG (Liquified/Liquefied Petroleum/Propane Gas) [4] ist toll.

GDL benutzt MPI (Message Passing Interface) [5]. Das bedeutet, es war nicht einfach zu compilieren. Und als es dann lief, konnte es kein Fenster öffnen und stürze ab. Dankeschön.

Jetzt kommen wir zu einem erfreulichen Thema. Wie ich bestimmt im letzten Post erwähnt habe geht es darum, den Drehgeber eines Wasserrades auszulesen. Also habe ich mich die Woche hingesetzt und ein kleines Programm in einen Mikrocontroller gehackt, der die Impulse aufsummiert und alle Sekunde ausgibt. Das hat sogar recht schnell funktioniert. Der Vorteil liegt auf der Hand. Die Entscheidung, wann eine Sekunde rum ist übernimmt nun der mC, welcher das viel genauer kann als das Windows Programm. Welches ja schon ins stocken komt, wenn man es nur anklickt und verschieb. Noch hinzu muss diese Information nicht durchs USB Interface geschickt werden, welches alles andere als Echtzeit fähig ist.

Es langt aber nicht nur die Drehzahl zu messen, sondern noch irgendwie das Gewicht des Wassers, dass gegen die Schaufelblätter drückt. Wie genau das aufgebaut ist habe ich immer noch nicht verstanden. Jedenfalls gibt es einen Messverstärker mit RS232 Ausgang. Den muss ich irgendwie möglichst syncron zur Drehzahl auslesen und die Daten dann zusammen an den PC schicken. Aber darum kümmer ich mich nach den Klausuren....

[1] http://www.ittvis.com/
[2] http://gnudatalanguage.sourceforge.net/
[3] http://de.wikipedia.org/wiki/Graphical_User_Interface
[4] http://de.wikipedia.org/wiki/Fl%C3%BCssiggas
[5] http://de.wikipedia.org/wiki/Message_Passing_Interface

29.01.2009

PIV Tag 10

Filed under: particle tracking system — Thomas @ 19:01

Wenn der Namen Nvidia fällt, denk jederman sofort an die Grafikkarte. Dass aber in diesem Fall die Netzwerkkarte gemeint ist, hat mich auch überrascht. Das ist wieder eine schöne Ironie. Versuche doch mal mit einer Windows Kiste Treiber aus dem Internet zu laden, wenn noch garkeine Netzwerktreiber installiert sind. Aber auch das habe ich hinbekommen, wenn auch mit langen Umwegen.

Danach habe ich die neuste Version von diesem MilLite installiert und mich wieder mit der Lizenz rumgeärgert. Warum hat ein Programm, welches einfach nur Bilder von einer Kamera einliest eine so umständliche Lizenz? Naja egal. Gleich noch das Visual Studio C++ installiert. Was auch wieder viel länger gedauert hat, als ich es annahm.

Zum Schulss habe ich mir noch diesen Wasserrad Versuchsaufbau angesehen, bei dem es einfach nur darum geht, die Geschwindigkeit des Rades Sekundengenau in den PC einzulesen. Dazu wurde eine ext. Messkarte angeschafft, die die Impulse des Drehgebers am Rad zählt. Ausgelesen wird der Zähler über USB. Aber auch gestoppt und gestartet bzw resetet. Und genau das ist das Problem. Bis das Simulationsprogramm am PC den Wert eingelesen, abgespeichert und den Zähler neu gestartet hat vergehen einige Millisekunden. Und in genau dieser Zeit wird nicht gemessen. Wird das Messintervall hingegen 10sek lang gemacht, stimmen die gemessenen Werte mit den realen Werten fast überein.

Man sollte meinen, alle Sekunde ein Messwert abzuspeichern soll keine Kunst sein. Nur wenn die Hard und Software nicht darauf ausgelegt ist, wird es nichts. Die Impulse des Gebers haben auch keine allzu hohe Frequenz. Maximal 1kHz. Ich denke ich werde mit meiner eigenen Hardware daran gehen, bevor irgendeine teuere Realtime Messkarte angeschafft wird, die dann hinter doch nicht das kann, was man braucht. Aber dafür alles andere.

21.01.2009

PIV Tag 9

Filed under: particle tracking system — Thomas @ 20:01

Heute gab es eine Überraschung. Eine neue Switch stand auf dem Tisch. D.h. nie wieder Kabel umstecken! Hat auch nur 4 Monate gedauert... Nur eine eigene IP für mich gibt es immer noch nicht. Zwei Rechner mit der gleichen MAC Adresse, das hat die Switch freude dran :)

Danach haben wir uns Gedanken gemacht, wie denn so die Geschwindigkeit eines Punkes zu berechnen sei. Was eigentlich ganz einfach ist. Nachdem zwei Bilder gemacht wurden, ist die Zeit bekannt und die Anzahl Pixel um die sich das Objekt verschoben haben. Nun muss man nur noch feststellen wieviel Pixel ein Zentimeter entsprechen. Das geht am einfachsten, wenn man kariertes Papier mit auf die Bilder aufnimmt.

Ja, mehr fällt mir grad nicht ein.

19.01.2009

PIV Tag 7-8

Filed under: particle tracking system — Thomas @ 17:01

Über die Jahreswende ist einiges passiert. Ich habe mit einer Kamera weiter Testbilder einer sich drehenden Scheibe gemacht, auf der ein Stück Papier mit schwarzen Punkte angebracht war. gpiv hat mit diesen Bilder ordentliche Richtungsvektoren berechnet. Bis auf ein paar Ausnahmen, aber das wird wohl normal sein. Da die Kamera nur 4 Bilder pro Sekunde schafft, habe ich wieder auf die Firewire Kamera zurückgegriffen. Das hat den Vorteil, dass sie schon Graustufenbilder liefert, und man nicht mehr die jpeg Farbbilder umrechnen muss.

Ok zugegeben, Coriander liefert nur ppm Bilder und gpiv will pgm haben. Also muss man sie doch convertieren. Aber ich habe beim Entwickler nachgefragt, er sagte es sei leicht den ppm support für gpiv zu ergänzen.

Und noch ein Problem habe ich gelöst bekommen. Wenn man Zwei Bilder mit gpiv_combing kombiniert, ist das Ergebnisbild genauso hoch wie die Originalbilder, was dazu führt, dass es nur noch zwei halbe Bilder sind. Schaltet man die Warning von gpiv_combing ein, sag es, dass im ersten Bild schon ein Xcorr Frame vorliegt, was aber nicht der Fall ist. Grund dafür ist, da das Programm die Konfigurationsdatei in /etc/gpiv.conf einliest, bei der per default IMG.x_corr auf 1 gesetzt ist. In der neueren Version wird diese Information aber in den Header der Bilder hinterlegt. Es genügt also IMG.x_corr auf 0 zu setzen.

Des weiteren habe ich mir noch ein Shell Script geschrieben, welches automatisch alle Bilder convertiert, kombiniert, gpiv darauf anwendet und die Ergebnisse mit gnuplot darstellt. Die Ergebnisbilder kann man dann mit mencoder zu einem mpeg4 Video zusammenfassen. Allerdings sieht es noch nicht so toll aus wie erhofft.

07.01.2009

[NYC09] New Years Challenge 2009 - When Grown up's play

Filed under: Allgemein — Thomas @ 21:01

Es ist bald wieder sowas. Die New Years Challenge 2009 fängt am 15.1 an und geht bis zum 31.1. Zu gewinnen gibt es ein super tolles T-Shirt. Unter den Aufgaben befinden sich folgende Themen:

1. 01 - Teaching a KNN - (c++)
2. 02 - Pwned! - Exploiting A Vulnerable Server in Two Steps
3. 03 - Standards for IT Business'
4. 04 - Crazy Scripting
5. 05 - RGB Farbraum Analyse
6. 06 - Pure Virtual CrackMe
7. 07 - IT Security Quiz

Teaching a KNN - (c++) ist von mir :) Darunter sind einige Interesannte Topics, auch wenn ich kaun Zeit finden werde die Aufgaben zu bearbeiten. Prüfungen sind dann doch wichtiger, aber ein paar Stunden Zeit werde ich schon finden.

NYC2009

04.01.2009

gpsmap kismet; Karten erstellen

Filed under: Allgemein — Thomas @ 13:01

Ich möchte hier nur eine Notiz für mich selbst hinterlege, da ich ständig vergesse wie man diese Karte erstellt, wo die gefundenen WLAN APs drin sind. Die Internetsuche war auch nicht erfolgreich, da man nur Leute findet, die sich das auch fragen, aber keiner weiss wie es geht. Dabei ist es doch so einfach, wenn man wieder den Namen des Programmes kennt.

gpsmap -r -Y 1 -e /var/log/kismet/Kismet-xy.gps -G -n 1 -k -M -l ssid,manuf -m /home/user1/.gpsdrive/map_file0034.gif -o karte.png

Die Kismet Datei bekommt man logischerweise von Kismet. Die map_* Datei von gpsdrive bzw. kann man sie damit runterladen. Allerdings gibt es das Programm gpsmap so nicht mehr. 2005 wurde es in GPSylon wegen Namenskollision unbenannt und die neuste Version ist leider jetzt ein Java Programm. Alles neue ist schlecht.. mal wieder. Aber zum Glück kann man sich bei Sourceforge eine alte Version runterladen.

Ich habe grade die neuste Version 0.5.3 runtergeladen, nur funktioniert sie natürlich nicht. Es gibt ein Fehler beim starten, aber ich erspare es mir jetzt, ihn hier zu posten. Java soll doch überall laufen? Nur kann es wohl keiner richtig programmieren.

http://sourceforge.net/projects/gpsmap/

30.12.2008

atoull atoul

Filed under: programmieren — Thomas @ 18:12

Erschreckend musste ich heute feststellen, dass die libc gar keine atoull Funktion mitbringt, sondern nur eine atoll. Das Problem lässt sich aber einfacher lösen als gedacht. Hier die Funktion in zwei Varianten.

void atoull(char *s, unsigned long long *n)
{
*n = 0;
while ('0' <= *s && *s <='9')
*n = (*n)*10 + *s++ - '0';
}

unsigned long long atoull(char *s)
{
unsigned long long n = 0;
while ('0' <= *s && *s <='9')
n = n*10 + *s++ - '0';
return n;
}

void atoul(char *s, unsigned long *n)
{
*n = 0;
while ('0' <= *s && *s <='9')
*n = (*n)*10 + *s++ - '0';
}

unsigned long atoul(char *s)
{
unsigned long n = 0;
while ('0' <= *s && *s <='9')
n = n*10 + *s++ - '0';
return n;
}

Viel Spass damit :)

« Newer PostsOlder Posts »

Powered by WordPress