arm_sin_cos_f32() gibt keine Ergebnisse aus

OP #2744137
Lesenswert?
• ▲
▼
Für einen Autopiloten (Modellflugzeuge) verwende ich unter anderem die 
Funktion arm_sin_cos_f32(). Leider kann ich nach Aufruf dieser Funktion 
nicht mit den sin-cos-Werten weiterrechnen... Wenn ich stattdessen 
arm_sin_f32() und arm_cos_f32() nutze, funktioniert alles wunderbar!
1
/* calculate orientation-setpoint (qSP) */
2
/* using euler > quaternion conversion */
3

4
// funktioniert:
5
sin_phiSP_half = arm_sin_f32(phiSP * 0.5);
6
sin_thetaSP_half = arm_sin_f32(thetaSP * 0.5);
7
sin_psiSP_half = arm_sin_f32(psiSP * 0.5);
8
cos_phiSP_half = arm_cos_f32(phiSP * 0.5);
9
cos_thetaSP_half = arm_cos_f32(thetaSP * 0.5);
10
cos_psiSP_half = arm_cos_f32(psiSP * 0.5);
11

12
// funktioniert nicht:
13
arm_sin_cos_f32((phiSP * 0.5), &sin_phiSP_half, &cos_phiSP_half);
14
arm_sin_cos_f32((thetaSP * 0.5), &sin_thetaSP_half, &cos_thetaSP_half);
15
arm_sin_cos_f32((psiSP * 0.5), &sin_psiSP_half, &cos_psiSP_half);
16

17
qSP0 = (cos_phiSP_half * cos_thetaSP_half * cos_psiSP_half) + (sin_phiSP_half * sin_thetaSP_half * sin_psiSP_half);
18
qSP1 = (sin_phiSP_half * cos_thetaSP_half * cos_psiSP_half) - (cos_phiSP_half * sin_thetaSP_half * sin_psiSP_half);
19
qSP2 = (cos_phiSP_half * sin_thetaSP_half * cos_psiSP_half) + (sin_phiSP_half * cos_thetaSP_half * sin_psiSP_half);
20
qSP3 = (cos_phiSP_half * cos_thetaSP_half * sin_psiSP_half) - (sin_phiSP_half * sin_thetaSP_half * cos_psiSP_half);
Angehängte Dateien:
Gast #2745112
Lesenswert?
• ▲
▼
Igitt, beim Anschauen dieses Armsincodes wird mir schlecht. Auf wieviel 
Stellen willst du das denn genau haben? Vielleicht nützt dir der Sinus 
nach Pedersen viel eher.

sin(x) = x * (K*x^2 + L + M/(x^2 + N))
mit
K=0.15625
L=-11.45242628
N=38.55864669

kostet nur 3 Multiplikationen und 1 Division. Man kann das sogar in 
Festkomma sprich integer formulieren, ist echt interessant.
Quelle: "Lampe, Jorke, Wengel"

W.S.
OP #2747498
Lesenswert?
• ▲
▼
Diese Annäherung klingt vielversprechend, da ich lediglich 3 
Nachkommastellen benötige und das ganze auch für cos einsetzbar ist.
Allerdings kann ich nach kurzer Suche dazu nichts finden. Lediglich das 
Buch der genannten Autoren:
http://www.hood.de/angebot/45547775/lampe-jorke-wengel-algorithmen-der-mikrorechentechnik.htm

Wie lautet in der Annäherung die Konstante 'M'?

Allerdings ändert das nichts an meiner Frage, warum die Funktion mit den 
übergebenen pointern nicht funktioniert...?
OP #2748653
Lesenswert?
• ▲
▼
Habe den Fehler gefunden:
Die Funktion arm_sin_cos_f32() erwartet einen Eingangswert in grad, 
während arm_sin_f32() in radians rechnet... Wer sich das wieder 
ausgedacht hat!

Habe mir jedenfalls das erwähnte Buch gekauft, da es scheinbar recht 
nützliche Algorithmen enthält, aus Zeiten in denen Rechenzeit noch etwas 
zählte.

Nötig sind die Codeeinsparungen noch nicht, da ich erst 18% der 
Rechenzeit und 40% der Codegröße nutze...
Eventuell werde ich die Sampletime mal von 10 auf 5 ms heruntersetzen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.