C++Guns – RoboBlog blogging the bot

18.08.2008

Milkshape Model & 3rd person view

Filed under: My Time Portal — Thomas @ 20:08

In den letzten Tagen habe ich mich damit beschäftigt einen Model Viewer zu finden, der auch unter Linux funktioniert. Meine beschränkte Wahl fiel auf den Misfit Model Viewer[1], der gänigste Formate laden und speichern kann. Als Modelloader viel meine Wahl auf den Milkshape Loader, irgendwo von den NeHe Turorials. Ekliges Teil. C und C++ gemischt. Das ist alles nicht so das wahre. Ich musste den Loader anpassen und Pathe in der Modeldatei ändern bis es funktionierte. Aber zum testen langt es. Als Testmodel musste PadLilly von WorldOfPadman[2] herhalten. Animationen werde ich nicht einbauen. Es gibt wichteres z.B. die Portale.

Die 3rd Person View funktioniert jetzt auch einigermassen. Man kann sich zumindest in der Map bewegen.

Der Spiegel, der mal ein Portal werden soll, funktioniert noch nicht so berauschend. Momentan hat er einen lustigen Fehler. Der einzige Spiegel auf der Welt, mit dem man sich von hinten betrachten kann ;) Siehe Bild.

Auch mit den Texturen bin ich nicht zufrieden. Geht man nah an die Wand ran, verpixeln sie start. Aber das sind Nebensächlichkeiten.

Ich brauche mehr Gegenstände in der Map. Eine Uhr z.B. wäre sehr geeignet. Um auch später den Zeitsprung-Effekt zu verdeutlichen.

[1] http://sourceforge.net/projects/misfitmodel3d/
[2] http://worldofpadman.com/

12.08.2008

Texturen, Bälle und ein Spiegel

Filed under: My Time Portal — Thomas @ 22:08

Nach ein paar weiteren Tagen harter Arbeit ist es mir gelungen eine kleine 3D Welt aufzubauen, in der man sich frei bewegen kann. Die Position der Wände werden über eine Datei eingelesen. So lässt sich die Map bearbeiten, ohne dass das Programm neu erstellt werden muss. Texturen gibt es auch, allerding erstmal nur drei Stück.

Die Map besteht aus 2 Räume, in einem hängt ein "Spiegel" und davor ein kleiner roter Ball. Es ist eigentlich noch kein Spiegel, es gleich mehr einer fest installierten Kamera mit Bildschirm.

Der Spieler wird als einen grünen Ball dargestellt. Vllt. ist es mir möglich demnächst ein Model einzubauen. Eine Kugel als Spielfigur ist nicht grade das, was man sich darunter vorstellt.

Erst wenn man mal versucht einen Spiegel zu programieren, wird einem klar, wie kompliziert das Ding doch ist...

MTP Screenshot 2

10.08.2008

World of Padman - release mouse patch

Filed under: programmieren — Thomas @ 09:08

Das Spiel Wolrd of Padman[1] ist ja ganz lustig. Vorallem freut mich, dass es auf Win, Mac und Linux läuft und die Source verfügbar ist. Beim spielen kann man zwsichen Fenster und Vollbild Darstellung wechseln. Im Vollbild Modus kommt man dann nur nicht mehr auf seine anderen Desktops. Und im Fenster Modus kann die Maus das Fenster nicht verlassen. Aber wir haben ja den Quelltext! Das Programm baut auf SDL auf, womit ich mich ein wenig auskennte. Die Funktion die die Maus bindet war schnell gefunden, und eine Stunde später der Patch fertig.

In der Datei code/unix/sdl_glimp.c ungefähr bei Zeile Nummer 230 sollte es dann so aussehen:

case SDLK_F8: *key = K_F8; break;
case SDLK_F9: *key = K_F9; break;
case SDLK_F10: *key = K_F10; break;
// case SDLK_F11: *key = K_F11; break;
// case SDLK_F12: *key = K_F12; break;
/*
* kater 10.08.2008
* Press F12 and the mouse can leave the window
* in non-fullscreen mode
* To restore press F11
*/

case SDLK_F11:

SDL_WM_GrabInput(SDL_GRAB_ON);
printf("Grab is On\n");
break;

case SDLK_F12:

SDL_WM_GrabInput(SDL_GRAB_OFF);
printf("Grab is Off\n");
break;

case SDLK_F13: *key = K_F13; break;
case SDLK_F14: *key = K_F14; break;
case SDLK_F15: *key = K_F15; break;

Danach einfach neu compilieren. Unter build/ befinden sich dann zwei *.i386 Dateien, welche man über die original Dateien drüberkopiert. Spiel starten, ausprobieren, freuen :)

[1] http://worldofpadman.com/

09.08.2008

Renderpass

Filed under: My Time Portal — Thomas @ 10:08

Das erste Testprogramm ist nach nichtmal einen Tag Arbeit fertig. Erst jetzt merke ich, dass ich von opengl noch absolut keine Ahnung habe.
Zu Anfang habe ich erstmal zwei Tutorials[1][2] zusammengewürfelt um ein Grundlagenprogramm zu bekommen. Es wird ein sich drehender Würfel erzeugt, der auf 3 weiteren Bildschirmen sichtbar wird. Die selbe Technik werde ich wohl benutzen um die Scene zu rendern, die einem gezeigt wird, wenn man durch ein Portal in die Vergangenheit schaut.

MyTimePortal1

mytimeportal_01tar.gz

[1] http://wiki.delphigl.com/index.php/Tutorial_Renderpass
[2] http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06

07.08.2008

My Time Portal

Filed under: Allgemein,My Time Portal — Thomas @ 11:08

Vielleicht kennen einige das Spiel Portal[1]. Ich versuche so ein ähnliches Programm zu schreiben, das auch Portale erzeugt, mit denen man aber nicht nur durch den Raum, sondern auch rückwärts durch die Zeit reisen kann.
Um das zu ermöglichen, speicher das Spiel zu jeden Zeitpunkt alle Daten zu allen relevaten Objekte wie Spieler, oder Kugeln ab. Gelangt ein Object in die Vergangenheit des Spieles, wird das Spiel alle Geschehnisse nachrechnen müssen, die dadurch in Bewegung gesetzt worden sind.
Weiterhin plane ich, dass die Spieler unabhänig vom Spiel in die Vergangenheit schauen kann, um festzustellen, wie sie sich durch seine aktionen in der relativen Zukunft verändert.

Dabei lege ich keinen Wert auf Grafik oder Spielgeschehen. Das können andere machen :)

[1] http://de.wikipedia.org/wiki/Portal_(Valve)

21.08.2007

Zufallsgenerator

Filed under: AVR — Thomas @ 17:08

Als ich mir eine Video-Vorlesung der Uni Tuebingen ansah, kam mir die Idee, mit einem AVR einem Zufallsgenerator zu programmieren. Als Quelle sollte der Analog-Digital Wandler (ADC)dienen, dessen Eingang in der Luft hängt. Es wird also nur das Rauschen des Wandlers und ein paar Störsignale digitialisiert. Von dem eingelesen Wert wir nur das erste Bit benutzt, also ob die Zahl grade oder ungerade ist. Nach acht Durchläufen hat man somit eine Zufallszahl mit einem Wertebereich von 0 bis 255.
Beim echten Zufall sollte sich eine Gleichverteilung einstellen. Da es 256 Mögliche Ereigniszahlen gibt, beträgt die Wahrscheinlichkeit fü eine Zahl 1/256 = 0.39%.
zufallsgleichverteilung1
Nach dem ersten Testlauf mit 39 Millionen Zufallszahlen, sah die Verteilung doch garnicht mal so schlecht aus. Aber es gibt einige Zahlen, die stark von der erwarteten WK abweichen. Darunter ist z.B. die 2 mit 0.71%, die 32 mit 0.63%, die 128 mit 0.98% und die 192 mit 0.87%. Unter binärer Betrachtungsweise fällt sofort auf, dass die Null besonderst oft vertreten ist.
2 = 00000010
32 = 00100000
128 = 10000000
192 = 11000000
Nun liegt die Vermutung nahe, dass der ADC mehr geraden Zahlen produziert als ungeraden. Ein einfacher Test bestätigt es, die Null kommt mit 0.2% häufiger vor als die Eins. Die Ursache hierfür kann nur auf Bauteiltolleranzen im ADC zurückzuführen sein. Als eine Referenzspannung vom 5V genommen wurde, anstatt 2.65V, trat die Eins nun mit 0.2% häufiger auf. Da der Mikrocontroller 6 ADC Kanäle hat, liegt die Vermutung nun nahe, durch wechseln des ADC Kanals den Fehler zu minimieren.

Gesagt, getan. Hier ist die neue Verteilung.
zufalls

Ahja, das ganze läuft auf einem ATmega8. Das Programm kann aber auf jeden beliebigen Mikrocontroller portiert werden, solange es mindestens einen ADC gibt.
Die Zufallszahlen werden über USART gesendet. Ansonsten gibt es nichts zu sagen, ausser: Macht was ihr wollt damit :)
zufallsgenerator-01.zip

06.07.2007

Roboterinterface

Filed under: programmieren — Thomas @ 08:07

In den letzten Tagen habe ich mich viel mit GTK beschäftigt und ein kleines Roboterinterface programmiert. Es dient dazu, den PID Regler auf dem AVR bequem vom PC aus einzustellen. Gleichzeitig wird die aktuelle Motorgeschwindigkeit auf einer Balkenanzeige dargestellt. Der Graph ermöglicht eine Langzeitüberwachung des PID Reglers. Noch hinzu lässt sich das Regelverhalten besser erkennen.

Roboterinterface

30.05.2007

Stromversorgung Teil 2

Filed under: Amee — Thomas @ 09:05

So, im laufe der letzten Tage habe ich die Platine fertig gelötet und eingebaut. Einen erfolgreichen Funktionstest wurde sie auch schon unterzogen. Dabei verbrauchen die Spannungswandler im Leerlauf 240mW. Dieser Verlust ist aber garnichts im Vergleich zu welchen, den ich bekäme, würde ich Festspannungswandler einsetzten.
Als nächstes werde ich den PID-Regler in Angriff nehmen, damit sich die Schüssel endlich mal wieder vom Fleck bewegen kann.
Bilder gibts auch irgendwann.

16.05.2007

Stromversorgung Teil 1

Filed under: Amee — Thomas @ 12:05

Ok, hier sind meine Ideen für die Stromversorgungsplatine. Das muss alles drauf:

  •   13.8V Ladefestspannungsregler für den 12V Akku
  • Getakteter Spannungswandler 12V->5V 2.5A für Servos, Sharp etc. Alles was etwas "mehr" Strom braucht (externe Platine)
  • Getakteter Spannungswandler 12V->5V 0.4A für alle Mikrocontroller
  • Desweiteren wird ein Sicherungshalter und eine Ladebuchse benötigt
  • Anschlüsse für 12V, 5V und GND. Die 12V Anschlüsse sind schraubbar, da hier der Motorstrom drüber fliesst. Die 5V Anschlüsse können steckbar gemacht werden
  • Auf einen Spannungswandler 12V->24V verzichte ich. Ihn kann man später realisieren wenn das Ultraschallmodul an der Reihe ist.

Mit der H-Brücke und den Motorcontrollern ist die erste Ebene des Roboters mit Platinen bestückt.

18.03.2007

Fortschritt

Filed under: Amee — Thomas @ 10:03

So langsam wurde es Zeit, ein paar Platinen festzuschauben. Zwar ist die Schaltung noch nicht komplett aufgelötet, aber das ist nun viel besser, als die Platinen lose herum hängen zu lassen. Vorallem kann der Bot nun wieder herumfahren.
Die Aluminiumplatte habe ich ersteinmal mit Klebeband bezogen, so dass eine Schraube, die sich zufällig unter die Platine verirrt, keinen Kurzschluss nach Masse auslösen kann. Die mittlere Platine ist die H-Brücke für die 2 Motoren und die rechte Platine ist die Motorsteuerung. Jeweils ein mega8 für ein Motor.

Gesammtansicht 3

« Newer PostsOlder Posts »

Powered by WordPress