wiki:NeueVerhalten

Version 5 (modified by bbe, 11 years ago) (diff)

Vorschlag für Erweiterung des Frameworks

Ideen und Diskussionen

für das Framework

Man könnte ein Meta-Verhalten implementieren, dass andere Verhalten so lange ausführt, bis eine Bedingung zutrifft. Das ganze könnte in etwa so aussehen:

uint8 isTimeout(){
  // IF Intervall abgelaufen 
  // return 1
  // else
  // return 0
}

void bot_simple_behaviour(Behaviour_t *data){
  static uint8 state=0;
	
  switch (state){
    case 0:
      bot_solve_maze();
      run_behaviour_until(isTimeout,solve_maze_behaviour);
      state++;
      break;
    case 1:
      // nun ist entweder solve_maze fertig, oder es wurde ausgeführt, bis isTimeout zugeschlagen hat
      // prüfen was von beiden anhand des Feldes Subresult
     break;
    ...
  }
}

rund um neue Verhalten

Die Hardware des c't-Bots ist mittlerweile recht weit gediehen und auch das Framework sowie die Basisfunktionen stehen. An sinnvollen oder lustigen Verhalten mangelt es dem Bot jedoch noch. Hier ein paar Ideen und Anregungen, was man noch so alles mit dem Bot machen könnte. Fühlt Euch frei hier eigene Ideen Einzutragen, Pros und Contras zu sammeln oder Details der Implementierung zu beschreiben.

Sumoringen

In der Galerie Galerie findet sich bereits ein Video von zwei Bots beim Sumoringen. Der Code steht uns leider nicht zur Verfügung und er war vielleicht auch noch nicht ganz perfekt.

Todo:

  • Regelwerk aufstellen
  • Verhalten programmieren
  • Sim anpassen
    • Bot-Bot-Kollisionen erkennen
    • Physik mit in die Simulation einbauen
      • Beeinflussung von Objekten untereinander (Stoß, schieben)
      • Widerstand beim Schieben (beim Bot abhängig von der Richtung)
      • Massenträgheit

Contra:

  • Die realen c't-Bots sind an ihrer Front etwas sensibel, eigentlich will man sie nicht mit Full-Speed gegen ein Hidnerniss fahren lassen. Vielleicht einpacken in eine CD-Spindel und ein wenig polstern?
  • Bei realen Bots braucht man immer zwei Stück
  • Umbauten am Sim nötig

Ein paar Bilder, wie so ein Sumoringen aussehen kann, gibt es beim Robocup. Dort könnte man sich auch das Regelwerk abschauen.

Dosen sammeln

Man könnte in einem Labyrinth kleine Dosen verteilen, die der Bot dann suchen, aufnehmen und zu einem zentralen Punkt bringen muss.

Pro:

  • Teilverhalten bestehen schon, die man nutzen kann:
    • solve_maze() zum Durchfahren des Labyrinths
    • catch_pillar() zum Einfangen einer Dose im Nahbereich
    • map() legt eine Karte der Umgebung an
  • Es entstehen neue Teilverhalten, die man für andere Dinge mit benutzen kann.

Todo

  • es bräuchte ein Verhalten goto_location(), das einen Ort auf der Karte auf dem schnellsten freien Weg anfährt
  • es bräuchte ein Explore Verhalten
  • Sim um kleine bewegliche Objekte erweitern
  • Sim um das Einfangen im Transportfach erweitern
    • Servo-Befehle auswerten
    • Klappe visualisieren
    • Transportfachsensor implementieren, um Dosen im Fach zu erkennen
      • Schritt 1: Genauere Kollisionserkennung. Momentan: Ganzer Bot kollidiert. Gewünscht: Unterscheiden, ob Transportfach (die 3 Innenwände vom Bot-Mund) kollidieren oder was von der restlichen Bot-Shape