PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO und ct-Bot Logik



stochri
19.05.2007, 15:25
Hallo Zusammen,

hat schon mal jemand von euch versucht, die ct-Bot Logik auf den ASURO zu übertragen? Die Sourcen für den ct-Bot sind ja auf heise Open Source:
http://www.heise.de/ct/projekte/ct-bot/download.shtml

Gruss,
stochri

ehenkes
19.05.2007, 16:35
Darüber nachgedacht habe ich schon. Ich finde das c't-Bot-Frame allerdings nicht sonderlich gelungen. Daher sehe ich darin wenig Sinn.

Viel interessanter wäre es ein Programmgerüst für den ASURO in sauberem C++ aufzusetzen. Welches Tool wäre hier sinnvoll?

damaltor
19.05.2007, 18:49
ich würde es evtl von hand versuchen, ich vertraue den tools nicht... allerdings, um speicher zu sparen, wäre es sehr gut die routinen in asm neu zu schreiben... allerdings ist auch das kein pappenstiel.

stochri
19.05.2007, 19:19
Hallo ehenkes,

So wie ich auf Deiner Homepage gesehen habe, kennst Du Dich mit dem ct-Bot ja bestens aus.

Darüber nachgedacht habe ich schon. Ich finde das c't-Bot-Frame allerdings nicht sonderlich gelungen. Daher sehe ich darin wenig Sinn.

Ich habe mir die Bot-Logik mal ein wenig angeschaut und finde das Verfahren mit den verketteten Listen sehr interessant. Bei der Umsetzung des Verfahrens könnte ich sicherlich noch was lernen.
Sind die Listen mit der Möglichkeit, neues Verhalten während der Laufzeit hinzuzufüngen oder die Prioritäten zu ändern nicht besonders sinnvoll für die Robtersteuerung? Gefhühlsmässig glaube ich schon, bin mir aber nicht sicher, ob das Verfahren in der Praxis was taugt.

Vielleicht wäre auch die ct-bot Simulationsumgebung interessant, gerade bei größeren Programmen wird es ja etwas zeitaufwändig, den ASURO bei jeder Änderung neu zu flashen.

Gruss,
stochri

ehenkes
21.05.2007, 23:01
Die Programmstruktur des c't-Bot habe ich einige Zeit analysiert. Hier ist die zentrale Routine:


/* Hauptprogramm des Bots. Diese Schleife kuemmert sich um seine Steuerung. */
int main (void)
{
//...

init(); // enthaelt u.a. bot_behave_init();

//...

/*! Hauptschleife des Bot */
for(;;)
{
//...
// Testprogramm, dass den Bot erst links, dann rechtsrum dreht
#ifdef TEST_AVAILABLE_MOTOR
calls++;
if (calls == 1) motor_set( BOT_SPEED_SLOW, -BOT_SPEED_SLOW);
else if (calls == 501) motor_set(-BOT_SPEED_SLOW, BOT_SPEED_SLOW);
else if (calls== 1001) motor_set( BOT_SPEED_STOP, BOT_SPEED_STOP);
else
#endif
//...
#ifdef BEHAVIOUR_AVAILABLE
bot_behave(); // <--- Diese Funktion sorgt fuer das Verhalten des c't-Bot
#endif
//...
#ifdef MCU
#ifdef BOT_2_PC_AVAILABLE
static int16 lastTimeCom =0;
bot_2_pc_inform(); // Den PC ueber Sensorern und Aktuatoren informieren
if (timer_get_s() != lastTimeCom) // sollte genau 1x pro Sekunde zutreffen
{
lastTimeCom = timer_get_s();
bot_2_pc_listen(); // Kommandos vom PC empfangen
}
#endif
#endif
//...
}
/*! Ende Hauptschleife des Bot */
//...
}

Den Rest kann man auf meiner Homepage nachlesen. Dort habe ich die Zusammenhänge dargelegt. Hier noch bot_behave_init(), das in diesem Fall bot_simple_behaviour aktiviert.


// Kette:
// main() ---> init() ---> bot_behave_init ---> bot_...

void bot_behave_init(void) /* Initialisert das ganze Verhalten */ (komplett s.o.)
{
// Verhalten zum Schutz des Bots, hohe Prioritaet, Aktiv
insert_behaviour_to_list(&behaviour, new_behaviour(200, bot_avoid_border, ACTIVE));
insert_behaviour_to_list(&behaviour, new_behaviour(100, bot_avoid_col, ACTIVE));
// Verhalten, um Hindernisse besser zu erkennen, relativ hohe Prioritaet, modifiziert nur
insert_behaviour_to_list(&behaviour, new_behaviour( 60, bot_glance, ACTIVE));
//...
// Grundverhalten, setzt aeltere FB-Befehle um, aktiv
insert_behaviour_to_list(&behaviour, new_behaviour( 2, bot_base, ACTIVE));
activateBehaviour(bot_simple_behaviour); // hier waehlt man das gewuenschte Verhalten aus
//...
return;
}

Ich fand dies ziemlich komplex. Da ASURO für Anfänger gedacht ist, wirkt so etwas eher abschreckend. Ob das überhaupt bezüglich Speichergröße beim ASURO machbar ist, weiß ich auch nicht. Aber prinzipiell interessant ist diese Vorgehensweise. Vielleicht lässt sich das vereinfachen.