PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interessantes Projekt für Asuro-Einsteiger: AsuroParrot



daApprentice
08.10.2008, 22:52
Hallo,
der Name dieses Projektes, 'AsuroParrot', setzt sich aus dem Namen 'Asuro' und dem Wort 'Parrot', also 'Papagei', zusammen. Papageien sollen ja in der Lage sein, ausgesprochene Wörter zu wiederholen. AsuroParrot ist ein auf Asuro basierender Roboter, der Pfade wiederholen kann.

Ziel des Projektes ist demnach auf Basis von Asuro einen Roboter mit folgenden Fähigkeiten zu schaffen:
Steuerung durch Tastenbedienung im Aufnahmemodus;
Dabei Speicherung des zurückgelegten Pfades;
Wiedergabe eines gespeicherten Pfades im Wiedergabemodus.

Dabei ist AsuroParrot ein ausgesprochenes Lernprojekt. Ich habe Wert darauf gelegt, jede neue Erkenntnis, die ich gewonnen habe, sauber zu dokumentieren. Hinzu kommt, dass im Design durch Kollaborationsdiagramme das Zusammenspiel der 'Komponenten' dargestellt wurde. Daher ist die Doku besonders ausgiebig ausgefallen, was Asuro-Neulinge wie ich einer bin eventuell helfen kann.

Technischer Schwerpunkt des Projektes ist die Nutzung des EEPROM-Speichers für die Ablage der Pfade. Daneben werden Timer Overflow Interrupts genutzt. Auch die Routinen zum Auslesen der Buttons werden vielseitig eingesetzt.

AsuroParrot ist ein Lernprojekt und hat deshalb keine Ambitionen auf praktische Einsetzbarkeit. Auch für die Verwendung als Party-Gag verbleiben jedoch folgende mir bekannte Schwächen:
1) Für die Steuerung wird kein Regelkreislauf verwendet; der Mechanismus speichert, wieviel speed die Motoren im Aufnahmemodus erhalten haben und gibt ihnen bei der Wiedergabe den gleichen speed; ob dies zur gleichen Geschwindigkeit führt, sei dahingestellt.
2) Die Bedienung im Aufnahmemodus ist extrem schwierig; die Buttons müssen während der Bewegung gedrückt werden und beim Drücken wird oft der Asuro verschoben, so dass die Wiedergabe nicht getreu ist;
3) Im Design habe ich keine Darstellung gefunden, um das zeitliche Zusammenspiel zwischen Timer Overflow Interrupt und der Abfrage der Buttons besser zu durchdringen. Da dieses Thema bei der Entwicklung viele Fehler verursacht hat, versuche ich immer noch dieses Problem zu lösen und experimentiere derzeit mit UML-Aktivitätsdiagrammen.

Viel Spaß mit meinem kleinen Projekt. Ich freue mich auf Anregungen, Fragen, Korrekturen und natürlich auch auf Kritik.

Grüße,
Alessandro

radbruch
08.10.2008, 23:10
Hallo

Wenn die Tasten zu fummelig sind ist vielleicht eine IR-Fernbedienung hilfreich:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=287750#287750

Mit Wegspeicherung sieht das bei mir dann so aus:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=287843#287843

Gruß

mic

oberallgeier
08.10.2008, 23:34
Hallo daApprentice,

DAS ist eine hübsche Idee! !


... 2) Die Bedienung im Aufnahmemodus ist extrem schwierig; die Buttons müssen während der Bewegung gedrückt werden und beim Drücken wird oft der Asuro verschoben, so dass die Wiedergabe nicht getreu ist ...Wäre es denn nicht möglich, den Aufnahmemodus zu starten mit Knopfdruck (Verzögerung danach einbauen, damit der Start ohne Störung durch den Experimentator erfolgen kann) - - - und danach kann sowieso nur eine begrenzte Menge an Datenpunkten aufgenommen werden. Sprich: die begrenzte Aufnahmekapazität des asuro-Speichers ist das Endekriterium. Und schon hast Du keine Störung während der Aufnahme. Könntest Du das so realisieren?

radbruch
09.10.2008, 00:18
Hallo

Es geht ja nicht nur um den Startknopf, die Wege müssen per Taste während der Fahrt eingegeben werden:

unsigned char analyzeRecordButton ()
{

//local variable that will hold the result of PollSwitch
unsigned char buttonPressed;

buttonPressed = PollSwitch();

switch (buttonPressed)
{
case 0x01:
return RECORD_RIGHT;
break;
case 0x02:
return RECORD_FRONT;
break;
case 0x04:
return RECORD_LEFT;
break;
case 0x03:
return RECORD_SOFT_RIGHT;
break;
case 0x06:
return RECORD_SOFT_LEFT;
break;
case 0x08:
return RECORD_STOP_TEMPORARILY;
break;
case 0x20:
return RECORD_END_PATH;
break;
}
//if none of the above
return NO_COMMAND;
}
(Aus AsuroParrot.c (https://www.roboternetz.de/phpBB2/download.php?id=14953), asuro-Besitzer werden wohl bei dieser blauäugigen Verwendung von PollSwitch() zusammenzucken)

Ich hoffe, ich habe die Funktionsweise richtig aufgefasst. Ich hatte noch keine Zeit mir das Archiv genauer anzuschauen, aber ein "asuro-Einsteiger" hat da wohl einiges zu nagen bevor er durchblickt.

Man könnte den asuro vielleicht etwas schieben lassen und dabei den Weg aufzeichnen.

Gruß

mic

daApprentice
09.10.2008, 07:21
Hallo,
in der Tat werden die Wege während der Fahrt eingegeben. Die Idee mit der Fernbedienung würde also das größte praktische Problem (die Verschiebung des Roboters bei der Eingabe und darauf folgende Verfälschung der Aufzeichnung) lösen.
Den interessanten Link von radbruch auf die Speicherung von Wegen habe ich mir grob angeschaut. Ich sehe den Mehrwert meines Projektes in der Didaktik; die Pfade (bis zu 6 können gespeichert werden) sind in einer einfach verbundenen Liste im EEMPROM abgelegt. Noch belegbare Zellen sind in einer 'EmptyList' abgelegt, aus der sich die Aufzeichnungsfunktion bedient. Nicht notwendige Pfade können wieder freigegeben werden (die Zellen wandern wieder in die 'EmptyList'). Das ganze ist m.E. ausführlich dokumentiert. Deshalb auch die Aussage, dieses Projekt sei für Anfänger geeignet.
Was die 'blauäugige' Verwendung von PollSwitch anbelangt (ich gehe davon aus, damit ist die Verwendung ohne 'Debouncing' und zweiter Prüfung der Eingabe gemeint) so habe ich davon erstmal abgesehen, weil mir die zeitlichen Zusammenhänge zwischen den Funktionen noch unklar sind. Wie lange dauert PollSwitch und inwiefern kann es meinen Timer Overflow Interrupt stören? In einer vorherigen Version hatte ich die Buttons in der External Interrupt 1 Routine ausgelesen und der Timer kam ganz durcheinander. Mein Verdacht ist, dass PollSwitch etwas länger dauert und der External Interrupt den Timer Interrupt verdrängt hat, so dass die Aufzeichnung ungenau wurde (weil der Timer Interrupt nicht zur richtigen Zeit ausgeführt wurde). Die Umstellung auf eine Endlosschleife in der Main() Routine hat dann besser funktioniert. Diese Zusammenhänge sind mir aber noch nicht klar.

Grüße,
Alessandro

robo.fr
09.10.2008, 09:14
Hallo Apprentice,

Du hast warscheinlich das "am meisten ausführlich dokumentierte ASURO Projekt jemals" geschaffen. :-)

Was mich etwas wundert, dass so viele Klassendiagramme zu sehen sind, obwohl keine Objektorientierte Sprache verwendet wurde.

Gruß,
robo

daApprentice
09.10.2008, 22:19
Hallo robo.fr,
deine Frage ist wohl der Knackpunkt.

M.E. ist eine saubere Sprache wie UML die einzige Chance für Einsteiger um in einer komplexen 'Umgebung' wie AVR zurecht zu kommen.

Erfahrene C entwickler programmieren oft sehr nahe an objektorientierten Paradigmen, ohne C++ nutzen zu müssen. Als 'Klasse' wird ein Struct verwendet, die Klassen-Methoden sind einfache Funktionen, welche die entsprechende Struct als ersten Parameter haben.
Die wichtigsten Vorteile von OO (Information Hiding, separation of concerns, Übersichtlichkeit, Wiederverwendbarkeit) sind gewonnen. Die komplexen und Performance-fressenden Eigenschaften (Overloading, Vererbung, Polymorphismus) sind gar nicht möglich.

Wenn man bedenkt, dass AsuroParrot mein erstes Projekt mit dem Atmega8 ist, habe ich durch den Einsatz von UML im Design eine gute Vorbereitung der Programmierung erhalten und viele Fehler schon vorab gefunden. Für den Atmega8 mag das Overkill erscheinen, aber eines Tages möchte man doch auf stärkere Mikroprozessoren wechseln und komplexere Aufgaben lösen. UML bietet dafür die notwendige Skalierbarkeit.

Ich würde den Einsatz von OO-Methoden und von UML jedem Anfänger in der Programmierung von Microcontrollern ans Herz legen.

Grüße,
Alessandro

daApprentice
09.10.2008, 22:22
Hallo,
im Archiv habe ich die HEX-Datei vergessen.

Kann man sich zwar durch Einsatz des AVR Studio 'builden' lassen, aber der Vollständigkeit halber hier ein Archiv mit der Datei, welche direkt in den Asuro übertragen werden kann.

Grüße,
Alessandro

oberallgeier
09.10.2008, 22:35
... UML die einzige Chance für Einsteiger um in einer komplexen 'Umgebung' ... zurecht zu kommen ...Im Prinzip hast Du recht. Obwohl ich nur wenig in UML hineingeschnuppert hatte - und es (leider) nicht benutze. Ich bin überzeugt, dass man auch UML einigermassen gut können muß, damit etwas Vernünftiges herauskommt. Und ich hatte mich mit meinen altertümlichen Diagrammen begnügt.