PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2-beiniger Roboter - eigentlich ein AI-Projekt



Thomas Sc.
13.12.2005, 21:21
Hallo,

unter http://www.roboshock.de möchte ich euch mein Projekt vorstellen. Es hat den Status der reinen Planung schon hinter sich gelassen, ist aber noch weit von der Fertigstellung entfernt. Eigentlich ist es ein Artificial Intelligence Projekt, und der Roboterkörper (plus die Naturgestze, Umwelt, etc.) beliefern die AI nur mit Daten.

Im Moment mühe ich mich mit den Sensoren herum. Das elektronische Lot, dass ich gebaut habe, ist zu schwer, und meine angestrebte Lösung für Bodenkontaktsensoren (am besten Gewichtsmessung) hängt auch an Details wie einer (bzw. vier) Feder in der richtigen Stärke, und wie genau am besten befestigen. Aber ich werde nicht aufgeben! ,-)

Viel Spaß beim lesen,
Thomas

Sommer
14.12.2005, 09:42
Hallo Kollege,

also dein Bot sieht ja schon recht gut aus!
Ich würde für test´s vieleicht mal kleine Mikroschalter als Bodensensor benutzen und später einen dünnen Silikonschlauch und das eine ende abdichten und das ander auf einen Drucksensor legen der mit einen OP die Diff.-Spannung verstärkt und einen Analogen Wert zwichen 0 -> 5 V ausgibt. Jedoch muss damit dieses System funktioniert eine bestimmte Masse des Roboters erreicht werden. Aber wie oben geschrieben würde ich zum testen mal einen Mikrotaster pro Fuß ausbrobieren.

Frage: Wie weit bist du eigentlich? läuft er schon ein wenig rum?

Bye Ulli

tamp
14.12.2005, 17:20
Sieht gut aus. Die bist auf dem richtigen weg zu einer art KI !!! Weiter so!

Thomas Sc.
14.12.2005, 17:53
> und das ander auf einen Drucksensor legen

Drucksensor klingt teuer, oder?
Aber einfach mal Microschalter dranmachen wäre wohl der richtige Weg,
damit es erst mal weitergeht.

> Wie weit bist du eigentlich? läuft er schon ein wenig rum?

Ich habe eine starre bewegungsfolge (also ohne irgend welche online-Feinkorrekturen, mangels Sensoren), mit der er einen Fuss ganz kurz anhebt, und wieder absetzt. Das funktioniert mit ca. 80%, ohne zu fallen, aber danach steht er etwas anders, und kann die gleiche Bewegung nur noch mit 50% erfolgreich wiederholen.

Aber das ist ja auch letztlich nicht wirklich relevant. Sogar im Gegenteil: Die Schwächen der Konstruktion ergeben eine komplexere Welt, die es zu entdecken gibt. Das hat natürlich auch seine Grenzen: Wenn die Konstruktionsschwächen (die "Hysterese der Konstruktion") zu stark sind, können evtl. gar keine Gesetzmässigkeiten mehr abgeleitet werden (ausser diese: "... und wieder autsch..." :-) so dass gar kein Lernfortschritt möglich ist. Ich hoffe, ich bin noch auf der guten Seite. Immerhin - um dies anzutesten - dafür ist die erwähnte starre Abfolge ein Indiz, und ich glaube, es sieht o.k. aus.

Grüße,
Thomas

tamp
15.12.2005, 17:12
Hallo Thomas,
wäre es villeicht möglich, dass du alles in C anstadt Java programmierst? Ich könnte den code von Java in C auch "übersetzten". Ich beschäftige mich auch mit KI und würde dich gern unterstützen.

Thomas Sc.
16.12.2005, 18:59
Hallo tamp,

erst einmal vielen Dank für Dein Angebot, ich könnte schon auch Unterstützung brauchen. Allerdings möchte ich definitiv bei Java bleiben. Ich nenne mal ein paar Gründe, ohne damit einen Streit C versus Java lostreten zu wollen.

- Wenn man in C "daneben greift", gibt es entweder total unerklärliche Effekte u.U. ganz woanders, oder gleich ein segmentation fault, und das war es dann. Wenn man kann, kann man dann mit einem debugger an den core dump gehen, um herauszufinden, wo es jetzt eigentlich gechrashed hat. Wenn man in Java daneben greift, wird gleich ein stack trace ausgegeben, samt Zeil ennummer, wo es passierte. Resultat: Sehr viel schnellere und angenehme Fehlerfindung.

- Security: Programme, die in C geschrieben sind, weisen fast immer irgendwo Fehler auf (typischerweise Buffer Overflows), die von Hackern genutzt werden können. Das ist ein direkter Effekt dieser unzpezifizierten Pointerei. Solange Programme in C geschrieben werden,werden neue Sicherheitslöcher in die Systeme eingebracht werden. Ich möchte dieser Sache einfach nicht weiter vorschub leisten.

- Aktuelle Handys haben fast durchweg eine Java Virtuel machine OnBoard. Dieser Trend wird auch bei PDAs durchschlagen. In 5 oder 10 jahren sind PDAs vielleicht sch nell genug, um eine ganze AI laufen zu lassen. Auf Java zu setzen sehe ich als gute Investition in die Zukunft.

- C/C++ gilt als hochgradig optimiert, was die Ausführungsgeschwindigkeit angeht, aber wie war gleich der Spruch: "C++ ist rarely optimized for the joy of programming".

Mit ist klar, dass ich jetzt manchem beherzten C-Programmierer vielleicht etwas auf die Füße getreten habe, und dafür möchte ich mich schon jetzt entschuldigen. Aber ich habe viel darüber nachgedacht, welche Sprache welche pro und contra bietet, und die oben genannten Gründe halte ich für wirklich nennenswert.

Aber mal etwas ganz anderes: Was machst Du denn so in Richtung KI?

Grüße,
Thomas

Sommer
17.12.2005, 10:24
Hi Leute,

die beste Sprache für jeden ist die mit der er sich am besten auskennt :-)

Aber mal weg von der Programmiersprache...

Wie hast du dir den Aufbau der KI in Verbindung deines Roboters vorgestellt? Soll er auch selber laufen lehrnen oder ist die KI später zu Navigation des Bot´s da?

Wie hast du dir die Struktur des ganzen gedacht?

Bye Ulli

www.sommer-robotics.de

Thomas Sc.
17.12.2005, 13:17
Hallo Sommer,

(und das im Winter :-)

> Wie hast du dir die Struktur des ganzen gedacht?

Ich dachte, das hätte ich unter "SW-Architektur" schon ganz gut beschrieben. Aber vielleicht geht Deine Frage auch in eine andere Richtung?

Grüße,
Thomas

Thomas Sc.
17.12.2005, 13:33
Aber bei dieser Gelegenheit meine aktuellen Pläne:

Ich bin zu fault, die "Endanschläge" für die Servos manuell herauszufisseln. (Und Faulheit ist gut !). Deshalb werde ich jetzt das programm so starten lassen, dass es erst einmal jedes Servo durchbewegt, um selber den möglichen Bewegungsbereich festzustellen. Dazu misst das Prog dann den Strom der Servoversorgung. Dieser Bewegungsbereich darf dann auch nicht als fest für alle zeiten gelten, da z.B. das beine kreuzen "mehr" möglich ist, wenn die Beine "hintereinander" stehen.

Ein anderes Thema ist die "Sprache", mit der Situationen beschrieben werden. Eine wichtige bedingnug an diese Sprache ist, dass ähnliche Situationen möglichst gut ermittelbar sein müssen.

Sommer
17.12.2005, 19:10
Hi Thomas,

jetzt hab ich mal deine Seite richtig durchgelesen... :-)

Ja meine Frage hat sich beantwortet!

Aber die Idee ist wirklich gut was du hast mit der DB die lernt.


Bye Ulli

Madgyver
17.12.2005, 19:41
Sieht ganz cool aus.

Wie wirst du das ganze speichern? Ich hab über sowas schon ne gewisse Zeit nachgedacht, und ich würde es als Matrix / Vektor - Matrix / Vektor Muliplikation implementieren.

Was wäre deine Methode?

Thomas Sc.
17.12.2005, 22:01
Hallo Madgyver,

> ich würde es als Matrix / Vektor - Matrix / Vektor Muliplikation implementieren.

ich bin mir jetzt nicht ganz sicher, was zu meinst. Ich nehme an, Du meinst die Darstellung der Situation als Vektor, und den vergleich auf ähnlichkeit mittels Vectorarithmetik. Ist es das?

Ich weiss selber noch nicht genau, wie es gehen wird, aber es könnte verkehrt sein, die Situation *komplett* festzuhalten. Mir fällt jetzt kein besseres beispiel ein, aber wenn ich stolpere und mich abfange, dann ist dabei vielleicht egal, ob ich dabei nach links oder nach rechts gucke. Es sollte also so etwas wie "egal" geben. Mehr noch: Nicht nur, dass ein Element der Situation mit "egal" gekennzeichnet sein mag, es sollte sogar möglich sein, dass das Element gar nicht erwähnt wird. Das ist wichtig, um die "Dimensionen" der Situation jederzeit erweitern zu können. (Z.B. neue Sensoren einfach dazuschalten, ohne dass alles von vorne gelernt werden muss.)

Geht das in Deine Richtung?

Madgyver
17.12.2005, 22:44
gemeint ist folgendes:

Eingangsvektor: (Dies ist die Situation)

Sensor1
Sensor2
Sensor3
...
...


Umformmatrix (Aktion)
ist dan (Anzahl der Sensoren) x (Anzahl der Sensoren) groß

Wir lesen also die Situationen aus, die relevant sind (welche ist ja erstmal egal, kann man dann ja später definieren) und erechnen dann die Matrix, die nötig wäre um die Bewegung auszuführen. Die kann man dann in der DB speichern.

Wenn du ganz genau weißt, welche Situationen du betrachten willst und welche Sensor werte du brauchst, ist das doch gut, steht der Lösung gar nicht im wege. Einfach die Entsprechenden Felder in der Matrix auf Null bzw auf eins setzen.
NAch dem Prinzip kann man die Matrix dann auch erweitern, wenn man neue Sensoren dranbastelt. Es könnte sogar möglich sein, die Matrizen dann, nach erkennen einer gewissen ähnlichen Situation anzupassen, indem leere Felder mit konkreten Zahlen ausgefüllt werden.

Thomas Sc.
18.12.2005, 16:39
> Wir lesen also die Situationen aus, die relevant sind (welche ist ja erstmal egal, kann man dann
> ja später definieren) und erechnen dann die Matrix, die nötig wäre um die Bewegung auszuführen.

Hmm - ich mich irritiert das "errechnen". Mein Ansatz verwendet eigentlich nur "Wissen" in Form von zuvor gemachter Erfahrung, um von einer situation gezielt zu einer anderen gelangen zu können. Evtl. kann man noch über interpolation reden, wenn mehrere ähnliche "Wissens-einträge" gefunden werden. Aber errechnen klingt für mich nach wissen, wie lang (in mm) das Schienenbein ist, pytagoras, wissen um (kallibrierte) aktuelle winkelstellung der servos in grad, usw. usw.

Oder liege ich jetzt ganz daneben, und das errechen ist ganz anders gemeint?

Madgyver
18.12.2005, 20:57
Ne, mit erechnen meinte ich eigentlich, die Infomation in eine Form umzurechnen, die man später leichter verwerten kann. Denk es dir wie ein umrechnen auf ein Datenformat das man so speichern kann.