Rpi mit GPS CBRN Simulator

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Community,

    Ich hole etwas aus um mein Problem darzustellen. Ich bin in einer freiwilligen Feuerwehr und dort auch im Erkundungszug unseres Landkreises. Bedeutet wir haben ein Fahrzeug mit Messtechnik für Biologische, Chemische, Radioaktive und Nuklearen Unfällen. Ein Einsatz Szenario ist, dass wir mit 3 dieser Fahrzeuge an ein Objekt heranfahren und dabei die chemische Belastung messen, welche Stoffe sind in der Luft wo sind gefahren Grenzen etc. Nun lässt sich das aber nur sehr schwer realistisch derzeit üben. Die Idee war nun einen Kasten vor die Ansaugstutzen der Messgerät zubauen in welchem ein RPi mit einem GPS Modul Sitz. Vor der Übung soll an diesem ein Objekt festgelegt werden wo ein Stoff austritt. Dazu soll es aber noch zwei freihändig erstellbare Zonen geben (nicht rund oder eckig oder oval) fährt man in die erste Zone wird über eine Pumpe aus ein Stoff aus einem Behälter in minimal Mengen gepumpt das ein Messanstieg zu sehen ist in Zone 2 soll die Pumpe dann so viel fördern, dass der Alarm des Gerätes ausgelöst wird. Der Zweite Teil ist für hier unrelevant da weiß ich wie ich es machen muss etc. Aber wie bekomme ich den ersten Teil hin?

    1. User interface zum bestimmen des Objektes

    2. Die zwei Zonen festlegen

    3. Die Zonen auswerten heißt sobald ich mit meinem Fahrzeug in die erste Zone gefahren bin dass dann Aktion X ausgeführt wird selbiges bei Zone 2.

    Für Vorschläge, Hinweise und Tipps wäre ich sehr dankbar.

  • > Dazu soll es aber noch zwei freihändig erstellbare Zonen geben (nicht rund oder eckig oder oval)

    Und wieso nicht?

    Man kann das zum Beispiel mit einem Polygon machen, aber das hat ja auch Ecken...

    Vielleicht eine Bezier-Kurve?

    > 1. User interface zum bestimmen des Objektes

    Das wuerde ich erst mal mit einem Config-File festlegen das von Hand editiert wird

    > Die Zonen auswerten heißt sobald ich mit meinem Fahrzeug in die erste Zone gefahren

    > bin dass dann Aktion X ausgeführt wird selbiges bei Zone 2.

    Mit einem runden Bereich waere das recht einfach, mit einem recteckigen ebenso.

    Bei Polygonen und Bezier ist das schon aufwendiger, aber man findet ziemlich sicher einen Algorithmus dafuer.

    Einfacher ist es wenn man den Anfahrtsweg kennt. Dann kann man die Schaltpunkte einfach festlegen und pruefen.

  • Tell: ich verstehe das nicht-eckig nicht als Vermeidung von Ecken, sondern nur eine etwas unglückliche Formulierung, dass es ein beliebiges Polygon statt fester vorgegebener Formen ist.

    Ich würde das Projekt in zwei Aufgaben teilen: zum einen den Abgleich der GPS-Daten mit den hinterlegten Zonen, und dann die Auslösung des Stoffaustritts. Die größte Herausforderung dabei ist der Umgang mit den Koordinatensystemen. Das GPS liefert die einem bestimmten Standard nach, und die Polygone sollten entsprechend im gleichen Standard vorliegen. In meinen Augen reicht ein etwas dickerer MicroController wie der ESP32 dazu vollkommen. Das hat den Vorteil, dass die ganze Chose robuster und stromsparender wird.

    Der zweite Teil ist das Authoring System. Und das greift man am besten auf Tools zurück, die es schon gibt. Eine Möglichkeit wäre QGIS: https://www.qgis.org/de/site/about/features.html

    Es gibt ggf auch noch anderer Optionen, grundsätzlich würde ich da in Kontakt mit der Open street map community treten & fragen, was die für Ideen haben.

    2 Mal editiert, zuletzt von MistyFlower59469 (25. Oktober 2020 um 10:05)

  • Ja das nicht eckig ist Unglück gewählt. Natürlich kann es Ecken haben es soll aber kein normales Rechteck etc sein. Hintergrund durch Wind, Berge, Täler breiten sich Stoffe unterschiedlich aus, aber ja klar für die ersten Tests würde auch ein Kreis, Oval etc. Ausreichen.

    Qgis scheint das zu können was ich benötige. Vielen Dank schon mal für eure Hilfe, wenn jemand noch mehr hat nur zu.

  • Und funktioniert der auch in einem nicht-planaren Koordinatensystem wie wgs84, das aus dem GPS rausfaellt?

  • > Und funktioniert der auch in einem nicht-planaren Koordinatensystem wie wgs84, das aus dem GPS rausfaellt?

    Ich denke schon. Ein Polygon auf einer Kugel ist immer noch ein Polygon.

    Wenn das Gebiet so gross ist dass die Abweichungen nicht mehr tragbar sind, kann man das mit ein paar zusaetzlichen Kanten beheben.

  • Ich mache mir weniger Sorgen um die Abweichung, die wird vernachlaessigbar sein. Die Diffusion eines Stoffes ist ja nicht 100% praezise. Sondern man muss erstmal die Polarkoordinaten in eine Ebene transformieren. Und das Polygon in QGIS wird auch einer Projektion unterliegen. All das Zeug.

  • > man muss erstmal die Polarkoordinaten in eine Ebene transformieren

    WGS84 benutzt keine Polarkoordinaten. Da wird der Winkel nach Norden und der Winkel nach Osten angegeben.

    Wenn das Gebiet begrenzt ist, kann man das als Ebene betrachten.

    Die Angaben aus QGIS muessen natuerlich auch in diesem Format sein, aber das muesste QGIS eigentlich schaffen.

    - - - - - -

    Spitzfindige koennen natuerlich auch die Mercator-Projektion der Punkte berechnen und das Polygon so bestimmen. Die Frage ist

    halt wieviel das an Praezision bringt.

  • Also ich hab so eine Recording funktion programmiert, entweder eine Zone (Gebiet) vor Ort, oder mittels Viking (apt install viking) zu erstellen.

    Es ist egal wieviele Punkte aufgenommen werden 3, 4 oder mehr.

    Mittels python shapely wird eine Convex_hul erzeugt und gibt ein MultiPoint Object zurück, was alle internen Pukte ignoriert.

    shapley wird auch benutz um von der convex_hull MultiPoint Grenze aus die kürzeste Entfernung vom aktuellen Standpunkt aus berechnet.

    shapely ist schon sehr schnell und python. Fals ich das vor Ort punkt-Aufnahme Script reinstellen soll werde ich es noch aufhübschen damit es hier "durch" geht :)

  • also für die Aufnahme hab ich ein bash Script mit gpspipe, was die Punkte aufzeichnet, so viel man möchte, bis eben x + Enter gedrückt wird.

    Dann baut dieses bash Script ein Python-Script, welches dann ein MulitPoint Array zurück gibt ein einer Text datei.

    Weil ich da nur ab und an was mache, ist da noch kein Json-GPS ""DIN"" internationl kompatibles Dateiformat integriert. Hab erst vor 2 Wochen angefangen alles auf Json umzustellen. In dem bash Script hab ich Seperatoren "@@@@@@" eingebaut um es in Python zu splitten.

    Es ist aber easy. Das aufgezeichnete Gebiet mit den von Hand aufgenommenen GPS koordianten wird mittels shapely gesäubert und nur der bestmöglich Umriss gespeichert.

    Hab auch für Viking eine Trackspur überlagert mit den Orginalpunkten und der spapley Umriss ist schön passend.

    Ich werd mal schauen es aufzuarbeiten mit gutem Json File, was überall verwendet werden kann.

  • Aber was bringt denn das fuer den use-case des TE? Der will das Polygon doch nicht durch ablaufen eines Atomkraftwerkgelaendes erzeugen. Sondern am Rechner zeichnen. Was er braucht ist ein Test, ob die aktuelle Position innerhalb oder ausserhalb eines gegebenen Polygones ist. Dazu mag man shapely verwenden, aber das wird dann ja teurer in der Ausfuehrung, weil eben Python und nicht ein MicroController.

  • ahso, ich dachte mit einem Raspberry.

    Ich kenne nur Viking um Gebiete abzustecken und als Trackpoint in einer *.vik Datei zu speichern. Diese *.vik Datei verarbeite ich eben weiter.

    Und der Hauptkern, was rechnet ist shapely.

    Ob shapely jetzt 3 Pukte bekommt oder viel mehr, ist egal es kann die Entfernung automatisch berechnen vom jetztigen Standort.

    Nur ist man eben im Zielgebiet ist die Entfernung immer 0 :)

  • Na selbst wenn er den PI nimmt (was ich ihm nicht raten wuerde, aber den Rat kann er ja in den Wind schlagen) - in keiner deiner Ausfuehrungen habe ich etwas vom *abtesten* des Polygons gelesen. Kann ja sein, dass ich das ueberlesen haben, aber darum die Frage: testest du, ob ein Punkt in einem Polygon steckt oder ausserhalb davon ist?

  • So sieht es ungefähr aus (Ausschnitt)

    Wobei ein Shapely polygon mehr als 3 Punkte haben kann

    Es ist MultiPoint Array in der for schleife, jedes Element ist ein Zielgebiet :)

    pi wird auch mittels import geladen es ist die Erdkrümmung wo es vorkommt :)

  • Ich hab leider gerade keine Zeit um mit Code zu spielen :-/

    Wenn's ein konvexes Polygon ist, dann ist es recht einfach: wenn die Strecke Zielpunkt - aktueller Punkt eine der Polygonkanten schneidet ist der aktuelle Punkt ausserhalb des Polygons. Wenn er keine Kante schneidet ist der Punkt ebenfalls im Polygon.

    Wenn das Polygon konkav ist, braucht es etwas mehr:

    * wenn keine Kante geschnitten wird, ist der aktuelle Punkt im Polygon

    * eine Kante -> ausserhalb

    * zwei Kanten -> innerhalb

    * drei -> ausserhalb

    .

    .


    Algorithmen die pruefen ob sich zwei Strecken schneiden findet man im Internet:

    * http://www.imn.htwk-leipzig.de/~medocpro/buec…dge1/k24t3.html

    * https://www.geeksforgeeks.org/check-if-two-g…ents-intersect/

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!