THOMAS - eine selbstentwickelte Robotik-Plattform

L.B.

BIOS-Overclocker(in)
Thomas Logo_text+graphics.png

Hallo erstmal,

an dieser Stelle möchten wir ein gemeinsames Projekt vorstellen, das seit Herbst 2010 läuft. Nun sind wir soweit, dass wir ein halbwegs brauchbares Ergebnis vorweisen können. Wir führen zwar schon seit geraumer Zeit ein Projekt-Log, das leider nicht so gut besucht ist. Deshalb haben wir uns entschieden es ebenfalls im Forum zu präsentieren.

Zunächst einmal, was ist THOMAS?
THOMAS ist ein Akronym (leider nicht rekursiv, aber was solls) und steht für Terestrial Hightech Observation Machinery and Autonomous System. :D Gleichzeitig stellt der Name einen Bezug zu unserer Schule her. Um es etwas kompakter auszudrücken, THOMAS ist/wird ein Roboter.

Was ist das Besondere an THOMAS?

Nicht ohne Grund schreiben wir das Projekttagebuch im PCGH-Forum. Denn auf unserem Roboter kommt ein handelsüblicher Desktop-PC aus dem Jahre 2004 zum Einsatz. Das OS ist in unserem Fall Ubuntu 11.10. Die Stromversorgung übernehmen vier Bleiakkus, die extrem kompliziert verschaltet sind (eine Erklärung lasse ich an dieser Stelle aus, sonst schalft ihr ein :schief:). Jedenfalls ist es uns möglich, die Spannung wahlweise zwischen 12 und 24 Volt umzuschalten, je nachdem, was in der aktuellen Betriebssituation sinnvoller erscheint. Über ein PicoPSU wandeln wir die Akkuspannung dann in die PC-üblichen Gleichspannungen von 3,3V, 5V und 12V. Das gesamte System ist auf einen geringen Stromverbrauch optimiert. Die Leistungsaufnahme liegt bei Prime95 (in-place large ffts) bei lediglich 31,67 Watt, im Leerlauf sogar bei nur 13,83 Watt. Damit der Roboter bzw. seine Festplatte nicht bei der erstbesten Bordsteinkante einen Headcrash erlebt :ugly:, kommt eine 32GB SSD der ersten Generation zum Einsatz.
Das Chassis wurde aus Aluprofilen mit 20mm Kantelänge aufgebaut und ruht auf zwei 15"-Rädern aus einem Kinderfahrrad. Im hinteren Bereich ist ein beweglich aufgehängtes und gefedertes Stützrad montiert. Zur besseren Vorstellung gibt es ein Bild (frühes Stadium, die Motoren sind noch nicht eingebaut):

k-bild0075.jpg

Den Antrieb übernehmen zwei 12V-Scheibenwischermotoren, die ein Drehmoment von maximal 26,8 Nm auf die Achsen bringen (bei Blockierung). Weitere Infos über die Hardware, etc. gibt es im weiteren Verlauf des Threads, zunächst jedoch ein wenig Eigenwerbung.

Wer arbeitet an dem Projekt?
Wir sind ein Team von aktuell fünf Leuten, wobei jeder im Team sein eigenes Aufgabenfeld hat, in dem seine Interessen und Fähigkeiten zum Einsatz kommen. In der Abteilung Software arbeiten derzeit zwei Leute, ein weiterer übernimmt die Administration des Linux-Systems und ein Kollege und ich arbeiten an der Hardware. Das funktioniert erstaunlich gut und ermöglich ein effizientes Arbeiten.

Was kostet der Spaß?
Unser Budget liegt bei 200€ pro Jahr, was für ein Projekt in diesem Umfang verhältnismäßig wenig ist. Aus diesem Grund sind wir auch noch auf der Suche nach Sponsoren.

So, genug gelabert, kommen wir zu den visuellen Medien.

Zunächst einmal gibt es die Videos der ersten drei Testfahrten in chronologischer Reigenfolge.

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Hier war noch kein PC zur Steuerung aktiv, es wurde nur getestet, ob sich der Antrieb in seine Einzelteile zerlegt oder ob alles funktioniert.
Anschließend gab es die erste Testfahrt mit Steuerung über den PC.
Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Übrigens: Die Motoren werden in diesem Stadium noch über eine Relaiskarte geschaltet, in wenigen Tagen übernimmt eine PWM-Steuerung diese Aufgabe und diese wird über einen Joystick bedient.

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

In diesem Video übertragen wir die Steuerungsdaten, sowei das Bild einer Webcam über das lokale Wlan-Netz. Das war die erste Testfahrt, in der der Roboter "vollständig von der Außenwelt abgeschirmt" gefahren ist. Natürlich musste die Tastatur, über die der Roboter gesteuert wurde in genau diesem Moment den Geist aufgeben, weshalb wir direkt mal die Wand kaputt gemacht haben. :P Der Roboter hat aber nichts abbekommen. :D:ugly:

Kommen wir nun zu den Bildern.

k-bild0085.jpg
k-bild0079.jpg
k-bild0081.jpg
k-bild0064.jpg
bild0041.jpg
k-bild0084.jpg
k-bild0074.jpg
bild0048.jpg
bild0047.jpg
k-bild0083.jpg
k-bild0082.jpg
k-bild0061.jpg
bild0045.jpg

Weitere Bilder könnt ihr euch im vorhandenen Projekt-Log ansehen: ;)
 
Zuletzt bearbeitet:
Sehr interessantes Projekt. Vor allem da ich mich gerade selbst mit einem(atmel basierten) Fahr-Roboter rum schlagen muss.
Zielt ihr eigentlich auf eine "Segway Funktion" mit den beiden großen Rädern oder ist das Dreiergespann als Dauerlösung gedacht?
BTW: Wie bindet man die Videos direkt ein? Das funktioniert mal wieder nicht.
Indem man auf den "Video einfügen" Knopf drückt und dann in dem kleinen Fenster die komplette URL einfügt. Die andern beiden Video Funktionen für YT und HWClip sind eigentlich veraltet(oder deprecated, wie der Softwareker sagen würde) bleiben aber weiter nutzbar damit alte Posts wie gewohnt funktionieren.
 
Danke für eure Antworten. ;)
Den Roboter auf einer Achse balancieren zu lassen ist eine Möglichkeit, die wir anfangs auch ins Auge gefasst hatten. Da die Konstruktion mit dem Stützrad aber erstaunlich gut funktioniert, besteht vorerst kein Bedarf an einer Balanierfuktion. Das Problem ist auch immer, dass wir nur das Nötigste einbauen können, bis wir entsprechende finanzielle Mittel organisiert haben.

P.S. Die Motorsteuerung basiert auch auf einem AtMega. ;)
 
Herzlichen Glückwunsch zur Main! :daumen:

Ist echt ein tolles Projekt, was du da mit deiner Gruppe auf die Beine stellst.
 
hey

super projekt - da ist mein abschlussprojekt nicht so toll

wegen dem finanzieren - schaut einfach bei jeder firma vorbei die auch nur im entferntesten etwas damit zu tun hat - zb. das gestell könnte baumax sponsorn, kabel ein elektiker in der nähe und so weiter - wir bekommen alles von der schule gestellt aber ein anderes Projekt hat es so gemacht und hat in summe einiges gespart!

das einzige was ihr normalerweise machen müsst sind sticker auf die hülle zu kleben und die frimen bei der präsentation erwähnen!
 
@Own3r: Danke dir. ;)
@fuelre: Die Finanzen werden wir schon irgendwie organisiert bekommen. Aktuell läuft die Finanzierung bei uns auch über die Schule, was aber den entscheidenden Nachteil hat, dass wir nächstes Jahr, wenn wir Abi haben, alles zurückkaufen müssen. Das wäre bei einem externen Sponsor nicht der Fall.

Heute wollten wir eigentlich (!) einen ersten Funktionstest der neuen Motorsteuerung mitsamt Testfahrt und was sonst noch dazugehört durchführen. Die Motorsteuerung hatte aber scheinbar keine Lust. :ugly: Im Klartext: Die Steuerung ist im Eimer! :what: Aber das ist alles halb so wild, denn wir werden sie schnellstmöglich umtauschen und können dann weitermachen.
 
Nachdem ich noch ein wenig mit der Steuerung herumexperimentiert habe, stellte sich heraus, dass der Datenstecker, mit dem die Steuerung an den PC angeschlossen ist, falsch gepolt war. Jetzt ist es zwar laut Anleitung genau falsch gepolt, aber es funktioniert, was auf einen Fehler in der Anleitung hindeutet. :schief:
Wie dem auch sei, morgen wird der geplante Joystick-Test durchgeführt. Falls während der Testfahrt keine mittelschwere Katastrophe passiert (Treppenabsturz, Explosion der Akkus, Abbrennen des PCs/der Motorsteuerung, etc. :ugly:), wird es ein Video geben. :D Voraussichtlich werden wir für den ersten Joystick-Test aber noch auf eine Übertragung via WLAN verzichten, um zu viele potentielle Fehlerquellen zu vermeiden.
 
AW: THOMAS - eine selbstentwickelte Robotik-Plattform --- Update: Joystick-Steuerung

So, da sind wir wieder. :D Soeben erreichte mich die Meldung, dass das Software-Team die bisher nicht funktionsfähige Software fertiggestellt und einen erfolgreichen Funktionstest durchgeführt hat. In der Zwischenzeit hat sich auch auf Seiten der Hardware etwas getan, und zwar wurde das oben beschriebene, schaltbare 12/24 Volt-System zu einer einfachen Parallelschaltung aller 4 Akkus "downgegraded", da sich der gleichzeitige Betrieb von PC im 24V-Modus und der Motorsteuerung im 12V Modus als äußerst...ähmm...pyrotechnisch effektvoll erwiesen hat. :fresse::ugly:
Der aktuelle Status sieht also so aus: Wir können den Roboter mithilfe eines Joysticks im zweiachsigen Koordinatensystem an jeden beliebigen Punkt steuern (die dritte Achse, also Flugbetrieb, kommt erst später...:D) und das dank PWM (fast) stufenlos geregelt und verhältnismäßig verlustarm. Der nächste Arbeitsschritt auf Software-Ebene sieht die Kommunikation des Roboters mit dem Steuerrechner über xml-rpc vor. Diesbezüglich konnten wir bereits vor einiger Zeit einen kleinen Teilerfolg erzielen, indem wir ein Array mit 4 Werten (entspricht dem Joystick-Array mit den Achsen-Kordinaten) vom Host-Rechner an den als Server initialisierten Roboter geschickt haben.*

*Alle Angaben zur Software ohne Gewähr, ich bin schließlich nur der Hardware-Fuzzi. :-D

Ein Video der Testfahrt und einige neue Bilder kommen gleich auch noch. ;)

Edit: Die Bilder

k-CIMG2692.JPG

k-CIMG2705.JPG
Karosserie

k-CIMG2702.JPG
Motherboard mit darunterliegender Relaiskarte für spätere Applikationen

k-CIMG2699.JPG
Motorsteuerung

k-CIMG2696.JPG
Motor mit Motorritzel und Antriebskette

k-CIMG2693.JPG

k-CIMG2706.JPG
Stoßdämpfung des hinteren Auslegers (einstellbar)

k-CIMG2703.JPG
Draufsicht

k-CIMG2700.JPG
Verschaltung der Akkus und I/O-Bereich des Rechners

k-CIMG2697.JPG
Seitenansicht des Antriebsstrangs

k-CIMG2694.JPG

k-CIMG2704.JPG
Die Risse im Lack kommen daher, dass ich bei einer Außentemperatur von -10°C lackiert habe, was nicht gerade optimal war.

k-CIMG2701.JPG

k-CIMG2698.JPG
Schalter (echt?) mittlerweile zum Schalten der Versorgungsspannung für die Motorsteuerung

k-CIMG2695.JPG

Edit²: Das Video kommt erst später, da es noch geschnitten werden muss.
 
Zuletzt bearbeitet:
AW: THOMAS - eine selbstentwickelte Robotik-Plattform --- Update: Joystick-Steuerung

Nachdem ich nach sieben Wochen in Sachen Video mal selbst Hand angelegt und den Krempel geschnitten habe, stieß die Verwendung des Windows Live Movie Makers (verständlicherweise :ugly:) auf massive Kritik. Also wurde das Video gestern endlich mithilfe professioneller Videsoftware bearbeitet und kann nun präsentiert werden <?php trommelwirbel();?> :D

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Außerdem wurden in der Zwischenzeit einige kleinere Änderungsmaßnahmen zur Verbesserung der Fahrphysik an der Hardware vorgenommen. Näheres dazu erfahrt ihr hier. Im Übrigen habe ich zwischenzeitlich auch das neue Webdesign programmiert, aber das ist erstmal Offtopic. Des Weiteren habe ich auch noch ein Buch über das Projekt geschrieben, wen es interessiert, der sollte einen Blick in den Projektblog werfen (einen Link spare ich mir, weil das unter die Kategorie "Werbung" fallen würde :D).
 
AW: THOMAS - eine selbstentwickelte Robotik-Plattform --- Update: Joystick-Steuerung

In Kürze (diesmal meine ich auch "Kürze" und keine 7 Wochen :schief:) wird es ein neues Video geben, in dem mein gestriger Vortrag über das Projekt zu sehen sein wird. Somit bekommt man recht schnell einen guten Überblick über das Projekt und muss nicht die ganze Dokumentation lesen.
 
Aluminium-Profile sind äußerst vielseitig.. :daumen:

Gefällt mir dein Projekt und ich bin schon gespannt auf den Vortrag.
 
Danke euch. ;) Rechnet mal Ende nächster Woche mit der Fertigstellung des Videos. Überspielt wurde das Material schon (die gute alte Analogtechnik... :D) und muss jetzt noch bearbeitet werden.

@fragapple: Ja die Profile sind echt gut und auch verhältnismäßig günstig. :daumen:
 
Houston, wir haben ein Problem.
1,28 GiB Video vs. 16kiB/s Uplink vs. YouTube, das nicht funktioniert...
Wenn es gut läuft, ist das Video Freitag online. :ugly:
 
Sieht richtig klasse aus, bin erst jetzt drauf gestoßen :D
Soll das Teil später auch selbstständig fahren können oder bastelt ihr im Prinzip "nur" eine Art ferngesteuertes Auto? :D
 
Danke. :daumen:
Ja, der Roboter soll später natürlich auch autonom fahren können, sonst wäre es ja kein Roboter. Allerdings müssen wir bis dahin noch entsprechende Sensorik verbauen, wie z.B. Ultraschallsensoren, und diese auch noch mit der Software verknüpfen. Letzteres ist eigentlich der wichtigste Aspekt bei einem Roboter, denn erst durch das Zusammenspiel verschiedener Sensoren mit der Software bekommt der Roboter einen guten "Überblick" über seine Umgebung und kann entsprechend interagieren. Bis dahin wird es aber noch etwas dauern, da wir aktuell nur sehr langsam voran kommen (u.a. weil 40% unseres Teams gerade Abitur machen).

Edit: Jetzt habe ich den ersten Teil des Videos zwar hochgeladen, aber die Bild- und Tonqualität sind nach dem Komprimieren so schlecht, dass man die Folien nicht mehr erkennen kann und kaum etwas versteht. :rollen: Wenn ihr wollt, könnt ihr euch den ersten Teil hier angucken, ich kann es aber nicht empfehlen. :ugly: Fazit der Aktion: DSL 2000 verhindert einen effektiven Workflow und ist einfach nur eine Strafe...:D Es wird aber an einer Lösung gearbeitet.
 
Zuletzt bearbeitet:
So, das war das letzte Mal, dass ich in Zusammenhang mit DSL 2000, drei jeweils 50MB großen Videos und YouTube irgendetwas verspreche. :hmm: Aber ich habe es doch noch hinbekommen. :ugly:
Leider konnte ich nur extrem stark komprimiertes Material hochladen, weshalb Bild- und Tonqualität minimal gelitten haben. :schief: Ich hoffe, man kann trotzdem etwas erkennen.

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Ansonsten sind die Fortschritte aufgrund terminlicher Engpässe eher gering. Wir planen jedoch für übernächste Woche ein "THOMAS Development and Research Camp", bei dem wir am Roboter weiterarbeiten wollen.
 
AW: THOMAS - eine selbstentwickelte Robotik-Plattform --- Update: Joystick-Steuerung

Gestern fand ein sechsstündiges Treffen statt, bei dem wir einige schon seit Monaten aufgeschobene Arbeitsschritte auf unserer Todo-Liste abhaken konnten. Unter anderem die Datenübertragung zwischen Host und Client, also Steuerungs-PC und Roboter.
Wie in der Dokumentation ersichtlich wird, haben wir hierfür zunächst das HTTP-Protokoll, spezieller XML-RPC, eingesetzt. Der Name spiegelt im Übrigen die Usability dieses Protokolls recht gut wider - es gibt keine. :ugly:
Nachdem wir keinen Bock mehr auf XML-RPC hatten, haben wir Google angeworfen und keine Viertelstunde später wurden die ersten Daten mittels der neuen Übertragungsmethode gesendet. :D Diesmal programmieren wir quasi auf der tiefsten Ebene und nutzen sogenannte sockets, um die Datenübertragung zu realisieren. Dadurch können wir verhältnismäßig einfach das Array, das die Joystick-Daten enthält, an den Roboter senden und dort weiter verarbeiten.

Wer sich dafür interessiert, kann sich den Quellcode angucken (Man beachte bitte auch die höchstprofessionelle Debugging-Meldung in der fünftletzten Zeile. :ugly:):
Code:
int socket_server_start()
{
     int sockfd, newsockfd;
     socklen_t clilen;
     char buffer[256];
     struct sockaddr_in serv_addr, cli_addr;
     int n;
     
     // Socket erstellen
     sockfd = socket(AF_INET, SOCK_STREAM, 0);
     
     // Fehler?
     if (sockfd < 0) 
        error("ERROR opening socket");
     
     
     bzero((char *) &serv_addr, sizeof(serv_addr));
     
     // Servereinstellungen
     serv_addr.sin_family = AF_INET;
     serv_addr.sin_addr.s_addr = INADDR_ANY;
     serv_addr.sin_port = htons(PORT);
     
     
     if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) 
        error("ERROR on binding");
     
     // Listenen
     listen(sockfd, 5);
     
     clilen = sizeof(cli_addr);
     
     newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
     
     if (newsockfd < 0) 
          error("ERROR on accept");
     
     bzero(buffer,256);
     
     while(n = read(newsockfd,buffer,255)) {
     
        if (n < 0) 
            error("ERROR reading from socket");

        for(int i = 0; i < 4; i++) {

            axis[i] = buffer[i];

        }
     
     }
     
     printf("Blub\n");
     fflush(stdout);
     
     close(newsockfd);
     
     close(sockfd);
     
     return 0;
     
}
Nächsten Mittwoch werden wir das Programm komplett in den Code implementiert haben und können den Roboter zum allerersten Mal ohne Kabelverbindung mit der neuen Joystick-Steuerung fahren lassen.
 
Zurück