Création d'un head tracker

dje8269

Senior Member
Bonjour à tous,

La partie hard du VHL est en train de se faire et prend un peu de temps . En // j'aimerais voir avec vous, le création d'un head tracker .

une vidéo sera bien plus parlante:
Vidéo d'un head tracker
Encore une

Ce sujet à été vite abordé dans la création du prototype , et j'enviseage de passer à la création .

PieM à largement dégrossi le sujet : je vais donc essayer de faire un cahier des charges qui tiens la route .

le head tracker , sera relié par un fil a la télécommande. ( certainement alimentation + data si c'est possible)

Sur l'appui d'un BP ( sur la télécommande) , on passe en mode mouvement camera ; L'appui sur le BP initialise la position centrale de la camera , il faudrat donc que le tête soit perpendiculaire aux epaules lors de l'appui . Ainsi on evite d'avoir une reference spatiale.
Je desire bouger la camera sur 2 axes seulement . droite gauche , et haut et bas .

Je m'en referre à vous car je n'ai jamais utilisé ce genre de module . et je ne sais pas trop par ou commencer pour recuprere les données ;

Deja le module que faut il : je dispose de ca :

boussole 6D compensée
Gyro + accelormetre
magnetometre 3 axes
Acceleroremetre + gyro

Quel type de liaison est le plus adapté i2c ?

Voici le schéma de ma radiocmmande
TX V-Rex.jpg

Les infos devront etre sous forme de deux octets 1 pour pour le PAN et un pour le TIlt pour commander mes servos .

J'esepere ne rien oublier :

Merci
 

BESQUEUT

Senior Member
Si je comprends bien, ce sont les mouvements de la tête par rapport au buste qui pilotent la camera.
Si on suppose que le buste reste immobile, il faut suivre l'évolution de la tête seulement.
Dans le cas contraire (inclinaison ou rotation du buste) il faut tracker aussi le buste et faire la différence.
Pour le pencher avant/arrière, c'est clairement un accéléromètre.
Pour la rotation autour d'un axe quasi vertical, c'est plus ardu.
Un gyromètre a l'avantage d'être très réactif, mais va progressivement se décaler.
Je ne vois que la boussole qui donne un angle absolu : à tester.
Si c'est trop imprécis et/ou trop peu réactif, utiliser le gyro et le recaler régulièrement avec la boussole.
 

dje8269

Senior Member
Si je comprends bien, ce sont les mouvements de la tête par rapport au buste qui pilotent la camera.
Presque ! .

ce sont les mouvements de la tête , par rapport une référence qui est elle même déterminée par la position de la tête lors de l'appui sur le BP.

Donc il faut que la personne mette sa tête perpendiculaire aux épaules dans la pratique avant d'appuyer sur le BP .
Si la personne a sa tête complètement tournée sur la gauche lors de l'appui par exemple , ce sera cette position qui servira de référence a la boussole, autant dire qu'il ne pourra pas tourner a gauche .
Si la personne appui sur le BP , et ensuite tourne sur elle même entièrement ( le buste et la tête) cela tournera aussi la camera .

Ce sont des particularité que l'utilisateur devra connaitre au préalable .

Donc il me faut un accéléromètre + boussole compensée ?

Dans la pratique, les personnes en général, garde la tête perpendiculaire aux épaules ( question de morphologie) , et ont tendance à baisser légèrement la tête

Niveau précision ,il faut un strict minimum ; la camera bouge par palier pour éviter les vibrations . si j'ai 4 ou 5 paliers par côté ( droite ou gauche ) c'est très bien .
 

BESQUEUT

Senior Member
Niveau précision ,il faut un strict minimum ; la camera bouge par palier pour éviter les vibrations . si j'ai 4 ou 5 paliers par côté ( droite ou gauche ) c'est très bien .
Plutôt que des paliers, il vaudrait mieux un mouvement lent. Si la tête fait un rapide aller-retour à droite il ne se passe quasi rien.
De même si elle oscille autour d'une position moyenne.
Par contre si elle tourne progressivement, la camera suit.
Pas besoin d'une énorme réactivité dans ce cas. Je pense que la boussole (et l'accéléromètre pour le pencher avant/arrière) devraient suffire.
je suppose que l'initialisation se fait en même temps pour gauche/droite et haut/bas. Donc si le gars penche un peu la tête en avant au moment de l'initialisation, ce sera sa position de référence pour une caméra visant à l'horizontale.
 

dje8269

Senior Member
je suppose que l'initialisation se fait en même temps pour gauche/droite et haut/bas. Donc si le gars penche un peu la tête en avant au moment de l'initialisation, ce sera sa position de référence pour une caméra visant à l'horizontale.
Rien n'est encore fait , mais je voyais les choses effectivement comme ca . je pense qu'il suffit de quelques minutes de pratique pour comprendre et s'adapter ; l'immersion est destabilasant au début , mais le magnifique appareil qu'est le cerveau , s'adapte plutôt vite et bien ;

Plutôt que des paliers, il vaudrait mieux un mouvement lent. Si la tête fait un rapide aller-retour à droite il ne se passe quasi rien.
De même si elle oscille autour d'une position moyenne.
Par contre si elle tourne progressivement, la camera suit.
C'est une suggestion . j'avais opté pour la méthode des paliers avec le joystick, et cela était parfait . Comme vous l'avez signalez si on place le joystick sur un seuil de basculement, la , la camera vibre j'en conviens ; encore une fois l'utilisateur devra être avisé et décalera un peu son josytick ( ou sa tête);
le problème avec les mouvements lents c'est lorsque l'on fixe un point . la camera risque de trembler ;
de plus 5 palier sur de chaque cote donc sur un angle 90°, c'est vraiment bien ;

D'apres vous le premier lien est le plus adequat dans ce cas ?
 

BESQUEUT

Senior Member
le problème avec les mouvements lents c'est lorsque l'on fixe un point . la camera risque de trembler
Ben non : si c'est bien programmé, ça ne doit pas trembler. La camera ne bouge que doucement et que si le décalage avec la position "voulue" par la tête est suffisant. Evidement, ce décalage doit être réglé sur le meilleur compromis entre réactivité et stabilité.

Sur la vidéo N°1 , la rotation de la tête n'est pas pris en compte. Il n'y a probablement qu'un accéléromètre.
Sur une voiture, l'intérêt de pencher en avant pour regarder les cailloux sur le chemin me semble assez limité.
Par contre, il semble assez logique de tourner la tête pour voir ce qu'il y a de chaque coté.
 
Last edited:

dje8269

Senior Member
Sur la vidéo N°1 , la rotation de la tête n'est pas pris en compte.
Oui c'etait juste a titre informatif .

Sur une voiture, l'intérêt de pencher en avant pour regarder les cailloux sur le chemin me semble assez limité.
tout dépend de la camera en fait . pour regarder en contre bas avec un zoom ca peut s'avérer utile de descendre en dessous de la ligne d'horizon . et par contre je dois pouvoir regarder vers le haut .

Je viens de checker mon matos, et il me semble qu'aucun ne correspond a mon besoin général . soi je m'en procure d'autre , soit j'en associe deux . boussole compensée et un gyroscope ;

Pouvez vous me valider avant que je passe commande ! quelque chose comme ca
 

BESQUEUT

Senior Member
Pouvez vous me valider avant que je passe commande ! quelque chose comme ca
A mon très humble avis la module LSM303DLMTR déjà en votre possession est suffisant.
Contrairement à ce que j'ai cru en lisant le post #1, il ne s'agit pas seulement d'une boussole, mais aussi d'un accéléromètre 3 axes.
 

dje8269

Senior Member
J'avoue ne pas etre a l'aise la dessus ;

Oui le premier est une boussole avec un accelerometre ; pour la boussole ,je pense avoir compris c'est comme une boussole disons pour l'axe de rotation .

Mais l'accelerometre , lui ne calcule t-il pas la poussé exercé sur un axe en g ? c'est a dire par exemple comme un ascenceur. alors que moi j'aurais besoin de mesure une inclinaison vers le haut ou vers le bas ? comme un avion qui pique du nez ?.

désolé si je m'exprime mal ; autant vous dire que je prefereais que vous ayez raison, comme ca pas besoin que je commande et demain je peux essayer .
 

BESQUEUT

Senior Member
Supposons l'accélomètre posé à plat sur une table, le X vers la droite, le Y vers l'avant et le Z vers le haut.
X et Y valent zéro, et Z vaut 1G (c'est l'accélération due à l'attraction terrestre)
Maintenant je penche de 45° vers l'avant.
Z va diminuer puisque la pesanteur ne s'applique plus uniquement à cet axe. Précisément, on aura G * sin(45°) soit 0,7 G
La pesanteur va par contre s'appliquer à Y qui lui va augmenter dans les mêmes proportions.
X ne change pas puisqu'il est toujours horizontal.
Réciproquement, on peut recalculer les angles à partir des accélérations mesurées sur les 3 axes.
Un Picaxe n'est pas franchement top pour faire de la trigo. mais dans votre cas, je ne pense pas qu'il soit nécessaire de passer par les angles. On doit pouvoir s'en tenir aux sinus.

Pour la boussole, c'est plus compliqué parce que le bidule ne donne pas directement la direction du pôle Nord, mais les composante du magnétisme terrestre sur 3 axes...
Faudrait voir la notice en détails : parfois il est possible de faire un calcul local. Mais le plus souvent il faut faire le calcul sur le microprocesseur, et là, c'est pas gagné avec un Picaxe. On aura le même problème avec beaucoup de CI du même genre.

Il me semble que le mieux, ce serait de faire un chti programme enregistreur dans le genre de ce que j'ai proposé pour tester le (*##@%) de clavier.
On fait deux ou trois enregistrements avec des mouvements simples bien définis.
Puis on injecte ça dans Excel et on triture jusqu'à ce qu'il sorte la formule qui donne les mouvements à partir des données.
Reste plus qu'à écrire la formule en langage Picaxe.
 
Last edited:

PieM

Senior Member
Le LSM303DLMTR n'est pas une boussole mais un triple magnétomètre. C'est à dire que l'orientation n'est pas calculée.
Alors après digestion des 38 pages de doc, faut te préparer à faire du calcul.
La compensation des magnétomètres ne sert strictement à rien dans cette application.

Dommage d'avoir choisi ces capteurs. j'aurais pu te donner un programme tout fait que j'utilise sur des appareils para médicaux.
Pas de chance.
Mais je suis sûr que tu trouveras toute l'aide pour utiliser ce que tu as acheté!
 

dje8269

Senior Member
OK je pense avoir saisi .
Donc effectivement bonne nouvelle j'ai tout ce qu'il faut !

Par contre cette histoire de calcul de sinus ? Le module n'est il pas censé m'envoyer directement les valeurs de ces angles?
 

dje8269

Senior Member
Euh ! Mettez vous à ma place. Je sais plus quoi faire moi !
Je suis prêt à acheter le bon module. Encore faudrait il que je sache lequel il me faut.
 

BESQUEUT

Senior Member
Euh ! Mettez vous à ma place. Je sais plus quoi faire moi !
Je suis prêt à acheter le bon module. Encore faudrait il que je sache lequel il me faut.
Il se fait désirer l'animal. Il a parlé de ça dans le thread sur la moto avec les phares qui tournent quand on la penche.
Mais peut être accepterait-il de rappeler de quel module il parle ?

Dans tous les cas , tu peux déjà commencer par un essai genre #10.
 

dje8269

Senior Member
Bonjour ,
Je veux faire un essai si c'est simple , mais en // j'aurais commander le "bon" module , si vous voulez bien me donner une référence genre chez gotronic.
Une boussole 9D serait mieux? Un truc tout simple.
 

BESQUEUT

Senior Member
Bonjour ,
Je veux faire un essai si c'est simple , mais en // j'aurais commander le "bon" module , si vous voulez bien me donner une référence genre chez gotronic.
Une boussole 9D serait mieux? Un truc tout simple.
Commence par les essais sur l'accéléromètre.
Mets au point un programme pour enregistrer les 3 valeurs X, Y et Z dans un fichier texte à intervalle régulier pendant quelques secondes à partir de l'appui sur un poussoir. Il me semble que PE6 offre des possibilités dans ce domaine mais je n'ai pas encore creusé le sujet.

Point de départ à l'horizontale, le Y vers l'avant.
1) on bascule la tête vers l'avant jusqu'à regarder le sol (90°) et on revient à la position de départ.
2) idem vers la droite
3) idem à 45° (sans tourner la tête)
4) idem à 20° à droite
5) idem à 20° à gauche
6) On bascule la tête vers le haut

Puis tests pour l'orientation. Dans ce cas évidement on enregistre en plus les 3 valeurs magnétiques.
1) Rotation à droite 90° puis retour position de départ.
2) Un tour complet
3) On penche la tête 45° en avant puis un tour complet
4 ) Idem 20° vers le haut

Si déjà on arrive à retrouver tous ces angles, on ne sera pas loin du but...

Pour le module préconisé par PieM, s'il ne souhaite pas nous rafraîchir la mémoire, il faudrait rechercher dans ses posts sur le ou les threads concernant la moto...
 

dje8269

Senior Member
Bon c'est pas gagné .

La connexion du module ; Comme d'hab tout en anglais !!! , je sais il va falloir que je m'y fasse ;
Bon les pins SCL et SDA , pour l'i2C , d'après le schéma j'ai cru comprendre que les résistances de pull-up sont présente sur le circuit ? donc pas besoin d'en remettre ?
DRDY = dataready , je le laisse en l'air ?
SA = est a GND par defaut, le petit strap sur la carte est sur 0.
INT1 et 2 sont les interruptions pas utiles pour le moment .

Et reste Vin = d'aprés le schéma il y as des régulateurs pour le 1.8V et le 3.3 V donc je peut le brancher en 5V d'après vous ? schéma
 

BESQUEUT

Senior Member
Et reste Vin = d'aprés le schéma il y as des régulateurs pour le 1.8V et le 3.3 V donc je peut le brancher en 5V d'après vous ? schéma
Pour moi c'est bon : il y a ce qu'il faut pour ramener tout du 5V à 3,3V
En outre, il y a ce commentaire sur le site de SparkFun :
Maybe you should note in the description this is working on 5v not 3.3v
 

dje8269

Senior Member
J'ai effectué les branchements .

Donc Vdd a 5 V gnd A la masse
Les sorties sda et scl direct sur le picaxe ( sans R de pull-Up) .
SA et DRDY int1 et int 2 en l'air

J'utilise un 20X2 pour les tests

Je vais quand même faire un schéma .
 

dje8269

Senior Member
boussole.jpg

Le picaxe je dois le mettre en master ou slave ? c'est le module qui envoie les infos ou moi qui doit les recuperer ?
 

dje8269

Senior Member
je n'ai que des 255 .

Code:
#PICAXE 20X2

Symbol adress_Gyro = %00011000

'###########################    Initialisation    ############################

setfreq m8

hi2csetup i2cmaster, adress_Gyro, i2cslow_8, i2cbyte	' Configuration de l'i2C en maitre



do

hi2cin 0,(b0,b1,b2,b3,b4,b5,b6,b7)

pause 1000

sertxd ("b0=",#b0," ","b1=",#b1," ","b2=",#b2," ","b3=",#b3," ","b4=",#b4," ","b5=",#b5," ","b6=",#b6," ","b7=",#b7,13,10)

loop
Il doit y avoir un problème sur le bus.

J'ai essayé avec slow et fast ; ainsi que byte et word
 
Last edited:

BESQUEUT

Senior Member
Privilégier slow pour les essais.
Pour vérifier le bus, brancher un autre composant I2C connu en parallèle sur SCL SDA
En changeant d'adresse, on doit pouvoir le lire.
 

dje8269

Senior Member
Il y as bien de l'activité sur le bus i2C :

le programme test avec l'analyseur logique

Code:
#PICAXE 20X2

Symbol adress_Gyro = %00011000

'###########################    Initialisation    ############################

setfreq m8

hi2csetup i2cmaster, adress_Gyro, i2cslow_8, i2cbyte	' Configuration de l'i2C en maitre



do

hi2cin 0,(b0,b1,b2,b3,b4,b5,b6,b7)

pause 5


loop
View attachment 17757

View attachment 17758

Voulez vous que je mettte quand même un autre picaxe en //, quand même ?
 

BESQUEUT

Senior Member
Moi je ne veux rien. Tout au plus puis-je suggérer...
Comme je suis sec, pourquoi pas le test en //
Au moins si ça ne marche pas on aura une piste. Si ça marche on n'est pas beaucoup plus avancé.
 

BESQUEUT

Senior Member
Je ne suis pas électronicien, plutôt software... Quand on aura des données, je pourrai peut-être aider.
Mais tant que la bête n'aura pas toussé...
Il m'est arrivé de trouver des pistes en lisant la bibliothèque de l'Arduino. Mais c'est un gros travail, et c'est du c...
 

dje8269

Senior Member
L'i2C est ok entre deux picaxes en // .

les valeurs restent a 255 pour le module .

Mais avec le picaxe j'ecris les valeurs dans le scratchpad, pour les lire avec un hi2cin . avec le module le sont elle ?
Il y a forcement un détail d'initialisation du module .

Je suis coincé la
 

dje8269

Senior Member
LOL .

A quel prix aussi ! J'y passe mes weekend , mes soirs , mes vacances ...... et les experts sont de vrai mines d'or . de plus , dans la vie je suis quelqu'un de passionné , tetu et tenace, alors je bosse , je bosse et je rebosse . Mais c'est vrai qu'en un an , j'a ivu pas mal de fonction .
 

BESQUEUT

Senior Member
Vous devriez lire les premières valeurs des registres qui sont souvent par défaut à zéro. En tout cas , pas 255... :(
 

dje8269

Senior Member
J'ai un doute sur l'adressage i2c .

Sur le schema il marque que l'adresse ud module est 0x18 . Mais doit-on tenir compte du bit de poids faible ?

Page 18 de la DS il marque que l'adresse i2c lue sont les 7 bit de poids fort . Donc j'ai un doute . dois je mettre %00011000 ou %00110000 ?

J'ai essayé les deux sans succés
 

dje8269

Senior Member
alors j'ai l'impression d'avoir un peu avancé. je pense donc que j'avais visé juste . la bonne valeur de l'adresse est 0x18 , mais doit s'ecrire %00110000 qui correspond en fait a 0x30 .

En mettant cette adresse , j'avais un comportement meilleur a l'analyseur . En fait la communication lue etait du style write adresse 0x18 , un peu de vide et read adresse 0x18 . je vous referais un screen apres mangé ( j'ai ramener le matos a la maison) .

Par contre il manque encore les valeurs ca reste figé a 0 .

Je pense que la piste ce trouve à la page 18 de la DS ; car dans le tableau on voit que le master écrit et puis lit sur l'esclave j'ai l'impression ! . mais mon anglais ne me permets pas d'approfondir ma reflexion, car je n'arrive pas a comprendre le sens des phrases .
 

BESQUEUT

Senior Member
Par contre il manque encore les valeurs ca reste figé a 0 .
Les 32 premiers registres sont "réservés" et probablement égaux à zéro.
Essayez à partir de l'adresse H20 qui est normalement un 7.
Les données sont entre H28 et H2D.

Ce qui est décrit à la page 18 est le mécanisme standard pour lire à une "slave adress" on écrit cette adresse, ce qui positionne le registre d'adressage au bon endroit, puis on lit les données.

Tout ceci est normalement pris en charge automatiquement par le premier paramètre de la commande hi2cin, qui est à zéro dans votre programme.
 
Last edited:

dje8269

Senior Member
Hum...... ça sent bon le début de piste ça . Je vois bien un truc dans ce genre. A je fais prendre la douché au petit , nous mangeons et je m'y colle
 

dje8269

Senior Member
Essayez à partir de l'adresse H20 qui est normalement un 7.
Les données sont entre H28 et H2D.
Vous avez bon jusque la !!!

Sans titre.jpg

Quand j'écris cela , tout reste à 0

Code:
#PICAXE 20X2

setfreq m8

hi2csetup i2cmaster ,%00110000, i2cslow_8, i2cbyte

'################################################################"
do

hi2cin 0x28,(b0,b1,b2,b3,b4)

debug

loop
 

BESQUEUT

Senior Member
Vous avez bon jusque la !!!
YES !!! Il a parlé !

Vu que H20 vaut 7, ça signifie que l'accéléromètre est "power down" (voir table 18)
je suggère de mettre le bit qui va bien à 1, histoire de le mettre en "normal mode"
Tant que vous y êtes, il y a 6 valeurs à lire...
 

dje8269

Senior Member
je suggère de mettre le bit qui va bien à 1, histoire de le mettre en "normal mode"
donc je dois ecrire dans l'esclave par :

hi2cout 0x20,(%00100111)

pour mettre PM0 a 1 ?

je ne comprend pas un truc . quand j'ecris

hi2cin 0x28,(b0,b1,b2,b3,b4,b5,b6,b7)

pourquoi toutes les valeurs osnt les mêmes ? l'adresse n'est pas censé entre incrementer a chaque fois ; je devrais placés l'adresse 28 dans b0 , 29 dans b1 etc.... non ?
 
Top