-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Systen zur verwaltung und kontrolle von Sensoren und Aktoren

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139

    Idee Systen zur verwaltung und kontrolle von Sensoren und Aktoren

    Anzeige

    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
    Geändert von pointhi (14.11.2013 um 13:02 Uhr)
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139

    Frage

    Schade das sich sich dazu noch niemand geäußert hat.

    Ich hab ein Demodatei erstellt, die eine erste idee darstellt, wie man die Sensoren und systeme konfigurieren können soll. Vom XML-Schema hängt viel ab, wie allgemein so ein programm sein wird. Jedenfalls hab ich heute das erste mal ein LUA-Programm mit C++ Interpretiert, und bin davon überzeugt dass sich Skriptsprachen für die Sensorauswertung von komplexeren Protokollen eignet. Immerhin ist es nicht sehr dynamisch wenn man für jedes kleine Protokoll den Sourcecode erweitern und neu compilieren muss.

    Ich bin mir so gut wie sicher dass diese version von XML-Schema sicher noch ein paar große lücken aufweist. Besonders in der Art wie die Daten ausgelesen werden, und mit welchen Timing (z.b. muss ich in ein kompassmodul von mir zuerst 3 Befehle im 1ms takt schreiben, bevor ich davon lesen kann). Der Zugriff auf die Daten würde warscheinlich über std::set mit den Namen im XML-File geschehen. z.B. wie
    Code:
    double Altitude = Sensor["GPS_Altitude"].GetValue();
    Code:
    <?xml version="1.0"?>
    
    <bus-controller bussystem="i2c">
        <name>I2C</name>
        <device>/dev/i2c-1</device>
        <interrupt-pin>18</interrupt-pin>
        <clock>100kHz</clock>
        <enabled>yes</enabled>
    </bus-controller>
    
    <bus-controller bussystem="rs232">
        <name>COM0</name>
        <device>/dev/ttyAMA0</device>
        <baudrate>9600</baudrate>
        <parity-bit>no</parity-bit>
        <stop-bits>1</stop-bits>
        
    </bus-controller>
    
    <i2c-slave bus-controller="I2C">
        <name>PCF8574A</name>
        <adress>0x38</adress>
        <generate-interrupt>yes</generate-interrupt>
        <maxclock>100kHz</maxclock>
        
        <rw-instructions>
            <read bytes="1" position="0"/>
        </rw-instructions>
        
        <sensor datatype="boolean">
            <name>Sensor1</name>
            <data>0.0</data>    <!-- Byte 0, Bit 0-->
            <invert>yes</invert>
            <refresh-time>100ms</refresh-time>
        </sensor>
    </i2c-slave>
    
    <sensor i2c-slave="PCF8574A" datatype="boolean">
        <name>Sensor1</name>
        <data>
            <databit>0.1</databit>    <!-- Byte 0, Bit 1-->
        </data>
        <refresh-time>50Hz</refresh-time>
    </sensor>
    
    <rs232-slave bus-controller="COM0">
        <name>GPS_0</name>
        
        <rw-instructions>
            <read savetype="ringbuffer" bytes="100" startbyte="$" stopbyte="\r\n"/>
        </rw-instructions>
        
    </rs232-slave>
    
    <sensor rs232-slave="GPS_0" datatype="float">
        <name>GPS_Altitude</name>
        <data>
            <script language="lua" file="gps.lua" function="gps_height"/>
        </data>
    </sensor>
    
    <sensor rs232-slave="GPS_0" datatype="float">
        <name>GPS_Speed</name>
        <data>
            <script language="lua" file="gps.lua" function="gps_speed"/>
        </data>
    </sensor>
    Was sagt ihr dazu? Ich finde es ist sicher nicht die einfachste möglichkeit, aber es geht mir besonders auch um leistungsfähigkeit. Es soll später dann so sein, dass man einfach den sensor definiert, und er danach im Programm verwendet werden kann.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    26
    Beiträge
    802
    Die Idee ist cool, auch wenn es ziemlich umfangreich sein wird.

    Aber ein Punkt. Kein XML!!!!11elf. So viel Overhead und doch nicht wirklich lesbar. Wie wärs mit YAML? Ist ganz gemütlich und super lesbar was Konfiguration anbetrifft.
    Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139
    Ich hab noch mit ein paar Leuten deswegen geredet, und auch ich denke dass XML für den Anfang das beste ist. Auserdem wird die Bibliotek so gestaltet sein dass jeder eigene Auswertfunktionen hinzufügen kann.

    Ich hab heute ein System entwickelt, wie das Klassensystem für diese Aufgaben aufgebaut werden sein muss. Erste tests mit der XML und Lua Bibliotek waren auch erfolgreich. Das ganze wird standardmäßig als DLL compiliert werden und kann dann eigebunden werden. Unter Linux sollte es auch funktionieren, hab ich aber noch nicht getestet. Ein Compilieren direkt in den Quellcode oder als Statische Library sollte meines Wissens auch möglich sein.

    Wenn das Klassendesign feststeht und erste ergebnisse da sind werde ich das Projekt auf GitHub veröffentlichen.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    26
    Beiträge
    802
    Gegen den Rest sagte ich ja nix. Aber ehrlich, ich hab schon mit einigen Frameworks gearbeitet und ich sage dir, XML Konfigurationen sind für viele ein Fluch, da diese ziemlich schnell aufblähen. Yaml ist einfach, genial, schlank und leicht. Schau es dir mal an.
    Oder bau deinen Konfigurationsloader abstrakt auf. Also das es der restlichen Anwendung egal ist, wie die Konfiguration geladen wird. Dann kannst du gegen diese Schnittstelle deinen XML-Loader bauen, und wenn's was wird, können ja bei Bedarf anderen einen Yaml-Loader hinzufügen. Symfony z.B. macht das, und ich find das super.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139
    Genau so habe ich das geplant. Ich übergebe der Hauptobjekt das XML-File, und es gibt knoten auf untergeordnete Klassen weiter die dies wiederum können. Ich werde das ganze vermutlich in eine spezielle klasse packen. Eigentlich sollte die implementation von beliebigen interpretern für dom modelle so einfach möglich sein.

    Als info, ich werde vermutlich pugixml nutzen um die XML-Dateien auszuwerten. Wenn der Interpreter ähnlich wie dieser aufgebaut ist kann jedes beliebige DOM-Basierendes Dateiformat implementiert werden.

    Auch will ich es so machen dass nicht 1. einziges XML-File alles laden muss, sondern dass einzelne Files bestimmte Bereiche hinzufügen können. So wird das ganze auch nicht so lange, sondern kann in kleine happen zerteilt werden.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    26
    Beiträge
    802
    Hmm... Also die hauptapplikation(klasse) sollte gar nichts von einer XML-Datei oder pugixml wissen. Dafür sollte es eine extrige Schicht geben. Als Schnittstelle zur Hauptapplikation gibt diese Schicht wohldefinierte structs oder Klasseninstanzen zurück.
    Die Loaderschicht definiert selbst ein Interface nach unten, welches die verschieden Loader zu implementieren haben. Erst hier darunter siedelt sich der XML-Loader an, welcher das Interface implementiert und selbst mit pugixml kommuniziert.
    Die Hauptapplikation hat es u. A. nicht zu interessieren wie die Daten gehalten werden, ob diese sofort alle im Speicher sind, oder nachgeladen, bla bla. Alles Verantwortlichkeiten der Loaderschicht ^^

    Wenn du willst, können wir mal einen nette Architektur ausarbeiten. Da ich ja beruflich im Bereich Embedded Systems tätig bin, wäre das schon interessant. Muss zugeben, falls es ähnliches schon gibt, ich hab danach noch nicht gesucht, da noch nicht der Bedarf da war. Im Moment alles noch Embedded Qt und ein CoController der die I/Os macht. Aber der Bedarf kommt sicher zukünftig. Voraussetzungen wäre aber eine kommerziell kompatible Open Source Lizenz, wie die MIT oder Apache ^^

    Und ein Blick in die gerade von Elektor veröffenlichte EFL wäre sicher auch interessant. Diese ist mehr auf Bare-Metal Controller (also uC ohne Betriebssystem) ausgelegt. Deine Idee geht ja eher zur Integration in Embedded Linux, wenn ich richtig liege?

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139
    Ich werd morgen die klasse noch ein wenig überarbeiten und dann eine erste idee hier veröffentlichen.

    MIT oder so wäre kein problem, auch wenn ich normalerweise unter der GPL veröffentliche. Ich würde die LGPL nehmen, da dadurch auch kommerzieller nutzen erlaubt ist, und ich das ganze sowieso als dynamische Bibliotek auslegen will.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    26
    Beiträge
    802
    Hmm, hättest mal Zeit eine Architektur auszuarbeiten? Du hast ja schon größere Ideen, und einfach drauf los, könnte etwas schiefgehen

    Naja ich finde es schade, wenn interessante Projekte mit der Viralität der GPL das verwenden in kommerziellen Projekten so erschweren. Oft wird darauf vergessen oder unterschätzt, dass halt doch von entsprechenden Firmen Know-How in das Projekt zurück fließen kann. Und LGPL ist auch nicht gerade besser. Besonders da ich bei embedded Projekten statisches Linken sogar bevorzuge. Auch wenn die Binary größer wird und bei Updates alles neu ausgeliefert wird, ist es bei gewissen Projekten einfacher nur ein File auszuliefern.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von pointhi
    Registriert seit
    18.03.2009
    Alter
    22
    Beiträge
    139
    Das mit der Lizenz ist ja noch nicht fix, ich muss mir die MIT oä. halt mal genau anschauen. Durch OSM bin ich ja auch bei einem Projekt das dabei auch besonders auch komerziell genutzt wird.

    Unter der Architektur verstehe ich besonders das System wie die Klassen miteinander kommunizieren und interagieren und deren Schnittstellen. Und das ist meiner meinung auch die Herausforderung dabei. Wenn ich mich irre lasse ich mich gerne belehren.

    mfg, pointhi
    Theorie ist, wenn man alles weiß, aber nichts funktioniert.
    Praxis ist, wenn alles funktioniert, aber niemand weiß warum.
    Microsoft hat Theorie und Praxis vereint: Nichts funktioniert und keiner weiß warum!
    Deshalb nutze ich Linux für die wichtigen sachen

    Meine Website: www.oe5tpo.com

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Pfostenleiste zur Verbindung von Arduino-Buchsen und Servos
    Von bjoerng im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 26.01.2011, 19:30
  2. Antworten: 1
    Letzter Beitrag: 04.03.2009, 14:44
  3. Tiny 2313, tipps und kontrolle gesucht
    Von Ineedhelp im Forum C - Programmierung (GCC u.a.)
    Antworten: 33
    Letzter Beitrag: 20.03.2008, 21:32
  4. GNU C-compiler, Atmega und Array kontrolle
    Von Arexx-Henk im Forum C - Programmierung (GCC u.a.)
    Antworten: 24
    Letzter Beitrag: 23.04.2006, 14:34
  5. Programm zur Simulation von boolschen und fließk. Datentypen
    Von izaseba im Forum Konstruktion/CAD/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 0
    Letzter Beitrag: 25.06.2005, 23:18

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •