Go Down

Topic: Trigonométrie et Programmation [Non réglé] (Read 6309 times) previous topic - next topic

Marsthor

Oct 28, 2013, 12:06 pm Last Edit: Oct 28, 2013, 06:54 pm by Marsthor Reason: 1
Bonjour,
Je travaille actuellement sur un petit programme qui nécessite l'utilisation des fonctions trigonométriques inverses (arccos, arcsin...) mais je n'arrive pas à les trouver sur Arduino. J'ai cherché sur Internet, il semble y avoir des librairies pour cela mais je n'ai pas réussi à me les procurer. Quelqu'un aurait-il déjà eu affaire à ce type problème et pourrait m'aider ?
Merci pour vos réponses
Bonne Journée, Théo

barbudor

Bonjour

#include <math.h>

--> http://www.nongnu.org/avr-libc/user-manual/group__avr__math.html

Ceci compile (mais pas essayé) :
Code: [Select]
#include <math.h>

void setup( void )
{
  float res1 = acos( 0.5 );
  float res2 = asin( 0.5 );
}

void loop( void )
{
}


Toutefois il faut être réaliste : l'ATmega n'est qu'un petit 8 bit et ca lui coute cher de faire ce genre d'opération. Faut pas être pressé.

Marsthor

Merci, le problème c'est que je dois pouvoir traiter ces calculs très rapidement... Et je ne sais pas comment faire à part en utilisant une table des sinus/cosinus mais qui serait peu précise.

barbudor

Ah ben tu peux pas avoir le beurre et l'argent du beurre (la crémière, je m'la garde).

As tu déjà vérifié si les bibliothèques standard ci-dessus sont ok ou pas vis à vis de tes contraintes de précision et de vitesse ?

Quelle précision/vitesse cherches tu et pourquoi faire ?

Marsthor

Je n'ai pas encore testé les librairies. Pour faire simple, avec deux capteurs ultrasons, je détermine les distances à un émetteur mobile, et à partir de là j'oriente les capteurs pour obtenir un triangle isocèle ( dont la base est connue, c'est le segment entre les deux capteurs). L'orientation des capteurs nécessite de travailler dans des triangles et donc des angles (Al-Kashi, Théorème des sinus). Mon but étant d'avoir le triangle isocèle instantanément pour que même lorsque l'émetteur bouge le triangle reste isocèle. L'application serait la détection d'une personne possédant un émetteur par une caméra, avec le triangle isocèle, le sujet est toujours centré par la caméra.

3Sigma

Si la distance vis à vis du sujet est grande par rapport à la distance entre les deux capteurs (et surtout si j'ai tout compris), l'écart de mesure de distance divisé par la distance entre les capteurs va correspondre au sinus de l'angle d'erreur de pointage. En effet, si un angle theta est faible, tu peux approximer sin(theta) à theta (et par la même occasion, tu auras theta ~ asin(theta)).
Bref, ça t'évite d'avoir à calculer un arcsin: ta différence de mesure de distance divisé par la distance entre les capteurs est en fait très proche de l'angle que tu cherches.
Quand l'angle est grand ça devient faux mais ce n'est pas très grave car j'imagine que tu auras un asservissement pour maintenir l'erreur de pointage très faible ; donc à part à l'initialisation du système, ton erreur de pointage sera toujours faible.

Marsthor

Merci pour ta réponse, cela à l'air super, par contre au niveau maths quelles lois utilises-tu pour affirmer que l'écart entre les deux longueurs (les deux cotés du triangle) divisé par la base est égale à sin(thêta) ? Je ne pense pas avoir bien compris.

3Sigma

Je me suis fait un croquis dans la tête. Tu en as fait un de ton côté ?
Ce que je te dis est une approximation aux petits angles, ce n'est pas rigoureusement correct mais a priori ça sera largement suffisant pour ce que tu veux faire (si j'ai bien compris, encore une fois ; pour être certain il faudrait que tu postes un schéma montrant tes deux capteurs, la cible et les différents segments qui les relient).

Marsthor

Voilà un petit croquis pour expliquer clairement le problème:

B@tto

Pourquoi ne pas monter le récepteur directement sur un axe d'un moteur pas à pas en rotation permanente (comme un radar) ? Tu aurais le bon angle directement
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

zoroastre

Capteur à ultrason ?

Au mieux, ils travaillent déjà avec un angle approximatif de 15 degrés dans le meilleur des cas, pour une distance toute relative d'environ quelques mètres pour les meilleurs candidats.

d vaudrait combien environ ???

@+

Zoroastre.
Gné! ;)

Marsthor

@B@tto, la caméra est aussi montée sur le pivot donc si je le fais tourner en permanence mon image risque de ne pas être top.

Le but serait de pouvoir faire facilement un suivi de puis un point fixe, exemple un skieur au niveau d'une bosse ou autre.
d est environ égale à 20cm.

zoroastre

C'est, il me semble, un peu trop ambitieux pour une arduino. C'est déjà assez galère de suivre un mobile à quelques centimètres sans avoir de mouvement oscillant...
Gné! ;)

3Sigma

OK, c'est bien ce que j'avais compris. Si tu traces un segment qui part du récepteur de gauche vers la droite "L2" et qui "isocèlise" le triangle, l'angle entre ce segment et l'horizontale devrait être proche de theta (ou peut-être de 2 x theta).
Mais je pense que pour l'instant les histoires d'angles sont tes derniers problèmes. Je ne suis pas un spécialiste des capteurs à ultrasons mais il me semble qu'ils fonctionnent en mesurant le temps mis aller-retour entre l'émetteur et le récepteur, qui sont normalement positionnés au même endroit. Ici, si j'ai bien compris, l'émetteur est en mouvement et le récepteur est fixe. Pourquoi pas, sauf que tu n'auras pas moyen de savoir quand est parti le signal de l'émetteur, donc impossible de connaître le temps mis entre l'émetteur et le récepteur.
Mais bon, tu as peut-être déjà résolu ce problème. Si c'est le cas, je serais curieux de savoir comment.
En tous cas, si je devais faire ce genre de projet (très intéressant d'ailleurs) je m'orienterais plutôt vers du traitement vidéo (reconnaissance d'un objet en mouvement dans une image) qui n'est pas à la portée d'un Arduino Uno mais sans doute plus des derniers petits nouveaux de la gamme ou d'autres cartes style Raspberry Pi.


Christian_R

Cherches "soloshot" il y a des sujets voisins de ce que tu veux faire.
Christian

Go Up