Hallo,
da die Aufgaben der Steuerung immer weiter zunehmen, ist wohl an der Zeit die Software besser zu strukturieren, typischerweise in Form von (C++)-Klassen. Bevor allerdings losprogrammiert wird, ist es ratsam die Ideen einmal grafisch in Form von UML-Klassendiagrammen darzustellen.
Hier also meine Ideen für das zukünftige Klassen-Layout einer modularen Mähroboter-Software (UML-Klassendiagramm Anhang).
Erklärung der einzelnen Klassen im angefügten Diagramm:
Robot: C++ Oberklasse für alle Roboter. Enthält keine Zugriffe auf die konkrete Hardware, definiert aber Methoden hierfür.
int readSensor(...) = 0; // abstrakt
void setActuator(...) = 0; // abstrakt
Konkrete Roboter leiten von dieser C++ Klasse ab um diese Methoden mit Leben zu füllen. Die Klasse implementiert den gesamten Roboter-Code welcher allen Mährobotern gemeinsam ist. Die Klasse Robot enthält Zugriff auf "Behavior-Klassen" welche die "Subsumption"-Architektur umsetzen. Mit Hilfe dieser Architektur kann das Verhalten des Roboters flexibel angepaßt werden. In den Beavior-Klassen erfolgt der Zugriff auf den Roboter über die Roboter-Klasse ( polymorph ).
Mower: Abgeleitete C++ Klasse. Implementiert den konkreten Ardumower. Hier erfolgen Zugriffe auf die Hardware.
int readSensor(...);
void setActuator(...);
Simulator: Abgeleitete C++ Klasse. Implementiert den Ardumower als Simulator. Hier erfolgen Zugriffe auf die spätere Simulator-Umgebung anstatt auf Hardware.
Behavior: Oberklasse für ein Verhalten. Definiert Methoden für die Subsumption-Architektur.
ObstacleBehavior: Abgeleitete C++ Klasse. Implementiert das Verhalten bei Hindernissen.
MowBehavoir: Abgeleitete C++ Klasse. Implementiert das normale Mähverhalten (typischerweise geradeausfahren).
ManualBehavor: Abgeleitete C++ Klasse. Implementiert das Verhalten für manuelle Steuerung.
TrackBeahvor: Abgeleitete C++ Klasse. Implementiert das Abfahren der Schleife.
Die Ideen dieser Software-Architektur sind diversen Roboterplattformen entnommen worden...
Weitere Ideen/Anregungen sind willkommen
da die Aufgaben der Steuerung immer weiter zunehmen, ist wohl an der Zeit die Software besser zu strukturieren, typischerweise in Form von (C++)-Klassen. Bevor allerdings losprogrammiert wird, ist es ratsam die Ideen einmal grafisch in Form von UML-Klassendiagrammen darzustellen.
Hier also meine Ideen für das zukünftige Klassen-Layout einer modularen Mähroboter-Software (UML-Klassendiagramm Anhang).
Erklärung der einzelnen Klassen im angefügten Diagramm:
Robot: C++ Oberklasse für alle Roboter. Enthält keine Zugriffe auf die konkrete Hardware, definiert aber Methoden hierfür.
int readSensor(...) = 0; // abstrakt
void setActuator(...) = 0; // abstrakt
Konkrete Roboter leiten von dieser C++ Klasse ab um diese Methoden mit Leben zu füllen. Die Klasse implementiert den gesamten Roboter-Code welcher allen Mährobotern gemeinsam ist. Die Klasse Robot enthält Zugriff auf "Behavior-Klassen" welche die "Subsumption"-Architektur umsetzen. Mit Hilfe dieser Architektur kann das Verhalten des Roboters flexibel angepaßt werden. In den Beavior-Klassen erfolgt der Zugriff auf den Roboter über die Roboter-Klasse ( polymorph ).
Mower: Abgeleitete C++ Klasse. Implementiert den konkreten Ardumower. Hier erfolgen Zugriffe auf die Hardware.
int readSensor(...);
void setActuator(...);
Simulator: Abgeleitete C++ Klasse. Implementiert den Ardumower als Simulator. Hier erfolgen Zugriffe auf die spätere Simulator-Umgebung anstatt auf Hardware.
Behavior: Oberklasse für ein Verhalten. Definiert Methoden für die Subsumption-Architektur.
ObstacleBehavior: Abgeleitete C++ Klasse. Implementiert das Verhalten bei Hindernissen.
MowBehavoir: Abgeleitete C++ Klasse. Implementiert das normale Mähverhalten (typischerweise geradeausfahren).
ManualBehavor: Abgeleitete C++ Klasse. Implementiert das Verhalten für manuelle Steuerung.
TrackBeahvor: Abgeleitete C++ Klasse. Implementiert das Abfahren der Schleife.
Die Ideen dieser Software-Architektur sind diversen Roboterplattformen entnommen worden...
Weitere Ideen/Anregungen sind willkommen