Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Boussole Numérique !
En plaçant une boussole ( celle du téléphone, j'en ai pas de vrai à la maison). les résultats ne sont pas du tout les mêmes . avec le téléphone, si je place bien au bord de mon bureau( comme sur la photo 1 , j'obtiens un angle de 185° ( hors sur la photo N°1 on voit qu'il affiche 18°) .
Bonjour,
j'ai remarqué que la boussole du téléphone était faussée par l'aimant qui se trouve dans certaines housses de protection.
Boussole Numérique !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
@pspic : je n'ai pas de coque sur mon portable !
Ce qui me choque le plus , ce n'est pas tant les valeurs obtenues, mais c'est le décalage entre 2 mesures . En effet je fais des quarts de tour , donc l'angle devrait augmenter ou diminuer de 90° environ a chaque fois . Hors ce n'est pas le cas
@pspic : je n'ai pas de coque sur mon portable !
Ce qui me choque le plus , ce n'est pas tant les valeurs obtenues, mais c'est le décalage entre 2 mesures . En effet je fais des quarts de tour , donc l'angle devrait augmenter ou diminuer de 90° environ a chaque fois . Hors ce n'est pas le cas
Boussole Numérique !
Bonjour Jeremy,
Qu'il y ait un écart entre boussole du smartphone et ton DOP9 est assez "normal" . le magnétomètre du phone est orienté pour avoir le nord qui correspond au haut de l'appareil. Sur ton DOP9 les axes X et Y peuvent très bien l'un comme l'autre être défini comme correspondant au nord. ce n'est pas une aiguille aimantée!
Par contre comme tu le soulignes, ce qui est très inquiétant , c'est la progression des valeurs que tu lis. Il y a un gros problème! Et pas d'offset!
Tu devrais faire la même opération plus progressivement, en notant ou enregistrant, les valeurs lues selon 12 directions réparties sur 360°.
L'idéal serait d'avoir également les valeurs brutes des registres du magnéto:
Xlsb = 28
Xmsb = 29
Ylsb = 2A
Ymsb = 2B
sous la forme : Xm Xl Ym Yl angle
Je suis surpris également qu'il n'y ait pas de configuration pour ton capteur car on peut modifier sensibilité et fréquence d'échantillonnage. (de base à 10Hz).
Je réponds aussi à ton mail:
pas regardé en détail ton programme . fais la même chose : sur 1 tour, 8 positions, qu'est-ce que tu obtiens comme angle et quelles sont tes valeurs magX et magY ?
Qu'il y ait un écart entre boussole du smartphone et ton DOP9 est assez "normal" . le magnétomètre du phone est orienté pour avoir le nord qui correspond au haut de l'appareil. Sur ton DOP9 les axes X et Y peuvent très bien l'un comme l'autre être défini comme correspondant au nord. ce n'est pas une aiguille aimantée!
Par contre comme tu le soulignes, ce qui est très inquiétant , c'est la progression des valeurs que tu lis. Il y a un gros problème! Et pas d'offset!
Tu devrais faire la même opération plus progressivement, en notant ou enregistrant, les valeurs lues selon 12 directions réparties sur 360°.
L'idéal serait d'avoir également les valeurs brutes des registres du magnéto:
Xlsb = 28
Xmsb = 29
Ylsb = 2A
Ymsb = 2B
sous la forme : Xm Xl Ym Yl angle
Je suis surpris également qu'il n'y ait pas de configuration pour ton capteur car on peut modifier sensibilité et fréquence d'échantillonnage. (de base à 10Hz).
Je réponds aussi à ton mail:
pas regardé en détail ton programme . fais la même chose : sur 1 tour, 8 positions, qu'est-ce que tu obtiens comme angle et quelles sont tes valeurs magX et magY ?
Boussole Numérique !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour Pierre ,
Je me permets de joindre le document que tu as fait pour moi .
Il s'agit d'une explication très clair et précise, du fonctionnement d'un magnétomètre et comment calculé un cap !
PS : PieM et besqueut sont deux cracks en la matière qui m'ont initié à la programmation de microcontrôleur à mes tous début (sur picaxe) .
@Paul : ce document pourrais te servir , car tu avais buter sur le magnéto aussi !
Pour en revenir à nos moutons .
Comme c'est difficile d'afficher toutes ces infos sur mon petit écran, je suis passé à l'UART . Ainsi j’envoie mes valeurs en UART et je peux les lires sur realterm.
Voila ce que j'obtiens pour les 4 positions !
En fait j'utilise la librairie fournis par MikroE .
Et la configuration reste inconnue ! ou alors je n'ai pas compris comme cela fonctionnait. Jer vois bien qu'il envoie par I²C au module. ces valeurs sont enregistrées dans _C9DOF_CTRL_REG1_M_CONFIG par exemple. Mais impossible de savoir a quoi cela correspond.
Voici le code si quelqu'un comprends la configuration !
Je me permets de joindre le document que tu as fait pour moi .
Il s'agit d'une explication très clair et précise, du fonctionnement d'un magnétomètre et comment calculé un cap !
PS : PieM et besqueut sont deux cracks en la matière qui m'ont initié à la programmation de microcontrôleur à mes tous début (sur picaxe) .
@Paul : ce document pourrais te servir , car tu avais buter sur le magnéto aussi !
Pour en revenir à nos moutons .
Comme c'est difficile d'afficher toutes ces infos sur mon petit écran, je suis passé à l'UART . Ainsi j’envoie mes valeurs en UART et je peux les lires sur realterm.
Voila ce que j'obtiens pour les 4 positions !
L'idéal serait d'avoir également les valeurs brutes des registres du magnéto:
Xlsb = 28
Xmsb = 29
Ylsb = 2A
Ymsb = 2B
sous la forme : Xm Xl Ym Yl angle
Je suis surpris également qu'il n'y ait pas de configuration pour ton capteur car on peut modifier sensibilité et fréquence d'échantillonnage. (de base à 10Hz).
En fait j'utilise la librairie fournis par MikroE .
Et la configuration reste inconnue ! ou alors je n'ai pas compris comme cela fonctionnait. Jer vois bien qu'il envoie par I²C au module. ces valeurs sont enregistrées dans _C9DOF_CTRL_REG1_M_CONFIG par exemple. Mais impossible de savoir a quoi cela correspond.
Voici le code si quelqu'un comprends la configuration !
Code : Tout sélectionner
int16_t accelX;
int16_t accelY;
int16_t accelZ;
int16_t gyroX;
int16_t gyroY;
int16_t gyroZ;
int16_t magX;
int16_t magY;
int16_t magZ;
float Angle ;
const float Pi = 3.14159265;
float temperature;
uint8_t temp[2] = {0};
char logText[ 15 ] = {0};
void systemInit()
{
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_INT_PIN, _GPIO_INPUT );
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_RST_PIN, _GPIO_OUTPUT );
mikrobus_i2cInit( _MIKROBUS1, &_C9DOF_I2C_CFG[0] );
mikrobus_logInit( _MIKROBUS2, 9600 );
Delay_100ms();
}
void applicationInit()
{
c9dof_i2cDriverInit( (T_C9DOF_P)&_MIKROBUS1_GPIO, (T_C9DOF_P)&_MIKROBUS1_I2C, _C9DOF_ADDRESS_00 );
/* Initializes */
//ACCEL & GYRO
c9dof_writeData( _C9DOF_CTRL_REG4, _C9DOF_CTRL_REG4_CONFIG );
Delay_10ms();
c9dof_writeData( _C9DOF_CTRL_REG1_G, _C9DOF_CTRL_REG1_G_CONFIG );
Delay_10ms();
c9dof_writeData( _C9DOF_CTRL_REG5_XL, _C9DOF_CTRL_REG5_XL_CONFIG );
Delay_10ms();
c9dof_writeData( _C9DOF_CTRL_REG6_XL, _C9DOF_CTRL_REG6_XL_CONFIG );
Delay_10ms();
c9dof_writeData( _C9DOF_CTRL_REG8, _C9DOF_CTRL_REG8_CONFIG );
Delay_10ms();
//MAGNETOMETAR
c9dof_writeDataMag( _C9DOF_CTRL_REG1_M, _C9DOF_CTRL_REG1_M_CONFIG );
Delay_10ms();
c9dof_writeDataMag( _C9DOF_CTRL_REG2_M, _C9DOF_CTRL_REG2_M_CONFIG );
Delay_10ms();
c9dof_writeDataMag( _C9DOF_CTRL_REG3_M, _C9DOF_CTRL_REG3_M_CONFIG );
Delay_10ms();
c9dof_writeDataMag( _C9DOF_CTRL_REG4_M, _C9DOF_CTRL_REG4_M_CONFIG );
Delay_10ms();
c9dof_writeDataMag( _C9DOF_CTRL_REG5_M, _C9DOF_CTRL_REG5_M_CONFIG );
Delay_10ms();
}
void applicationTask()
{
c9dof_readMag( &magX, &magY, &magZ );
Delay_10ms();
mikrobus_logWrite( "magX=", _LOG_TEXT );
IntToStr( magX, logText );
mikrobus_logWrite( logText, _LOG_TEXT );
mikrobus_logWrite( " magY=", _LOG_TEXT );
IntToStr( magY, logText );
mikrobus_logWrite( logText, _LOG_TEXT );
Angle = (atan2(magY, magX) * 180) / Pi;
if (Angle < 0) Angle += 360 ;
mikrobus_logWrite( " Angle= ", _LOG_TEXT );
FloatToStr_FixLen( Angle, logText,6 );
mikrobus_logWrite( logText, _LOG_TEXT );
mikrobus_logWrite( " ", _LOG_LINE );
Delay_1sec();
}
void main()
{
systemInit();
applicationInit();
UART1_Init(9600);
while (1)
{
applicationTask();
}
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Boussole Numérique !
suite...
je viens de regarder les valeurs que tu as en X.Y, et angle (photos)
si on suppose qu'on fait les calculs à partir de l'axe Y du module
1 670 2043 18.15 ça c'est OK, le calcul de l'angle est correct.
2 -176 -186 238.9 pas possible! les valeurs de X et Y ne peuvent pas passer toutes les 2 en négatif sur 1/4 tour !
3 1986 -1168 120.2 oui c'est OK au niveau calcul de l'angle, sauf qu'on devrait avoir les mêmes valeurs X et Y que 1 en négatif !
4 2878 1055 69.86 l'angle est de 20° par rapport à X donc 70° par rapport à Y
en résumé, les valeurs lues dans les registres sont incohérentes.
Contrôle à faire:
tu fais tourner lentement ton capteur et tu notes la valeur maxi et la valeur mini lues sur X
même chose pour Y. ça permet de voir le décalage d'offset hard et de voir le gain entre x et y.
je viens de regarder les valeurs que tu as en X.Y, et angle (photos)
si on suppose qu'on fait les calculs à partir de l'axe Y du module
1 670 2043 18.15 ça c'est OK, le calcul de l'angle est correct.
2 -176 -186 238.9 pas possible! les valeurs de X et Y ne peuvent pas passer toutes les 2 en négatif sur 1/4 tour !
3 1986 -1168 120.2 oui c'est OK au niveau calcul de l'angle, sauf qu'on devrait avoir les mêmes valeurs X et Y que 1 en négatif !
4 2878 1055 69.86 l'angle est de 20° par rapport à X donc 70° par rapport à Y
en résumé, les valeurs lues dans les registres sont incohérentes.
Contrôle à faire:
tu fais tourner lentement ton capteur et tu notes la valeur maxi et la valeur mini lues sur X
même chose pour Y. ça permet de voir le décalage d'offset hard et de voir le gain entre x et y.
Boussole Numérique !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
J'ai donc fais tourner tout doucement le capteur :
Valeur Maximum obtenue pour X = 3201 et valeur minimum = -510
Pour Y max = 2026 et Ymin = -1535
J'ai réussis à faire un enregistrement d'un tour complet dans le sens inverse des aiguilles d'une montre ;.
Valeur Maximum obtenue pour X = 3201 et valeur minimum = -510
Pour Y max = 2026 et Ymin = -1535
J'ai réussis à faire un enregistrement d'un tour complet dans le sens inverse des aiguilles d'une montre ;.
Code : Tout sélectionner
magX= 890 magY= 1949 Angle= 24.543
magX= 845 magY= 2010 Angle= 22.801
magX= 861 magY= 1975 Angle= 23.554
magX= 877 magY= 1981 Angle= 23.879
magX= 834 magY= 1981 Angle= 22.831
magX= 861 magY= 2024 Angle= 23.044
magX= 978 magY= 2018 Angle= 25.856
magX= 1131 magY= 2033 Angle= 29.088
magX= 1280 magY= 2074 Angle= 31.681
magX= 1432 magY= 2006 Angle= 35.521
magX= 1572 magY= 2032 Angle= 37.726
magX= 1610 magY= 2019 Angle= 38.569
magX= 1768 magY= 2004 Angle= 41.419
magX= 1847 magY= 1971 Angle= 43.139
magX= 1939 magY= 1919 Angle= 45.297
magX= 1990 magY= 1922 Angle= 45.995
magX= 2097 magY= 1857 Angle= 48.473
magX= 2264 magY= 1777 Angle= 51.871
magX= 2435 magY= 1655 Angle= 55.797
magX= 2514 magY= 1606 Angle= 57.428
magX= 2558 magY= 1559 Angle= 58.639
magX= 2682 magY= 1459 Angle= 61.453
magX= 2698 magY= 1413 Angle= 62.357
magX= 2742 magY= 1317 Angle= 64.344
magX= 2790 magY= 1298 Angle= 65.050
magX= 2941 magY= 1205 Angle= 67.719
magX= 2990 magY= 1006 Angle= 71.404
magX= 3050 magY= 867 Angle= 74.131
magX= 3055 magY= 789 Angle= 75.518
magX= 3070 magY= 653 Angle= 77.991
magX= 3144 magY= 440 Angle= 82.033
magX= 3160 magY= 303 Angle= 84.522
magX= 3168 magY= 116 Angle= 87.902
magX= 3111 magY= 71 Angle= 88.692
magX= 3079 magY= -113 Angle= 92.101
magX= 3075 magY= -210 Angle= 93.906
magX= 2987 magY= -382 Angle= 97.287
magX= 2964 magY= -435 Angle= 98.349
magX= 2921 magY= -604 Angle= 101.68
magX= 2852 magY= -708 Angle= 103.94
magX= 2707 magY= -859 Angle= 107.60
magX= 2629 magY= -971 Angle= 110.27
magX= 2579 magY= -1008 Angle= 111.34
magX= 2515 magY= -1062 Angle= 112.89
magX= 2422 magY= -1129 Angle= 114.99
magX= 2358 magY= -1166 Angle= 116.31
magX= 2244 magY= -1192 Angle= 117.97
magX= 2052 magY= -1331 Angle= 122.96
magX= 1849 magY= -1363 Angle= 126.39
magX= 1705 magY= -1411 Angle= 129.60
magX= 1515 magY= -1373 Angle= 132.18
magX= 1465 magY= -1372 Angle= 133.12
magX= 1315 magY= -1381 Angle= 136.40
magX= 1075 magY= -1342 Angle= 141.30
magX= 973 magY= -1303 Angle= 143.24
magX= 797 magY= -1261 Angle= 147.70
magX= 683 magY= -1179 Angle= 149.91
magX= 559 magY= -1126 Angle= 153.59
magX= 458 magY= -1039 Angle= 156.21
magX= 394 magY= -994 Angle= 158.37
magX= 266 magY= -885 Angle= 163.27
magX= 250 magY= -826 Angle= 163.16
magX= 242 magY= -788 Angle= 162.92
magX= 137 magY= -730 Angle= 169.37
magX= 30 magY= -590 Angle= 177.08
magX= -70 magY= -476 Angle= 188.36
magX= -169 magY= -252 Angle= 213.84
magX= -209 magY= -3 Angle= 269.17
magX= -245 magY= 98 Angle= 291.80
magX= -272 magY= 241 Angle= 311.54
magX= -281 magY= 416 Angle= 325.96
magX= -265 magY= 598 Angle= 336.09
magX= -221 magY= 749 Angle= 343.56
magX= -215 magY= 947 Angle= 347.20
magX= -104 magY= 1082 Angle= 354.50
magX= -83 magY= 1257 Angle= 356.22
magX= 39 magY= 1367 Angle= 1.634
magX= 120 magY= 1514 Angle= 4.531
magX= 229 magY= 1667 Angle= 7.821
magX= 405 magY= 1798 Angle= 12.694
magX= 528 magY= 1903 Angle= 15.507
magX= 706 magY= 1967 Angle= 19.744
magX= 830 magY= 2003 Angle= 22.508
magX= 888 magY= 2034 Angle= 23.585
magX= 829 magY= 1983 Angle= 22.687
magX= 902 magY= 1960 Angle= 24.712
magX= 900 magY= 1972 Angle= 24.531
Boussole Numérique !
Effectivement sacrée galère avec ce capteur ! Tu n'es pas en train de passer une IRM avec ton truc ?!
il y a un énorme pb d'offset sur X et sur Y.
sur X, valeur maxi : 3201 mini -510
sur Y valeur maxi : 2026 mini - 1535
Amplitude X : 3201+ 510 = 3711. valeur moyenne 1855 offset à corriger : - 1345
Amplitude Y : 2026 + 1535 = 3561. valeur moyenne 1780 offset à corriger : - 246
Correction du gain sur X : 3561/3711 = 1.04
Inutile de rentrer ces valeurs dans les registres du capteur. Tu modifies ton programme avant tes calculs d'atan avec :
magX = magX - 1345
magY = (magY - 246)* 1.042
il y a un énorme pb d'offset sur X et sur Y.
sur X, valeur maxi : 3201 mini -510
sur Y valeur maxi : 2026 mini - 1535
Amplitude X : 3201+ 510 = 3711. valeur moyenne 1855 offset à corriger : - 1345
Amplitude Y : 2026 + 1535 = 3561. valeur moyenne 1780 offset à corriger : - 246
Correction du gain sur X : 3561/3711 = 1.04
Inutile de rentrer ces valeurs dans les registres du capteur. Tu modifies ton programme avant tes calculs d'atan avec :
magX = magX - 1345
magY = (magY - 246)* 1.042
Boussole Numérique !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Effectivement sacrée galère avec ce capteur ! Tu n'es pas en train de passer une IRM avec ton truc ?!
Non l'IRM je l'ai passé mercredi lol . ( pour ma cheville ).
![siffleur :sifflotte:](./images/smilies/icon_sifflotte.gif)
C'est incroyable j'ai l'impression que ca fonctionne parfaitement avec ta correction!
Code : Tout sélectionner
c9dof_readMag( &magX, &magY, &magZ );
Delay_10ms();
mikrobus_logWrite( "magX=", _LOG_TEXT );
IntToStr( magX, logText );
mikrobus_logWrite( logText, _LOG_TEXT );
mikrobus_logWrite( " magY=", _LOG_TEXT );
IntToStr( magY, logText );
mikrobus_logWrite( logText, _LOG_TEXT );
magX = magX - 1345;
magY = (magY - 246)* 1.042;
Angle = (atan2(magY, magX) * 180) / Pi;
if (Angle < 0) Angle += 360 ;
mikrobus_logWrite( " Angle= ", _LOG_TEXT );
FloatToStr_FixLen( Angle, logText,6 );
mikrobus_logWrite( logText, _LOG_TEXT );
mikrobus_logWrite( " ", _LOG_LINE );
Delay_ms(200);
Voici un tour complet .
Code : Tout sélectionner
magX= 727 magY= 2021 Angle= 341.51
magX= 766 magY= 2030 Angle= 342.69
magX= 722 magY= 1939 Angle= 340.54
magX= 709 magY= 1970 Angle= 340.49
magX= 732 magY= 1990 Angle= 341.35
magX= 743 magY= 2017 Angle= 341.92
magX= 727 magY= 1968 Angle= 340.99
magX= 874 magY= 2044 Angle= 345.88
magX= 995 magY= 2066 Angle= 349.54
magX= 1094 magY= 2095 Angle= 352.57
magX= 1266 magY= 2109 Angle= 357.66
magX= 1378 magY= 2046 Angle= 1.008
magX= 1289 magY= 2067 Angle= 358.30
magX= 1590 magY= 2008 Angle= 7.600
magX= 1547 magY= 1983 Angle= 6.371
magX= 1923 magY= 1896 Angle= 18.584
magX= 2040 magY= 1931 Angle= 21.604
magX= 2196 magY= 1856 Angle= 26.905
magX= 2533 magY= 1758 Angle= 37.026
magX= 2417 magY= 1665 Angle= 35.953
magX= 2559 magY= 1534 Angle= 42.133
magX= 2653 magY= 1436 Angle= 46.551
magX= 2762 magY= 1210 Angle= 54.680
magX= 2836 magY= 1149 Angle= 57.770
magX= 2926 magY= 1053 Angle= 62.017
magX= 3018 magY= 935 Angle= 66.801
magX= 2997 magY= 801 Angle= 70.716
magX= 3053 magY= 647 Angle= 76.279
magX= 3086 magY= 463 Angle= 82.603
magX= 3144 magY= 185 Angle= 92.005
magX= 3096 magY= 24 Angle= 97.515
magX= 3079 magY= -69 Angle= 100.71
magX= 3071 magY= -292 Angle= 107.97
magX= 2969 magY= -514 Angle= 115.96
magX= 2857 magY= -685 Angle= 122.68
magX= 2650 magY= -861 Angle= 131.46
magX= 2493 magY= -998 Angle= 138.46
magX= 2428 magY= -1107 Angle= 142.45
magX= 2529 magY= -1129 Angle= 140.41
magX= 2169 magY= -1249 Angle= 152.11
magX= 1876 magY= -1302 Angle= 161.77
magX= 1654 magY= -1388 Angle= 169.70
magX= 1463 magY= -1334 Angle= 175.89
magX= 930 magY= -1284 Angle= 194.59
magX= 687 magY= -1161 Angle= 204.17
magX= 689 magY= -1143 Angle= 204.38
magX= 714 magY= -1080 Angle= 204.55
magX= 354 magY= -932 Angle= 218.92
magX= 286 magY= -906 Angle= 221.42
magX= 86 magY= -663 Angle= 233.05
magX= -79 magY= -544 Angle= 239.97
magX= -95 magY= -377 Angle= 245.73
magX= -214 magY= -204 Angle= 253.29
magX= -183 magY= -154 Angle= 254.77
magX= -314 magY= 237 Angle= 269.68
magX= -310 magY= 383 Angle= 274.90
magX= -339 magY= 577 Angle= 281.54
magX= -309 magY= 810 Angle= 289.53
magX= -482 magY= 981 Angle= 292.71
magX= -141 magY= 1194 Angle= 303.59
magX= -63 magY= 1388 Angle= 310.17
magX= 107 magY= 1544 Angle= 317.52
magX= 7 magY= 1639 Angle= 317.32
magX= 383 magY= 1785 Angle= 329.03
magX= 258 magY= 1884 Angle= 327.49
magX= 632 magY= 1918 Angle= 337.74
magX= 699 magY= 1934 Angle= 339.82
magX= 773 magY= 2003 Angle= 342.64
magX= 860 magY= 1997 Angle= 345.10
magX= 864 magY= 2034 Angle= 345.52
magX= 859 magY= 1991 Angle= 345.03
magX= 883 magY= 2005 Angle= 345.84
magX= 852 magY= 1979 Angle= 344.72
Et ce qui est rassurant c'est que les valeurs correspondent !
A savoir le module bien en haut j'ai environ 340°
1/4 de tour a gauche , j'obtiens 70° (340°+ 90° = 70°)
un demi tour j'ai environ 160° (340° - 180° = 160°)
et 1/4 de tour à droite j'ai 255° (340° - 90°= 250°)
Mais alors comment expliqué cette correction ?
Boussole Numérique !
Mais alors comment expliqué cette correction ?
La correction s'explique par le fait que l'on compense par un décalage du zéro car le capteur a visiblement un problème! Je n'ai jamais vu une telle correction d'offset !
l'erreur de 4% sur le gain, elle, n'était pas trop critique.
Si tu veux t'affranchir de la compensation d'offset du soft, tu peux rentrer ces valeurs dans les registres du capteur:
la correction X dans 05h (lsb) et 06h (msb) avec un codage en complément à 2 !
idem sur Y dans 07h et 08h
il n'y a pas de registre de compensation de gain apparemment. Donc il faut le faire en soft.
Pour le GPS avec boussole de Paul, à priori ton programme devrait être le même, sans offset à priori.
La puce est un HMC5883L avec Xmsb en 03h, Xlsb en 04h Ymsb en 07h et Ylsb en 08h
Attention toutefois que l'idéal est de faire ces compensations d'offset quand le module est dans son environnement définitif.
Mais ce n'est pas ça encore, car après avoir appliqué l'offset sur X en particulier, tu derais avoir beaucoup plus de valeurs négatives...
Boussole Numérique !
-
Jérémy
Administrateur du site- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
PieM a écrit :Source du message Mais ce n'est pas ça encore, car après avoir appliqué l'offset sur X en particulier, tu derais avoir beaucoup plus de valeurs négatives...
Aprés ta remarque j'ai verifié mon programme ! en fait les valeurs affichées sont celles avant le rajout de l'OFFSET . Voici les valeurs apres OFFSET.
Code : Tout sélectionner
magX= -510 magY= 1821 magZ= -3104 Angle= 344.35
magX= -515 magY= 1829 magZ= -3138 Angle= 344.27
magX= -497 magY= 1818 magZ= -3115 Angle= 344.71
magX= -509 magY= 1825 magZ= -3103 Angle= 344.41
magX= -499 magY= 1833 magZ= -3096 Angle= 344.77
magX= -596 magY= 1836 magZ= -3104 Angle= 342.01
magX= -541 magY= 1844 magZ= -3077 Angle= 343.64
magX= -440 magY= 1909 magZ= -3177 Angle= 347.02
magX= -255 magY= 1942 magZ= -3120 Angle= 352.51
magX= -90 magY= 1946 magZ= -3149 Angle= 357.35
magX= 29 magY= 1920 magZ= -3178 Angle= 8.6533
magX= 74 magY= 1940 magZ= -3181 Angle= 2.184
magX= 136 magY= 1909 magZ= -3161 Angle= 4.074
magX= 284 magY= 1928 magZ= -3148 Angle= 8.379
magX= 405 magY= 1861 magZ= -3115 Angle= 12.277
magX= 584 magY= 1854 magZ= -3088 Angle= 17.484
magX= 699 magY= 1780 magZ= -3137 Angle= 21.439
magX= 844 magY= 1672 magZ= -3126 Angle= 26.783
magX= 969 magY= 1616 magZ= -3327 Angle= 30.948
magX= 1101 magY= 1539 magZ= -2848 Angle= 35.579
magX= 1295 magY= 1390 magZ= -3087 Angle= 42.973
magX= 1445 magY= 1292 magZ= -3294 Angle= 48.199
magX= 1532 magY= 1121 magZ= -2852 Angle= 53.806
magX= 1616 magY= 914 magZ= -3279 Angle= 60.507
magX= 1703 magY= 803 magZ= -3007 Angle= 64.755
magX= 1727 magY= 643 magZ= -3035 Angle= 69.578
magX= 1841 magY= 415 magZ= -3015 Angle= 77.296
magX= 1863 magY= 281 magZ= -3032 Angle= 81.422
magX= 1827 magY= 67 magZ= -3012 Angle= 87.899
magX= 1834 magY= -105 magZ= -3071 Angle= 93.276
magX= 1827 magY= -306 magZ= -2821 Angle= 99.508
magX= 1817 magY= -433 magZ= -3311 Angle= 103.40
magX= 1742 magY= -576 magZ= -2838 Angle= 108.29
magX= 1639 magY= -814 magZ= -3306 Angle= 116.41
magX= 1537 magY= -963 magZ= -3010 Angle= 122.06
magX= 1456 magY= -1104 magZ= -3020 Angle= 127.17
magX= 1371 magY= -1218 magZ= -2836 Angle= 131.61
magX= 1248 magY= -1346 magZ= -3307 Angle= 137.16
magX= 1133 magY= -1424 magZ= -3020 Angle= 141.49
magX= 1066 magY= -1486 magZ= -3058 Angle= 144.34
magX= 950 magY= -1560 magZ= -3061 Angle= 148.65
magX= 817 magY= -1607 magZ= -2818 Angle= 153.05
magX= 666 magY= -1652 magZ= -3117 Angle= 158.04
magX= 501 magY= -1666 magZ= -3322 Angle= 163.26
magX= 289 magY= -1691 magZ= -3060 Angle= 170.30
magX= 156 magY= -1684 magZ= -3047 Angle= 174.70
magX= -42 magY= -1683 magZ= -3027 Angle= 181.42
magX= -262 magY= -1631 magZ= -3038 Angle= 189.12
magX= -433 magY= -1583 magZ= -3068 Angle= 195.29
magX= -638 magY= -1457 magZ= -2834 Angle= 203.64
magX= -789 magY= -1367 magZ= -3313 Angle= 209.99
magX= -903 magY= -1298 magZ= -2847 Angle= 214.82
magX= -1087 magY= -1098 magZ= -3082 Angle= 224.71
magX= -1264 magY= -922 magZ= -3122 Angle= 233.89
magX= -1368 magY= -692 magZ= -3092 Angle= 243.16
magX= -1463 magY= -473 magZ= -3309 Angle= 252.08
magX= -1513 magY= -265 magZ= -2847 Angle= 260.06
magX= -1384 magY= 25 magZ= -3197 Angle= 271.03
magX= -1616 magY= 226 magZ= -3150 Angle= 277.96
magX= -1591 magY= 519 magZ= -3168 Angle= 288.06
magX= -1488 magY= 798 magZ= -3127 Angle= 298.20
magX= -1442 magY= 1030 magZ= -3184 Angle= 305.53
magX= -1282 magY= 1259 magZ= -3171 Angle= 314.48
magX= -1077 magY= 1525 magZ= -3185 Angle= 324.76
magX= -878 magY= 1630 magZ= -3120 Angle= 331.69
magX= -787 magY= 1702 magZ= -3180 Angle= 335.18
magX= -654 magY= 1822 magZ= -3184 Angle= 340.25
magX= -519 magY= 1837 magZ= -3092 Angle= 344.22
magX= -505 magY= 1845 magZ= -3175 Angle= 344.69
magX= -480 magY= 1871 magZ= -3124 Angle= 345.61
magX= -453 magY= 1878 magZ= -3106 Angle= 346.43
magX= -476 magY= 1634 magZ= -3317 Angle= 343.75
magX= -486 magY= 1849 magZ= -2828 Angle= 345.27
Attention toutefois que l'idéal est de faire ces compensations d'offset quand le module est dans son environnement définitif.
Ok je prends note car effectivement la finalité c'est de le mettre sur le robot dans un environnement bien différent !
Du coup j'ai rajouter l'angle Z . L'angle Z définit une inclinaison ? Mais une seule ? Puis je utiliser cette valeur pour signaler que le robot est trop incliné pour donner un cap par exemple ? Cette inclinaison n'est valable apparemment que de l'avant a l’arrière.
Je voulais testé de modifier le registre de l'offset du X comme tu me l'a précisé, mais dans la DS ( lien) page 38 l'adresse 0x05 correspond a ACT_DUR et à la page 40 en voit bien OFFSET_X_REG_L_M ??? bizarre !!
Croyez vous qu'il soit possible de calculer la vitesse du robot qui roule avec l’accéléromètre ?
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 83 invités