Fragen zum Einstieg in die Programmstruktur des c't Bots

Die Programmierung des c't-Bot
Antworten
SonicXT

Fragen zum Einstieg in die Programmstruktur des c't Bots

Beitrag von SonicXT » 04 Okt 2010, 19:37

Hi! Wie es auch vielen anderen geht so brauche ich (wir) ebenfalls etwas Hilfe.

Durch unser Studium wurden wir mit dem Thema c't Bot konfrontiert. Der Bot ist vorhanden und betriebbereit. Dazu haben wir schon ein paar hier im Forum präsentierte Programme überspielt und geschaut ob sich der Bot entsprechend verhält.

Tja und nun geht es an ein eigenes Programm. Die Entwicklungsumgebung Eclipse wurde dafür eingerichtet. Weiterhin haben wir die "Binaries.zip" geladen. Aber da fangen die Verständnisprobleme an. Wir haben keinen rechten Artikel gefunden, die einem veraten was man genau für Programme und Unterprogramme verwenden und wie man das ganze aufbauen muss um es letztendlich auch compilieren zu können.

Der Stand ist derzeit so weit, dass es ein Hauptprogramm gibt welches sich "ct-bot.c" nennt und dieses sehr viele Unterprogramme mittels include einbindet. Manche Unterprogramme erklären sich durch ihren Namen doch durch diese Fülle an Dateien finden wir keinen rechten Zugang um selbst ein kleines Programm zu schreiben.

Gibt es jemanden, der uns einen besseren Einblick in diese Dateistruktur geben kann. Hilfreich wäre es auch zu erfahren welche Struktur benötigt wird um lediglich die Motoren des Bot ansprechen zu können, um dann darauf weiter aufbauen zu können.


Für Hilfe wären wir sehr dankbar.

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 05 Okt 2010, 13:36

Hi,

habt ihr schon das Wiki (im Prinzip die offizielle Dokumentation zum c't-Bot) unter http://www.heise.de/ct/projekte/machmit/ctbot/ gesehen? Dort gibt es beispielsweise die Seite Erste Schritte für Einsteiger sowie Links zu allen Artikeln und viel Dokumentation zum Code.

Viele Grüße,
Timo

SonicXT

Beitrag von SonicXT » 09 Okt 2010, 22:32

Hallo! Wir haben uns auf der von dir genannten Seite nochmals umgeschaut. Doch ist es nicht wirklich hilfreich, was dort zu finden ist zumindest wenn man nach Details sucht.

Es tut sich jedoch eine andere große Frage auf.

Was macht eigentlich das c't Bot Programm aus dem Stable Ordner. Wir haben es kompiliert und zum Bot übertragen. Aber das einzige was dieser tut ist... nichts. Wenn dieser auf einer Oberfläche steht drehen sich die Räder nicht. Hält man ihn hingegen in der Luft fangen die Räder an zu drehen. Auch leuchtet ständig die orangene LED, welche den Angaben zufolge für einen Fehler steht. Nur welchen? Kann uns das jemand erklären?

Ein anderes Programm aus dem Forum (z.B. der Wandfolger) funktioniert anscheinend ohne Probleme. Wo ist der Unterschied zwischen einem solchen Programm und dem vom Heise-Server?

Grüße

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 12 Okt 2010, 17:29

Hi,
SonicXT hat geschrieben:Hallo! Wir haben uns auf der von dir genannten Seite nochmals umgeschaut. Doch ist es nicht wirklich hilfreich, was dort zu finden ist zumindest wenn man nach Details sucht.
oh, was für Details braucht ihr denn? Vieles in der Dokumentation ist natürlich erstmal für den Einstieg gedacht. Bei Fragen zu Details am besten an die Mailingliste wenden oder halt im Forum fragen.
SonicXT hat geschrieben:Was macht eigentlich das c't Bot Programm aus dem Stable Ordner. Wir haben es kompiliert und zum Bot übertragen. Aber das einzige was dieser tut ist... nichts.
Na ja, wäre doch auch blöd, wenn der Bot dann sofort gegen die nächste Wand fährt oder so. Stattdessen wartet er auf Befehle, z.B. von der Fernbedienung: Taste Pause ("nach oben") erhöht die Geschwindigkeit beider Räder, Taste Stop ("nach unten") erniedrigt die Geschwindigkeit beider Räder, Taste << ("nach links") erhöht die Geschwindigkeit des rechten Rades / erniedrigt die des Linken , Taste >> ("nach rechts") umgekehrt. Taste 10 hält die Räder an, Taste Power ist Not-Aus. Taste 2 dreht den Bot um 90 Grad, Taste 9 um -180 Grad. Mit anderen Tasten lässt sich das Display "umblättern" usw., für Einzelheiten am besten in den Code in der Funktion ui/rc5.c::default_key_handler() schauen.

Außerdem gibt es viele Verhalten, die auch intelligentere Funktionen ausführen können, z.B. eine Dose finden und einfangen. Oder eine Karte der Umgebung erstellen und Hindernisse umfahren. Eine Übersicht der verfügbaren Verhalten findet ihr unter http://www.heise.de/ct/projekte/machmit ... /Verhalten.
SonicXT hat geschrieben:Wenn dieser auf einer Oberfläche steht drehen sich die Räder nicht. Hält man ihn hingegen in der Luft fangen die Räder an zu drehen.
Dafür ist eines der Notfallverhalten verantwortlich: Sobald die Abgrundsensoren vorne erkennen, dass sie keinen Boden mehr unter sich haben, lässt es den Bot rückwärts fahren, um nicht in den Abgrund zu gelangen / vom Tisch zu fallen.
SonicXT hat geschrieben:Auch leuchtet ständig die orangene LED, welche den Angaben zufolge für einen Fehler steht. Nur welchen?
Orange LED an = kein Fehler. Orange LED aus = Akkus leer oder (falls vorhanden) Servo blockiert. So steht es auch im Inbetriebnahme-Artikel.
SonicXT hat geschrieben:Ein anderes Programm aus dem Forum (z.B. der Wandfolger) funktioniert anscheinend ohne Probleme. Wo ist der Unterschied zwischen einem solchen Programm und dem vom Heise-Server?
Der Code vom Heise-Server ist nicht "nur" ein Programm, sondern mehr eine Art Betriebssystem (genauer: ein Framework) für den Bot. Er bringt auch schon einige Anwendungen (Verhalten, s.o.) mit, stellt aber außerdem auch eine Plattform zur Verfügung, um für eigenen Code nicht immer das Rad neu erfinden zu müssen. So braucht sich der eigene Code dann z.B. nicht um die Auswertung und Umrechnung der Sensordaten zu kümmern, sondern kann einfach auf diese vorverarbeiteten Daten zugreifen. Welche Funktionalität aktiviert ist, lässt sich über verschiedene "Schalter" (C Präprozessor Defines) steuern, siehe http://www.heise.de/ct/projekte/machmit ... /Verhalten und http://www.heise.de/ct/projekte/machmit ... iki/ctBotH.

Grüße,
Timo

SonicXT

Beitrag von SonicXT » 13 Okt 2010, 11:22

Danke für deine ausführliche Beschreibung. Sowas hat uns gefehlt. Das man den Bot mit der Fernbedienung steuern kann haben wir komischer Weise nirgends gelesen (vermutlich überlesen?).

Wir sind gerade dabei am bot_simple_behaviour zu testen. So langsam werden Zusammenhänge klar.

Aber als Einsteiger hat man echt einen Berg von Programmcode vor sich, wo man nicht recht weiß, wo man anfangen soll sich zu belesen. So befinden sich im ct-bot.c ein paar Zeilen Quellcode, der den Bot links und dann rechts drehen lässt. Da war auch der Grund, warum wir uns gewundert haben, dass er nichts macht, wenn es doch dort steht. Sowas ist am Anfang verwirrend.

Im Endeffekt sollen wir als Projekt sowas in der Art machen, dass ein Bot eine Tätigkeit ausführt und nach erfolgreichem Abschluss einem anderen über WLAN mitteilt, dass dieser fertig ist und der andere anfangen kann, seine Aufgabe zu erfüllen. Was denkt ihr, ist sowas mit niedrigem Kenntnisstand machbar?

Grüße

eax
Friends of Robby
Friends of Robby
Beiträge: 765
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 13 Okt 2010, 15:48

SonicXT hat geschrieben:[…] So befinden sich im ct-bot.c ein paar Zeilen Quellcode, der den Bot links und dann rechts drehen lässt. Da war auch der Grund, warum wir uns gewundert haben, dass er nichts macht, wenn es doch dort steht. Sowas ist am Anfang verwirrend.
Die entsprechenden Zeilen sind per #ifdef "ausgeschaltet", solange man den Testcode nicht aktiviert. Um hier den Überblick zu behalten, bietet es sich an, einen Editor wie Eclipse zu verwenden, der solche inaktiven Codeteile automatisch anders einfärben und / oder ausblenden kann.
SonicXT hat geschrieben:Im Endeffekt sollen wir als Projekt sowas in der Art machen, dass ein Bot eine Tätigkeit ausführt und nach erfolgreichem Abschluss einem anderen über WLAN mitteilt, dass dieser fertig ist und der andere anfangen kann, seine Aufgabe zu erfüllen.
So etwas gibt es bereits seit einiger Zeit im Code. Es benutzt die Bot-2-Bot-Kommunikation und kann darüber ein Verhalten auf einem anderen Bot starten, der Schlüssel hierzu ist die Funktion int8_t bot_2_bot_start_remotecall(uint8_t bot_addr, char * function, remote_call_data_t par1, remote_call_data_t par2, remote_call_data_t par3) in bot-2-bot.c. Siehe auch http://www.heise.de/ct/newsletter/archi ... 11585.html.
Das Verhalten behaviour_drive_stack benutzt diesen Mechanismus bereits. Das Ganze lässt sich aber sicherlich noch ausbauen, z.B. mit einer Rückmeldung, ob das Verhalten erfolgreich abgearbeitet wurde etc.
SonicXT hat geschrieben:Was denkt ihr, ist sowas mit niedrigem Kenntnisstand machbar?
Na ja, das ist ohne den Hintergrund der Personen zu kennen, die das umsetzen wollen, nur sehr schlecht zu beurteilen. Ich denke, grundsätzlich sollte man Programmieren können, insbesondere in C und muss dazu bereit sein, sich in den vorhandenen Code (und die Dokumentationen) einzuarbeiten. Der Kenntnisstand über das c't-Bot Projekt sollte sich dann eigentlich schnell erhöhen.

Grüße,
Timo

Antworten