mikrocontroller.net

Forum: PC-Programmierung C# - Beschleunigung von Accelerometer in Strecke für Unity - wie umsetzten?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Rudi L. (rudi235)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Stehe gerade etwas auf dem Schlauch, wie die Beschleunigungsdaten eines 
Accelerometers in eine Strecke umzurechnen sind.

Mathematisch sieht es wohl so aus (siehe Bild).
http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt

Nur wie führe ich eine doppelte Integration in Echtzeit in C# 
aus(Unity)?

Hat jemand ein Codebeispiel für sowas?

Möchte die gewonnenen "Weg"-Daten aus der Beschleunigung als Translation 
auf einen Körper in Unity anwenden.

Speziell die Zeit bereitet mir Probleme, die ist in der Formel in 
Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert 
schonmal nicht. Also was für "t" nehmen?

: Bearbeitet durch User
Autor: KS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Seite erklärt eigentlich alles was du brauchst: 
https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rudi L. schrieb:
> Speziell die Zeit bereitet mir Probleme, die ist in der Formel in
> Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert
> schonmal nicht.

Was meinst du mit Laufzeit?

Für die Auswertung von Daten eines Abtastsystemes musst du erstmal die 
zeitdiskrete Form deiner Integration hinschreiben. Dann wird daraus eine 
Summation. Und der Abstand zwischen zwei Abtastungen ist dann dein 
Zeitschritt.

Autor: Rudi L. (rudi235)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> Was meinst du mit Laufzeit?

Habe zuerst mit jeder Berechnung die Sekunden hochgezählt, was natürlich 
Quatsch ist.. Meinte damit im Laufenden Betrieb (Ist ja in einer 
Gameengine).


> Für die Auswertung von Daten eines Abtastsystemes musst du erstmal die
> zeitdiskrete Form deiner Integration hinschreiben. Dann wird daraus eine
> Summation. Und der Abstand zwischen zwei Abtastungen ist dann dein
> Zeitschritt.

Und da hab ich das Problem. Wie muss ich die oben genannte Formel 
umstellen, dass ich die Rechnung in Code umsetzen kann.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rudi L. schrieb:

> Mathematisch sieht es wohl so aus (siehe Bild).
> 
http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt

Schon im Link steht, dass die Formel den Sonderfall der konstanten 
Beschleunigung behandelt.

> Nur wie führe ich eine doppelte Integration in Echtzeit in C#
> aus(Unity)?

Was für eine Integration? Die Formel enthält keine und braucht auch 
keine, da die Beschleunigung in ihrem Geltungsbereich halt konstant ist.

> Hat jemand ein Codebeispiel für sowas?

Lerne selber denken! Hier geht es im wesentlichen darum, sich die 
Bedeutung der drei Teilterme wirklich klar zu machen und sie dann 
sinnvoll zu benutzen.

> Speziell die Zeit bereitet mir Probleme, die ist in der Formel in
> Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert
> schonmal nicht.

Doch, na klar funktioniert das (wobei natürlich für deine praktische 
Anwendung ein Intervall von 1s deutlich zu groß sein wird). Der Trick 
ist, die Beschleunigung über das Meßintervall als konstant zu 
betrachten.  Dann gilt die Formel nämlich. Und zwar für jedes 
Meßintervall wieder. Wobei für alle außer dem ersten ein Teilterm 
entfällt und für alle außer dem ersten ein weiterer Teilterm genau dem 
entspicht, was im vorigen Intervall berechnet wurde.

Erkennst du jetzt, was du tun musst?

Autor: Rudi L. (rudi235)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Rudi L. schrieb:
>
>> Mathematisch sieht es wohl so aus (siehe Bild).
>>
> 
http://www.maschinenbau-wissen.de/skript3/mechanik/kinematik/324-gleichmaessig-beschleunigt
>
> Schon im Link steht, dass die Formel den Sonderfall der konstanten
> Beschleunigung behandelt.

Genau. Wird der Zeitabschnitt für jede Berechnung extrem klein gewählt 
sollte das ja gelten. Da die Änderung der Beschleunigung dann als 
konstant angesehen werden kann.

>> Nur wie führe ich eine doppelte Integration in Echtzeit in C#
>> aus(Unity)?
>
> Was für eine Integration? Die Formel enthält keine und braucht auch
> keine, da die Beschleunigung in ihrem Geltungsbereich halt konstant ist.

Ja, stimmt, da das Ergebnis in der Formel schon die Strecke ist und 
bereits zweimal integriert wurde. Das muss mit dem "a" aus den 
Sensordaten aber erst passieren.


>> Hat jemand ein Codebeispiel für sowas?
>
> Lerne selber denken! Hier geht es im wesentlichen darum, sich die
> Bedeutung der drei Teilterme wirklich klar zu machen und sie dann
> sinnvoll zu benutzen.
>
>> Speziell die Zeit bereitet mir Probleme, die ist in der Formel in
>> Sekunden angegeben, aber einfach zur Laufzeit hochzählen funktioniert
>> schonmal nicht.
>
> Doch, na klar funktioniert das (wobei natürlich für deine praktische
> Anwendung ein Intervall von 1s deutlich zu groß sein wird). Der Trick
> ist, die Beschleunigung über das Meßintervall als konstant zu
> betrachten.  Dann gilt die Formel nämlich. Und zwar für jedes
> Meßintervall wieder. Wobei für alle außer dem ersten ein Teilterm
> entfällt und für alle außer dem ersten ein weiterer Teilterm genau dem
> entspicht, was im vorigen Intervall berechnet wurde.
>
> Erkennst du jetzt, was du tun musst?

Ich schlaf nochmal drüber. Wie gesagt in der Theorie ist es klar, aber 
Codetechnisch komme ich zu keinen sinnvoll verwertbaren Ergebnissen.


KS schrieb:
> Die Seite erklärt eigentlich alles was du brauchst:
> https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

Danke, das sieht vielversprechend aus.

Autor: Joggel E. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dem Poster fehlt das wissen der Mathematik. Er denkt mit ein paar 
Codezeilen copy/pasten sei das alles machbar. Ja. Das Integral schon, 
eine Game Engine aber eben nicht. Da braucht's noch etwas Physik und 
Mathematik.

Autor: Rudi L. (rudi235)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joggel E. schrieb:
> Dem Poster fehlt das wissen der Mathematik. Er denkt mit ein paar
> Codezeilen copy/pasten sei das alles machbar. Ja. Das Integral schon,
> eine Game Engine aber eben nicht. Da braucht's noch etwas Physik und
> Mathematik.

Naja, in Unity an sich sieht man recht schnell Erfolge.
Die Bewegung per Tastatur funktioniert gut. Bin jetzt erstmal dabei den 
Einfluss der Erdbeschleunigung mit Hilfe der Rotationsmatrix zu 
entfernen, dass der Beschleunigungsvektor in jeder Drehrichtung "0,0,0" 
ergibt.
Die Werte vom Gyroskop sind schon implementiert. Drehungen gehen, nur 
eben noch keine Translation.

Hast du trotzdem was sinnvolles beizutragen Joggel E.?
Vielleicht ein kleines Codefragment ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.