Bonjour
La partie théorique des quaternions ne me pose pas trop de problème. Par contre j'ai des difficultés dans la mise en place pratique de ceux-ci ainsi que dans leur interprétation.
Dans mon application je souhaite utiliser les quaternions pour calculer un angle entre 2 membres du corps humain.
Je possède 2 capteurs fixés sur les deux membres. Et je récupère les quaternions fourni par ces capteurs, qui représentent selon moi la rotation entre le repère mobile du capteur et le repère terrestre.
Les capteurs travail dans un repère indirect, et l'angle que je cherche à calculer dépend de la rotation selon l'axe Z de ceux ci (cf. pièces jointes).
J'ai essayé 2 méthodes qui n'ont pas abouti, et je ne sais pas si c'est une erreur de programmation ou une erreur mathématique.
Tous les quaternions sont unitaires, ou je les force à devenir unitaire.
- La première méthode consiste à calculer un angle entre deux vecteurs.
C'est à dire que je défini 2 vecteurs, dans les 2 repères mobiles, qui sont colinéaire dans le repère absolue lorsque l'angle rechercher est nul.
Puis je leur applique à chacun le quaternion correspondant. Et grâce à un produit scalaire je récupère l'angle entre les deux vecteurs qui correspond à celui rechercher.
Cette méthode ne fonctionne que lorsque les quaternions ne sont composé que de la rotation qui m’intéresse et est inopérant lorsque il y a des composantes parasites, comme par exemple avec une abduction du bras de 30°.
- La seconde méthode envisagée consiste en l'utilisation directe des quaternions.
Si l'on effectue le quotient des 2 quaternions nous sommes censé obtenir le quaternion exprimant la rotation de l'un vers l'autre, et l'extraction de l'angle de celui-ci est l'angle recherché.
Cette méthode donne également des résultats complètement absurdes.
Ces méthodes sont elles mathématiquement correct?
Si oui, auriez vous une piste pour la rendre fonctionnelle.
Si non, pouvez vous me mettre en évidence mon (mes) erreur(s).
La capture s'effectue avec des centrales inertielles BNO055 :
https://learn.adafruit.com/adafruit-...ensor/overview
https://cdn-shop.adafruit.com/datash...5_DS000_12.pdf
Le traitement est réalisé avec un microcontrôleur Arduino DUE :
https://www.arduino.cc/en/Main/ArduinoBoardDue
Je mets en pièce jointe des schémas (sûrement plus explicite), ainsi que les algorithmes que j'utilise pour traiter les quaternions.
PJ : - schéma-1 : Schéma de principe du système
- schéma-2 : Définition de l'angle recherché
- schéma-3 : Définition de l'angle recherché en fonction de plusieurs paramètres
- Méthode-1 et 2 : Algorithme utilisé pour le traitement
Merci d'avance
PS: Si cette discussion n'est pas à ça place n'hésité pas à me le dire, j'essayerai de la déplacer dans un topic plus adapté.
-----