how do I calibrate an accelerometer?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
rafael gonzalez
el 1 de Oct. de 2012
Respondida: Jean Lambert Kubwimana
el 28 de Feb. de 2019
I am trying to calibrate a sensor. could somebody please help me find the values of theta xy, yx, yz, zx. or explain how to derive it. I have converted the raw values to g. you will see in the plot that the sqrt of x^2 + y^2 +z^2 is deviating quite a bit at some points.
clc
clear all
close all
% min max value
Mx_min = 27681;
Mx_max = 38526;
My_min = 27361;
My_max = 38388;
Mz_min = 27428;
Mz_max = 38539;
% scale value
Sx = 1/((Mx_max - Mx_min)/2);
Sy = 1/((My_max - My_min)/2);
Sz = 1/((Mz_max - Mz_min)/2);
% offset value
Bx = ((Mx_min * Sx) + (Mx_max * Sx)) /2
By = ((My_min * Sy) + (My_max * Sy)) /2
Bz = ((Mz_min * Sz) + (Mz_max * Sz)) /2
% theta
xy = 0;
yx = 0;
yz = 0;
zx = 0;
xz = (Mz_max - Mz_min) / (Mx_max - Mx_min);
zy = (Mz_max - Mz_min) / (My_max - My_min);
[V]=[-Sx, 0 , 0; 0, Sy, 0; 0, 0, -Sz;];
[B]=[Bx;-By;Bz;];
A = [27681,32967,32466;28803,29427,32348;32152,27448,32091;36084,28375,31847;38375,31952,31716;37481,36112,31824;34044,38281,32093;30030,37343,32380;27790,33916,32485;31414,30822,28580;30261,30797,28707;32275,29657,28526;34751,30315,28352;35988,32417,28280;35510,34827,28373;33417,36208,28565;31008,35662,28729;29654,33615,28772;33041,33380,27479;33171,33336,27450;32839,33538,27479;32427,33469,27512;32103,33124,27532;32189,32623,27515;32606,32347,27477;33073,32474,27440;33256,32886,27428;35032,35777,29465;36054,35727,29232;33385,37146,29464;30389,36294,29679;28796,33732,29729;29296,30551,29713;31775,28755,29481;34983,29252,29241;37012,32059,29171;36392,36286,33219;37360,36478,33094;33715,38385,33367;29929,37275,33607;27804,33893,33684;28453,29919,33550;31632,27487,33217;35787,28044,32948;38466,31662,32885;34996,35487,37249;36188,34945,37140;33946,36334,37263;31298,35673,37381;29830,33456,37373;30245,30704,37223;32341,29091,37017;35116,29449,36870;36925,31813,36858;33453,32468,38511;33388,32320,38508;33618,32341,38492;33759,32530,38492;33611,32763,38517;33481,32801,38528;33356,32725,38533;33306,32609,38529;33214,32506,38527;31528,30272,36910;30466,30074,37006;32845,28810,36800;35646,29586,36661;37181,32143,36666;36524,35016,36832;33996,36569,37052;31150,35837,37206;29603,33356,37206;30650,29510,33291;28830,29357,33457;32223,27361,33172;36213,28316,32914;38526,31943,32879;37608,36153,33034;34161,38334,33230;30084,37397,33521;27806,33924,33656;27682,32965,32471;28803,29437,32315;32156,27455,32052;36094,28393,31809;38381,31998,31710;37464,36140,31845;34028,38293,32145;30013,37335,32420;27787,33896,32489;31398,30881,28546;30309,30803,28674;32306,29669,28510;34743,30320,28348;36005,32390,28294;35521,34817,28376;33410,36198,28560;30995,35647,28729;29642,33580,28781;33047,33348,27474;33179,33293,27448;32852,33502,27476;32439,33437,27506;32115,33099,27534;32200,32601,27515;32605,32306,27483;33079,32427,27446;33269,32842,27430;35105,35649,29371;36080,35711,29243;33388,37150,29473;30381,36294,29692;28779,33705,29747;29354,30565,29641;31807,28792,29427;34965,29291,29199;36952,32052,29113;36165,36416,33224;37351,36489,33081;33696,38387,33387;29918,37262,33621;27790,33820,33685;28518,29810,33531;31655,27484,33273;35807,28054,33011;38470,31666,32913;35348,35057,37134;36271,35033,37038;33970,36384,37218;31348,35736,37367;29889,33550,37406;30290,30826,37313;32365,29226,37146;35098,29574,36988;36887,31894,36919;33480,32607,38519;33392,32407,38517;33626,32442,38505;33772,32630,38499;33618,32871,38519;33487,32910,38528;33360,32836,38536;33312,32722,38539;33203,32624,38537;31652,30322,36960;30462,30160,37065;32892,28893,36892;35737,29743,36746;37152,32266,36719;36503,35102,36807;33982,36645,36989;31165,35913,37160;29632,33438,37226;30546,29501,33354;28835,29358,33480;32234,27364,33268;36219,28320,33033;38526,31952,32909;37607,36154,33005;34122,38339,33285;30050,37368,33557;27803,33903,33663;27682,32953,32460;28814,29418,32317;32162,27450,32065;36094,28388,31824;38374,31972,31708;37470,36126,31827;34036,38283,32099;30023,37338,32374;27793,33913,32476;31312,30856,28588;30282,30782,28701;32289,29654,28525;34753,30311,28356;36028,32400,28309;35530,34851,28398;33421,36226,28585;30985,35676,28755;29615,33592,28810;33050,33369,27479;33177,33294,27448;32853,33501,27477;32440,33440,27509;32109,33097,27534;32187,32591,27518;32605,32311,27482;33077,32431,27446;33258,32846,27432;35177,35623,29398;36068,35667,29203;33394,37109,29425;30399,36268,29645;28800,33710,29724;29294,30524,29738;31789,28713,29529;35004,29219,29291;37025,32038,29194;36007,36517,33238;37365,36472,33076;33720,38388,33338;29941,37284,33584;27803,33889,33692;28509,29834,33578;31661,27480,33286;35819,28059,33018;38469,31673,32921;35488,34989,37114;36241,35098,37025;33973,36412,37199;31349,35761,37354;29835,33581,37363;30244,30819,37280;32350,29196,37116;35118,29546,36956;36936,31903,36873;33462,32625,38523;33401,32467,38521;33632,32486,38506;33773,32673,38501;33624,32904,38519;33495,32948,38528;33366,32874,38538;33318,32759,38535;33228,32656,38537;]
A = transpose(A);
for i=1:225
NEW(:,i) = (V * [ A(1,i); A(2,i); A(3,i);]) + B;
end
NEW = transpose(NEW);
for i=1:225
NEW(i,4) = sqrt( NEW(i,1)^2 + NEW(i,2)^2 + NEW(i,3)^2);
ROT(i,1) = atan2(NEW(i,2),NEW(i,1));
ROT(i,2) = radtodeg(-ROT(i,1));
INC(i,1) = atan(sqrt(NEW(i,1)^2 + NEW(i,2)^2 )/NEW(i,3));
INC(i,2) = radtodeg(INC(i,1));
if INC(i,2) < 0
INC(i,2) = INC(i,2) + 180;
else
INC(i,2) = INC(i,2);
end
if ROT(i,2) < 0
ROT(i,2) = ROT(i,2) + 360;
else
ROT(i,2) = ROT(i,2);
end
end
plot(NEW,'DisplayName','NEW','YDataSource','NEW');figure(gcf);
hold on
legend('X','Y','Z','sqrt(X^2 + Y^2 + Z^2)');
3 comentarios
Rolfe Dlugy-Hegwer
el 1 de Oct. de 2012
Editada: Rolfe Dlugy-Hegwer
el 1 de Oct. de 2012
What is the application? For example:
- Working with normal gravity to determine which way is up.
- Measuring acceleration under more extreme conditions.
Do you know, based on the datasheet, if the accelerometer response is sufficiently linear for your requirements? Or, does your calibration procedure need to correct for non-linearity?
Rolfe Dlugy-Hegwer
el 2 de Oct. de 2012
Q: Rolfe: Have you seen "MEMS Accelerometer Calibration using Gauss Newton Method" on File Exchange?
A: Rafael: I have tried the program and using my measured data. I keep getting problems with the matrix saying its close to singularity. and the result does not converge.
Respuestas (1)
Jean Lambert Kubwimana
el 28 de Feb. de 2019
Did you find any answer to this question? Your code is confusing and hard to follow. For example, after you transpose NEW, your the rest of the code is not being used in the calculation of x,y, and z! If you have found the answer please update us!
0 comentarios
Ver también
Categorías
Más información sobre Multicore Processor Targets en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!