Nagut, der Titel ist villeicht nur ein teil davon was ich mir überlegt habe, aber ich will hier mal ideen zu diesem Thema sammeln, und dies später dann auch programmtechnisch umsetzen.
Kurz zu dem Hintergrund dazu:
Ich hab dieses Jahr für den RCJ einen Roboter auf Basis des Raspberry Pi entwickelt. Wir haben nur mittelfeld erreicht, aber ich hab bei diesesm Projekt zum ersten mal C++ auch für Roboter verwendet, und hab es allgemein gesehen als sehr hilfreich angesehen ein stabiles System zu bauen. Unter anderem hatte ich z.B. eine Klasse die die Kommunikation mittels I2C geleitet hat und eine andere die einen Roboter im Programm abbildete (alle Sensoren und Aktoren,...). Das Ganze war relativ Demomäßig und noch nicht so umgesetzt dass man von einem wirklich schönem OOP-Entwurf sprechen kann. Auch gab es probleme, weil ich für Änderungen an den Sensoren,... jedes mal neu kompilieren musste. Ich hab also durch diesesen Roboter ein allgmeines Bild was eine einfache Steuerung über einen kleinen Computer benötigen würde.
Meine Idee wäre dabei folgende:
Eine hochdynamische Bibliotek die das programmieren von Robotern wesentlich erleichtern soll (besonders die Sensorkommunikation). Ein paar Punkte die dabei meiner meinung wichtig sind:
- Definieren der Sensoren und Bus-Slaves in einem Config-File (z.B.: XML)
- Fehlererkennung, ob ein Sensor korrekte Werte liefert und ob er überhaupt verbunden ist
- Einbindung von Skriptsprachen wie Lua um den Roboter zu steuern (kein neucompilieren nötig, schnelle änderungen)
- Objektorentiert
- Es wird vom steuerprogramm nicht der Sensor selber sondern ein Verknüpfter Wert genutzt.
- Sensoren & Aktuatoren werden nur dann angesprochen wenn es benötigt wird, oder in einen bestimmten Interval. (Verbesserte Bußnutzung, einfache mischung von Echtzeitnotwendige und unwichtige Systeme)
- Einfache möglichkeit aufzeichnungen von den Sensoren zu bekommen
- ...
Wer sich da nichts vorstellen kann hab ich mir mal ein Beispiel überlegt:
Wir haben eine kleine Drohne mit dem Raspberry Pi gebaut (Mikrokopter oder Modellflieger ist egal), der hat diverse Sensore die angeschlossen sind. Daber werden verschiedene Bussysteme verwendet:
Diese Drohne hat natürlich Sensoren die an den unterschiedlichen Bussystemen angeschlossen sind wie:
- GPS
- Luftdruck
- Kompass
- Gyrometer
- Beschleunigungssensor
- Neigungssensor (z.B. Infrarotsensoren)
- ...
Durch das System sollten sich dann unter anderem solche Dinge ergeben:
- Wer sich ein wenig auskennt weiß dass GPS auch Höheninformationen, Richtung, Geschwindikeit übertragen kann, aber teilweise wesentlich ungenauer als ein spezieller Sensor ist. Man kann jetzt natürlich z.B. nur den Luftdrucksensor nehmen, oder wie ich diese miteinander verknüpfen (mit berücksichtigung deren Genauigkeit und zuverlässigkeit). Wenn jetzt 1. Sensor falsche Werte ausgiebt oder nicht mehr funktioniert kann einfach der andere benutzt werden.
- Dadurch hat man jetzt eine gewisse redundanz, die z.B: durch den Gyrometer und Beschleunigungssensor noch erhöht werden könnte. Das kann jeder für sein projekt natürlich selber proggen, aber eine Fertige lösung wäre natürlich wesentlich vorteilhafter.
- Wenn man das jetzt so weiterspielt sieht man dass die Steuerungssoftware auf wesentlich bessere Informationen zugreifen kann als wenn sie nur die Sensoren auswerten. Auch ist die Auswertung durch ein definiertes Modell wesentlich einfacher und man kann schneller und sicher andere Sensoren implementieren.
- Wenn man neue Sensoren hinzufügen will oder sie mit einer anderen Adresse, etc. anschließt ändert man einfach ein config-file und das Programm arbeitet danach damit. Man muss keine umfangreichen Änderungen machen, und auch nicht das Programm neu compilieren.
- Nicht zeitkritische Funktionen werden/können auf skripsprachen ausgelagert werden. Dadurch sind änderungen einfach und schneller vorzunehmen.
- Wenn jetzt ein Sensor ausfällt oder nicht eingebaut ist wird wenn möglich auf eine alternative oder eine interpolation mit anderen Sensoren umgeschaltet. Das Steuerprogramm kann dies auch erkennen und bekommt auch die neuen Toleranzen der Daten, etc. wenn benötigt mitgeteilt.
- Da die config-Files sehr umfangreich werden können (z.B: einbauposition, technische Daten und Rahmenbedingunge,...) könnte das ganze auch dazu genutzt werden den Roboter in einem Simulator mit realistischen Bedingungen zu konfrontieren (incl. toleranzabweichungen, störungen,...)
Ich hoffe ihr versteht was ich mit so einen System gerne bezwecken will. Ich würde gerne eure ideen und vorschläge dazu hören, und ob sowas eurer meinung eigentlich sinvoll ist.
mfg, pointhi
NACHTRAG:
Ich hab gerade ROS wiederentdeckt, leider bin ich relativ unschlüssig was ROS jetzt im allgemeinen alles beherscht und wie es aufgebaut ist. Es schaut aber schon sehr nach dem aus was ich gerne schaffen möchte.
NACHTRAG
Das System ist bereits aktiv in enwicklung! Zumindestens der allgemeine Hardwareabstraktionsteil.
https://github.com/pointhi/OpenSensorSystem
Lesezeichen