C++Guns – RoboBlog blogging the bot

18.08.2010

Er fliegt wieder

Filed under: Allgemein — Tags: — Thomas @ 18:08

Ganze 10 Minuten war der Heli heute in der Luft. Hatte zwar etwas mehr erwartet, aber besser als garnichts. Zugegeben, der neue Akku (Conrad, 7.4V 2.5Ah 160g, 80g mehr als der original Akku, 30Eur) ist etwas größer als erwartet, aber Not macht erfinderisch :)
Nur sollte man nicht mehr abstürzen, sonst ist der Akku gleich wieder hin.

Die extra Kühlkörper für den Motor sind auch echt nötig gewesen. Man verbrennt sich jetzt nicht mehr die Finger. Allerdings ist das immer so eine Fummellei, bis sie dran sind. Werde mir aber wohl die Zeit nehmen und an den anderen Motor auch welche zu kleben.

Der Akku selbst wurde im Flug so gut wie garnicht warm. Am Kabel konnte man allerdings doch etwas fühlen, wenn auch nur gering. Allerdings ist die Ladezeit von 6 Stunden nur mit viel Gedult zu ertragen.
Es wird Zeit für die externe Stromversorgung.

Noch ein paar Worte zu LiPo Akkus:
Hatte ja vor einigen Wochen den ersten Ersatzakku für 16Eur gekauft. Er hatte 850mAh und 15C und war nach 10 mal Laden schon kaputt. Aufgebläht und Kapazitätsverlust ohne Ende. Eigentlich hab ich alles falsch gemacht.

- Der Akku kann einen Spitzenstrom von 0.85Ah*15C = 12.75A liefern. Einen Dauerstrom von also etwa 6.3A. Gerade die Hälfte, steht so in dem Hinweisblatt. Der Heli brauht aber 10A. Also wurde er total überlastet.

- Eine Kühlung hatte der Akku auch nicht. Er war nach dem Flug immer sehr heiß. Im Rotorwind lag er auch nicht so wirklich.

- Überspannung. Durch die Experimente mit der externen Stromversorgnung lagen schonmal 20V an dem Akku.

- Tiefendladen. Klar ;)

Der neue Akku ist aber nun stark genug. :)

snap-20100818-184939-0

snap-20100818-185959-0

15.08.2010

Game Of Life in BF to C

Filed under: Allgemein — Tags: , — Thomas @ 23:08

The Game of Life in Brainfuck geschrieben und mit einem BF2C Converter übersetzt und compiliert und dann noch statisch gelinkt.

Das klingt irgendwie absurd oder?

Im Anhang der Quelltext... (God gab ihn mir ;) )

gameoflifesource.tar

fucking C

Filed under: Allgemein — Tags: , — Thomas @ 20:08

Bei Lft Craft habe ich den wohl schrecklichsten C Code aller Zeiten gefunden.

char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;main(){for(read(0,r,4000);c=*r;
r++)c-']'||(d>1||(r=*p?*s:(--s,r)),!d||d--),c-'['||d++||(*++s=r),d||(*p+=c==
'+',*p-=c=='-',p+=c=='>',p-=c=='<',c-'.'||write(2,p,1),c-','||read(2,p,1));}

Leute die meinen Style schlecht reden habe einfach keine Ahnung ;)

Und ja, das Ding compiliert wirklich. In den letzten zwei Tage habe ich das mal in lesbares C übersetzt


// m enthaelt den kompletten bf code und den programm pointer
// also programm und daten, so ist es moeglich eine quine zu programmieren
// 0 bis 4999 ist der bf code in plain text
// n und s sind mir noch nicht so ganz klar
// r zeigt auf das aktuelle zeichen im bf code
// p der programm pointer
// d hat irgendwas mit schleifen zu tun
// c das aktuelle zeichen im bf code

char m[9999],*n[99],*r=m,*p=m+5000,**s=n,d,c;

main(){
// Lese maximal 4000 zeichen von stdin
// (was mag passieren wenn der bf code groesser als 4000 zeicen ist
// naja, wird wohl einfach ueberschrieben)
for(read(0,r,4000);c=*r;r++)
{
//c- ']' || (d>1 || (r=*p?*s:(--s,r)) , !d||d--);
if(c == ']')
{
if(d <= 1) { if(*p) { r = *s; } else { --s; } } if(d) d--; } //c- '[' || d++ || (*++s=r), if(c == '[') { if(d == 0) { d++; *(++s) = r; } } //d|| ( if(d == 0) { //*p+=c=='+', if(c == '+') *p += 1; //*p-=c=='-', if(c == '-') *p -= 1; //p+=c=='>',
if(c == '>')
p += 1;

//p-=c=='<'; if(c == '<') p -= 1; //c-'.'||write(2,p,1); if(c == '.') write(2,p,1); //c-','||read(2,p,1); if(c == ',') read(2,p,1); // ) } } }
(Leider geht die Formatierung in WordPress verloren).

Aber jetzt erstmal ein paar Erklärungen. Wenn man sich den Code genauer anschaut, wird man feststellen, dass wohl alle ";" durch "," ersetzt wurden. So kann man mehrere Anweisungen in eine Zeile schreiben.

a = 0, b = a+1, c = a+b;

Weiterhin fällt auf, dass es kein einziges if() gibt. Man kann ein if() durch ein logisches ODER ersetzen:

a || b++;

Der Ausdruckt stimmt so. Normalerweise erwartet man sowas in einer if(), aber es geht auch ohne. Das Programm wird von links nach rechts abgearbeitet.
Ein ODER ist dann wahr, wenn einer von beiden Argumenten wahr ist.

Also wenn a ungleich 0 ist, zählt das als wahr. Aber sagen wir lieber true, spricht sich schöner.
Wenn also a true ist, muss b++ nicht mehr ausgeführt werden.
Ist a hingegen 0, wird b++ ausgeführt.
So einfach kann es sein :)

Dann fallen Sachen wie p+=c=='>' auf. Auch das ist ganz einfach. Der Operator == wird vor += ausgewertet. Wenn also c=='>' ist, ergibt das true, also 1. Dann steht als zweites p+=1 da. Sollte c irgendein anderes Zeichen sein, wird p+=0 ausgeführt.

Folgender Code ist auch noch erwähnenswert

c- '[' || d++ || blubb

Das ist wieder eine geschachtelte if(). In c steht ein Zeichen vom Bf Code. Sollte in C nun das Zeichen '[' stehen, und subtrahiert man nun ein '[', ist das ergebis 0. Unsere if() wird also wahr und der nächste Ausdruck wird in Angriff genommen.

d++ || blubb

Das Problem mit dem ++ sollte ja bekannt sein, bei d++ wird erst d bentuzt, dann um eins erhöht. Bei ++d wird erst d um ein erhöht und dann benutzt. Ist also d gleich 0. Wird d um eins erhöht und dann blubb ausgewetet.

Mit diesem Wissen kann man schon fast den kompletten Code verstehen. Nur diese eine Zeile hat mich eine Weile beschäftigt

c- ']' || (d>1 || (r=*p?*s:(--s,r)) , !d||d--)

Schaut erstmal eine Weile drauf. Am Anfang eine if(), noch eine if(), noch eine if() und dann noh eine if() ;)

Interesannt ist nur der innerste Teil

r=*p?*s:(--s,r)

Da steht ?:
Und ?: geht vor dem = Operator. Wenn also *p nicht 0 ist, dann wird r = *s ausgeführt. Sollte *p 0 ergeben. Wird erst s um eins erniedrigt und dann r=r ausgeführt.
r=r ist natürlich doof, aber ohne das würde da stehen r=--s; und das ist ja nicht gewollt.

So und was ist das nun für ein Programm? Na ein Brainfuck Interpreter. Sieht man doch ;)

bis nach Heidelberg

Filed under: Allgemein — Thomas @ 10:08

Bis nach Heidelberg sind wir gestern mit dem Rad gefahren. Das waren genau 54.85km. Insgesamt an diesem Tag bin ich 60.12km gefahren in knapp 4h. Macht eine Durchschnittsgeschwindigkeit von 15km/h. Aber dafür hat das Rad jetzt auch einen Platten und lauter andere Kleinigkeiten die wieder eine Menge Geld kosten.

12.08.2010

Math

Filed under: Allgemein — Thomas @ 21:08

Beispiel zur linearen Regression
regression

Stuff
===

wenn gleichmäßige Konvergenz: Integral über Summen = Summe über Integrale

04.08.2010

Schub!

Filed under: Allgemein — Tags: — Thomas @ 17:08

Der reparierter Heckmotor brachte leider nicht genug Schub. Mir blieb nur noch eine Möglichkeit: den Propeller direkt auf die Motorwelle zu setzen. Und siehe da, es geht mindestens so gut wie vorher :)

Der Ersatzmotor stammt ja aus einem Servo und die haben ehr mal mehr Kraft als Umdrehungen. Deswegen kann man auf das Getriebe verzichten.

Allerdings ist der Motor schwerer. Und durch den langen Hebelarm musste ich ganz schön viel Ballast in die Schnautze legen um das wieder auszugleichen.

Kaum war der Heli 2min in der Luft, kam das nächste Unglück. Nach einem kleinen Absturz flog er aus irgendeinem Grund nur noch schräg, und das natürlich nicht lange. Zack, hatte es den Balancer in zwei Teile zertrennt. Interessanterweise konnte man das mit einem Lötkolben und geschmolzenem Plastik wieder richten. Bitte fragt nicht nach Details :)

Im Bild ist der Original Heckmotor zu sehen. Als Vergleich meine Version neben dran.

heliheckmotor

01.08.2010

Motor repariert

Filed under: Allgemein — Tags: — Thomas @ 14:08

Soooo, Heckmotor repariert. Naja, fast. Habe einen etwas größeren Ersatzmotor aus einem alten Servo ausgebaut. War garnicht so einfach, die Ritzel von der Welle zu bekommen. Und dann musste ich es auch noch aufbohren, damit es auf die neue Welle passt.
Zum Schluss noch etwas doppelseitiges Klebeband und Kabelbinder und fertig :)
Hoffentlich hat das Ding auch genug Schub.

reparierter Heckmotor

reparierter Heckmotor

31.07.2010

Damn

Filed under: Allgemein — Tags: — Thomas @ 17:07

Ich wollte doch nur das Ritzel haben, nicht gleich den ganzen Motor zerlegen :)

Kaputter Motor

Kaputter Motor

FH Projekt 1

Filed under: Allgemein — Thomas @ 17:07

So, nun ist es fertig, das Projekt 1. Hier die Kurzzusammenfassung und das PDF. Mir ist bewusst, dass es noch einige grobe Fehler gibt, aber es fehlt wie immer die Zeit. Man ist eben nach zwei Berichten noch kein Latex Profi. Aber ich arbeite dran :)

Grundlage des Projektes ist die Detektion von Partikeln mit Hilfe von Floureszenzmikroskop
und Auswertung der Daten mit Methoden der Bildverarbeitung. Innerhalb der Projek-
tgruppe wurden zwei verschiedene Teilbereiche abgedeckt. Zum einen die Verbesserung
des Bildaufnahmeaufbaus durch bessere Beleuchtung, zum anderen die programmiertech-
nische Umsetzung einer Routine zum Vergleich verschiedener Lokalisierungsalgorithmen
und anschließender Verfolgung der Trajektorien.
Anstelle der bisher verwendeten Quecksilberdampflampe wurde die Beleuchtung auf eine
gepulste LED umgestellt, was in mehrerlei Hinsicht deutliche Vorteile bringt. Fur die
¨
Verarbeitung der Daten wurde ein Programm in MATLAB erstellt, das in der Lage ist,
Sequenzen von Bildern einzulesen, verschiedene Methoden zur Bestimmung von Schw-
erpunkten der Partikel durchzufuhren und die Ergebnisse als Datei zu speichern. Die
¨
Verfolgung der Trajektorien nutzt die ermittelten Schwerpunkte mit Hilfe von Milan und
analysiert unter Beachtung der sachlichen Probleme die Bewegung der Partikel.

particleTrackingBericht

29.07.2010

Heckmotor durchgebrannt

Filed under: Allgemein — Tags: — Thomas @ 10:07

Gestern kamen die Ersatzteile für den Abgebrochenen Flügel. Der war schnell wieder dran geschraubt.
Die H-Brücke habe ich auf einer extra Platine neu aufgebaut. Wenn wieder ein Transistor kaputt geht kann man ihn so schneller wechseln.

Aber jetzt funktioniert der Heckmotor nicht mehr. Er zuckte noch ein paar mal und dann Aus. Es ist auch kein Widerstand mehr an den Anschlüssen zu messen. Wahrscheinlich hat er ein Kurzschluss verursacht und damit auch die H-Brücke mit in den Tod gerissen.

Mal sehen wo es so ein neuen Motor gibt.

« Newer PostsOlder Posts »

Powered by WordPress