From 27d2bd82c873ef1f8b25356f365e32503c22d527 Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Tue, 25 Nov 2014 11:20:32 +0530 Subject: [PATCH 01/16] Configuring proxi test file by removing redundancies and making compatible with IIO interface support Change-Id: I8a38fcad95460b09cb8f78eb07d61f5521b16541 --- test/src/proxi.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/src/proxi.c b/test/src/proxi.c index 1bbd23d..7ed2d64 100644 --- a/test/src/proxi.c +++ b/test/src/proxi.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include static GMainLoop *mainloop; @@ -86,10 +86,7 @@ int main(int argc,char **argv) start_handle = sf_start(handle,0); - if (start_handle >= 0) { - printf("Success start \n"); - } - else { + if (start_handle < 0) { printf("Error\n\n\n\n"); sf_unregister_event(handle, event); sf_disconnect(handle); @@ -103,8 +100,10 @@ int main(int argc,char **argv) stop_handle = sf_stop(handle); - if (stop_handle >= 0) - printf("Success stop \n"); + if (stop_handle < 0) { + printf("Failed to stop proximity sensor\n\n"); + return -1; + } sf_disconnect(handle); -- 2.7.4 From 89abe0c89149c0c9b2da843c83c6bec7700952cf Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Wed, 26 Nov 2014 12:03:13 +0530 Subject: [PATCH 02/16] Fixing build issues in virtual sensors test files Change-Id: Ic009931a0bac60f27cd832e089097c034e5721af --- test/src/gravity.c | 2 +- test/src/linear_acceleration.c | 2 +- test/src/orientation.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/src/gravity.c b/test/src/gravity.c index 48081ce..a055013 100755 --- a/test/src/gravity.c +++ b/test/src/gravity.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff --git a/test/src/linear_acceleration.c b/test/src/linear_acceleration.c index ed36928..5e157e5 100755 --- a/test/src/linear_acceleration.c +++ b/test/src/linear_acceleration.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff --git a/test/src/orientation.c b/test/src/orientation.c index ca9b083..1886ad1 100755 --- a/test/src/orientation.c +++ b/test/src/orientation.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include -- 2.7.4 From 25dac29563085e84c94308bbe436a3a02e03f6c8 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 2 Dec 2014 14:20:34 +0530 Subject: [PATCH 03/16] Updating preprocessing and aiding system documentation - Added new equations for preprocessing and aiding system - Changed formating for documentation. - Updated diagrams for orientation and gravity. Change-Id: I913cd22de5fa30ee8c4a91cc7a62a7ff93f0588d --- .../documentation/diagram/device_orientation.png | Bin 35185 -> 37742 bytes .../diagram/orientation_effect_on_gravity.png | Bin 30634 -> 37993 bytes .../design/documentation/equation/equation_10.png | Bin 0 -> 2596 bytes .../design/documentation/equation/equation_11.png | Bin 0 -> 3153 bytes .../design/documentation/equation/equation_6.png | Bin 0 -> 3323 bytes .../design/documentation/equation/equation_7.png | Bin 0 -> 2114 bytes .../design/documentation/equation/equation_8.png | Bin 0 -> 2423 bytes .../design/documentation/equation/equation_9.png | Bin 0 -> 2643 bytes .../design/documentation/sensor_fusion.htm | 91 +++++++++++++-------- 9 files changed, 58 insertions(+), 33 deletions(-) create mode 100755 src/sensor_fusion/design/documentation/equation/equation_10.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_11.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_6.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_7.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_8.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_9.png diff --git a/src/sensor_fusion/design/documentation/diagram/device_orientation.png b/src/sensor_fusion/design/documentation/diagram/device_orientation.png index 6bc621a8f90b5ed1b6155913e6af375a6c36ab4b..f6520618dbd3a927ee54b5dff7753357a7fcd34b 100755 GIT binary patch literal 37742 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 DV{}5$ literal 35185 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⪙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ΠaOX0X%%+Cen+|o}2;#0$g0z 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

    Z0 zk^`cIE$%jlHf8k)J7U+LHs5iG<-?NI@HSjQ&NA|@0hdtI9rc_?%2JfL|F=#E58wpD z&0npf^18|0DhMnks(y6gMdV0P7i_RD3=j>ZPj> zZ&Nr?Cx2+zpf|4_HQ+|i^xK>X4sT!YBfltR%p4HZoOpm5z_4UkSYTzPynHR|wbLc| ziuM|to;$PHDFYaT-n*ihi#6I(_w|l&Yg+G|As1&SA=42QW~}LWaN4OWw?2o2<3_CU3M>t;RYTAXG=Q(z1gfznmDw&i zvQm`;%3J-XMaM2U!8ZQYPJ8h3O!bC&h2isbEe!o&)k-)LfyhjxgnBRgt0S%}xkcxI z%kiAzjBCQc#*ajE5Q@}>9CR}69R?RTf1N3Zo1ATG z$b8*L{lz178XVZL0s!C>4eSm=u#bWo^Ktk44pP+PIk#;=OkL2Ebe&4w%w!Jsh33B9 z3V)s^{A6y|UhP8`EM0M`d}?zMtde|fEqpTn|8x`9TM+Ok8lUWz^A+jrwonN89SsQa J=lBt*{{h$#OTqvE literal 30634 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 &O^fX2g)QVZp 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_6.png b/src/sensor_fusion/design/documentation/equation/equation_6.png new file mode 100755 index 0000000000000000000000000000000000000000..cadeeed008a317ffe649a38e41949c630479bb19 GIT binary patch literal 3323 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D43J4gK~#8N?VZ1C zBRLz#{cpHVn=ai|uH2;AW}6gKxY=Th7p@p^@xm1gZ!r)!I5;>km=^*EVPN4{SOUYs zOJFg$IJm;NJ3?@?#bI28WifdrJ(?NK=+Unk$?GKgbg?HINzYf`N2Ae<2al0RBoc}A zASRMXBoc}AA|{eZBoc}AA|{eZBoc}AA|{eZBoc}AA|?_~?AFC~mYmPld;UR_FGYHh z&WiO8|2h&8*shD;vt%+`KkyG)Y>RZv)WrXe95*k(9MD8!((#L6zb*dFM(dV;pk%*W z=jrGyxxC$Il(63{=jmveTrPA+9S(!IBYv?qi`^r~sX8B*E2=@2+WH_D{_ZIcs@0ORN!Fjg)hkx*W(1@Ef`HxvT<~>AWkYv|L z42YYMzN`-$jMABpP>})kUW^ev{RbpQ;iN)qAeMZZWLHSZ9V%dB7W=>R$=PUnW7m>@ zmf87Wbh$j(Ocpf07=@GyjiylY<90QhNG12FfZi;0iDAEVE8t_H(l*@HU}EGA@}H-Lz)8- z+eI?_ORihlz0y3JCZ2OuW5q%N2wFH%#(n;FNF1usYg9ld zcHYOvFgo~I$tuBtR^(ho2ZrPb2SY7x*38!6{8FSpG^$G7gqZtewi0`e9CqH<$60p` zC%KT{*dT8XwvbX`!?+bq8mz`tpmzn7X2D8UnIlX}|-X_Mme-Z!s<|w z_(i-_05=OrWA3V8KHK|p(113{;j#1O^+5|)$lf85JV|q)`QQg+q|?ub$}B=*c^8{c zREb2RV>D^|B52_R7MQ+MHmGFVWSN>f)EqDE5a`5hkw~z)p)XLsXcAZ|=0xJF0+?CA z*}L@Z0jx)#2&fG~3n!rdU@;bI@Zo&K<^Z!vIhyRE(|D7HngCM0GLdL>%m-M| zX<)F+5fEIj%Mk`L?^CM{8b!ec(N$!9(ViEU?`dZ>m#r$Gy+JNVC@>ppuRsa}mP$F0 zq-CoLZxukyLhX#u?G%M?!T}*yx1iz5B!^YN+qGlR!ttg#uVJ{D0|c6d6Hm;+%|Q`O zu0Ug}*}uzDl>1a+Y^y) z1T7r##NGOaPRA{u{HTyemi$Qt^rw0lhBXI8G!d&T<=w6cbXt47n-U2=sjt@4`z=!j zEu0jDcSN}q?sns(gI3hudfbVGAaxz6M^Z?6W5e@}6ImF6r6M7<*KY-!5(zt4J?YW@ zuLtzyqqc&3jXOaLFJs!80iYima54w>m8Sgfm`GYD#Wj!jf44-!jmBk0j}f%+vK%QS z-Gu0*6*vX@6~kZ+1c-7 z`Y=`;UELI-QmDn5poKfRrydt`fbuoN)@%;Fz~zJwWKI9Ko7VA)M5`@pf)-8+VuM_Y znL5Tg*nc%TS~9x|lU7XD5C~PnNkcAhVbx7gj9zpoIzoG+U4kUm;5xi$bxS)&ek&lE z1!xts4}9DT7!T-)wvD*dL212nThPLJpDQHoHaBuG2jkc`9?%y&QK2eg?Lzxs>K{lX zMjf|$1Y&8eT@VBk8y|(MV}_r%oA+UwR)!o8RRxSp4-UH9E@XMIsgjS{fjG1Fp|<($2KcW7p~9RtJbVOvKV+GQR|rBdad`vRohzX z*tc%+!;7s11@OK=#+yaq<(^c&jR!iK@Fw4UV+VjBP&6I#w_R5Iy99~DYq4_Gbfl!`NAjvoEI|0coD6DR>Dq!r;&mT66 zUy&EJ8fGm%P?`g`U7>te=&UWKo-IoK55!yMpY6!E+}Ry;YnR=#(0fcntTQ!koc zndc3>e>^4<)=RR|xLc0Xd_`psFX)tSB-6$sl_?X6O2-U7wgLK{*W1PQTj51jclqSU z{O(WIaUWL2yJY%ddHuEyo>GVuec|7hm*?4M;$g!>V`P7D8-PvqEl*taSE@*2V4h zWL$T|w`Fz$9tzJfpc_Kakxu}vOQ$aP9pM|XX(TXZ9{^O`^hLH;8Em=*RIl>o4hztC zx-Ax0llmP~-!}P=lYF&eLb_RfoF?yzPgyu6ZOG=}Kamh|DqfM&aLaKzmmk$(jn%#)MWthVAZGGz zD7Ldj`Mk6pV$P>ME4(<2U4JPbhqeWTqI#^FjeIl_(z83gepUPOyWl7?pI6|54B5!! zCsHPYOT_|~MU+p-D`yh!+HjU%N1{1AFLO}l0|WFjZiH^ptP@H9X3+dS7-h>=zkMmP z|K$9=+?~10lM@y#+6BUUE6JZfPvKguJ23rG2?e%zs$M|@BD36h4zo+s+iZez0PA5o zILVfMM4=ukZ$rMa*UsfIqPIT@>?-%KO~I~@y< zD85efn^|&^E&qh6!RjubOyqlveV}uV;b4>`ue?6{20|%al@1l*_6hmc;z!UpyC?Ls z%y!~-giJY4)9cT4&T_lX-_V8W)rzi<^V^;WBal?ga9iPnjot@t{NRm)S!|E=H`}8* zJU4S7*IU>Qjy4bL`MdIm>~N$+LNV!B1nvd#;ZZ*5i{E4H1>XwQUSsXYCQs<(S)|(U zLDXsav&>HugScIRMeuTi99=*oGtgkyJz9cD#SB|uX&~$A zgv|~Pv>Y6H(nP7eG-AZRKS!QO$UN>mE$*36{7+;e&xk0Mmqv{E5pmp!1TKx~p6icK ze@!3~k|>pzMvV9|@l=+!B9TZWa-_sW5{X12ksdrg{vQY95#WG`#0mfa002ovPDHLk FV1nE+J3#;d literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_7.png b/src/sensor_fusion/design/documentation/equation/equation_7.png new file mode 100755 index 0000000000000000000000000000000000000000..a2f76b2c60a2fbf8125ac621b688c8025e5f472c GIT binary patch literal 2114 zcmV-I2)*}-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2iHkNK~#8N?VZ1C z<46?8^>3(7n=YLzRchR%*~WzmH(P9Ru!X=yV2kSnhJ%HJ1w#mIwFnlrIRfIEZ4BzR zFzS{gxLJ8BwZ(ee+tIK*&@x3lvzc->(8QOo&9}8tdr^W{T!=-?6R8T!tJH~p&X`P0KPzG-pVL36Tm zfMK4Gb#fd0ex2NBe=10m&(mwIr4`Wll83wSjcr}{(U0svTYg0Tg_R*KPBjb8O;is{ zIq#xY>hLoThL$sp*L~5{^e!CRmhDF!Rt;FzokVx7I_CAu znYs0Lri+=ocS+4jzlY;8hUp(dPu$nDMIO_x zBA+a=f<1{=WK0js=$+FdCR6zm5z~!4|Bch#mkbk4ZI)1y*xb%Ag2$aM>7>Nqq?hfX;Lte~`p_Z2*lM_@8cs$17)bsOGnU z?@Gf}6&Q6IoS%U%w_952Ie~@6WibB=x^JrQ=q=2Y^rdJ9*|Ba(>H4h;|yXSH9Wq}6zH20kq4jpML%8s(+5Ah@j7e4F z1fph1G_69O$!P(G=LQ%06^Mn!Z?16Z$~A-zdFrMOrW(5bHuKIcdt7%XkX?0b<9%$N z0}RtEXl3813Bq#E>h=P5q%T|dCAh%BOhQ**fAKn zUog2RZ)9fydOqOBV1}xTFHxm#@-YDvp*o#lv<%AJNhzO}JCbX&MG4OVhUppY0@Hee zi$FWl%2&;oK-f6S49_&S&48<7sZvM?+pVao#x4q*q0k+*+5&A-J=n-*IxP+`&zKkN z5Fk_A6gt@8oH|@CcPIISQshWBf0}SubAVxvo|c9n47Qfw0-B3ge2Fm2(RPnTXTTan zYX&HwWaK1;n}g=I-K-<3sFSYM%?&&QpqSg|A5c}z0%UEGhLuN$%OSZtxsAVcbtD3w z0}RtE^k$MH3{8^Y0veY!C10`$8?(Q=`4T8aE#9>LKibSkRW;W*T{EyYWefMJBh^PH zI*7Zr2n>s+YaK3^L+(V-(UI^RV3@wq#^}IUWC<>yF_%#ECHUK}I>kK6V;r2}K`&fp zhpNCOvm$x;8Ggp?R(uAao|$Q^Q==pJFLn3!s3Z8u1a_-TDHzYYe&&V$WQR&MFUe9{g08-V=K#a>j5dNG&XFd#fcCzm{ zTE4zcwT@8z>c%t*u7HNP5koP8ZKpx`x)h;T8uPdeU#oAh=Jq$PSg~y7-n9W*j;XCA zF7BO}aBy>gVUC_g#Xu`lB)9}khPLq~)r1Tp^CeiLJ{+c;I6@MzeKbfOBsSD3b!kB3 z=(HHVUqb%0QmMVvm`XSCpi=RrMGzVjX`D_po*?CU_TG68FihWQ465J+Rf4NU@ywUd zkE?5jN(NlAL#lB+i@pSyQm;NO3PsM!I&xlcQBrYis#7TkjiGnf*nBte1tIl8r(RSv z6kF(hh;FBz7-{R=o0Wb#q>Kenpf&5w<`e3a9SPCJo%DMS;E;+7y!5PKm^}lQs99JD zOHn4cG6U3F4fv8wFKXxIFHI_%Jz6H1`uq9v9__!F>&G{@Xx2fLKe39+BGA_f$b;5x zta`tk|2erf7u;V#dKXQESk+q#KNNy)7Tbd@%-?TF2f}; zzwfg-h^QiSB!rH8dDU&5R!U}Z`@6qce+a5a=gtnEf?`Hiia$q^eJA=AyDbH#Hu zHc$FR$W)BVW)x1))tN&=T+P^!Y=Hs=VO)FHEVbullN*^M0ZKmU==kJKEY`mibsNZShj+l?t-Z|Ylz%Va~5Sf9w zMMyV*s~Gu`a+F7L;;!*s`#M*P*|_buD=2KwzNKS0pd<{P~qC&6DyyOq7+ehI@c48zo5U&1g9 s!|V$C5{6+IW>?skFbu;myYck&KVL_RrUySY%m4rY07*qoM6N<$g0iCcVE_OC literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_8.png b/src/sensor_fusion/design/documentation/equation/equation_8.png new file mode 100755 index 0000000000000000000000000000000000000000..cecb2a64ab5c401fee95375265da71170eb47255 GIT binary patch literal 2423 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_9.png b/src/sensor_fusion/design/documentation/equation/equation_9.png new file mode 100755 index 0000000000000000000000000000000000000000..ac27db627cd6c805fe264a0b22291cbcde426fd8 GIT binary patch literal 2643 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 B5C#AM literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index 0ccfb0e..eb31730 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -1,16 +1,17 @@ Sensor Fusion for Tizen Sensor Framework -

    Introduction

    +

    Sensor Fusion for Tizen Sensor Framework

    + +

    Introduction

    Sensor Fusion is the process of combining the accelerometer, -gyroscope, geo-magnetic sensor, GPS data and barometer in order to generate -accurate virtual sensor outputs such as Orientation, Gravity, Linear -Acceleration, Altitude, etc. Sensor Fusion is used for extracting -individual virtual sensor components from composite sensor data and/or -combining multiple sensor data to create new sensor component data while -compensating for individual sensor errors. Ideally the following errors would -have to be corrected during sensor fusion:-

    +gyroscope and geo-magnetic sensor in order to generate accurate virtual sensor +outputs such as Orientation, Gravity, Linear Acceleration, etc. Sensor Fusion +is used for extracting individual virtual sensor components from composite +sensor data and/or combining multiple sensor data to create new sensor component +data while compensating for individual sensor errors. Ideally the following +errors would have to be corrected during sensor fusion:-

            - Bias: Any non-zero sensor output when the input is zero

    @@ -30,7 +31,7 @@ mechanical lock-in

            - Quantization error: inherent in all digitized systems

    -

    Sensors Used for Sensor Fusion

    +

    Sensors Used for Sensor Fusion

    Accelerometer Sensor :- Accelerometer data is a combination of linear acceleration and gravity components. Applications would be interested in using @@ -51,18 +52,7 @@ along Z axis to produce correct yaw measurement. Geo-Magnetic sensor along with GPS latitude-longitude measurements could be used to accurately estimate heading of the device.

    -

    Barometer Sensor :- Measures atmospheric pressure. Height of the device from -sea level could be measured based on change in atmospheric pressure at that height. -Sensor Fusion could also be used to combine the altitude from the GPS data with -height measured from the Barometer measurements and produce corrected altitude -measurements.

    - -

    GPS Data :- Provides exact position in terms of latitude, longitude coordinates -and altitude for the phone. Can be used along with barometer for producing -corrected altitude measurements. Could be used along with Geo-magnetic sensor -to determine the heading of a device.

    - -

    Orientation Estimation

    +

    Orientation Estimation

    @@ -73,7 +63,6 @@ to determine the heading of a device.

    -
    +

    Preprocessing of Sensor Data

    +
    @@ -91,7 +82,7 @@ Estimation.
    - +
    @@ -113,14 +104,48 @@ Estimation.
    -

    Driving System

    +
    +
    + +
    +
    + + +

    Orientation Computation Based on Aiding System

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + -

    The gyroscope output data consists for angular rates for pitch, roll and yaw. -Gyroscope angular rates are corrected for bias (both static bias and bias correction -from Kalman filter) and noise using low pass filter. The Gyroscope angular rates are -converted to Quaternions after scaling.

    +

    Driving System

    -

    Aiding System

    The accelerometer and geomagnetic sensor data are corrected for noise and compensated for static bias. Accelerometer is used to compute @@ -128,7 +153,7 @@ tilt (pitch and roll). The geomagnetic sensor along with the computed tilt data is used compute yaw. The computed Euler angles (pitch, roll and yaw) are converted to quaternions.

    -

    Noise Covariance Computation

    +

    Noise Covariance Computation

    The process noise covariance (Q) is calculated by computing covariance of windowed block of driving system data. The measurement noise @@ -136,7 +161,7 @@ covariance (R) is calculated by computing covariance of windowed block of aiding system data. The process and measurement covariance computed are to be used in Kalman filtering.

    -

    Kalman Filtering

    +

    Kalman Filtering

    @@ -152,7 +177,7 @@ Kalman filtering.

    ,where the first term is the quaternion representation of the Euler angles error and the next three terms are the error in knowledge of bias errors.

    -

    Determination of Gravity

    +

    Determination of Gravity

    When a device is subjected to motion in Euclidean space, the 3D accelerometer data generated from the device is a combination of linear acceleration and gravity components which are a measure of linear and rotational motion respectively.The @@ -193,7 +218,7 @@ given above, the values (GRx,GRy,GRz) are converted from (0,0,G) to (0,G,0) due shift in the axis which experiences the gravitational field (G is measure of Earth's gravity).

    -

    Determination of Linear Acceleration

    +

    Determination of Linear Acceleration

    Linear Acceleration virtual sensor data provides the measure of the acceleration of a device after removing the Gravity components on the 3-axes. Accurate linear -- 2.7.4 From a9b1209852994ad08882d338409b715301412eec Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Wed, 3 Dec 2014 09:58:05 +0530 Subject: [PATCH 04/16] Adding document equations for aiding and driving systems - Adding equations for aiding system and driving system orientation estimation - changed equation formating Change-Id: I913ae44de5fa30ee8c4a91aa3a62a7ff93f0588d --- .../design/documentation/equation/equation_12.png | Bin 0 -> 3022 bytes .../design/documentation/equation/equation_13.png | Bin 0 -> 2716 bytes .../design/documentation/equation/equation_14.png | Bin 0 -> 3297 bytes .../design/documentation/equation/equation_15.png | Bin 0 -> 2136 bytes .../design/documentation/equation/equation_16.png | Bin 0 -> 3392 bytes .../design/documentation/equation/equation_17.png | Bin 0 -> 3359 bytes .../design/documentation/equation/equation_18.png | Bin 0 -> 3165 bytes .../design/documentation/sensor_fusion.htm | 58 ++++++++++++++++----- 8 files changed, 46 insertions(+), 12 deletions(-) create mode 100755 src/sensor_fusion/design/documentation/equation/equation_12.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_13.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_14.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_15.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_16.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_17.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_18.png diff --git a/src/sensor_fusion/design/documentation/equation/equation_12.png b/src/sensor_fusion/design/documentation/equation/equation_12.png new file mode 100755 index 0000000000000000000000000000000000000000..700136aa033162376cc8bde58e84af3f32ebb152 GIT binary patch literal 3022 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 QQ~&?~07*qoM6N<$f+G6aT>t<8 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_13.png b/src/sensor_fusion/design/documentation/equation/equation_13.png new file mode 100755 index 0000000000000000000000000000000000000000..3d11c260c253ae5dadf9c1cbb45dc5e27488fc16 GIT binary patch literal 2716 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_15.png b/src/sensor_fusion/design/documentation/equation/equation_15.png new file mode 100755 index 0000000000000000000000000000000000000000..1a08d95559d5e400f0dc3e8f96ac03dce8e34a83 GIT binary patch literal 2136 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_18.png b/src/sensor_fusion/design/documentation/equation/equation_18.png new file mode 100755 index 0000000000000000000000000000000000000000..9ce277439fd86dee2502a93a367bd60bd1c13ac8 GIT binary patch literal 3165 zcmV-j45IUiP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3-U=sK~#8N?VZ1i z+t?Pz^>4VIcDi(1sd6*THq&gO!cB@416vqWJV>#SLf|S82nbAIVIc?tkHBCM3(LU6 zARZ5fU<4tAFsKPjFlGtEAoA`#=jzwhy|N=b6aV;rs=XP9FEUN(Z^gJ zDOg>HqbEU>Wcm{Tfa3xx0&L`~#nd|)g^Q&+ptD?rqZ4nsSV2huI9{M4`#_#0)3NI? z!|`$*3$KUd0><xwK*>S!k!I|UK ze1d!t4hN1GW$N+$AkT6#3>WLgLAoq;T>$_b7f_L%CclYB17|RftJDOmNEKANAEY*% zc+n^IQ1U7APAH<*bWmtM_dOi|z|H~{*=6ps=&{p?AgQ2|$rs_lg2z$TVbUp7<(!A< zS9QRM%zwB+(#&_zsat{})dea7z|jH~*=0V*<42k*m=Vz_GCVDzZ!? z-&GY#R`P5<9S;ZI^Lciw4jlsIThuC`RGMTI-4ve%9T~X(EX!|iq9+6P74j^3^EOF- z_oS>0{rLSNJXgsT=})jcEYtXs#)ya4Y5dnBc{wbjScYte#nC}_9e^EVmCl0Srrm+- z4an0slXY7QEGn`}MR|GBQWa4#C4 z23dA>$-1w=u`g{i2YC+K7^MO7sY~*@Bj>M?qC@Osc*fsKO<_|~BmA6m24{rVW8!9O=XPuq{H&+q>7L)!v3O6o6p|G|CUZ91)%iLL1n_PKE;7Azh|s8 z&*JN;H#CL~(Tx#+J%S8{)li#N#9(QS)QzPA>Fdnl34|&M|0MMVcrq8A#;-x}4 zq>XpnUjyH_Y^$)of2krWxM9*UWpnM0(mk+VMQq*%&$dI50RZ6eSR011tB8Q2VZ3%8 zM+;*X-RA3*D#9l)>R5-s+#6jgLQ}PR2@kCz^tprkMSa!)04tp$A?X;fT!a^+FiGV$ z5AlOLHAS?n@v7qY$$1Fl2|Ds6T;wC^?f}TN`+3;uP!W2{?ij%r0RS8!y;Ve(>lYA zM5}F4m5{Wo-@1sFO+`3Z*0FJ&Uby{ce98f`)o68mQfmhQ0Knm~b^&cv5o7R%tf+2& zt?yq(oZ0wlBgoTfyEb{2L}iyPLHR1`oG1>6(|@^9w+fe2xh-ye!52`rp`{n{hI`%J zv55hF5T4?*G_#!6rtNS8GX_3_Omb`JjZ1yKxLJH&F z%GYyEm};`ig~n=Hc{&~WvrlumKiVB$Oy)OVgm$T^)EaW+i>d!&F1yK!C*LiT7k+dt z&aF+FuC1kem5=f@o4@dsm(dpjYU@zT^&D@8-=BkP;j zR79Mm;bWY7!5^(wzU*>28^d%TxSkqTO2Ft9vdT_}WkfRYAbOF#0 zxgx&@8z}o@otS&$npMP@Z(*n+OEra6Edm?E%!OEO7l8s?tVXhv;4c=bpv26E_ZQ(% z+d6|g_`I7JoIWV*=SMJg)QsG1{HuvHV(?!;ceRejsv-_xWutMW>lCzjc=RvDh6TVntK zy8={XE0nGk1&-JQP$dQ`d*u2v;f1M9q0RCH)wM>x>Qs6O( zoj+UqnKJxX8DhRqmB|<3h?7&h6QU8mQk!lurdjdKH5H+QHc2BXa)aa;Jxl=h2&l+b z;F7b_I){zU|N|VY~xLknON0u}XmNzt%4|q{uz8js_W`=3&Oj8v)H9)VU>y2?% z)+@D5pDr9K0>G{V71;_MDxz6W9$9(=R@+(~tlwPSs3Nwok9=YCy&FyvL#Z>0n-MH; zWmfDwTzufp0`gUN>?Eo8%(E*B-<<`?-)g*?iE&oeE7gycKt%x92cRNbVV#Op%m049 zh)qR0BU%U&PzB?*46rlHTOyr|)LT5kO5)(KSl0< zs%K~TM>zhakP222;Ys{c>?C!AIEkY_%K!A!I2J5;puF^OXylJ%RyG>004l#eEar)R8cWc)>G;q00000NkvXXu0mjf DMW6C( literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index eb31730..af5b786 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -76,37 +76,37 @@ Estimation.
    - +
    - +
    - +
    - +
    - +
    - +
    @@ -143,15 +143,49 @@ Estimation.
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +

    Orientation Computation Based on Driving System

    + +
    +
    + +
    +
    -

    Driving System

    +
    +
    + +
    +
    +
    +
    + +
    +
    -

    The accelerometer and geomagnetic sensor data are corrected -for noise and compensated for static bias. Accelerometer is used to compute -tilt (pitch and roll). The geomagnetic sensor along with the computed tilt data -is used compute yaw. The computed Euler angles (pitch, roll and yaw) are -converted to quaternions.

    +
    +
    + +
    +

    Noise Covariance Computation

    -- 2.7.4 From 021c5bfc000e41972f8c412e51b171e76cc3650f Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 4 Dec 2014 15:33:36 +0530 Subject: [PATCH 05/16] Adding document time update related equations - Added time update related equations to sensor fusion document. - cleanup of outdated section and diagram. Change-Id: I913ae44de5fa30ee8c4a91cc5c62a7ff93f0588d --- .../design/documentation/equation/equation_19.png | Bin 0 -> 3202 bytes .../design/documentation/equation/equation_20.png | Bin 0 -> 3358 bytes .../design/documentation/equation/equation_21.png | Bin 0 -> 3571 bytes .../design/documentation/equation/equation_22.png | Bin 0 -> 3717 bytes .../design/documentation/equation/equation_23.png | Bin 0 -> 3544 bytes .../design/documentation/equation/equation_24.png | Bin 0 -> 7122 bytes .../design/documentation/equation/equation_25.png | Bin 0 -> 5455 bytes .../design/documentation/equation/equation_26.png | Bin 0 -> 5784 bytes .../design/documentation/equation/equation_27.png | Bin 0 -> 8951 bytes .../design/documentation/equation/equation_28.png | Bin 0 -> 10788 bytes .../design/documentation/equation/equation_29.png | Bin 0 -> 2577 bytes .../design/documentation/equation/equation_30.png | Bin 0 -> 3520 bytes .../documentation/equation/state_equation.png | Bin 2183 -> 0 bytes .../design/documentation/sensor_fusion.htm | 76 +++++++++++++++++---- 14 files changed, 63 insertions(+), 13 deletions(-) create mode 100755 src/sensor_fusion/design/documentation/equation/equation_19.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_20.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_21.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_22.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_23.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_24.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_25.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_26.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_27.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_28.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_29.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_30.png delete mode 100755 src/sensor_fusion/design/documentation/equation/state_equation.png diff --git a/src/sensor_fusion/design/documentation/equation/equation_19.png b/src/sensor_fusion/design/documentation/equation/equation_19.png new file mode 100755 index 0000000000000000000000000000000000000000..54f1152e6250662c318e4a4dac431119f90fd3b9 GIT binary patch literal 3202 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_21.png b/src/sensor_fusion/design/documentation/equation/equation_21.png new file mode 100755 index 0000000000000000000000000000000000000000..b8f35d5c27523ebe9f798349d5b40d9a8733569e GIT binary patch literal 3571 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 t>dnU^e9^mTUk3002ovPDHLkV1in~#PR?D literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_22.png b/src/sensor_fusion/design/documentation/equation/equation_22.png new file mode 100755 index 0000000000000000000000000000000000000000..4b83e16e27ae8926102a0e810fa97bb1058e13c2 GIT binary patch literal 3717 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_23.png b/src/sensor_fusion/design/documentation/equation/equation_23.png new file mode 100755 index 0000000000000000000000000000000000000000..fd7254dccfb547bee8abf8874961b69843e2a800 GIT binary patch literal 3544 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 IM6N<$f^l@=YXATM literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_25.png b/src/sensor_fusion/design/documentation/equation/equation_25.png new file mode 100755 index 0000000000000000000000000000000000000000..2a439b5d6f052d5879a6535d8e468223aeb28f0c GIT binary patch literal 5455 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 O@Ic>853BR&+5Z3()@39B literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_26.png b/src/sensor_fusion/design/documentation/equation/equation_26.png new file mode 100755 index 0000000000000000000000000000000000000000..f6015cf57f9bc859667afd7a92709aebc76a369c GIT binary patch literal 5784 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 F{{!o+lGgwL literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_28.png b/src/sensor_fusion/design/documentation/equation/equation_28.png new file mode 100755 index 0000000000000000000000000000000000000000..f090f91bb4df3c227bb5910049b2c8680f0d53fc GIT binary patch literal 10788 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 Q%MF06q>@Cn*q7k{10Zs9kN^Mx literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_29.png b/src/sensor_fusion/design/documentation/equation/equation_29.png new file mode 100755 index 0000000000000000000000000000000000000000..b62f0914c47640d45c45fbe6d3d58202fcabdad2 GIT binary patch literal 2577 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
    DnI*zwe; z<-^KgXNTBrbW!Y3YY*`ymC1CWe#z)bWt9Qnb>S|2YuhFuwia+F)-=5r8nmAXZZo@_ zCZBDu55yPQANDamc^VjJAjlmtJWUnMW5$$PJtws!@k{msaCtB)+-7;h#1 zSS3te?7J4992DaW1stR=kE95wL-K7$SA6uwk#LWE8%M8<_gROW!2;dVi>w9$fj}Ve uGzqdA2m}IwKx+h94Fm##K%gal{`?z2@zgMR{_r9I0000R32;bRa{vGi!~g&e!~vBn4jTXf02y>eSaefwW^{L9a%BKbX=8G4b8lvJAWvpy zX=7!7?KN=#00;+3L_t(|+U;CBYa2@x*56RA)}8-=Dm7_tlP1L$YFxOx#e#|pDFQAQ z1cAT>!-5DH0%k!F3_-9MLK?$z351IfqzFL>LbwDWf-zzF?#%AYzPwLKtDRNO2P!OC z_MSQCd~;qi9S{fvLQUw<5)cT4x&Ul=U5^t)mGfRAKgkLf=@+Pm29SJ=~!*pS%~ehc{NQn%B^AQ7=7u_uCA zV_{EWS(bR+z*#+1_&Q_5!5GfQJ^WHFObiMNRmJ!YTi0MXKNK^BBE7J@*|}lwU&GV~ zO!g-V%20sK0(KxDdrcjzqN;OOaHjmTOXz(T()XLOGxg<@HI=w8bQ3j|(B4nk=TBiS z?sNa@9tdWQ`Q&d*mk;p=7{9^7&2i$CSGq8VA(-ya!ZJ%QGT-b}tDrYcE=76?e^rFL zNY@&+2>_{+zIlDuc z^X*L2T{)QAi^l2~J3E&bqTXVmRM=fbFKu)_4nIuqY7@+h);_J{LGo?s7uD=#_XuWb zVdxFt3^1~nXicH;ugxdWJYznAW`1f_H|1CfrmSAt>3kAv%*~}tm1_}xLk#LNiohqAA*z`s*9Ba?|@k_hUYLYh0&*VP+}3!D%~z4@1sjz2r%ep}(2TTb9k z+1H*6obKua#!PWtZH$>mCcM%e0a>rC>psR2pH+L|2ijlGt_}^72x38j?$n3ma!aMGyNQEL7|N=Hje6=aoPq4cPdUUJCZ z{Q_%vqTuc>?I&%`xvu_-zaKigzO^ zQr?7X5ZS0=pcVC!limeut=w3>AjQ-*XP=EOBJby&mkEp8yil)B*Haz&6d;%smgQmD z@MVTk^4#(g=Io7U*i|3=@C1`Lel3Yor4*uyUUG~xh+b4Ymz0+RPB4r)Q}%h8V0TxQ zKoyX$(G%uUMKFvgZ?AB9p(&N>RnvmN|0~>;!xc=Jf>D{Buqy+a$x3(F;-wfbQxJ6F#S;^lV7j zB?|@z#aXswjV#bzpd&t4^4gmT>MC|_Ohx(jLooL{%)xMHn}`7*K9ps=OPt4%MbMOi zt$<}muo@mv%U?(qU0I`ujFx}hL1BB^ACejyuW-#L9}hWeQK%QGg9U6kmDv%k>f}`b zY2UG~{6Q{0$tefGb~uZ+orr=AZ z!z0lD@{jemPdG84#+}t-#QaOh*T!Q8X^;mfbzF>XESK2_jTM;W{ap!0R_N16Lqu&} z#B$Ge7z_GfsC3G)-Fk(xAJbVbSsabd1tsNeHRL@mB_e7fn0*sW-i1@KFUV>7*NE0*4#w(y>uEco}h96FUHg4wT? zhWB@PRsGl1EWgjCUf*~{yQF}VRi@EaT z?Hx&a)EtOl2<5P{pdE94DS@Nv9yJIe7($V&MFzUc5399TTz+ezthEiGn{SUO4Lm%E zU -

    Noise Covariance Computation

    +

    Time Update System

    -

    The process noise covariance (Q) is calculated by computing -covariance of windowed block of driving system data. The measurement noise -covariance (R) is calculated by computing covariance of windowed block of aiding -system data. The process and measurement covariance computed are to be used in -Kalman filtering.

    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    -

    Kalman Filtering

    +
    +
    + +
    +
    - -
    Fig. 3. Kalman Filter Stages.
    +
    -

    To ensure linear Kalman filtering the following error state equation is used:

    +
    +
    + +
    +
    -

    +
    +
    + +
    +
    + +
    +
    + +
    +
    -

    ,where the first term is the quaternion representation of the Euler angles -error and the next three terms are the error in knowledge of bias errors.

    +
    +
    + +
    +

    Determination of Gravity

    When a device is subjected to motion in Euclidean space, the 3D accelerometer -- 2.7.4 From f777d77df3c5fc8fe967436aa0ceea7817881114 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 5 Dec 2014 10:45:15 +0530 Subject: [PATCH 06/16] Adding equations for measurement system, gravity, Linear Accel - Adding equations for measurement update system, gravity computation and linear acceleration Change-Id: I913ae44de5fa30ee8c4a90bb5c62a7ff93f0588d --- .../design/documentation/equation/equation_31.png | Bin 0 -> 2402 bytes .../design/documentation/equation/equation_32.png | Bin 0 -> 2219 bytes .../design/documentation/equation/equation_33.png | Bin 0 -> 2477 bytes .../design/documentation/equation/equation_34.png | Bin 0 -> 3145 bytes .../design/documentation/equation/equation_35.png | Bin 0 -> 5395 bytes .../design/documentation/equation/equation_36.png | Bin 0 -> 5473 bytes .../design/documentation/equation/equation_37.png | Bin 0 -> 3950 bytes .../design/documentation/equation/equation_38.png | Bin 0 -> 2429 bytes .../design/documentation/equation/equation_39.png | Bin 0 -> 2290 bytes .../design/documentation/equation/equation_40.png | Bin 0 -> 2230 bytes .../design/documentation/sensor_fusion.htm | 72 ++++++++++++++++++--- 11 files changed, 64 insertions(+), 8 deletions(-) create mode 100755 src/sensor_fusion/design/documentation/equation/equation_31.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_32.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_33.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_34.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_35.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_36.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_37.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_38.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_39.png create mode 100755 src/sensor_fusion/design/documentation/equation/equation_40.png diff --git a/src/sensor_fusion/design/documentation/equation/equation_31.png b/src/sensor_fusion/design/documentation/equation/equation_31.png new file mode 100755 index 0000000000000000000000000000000000000000..9a1c524f9bc2ba940570733d10ac96ebe8efd466 GIT binary patch literal 2402 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 literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_33.png b/src/sensor_fusion/design/documentation/equation/equation_33.png new file mode 100755 index 0000000000000000000000000000000000000000..7768cdb96599977db5fa1d0cd81418c424d1e1fe GIT binary patch literal 2477 zcmV;e2~zfnP)N000{Z0ssI2L=)<800001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2|`IkK~#8N?VZ1i z+ej40{costyIs1gRH@k}%{D1ixVa)lAceriL5g$&!$BYr5G;Yf!6FD82gicACXKjb;6q_h$6Vj&I+mvuur|nfJcmnbAldePJsB+R)lRwu{&wh3Q&dy>wzU;QEzi#5m zWwPAqEfv0G(GwN!$oFpS){8U_J*Na@n4uWhKeo#>3cT>ue0{ICnAol7*A72B7FG!u zjO{ABiNnie)#boMAwPsw69U?gww{j7DxLaXIGeAj3lQ3W9oc_|0lSYB>>muqc6A%S zyvBO%&g@q2XV++??)^h3iw7ZD#Pg#!?-#~>9sFbWDV;p>r?+ld@^ukkj{Mo;#M)7j z0HJ7)bY%#FZpuy}Oe>B2N8#*)I`D3jO$!ZjrAKeOWfBxNd(&)FJfTV<`S16;iwy%= zbt!(lAh%xQc0xcqYO5>dX3g=V1PONs?(fp4p8q0qs@UCjG4n^4@#3rA;EbrD_p%4@ zISt3`AB>UR`gR&j3Q2UY#;X@9%7dux2O_HEcvgMyN7tn!kdhc6ig6f!$V2)?tr3TO zD^hthx|pP&YB^=~56TaAt0X9@3?RjB?8o!d^^Q#vu)E8qfv8n4yj~9GZM(a4;sw*} zu5f_+b@oDbGrdW&+~{orZ3%`TFcebr55*u>y^o)ZF!@+)L3LK*GAdC-2xxn4ZGdjp zLlA_g&d0Y^a@C;~*gqJA?K}>CE{FyMXA!R~vq}(3R3cevkttRS z^H(OVQ9>^cr~A48F5)qiUu7JopJ5k3sfN*b1S)ezkD~00-k^a_cSY=u1||V;wl%lw z5z*eh!8mp0mvslNSfmg$Ls+%htMKiVfOgbY7fj8nPjw%ec(_-ETMo4^Fyn!C^rEcL z3sA_xS@{IqkI4SP7?Gjqm-JyfpGCjkt|0pE*Yj6$oN<`C5W4p|ivQG;#-bZFQ{Pv^ zRd~$fx?))TV?X~;Pkws*p^~#YyW)U4oFUVW04f1P`-d9zcu&*2>hRFuA220o(0#NJ zgaNF&v45BZG>7=AAB@ck^IDCMt6HkwAF`qj*CI_M>>o@W)d{vlluevf!Xn+BYWLda zA9`awH%R}0z1rL@=#o*Lz$IW{|G-*HpHk63D{W0@gu;tONizkIueY{ z3LBeN3+!dQKpJrI7RDoB|6poBC)g6bB3z$Pa}P3MADd=kWlB~GcN>2g(wOoObilsP zPdr6ir(#El2my81 zRzp}jU~E=ZCrt$%F3?nywk9w)oD2G{(y&u}%$ea7PTNH?%kV`aVg&PcR=N?Jqf(|E z$+Umy8!x8hB>V$1AG-|5TP#IgR0ERSN|Ut2C17CxplU;_kMs{%6^2bu;f2VXBJ_1( zR=uAmE&M>8&&6SJSA{nIK}EbR88*x0mub4($_sfSem8vcra8_ir z4ULG}TZ>WPIt^8P9~j4rfAyEl1I8+zn^l%X{w2CZeyhIsu_gY7@(KTdgLxy@C5bsM z{(;FBz3*U95?~UV-T*How6zGfBndBs@8i4}s)UXo45Y;g0kvzZ z2+^A)xk=+I|M~OK!@bQwrCEjhh;SG6U0DU^fZadv;34;Am?n_Y3X!&_wwe^wAg8*D z5~v4r-9HL=VSMw)qVa;EmFb+Yw_y>JmqK`lEY@iIJhGAyn z^!}mFfJj={mzY!$Ks8xuA`Mg;{|Ms`_$(J!m>%aG(m(VNL{xxnaqzMIqjvv8J}CP# z>T>_19mILUwWF7y_a*1(7{(C@X$JvUVM#=tQXb4dN+~mhe;90PkM#nAKOQx zm2%Y;E!V{Sbc=vw5Iy1nK_mb~a}P0*-5QniwF-x-$jR#jBq?XV-B?JeO>4DES#|L! zuw$tn411N1RcLo?yM_=@;;ZhIo3;B<;MPF?n{NQ5}I{*I%%qN^OomxmhPxNA(jS4xf zRciInq literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_34.png b/src/sensor_fusion/design/documentation/equation/equation_34.png new file mode 100755 index 0000000000000000000000000000000000000000..ebf026271a1c85c3d28ed5a1b882604f00db212b GIT binary patch literal 3145 zcmV-P47T%$P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D3*JdYK~#8N?VZ1C z8%Z0-^>1vg)}6bnRBhwtZLV>#g&Gwp(k-Y6qzJslf*_E}ATS4kfLRE<92^F5&A}lM z*Q5|?UP3T};|e2G1Y?%m%=66b&W~qiR)1lg~e!nV)XVYaRwix^~%g^)aY_)a#9*H~_qsb5!?Ky>DR`Oq-^+G2yDGA?>B@G=oyv*q35$uRXcDP2Za#$L zn)HF#tjh5q$tLr)uLr92;xeapt2VP&V5-M)sK_&7ySgskTt3*^tJTNJrPCZO@z^fQ zJWaB9^YxwBqQW9+0zS^!$Iq+v^?1-9jIVivs+-w3?IpwMGGOl2YKm&pOUAPeKXNl0 zHx23ij6uQJ4OPl{E&`V8mHFT_oBSdB=<90wvwC*z%IPvJUVSVtSj58K?Il@JF1!(L z4>rr`Fgb>J_)Qw~261M`%w_`I-IOnq!RuKo8>_a9$)I;uEN;aH!QFcCi*C%39}XU4 z)1i`EFsmqw>;x=4&D~)C7A(rAwmkK{#pQ=cl-IG8LP)BNhD946^_rq*wY z2M{QyyGWfLj7yBFDETbT7W0G7#;~G8i-*so@7D8oS)vHW_S2O4m}WnZgG&s6YB^1l zUTRE>!AePkCLQ7W{S;d+IbI{3gzk0LxmDio)(w{W=cIecj+H}jO!8F(if;TvPRK0wx3 z9D-wrhsUIaQyGa1nviay#|IKJR|@595;0f;IK&}Ekq*NRX)r85Hzu*2Px80dVls`{ zlFM@&nX!zG`O$yu(AS6u~3%iU$W=lk5r}}h<(OnS-2n%vwRi-~bXN{89&SIuyn(FiJBSB%`yNV+Jw~dI=ch%e-FbZR5RD;f z)X$M<4{gIp#}l21iO(2nwu|XxX0H*k3BYK?rU#x7N~B^!JkU&uV?<2xi-(8~Axp&r zX$~G@c15BJmigql;;5V z>vH5hO$q3XyBr;l0AN!+Jpji#DvILqLxEAN#c+dBfz1f7bYa*P_@m}fEyRO!w_f}z zE=X!HMR{Mge(w{81HDaP;(M*khJ#B3o}j7+4-t=jr0xNbP2EF0@ckd+iVckmT{qWC9|U+S8eCvcmH;L^%HY+3eH6#U5(C657Csz2-|)-FBb zA@b-t_!6|P8f1%_$%so(gg>SkNCQbif~sQ?+(~Gb@$@GzS1Jk9Ehc!R71da z>$_s6?WZ+hrMj;P@i0xzjlAW_zRkY|oq;?JxiWy4`{9js`jVIDSOenSR&Iza%$c=e z21=jc_sQnuRVDFuDgL6y;!VyYni6qP2}EzOAT=$D*V>9A?jZlI)_+X$QO0j|HMCsr zQ{Bv7y`63DMU*E{B9Xjnwtmq7yiM}F*&*0G5x&)1L27HM-^&Is{!3qB|4UQc>6K6b zwzjTX#P|A6=o+-K6L`-cHbxjswYnURufNQTey=}BUry#X{OKxD*LG11hjHG z{^wQJ=PlXHC*zNw`B9owfGOHxy%9M+SmXEBiFmCMI=qPjQ9Qa2w+B7$qtP}GU2#Ji zzH|pnk9gRH*Wy753ju}zfh)wL(c766Qf*hi$y82#lnn77TO&?V658KzBm~^a>LzeV zfpvmpIgf$bX}Iq6H?&hdaeSjH^vWQ=T&(YLs=>kClpXMCyL${M^$t)7rpA1i3A_?V z?GOXK+tsJ}nk!^A{^s4nxJ#Od&rY0`DtF}1M#>kdX{JcVM4w65SL*<~wEzycoN_^k z9~6sPU+@x$Jz3#b%QYj>E`fmQ8j^9c?!Oc=KF7XiZ9@cyu3-3L`~kYSGM_ zS?Ks5VMq;b@!-bhd_4)Kw=P@U1)kQOiYL)_ z^F(Q3(w=TK;;$`5aI6*aiI~1FvpNycmiuZjLv&1`Xz+m>*Da2YwnaJ)8~2~wYeIX& zLuKE3ac3hQA#-dAbGf%;bNb(shaBsM3(_Ips=L$9M<{8m^D? z(bpHj=v%6Y3Uj2zQJhT|9Keo0UOi(Os+ zc0j}p7{Hlz0dGGxtLsUY(m9PT9t{6y*Pa#oeo4^e34TeiUJZBO;1rPrOd1UUE`Pvh zp&FONZ$pX8KcC_CT=lCYi5UifSw9?8-#dU;cap5Q4&Kzx8uO5EnB#?|_$9#~9-amr zPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T3^4X&bTK^6bnI)unngkM4)b${4C6w_&rw+$L`Uxheoi8hd^Z`Us-YA68fvg8_!0eU zEbuuxYFD8)*n!@QVaWcd&BlOci#7C6mH5rH7O9E|C5>MTb7eoCa;!!GyFVe4jwnGNHh~GVpxcyyZ zke|9fvB}Hip^%C|Pwx3Jk_<$MSD|UE2#}a%!gTLg9U^glw(ty)SR_OO-iq|RE08=& z@?$6#AQh|}Y~{o$-;n;$dZM^rB$4w1M`8kQiDNHU85x?)v0@bN(hGK1` zv8l^eZ`v3aq5>(jQZ$lqY=EDRldi^U+9;F}Z{#!WT#{6Sp?D)yt#gw1P^08(8g@s< zfvDiiNg(z$KbJyNYGa}Dn&hR5_|EtpM-^^dWT!b3q2Ol{PpFT+(FicuLqg1`P^yVP z9OE+c4T*QXLaH65aWt`(R(8W+C~x`w0dFw z8@AU;BzmY`i@ZoGG7VVT_C`Z~Ro@AxswpifkO`Mlc5U*|%QJP>LcZ+hWMFArXcdT7 zyy_;>lPTn^0h#6_k%7!4ibl_%at-y6K!rjTz0rM6;L1Q*PeT0`*1zp@c%xP@k7=Z^ z$V-Zp3J6$$-qMUG>#^ga_p=u zZWwr3E1nSPx5^KuXxl<$ub(+OdgaLvW`yo-BN5?98F4kyPqj=P+^ZVs#`Rtz$wo7- zE3(>ZBSV257Dl*;Jf~fs>ELLFjN3wYn;REN#cb1%XJO%O31ykDC&ur;dT&!S+724P zQAOnCb&^g;`EODF8E8hxNGVX^m5yLkWHc#QUHEQbZ_uWqu&M5_%*Y_SCc?YVW@dDE z2pl>%rZ|l_atG*|IuDYuiW&%*mMN3W;CPjI{f9_Q7y!v01hZ%z)88J4I+GbLkC__E zCdP%e$83#7r4SZTo)xB`jgjNf{b(Y(4e~U`3d#WKp+aXb6Hb*Pm$8vjo1Mx7(wBhq%gJ3x}rM~hB4mPsoaX0ln4LnK+1 zW#cG_@j&X~UhJ!HLPDv+y2`t98*P2zL$tSa1GA>%jw1b?S8(n~D_RmW;dx~p+!J#h z!+jZNjvhi7#kgncZN_OD{s_U!Vr{0vxY?-f_?&-XKv6MDXDLXW?8Eu%by)WB=jb~b z2Pz)H-03&*lb6vOT!l)@DRvjo+Yv36`-orbv zrkGtjD`S?Jf_!yHptxPnA?Ych@6QH+OcThN`j!mlxc=Fz^_u${@;x_OxH zMAYbeA8uGf-;+M0_!+dGW52J@M}v2Dl+O(I9xeR3S*U3}%YR2-2K2oej%%|COy!tO zskSQ%nxLq}I$U>R{;I`L za2mnaBRHeWq~SAv#@k`4-b#y6#Lp#hs(&W_5S6RTkZ3uAsOfAf7mDtfj#-G~WZ&n` z%1LrVGJLKBzi&K`)s;WQM1Ibm`>|ogeHqvDHaffkvlsgiY<<^8&r(!bK99ydCwLv! z!HtYGv^u( zeZQXF#JeR->jU?^_35>I2eYzZ-tJc737jH>ruRE6i@{SQ;MMX(OUp`n{a4yZbkDN} zV_0;k`K1uIkG&f^AqLRu^F@?zrk>HAulAB{{x%-c6=iRrmqgt(jZ%qs)<2(N61kv= zx|g1RPP!>YAGg&t4!aKddu6?^M3TgzEG1#}Yd2{$nrSJbdra<=M+NbQdh91p80aYj zpH4&w6l3e$66&$^pTVg#kBT0*{0!~XQrZ$bhUVuUgpzB}A|J9MCnhA$pzpkmb;g)j zj{3OTjg-T&2c8lUamW>smo$mn=V21h%kg(CMKEy}O7Ac#nJ>}ZxDNBSeGmQvzrk~J z6fMHz`T=G>csKo!iu$;wEJ0me6-q=NDd+H3;4GGGS%n!ze?wol4)J&$%0*N`L{TjB zRiyc5T-g`Krz`)Nr=bXUl-@&m| z-=bd8T$!;N^)D?*)(0)xlaXGdcQ7prww}ui2zX|q$TbynAD?R~--_qQs7yw~3@Dlj z&z9x5^}~NfuII9oWb#zrS%5a%9joRr@qkujv-gp|5@D(oc(@BcvVB>pnkfAuDZF>>$QuCTx z0^64^$NJ!DlQmknEGNQfkAA_=X=G?EhNwW<-4AICB(WoFk)$sWZ4Xn^VmYW4r8cnC z(}qV0qvaS-I^B8DCT}jr5u+_~#p4e+3x{8~T*3LiGc+&DKs_LCtPFvAT2M>`Nehp? z1I4=mKPkJFpJfOEtU%@L$^4vvf0vko)xY=&%1jz#5e~M_SCQsRnDF>hx(3MV`DSo~ zB+-o{QQd+fDvdS-SgmLQ>oeUWnd<8>xc}T7jhfbf`-FQnW=GAORXXkd* z%v)-1Ft`+yEm;On{Q<-yFT#z}*uD8Rgw?L%Ow7CQvQr}xYhazbO4cG2ZKMyQDC-gW z&ll5`ytr34M!+@YA*^Eki@`sl{mfY5yaF ziL&gzH!A_;V`LQX(^zI2Wf98OE?-6Cx)!y|N>bN3ssNeXgz1ky1)uvAw#|D4Pd2nW zTozdvI0lh7*9>?nWV(!u_Wh_oS%n(6NQ;#m zJ1vV;Bj3{gVQNf6=Wc99jqX`y(C4sKa39@_V?TNVzg+kz7T$Ljfx0H!CG=e-%dj)# zgPSU`wX=&czIY89TDwPaRa`1dl|QCVP6FYUgLvOgj)p(Qkv9*}vRY`+FD;Q=N2pFn zg8yL#i)hv%&K=Z2wGF2RL(NOr(`(fxPk>VH!yiKHp(I-Idiy6-E0~eMsaQPCSTWa4 zhNME4%IYf2&lngb!qMp-$7IZ|te~p?DBeEWXOXxhm#4rE-(?1vdLGI!Mx5q?QC4i z0@NMoMA&~H4nO}0N=u$X@FVMn&6b-dVzMg0i?M3{o#_?8kr9+%KAYY*d=_o>5iDR` zRLOg+GjiSgfF#^if{iuz3t z;LD~4n{t?llBznqHyA@CvZ}gDT}c657Z0m+RM8`2#!QTosP1f;`P9C`q@dh+yqQ{>=|sWK$h`fM~)&Z zye6Z@$m~1eL1kMux#6JSUU>Uyvnx!<)tkP?V=lBt-$b#{2C22CCf#rm?~`RLeTnz~ zB}hGOBTv`C3>=2|ZJT@*hDv(l>eSOVp{N84Hok%0Sco=K2T}9vKATPIY%np}7{IM?=jyz`(BPwN{oD>-&p7AmgWF!i2dsuj+l|Ker(EI+(hihsP&y%L z1tRe%UR_d*zUHO4W!!j7nzxN=ChB*o$ z97J5`wcQ7B__Im0=#4yG(T!m<7D6=0I)=}^iyh7SK07lbLUc9cFy4YiiPENWQUkT* zAym#04W(7{B;>@%m=)a(nFbI;q~9pd?Xb&d9Z92xddVGrY>Lju*0nR!E3K7mIw}i6 zYOKLf|DW)4FR=ZkMfPJYGRYdyY6aWfvr;$RmN5|}a~~{#gJFWr;8i^?r3_1|R$^oG zDQf)lF--Kl;*DT{It20NjaXLYP7QQUBcFlEMmUME8r7%N6y9{*D7j%tb0Dnrq7nAd zPZiannQGAHGtBfp)7n{xzV0|$n%~B85yl)&;P{Sz!V}xO4ZJq?^?#tLg?d{?2{uu7xeGq|)6KLG?XMEJL6E8>SqG9j)Y)eQD^O}cegtxE#!P5IOnhm=p zL?e?=Lvjrm{$HFv)rQ18m3u$7@Ie}kAJ8r(Up&ra6L=Y?@+VJS~05S_|6Wz z+$0)ImhOK?`*E>;hILw9(<@Qyqvl0RGXlxoCE2rI#m}B#o~n_@=&(yIpM1_lmCX&< z{DB+4-kO>%B5)+fmSrJGjpVLdzk^y9&)cu@P!RqP!Dn7VQ?l!XIt)jTQ3a$Q!$9-x z^a*;7X65k@@NrTx4&&0`0R1-m{KfdEIL|&N^Ijkf${ZVgnzzv--D;VoKg$dU4o zQX74-XS=<-Ni=iA8nLcIR-UHTEl{6tyPF=pKK337sq3P!d-%cjd!3I0=Tq;IJfEop#2O=x>$F(=Lid|a?&We~TxT+W)1;m{S-*m>6_S3xPEX3U zFC+q0R*cqF;W{TxcWU~>aPcw;% zj-qifNUg2q#2X5eK=n$RDJMy&dYT%V?D?M%@z4av`IXsF#i{OaSeCmlEs*EHO$ry(%&;Mv?4Z=z_{LL@m=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TFMe2 z>6uI*f%mBz$aME~zkcuce((2w@AuvtM<@^o1OkCTAjl9|>i+_PKp+qZ1Q}rr8yDx% z-LeN;%PZjPzMvj6;d~1!i!0%4>BfM1NFWeg>7<||E;&)EmYzUyr4KFL=hb5Z!Ii_< zG%f~CVt?ggI2zC3_MiO%uDom26DCY5!sdoW7~k|L^2)cPBXUtaA;=`rZXb%rjl($h z$*D%m`KWqEAh^U>>WGVobnZgs9XX1ujw?o`uLa!$cI4HL!D7d7$f9a#0~(fGgQgWl zDBpGj5m8+PR}w7d!kj_UA9|bky>8;5m$J*1kCV8)2T3seg?b(1Qxb3&Xs*$IB;s(t zL=FVQ^p3-1u$TB<1;kO+Ou{MO>`x@Rrkaw|M9!_spX3D}+M|?rTfv2cG zbCRk+pZvVRa5Jf*vLTftwREn0P~fQ4iAR1b0%I zDiy~b&6@xcGwf z`B%!7t;~B|S1FW=INh-E;KoH_B~vPookqu;!9G86Nfrt~hAS(xhJ!1TF`%@qya2L7 zn{!DUN2Ls{^G&(NPNU7sY2*~DA}>_tjC!OjZ>Jj>$fE?_U>O?mYTk`Duhl5PT1W7@ zZy=vmb#0g)PkV-gsyjuQ3etfYvCb95+of$?sUZ-o*Nr-`k7RA^#yVf--d)Apcb}z9 z8yXierJQPyk}E`m3c`(x^ed05Pz{xBirDU5UtTg{kYx@#`Oggo8-|;OtYiear^!5Q zD~Z1^xeIShq2}Fam)}cIG8r}R{8$-t_Bu6I*fAU|3?G5O3R%}V66KQ`9QE#Jhdj2- zi_!i9DPu;oSsm#=PQ0?0V`$jW7}apGFt`l@I?tf>xmx%li&0bgeN0Iu02l+EkI<~VFX8Q&>_z=3A6HZ zkgXoQJkYe9+=FK}>`RjW1LzBVL<>0=({7re9y39fl^nP$??K)$i!+fZ&bPjZM|_{b zS@Q_)o023gV~X=Q+2Fy3W?B@NT`oo$$#g{Y40?}+jpZ}zMohak2Z;2b_p~UJ1HBfmg!HVLWEh-3y;iGa9p+#{E#;ebk%PQ_YXnLv-#pQY2Y#vJ)(sBkZm9vx7Co}lW3Vj*wS7v6I zzN_-gq2vFn%j;rPHg+V;u1KmQ)XtAJA0gDIQI$yy7JDm}k(*X^ z^_#oHc_jQyO@um+pP^~uZdrDpsv6=Col}QiXuiJm7HQtNQ5mz7-&dPA_VO$KUR7#& zTezZ4;bVnb*W5YM<#o|CB)?Cp!%2gE2S`(o-^dN~q(C2=LhVHv@nr76SMSgy7V)p&-4wDRLLkKHxIBd3KDbK9ozZno-i z{C#c7k{Tpx>S|`#8V0l|TY?Q1{DNT`1YGhBATO^oMb*_YAe!k}#0`L^ES+)f5m!q zS>HfO?Ru2N++`DS@s(HbhkMt+HG>|L-#3W5q8ruo+>2tBuk`uyFb=)ftIhc1(#O^E zR=q^}9-$>?(Xn?oTBQQapUq`v5@y`L45ibP4Y^!EPup8)PGLAHYs$T-tt~+w@0m)c z@QU|i+`DlZW@P^r&5l}x!?h@qE&UYonZ13%V`!{hpk71aJ>cw_aMi6vk)*zh&tuLDVdtX_2q|X=f2^YDPp`hFKB{S5=|Ld5wI9!nL?=@WN?k~TamhLcy52Py4##>ikKLu^r)eAUWrjy9h#7UT(Y~+m(yBzO9U$XTyMzu#( zFnZwfnS)!W-Dpvt8LC(M?k5qt9_ar(UIt@czfuRLhW>NN+n7_1t@}Go*I>!IX&P=d z@yNxehc{>mW0LVh4(yZQCO!W?ns#-9TIQgZIjyW;fcE4dwf+`I@b}0ya4BXU)xdGy ziMc5a>5M+2r+aaX6@@zh+GA1_;JEeU^5^Jtxqo;>A@@8-& zH!+{$T-fZB;Ko*e8<~RACx46rBbiMrpDCs;dF6K>YTcUhwKTgQn1fth5)>t1d`^o} z=_5EE3e&gZC}o7w63kB;hcXFyMfc#YnV;Y{_509z^lP}c^#~ec#*`WSBrn4TY^>pL`hM1#dpUR<5!4O(Ka=vw5tUP92bQ2r*l{CIbB zQJex*ek*B|-ULjUUxHHU1bi^|Vd77P)slgeu2zY@T-~ezdj8=IV(Q z{yc;C&B|L2f3O}7_C;C=|GQ7c8!B9W+z;b^lg2N-eCG9oK31QHa(u|gsIHi!mNSoC zGHO&)=&A5ZuMJv0{|>wxfSTB|ERa{Y{2?Acl85qtccE-yEW0^}^07tlHbH*2SR? zSz+-#DB>RN>=`K8{4Bgqpmp6=?6q1#-@qehsh{HEZc5tVExTPei-b3ZI;E%1%0Tm5 zXzQ^^Scc#Rj{PWlo4q30^3(KqZGH3sfT_R>Tc_w)ukZDz4SMdp(J>09{RAhDbQyac zY&HBAfx23_=Sp`kyFG0^S<(X39&AOk=QbQ#cPH}m9)j;=T262cS(td;_0;U8jl4nc zJ-Pg(na`%byNFWY!z)%pP+Tr-4f{>NP1ADen<{mWJ?jbgS6K1jt-AL%g2h}s zjaoU*fz|DhTJI(yuVg*yTvjm`dT8CvbD+dkhqwEW!&`O(S~vd^Z)Uu+VMj+;=p*i( zODXC;4Xg|YTgJXXz~S@PJcNzcH-ZX|6|-U?8(`-(n9n3Ob6#R9Gmzgo?ux zW)N65a00%BDRY`BXyyBtp&iVJN9 z!^JFZql&_N{zirpmx)wjLsTsDS<8?y8;u;ohUzXXsd*4Hw3X6o2+AOCBYNt$*w$#| zN#KnwW$+^$c;b0r%epky{J0TCbwPyd;)g-aQKyr#a?IsZoK>=OG5347&_9OT*)S%# zj<{A0bnV2h-M>R@N-&jQ#XGkUYnI%mc~3hAi%skp4n}1ko35*!s;e+uKb~N$6W@VI zjfomv#p{LD1P7DOrG>tV|C)6(?y6h?N8}(Hy}ysSE~Akn*!JiuY%v-$roFOA>mKZ) zjbS1~m9u%zJDRwQ0d($o0cRicBjC=VJsCfK|H)VMI8|ipx4)AWoVi@cA&aZ+q>7m$JR%>my#AV?I(^J_paGE_@<3m*E&V#aTyYhj-wyRN|2S= zb31zQj|*~fnimcGef4u{5Mzqo8+?wl{j|3kJ%yGHo6-L5xkIxnY`N=MnQTWzwe@-l zvIpdiZFr`EH<;9L>HZy>I{5k-$;ykzYlN|@anH~WxX}nYw*3@8+(HdxBcsw*uQ8o` z)}!RZLmRqr-_ON2-4{WP}d%pzXi90EcFM6F!`z$y0?3=s){8{a=540O8(Gv zf4~P?U64#iP_pt$Q0rNUi0?^M%QD8~>j0kFv={kRtFY`l@j=bW4Hi~R|AQmU=!?9M zqaT<^x0TT-!wsBd#=bzn;p?Z^ob||IviRYWxY)R?+<92xxs~4P z%0y;K0(>_=NuBqtt}ou+M)tX!CUeU*^ThRYwE6s5dM;r%!PxJI=E=(QW=)n9RhHp3 zo72nJ9$;xGBOZUyWOEk&%weuWF(PP|XVvDZ{$n^-o^LeAuF-5x6I&O6m7|vgVw-na zt)&pp(8hE0-VQfu(62RbI)`7ow!NJVbJ)5l2D|WDmZvd;;dau%)>q;8py~D=Xd~_W zRvPY$V{1JFnH2L`Mw1UL9f6R=y8eA6P^F|>D)SJ3TwZJCgFR=b_3nge&RriK>T?Fe zBzQo-6D`{W(XUA}Ujv1o=XKlcIA6zxAEzIk%vtLQ4lTpx`k{JeDPQU{&FV?Q+8IWA zB~i~MqQ0}f4#o6m;%}|xRB&~m$W5Z&;yNe3&dIvmwMw@KiGs3U$aJb#*qT2~2vuEY zsy|e@HmMs1#>FKj>?dV$O2uihhX3$35R$REOQAq8)=`v2!7%p37>i^;N9eF;uvlSY zIKFtE>d9Cqam zn|nnszj48>ddE^y=3HgZecRtf{M5Qi9A+_xTV$#HMj#kFF!%im*>%o)EQVXnUoE7e zBP>bNV6iqF_z-k~W*K>bAPr=X{K6zVnPw2VJ}gar%k@hOA4g4fOXG7S6!Uc`tx8&+31s!3Blnj<+h65X~-bkDY@i_uPdMJkMLgME8 z@Qet9q(Af)ty7DW8ZzV9KU5iAKIGX4E3j$u6F9iG&|(^&Kp-%MOmOdAnav}}9Bhw{%bW7XB3F z>8`V61=TZ+8=8@`e7R;TcVjM(alz)m-*yz^v0)apv7_(fK z=3Jf|`{8EH`{o85y`vrnwYx?N1OkCTAQ;nJ{$UY;Kp+qZ1XmQoUmy?&1OkB|g8=^z XRli=U$Ln0u00000NkvXXu0mjf0o$gm literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_37.png b/src/sensor_fusion/design/documentation/equation/equation_37.png new file mode 100755 index 0000000000000000000000000000000000000000..9312dec75af3d4c1fa3308dac92245c3fdbfe8b0 GIT binary patch literal 3950 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 M07*qoM6N<$f>JD6asU7T literal 0 HcmV?d00001 diff --git a/src/sensor_fusion/design/documentation/equation/equation_40.png b/src/sensor_fusion/design/documentation/equation/equation_40.png new file mode 100755 index 0000000000000000000000000000000000000000..10e1a07b103e82b0a0d10a77f73699adfd291921 GIT binary patch literal 2230 zcmV;n2ub&eP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2un#sK~#8N?VZ1C z<46?8^KYn5n=b!=Dm7`g*(QYwHz`saTp@6Au*G!-S6c-H;b5ypuyD;15Zi2HaJPj~ zb1X+tlOh;%EMXD3nRz2y8ol|Y$ZN-bpK4c@mHG9)-!~(9bn;9P1VIqJAPXS~f*^Xb zQwv!Y`Nv6okrtIa(B>geE|WAbR`|!S6-%wFW&TIRtG$#5j)iJfeEB#TU8D=VVU~F! z+GQpGPY?tO3#HGK@du56&5!O3}&Kga{lRQK5^h{pN7gF;rT`7}Ja zn9LvLft^!*&qil%P1M4t*3j9f;bgYEqfSrttUN zPvXTu3g6{U-+G)+E>6Pf{J`d>1Tg?yEu;8$fk%gk9j5Mzg@DwI?|5jhzNPWG{I`UA zQmBu(<}9Rk5w~C#g2>Ag=~f2fj^c+rId6n8oOU+KzBgiydCwbN#C0vi(Gu82FXQAo^tKQo!2w=RA(|bX zVsNSQ_o{8coFIym-&rxeEW}i6DU`^xM)a;~sM|+QvqtHn*$=ER7wU`?ETmOJutVp$ zsrXyLC_|@an(+Vw)ziWW;=tjP3`9HuE?n0)H^1?euW=3%VrbsRBOTB4nik?7{KBci z>1=+(GF3li7v&X#y`sbc@*nRjle;pRfw&sZ~Pz{aZL+Bzlp&!$4ll&+DU^R zOmtk>iI}SJPKu`U)qj48cK=%MLMxGpg$}e+U=%qv4!(ltz@DTO1hFTWLWv32)fJoQ zL%=rm1dUeoptwF3aSaPW=PwAn9H(OC!QVolo`}A{rNlxVt_%HDcraMYMj|)Y)7&SE?M{AC+nO3owKmA8 zKtD3Jfu%5QRC`+%d76ZQ$3wTq8IN&1_;vw795iY$u6er8k}H`JzQjVbN&MPE;Of>i zpJjiSn_Kf9iyna0Li7dj{#%2>+xks?H_5TB);L&*wqC~X4h^WbYa>ICYzV^SCiD8~ zpWQ-qjqKY61aZ)4LaAQDlK*?Lg&-;2+CrRG2KX{X^P#aJEd;8kFTgG>gx_I?wL8I} z7Q*XgxRlvK>QnQ0APXUg2FPNDGz=X=zOay&S)-~sx>bSNLhJ%9ZU!hJ z?PNSn^n!>qK^sv*qiS24Y=fTj_&zUAq%_ zT8OsRcH^|3FeDlaL5EcLp!Z-feZ|(@R_i5*qXHz}91)0xNblKfCjq}s?~0X(I4o4b zLQsusX5aAR>dyB;0$SyUjJwHcoc$|5)JlUjskEN39mEoU*DAn5S^^4^+TtoJf5L}a zK@{IIS&{XGLBXsMT3#(Yb|yC2GB%6e39Q|%=3KHzybO#W4hbG>W`#s84bvi}a zcvw|_og&*5tCI0c5c`XDTD<=Kc1y5$z2)9w%SFmsrM;aZUh9SsSLJN_=dHJr4o!8R zkD1x6cg(H#yi&>lr>QLio!BxPOS8xp=vL4+9y-oS7D607$dY>-+(HqRTIzpubjn`4B6+ESHQ5W zu??hua9W#?gSr77g9M>ecb8(|wccp4sCK7z!Z?4?Dpn0_un+YU+wRV0A4aE5X@=Q` z1kv&KI1%WYg?&e)FP%CX#{)z{t1-z!2*M!rFGG1GwMBh9eMlg6Mg2p-pYZY8X;nN4 zw*UKkgBhbj$?&c~#2m$O+`|R;Kc66o-2kum7-z%0_H -

    Determination of Gravity

    + +

    Measurement Update System

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +

    Determination of Gravity and Linear Acceleration

    When a device is subjected to motion in Euclidean space, the 3D accelerometer data generated from the device is a combination of linear acceleration and gravity components which are a measure of linear and rotational motion respectively.The @@ -277,6 +304,24 @@ width="40%" height="40%"> +

    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +

    Gravity virtual sensor data provides the measure of the direction in which the Earth’s gravitational force is observed in the device’s frame of reference. The orientation of the device decides the measure of the influence of Earth’s gravitational @@ -284,10 +329,6 @@ force on the 3-axes of the device. The following equations are used for projecti the tilt(pitch, roll) of the device on the Earth’s gravity axis to determine earth’s gravitational effect on the devices reference axis.

    -

    GRx = Earth’s Gravity * sin(pitch)

    -

    GRy = Earth’s Gravity * sin(roll)

    -

    GRz = Earth’s Gravity * cos(pitch) * cos(roll)

    -
    @@ -309,9 +350,24 @@ a device after removing the Gravity components on the 3-axes. Accurate linear acceleration data are calculated by subtracting gravity components from the 3-axes calibrated accelerometer data.

    -

    LAx = Ax – GRy

    -

    LAy = Ay – GRx

    -

    LAz = Az – GRz

    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +

    References

    -- 2.7.4 From e604e5ae802ff05364e223233d1c1f1b0a46cf34 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 5 Dec 2014 17:14:10 +0530 Subject: [PATCH 07/16] Cleanup of unsupported sensors related code - Removing code related to motion sensor - cleanup of code for unused sensors Change-Id: I8e10ad057ac007cf7576560875cb5072a9efb7df --- packaging/sensord.spec | 2 +- sensor_plugins.xml.in | 1 - sensors.xml.in | 58 ----------- src/libsensord/CMakeLists.txt | 1 - src/libsensord/client_common.cpp | 41 -------- src/libsensord/sensor_internal.h | 1 - src/libsensord/sensor_internal_deprecated.h | 1 - src/libsensord/sensor_motion.h | 150 ---------------------------- src/libsensord/sensor_orientation.h | 0 src/shared/sensor_common.h | 5 - 10 files changed, 1 insertion(+), 259 deletions(-) delete mode 100755 src/libsensord/sensor_motion.h mode change 100644 => 100755 src/libsensord/sensor_orientation.h diff --git a/packaging/sensord.spec b/packaging/sensord.spec index f5aefe8..1cab59a 100755 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -79,7 +79,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DACCEL=%{accel_state} \ -DGYRO=%{gyro_state} -DPROXI=%{proxi_state} -DLIGHT=%{light_state} \ -DGEO=%{geo_state} -DPRESSURE=%{pressure_state} -DTEMPERATURE=%{temperature_state} \ -DORIENTATION=%{orientation_state} -DGRAVITY=%{gravity_state} \ - -DLINEAR_ACCEL=%{linear_accel_state} -DMOTION=%{motion_state} \ + -DLINEAR_ACCEL=%{linear_accel_state} \ -DTEST_SUITE=%{build_test_suite} make %{?jobs:-j%jobs} diff --git a/sensor_plugins.xml.in b/sensor_plugins.xml.in index 40faa12..f40f79a 100755 --- a/sensor_plugins.xml.in +++ b/sensor_plugins.xml.in @@ -16,7 +16,6 @@ - diff --git a/sensors.xml.in b/sensors.xml.in index 37c1c34..3c4240b 100755 --- a/sensors.xml.in +++ b/sensors.xml.in @@ -167,64 +167,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/libsensord/CMakeLists.txt b/src/libsensord/CMakeLists.txt index bb2b159..6686be2 100755 --- a/src/libsensord/CMakeLists.txt +++ b/src/libsensord/CMakeLists.txt @@ -64,7 +64,6 @@ install(FILES sensor_accel.h DESTINATION include/sensor/) install(FILES sensor_geomag.h DESTINATION include/sensor/) install(FILES sensor_light.h DESTINATION include/sensor/) install(FILES sensor_proxi.h DESTINATION include/sensor/) -install(FILES sensor_motion.h DESTINATION include/sensor/) install(FILES sensor_gyro.h DESTINATION include/sensor/) install(FILES sensor_pressure.h DESTINATION include/sensor/) install(FILES sensor_context.h DESTINATION include/sensor/) diff --git a/src/libsensord/client_common.cpp b/src/libsensord/client_common.cpp index 8acb613..24932bb 100755 --- a/src/libsensord/client_common.cpp +++ b/src/libsensord/client_common.cpp @@ -32,10 +32,8 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, GEOMAGNETIC_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, LIGHT_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, PROXIMITY_SENSOR, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, THERMOMETER_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, GYROSCOPE_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, PRESSURE_SENSOR, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, MOTION_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, CONTEXT_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, GRAVITY_SENSOR, 0, 1), FILL_LOG_ELEMENT(LOG_ID_SENSOR_TYPE, LINEAR_ACCEL_SENSOR, 0, 1), @@ -45,25 +43,11 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_EVENT_CALIBRATION_NEEDED, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_EVENT_CHANGE_STATE, 0,1), FILL_LOG_ELEMENT(LOG_ID_EVENT, LIGHT_EVENT_CHANGE_LEVEL, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_SNAP, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_SHAKE, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_DOUBLETAP, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_PANNING, 0, 25), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_TOP_TO_BOTTOM, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_DIRECT_CALL, 0,1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_SMART_RELAY, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_TILT_TO_UNLOCK, 0,1 ), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_SMART_ALERT, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_TILT, 0, 25), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_PANNING_BROWSE, 0, 25), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_NO_MOVE, 0, 1), - FILL_LOG_ELEMENT(LOG_ID_EVENT, MOTION_ENGINE_EVENT_SHAKE_ALWAYS_ON, 0, 1), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_EVENT_STATE_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, PROXIMITY_EVENT_DISTANCE_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, CONTEXT_EVENT_REPORT, 0, 1), -#ifdef _RAWDATA_DEBUG FILL_LOG_ELEMENT(LOG_ID_EVENT, ACCELEROMETER_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, GEOMAGNETIC_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), @@ -75,7 +59,6 @@ log_element g_log_elements[] = { FILL_LOG_ELEMENT(LOG_ID_EVENT, ORIENTATION_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, PRESSURE_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), FILL_LOG_ELEMENT(LOG_ID_EVENT, TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME, 0, 10), -#endif FILL_LOG_ELEMENT(LOG_ID_DATA, ACCELEROMETER_BASE_DATA_SET, 0, 25), FILL_LOG_ELEMENT(LOG_ID_DATA, GYRO_BASE_DATA_SET, 0, 25), @@ -159,13 +142,6 @@ const char* get_data_name(unsigned int data_id) bool is_one_shot_event(unsigned int event_type) { - switch (event_type) { - case MOTION_ENGINE_EVENT_SMART_ALERT: - case MOTION_ENGINE_EVENT_SMART_RELAY: - return true; - break; - } - return false; } @@ -192,14 +168,6 @@ bool is_ontime_event(unsigned int event_type) bool is_panning_event(unsigned int event_type) { - switch (event_type) { - case MOTION_ENGINE_EVENT_PANNING: - case MOTION_ENGINE_EVENT_TILT: - case MOTION_ENGINE_EVENT_PANNING_BROWSE: - return true; - break; - } - return false; } @@ -209,15 +177,6 @@ bool is_single_state_event(unsigned int event_type) case GEOMAGNETIC_EVENT_CALIBRATION_NEEDED: case LIGHT_EVENT_CHANGE_LEVEL: case PROXIMITY_EVENT_CHANGE_STATE: - case MOTION_ENGINE_EVENT_SNAP: - case MOTION_ENGINE_EVENT_SHAKE: - case MOTION_ENGINE_EVENT_SHAKE_ALWAYS_ON: - case MOTION_ENGINE_EVENT_DOUBLETAP: - case MOTION_ENGINE_EVENT_TOP_TO_BOTTOM: - case MOTION_ENGINE_EVENT_DIRECT_CALL: - case MOTION_ENGINE_EVENT_SMART_RELAY: - case MOTION_ENGINE_EVENT_TILT_TO_UNLOCK: - case MOTION_ENGINE_EVENT_NO_MOVE: return true; break; } diff --git a/src/libsensord/sensor_internal.h b/src/libsensord/sensor_internal.h index 8f2efd2..bec1487 100755 --- a/src/libsensord/sensor_internal.h +++ b/src/libsensord/sensor_internal.h @@ -43,7 +43,6 @@ extern "C" #include #include #include -#include #include #include #include diff --git a/src/libsensord/sensor_internal_deprecated.h b/src/libsensord/sensor_internal_deprecated.h index 79388be..f0a1a74 100755 --- a/src/libsensord/sensor_internal_deprecated.h +++ b/src/libsensord/sensor_internal_deprecated.h @@ -41,7 +41,6 @@ extern "C" #include #include #include -#include #include #include #include diff --git a/src/libsensord/sensor_motion.h b/src/libsensord/sensor_motion.h deleted file mode 100755 index 1fe2db5..0000000 --- a/src/libsensord/sensor_motion.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * libsensord - * - * Copyright (c) 2014 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef __SENSOR_MOTION_H__ -#define __SENSOR_MOTION_H__ - -//! Pre-defined events for the motion sensor -//! Sensor Plugin developer can add more event to their own headers - -#ifdef __cplusplus -extern "C" -{ -#endif - -enum motion_event_type { - MOTION_ENGINE_EVENT_SNAP = (MOTION_SENSOR << 16) | 0x0001, - MOTION_ENGINE_EVENT_SHAKE = (MOTION_SENSOR << 16) | 0x0002, - MOTION_ENGINE_EVENT_DOUBLETAP = (MOTION_SENSOR << 16) | 0x0004, - MOTION_ENGINE_EVENT_PANNING = (MOTION_SENSOR << 16) | 0x0008, - MOTION_ENGINE_EVENT_TOP_TO_BOTTOM = (MOTION_SENSOR << 16) | 0x0010, - MOTION_ENGINE_EVENT_DIRECT_CALL = (MOTION_SENSOR << 16) | 0x0020, - MOTION_ENGINE_EVENT_TILT_TO_UNLOCK = (MOTION_SENSOR << 16) | 0x0040, - MOTION_ENGINE_EVENT_LOCK_EXECUTE_CAMERA = (MOTION_SENSOR << 16) | 0x0080, - MOTION_ENGINE_EVENT_SMART_ALERT = (MOTION_SENSOR << 16) | 0x0100, - MOTION_ENGINE_EVENT_TILT = (MOTION_SENSOR << 16) | 0x0200, - MOTION_ENGINE_EVENT_PANNING_BROWSE = (MOTION_SENSOR << 16) | 0x0400, - MOTION_ENGINE_EVENT_NO_MOVE = (MOTION_SENSOR << 16) | 0x0800, - MOTION_ENGINE_EVENT_SHAKE_ALWAYS_ON = (MOTION_SENSOR << 16) | 0x1000, - MOTION_ENGINE_EVENT_SMART_RELAY = (MOTION_SENSOR << 16) | 0x2000, -}; - -enum motion_snap_event { - MOTION_ENGIEN_SNAP_NONE = 0, - MOTION_ENGIEN_NEGATIVE_SNAP_X = 1, - MOTION_ENGIEN_POSITIVE_SNAP_X = 2, - MOTION_ENGIEN_NEGATIVE_SNAP_Y = 3, - MOTION_ENGIEN_POSITIVE_SNAP_Y = 4, - MOTION_ENGIEN_NEGATIVE_SNAP_Z = 5, - MOTION_ENGIEN_POSITIVE_SNAP_Z = 6, - MOTION_ENGIEN_SNAP_LEFT = MOTION_ENGIEN_NEGATIVE_SNAP_X, - MOTION_ENGIEN_SNAP_RIGHT = MOTION_ENGIEN_POSITIVE_SNAP_X, - MOTION_ENGINE_SNAP_NONE = 0, - MOTION_ENGINE_NEGATIVE_SNAP_X = 1, - MOTION_ENGINE_POSITIVE_SNAP_X = 2, - MOTION_ENGINE_NEGATIVE_SNAP_Y = 3, - MOTION_ENGINE_POSITIVE_SNAP_Y = 4, - MOTION_ENGINE_NEGATIVE_SNAP_Z = 5, - MOTION_ENGINE_POSITIVE_SNAP_Z = 6, - MOTION_ENGINE_SNAP_LEFT = MOTION_ENGINE_NEGATIVE_SNAP_X, - MOTION_ENGINE_SNAP_RIGHT = MOTION_ENGINE_POSITIVE_SNAP_X, -}; - -enum motion_shake_event { - MOTION_ENGIEN_SHAKE_NONE = 0, - MOTION_ENGIEN_SHAKE_DETECTION = 1, - MOTION_ENGIEN_SHAKE_CONTINUING = 2, - MOTION_ENGIEN_SHAKE_FINISH = 3, - MOTION_ENGINE_SHAKE_BREAK = 4, - MOTION_ENGINE_SHAKE_NONE = 0, - MOTION_ENGINE_SHAKE_DETECTION = 1, - MOTION_ENGINE_SHAKE_CONTINUING = 2, - MOTION_ENGINE_SHAKE_FINISH = 3, -}; - -enum motion_doubletap_event { - MOTION_ENGIEN_DOUBLTAP_NONE = 0, - MOTION_ENGIEN_DOUBLTAP_DETECTION = 1, - MOTION_ENGINE_DOUBLTAP_NONE = 0, - MOTION_ENGINE_DOUBLTAP_DETECTION = 1, -}; - -enum motion_top_to_bottom_event { - MOTION_ENGIEN_TOP_TO_BOTTOM_NONE = 0, - MOTION_ENGIEN_TOP_TO_BOTTOM_WAIT = 1, - MOTION_ENGIEN_TOP_TO_BOTTOM_DETECTION = 2, - MOTION_ENGINE_TOP_TO_BOTTOM_NONE = 0, - MOTION_ENGINE_TOP_TO_BOTTOM_WAIT = 1, - MOTION_ENGINE_TOP_TO_BOTTOM_DETECTION = 2, -}; - -enum motion_direct_call_event_t { - MOTION_ENGINE_DIRECT_CALL_NONE, - MOTION_ENGINE_DIRECT_CALL_DETECTION, -}; - -enum motion_smart_relay_event_t { - MOTION_ENGINE_SMART_RELAY_NONE, - MOTION_ENGINE_SMART_RELAY_DETECTION, -}; - -enum motion_tilt_to_unlock_event_t { - MOTION_ENGINE_TILT_TO_UNLOCK_NONE, - MOTION_ENGINE_TILT_TO_UNLOCK_DETECTION, -}; - -enum motion_lock_execute_camera_event_t { - MOTION_ENGINE_LOCK_EXECUTE_CAMERA_NONE, - MOTION_ENGINE_LOCK_EXECUTE_CAMERA_L_DETECTION, - MOTION_ENGINE_LOCK_EXECUTE_CAMERA_R_DETECTION, -}; - -enum motion_smart_alert_t { - MOTION_ENGINE_SMART_ALERT_NONE, - MOTION_ENGINE_SMART_ALERT_DETECTION, -}; - -enum motion_no_move_t { - MOTION_ENGINE_NO_MOVE_NONE, - MOTION_ENGINE_NO_MOVE_DETECTION, -}; - -enum motion_property_id { - MOTION_PROPERTY_UNKNOWN = 0, - MOTION_PROPERTY_CHECK_ACCEL_SENSOR, - MOTION_PROPERTY_CHECK_GYRO_SENSOR, - MOTION_PROPERTY_CHECK_GEO_SENSOR, - MOTION_PROPERTY_CHECK_PRIXI_SENSOR, - MOTION_PROPERTY_CHECK_LIGHT_SENSOR, - MOTION_PROPERTY_CHECK_BARO_SENSOR, - MOTION_PROPERTY_LCD_TOUCH_ON, - MOTION_PROPERTY_LCD_TOUCH_OFF, - MOTION_PROPERTY_CHECK_GYRO_CAL_STATUS, -}; - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif -//! End of a file diff --git a/src/libsensord/sensor_orientation.h b/src/libsensord/sensor_orientation.h old mode 100644 new mode 100755 diff --git a/src/shared/sensor_common.h b/src/shared/sensor_common.h index 10c5918..c819197 100755 --- a/src/shared/sensor_common.h +++ b/src/shared/sensor_common.h @@ -49,14 +49,9 @@ typedef enum { GEOMAGNETIC_SENSOR, LIGHT_SENSOR, PROXIMITY_SENSOR, - THERMOMETER_SENSOR, GYROSCOPE_SENSOR, PRESSURE_SENSOR, - MOTION_SENSOR, - FUSION_SENSOR, CONTEXT_SENSOR, - FLAT_SENSOR, - AUTO_ROTATION_SENSOR, GRAVITY_SENSOR, LINEAR_ACCEL_SENSOR, ORIENTATION_SENSOR, -- 2.7.4 From cb2333c1abe9961e05a62628f81e8222717216fa Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 9 Dec 2014 09:41:08 +0530 Subject: [PATCH 08/16] Adding explanation for orientation estimation Change-Id: I601ca6fb11a146fcf8fb38cfb17cd6bd7f13a2e4 --- .../design/documentation/sensor_fusion.htm | 72 +++++++++++++++++----- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index d8896e3..b89f1da 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -3,7 +3,7 @@

    Sensor Fusion for Tizen Sensor Framework

    -

    Introduction

    +

    1. Introduction

    Sensor Fusion is the process of combining the accelerometer, gyroscope and geo-magnetic sensor in order to generate accurate virtual sensor @@ -31,12 +31,12 @@ mechanical lock-in

            - Quantization error: inherent in all digitized systems

    -

    Sensors Used for Sensor Fusion

    +

    2. Sensors Used for Sensor Fusion

    Accelerometer Sensor :- Accelerometer data is a combination of linear acceleration and gravity components. Applications would be interested in using linear acceleration and gravity sensor data separately. Sensor fusion could be -used to separate linear acceleration and gravity components.  Additionally, +used to separate linear acceleration and gravity components. Additionally, accelerometer is used for correcting the roll and pitch orientation measurements generated from the gyroscope. Using the same, corrected tilt measurement (roll and pitch) is generated.

    @@ -52,9 +52,7 @@ along Z axis to produce correct yaw measurement. Geo-Magnetic sensor along with GPS latitude-longitude measurements could be used to accurately estimate heading of the device.

    -

    Orientation Estimation

    - -

    +

    3. Orientation Estimation

    @@ -63,6 +61,22 @@ heading of the device.

    +

    The rotation of the device along the y-axis is considered as roll (Φ), +x-axis as pitch (Θ) and the z-axis as yaw (Ψ) as shown in Fig. 1. The +orientation of the device can be represented either in terms of Euler angles +(roll, pitch, yaw), or in the form of Rotation Matrix, or in the form of +Quaternions. These are different mathematical forms of representing the same +device orientation data. During orientation estimation all these representations +would be used based on requirements and for stability reasons. When the device is +lying flat on the x-y axis, the earth’s gravitational force is observed along the +device z-axis. The reference axis for the device considered in this paper is shown +in Fig. 1. The device reference x and y axis may change for each device, based on +the individual MEMS sensor chip reference axis (that can be obtained from the +datasheet) or the orientation of the sensor chip when it gets integrated into the +device. The equations related to the computation of orientation, gravity and +linear acceleration virtual sensors would have to be modified based on the change +in reference axes.

    +
    -

    Preprocessing of Sensor Data

    +

    The overall method for determining orientation of a device based on sensor +fusion is shown in Fig. 2. This paper proposes to improve on the existing approach +[1] to obtain more accurate orientation estimate. The Aiding System is used in sensor +fusion for computing an inaccurate value for device orientation based on the +accelerometer and the magnetometer sensor data. The accelerometer and magnetometer +sensor data is combined using the Triad algorithm explained in [3] to obtain an +inaccurate orientation measure. The problem with the orientation measured using the +aiding system is that the smaller orientation changes of the device are not detected +accurately. The orientation measured using the aiding system is not accurate due to +the effect of gravity on the sensor data. But the aiding system orientation measured +has the advantage that it is not affected by drift. The driving system is used for +computing the orientation of a device using the 3D angular rates measured by the +gyroscope sensor. The gyroscope sensor is accurate in detecting even small +orientation changes but the orientation derived from it are affected due to drift. +The drift in the measured gyroscope orientation is due to the integration of the +noise components present along with angular rates samples measured with the gyroscope. +

    + +

    The Kalman filtering stage consists of two systems, the time update system where +the current instances of the state vector and prediction error covariance are +estimated based on the measurements obtained from the previous time instance. The +orientation data that is measured using the aiding system and the driving system are +fused during this stage. The second stage of the Kalman filtering process is the +measurement update system, where the estimated state and prediction error covariance +are corrected based on the Kalman gain factor that computed in this stage. The bias +that is estimated during this stage is used to correct the pre-processed gyroscope +sensor data that is given as input to the time update system.

    + +

    3.1. Preprocessing of Sensor Data

    @@ -111,7 +153,7 @@ Estimation.
    -

    Orientation Computation Based on Aiding System

    +

    3.2. Orientation Computation Based on Aiding System

    @@ -161,7 +203,7 @@ Estimation.
    -

    Orientation Computation Based on Driving System

    +

    3.3. Orientation Computation Based on Driving System

    @@ -187,7 +229,7 @@ Estimation.
    -

    Time Update System

    +

    3.4. Time Update System

    @@ -262,7 +304,7 @@ Estimation.
    -

    Measurement Update System

    +

    3.5. Measurement Update System

    @@ -288,7 +330,7 @@ Estimation.
    -

    Determination of Gravity and Linear Acceleration

    +

    4. Determination of Gravity and Linear Acceleration

    When a device is subjected to motion in Euclidean space, the 3D accelerometer data generated from the device is a combination of linear acceleration and gravity components which are a measure of linear and rotational motion respectively.The @@ -323,10 +365,10 @@ width="40%" height="40%">

    Gravity virtual sensor data provides the measure of the direction in which the -Earth’s gravitational force is observed in the device’s frame of reference. The -orientation of the device decides the measure of the influence of Earth’s gravitational +Earth's gravitational force is observed in the device frame of reference. The +orientation of the device decides the measure of the influence of Earth's gravitational force on the 3-axes of the device. The following equations are used for projecting -the tilt(pitch, roll) of the device on the Earth’s gravity axis to determine earth’s +the tilt(pitch, roll) of the device on the Earth's gravity axis to determine earth's gravitational effect on the devices reference axis.

    -- 2.7.4 From 2b6ca42da0d16e257320d6dc908391a999de95d6 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 11 Dec 2014 09:26:16 +0530 Subject: [PATCH 09/16] Supporting edge conditions during gravity computation - Adding edge use cases for gravity computation when rotation happens with pitch or roll at 90 degrees. Change-Id: Ia892d29964b62bada616e8da23cff5844308a59b --- src/gravity/gravity_sensor.cpp | 67 ++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/src/gravity/gravity_sensor.cpp b/src/gravity/gravity_sensor.cpp index a870244..acb73a6 100755 --- a/src/gravity/gravity_sensor.cpp +++ b/src/gravity/gravity_sensor.cpp @@ -35,6 +35,7 @@ #define GRAVITY 9.80665 #define DEG2RAD (M_PI/180) +#define DEVIATION 0.1 #define SENSOR_NAME "GRAVITY_SENSOR" #define SENSOR_TYPE_GRAVITY "GRAVITY" @@ -165,13 +166,20 @@ bool gravity_sensor::delete_interval(int client_id) void gravity_sensor::synthesize(const sensor_event_t &event, vector &outs) { sensor_event_t gravity_event; - float conversion_const = 1; + float pitch, roll, azimuth; + + azimuth = event.data.values[0]; + pitch = event.data.values[1]; + roll = event.data.values[2]; const float MIN_DELIVERY_DIFF_FACTOR = 0.75f; unsigned long long diff_time; - if(m_orientation_data_unit == "DEGREES") - conversion_const = DEG2RAD; + if(m_orientation_data_unit == "DEGREES") { + azimuth *= DEG2RAD; + pitch *= DEG2RAD; + roll *= DEG2RAD; + } if (event.event_type == ORIENTATION_EVENT_RAW_DATA_REPORT_ON_TIME) { diff_time = event.data.timestamp - m_timestamp; @@ -182,10 +190,21 @@ void gravity_sensor::synthesize(const sensor_event_t &event, vector= (M_PI/2)-DEVIATION && roll <= (M_PI/2)+DEVIATION) || + (roll >= -(M_PI/2)-DEVIATION && roll <= -(M_PI/2)+DEVIATION)) { + gravity_event.data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(roll) * cos(azimuth); + gravity_event.data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(azimuth); + gravity_event.data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(roll); + } else if ((pitch >= (M_PI/2)-DEVIATION && pitch <= (M_PI/2)+DEVIATION) || + (pitch >= -(M_PI/2)-DEVIATION && pitch <= -(M_PI/2)+DEVIATION)) { + gravity_event.data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(azimuth); + gravity_event.data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(pitch) * cos(azimuth); + gravity_event.data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(pitch); + } else { + gravity_event.data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(roll); + gravity_event.data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(pitch); + gravity_event.data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(roll) * cos(pitch); + } gravity_event.data.value_count = 3; gravity_event.data.timestamp = m_timestamp; gravity_event.data.accuracy = SENSOR_ACCURACY_GOOD; @@ -197,10 +216,17 @@ void gravity_sensor::synthesize(const sensor_event_t &event, vector= (M_PI/2)-DEVIATION && roll <= (M_PI/2)+DEVIATION) || + (roll >= -(M_PI/2)-DEVIATION && roll <= -(M_PI/2)+DEVIATION)) { + data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(roll) * cos(azimuth); + data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(azimuth); + data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(roll); + } else if ((pitch >= (M_PI/2)-DEVIATION && pitch <= (M_PI/2)+DEVIATION) || + (pitch >= -(M_PI/2)-DEVIATION && pitch <= -(M_PI/2)+DEVIATION)) { + data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(azimuth); + data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(pitch) * cos(azimuth); + data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(pitch); + } else { + data.values[0] = m_gravity_sign_compensation[0] * GRAVITY * sin(roll); + data.values[1] = m_gravity_sign_compensation[1] * GRAVITY * sin(pitch); + data.values[2] = m_gravity_sign_compensation[2] * GRAVITY * cos(roll) * cos(pitch); + } data.value_count = 3; return 0; @@ -222,7 +259,7 @@ bool gravity_sensor::get_properties(sensor_properties_t &properties) { properties.min_range = -GRAVITY; properties.max_range = GRAVITY; - properties.resolution = 0.000001;; + properties.resolution = 0.000001; properties.vendor = m_vendor; properties.name = SENSOR_NAME; -- 2.7.4 From 8f1945a14052cac0e7864ccf576126d0419d115f Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Thu, 11 Dec 2014 10:03:00 +0530 Subject: [PATCH 10/16] Adding explanation for preprocessing sensor data - Adding explanation for the section on preprocessing sensor data, in html documentation. Change-Id: I3c372a56680531b9ef1859ccc5bd6b5d981f3ee0 --- .../design/documentation/sensor_fusion.htm | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index b89f1da..0e4726a 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -115,6 +115,18 @@ that is estimated during this stage is used to correct the pre-processed gyrosco sensor data that is given as input to the time update system.

    3.1. Preprocessing of Sensor Data

    +

    The raw sensor data obtained from accelerometer (RAx, RAy, RAz), gyroscope +(RGx, RGy, RGz) and magnetometer (Magx, Magy, Magz) would have to pre-processed +before the sensor fusion process. The raw sensor data obtained from the +accelerometer and gyroscope sensors are affected by static bias, which are the +non-zero sensor data values observed when the device is void of any external forces. +These static bias components on the 3-axes (BAx, BAy, BAz) for accelerometer and +(BGx, BGy, BGz) for gyroscope are removed from the reported sensor values as shown in +(1) and (2). There is no static bias compensation for magnetometer data, as the +sensor measures the deviation of the x-axis relative to the earth's magnetic poles +and it is not possible to determine if the phone is deviating from exact north. The +'i' in the equations below specifies the current time instant, 'i-1' specifies the +previous time instant and a '0' specifies it as an initialization value.

    @@ -128,6 +140,10 @@ sensor data that is given as input to the time update system.

    +

    The accelerometer and magnetometer data are normalized based on equations (3) +and (4) to obtain the calibrated accelerometer data (Ax, Ay, Az) and magnetometer +data (Mx, My, Mz).

    +
    @@ -140,12 +156,22 @@ sensor data that is given as input to the time update system.

    +

    The paper proposes that the gyroscope angular rates (on all 3 axes) before +being processed further are scaled to the range -1 to +1 (for accurate orientation +estimation) by dividing all data received by the maximum possible gyroscope +angular rate value apriori in each axis (5).

    +
    +

    Based on [1], the dynamically variable Gyroscope Bias (Bx, By, Bz) is computed +using the Kalman filter and provided as feedback to the input and is subtracted +from scaled gyroscope data to obtain the corrected and pre-processed gyroscope +data (Gx, Gy, Gz) given in (6).

    +
    -- 2.7.4 From 9cf7e7f34043daff01ca2281d0f574ba6692c2b1 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Fri, 12 Dec 2014 16:02:42 +0530 Subject: [PATCH 11/16] Adding information for Aiding system Added explanation for orientation computation based on aiding system for sensor fusion html documentation. Change-Id: I49ced6087a178c8e57e2b39940b148585ddaf67a --- .../design/documentation/sensor_fusion.htm | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index 0e4726a..11a1b37 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -181,6 +181,31 @@ data (Gx, Gy, Gz) given in (6).

    3.2. Orientation Computation Based on Aiding System

    +

    The device is placed on a flat surface as shown in the Fig. 1. The gravity +vector in the earth frame for the device (Ae) is given by (0, 0, ±1) since the +effect of gravity is observed on the z-axis reading of the Accelerometer. The sign +assigned is based on whether the z-axis of the accelerometer (when facing up) is +aligned towards gravity or against it. The magnetic field vector in the earth frame +for the device (Me) is given by (0, ±1, 0) since the magnetic north is detected on +the y-axis of the magnetometer. The sign assigned is based on whether the y-axis +of the magnetometer is aligned to earth’s magnetic field or against it. The gravity +vector in the device body frame (Ab) is given by (Ax, Ay, Az), which represents the +calibrated accelerometer sensor data. The magnetic field vector in the device body +frame (Mb) is given by (Mx, My, Mz) which represents the calibrated magnetometer +sensor data.

    + +

    The orientation of the device is computed based on the aiding system +(accelerometer + magnetometer) data and can be computed using the triad algorithm +[3]. The triad algorithm determines the orientation of the device based on the +gravity and magnetic field vectors obtained in the earth and device body frames. +The following equations represent the triad algorithm using which the orientation +of the device in the form of rotation matrix can be obtained. The symbol × denotes +the cross product of two vectors [8]. Combining the vectors obtained from (7) and +(9) along with the body frame gravity vector (Ab) the intermediate rotation matrix +is obtained for body frame MATb, as shown in (11). Combining the vectors obtained +from (8) and (10) along with the earth frame gravity vector (Ae) the intermediate +rotation matrix is obtained for earth frame MATe, as shown in (12).

    +
    @@ -217,12 +242,22 @@ data (Gx, Gy, Gz) given in (6).

    +

    Finally the rotation matrix of the device representing the orientation derived +from the aiding system RMaid is computed by multiplying the matrices MATb and MATe +as shown in (13).

    +
    +

    The device orientation computed in the form of aiding system rotation matrix is +then converted to quaternion representation Qaid (14) using the function +RotMat2Quat() which is explained in [6, 9]. Using quaternions to estimate +orientation overcomes the singularity issues faced when using Euler Angles and at +the same time they are computationally more efficient than using rotation matrix.

    +
    -- 2.7.4 From 653e9cebd7623972fd8bd4c69696e467585e4365 Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Mon, 15 Dec 2014 09:19:38 +0530 Subject: [PATCH 12/16] Adding information for Driving System Updating documentation for 'Orientation Computation based on driving system' section in html documentation. Change-Id: Ibb483e5ba4e658f1710bec934666a7696e5ab92c --- .../design/documentation/sensor_fusion.htm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index 11a1b37..c1f9e3a 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -266,6 +266,19 @@ the same time they are computationally more efficient than using rotation matrix

    3.3. Orientation Computation Based on Driving System

    +

    The sensor data obtained from the driving system (gyroscope) given by (Gx, Gy, Gz) +represents the calibrated angular rotation rate of the device in the 3-axes. Since +the calibrated gyroscope data provides the rate of change of angle in each axis, +the integration of the data acquired in each axis provides the orientation measure +of the device. During integration of the gyroscope data the noise present in each +instance of the measured data gets added up resulting in measured orientation +affected by drift. First the measured gyroscope data is converted to a quaternion +equivalent Qdriv [14, 15]. The initial value for the Qdriv is assigned based on the +computed Qaid initial value (15). The quaternion differential which denotes the +increment in rotation is computed by quaternion based multiplication [7, 9] of Qdriv +with gyroscope sensor data as shown in (16). The symbol ⊙ denotes quaternion +based multiplication in the following equations.

    +
    @@ -278,6 +291,13 @@ the same time they are computationally more efficient than using rotation matrix
    +

    Equation (17) represents the integration of the quaternion difference value with +the driving system quaternion to yield the measured quaternion value for that time +instant [1]. The value 'dt' represents the sampling interval for the gyroscope sensor +and 'Π' denotes the mathematical constant and denotes the ratio of a circle's +circumference to its diameter and is approximately equal to 3.14159. The driving +system quaternion is then normalized as shown in equation (18).

    +
    -- 2.7.4 From 30e4720a900b2d4896eb8f5ed9681ad4c6527b3c Mon Sep 17 00:00:00 2001 From: Ramasamy Date: Tue, 16 Dec 2014 09:36:57 +0530 Subject: [PATCH 13/16] Adding information for time update system Adding description for Time update System section in sensor fusion html documentation. Change-Id: I94f87c6ccd3f4bfcfc005d37a480e4fd57fb11c8 --- .../design/documentation/sensor_fusion.htm | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/sensor_fusion/design/documentation/sensor_fusion.htm b/src/sensor_fusion/design/documentation/sensor_fusion.htm index c1f9e3a..231b129 100755 --- a/src/sensor_fusion/design/documentation/sensor_fusion.htm +++ b/src/sensor_fusion/design/documentation/sensor_fusion.htm @@ -312,18 +312,37 @@ system quaternion is then normalized as shown in equation (18).

    3.4. Time Update System

    +

    The orientation computed using the driving system sensor data is affected due to +the drift (from the integration of angular rates), the orientation computed using +the aiding system sensor data is not accurate (measurements are affected due to gravity). +To compensate for the deficiencies in the measurements of each system, the quaternion +orientation computations are combined using sensor fusion to obtain corrected/more +accurate device orientation data. The Quaternion error Qerr is computed in (19), as +described in [1].

    +
    +

    We introduce the equations (20) and (21) to compute the Euler error from the +quaternion error and then using this Euler error to compensate for drift on the driving +system orientation quaternion. First, the quaternion error Qerr is converted to the Euler +angle representation Eerr based on (20). The quaternion representation of orientation +error is converted to Euler angles representation using the function quat2euler() for +which information can be found in [9].

    +
    +

    The driving system quaternion is then compensated for the Euler angle error Eerr and +normalized as per (21) and (22) to correct for drift observed in the driving system sensor +data.

    +
    @@ -336,12 +355,25 @@ system quaternion is then normalized as shown in equation (18).

    +

    The quaternion Qdriv that is derived in (22) is now compensated for drift and corrected +for dynamic bias as shown in (6). The dynamic bias correction used in (6) is determined +using Kalman filtering as explained below. Based on [1], linear Kalman filtering is used +based on the error state equation, given in (23). The first three elements of the error +state vector are the Eerr values on the 3-axes (Φerr, Θerr, Ψerr) and the +next three elements are the bias compensation (Bx, By, Bz) that is mentioned in (6).

    +
    +

    The variance in the gyroscope angular rate measurements denoted by Qwn over a windowed +period is computed in (24). The random driving process noise variance Qwb is computed in +(25), where the noise standard deviation σw and time constant τw are obtained from the +gyroscope sensor datasheet. Based on [1], the overall process noise covariance Q is +derived from the computed Qwn and Qwb as shown in (26).

    +
    @@ -360,12 +392,20 @@ system quaternion is then normalized as shown in equation (18).

    +

    The variance in the aiding system orientation (roll, pitch and yaw) measurements are +used to compute the measurement noise covariance R [1] which is shown in (27). The aiding +system orientation in terms of Euler angles Eaid can be obtained by converting the +quaternion obtained in (14) to its equivalent Euler angles.

    +
    +

    The equations (28), (29) and (30) are used to determine the transformation matrix F, +apriori state vector error Δx- and prediction covariance P- based in [1].

    +
    -- 2.7.4 From 326d42647ffe8767d97ca60f147c3f6db5213a65 Mon Sep 17 00:00:00 2001 From: Ankur Date: Wed, 17 Dec 2014 16:41:59 +0530 Subject: [PATCH 14/16] Fixed Intialization Warnings -Reordered some variable intializations to remove warnings related to order of initializations. Change-Id: Ibf56efd6f19c11229a18fbe6a613ffcf2b172a16 --- src/geo/geo_sensor_hal.cpp | 6 +++--- src/libsensord/csensor_event_listener.cpp | 2 +- src/linear_accel/linear_accel_sensor.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/geo/geo_sensor_hal.cpp b/src/geo/geo_sensor_hal.cpp index d742b26..21a2276 100755 --- a/src/geo/geo_sensor_hal.cpp +++ b/src/geo/geo_sensor_hal.cpp @@ -40,13 +40,13 @@ using std::ifstream; #define GAUSS_TO_UTESLA(val) ((val) * 100.0f) geo_sensor_hal::geo_sensor_hal() -: m_x(0) +: m_polling_interval(POLL_1HZ_MS) +, m_x(0) , m_y(0) , m_z(0) , m_hdst(0) -, m_node_handle(-1) -, m_polling_interval(POLL_1HZ_MS) , m_fired_time(INITIAL_TIME) +, m_node_handle(-1) { const string sensorhub_interval_node_name = "mag_poll_delay"; csensor_config &config = csensor_config::get_instance(); diff --git a/src/libsensord/csensor_event_listener.cpp b/src/libsensord/csensor_event_listener.cpp index e093f21..78e705e 100755 --- a/src/libsensord/csensor_event_listener.cpp +++ b/src/libsensord/csensor_event_listener.cpp @@ -30,8 +30,8 @@ using std::pair; csensor_event_listener::csensor_event_listener() : m_client_id(CLIENT_ID_INVALID) -, m_thread_state(THREAD_STATE_TERMINATE) , m_poller(NULL) +, m_thread_state(THREAD_STATE_TERMINATE) , m_hup_observer(NULL) { } diff --git a/src/linear_accel/linear_accel_sensor.cpp b/src/linear_accel/linear_accel_sensor.cpp index f975733..96e6cce 100755 --- a/src/linear_accel/linear_accel_sensor.cpp +++ b/src/linear_accel/linear_accel_sensor.cpp @@ -53,8 +53,8 @@ #define LINEAR_ACCEL_ENABLED 3 linear_accel_sensor::linear_accel_sensor() -: m_gravity_sensor(NULL) -, m_accel_sensor(NULL) +: m_accel_sensor(NULL) +, m_gravity_sensor(NULL) , m_x(INITIAL_VALUE) , m_y(INITIAL_VALUE) , m_z(INITIAL_VALUE) -- 2.7.4 From c169c4e8efbe517eeb2a55f51d45e70df6047753 Mon Sep 17 00:00:00 2001 From: Ankur Date: Thu, 18 Dec 2014 16:13:02 +0530 Subject: [PATCH 15/16] Fixed Compilation warnings related to Intialization -Error fixed: Variable was being used before intialization -Testing will be done once the test cases are completed. Change-Id: I5316bce003717d97f6e3cd65a909d94e1c84ad0c --- src/gravity/gravity_sensor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gravity/gravity_sensor.cpp b/src/gravity/gravity_sensor.cpp index acb73a6..64e39e7 100755 --- a/src/gravity/gravity_sensor.cpp +++ b/src/gravity/gravity_sensor.cpp @@ -218,6 +218,8 @@ int gravity_sensor::get_sensor_data(const unsigned int event_type, sensor_data_t sensor_data_t orientation_data; float pitch, roll, azimuth; + m_orientation_sensor->get_sensor_data(ORIENTATION_EVENT_RAW_DATA_REPORT_ON_TIME, orientation_data); + azimuth = orientation_data.values[0]; pitch = orientation_data.values[1]; roll = orientation_data.values[2]; @@ -231,8 +233,6 @@ int gravity_sensor::get_sensor_data(const unsigned int event_type, sensor_data_t if (event_type != GRAVITY_EVENT_RAW_DATA_REPORT_ON_TIME) return -1; - m_orientation_sensor->get_sensor_data(ORIENTATION_EVENT_RAW_DATA_REPORT_ON_TIME, orientation_data); - data.accuracy = SENSOR_ACCURACY_GOOD; data.timestamp = get_timestamp(); if ((roll >= (M_PI/2)-DEVIATION && roll <= (M_PI/2)+DEVIATION) || -- 2.7.4 From d57be8cc5575106d79022feb5549dc918605f53d Mon Sep 17 00:00:00 2001 From: Vibhor Gaur Date: Mon, 22 Dec 2014 14:32:22 +0530 Subject: [PATCH 16/16] Adding polling based support for testing of temperature sensor Change-Id: I3ff0750bd160c3259062a4f91542b69947597b53 --- packaging/sensord.spec | 1 + test/CMakeLists.txt | 4 ++ test/src/temperature.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 test/src/temperature.c diff --git a/packaging/sensord.spec b/packaging/sensord.spec index 1cab59a..1eaccdf 100755 --- a/packaging/sensord.spec +++ b/packaging/sensord.spec @@ -144,6 +144,7 @@ systemctl daemon-reload /usr/bin/gyro /usr/bin/proxi /usr/bin/pressure +/usr/bin/temperature %license LICENSE.APLv2 %{_datadir}/license/test diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 24b24ce..5c89818 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -35,6 +35,7 @@ add_executable(linear_acceleration src/linear_acceleration.c) add_executable(gyro src/gyro.c) add_executable(proxi src/proxi.c) add_executable(pressure src/pressure.c) +add_executable(temperature src/temperature.c) SET_TARGET_PROPERTIES(accelerometer PROPERTIES LINKER_LANGUAGE C) SET_TARGET_PROPERTIES(geomagnetic PROPERTIES LINKER_LANGUAGE C) @@ -44,6 +45,7 @@ SET_TARGET_PROPERTIES(linear_acceleration PROPERTIES LINKER_LANGUAGE C) SET_TARGET_PROPERTIES(gyro PROPERTIES LINKER_LANGUAGE C) SET_TARGET_PROPERTIES(proxi PROPERTIES LINKER_LANGUAGE C) SET_TARGET_PROPERTIES(pressure PROPERTIES LINKER_LANGUAGE C) +SET_TARGET_PROPERTIES(temperature PROPERTIES LINKER_LANGUAGE C) target_link_libraries(accelerometer glib-2.0 dlog sensor) target_link_libraries(geomagnetic glib-2.0 dlog sensor) @@ -53,6 +55,7 @@ target_link_libraries(linear_acceleration glib-2.0 dlog sensor) target_link_libraries(gyro glib-2.0 dlog sensor) target_link_libraries(proxi glib-2.0 dlog sensor) target_link_libraries(pressure glib-2.0 dlog sensor) +target_link_libraries(temperature glib-2.0 dlog sensor) INSTALL(TARGETS accelerometer DESTINATION /usr/bin/) INSTALL(TARGETS geomagnetic DESTINATION /usr/bin/) @@ -62,4 +65,5 @@ INSTALL(TARGETS linear_acceleration DESTINATION /usr/bin/) INSTALL(TARGETS gyro DESTINATION /usr/bin/) INSTALL(TARGETS proxi DESTINATION /usr/bin/) INSTALL(TARGETS pressure DESTINATION /usr/bin/) +INSTALL(TARGETS temperature DESTINATION /usr/bin/) diff --git a/test/src/temperature.c b/test/src/temperature.c new file mode 100644 index 0000000..ffdb2e9 --- /dev/null +++ b/test/src/temperature.c @@ -0,0 +1,140 @@ +/* + * sensord + * + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include +#include +#include +#include +#include +#include +#include +#include + +static GMainLoop *mainloop; + +void callback(unsigned int event_type, sensor_event_data_t *event, void *user_data) +{ + sensor_data_t *data = (sensor_data_t *)event->event_data; + printf("Temperature [%lld] [%6.6f] \n\n", data->timestamp, data->values[0]); +} + +void printformat() +{ + printf("Usage : ./temperature (optional) (optional)\n\n"); + + printf("mode:"); + printf("[-p]\n"); + printf("p is for polling based,default mode is event driven\n"); + + printf("event:"); + printf("[RAW_DATA_REPORT_ON_TIME]\n"); + + printf("interval:\n"); + printf("The time interval should be entered based on the sampling frequency supported by temperature driver on the device in ms.If no value for sensor is entered default value by the driver will be used.\n"); +} + +int main(int argc,char **argv) +{ + int result, handle, start_handle, stop_handle; + unsigned int event; + mainloop = g_main_loop_new(NULL, FALSE); + event = TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME; + event_condition_t *event_condition = (event_condition_t*) malloc(sizeof(event_condition_t)); + event_condition->cond_op = CONDITION_EQUAL; + + sensor_type_t type = TEMPERATURE_SENSOR; + + if (argc != 2 && argc != 3 && argc!=4) { + printformat(); + free(event_condition); + return 0; + } + + else if (argc>=3 && strcmp(argv[1], "-p") == 0 && strcmp(argv[2], "RAW_DATA_REPORT_ON_TIME") == 0) { + printf("Polling based\n"); + handle = sf_connect(type); + result = sf_start(handle, 1); + + if (result < 0) { + printf("Can't start temperature SENSOR\n"); + printf("Error\n\n\n\n"); + return -1; + } + + sensor_data_t data; + + while(1) { + result = sf_get_data(handle, TEMPERATURE_BASE_DATA_SET , &data); + printf("Temperature [%6.6f] \n\n", data.values[0]); + usleep(100000); + } + + result = sf_disconnect(handle); + + if (result < 0) { + printf("Can't disconnect temperature sensor\n"); + printf("Error\n\n\n\n"); + return -1; + } + } + + else if (strcmp(argv[1], "RAW_DATA_REPORT_ON_TIME") == 0) { + printf("Event based\n"); + + event_condition->cond_value1 = 100; + if (argc == 3) + event_condition->cond_value1 = atof(argv[2]); + + handle = sf_connect(type); + result = sf_register_event(handle, event, event_condition, callback, NULL); + + if (result < 0) + printf("Can't register temperature\n"); + + start_handle = sf_start(handle,0); + + if (start_handle < 0) { + printf("Error\n\n\n\n"); + sf_unregister_event(handle, event); + sf_disconnect(handle); + return -1; + } + + g_main_loop_run(mainloop); + g_main_loop_unref(mainloop); + + sf_unregister_event(handle, event); + + stop_handle = sf_stop(handle); + + if (stop_handle < 0) { + printf("Error\n\n"); + return -1; + } + + sf_disconnect(handle); + free(event_condition); + } + + else { + printformat(); + } + + return 0; +} + -- 2.7.4