Forum: Mikrocontroller und Digitale Elektronik Virtuelle Karte - Polygon oder Quadrat?


von Philipp M. (lord-maricek)


Lesenswert?

Hallo,

für eine aktuelles Projekt, indem es vorallem um die Automatiesierung 
von Schiffsmodellen geht, wollen wir eine art virtuelle Map 
programmieren. In der Map gehts eig. nur darum, Wasser von Land zu 
unterscheiden.

Doch wie kann man sowas verwirklichen?

Ich habe mir gedacht, dass man entweder das Land, oder das Wasser 
markieren muss, damit das Boot errechnen kann, wohin seine aktuelle 
Route es führt.

Meine erste Idee wars, das Land einfach mit Quadraten einzukreisen, da 
Land nicht Quadratisch ist, könnte man einfach mehrer verschieden große 
Quadrate nehmen. Das Boot geht dann einfach die Liste der Quadrate durch 
und guckt ob die jeweilige Position kleiner/größer als die Eckpunte 
sind.
Desweiteren würde ich noch eine "Sicherheitszone" markieren, auch wieder 
mit Quadraten. Wenn das Boot in einem dieser Quadrate ist, bekommt der 
"Hobby-Kapitän" eine Warnmeldung, dass das Boot aufgrund von GPS 
Ungenauigkeiten ans Ufer knallen könnte.

Wenn man das relativ genau macht, würde ich bei meinen heimischen 
Gewässern ca. auf 50 Quadrate kommen, die alle Geprüft werden.

Meine andere Idee war, Polygone um die Inseln/Land zu erstellen und dann 
wie beim http://de.wikipedia.org/wiki/Punkt-in-Polygon-Test_nach_Jordan
die Schnittpunkte mit den einzelnen Polygonen überprüfen.


Mit Quadraten/Polygonen, könnte man aber auch den Fahrbereich markieren 
und dann überprüfen, ob das Boot in den Quadraten/Polygonen ist.


Die Berechnungen werden mit einem Stm32F4 mit FPU durchgeführt.

Habt ihr Tipps, oder noch bessere Lösungen?

Hat vielleicht irgendjemand ne Vorstellung, wie lange es dauern würde 
ca. 50 Quadrate über IF Abfragen mit einer Referenz Position zu 
vergleichen?

MfG
Philipp

: Verschoben durch Moderator
von holger (Gast)


Lesenswert?

>Die Berechnungen werden mit einem Stm32F4 mit FPU durchgeführt.

>Hat vielleicht irgendjemand ne Vorstellung, wie lange es dauern würde
>ca. 50 Quadrate über IF Abfragen mit einer Referenz Position zu
>vergleichen?

Bei der CPU ein paar Microsekunden.

von Philipp M. (lord-maricek)


Lesenswert?

holger schrieb:
>>Die Berechnungen werden mit einem Stm32F4 mit FPU durchgeführt.
>
>>Hat vielleicht irgendjemand ne Vorstellung, wie lange es dauern würde
>>ca. 50 Quadrate über IF Abfragen mit einer Referenz Position zu
>>vergleichen?
>
> Bei der CPU ein paar Microsekunden.

Doch so lange? Dann muss ich mir mal was überlegen, oder am besten wäre 
es wohl, beim Upload der Route alles zu prüfen, dann die Route zu 
koorregieren, und während der Fahrt nichts mehr zu machen. Oder alle 
10sek oder so eine Prüfung.

Philipp

von Karl H. (kbuchegg)


Lesenswert?

Philipp Maricek schrieb:
> holger schrieb:
>>>Die Berechnungen werden mit einem Stm32F4 mit FPU durchgeführt.
>>
>>>Hat vielleicht irgendjemand ne Vorstellung, wie lange es dauern würde
>>>ca. 50 Quadrate über IF Abfragen mit einer Referenz Position zu
>>>vergleichen?
>>
>> Bei der CPU ein paar Microsekunden.
>
> Doch so lange?

Micro, nicht Milli

Micro = Millionstel

Kannst dir ja mal ausrechnen, wie weit dein Schiff in der Zeit kommt.

von Philipp M. (lord-maricek)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Philipp Maricek schrieb:
>> holger schrieb:
>>>>Die Berechnungen werden mit einem Stm32F4 mit FPU durchgeführt.
>>>
>>>>Hat vielleicht irgendjemand ne Vorstellung, wie lange es dauern würde
>>>>ca. 50 Quadrate über IF Abfragen mit einer Referenz Position zu
>>>>vergleichen?
>>>
>>> Bei der CPU ein paar Microsekunden.
>>
>> Doch so lange?
>
> Micro, nicht Milli
>
> Micro = Millionstel
>
> Kannst dir ja mal ausrechnen, wie weit dein Schiff in der Zeit kommt.

Ach verdammt, ja klar. Ich hatte mich schon gewundert, dass da irgendwas 
nicht stimmen kann.

Wenn ich das ganze mit Polynomen machen sollte, hätte ich zwar weniger 
"markierte" Flächen, allerdings wäre die Berechnung etwas 
Zeitraumbender, meiner Einschätzung nach.

MfG
Philipp

von holger (Gast)


Lesenswert?

>Wenn ich das ganze mit Polynomen machen sollte, hätte ich zwar weniger
>"markierte" Flächen, allerdings wäre die Berechnung etwas
>Zeitraumbender, meiner Einschätzung nach.

Auch dann langweilt der STM32F4 sich. Selbst wenn dein Boot
mit Schallgeschwindigkeit fährt hat der kaum was zu tun;)

von Karl H. (kbuchegg)


Lesenswert?

Philipp Maricek schrieb:

> Wenn ich das ganze mit Polynomen machen sollte, hätte ich zwar weniger
> "markierte" Flächen, allerdings wäre die Berechnung etwas
> Zeitraumbender, meiner Einschätzung nach.

nicht wirklich.

von Philipp M. (lord-maricek)


Lesenswert?

holger schrieb:
> Auch dann langweilt der STM32F4 sich. Selbst wenn dein Boot
> mit Schallgeschwindigkeit fährt hat der kaum was zu tun;)

Also es ist ja nicht so, als würde ich für alles im Boot einen eigenen 
Controller nehmen. ;) Der Stm32f4 wird noch viel mehr zu rechnen 
bekommen, z.b. PPM Decoding (ok, das langweilt sogar nen Atmega), aber 
es wird noch sehr viel Sensorik mit Filter, Fusion usw. hinzubekommen.

Wo wir grad schon beim langweilen sind: Ich habe 2 AHRS, jeweils mit 
Gyro, Acc und Mag. Der Daten werden mit 8kHz (Gyro), und 3,2kHz (Acc) 
fusioniert. Beide AHRS Boards werden einzeln fusioniert und später nmoch 
weiter verrechnet.
Bekommt das Stm32f4 auch noch hin, mit I2C als Schnittstelle?
Hinzukommen werden dann noch PID Regler und eine sehr umfangreiche 
Kommunikation über Xbee Pro Funkmodule. Obwohl der STM32 da auch wieder 
vom DMA entlastet wird.

Philipp

von holger (Gast)


Lesenswert?

>Bekommt das Stm32f4 auch noch hin, mit I2C als Schnittstelle?

Der Radio und Fernseher Bus wird das ganze ordentlich ausbremsen.
Besorg dir mal Sensoren die per SPI arbeiten.

I2C macht auf solchen CPUs einfach keinen Spass und keinen Sinn.

von Philipp M. (lord-maricek)


Lesenswert?

Ok, klingt logisch. Aber rein vom rechnerischen müsste der stm32 es 
locker schaffen, mit spi?

von Karl H. (kbuchegg)


Lesenswert?

Philipp Maricek schrieb:
> Ok, klingt logisch. Aber rein vom rechnerischen müsste der stm32 es
> locker schaffen, mit spi?

Bis jetzt hab ich da noch nicht wirklich was gesehen, was mir Bauchweh 
machen würde.

von Philipp M. (lord-maricek)


Lesenswert?

Ich bin am überlegen, das die Sensorauswertung auf einen eigenen STM32F4 
auszulagern. 2 x AHRS Fusion und der ganze Rest sollte zwar auf einen 
Chip passen, aber ich möchte Spielraum nach oben lassen, da wir noch 
Experiemente wie GPS Korrigieren durch das IMU und noch andere 
Spielerein mit Sensoren vorhaben.

Außerdem soll noch ein Audio System für Motoren usw. mit integriert 
werden, vielleicht könnte man die Sensorik und das I2S Interface auf dem 
einen Chip nutzen und der andere Chip macht den ganzen rest, was auch 
nicht umbedingt wenig ist.

MfG
Philipp

von Karl H. (kbuchegg)


Lesenswert?

Philipp Maricek schrieb:
> Ich bin am überlegen, das die Sensorauswertung auf einen eigenen STM32F4
> auszulagern.

Was genau verstehst du unter "Sensorauswertung".

Die Sache ist die: die Dinge werden meistens nicht einfacher, wenn man 2 
µC an eine Aufgabe setzt, die einer alleine schafft. Ganz im Gegenteil, 
ganz im Gegenteil.


Mit scheint, dir ist nicht wirklich klar, was für einen Boliden du da am 
Start hast und was der an Rechenpower mitbringt. Rechenzentren der 80-er 
Jahre, die komplette Firmen gemanaged haben, hatten weniger Power als 
dein DSP, den du da hast.

von Simon K. (simon) Benutzerseite


Lesenswert?

Was verbirgt sich hinter AHRS? AbKüFi? Hauptsache coole Abkürzungen und 
ganz viele Mikrocontroller drin ;-)

Das, was du aufzählst ist alles nur "einfache" Mathematik (4 
Grundrechenarten). Wenn du nicht gerade PC-Programmierung mit Double und 
Float gewöhnt bist, dann schaffen das auch kleine Prozessoren 
entsprechend schnell.

Mehrere Mikrocontroller in einem Design lohnt sich nur mit speziellen 
Anforderungen, da wesentlich mehr Entwicklungsoverhead. Ein gescheites 
Schnittstellenprotokoll zu erfinden, was performant und robust genug 
ist, ist nicht gerade einfach.

Ein "kleiner" 32 Bit ARM Core reicht da vermutlich schon gut aus.

von Karl H. (kbuchegg)


Lesenswert?

Simon K. schrieb:

> Das, was du aufzählst ist alles nur "einfache" Mathematik (4
> Grundrechenarten). Wenn du nicht gerade PC-Programmierung mit Double und
> Float gewöhnt bist, dann schaffen das auch kleine Prozessoren
> entsprechend schnell.

War auch mein erster Gedanke. Aber noch nicht mal dieses Argument zieht. 
Das Ding hat eine FPU on bord.

von Philipp M. (lord-maricek)


Lesenswert?

Hi,

AHRS = "Attitude and Heading Reference System" (Lage und Richtungs 
Referenz System)
Da müssen die Gyro, Acc und Mag Werte mit einem Filter bearbeitet werden 
und dann Fusioniert werden um eine genaue Lage im Raum zu erhalten. Dazu 
müssen z.b. Gyro Daten aufintegriert werden, was schätzungsweise mit 
8kHz passieren wird. Der Acc wird wahrscheinlich mit etwa 3,2kHz mit 
eingerechnet.
Das ganze passiert 2 mal, da wir 2 Sensoreinheiten haben.

Dann brauchen wir für unser Schiff, die genauen 
Bechleunigungs/Bewegungsdaten im 2D Raum, also nur die wahren Werte 
überm Wasser. Dazu drehen wir den Acc Vektor mit einer Rotationsmatrix, 
damit die Achsen wieder parallel zum Wasser liegen und dann errechnen 
wir die Beschleuningung auf der X/Y Achse, um z.b. Wellen zu 
kompensieren. Diese Werte müssen ebenfalls wieder aufintegriert werden, 
damit wir über einen Zeitraum hinweg, die relativ genaue Abweichung der 
vorherigen Position errechnen können, um gegen zusteuern.

Da wir da sehr genaue Daten benötigen werden alle diese Berechnungen 
wohl mit double ausgeführt. (beim ARM 64bit und 15 Nachkommastellen?).

Desweiteren soll für die Zukunft durch die Lage und Beschleunigungsdaten 
eine GPS Korrektur mit eingebaut werden.


Für den Autopiloten müssen noch mit ca. 2-5Hz Entfernung und Heading zum 
Ziel errechnet werden. Da wir uns in relativ kleinen Entfernungen 
bewegen wird das mindestens mit Float passieren müssen.


Als nächstes kommen alle 2-5 Sekunden Berechnungen um zu Prüfen, ob und 
in welchem Polygone sich das Boot gerade befindet.


Es sind auch noch mehrere PID Regler notwendig, die auf Grund der Daten 
der Beschleunigungsdaten Korrekturen an den Steuerorganen wie Rudern, 
Motoren usw. vornehmen.


Für die Steuerung ist noch eine PPM Auswertung und eine PWM Generation 
notwendig. Sollte ich mit einem Schieberegister das PWM Signal ausgeben?


Als letztes kommt noch ein großes Protokoll mit 
Abo-System("an-abbestellung" von Daten, wie Sensordaten) und 
Empfangsbestätigung. Außerdem wird mit ca. 4Hz eine "Heartbeate Meassge" 
übertragen, die alle wichtigen Status Infos zu Boot, Autopilot usw. 
enthält.


Naja, dann kommt noch das I2S Audiointerface dazu, dass die Daten zwar 
mittles DMA beziehen wird, die Audio Daten müssen allerdings noch nach 
den Steuerdaten verändert werden, um z.b. Motorengeräusch und Horn 
parallel laufen zu lassen und ein verändern der Motorengeschwindigkeit 
Auditiv darstellen zu lassen.


Kann der STM32F4 das alles erledigen, ohne Verzögerungen?

Wenn ich 2 Stm32f4 nutzen sollte, würde das Schnitstelleprotokol nicht 
allzu groß ausfallen, da nur die Sensordaten in eine Richtung und 
Steuerdaten für I2S in die andere Richtung übertragen werden würden.

MfG
Philipp

von Karl H. (kbuchegg)


Lesenswert?

Tut mir leid das sagen zu müssen, aber das ist immer noch nix, was mir 
groß Bauchschmerzen bereiten müsste.

Wenn ein (im Vergleich zu deinem Boliden) popeliger AVR es schafft einen 
Quadrokopter in der Luft zu halten, und der MUSS ständig gesteuert 
werden, dann schafft das dein Bolide schon lange ein Schiff auf Kurs zu 
halten.

Dein µC macht (laut Hersteller) 210 MILLIONEN Rechnungen pro Sekunde. 
Was glaubst du wieviele du für einen Durchgang durch den PID Regler 
brauchst? So ungefähr 20 bis 30. Und da war ich schon großzügig.

Deine Updatefrequenzen von unter 10Hz sind lachhaft. Da rechnet der µC 
als Zugabe noch ein paar 'teuflisch schwierige quadratische Gleichungen' 
(tm Douglas Adams) nur damit ihm nicht fad wird.

Du unterschätzt die Power die du da hast. Und zwar ganz gewaltig.

von holger (Gast)


Lesenswert?

>Da wir da sehr genaue Daten benötigen werden alle diese Berechnungen
>wohl mit double ausgeführt. (beim ARM 64bit und 15 Nachkommastellen?).

Die FPU macht nur Single Precision. Sprich float (32Bit), aber kein 
double.
Double müsste die CPU dann wieder in Software machen. Aber auch da
bekomme ich noch keine Bauchschmerzen;)

von Karl H. (kbuchegg)


Lesenswert?

holger schrieb:
>>Da wir da sehr genaue Daten benötigen werden alle diese Berechnungen
>>wohl mit double ausgeführt. (beim ARM 64bit und 15 Nachkommastellen?).
>
> Die FPU macht nur Single Precision. Sprich float (32Bit), aber kein
> double.

OK. Ich geb zu, ich hab nicht weiter nachgeforscht. Als ich FPU gelesen 
habe, war die Sache gegessen. Und die Demo, die ich gefunden habe, war 
beeindruckend.

von Philipp M. (lord-maricek)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Tut mir leid das sagen zu müssen, aber das ist immer noch nix, was mir
> groß Bauchschmerzen bereiten müsste.
>
> Wenn ein (im Vergleich zu deinem Boliden) popeliger AVR es schafft einen
> Quadrokopter in der Luft zu halten, und der MUSS ständig gesteuert
> werden, dann schafft das dein Bolide schon lange ein Schiff auf Kurs zu
> halten.
>
> Dein µC macht (laut Hersteller) 210 MILLIONEN Rechnungen pro Sekunde.
> Was glaubst du wieviele du für einen Durchgang durch den PID Regler
> brauchst? So ungefähr 20 bis 30.
>
> Deine Updatefrequenzen von unter 10Hz sind lachhaft. Da rechnet der µC
> als Zugabe noch ein paar 'teuflisch schwierige quadratische Gleichungen'
> (tm Douglas Adams) nur damit ihm nicht fad wird.

Hi,

ok danke soweit, ich konnte mir das ganze halt nicht so richtig 
vorstellen.
Wenn ich die Sensoren mit max. 8kHz update, hat man reintheoretisch pro 
Herz 26250 Rechenoperationen zur Verfügung stehen, das sollte locker 
reichen.
"Sparsame Programmierung" bin ich ja sowieso von meinem letzten Großen 
Projekt mit einem Atmega644p gewöhnt.

von holger (Gast)


Lesenswert?

>> Die FPU macht nur Single Precision. Sprich float (32Bit), aber kein
>> double.

>OK. Ich geb zu, ich hab nicht weiter nachgeforscht. Als ich FPU gelesen
>habe, war die Sache gegessen. Und die Demo, die ich gefunden habe, war
>beeindruckend.

Eine 2048 Punkte FFT macht das Ding in 3ms mit FPU, ohne FPU in 17ms.
Selbst ausprobiert;)

von Philipp M. (lord-maricek)


Lesenswert?

Ich hab grad mal in die AN4044 reingeschaut.
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/DM00047230.pdf
Laut der macht die FPU auch double, aber dauert halt länger, weils 
irgentwie aufgeteilt wird.

Wenn ich nichts falsch verstanden habe.

von Philipp M. (lord-maricek)


Lesenswert?

Hi,

sorry dass ich nochmal aufwärme, aber ich hätte nochmal ne Frage.
Ich bin jetzt überlegen ob man für das Projekt vielleicht Freertos 
nehmen könnten. Würde uns das Vorteile in Sachen Performance bringen?, 
oder was hätte das sonst noch für Vorteile?

MfG
Philipp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.