Serveur d'exploration sur les dispositifs haptiques

Attention, ce site est en cours de développement !
Attention, site généré par des moyens informatiques à partir de corpus bruts.
Les informations ne sont donc pas validées.

Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion

Identifieur interne : 000384 ( Pmc/Curation ); précédent : 000383; suivant : 000385

Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion

Auteurs : Quentin Mourcou ; Anthony Fleury ; Céline Franco ; Frédéric Klopcic ; Nicolas Vuillerme [France, Danemark]

Source :

RBID : PMC:4610531

Abstract

Over the years, smartphones have become tools for scientific and clinical research. They can, for instance, be used to assess range of motion and joint angle measurement. In this paper, our aim was to determine if smartphones are reliable and accurate enough for clinical motion research. This work proposes an evaluation of different smartphone sensors performance and different manufacturer algorithm performances with the comparison to the gold standard, an industrial robotic arm with an actual standard use inertial motion unit in clinical measurement, an Xsens product. Both dynamic and static protocols were used to perform these comparisons. Root Mean Square (RMS) mean values results for static protocol are under 0.3° for the different smartphones. RMS mean values results for dynamic protocol are more prone to bias induced by Euler angle representation. Statistical results prove that there are no filter effect on results for both protocols and no hardware effect. Smartphones performance can be compared to the Xsens gold standard for clinical research.


Url:
DOI: 10.3390/s150923168
PubMed: 26389900
PubMed Central: 4610531

Links toward previous steps (curation, corpus...)


Links to Exploration step

PMC:4610531

Le document en format XML

<record>
<TEI>
<teiHeader>
<fileDesc>
<titleStmt>
<title xml:lang="en">Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion</title>
<author>
<name sortKey="Mourcou, Quentin" sort="Mourcou, Quentin" uniqKey="Mourcou Q" first="Quentin" last="Mourcou">Quentin Mourcou</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Fleury, Anthony" sort="Fleury, Anthony" uniqKey="Fleury A" first="Anthony" last="Fleury">Anthony Fleury</name>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Franco, Celine" sort="Franco, Celine" uniqKey="Franco C" first="Céline" last="Franco">Céline Franco</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Klopcic, Frederic" sort="Klopcic, Frederic" uniqKey="Klopcic F" first="Frédéric" last="Klopcic">Frédéric Klopcic</name>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Vuillerme, Nicolas" sort="Vuillerme, Nicolas" uniqKey="Vuillerme N" first="Nicolas" last="Vuillerme">Nicolas Vuillerme</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af3-sensors-15-23168">Institut Universitaire de France, Paris 75000, France</nlm:aff>
<country xml:lang="fr">France</country>
<wicri:regionArea>Institut Universitaire de France, Paris 75000</wicri:regionArea>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af4-sensors-15-23168">LAI Jean-Raoul Scherrer, University of Geneva, 1206 Geneva Switzerland/University of Grenoble Alpes, Saint-Martin-d'Hères 38041, France</nlm:aff>
<country xml:lang="fr">France</country>
<wicri:regionArea>LAI Jean-Raoul Scherrer, University of Geneva, 1206 Geneva Switzerland/University of Grenoble Alpes, Saint-Martin-d'Hères 38041</wicri:regionArea>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af5-sensors-15-23168">Laboratory for Ergonomics and Work-related Disorders, Center for Sensory-Motor Interaction (SMI), Department of Health Science and Technology, University of Aalborg, Aalborg 9220, Denmark</nlm:aff>
<country xml:lang="fr">Danemark</country>
<wicri:regionArea>Laboratory for Ergonomics and Work-related Disorders, Center for Sensory-Motor Interaction (SMI), Department of Health Science and Technology, University of Aalborg, Aalborg 9220</wicri:regionArea>
</affiliation>
</author>
</titleStmt>
<publicationStmt>
<idno type="wicri:source">PMC</idno>
<idno type="pmid">26389900</idno>
<idno type="pmc">4610531</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4610531</idno>
<idno type="RBID">PMC:4610531</idno>
<idno type="doi">10.3390/s150923168</idno>
<date when="2015">2015</date>
<idno type="wicri:Area/Pmc/Corpus">000384</idno>
<idno type="wicri:Area/Pmc/Curation">000384</idno>
</publicationStmt>
<sourceDesc>
<biblStruct>
<analytic>
<title xml:lang="en" level="a" type="main">Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion</title>
<author>
<name sortKey="Mourcou, Quentin" sort="Mourcou, Quentin" uniqKey="Mourcou Q" first="Quentin" last="Mourcou">Quentin Mourcou</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Fleury, Anthony" sort="Fleury, Anthony" uniqKey="Fleury A" first="Anthony" last="Fleury">Anthony Fleury</name>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Franco, Celine" sort="Franco, Celine" uniqKey="Franco C" first="Céline" last="Franco">Céline Franco</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Klopcic, Frederic" sort="Klopcic, Frederic" uniqKey="Klopcic F" first="Frédéric" last="Klopcic">Frédéric Klopcic</name>
<affiliation>
<nlm:aff id="af2-sensors-15-23168">University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</nlm:aff>
</affiliation>
</author>
<author>
<name sortKey="Vuillerme, Nicolas" sort="Vuillerme, Nicolas" uniqKey="Vuillerme N" first="Nicolas" last="Vuillerme">Nicolas Vuillerme</name>
<affiliation>
<nlm:aff id="af1-sensors-15-23168">University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</nlm:aff>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af3-sensors-15-23168">Institut Universitaire de France, Paris 75000, France</nlm:aff>
<country xml:lang="fr">France</country>
<wicri:regionArea>Institut Universitaire de France, Paris 75000</wicri:regionArea>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af4-sensors-15-23168">LAI Jean-Raoul Scherrer, University of Geneva, 1206 Geneva Switzerland/University of Grenoble Alpes, Saint-Martin-d'Hères 38041, France</nlm:aff>
<country xml:lang="fr">France</country>
<wicri:regionArea>LAI Jean-Raoul Scherrer, University of Geneva, 1206 Geneva Switzerland/University of Grenoble Alpes, Saint-Martin-d'Hères 38041</wicri:regionArea>
</affiliation>
<affiliation wicri:level="1">
<nlm:aff id="af5-sensors-15-23168">Laboratory for Ergonomics and Work-related Disorders, Center for Sensory-Motor Interaction (SMI), Department of Health Science and Technology, University of Aalborg, Aalborg 9220, Denmark</nlm:aff>
<country xml:lang="fr">Danemark</country>
<wicri:regionArea>Laboratory for Ergonomics and Work-related Disorders, Center for Sensory-Motor Interaction (SMI), Department of Health Science and Technology, University of Aalborg, Aalborg 9220</wicri:regionArea>
</affiliation>
</author>
</analytic>
<series>
<title level="j">Sensors (Basel, Switzerland)</title>
<idno type="eISSN">1424-8220</idno>
<imprint>
<date when="2015">2015</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc>
<textClass></textClass>
</profileDesc>
</teiHeader>
<front>
<div type="abstract" xml:lang="en">
<p>Over the years, smartphones have become tools for scientific and clinical research. They can, for instance, be used to assess range of motion and joint angle measurement. In this paper, our aim was to determine if smartphones are reliable and accurate enough for clinical motion research. This work proposes an evaluation of different smartphone sensors performance and different manufacturer algorithm performances with the comparison to the gold standard, an industrial robotic arm with an actual standard use inertial motion unit in clinical measurement, an Xsens product. Both dynamic and static protocols were used to perform these comparisons. Root Mean Square (RMS) mean values results for static protocol are under 0.3° for the different smartphones. RMS mean values results for dynamic protocol are more prone to bias induced by Euler angle representation. Statistical results prove that there are no filter effect on results for both protocols and no hardware effect. Smartphones performance can be compared to the Xsens gold standard for clinical research.</p>
</div>
</front>
<back>
<div1 type="bibliography">
<listBibl>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Kosse, N M" uniqKey="Kosse N">N.M. Kosse</name>
</author>
<author>
<name sortKey="Caljouw, S" uniqKey="Caljouw S">S. Caljouw</name>
</author>
<author>
<name sortKey="Vervoort, D" uniqKey="Vervoort D">D. Vervoort</name>
</author>
<author>
<name sortKey="Vuillerme, N" uniqKey="Vuillerme N">N. Vuillerme</name>
</author>
<author>
<name sortKey="Lamoth, C J" uniqKey="Lamoth C">C.J. Lamoth</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Milani, P" uniqKey="Milani P">P. Milani</name>
</author>
<author>
<name sortKey="Coccetta, C A" uniqKey="Coccetta C">C.A. Coccetta</name>
</author>
<author>
<name sortKey="Rabini, A" uniqKey="Rabini A">A. Rabini</name>
</author>
<author>
<name sortKey="Sciarra, T" uniqKey="Sciarra T">T. Sciarra</name>
</author>
<author>
<name sortKey="Massazza, G" uniqKey="Massazza G">G. Massazza</name>
</author>
<author>
<name sortKey="Ferriero, G" uniqKey="Ferriero G">G. Ferriero</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Campbell, A" uniqKey="Campbell A">A. Campbell</name>
</author>
<author>
<name sortKey="Choudhury, T" uniqKey="Choudhury T">T. Choudhury</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cook, D J" uniqKey="Cook D">D.J. Cook</name>
</author>
<author>
<name sortKey="Das, S K" uniqKey="Das S">S.K. Das</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Anguita, D" uniqKey="Anguita D">D. Anguita</name>
</author>
<author>
<name sortKey="Ghio, A" uniqKey="Ghio A">A. Ghio</name>
</author>
<author>
<name sortKey="Oneto, L" uniqKey="Oneto L">L. Oneto</name>
</author>
<author>
<name sortKey="Parra, X" uniqKey="Parra X">X. Parra</name>
</author>
<author>
<name sortKey="Reyes Ortiz, J L" uniqKey="Reyes Ortiz J">J.L. Reyes-Ortiz</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Habib, M A" uniqKey="Habib M">M.A. Habib</name>
</author>
<author>
<name sortKey="Mohktar, M S" uniqKey="Mohktar M">M.S. Mohktar</name>
</author>
<author>
<name sortKey="Kamaruzzaman, S B" uniqKey="Kamaruzzaman S">S.B. Kamaruzzaman</name>
</author>
<author>
<name sortKey="Lim, K S" uniqKey="Lim K">K.S. Lim</name>
</author>
<author>
<name sortKey="Pin, T M" uniqKey="Pin T">T.M. Pin</name>
</author>
<author>
<name sortKey="Ibrahim, F" uniqKey="Ibrahim F">F. Ibrahim</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Abbate, S" uniqKey="Abbate S">S. Abbate</name>
</author>
<author>
<name sortKey="Avvenuti, M" uniqKey="Avvenuti M">M. Avvenuti</name>
</author>
<author>
<name sortKey="Bonatesta, F" uniqKey="Bonatesta F">F. Bonatesta</name>
</author>
<author>
<name sortKey="Cola, G" uniqKey="Cola G">G. Cola</name>
</author>
<author>
<name sortKey="Corsini, P" uniqKey="Corsini P">P. Corsini</name>
</author>
<author>
<name sortKey="Vecchio, A" uniqKey="Vecchio A">A. Vecchio</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Williamson, R" uniqKey="Williamson R">R. Williamson</name>
</author>
<author>
<name sortKey="Andrews, B J" uniqKey="Andrews B">B.J. Andrews</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mitchell, K" uniqKey="Mitchell K">K. Mitchell</name>
</author>
<author>
<name sortKey="Gutierrez, S B" uniqKey="Gutierrez S">S.B. Gutierrez</name>
</author>
<author>
<name sortKey="Sutton, S" uniqKey="Sutton S">S. Sutton</name>
</author>
<author>
<name sortKey="Morton, S" uniqKey="Morton S">S. Morton</name>
</author>
<author>
<name sortKey="Morgenthaler, A" uniqKey="Morgenthaler A">A. Morgenthaler</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Jenny, J Y" uniqKey="Jenny J">J.Y. Jenny</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Vohralik, S L" uniqKey="Vohralik S">S.L. Vohralik</name>
</author>
<author>
<name sortKey="Bowen, A R" uniqKey="Bowen A">A.R. Bowen</name>
</author>
<author>
<name sortKey="Burns, J" uniqKey="Burns J">J. Burns</name>
</author>
<author>
<name sortKey="Hiller, C E" uniqKey="Hiller C">C.E. Hiller</name>
</author>
<author>
<name sortKey="Nightingale, E J" uniqKey="Nightingale E">E.J. Nightingale</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Madgwick, S" uniqKey="Madgwick S">S. Madgwick</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cutti, A G" uniqKey="Cutti A">A.G. Cutti</name>
</author>
<author>
<name sortKey="Giovanardi, A" uniqKey="Giovanardi A">A. Giovanardi</name>
</author>
<author>
<name sortKey="Rocchi, L" uniqKey="Rocchi L">L. Rocchi</name>
</author>
<author>
<name sortKey="Davalli, A" uniqKey="Davalli A">A. Davalli</name>
</author>
<author>
<name sortKey="Sacchetti, R" uniqKey="Sacchetti R">R. Sacchetti</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Chung, W M" uniqKey="Chung W">W.M. Chung</name>
</author>
<author>
<name sortKey="Yeung, S" uniqKey="Yeung S">S. Yeung</name>
</author>
<author>
<name sortKey="Chan, W W" uniqKey="Chan W">W.W. Chan</name>
</author>
<author>
<name sortKey="Lee, R" uniqKey="Lee R">R. Lee</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Hamacher, D" uniqKey="Hamacher D">D. Hamacher</name>
</author>
<author>
<name sortKey="Bertram, D" uniqKey="Bertram D">D. Bertram</name>
</author>
<author>
<name sortKey="Folsch, C" uniqKey="Folsch C">C. Fölsch</name>
</author>
<author>
<name sortKey="Schega, L" uniqKey="Schega L">L. Schega</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Saber Sheikh, K" uniqKey="Saber Sheikh K">K. Saber-Sheikh</name>
</author>
<author>
<name sortKey="Bryant, E C" uniqKey="Bryant E">E.C. Bryant</name>
</author>
<author>
<name sortKey="Glazzard, C" uniqKey="Glazzard C">C. Glazzard</name>
</author>
<author>
<name sortKey="Hamel, A" uniqKey="Hamel A">A. Hamel</name>
</author>
<author>
<name sortKey="Lee, R Y" uniqKey="Lee R">R.Y. Lee</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Euston, M" uniqKey="Euston M">M. Euston</name>
</author>
<author>
<name sortKey="Coote, P" uniqKey="Coote P">P. Coote</name>
</author>
<author>
<name sortKey="Mahony, R" uniqKey="Mahony R">R. Mahony</name>
</author>
<author>
<name sortKey="Kim, J" uniqKey="Kim J">J. Kim</name>
</author>
<author>
<name sortKey="Hamel, T" uniqKey="Hamel T">T. Hamel</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Welch, G" uniqKey="Welch G">G. Welch</name>
</author>
<author>
<name sortKey="Bishop, G" uniqKey="Bishop G">G. Bishop</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mahony, S" uniqKey="Mahony S">S. Mahony</name>
</author>
<author>
<name sortKey="Hamel, T" uniqKey="Hamel T">T. Hamel</name>
</author>
<author>
<name sortKey="Pflimlin, J M" uniqKey="Pflimlin J">J.-M. Pflimlin</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Sessa, S" uniqKey="Sessa S">S. Sessa</name>
</author>
<author>
<name sortKey="Zecca, M" uniqKey="Zecca M">M. Zecca</name>
</author>
<author>
<name sortKey="Lin, Z" uniqKey="Lin Z">Z. Lin</name>
</author>
<author>
<name sortKey="Bartolomeo, L" uniqKey="Bartolomeo L">L. Bartolomeo</name>
</author>
<author>
<name sortKey="Ishii, H" uniqKey="Ishii H">H. Ishii</name>
</author>
<author>
<name sortKey="Takanishi, A" uniqKey="Takanishi A">A. Takanishi</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Lebel, K" uniqKey="Lebel K">K. Lebel</name>
</author>
<author>
<name sortKey="Boissy, P" uniqKey="Boissy P">P. Boissy</name>
</author>
<author>
<name sortKey="Hamel, M" uniqKey="Hamel M">M. Hamel</name>
</author>
<author>
<name sortKey="Duval, C" uniqKey="Duval C">C. Duval</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Leardini, A" uniqKey="Leardini A">A. Leardini</name>
</author>
<author>
<name sortKey="Lullini, G" uniqKey="Lullini G">G. Lullini</name>
</author>
<author>
<name sortKey="Giannini, S" uniqKey="Giannini S">S. Giannini</name>
</author>
<author>
<name sortKey="Berti, L" uniqKey="Berti L">L. Berti</name>
</author>
<author>
<name sortKey="Ortolani, M" uniqKey="Ortolani M">M. Ortolani</name>
</author>
<author>
<name sortKey="Caravaggi, P" uniqKey="Caravaggi P">P. Caravaggi</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Milanese, S" uniqKey="Milanese S">S. Milanese</name>
</author>
<author>
<name sortKey="Gordon, S" uniqKey="Gordon S">S. Gordon</name>
</author>
<author>
<name sortKey="Buettner, P" uniqKey="Buettner P">P. Buettner</name>
</author>
<author>
<name sortKey="Flavell, C" uniqKey="Flavell C">C. Flavell</name>
</author>
<author>
<name sortKey="Ruston, S" uniqKey="Ruston S">S. Ruston</name>
</author>
<author>
<name sortKey="Coe, D" uniqKey="Coe D">D. Coe</name>
</author>
<author>
<name sortKey="O Ullivan, W" uniqKey="O Ullivan W">W. O’Sullivan</name>
</author>
<author>
<name sortKey="Mccormack, S" uniqKey="Mccormack S">S. McCormack</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Gajdosik, R L" uniqKey="Gajdosik R">R.L. Gajdosik</name>
</author>
<author>
<name sortKey="Bohannon, R W" uniqKey="Bohannon R">R.W. Bohannon</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Brosseau, L" uniqKey="Brosseau L">L. Brosseau</name>
</author>
<author>
<name sortKey="Tousignant, M" uniqKey="Tousignant M">M. Tousignant</name>
</author>
<author>
<name sortKey="Budd, J" uniqKey="Budd J">J. Budd</name>
</author>
<author>
<name sortKey="Chartier, N" uniqKey="Chartier N">N. Chartier</name>
</author>
<author>
<name sortKey="Duciaume, L" uniqKey="Duciaume L">L. Duciaume</name>
</author>
<author>
<name sortKey="Plamondon, S" uniqKey="Plamondon S">S. Plamondon</name>
</author>
<author>
<name sortKey="O Ullivan, J P" uniqKey="O Ullivan J">J.P. O’Sullivan</name>
</author>
<author>
<name sortKey="O Onoghue, S" uniqKey="O Onoghue S">S. O’Donoghue</name>
</author>
<author>
<name sortKey="Balmer, S" uniqKey="Balmer S">S. Balmer</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Wu, G" uniqKey="Wu G">G. Wu</name>
</author>
<author>
<name sortKey="Van Der Helm, F C" uniqKey="Van Der Helm F">F.C. Van Der Helm</name>
</author>
<author>
<name sortKey="Veeger, H E J" uniqKey="Veeger H">H.E.J. Veeger</name>
</author>
<author>
<name sortKey="Makhsous, M" uniqKey="Makhsous M">M. Makhsous</name>
</author>
<author>
<name sortKey="Van Roy, P" uniqKey="Van Roy P">P. Van Roy</name>
</author>
<author>
<name sortKey="Anglin, C" uniqKey="Anglin C">C. Anglin</name>
</author>
<author>
<name sortKey="Nagels, J" uniqKey="Nagels J">J. Nagels</name>
</author>
<author>
<name sortKey="Karduna, A R" uniqKey="Karduna A">A.R. Karduna</name>
</author>
<author>
<name sortKey="Mcquade, K" uniqKey="Mcquade K">K. McQuade</name>
</author>
<author>
<name sortKey="Wang, X" uniqKey="Wang X">X. Wang</name>
</author>
</analytic>
</biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="research-article">
<pmc-dir>properties open_access</pmc-dir>
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors (Basel)</journal-id>
<journal-id journal-id-type="iso-abbrev">Sensors (Basel)</journal-id>
<journal-id journal-id-type="publisher-id">sensors</journal-id>
<journal-title-group>
<journal-title>Sensors (Basel, Switzerland)</journal-title>
</journal-title-group>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>MDPI</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="pmid">26389900</article-id>
<article-id pub-id-type="pmc">4610531</article-id>
<article-id pub-id-type="doi">10.3390/s150923168</article-id>
<article-id pub-id-type="publisher-id">sensors-15-23168</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Mourcou</surname>
<given-names>Quentin</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-15-23168">1</xref>
<xref ref-type="aff" rid="af2-sensors-15-23168">2</xref>
<xref rid="c1-sensors-15-23168" ref-type="corresp">*</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Fleury</surname>
<given-names>Anthony</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-15-23168">2</xref>
<xref ref-type="author-notes" rid="fn1-sensors-15-23168"></xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Franco</surname>
<given-names>Céline</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-15-23168">1</xref>
<xref ref-type="author-notes" rid="fn1-sensors-15-23168"></xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Klopcic</surname>
<given-names>Frédéric</given-names>
</name>
<xref ref-type="aff" rid="af2-sensors-15-23168">2</xref>
<xref ref-type="author-notes" rid="fn1-sensors-15-23168"></xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Vuillerme</surname>
<given-names>Nicolas</given-names>
</name>
<xref ref-type="aff" rid="af1-sensors-15-23168">1</xref>
<xref ref-type="aff" rid="af3-sensors-15-23168">3</xref>
<xref ref-type="aff" rid="af4-sensors-15-23168">4</xref>
<xref ref-type="aff" rid="af5-sensors-15-23168">5</xref>
<xref ref-type="author-notes" rid="fn1-sensors-15-23168"></xref>
</contrib>
</contrib-group>
<contrib-group>
<contrib contrib-type="editor">
<name>
<surname>Passaro</surname>
<given-names>Vittorio M. N.</given-names>
</name>
<role>Academic Editor</role>
</contrib>
</contrib-group>
<aff id="af1-sensors-15-23168">
<label>1</label>
University of Grenoble-Alpes, AGIM, La Tronche 38700, France; E-Mails:
<email>Celine.Franco@agim.eu</email>
(C.F.);
<email>Nicolas.Vuillerme@agim.eu</email>
(N.V.)</aff>
<aff id="af2-sensors-15-23168">
<label>2</label>
University of Lille, F-59000 Lille and Mines Douai, URIA, Douai F-59508, France; E-Mails:
<email>Anthony.Fleury@mines-douai.fr</email>
(A.F.);
<email>Frederic.Klopcic@mines-douai.fr</email>
(F.K.)</aff>
<aff id="af3-sensors-15-23168">
<label>3</label>
Institut Universitaire de France, Paris 75000, France</aff>
<aff id="af4-sensors-15-23168">
<label>4</label>
LAI Jean-Raoul Scherrer, University of Geneva, 1206 Geneva Switzerland/University of Grenoble Alpes, Saint-Martin-d'Hères 38041, France</aff>
<aff id="af5-sensors-15-23168">
<label>5</label>
Laboratory for Ergonomics and Work-related Disorders, Center for Sensory-Motor Interaction (SMI), Department of Health Science and Technology, University of Aalborg, Aalborg 9220, Denmark</aff>
<author-notes>
<fn id="fn1-sensors-15-23168">
<label></label>
<p>These authors contributed equally to this work.</p>
</fn>
<corresp id="c1-sensors-15-23168">
<label>*</label>
Author to whom correspondence should be addressed; E-Mail:
<email>qmourcou@gmail.com</email>
; Tel.: +33-476-637-104; Fax: +33-476-637-466.</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>15</day>
<month>9</month>
<year>2015</year>
</pub-date>
<pub-date pub-type="collection">
<month>9</month>
<year>2015</year>
</pub-date>
<volume>15</volume>
<issue>9</issue>
<fpage>23168</fpage>
<lpage>23187</lpage>
<history>
<date date-type="received">
<day>16</day>
<month>7</month>
<year>2015</year>
</date>
<date date-type="accepted">
<day>07</day>
<month>9</month>
<year>2015</year>
</date>
</history>
<permissions>
<copyright-statement>© 2015 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2015</copyright-year>
<license>
<license-p>
<pmc-comment>CREATIVE COMMONS</pmc-comment>
This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (
<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">http://creativecommons.org/licenses/by/4.0/</ext-link>
).</license-p>
</license>
</permissions>
<abstract>
<p>Over the years, smartphones have become tools for scientific and clinical research. They can, for instance, be used to assess range of motion and joint angle measurement. In this paper, our aim was to determine if smartphones are reliable and accurate enough for clinical motion research. This work proposes an evaluation of different smartphone sensors performance and different manufacturer algorithm performances with the comparison to the gold standard, an industrial robotic arm with an actual standard use inertial motion unit in clinical measurement, an Xsens product. Both dynamic and static protocols were used to perform these comparisons. Root Mean Square (RMS) mean values results for static protocol are under 0.3° for the different smartphones. RMS mean values results for dynamic protocol are more prone to bias induced by Euler angle representation. Statistical results prove that there are no filter effect on results for both protocols and no hardware effect. Smartphones performance can be compared to the Xsens gold standard for clinical research.</p>
</abstract>
<kwd-group>
<kwd>smartphone sensing</kwd>
<kwd>IMU</kwd>
<kwd>Kalman filter</kwd>
<kwd>validation</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="sec1-sensors-15-23168">
<title>1. Introduction</title>
<p>Smartphones have become an unavoidable tool in developed countries and even an important part of life. There were more than a billion smartphones sold worldwide in 2014, a 23% increase in shipments between full year 2013 and 2014 [
<xref rid="B1-sensors-15-23168" ref-type="bibr">1</xref>
]. The sharp decline in the price of mobile equipment allows growth in emerging markets. Although they are becoming more and more affordable, mobile phones remain powerful tools composed of a processor, a graphics chip, advanced connectivity and an inertial motion unit (IMU), with a 3D-accelerometer, magnetometer and gyroscope as standard features. Moreover, smartphones contain more technology such as a screen display, an audio system or a haptic feedback system that enables interaction with the user of the device. To combine and use all these functionalities, smartphones are able to run specific software, called “applications”.</p>
<p>With all these features, smartphones have widely been used as tools for scientific and clinical research, especially in the healthcare and physical activity monitoring fields. For example, smartphone could be used to assess range of motion and joint angle measurement for postural and gait control [
<xref rid="B2-sensors-15-23168" ref-type="bibr">2</xref>
] or for joint goniometry [
<xref rid="B3-sensors-15-23168" ref-type="bibr">3</xref>
]. These applications are designed to provide accurate and reliable range of motion measurements compared to the standard tools. Current smartphone applications mainly use algorithms provided by manufacturers, which process a combination of three sensors, the accelerometer, the gyroscope and the magnetometer to compute an angle value. Although they have been directly compared to standard tools, angle measurement from a smartphone in the context of static and dynamic measurements has not been investigated yet. To the best of our knowledge, the scientific literature does not provide assessments of the performance of the tool and its sensors for the particular context of clinical measurement against a very specific gold standard, such as Kuka robot. In addition, evaluation of the performance of algorithms for calculating angles incorporated into these phones has also not yet been specifically performed. In this context, the goal of this paper is to propose an evaluation of different smartphone sensors performance and different manufacturer’s algorithm performance with the comparison to a gold standard, an industrial robotic arm and with a standardly used IMU in clinical measurement, an Xsens product. Our hypothesis is that the smartphone is able to perform measurements that are accurate enough to be used in clinical settings, in replacement of specific devices. These comparisons will justify or forgive the use of Smartphone sensors and software for clinical measurement. Furthermore, with the comparison of static and dynamic conditions, this study is intended to cover all types of clinical movements that could be performed during assessment and rehabilitation.</p>
<p>The remaining of this paper is organized as follows.
<xref ref-type="sec" rid="sec2-sensors-15-23168">Section 2</xref>
describes related works on performance evaluation of smartphone inertial sensors.
<xref ref-type="sec" rid="sec3-sensors-15-23168">Section 3</xref>
describes the materials and methods, with a description of our evaluation approach in terms of protocol and statistical analysis. Then, the effect of position and filter, and performance comparison are presented in
<xref ref-type="sec" rid="sec4-sensors-15-23168">Section 4</xref>
and discussed in
<xref ref-type="sec" rid="sec5-sensors-15-23168">Section 5</xref>
. Conclusions are finally drawn in
<xref ref-type="sec" rid="sec6-sensors-15-23168">Section 6</xref>
.</p>
</sec>
<sec id="sec2-sensors-15-23168">
<title>2. Related Works </title>
<p>All sensor-based applications bring innovation in research and will lead to cognitive-phone, which will infer human behavior and context to give specific help to the patient [
<xref rid="B4-sensors-15-23168" ref-type="bibr">4</xref>
]. This evolution could be characterized as Ambient Intelligence, the basic idea of which is to enrich the environment with smart technologies [
<xref rid="B5-sensors-15-23168" ref-type="bibr">5</xref>
]. Ambient Intelligence systems have to be sensitive, responsive, adaptive, transparent, ubiquitous and intelligent. Among these smart technologies, the smartphone could take a significant place and play a major role insofar as it is becoming increasingly used in everyday life. Nowadays, sensor fusion algorithms integrated in smartphones can be used for clinical research, to sense human body motions in Activities of Daily Living (ADL) [
<xref rid="B6-sensors-15-23168" ref-type="bibr">6</xref>
] to assess range of motion and joint angle measurement for postural and gait control [
<xref rid="B2-sensors-15-23168" ref-type="bibr">2</xref>
], for joint goniometry [
<xref rid="B3-sensors-15-23168" ref-type="bibr">3</xref>
], and even for fall detection [
<xref rid="B7-sensors-15-23168" ref-type="bibr">7</xref>
]. The use of a smartphone for fall detection is an example of the multiple possible uses of these different sensors. An accelerometer is used by all smartphone fall detection and prevention solutions but their dynamic ranges are often insufficient [
<xref rid="B8-sensors-15-23168" ref-type="bibr">8</xref>
]. Thus, the quality of sensors is crucial when using a smartphone for clinical purposes. To perform angle measurements, such as range of motion, an accelerometer can be used alone to measure tilt angle, but it is only reliable when the smartphone is static. To get accurate angle measurement in dynamic, Williamson and Andrews combined accelerometers with gyroscopes, which are insensitive to the influence of gravity [
<xref rid="B9-sensors-15-23168" ref-type="bibr">9</xref>
]. Repeated sit-to-stand and stand-to-sit movements were performed to lead to that conclusion. Then, to measure the horizontal component of orientation, Kemp
<italic>et al.</italic>
combined accelerometers and magnetometer to monitor body position [
<xref rid="B10-sensors-15-23168" ref-type="bibr">10</xref>
,
<xref rid="B11-sensors-15-23168" ref-type="bibr">11</xref>
,
<xref rid="B12-sensors-15-23168" ref-type="bibr">12</xref>
]. Moreover, we find that, in the literature concerning the angular measurement using Smartphone, proofs of concept only verify the concordance of the measurements in specific contexts and not the global performance and accuracy of smartphones sensors (checking for instance that they can detect sit-to-stand or that the measurement of the movement gives relatively the same information in terms for instance of Root Mean Square (RMS) through different trials). To the best of our knowledge, the existing literature does not provide any information regarding the performance of the inertial sensors and the reliability of the algorithms provided by the smartphone manufacturer to perform angle measurements that are clinically acceptable. The present study was hence designed to address this lack of information. Our goal was to propose an assessment of different smartphone sensors and different manufacturer’s algorithm performances. It evaluates three best-selling smartphones (Apple iPhone 4, Apple iPhone 5S and Samsung Galaxy Nexus), which are still widely used in research, teaching, and in industrial applications. Their sensors and embedded software are also available in a wide variety of other smartphones on the market. To perform angle measurement, we used some algorithms that are state-of-the art and are available for all scientific community [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
] but also the algorithms that are given by the two major manufacturers of smartphone inside the Software Development Kit (SDK) of their Operating System. Such evaluations are crucially needed to allow or not the use of smartphones internal sensors and manufacturer’s or Attitude and Heading Reference System (AHRS) algorithms implemented on smartphones to perform clinical angle measurement compared to specific tool, which are more precise than standard clinical tools.</p>
</sec>
<sec id="sec3-sensors-15-23168">
<title>3. Materials and Method</title>
<sec id="sec3dot1-sensors-15-23168">
<title>3.1. Material</title>
<sec id="sec3dot1dot1-sensors-15-23168">
<title>3.1.1. Smartphones</title>
<p>The smartphone market can be complex because it includes different manufacturers and different software providers. In order to cover the majority (in terms of number of units sold) of this market, we have chosen to select three different and representative smartphones from the two largest sellers (Apple and Samsung) and which contains different sensors and software.</p>
<p>The first Smartphone tested is an Apple iPhone 4 equipped with (1) a 3D accelerometer (ST-Microelectronics, LIS331DLH, Geneva, Switzerland), (2) an integrated 3D gyroscope (ST-Microelectronics, L3G200D, Geneva, Switzerland), and (3) a 3D magnetometer (Asahi Kasei Microdevices, AKM8975, Nobeoka, Japan). This device runs, for these tests, iOS 7 operating system with our homemade software. This software is nothing more than a simple graphical interface that collects the data using different algorithms (embedded or given by the OS) using selected frequency and conditions. All data are saved in a Comma Separated Values (CSV)-like file for future use and statistics. </p>
<p>The second Smartphone tested is an Apple iPhone 5S equipped with (1) a 3D accelerometer (Bosch Sensortec BMA220, Gerlingen, Germany), (2) an integrated 3D gyroscope (ST-Microelectronics, L3G4200DH, Geneva, Switzerland), and (3) a 3D magnetometer (AKM, AK8963, Tokyo, Japan). The device also runs iOS 7 operating system and our homemade software.</p>
<p>The third Smartphone tested is a Samsung Galaxy Nexus equipped with (1) a 3D accelerometer (Bosch Sensortec BMA220, Gerlingen, Germany), (2) an integrated 3D gyroscope (InvenSens, MPU-3050, San Jose, CA, USA), and (3) a 3D magnetometer (Yamaha, YAS530, Shizuoka, Japan). The device runs Android 4.3 Jelly Bean operating system with our homemade software.</p>
</sec>
<sec id="sec3dot1dot2-sensors-15-23168">
<title>3.1.2. Xsens</title>
<p>Xsens IMU are commonly used in motion sensing applications, and as the gold standard for much scientific research [
<xref rid="B14-sensors-15-23168" ref-type="bibr">14</xref>
,
<xref rid="B15-sensors-15-23168" ref-type="bibr">15</xref>
,
<xref rid="B16-sensors-15-23168" ref-type="bibr">16</xref>
,
<xref rid="B17-sensors-15-23168" ref-type="bibr">17</xref>
]. Motion Trackers MTx are the selected devices for this experiment. It contains all solid-state miniature MEMS inertial sensors inside (accelerometer, magnetometer and gyroscope). Their static accuracy for roll and pitch is under 0.5° and for yaw under 1° according to the manufacturer. Data are collected using the given Xsens MT Software.</p>
</sec>
<sec id="sec3dot1dot3-sensors-15-23168">
<title>3.1.3. Robot</title>
<p>The robot used for the experiment is a KR5-SIXX-R650 manufactured by Kuka (
<xref ref-type="fig" rid="sensors-15-23168-f001">Figure 1</xref>
). This robot is a 6-axis jointed-arm robot made of cast light alloy. It consists, from bottom to top, of a base frame with a rotated column, then a link arm, the arm and finally an in-line wrist. We used, for pitch, the A5 axis, for roll the A4 axis and for yaw the A6 axis. The range of motion is about ±120° for A5, ±190° for A4 and ±358° for A6.The speed with rated payload of 5 Kg is about 410°/s for A4 and A5 and 660°/s for the last axis. Repeatability accuracy is ±0.02 mm according to the manufacturer [
<xref rid="B18-sensors-15-23168" ref-type="bibr">18</xref>
].</p>
<fig id="sensors-15-23168-f001" position="float">
<label>Figure 1</label>
<caption>
<p>KR5-SIXX-R650 Axis. Provided by KR 5 sixx R650, R850 Specification manual.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g001"></graphic>
</fig>
</sec>
</sec>
<sec id="sec3dot2-sensors-15-23168">
<title>3.2. Angle Estimation</title>
<p>From accelerometer, magnetometer and gyroscope, we can obtain raw measurements for acceleration, ambient geomagnetic field and angular velocity, respectively. However, to compute orientation estimation, none of these sensors bring noiseless information. With these three sensors, we are able to build an AHRS (Attitude and Heading Reference System) in which each sensor will compensate for the bias induced by others. Thus, the Earth gravitational and magnetic fields, respectively, measured by accelerometer and magnetometer, will be merged with angular velocity from gyroscope to compute a single and complete estimate of orientation angles. This solution is provided by orientation filter, among which we can mention the Complementary filter [
<xref rid="B19-sensors-15-23168" ref-type="bibr">19</xref>
], the Kalman filter [
<xref rid="B20-sensors-15-23168" ref-type="bibr">20</xref>
], the Mahony filter [
<xref rid="B21-sensors-15-23168" ref-type="bibr">21</xref>
] and the Madgwick filter [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
]. Orientation estimation is similar to evaluation of the kinematic equation for the rotation of the device. Filter task is to compute, from a given rotation, an improved estimated attitude. Thus, filter computes estimated attitude as the rate of change of original attitude measured by gyroscope with the magnitude of the gyroscope measurement error, which is removed in the direction of the estimated error computed from accelerometer and magnetometer measurements [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
]. To improve it, magnetic distortion and gyroscope bias drift has to be compensated. The approaches of Kalman, Madgwick and Mahony differ on the resolution of these biases. For example, Mahony uses a proportional and integral controller to correct gyroscope bias, while Madgwick uses only a proportional controller. Block diagram representation for common orientation filter is presented in
<xref ref-type="fig" rid="sensors-15-23168-f002">Figure 2</xref>
. All these three filters use a quaternion representation. It is a four-dimensional complex number representing the orientation of the device. Although easier to calculate and more efficient, quaternion are less human understandable than Euler angles, which is the representation used in kinematic and clinical field. Compared to quaternion, Euler angles are subject to ambiguity and gimbal lock, two known problems of this representation that have been taken into account in out protocol of measurement. Gimbal lock is a singularity that appears when two axes of the object have parallel orientation. It causes the loss of one degree of freedom and thus a measurement inaccuracy. In order to be as comprehensive as possible, we have chosen, for each device, to compare the filter proposed by the manufacturer with both Madgwick and Mahony filters.</p>
<fig id="sensors-15-23168-f002" position="float">
<label>Figure 2</label>
<caption>
<p>Block diagram representation of a common orientation filter using accelerometer, magnetometer and gyroscope data.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g002"></graphic>
</fig>
</sec>
<sec id="sec3dot3-sensors-15-23168">
<title>3.3. Filters Implementation Algorithms</title>
<p>In order to collect data from the different smartphones, we built, for each operating system, a dedicated application to collect, at a 50 Hz frequency, acceleration force in m/s², geomagnetic field in µT and angular rate in rad/s for the three physical axes of device (
<italic>x</italic>
,
<italic>y</italic>
,
<italic>z</italic>
). In addition, we collected, at the same frequency, Euler angles values from filters provided by manufacturers, using the methodology described in the respective documentations. Other filters (Madgwick and Mahony) are then calculated from the raw values and converted from quaternion to Euler angles following algorithms described in the next section. Thereby, our dedicated application is able to collect orientation data from three different filters: manufacturer filter, Madgwick algorithm and Mahony filter. All filters use the same raw data provided by the smartphone’s internal sensors, and the raw and filtered values are saved at the same time. Computation of Madgwick and Mahony filters with Xsens raw data were performed with Matlab software (Mathworks, MA, USA) using the source code provided by Madgwick [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
].</p>
<sec id="sec3dot3dot1-sensors-15-23168">
<title>3.3.1. Mahony Filter</title>
<p>To implement Mahony Filter on iOS or Android operating systems, sample code provided by Madgwick in C and MatLab languages were used and converted. In both systems, we created a method that takes as arguments all raw data from gyroscope, accelerometer and magnetometer and the previous estimate of orientation. This method is executed at the sampling rate of 50 Hz using the dedicated methods to obtain precision timers for each OS. The following formulas used the same notation as Madgwick [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
].
<inline-formula>
<mml:math id="mm1">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>A</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>B</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
describes the orientation of frame B relative to frame A and
<inline-formula>
<mml:math id="mm2">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>A</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
is a vector described in frame A. Algorithm begins with the normalization of accelerometer measurement and magnetometer measurement. To perform normalization and keep efficiency of computation, the fast inverse square root is used to product our normalized unit vector for both measurements as Equation (1):
<disp-formula id="FD1">
<label>(1)</label>
<mml:math id="mm3">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>x</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>v</mml:mi>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
where
<inline-formula>
<mml:math id="mm4">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm5">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm6">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
are axis of frames from sensors. Then,
<inline-formula>
<mml:math id="mm7">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
,
<inline-formula>
<mml:math id="mm8">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
and
<inline-formula>
<mml:math id="mm9">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>v</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
are multiplied by
<inline-formula>
<mml:math id="mm10">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
. After that, the measured direction of the earth’s magnetic field in the earth frame,
<inline-formula>
<mml:math id="mm11">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
, is calculated as suggested and described [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
]. It is the quaternion product of the previous estimate of orientation with the normalized magnetometer measurement and with the quaternion conjugate of the previous estimate of orientation, Equation (2). The
<inline-formula>
<mml:math id="mm12">
<mml:mo></mml:mo>
</mml:math>
</inline-formula>
operator denotes a quaternion product and the hat on h,
<inline-formula>
<mml:math id="mm13">
<mml:mover accent="true">
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
</mml:math>
</inline-formula>
, denotes a normalized vector of unit length.
<disp-formula id="FD2">
<label>(2)</label>
<mml:math id="mm14">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>m</mml:mi>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>s</mml:mi>
</mml:mmultiscripts>
</mml:mrow>
<mml:msub>
<mml:mrow></mml:mrow>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:msub>
<mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>The effect of an erroneous inclination of the measured direction of the Earth magnetic field is corrected using
<inline-formula>
<mml:math id="mm15">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
which is the normalization of
<inline-formula>
<mml:math id="mm16">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>h</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</inline-formula>
to have only components in the earth frame x and z axes Equation (3).
<disp-formula id="FD3">
<label>(3)</label>
<mml:math id="mm17">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtext> 0</mml:mtext>
<mml:mo></mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mi>h</mml:mi>
<mml:mi>x</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>h</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:msqrt>
<mml:mtext></mml:mtext>
<mml:mn>0</mml:mn>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Then, the estimated direction of gravity Equation (5) and magnetic field Equation (6) are calculated as follows, using Equation (4) as quaternion definition:
<disp-formula id="FD4">
<label>(4)</label>
<mml:math id="mm18">
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mtext></mml:mtext>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mtext></mml:mtext>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
</mml:msub>
<mml:mtext></mml:mtext>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD5">
<label>(5)</label>
<mml:math id="mm19">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mtext></mml:mtext>
<mml:mn>2</mml:mn>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mtext></mml:mtext>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD6">
<label>(6)</label>
<mml:math id="mm20">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>w</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>0.5</mml:mtext>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mn>2</mml:mn>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>2</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>1</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mtext>2</mml:mtext>
<mml:mo>×</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mtext>4</mml:mtext>
</mml:msub>
<mml:mo>×</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext>0.5</mml:mtext>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>2</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mtext>3</mml:mtext>
<mml:mtext>2</mml:mtext>
</mml:msubsup>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Next, the computed and estimated error is the sum of cross product between estimated direction and measured direction of field vectors Equation (7).
<disp-formula id="FD7">
<label>(7)</label>
<mml:math id="mm21">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>+</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>w</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>After that, the specificity of this filter is to apply an integral (calculated with Equation (8)) and a proportional controller to correct gyroscope bias, Equation (9), where
<inline-formula>
<mml:math id="mm22">
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:math>
</inline-formula>
is the sample rate (50 Hz).
<disp-formula id="FD8">
<label>(8)</label>
<mml:math id="mm23">
<mml:mrow>
<mml:msub>
<mml:mi>i</mml:mi>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mi>i</mml:mi>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>+</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mi>s</mml:mi>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD9">
<label>(9)</label>
<mml:math id="mm24">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>g</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>g</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>+</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>+</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>i</mml:mi>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Finally, the rate of changes of quaternion Equations (10) and (11) is integrated, normalized and converted to Euler in order to compare these measurements with Euler angle measurements from Madgwick and manufacturer’s filters.
<disp-formula id="FD10">
<label>(10)</label>
<mml:math id="mm25">
<mml:mrow>
<mml:mi>q</mml:mi>
<mml:mi>D</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mo></mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:msub>
<mml:mover accent="true">
<mml:mi>g</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:mi>t</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD11">
<label>(11)</label>
<mml:math id="mm26">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>=</mml:mo>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>S</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>E</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mtext>1</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mo>+</mml:mo>
<mml:mo></mml:mo>
<mml:mi>q</mml:mi>
<mml:mi>D</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mo>×</mml:mo>
<mml:mo></mml:mo>
<mml:mi>s</mml:mi>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
</sec>
<sec id="sec3dot3dot2-sensors-15-23168">
<title>3.3.2. Madgwick Filter</title>
<p>To implement the Madgwick filter on Android and iOS operating systems, sample code provided by Madgwick in C and MatLab languages are also used. A method that takes as arguments all raw data from gyroscope, accelerometer and magnetometer and the previous estimate of orientation was created. This method is executed at the sampling rate of 50 Hz, as Mahony and manufacturer’s methods. The algorithm begins with the normalization of accelerometer and magnetometer measurements, using the same methodology as
<xref ref-type="sec" rid="sec3dot3dot1-sensors-15-23168">Section 3.3.1</xref>
. The measured direction of the Earth magnetic field in the earth frame and the effect of an erroneous inclination of the measured direction Earth magnetic field are calculated using this same methodology, too. Then, a gradient descent algorithm corrective step is used, as described in [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
]. This is the specificity of this filter compared to Mahony filter. The gradient descent algorithm corrective step yields to the simplified objective function and Jacobian defined by Equations (12) and (13).
<disp-formula id="FD12">
<label>(12)</label>
<mml:math id="mm27">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>m</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD13">
<label>(13)</label>
<mml:math id="mm28">
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>4</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>z</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>To provide a unique orientation, Equations (14) and (15) combines the measurement of gravity and the Earth’s magnetic field.
<disp-formula id="FD14">
<label>(14)</label>
<mml:math id="mm29">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>a</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>m</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>g</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>a</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>b</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>m</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="FD15">
<label>(15)</label>
<mml:math id="mm30">
<mml:mrow>
<mml:msub>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>J</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mi>J</mml:mi>
<mml:mi>b</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</p>
<p>Next step is the multiplication of Equations (14) and (15), and a normalization of the result. Then, to apply feedback step (estimation of the error for further more efficient correction), this result is multiplied by the algorithm adjustable parameter, a proportional controller, which represent the gyroscope measurement error expressed as the magnitude of a quaternion derivative. Then, to compute rate of change, result is subtracted from the rate of change of orientation measured by the gyroscopes (Equation (16)).
<disp-formula id="FD16">
<label>(16)</label>
<mml:math id="mm31">
<mml:mrow>
<mml:mi>q</mml:mi>
<mml:mi>D</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn>
<mml:mo>×</mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mmultiscripts>
<mml:msub>
<mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mi>g</mml:mi>
<mml:mo stretchy="false">^</mml:mo>
</mml:mover>
<mml:none></mml:none>
<mml:none></mml:none>
<mml:mprescripts></mml:mprescripts>
<mml:none></mml:none>
<mml:mi>E</mml:mi>
</mml:mmultiscripts>
<mml:msub>
<mml:mrow></mml:mrow>
<mml:mi>t</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>β</mml:mi>
<mml:mo>×</mml:mo>
<mml:msup>
<mml:mi>s</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</disp-formula>
Where
<inline-formula>
<mml:math id="mm32">
<mml:mi>β</mml:mi>
</mml:math>
</inline-formula>
is the proportional controller and
<inline-formula>
<mml:math id="mm33">
<mml:mrow>
<mml:msup>
<mml:mi>s</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</inline-formula>
is the transpose result of the multiplication of Equations (14) and (15). Finally, rate of change of quaternion is integrated, normalized and converted to Euler angles.</p>
</sec>
</sec>
<sec id="sec3dot4-sensors-15-23168">
<title>3.4. Method</title>
<sec id="sec3dot4dot1-sensors-15-23168" sec-type="methods">
<title>3.4.1. Global Methodology</title>
<p>To perform evaluation of smartphone sensors hardware and angle measurement algorithm precision, we reproduced some angular movements on two axes, pitch and roll. All tested devices were fixed on the Kuka robotic arm that reproduced the angular movement (
<xref ref-type="fig" rid="sensors-15-23168-f003">Figure 3</xref>
). The Kuka KR5-SIXX-R650 system is used as the gold standard. Generally, optical motion analysis is more often used as the gold standard [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
,
<xref rid="B14-sensors-15-23168" ref-type="bibr">14</xref>
]. However, Kuka robotic arm is more accurate than the Optotrak optical motion capture system from Northern Digital, Waterloo, ON, Canada) [
<xref rid="B14-sensors-15-23168" ref-type="bibr">14</xref>
] or the VICON, Oxford, UK, 612 [
<xref rid="B13-sensors-15-23168" ref-type="bibr">13</xref>
] and it is a system that can perform various movements with fixed smartphones and Xsens at its extremity. We performed two different and complementary protocols (
<italic>cf.</italic>
<xref ref-type="sec" rid="sec3dot4dot2-sensors-15-23168">Section 3.4.2</xref>
and
<xref ref-type="sec" rid="sec3dot4dot3-sensors-15-23168">Section 3.4.3</xref>
) specifically designed to evaluate (1) the effect of the position of the smartphone on the Kuka robotic arm and repeatability of the measurement; and (2) the sensors and software accuracy performance (on smartphones and Xsens) compared to Kuka robotic arm, which is our gold standard, respectively.</p>
<fig id="sensors-15-23168-f003" position="float">
<label>Figure 3</label>
<caption>
<p>Picture showing the two smartphones superimposed mounted on the robotic arm.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g003"></graphic>
</fig>
</sec>
<sec id="sec3dot4dot2-sensors-15-23168">
<title>3.4.2. Protocol 1: Effect of the Position on Kuka Robotic Arm and Repeatability</title>
<p>In order to evaluate the effect of the device position on the Kuka robotic arm extremity and validate Protocol 2, the following Protocol 1 has been established. The Kuka robotic arm replicates measurements of angles from 0 to 180°, with a step of 5°, with stop of ten seconds at each position. This protocol was carried out 6 times for each axis (pitch and roll) and measurements were performed with only one filter, the OS filter of the iPhone 5S in iOS 7 operating system. It was executed under the following four conditions: (1) the hull of the smartphone is centered on the robot (iPhone 5S centered); (2) two smartphones, connected back to back with elastic, are centered on the robot arm (iPhone 5S with Galaxy Nexus); (3) smartphone is positioned on the arm at the location of its sensors (iPhone 5S centered on sensors); and (4) the smartphone is positioned in the opposite direction of the first condition (iPhone 5S in opposite direction).</p>
</sec>
<sec id="sec3dot4dot3-sensors-15-23168">
<title>3.4.3. Protocol 2: Devices Performance Compared to Gold Standard</title>
<p>The aim is to compare, at the same time, accuracy performance from Smartphones and Xsens sensors, and to compare all previously described (
<xref ref-type="sec" rid="sec3dot2-sensors-15-23168">Section 3.2</xref>
) AHRS filters together. It has been done with respect to Kuka robotic arm, as gold standard, for the following static and dynamic conditions. For dynamic condition, the effect of velocity is also studied.
<list list-type="bullet">
<list-item>
<p>The static state measure consists in replicating measurements of angles from 0 to 180°, with a step of 5° and a stop of ten seconds at each position. This protocol was carried out 6 times for each axis.</p>
</list-item>
<list-item>
<p>The dynamic state measure consists in replicating measurements from 0 to 180°, with a step of 45° at rates of 20% and 50% of the maximum speed of the robot and with stop of ten seconds at each position. This protocol was also carried out 6 times for each axis and each speed.</p>
</list-item>
</list>
</p>
</sec>
</sec>
<sec id="sec3dot5-sensors-15-23168">
<title>3.5. Analysis</title>
<p>The accuracies of the smartphones and Xsens were assessed by computing, for each filter and devices in both protocols, the Root Mean Square (RMS) between angle estimation of devices and the gold standard. Gold standard was the theoretical set, whereas smartphone and Xsens measurements were variable set that we wanted to compare to this set. Thus, the RMS of the pairwise differences can serve as a measure of how far on average the error is from zero. RMS values were calculated for the six trials on three hundred samples. Note that such an analysis is widely used in the scientific literature [
<xref rid="B22-sensors-15-23168" ref-type="bibr">22</xref>
,
<xref rid="B23-sensors-15-23168" ref-type="bibr">23</xref>
,
<xref rid="B24-sensors-15-23168" ref-type="bibr">24</xref>
].</p>
<p>A Kruskal–Wallis test was then used to evaluate the effect of position (in Protocol 1) by determining if RMS values from all the four conditions come from the same distribution and could be interpreted as similar. The Kruskal–Wallis non-parametric test is used when we are dealing with k independent samples (in our protocol, four samples of measures taken in four different positions) to determine if the samples come from the same distribution or at least one sample from a different distribution of others.</p>
<p>For performance comparison of sensors accuracy and its dependence on the filter, we have computed and compared, for each device and each filter, the RMS of the difference of the measurement and of the gold standard [
<xref rid="B22-sensors-15-23168" ref-type="bibr">22</xref>
,
<xref rid="B23-sensors-15-23168" ref-type="bibr">23</xref>
,
<xref rid="B24-sensors-15-23168" ref-type="bibr">24</xref>
], for both static and dynamic protocols (Protocol 2). A Wilcoxon signed-rank test was used to evaluate the impact of velocity in the dynamic one. Then, a Kruskal–Wallis test was used to compare filters together for each device in each condition. We compared three samples of measurements taken with three different filters to determine if samples come from the same distribution. The best filter is then selected to evaluate Smartphone devices samples distribution relative to Xsens using, again, a Kruska–Wallis test.</p>
</sec>
</sec>
<sec id="sec4-sensors-15-23168">
<title>4. Results</title>
<sec id="sec4dot1-sensors-15-23168">
<title>4.1. Protocol 1: Effect of the Position on Kuka Robotic Arm and Repeatability</title>
<p>To ensure the repeatability of the measure, a Kruskal–Wallis test was used for all six trials to compare the medians of RMS values from each condition to determine if there is a smartphone positioning effect on the robot arm. RMS was calculated for 27 angle values, avoiding values near 90° in order to prevent Gimbal lock effect. RMS values for roll and pitch, from manufacturer filter, are respectively presented in
<xref ref-type="table" rid="sensors-15-23168-t001">Table 1</xref>
and
<xref ref-type="table" rid="sensors-15-23168-t002">Table 2</xref>
. For all conditions in the roll axis, no significant difference is observed (
<italic>p</italic>
> 0.01) in RMS for each trial against each other. For pitch axis, significant difference is observed (
<italic>p</italic>
< 0.01) in RMS for the condition where Smartphone is positioned on the arm at the location of its sensors.</p>
<table-wrap id="sensors-15-23168-t001" position="float">
<object-id pub-id-type="pii">sensors-15-23168-t001_Table 1</object-id>
<label>Table 1</label>
<caption>
<p>Effect of position, Root Mean Square (RMS) (variance | min–max) for roll in degrees.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1"></th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S Alone</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S with Galaxy Nexus</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S (Opposite Direction)</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S (Centered on Sensors)</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.004 | 0–0.23)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.09 (0.011 | 0.02–0.32)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.009 | 0–0.34)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.06 (0.010 | 0–0.43)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.004 | 0–0.21)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.012 | 0–0.32)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.009 | 0–0.33)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.06 (0.010 | 0–0.41)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.004 | 0–0.26)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.009 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.008 | 0–0.35)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.06 (0.010 | 0–0.38)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.004 | 0–0.26)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.009 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.007 | 0–0.30)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.06 (0.010 | 0–0.40)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.005 | 0–0.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.009 | 0–0.26)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.008 | 0–0.31)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.010 | 0–0.42)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Trial 6</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.05 (0.006 | 0–0.27)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.07 (0.008 | 0–0.26)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.06 (0.008 | 0–0.37)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.06 (0.011 | 0–0.44)</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-15-23168-t002" position="float">
<object-id pub-id-type="pii">sensors-15-23168-t002_Table 2</object-id>
<label>Table 2</label>
<caption>
<p>Effect of position, RMS (min–max) for pitch in degrees. Bold typesetting indicates a statistically significant difference with the gold standard (
<italic>p</italic>
< 0.01).</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin;border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1"></th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin;border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S alone</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin;border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S with Galaxy Nexus</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin;border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S (Opposite Direction)</th>
<th align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin;border-top:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">iPhone 5S Centered on Sensors</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 1</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.006 | 0–0.29)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.09 (0.011 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.25)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.12 (0.011 | 0–0.31)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 2</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.010 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.24)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11 (0.010 | 0–0.32)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 3</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.011 | 0–0.31)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.26)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11 (0.009 | 0–0.31)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 4</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.006 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.011 | 0–0.30)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0.005 | 0–0.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11 (0.010 | 0–0.28)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Trial 5</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.006 | 0–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0.011 | 0–0.30)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.05 (0.005 | 0–0.29)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11 (0.010 | 0.01–0.29)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">Trial 6</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">0.05 (0.006 | 0–0.28)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">0.08 (0.012 | 0–0.33)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">0.04 (0.005 | 0–0.28)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-bottom:solid thin" rowspan="1" colspan="1">0.11 (0.009 | 0–0.26)</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="sec4dot2-sensors-15-23168">
<title>4.2. Protocol 2: Devices Performance Compared to Gold Standard</title>
<sec id="sec4dot2dot1-sensors-15-23168">
<title>4.2.1. Static Protocol</title>
<p>
<xref ref-type="fig" rid="sensors-15-23168-f004">Figure 4</xref>
provides an example of a collected signal for each filter in the case of the Galaxy Nexus device.
<xref ref-type="table" rid="sensors-15-23168-t003">Table 3</xref>
shows the results for the four devices. As it can be seen in both the figure and table, for the Android Device, OS algorithm is noisier than the others (due to the kind of filter used by Android, more sensitive to integrative noise). RMS, between angle estimation of devices and the gold standard, and variance are presented. RMS and variance were calculated for 27 absolute angle values, avoiding values near 90° in order to prevent Gimbal lock effect in static protocol.
<xref ref-type="fig" rid="sensors-15-23168-f005">Figure 5</xref>
shows the results from the Kruskal–Wallis test that compares Xsens RMS obtained for pitch and roll with smartphones devices.</p>
<fig id="sensors-15-23168-f004" position="float">
<label>Figure 4</label>
<caption>
<p>Signals measured during the static protocol for the second and the third targeted angles.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g004"></graphic>
</fig>
<p>
<xref ref-type="table" rid="sensors-15-23168-t003">Table 3</xref>
presents the values of the results obtained for both roll and pitch angles on the static protocol. We can note, from these results, that all the three smartphones give very good results. For roll angle, RMS is under 0.2° for all the filters and all the smartphones. There are no significant differences between the devices. iPhone 4 is better than the two others smartphones (it has been selected for this test as it includes the “old” generation of sensors of iPhone devices). Xsens sensors are, even with the manufacturer filter, over 0.2°. For the post-processing of Xsens data, the results are largely over the others (greater than 0.5°). We do not have any explanation, but we could infer that a different correction is perhaps done in the internal algorithm for the roll axis, as this effect is not present on the pitch one. As far as pitch angle is concerned, the results are almost the same. The results are also very positive, with a RMS value lower than 0.3° for all the sensors. iPhone 4 is still better than the others.</p>
<table-wrap id="sensors-15-23168-t003" position="float">
<object-id pub-id-type="pii">sensors-15-23168-t003_Table 3</object-id>
<label>Table 3</label>
<caption>
<p>Static protocol results, mean (min–max), for roll and pitch in degrees. Bold typesetting indicates a statistically significant difference between filters for a given manufacturer (
<italic>p</italic>
< 0.01).</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th colspan="2" rowspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin"></th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-right:solid thin;border-bottom:solid thin" rowspan="1">Roll</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">Pitch</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">Variance</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Variance</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Nexus</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.16 (0.05–0.42)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.36 (0.33–0.39)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.21 (0.07–0.35)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.42 (0.38–0.47)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.19 (0.07–0.42)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.21 (0.06–0.62)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01 (0.01–0.01)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.16 (0.05–0.38)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.25 (0.05–0.50)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.01 (0.01–0.01)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 5S</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.15 (0.02–0.48)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.13 (0.02–0.24)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0.01)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.14 (0.03–0.47)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.01 (0–0.01)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.29 (0.05–0.55)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0.02)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.13 (0–0.50)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.02 (0–0.09)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.17 (0.03–0.29)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0 (0.01–0.01)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 4</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.07 (0.01–0.18)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.02 (0–0.17)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<bold>0.08 (0.01–0.16)</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.36 (0–1.12)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.10 (0.01–0.17)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.55 (0–1.57)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">
<bold>0.13 (0.02–0.63)</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.08 (0–0.39)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.12 (0.01–0.61)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.09 (0–0.42)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.09 (0.01–0.16)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.56 (0–1.58)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Xsens</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.22 (0.08–0.36)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0.01)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.22 (0.11–0.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0.01)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.57 (0.02–3.44)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.05 (0–0.62)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.16 (0.05–0.29)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0.03)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.68 (0.02–5.45)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.08 (0–1.26)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.10 (0.03–0.18)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0 (0–0.02)</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Concerning the influence of the filter, a Kruskal–Wallis test was done to compare, for a given manufacturer, the effect of the different algorithms. Only one significant difference was reported in the case of the iPhone 4 between the manufacturer filter and the Madgwick filter. There is no difference between the different filters for each device in the other cases.</p>
<p>Kruskal–Wallis test that compares Xsens manufacturer RMS results for pitch and roll with smartphones devices (
<xref ref-type="fig" rid="sensors-15-23168-f005">Figure 5</xref>
) indicate no significant differences between devices.</p>
<fig id="sensors-15-23168-f005" position="float">
<label>Figure 5</label>
<caption>
<p>Kruskal–Wallis test result for Xsens roll and pitch Root Mean Square (RMS) compared to Galaxy Nexus, iPhone 5S and iPhone 4 obtained for the static protocol.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g005"></graphic>
</fig>
</sec>
<sec id="sec4dot2dot2-sensors-15-23168">
<title>4.2.2. Dynamic Protocol</title>
<p>
<xref ref-type="table" rid="sensors-15-23168-t004">Table 4</xref>
and
<xref ref-type="table" rid="sensors-15-23168-t005">Table 5</xref>
show the results for the five devices for two different speeds during the dynamical protocol for, respectively, roll and pitch angles. Root mean square, between angle estimation of devices and the gold standard, and variance are presented.
<xref ref-type="fig" rid="sensors-15-23168-f006">Figure 6</xref>
show result from the Kruskal–Wallis test that compare Xsens RMS result for pitch and roll with smartphones devices for rate of 50% of the maximum velocity.</p>
<table-wrap id="sensors-15-23168-t004" position="float">
<object-id pub-id-type="pii">sensors-15-23168-t004_Table 4</object-id>
<label>Table 4</label>
<caption>
<p>Dynamic protocol results, mean (min–max), for roll at rates of 20% and 50% of the maximum velocity in degrees.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th colspan="2" rowspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin"></th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-right:solid thin;border-bottom:solid thin" rowspan="1">20%</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">50%</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">Variance</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Variance</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Nexus</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.55 (0.64–3.51)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.34 (0.31–0.38)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.57 (0.81–3.43)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.15 (0.59–4.37)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.36 (0.39–7.95)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.02 (0–0.06)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.84 (0.58–6.23)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.90 (0.12–2.65)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3.56 (0.69–8.24)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.03 (0–0.08)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3.44 (0.67–7.73)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.99 (0.13–3.21)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 5S</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.75 (0.32–1.33)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.78 (0.32–1.29)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0.02)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">8.05 (3.09–15.96)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.73 (0.02–2.11)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">8.70 (2.77–17.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.99 (0.04–2.75)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">2.42 (0.29–4.54)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">3.60 (0–14.11)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">4.16 (0.71–7.57)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">6.09 (0.02–23.94)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 4</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.57 (0.55–11.03)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.55 (0.02–1.27)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.52 (0.66–10.80)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.48 (0.02–1.06)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">6.99 (0.91–17.92)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">1.89 (0–7.56)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">8.16 (0.95–20.35)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.05 (0.01–3.66)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">7.02 (0.95–17.97)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">2.94 (0–11.74)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">8.76 (1.02–21.35)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3.99 (0.01–15.90)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Xsens</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.21 (0.84–4.29)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.55 (0.84–4.99)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.01 (0–0.03)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">10.39 (1.05–21.04)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">1.28 (0–4.78)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">10.51 (0.62–21.99)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.24 (0–6.48)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">3.93 (1.40–8.00)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">7.49 (0–29.96)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">6.94 (1.33–14.20)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">26.79 (0–107.16)</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="sensors-15-23168-t005" position="float">
<object-id pub-id-type="pii">sensors-15-23168-t005_Table 5</object-id>
<label>Table 5</label>
<caption>
<p>Dynamic protocol results, mean (min–max), for pitch at rates of 20% and 50% of the maximum velocity in degrees.</p>
</caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th colspan="2" rowspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin"></th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-right:solid thin;border-bottom:solid thin" rowspan="1">20%</th>
<th colspan="2" align="center" valign="middle" style="border-top:solid thin;border-bottom:solid thin" rowspan="1">50%</th>
</tr>
<tr>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">Variance</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">RMS</th>
<th align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Variance</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Nexus</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.29 (1.25–3.77)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">3.74 (1.01–6.93)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.00 (0.71–3.48)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.42 (0.64–3.10)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.88 (1.61–4.78)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">2.66 (0.79–5.41)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.65 (0.77–4.15)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.68 (0.03–3.53)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">5.64 (0.66–15.25)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">3.06 (2.03–5.19)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">2.97 (1.07–5.17)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">2.02 (0.09–3.02)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 5S</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.94 (0.85–7.41)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0 (0–0)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.94 (0.91–4.01)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0 (0–0)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.36 (0.34–7.41)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.33 (0–0.91)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">3.45 (0.25–7.26)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.27 (0.04–0.76)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.17 (0.14–3.18)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.03 (0–0.06)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.15 (0.48–2.69)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.29 (0.01–0.71)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>iPhone 4</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.40 (0.37–2.20)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">1.73 (0.07–2.33)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.33 (0.32–2.18)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.78 (0.07–2.45)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.97 (1.30–2.32)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.02 (0–0.03)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">1.93 (1.40–2.28)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.11 (0.06–0.31)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.12 (0.21–2.07)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0 (0–0.01)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.05 (0.32–1.90)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.07 (0–0.21)</td>
</tr>
<tr>
<td rowspan="3" align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" colspan="1">
<bold>Xsens</bold>
</td>
<td align="center" valign="middle" rowspan="1" colspan="1">Manufacturer filter</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.87 (0.30–1.21)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.02 (0–0.05)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.94 (0.30–1.23)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.04 (0–0.14)</td>
</tr>
<tr>
<td align="center" valign="middle" rowspan="1" colspan="1">Madgwick</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.55 (1.02–4.10)</td>
<td align="center" valign="middle" style="border-right:solid thin" rowspan="1" colspan="1">0.31 (0–1.20)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">2.42 (0.65–4.19)</td>
<td align="center" valign="middle" rowspan="1" colspan="1">0.29 (0.01–0.95)</td>
</tr>
<tr>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">Mahony</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.24 (0.19–2.94)</td>
<td align="center" valign="middle" style="border-bottom:solid thin;border-right:solid thin" rowspan="1" colspan="1">0.06 (0–0.11)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">1.43 (0.25–3.22)</td>
<td align="center" valign="middle" style="border-bottom:solid thin" rowspan="1" colspan="1">0.72 (0–2.24)</td>
</tr>
</tbody>
</table>
</table-wrap>
<fig id="sensors-15-23168-f006" position="float">
<label>Figure 6</label>
<caption>
<p>Kruskal–Wallis test result for Xsens roll and pitch RMS compared to Galaxy Nexus, iPhone 5S and iPhone 4 for the dynamic protocol at rate of 50% of the maximum velocity.</p>
</caption>
<graphic xlink:href="sensors-15-23168-g006"></graphic>
</fig>
<p>
<xref ref-type="table" rid="sensors-15-23168-t004">Table 4</xref>
and
<xref ref-type="table" rid="sensors-15-23168-t005">Table 5</xref>
show the results of the dynamic protocol at two different speeds. An important increase of the errors compared to the static protocol, whatever the speed, is observed. The algorithms have more difficulties exactly following the movements when the angular rate is too elevated during a very short duration (for instance 90° in less than one second). However, we can see that Xsens is better than the smartphones in that case, especially because the software includes a large acceleration mode that we chose and that change the range of measurement of the sensors (we cannot do such an operation on smartphones). Another point is that Xsens products are also certainly less sensitive to gimbal lock effect that will appear during such movements.</p>
<p>For this protocol, which aims to compare effect of the choice of the filter on the quality of the angle estimation, during dynamic protocol and for each device, there are no significant differences between filters reported by the Kruskal–Wallis test.</p>
<p>A Wilcoxon signed rank test was used to evaluate the impact of velocity. This test was performed on manufacturer filter, which is predominantly the best filters, considering that there are finally no significant differences between the filters. It can be observed that there are no significant differences between velocities for each device.</p>
<p>A Kruskal–Wallis test that compares Xsens manufacturer RMS result for pitch and roll with smartphones devices for rate of 50% of the maximum velocity (
<xref ref-type="fig" rid="sensors-15-23168-f006">Figure 6</xref>
) indicates no significant differences between devices. </p>
</sec>
</sec>
</sec>
<sec id="sec5-sensors-15-23168">
<title>5. Discussion</title>
<p>In this paper, we propose an evaluation of different smartphone sensors and different manufacturer algorithm performances with the comparison to a gold standard, an industrial robotic arm and with a standardly used IMU in clinical measurement, the Xsens product. Effect of Smartphone position on the robotic arm during our protocol is first discussed. Then, accuracy performance compare to the gold standard is studied, as well as the effect of filter and effect of velocity and performance of smartphone in comparison with Xsens product.</p>
<sec id="sec5dot1-sensors-15-23168">
<title>5.1. Protocol 1: Effect of the Position on Kuka Robotic Arm and Repeatability</title>
<p>It can be observed that there is no significant difference between RMS error for roll axis, and only one significant difference for pitch axis in the case where the smartphone is fixed on the physical location of the sensors. Mean RMS for this condition is under 0.12°. To avoid this low bias, smartphone are always fixed on their center for all the studies. One can, however, consider that in the clinical context, our protocol can be considered as non-dependent on the position of the smartphone.</p>
</sec>
<sec id="sec5dot2-sensors-15-23168">
<title>5.2. Protocol 2: Devices Performance Compared to Gold Standard and Xsens</title>
<sec id="sec5dot2dot1-sensors-15-23168">
<title>5.2.1. RMS and Variance</title>
<p>The four traces represent signal measurement, in degrees, for the Galaxy Nexus case in static protocol is shown in
<xref ref-type="fig" rid="sensors-15-23168-f004">Figure 4</xref>
. It illustrates the differences of variance of the signal between filters, and especially in the case of this Android device. It can be noticed that manufacturer filter provided by Android produce a bigger variance in the signal than other filters, but it produces the lower RMS mean results relative to other filters. Those RMS mean results are presented in
<xref ref-type="table" rid="sensors-15-23168-t003">Table 3</xref>
for the static protocol, where RMS values are calculated for 27 absolute angle values, avoiding values near 90° in order to prevent Gimbal lock effect and singularities in Euler angles representation. All RMS mean results are under 0.3° for both pitch and roll axis compared to the gold standard.
<xref ref-type="table" rid="sensors-15-23168-t004">Table 4</xref>
and
<xref ref-type="table" rid="sensors-15-23168-t005">Table 5</xref>
present RMS mean results for the dynamic protocol for two specific positioning velocities. The RMS mean values are higher than the results obtained in the static protocol, especially for Madgwick and Mahony filters. This might be due to Gimbal Lock effect that is not prevented in this protocol. It can particularly affect roll axis in the area of 90°, depending on yaw. An algorithmic solution can be used to solve these problems, but is not as effective as the use of quaternion. Manufacturer filters implement this type of algorithmic solution while other filters that we implemented did not. Xsens manufacturer filter RMS results are consistent with the accuracy provided by the manufacturer. </p>
</sec>
<sec id="sec5dot2dot2-sensors-15-23168">
<title>5.2.2. Context</title>
<p>These RMS and variance results have to be discussed in connection with the research context. For clinical context, results have to be under the acceptable error of 2.7° that is recently observed for passive range of motion with universal goniometer [
<xref rid="B25-sensors-15-23168" ref-type="bibr">25</xref>
], which is the standard tool for this type of measurement. Passive range of motion is the movement of a joint through its range of motion without exertion by the subject, usually done by an examiner who moves the person’s body part manually. It could be compared with our static protocol. Moreover, in the same study [
<xref rid="B25-sensors-15-23168" ref-type="bibr">25</xref>
], a smartphone application, which mimics goniometer with sensors, was also tested and the standard error measurement between testers is 1.4°. For acceptance of using such devices in clinical protocols, the error measurement between testers should be under five degrees [
<xref rid="B26-sensors-15-23168" ref-type="bibr">26</xref>
] in upper extremity measurement and six degrees [
<xref rid="B26-sensors-15-23168" ref-type="bibr">26</xref>
] or 5.5° [
<xref rid="B27-sensors-15-23168" ref-type="bibr">27</xref>
] in lower extremity measurement for active range of motion. Active range of motion is the range of movement through which a patient can actively (without assistance) move a joint using the adjacent muscles, and could be compared with our dynamic protocol. In this present study, static measurement results are under acceptable clinical error for all filters, unlike the dynamic protocol results. Manufacturer filters are under acceptable errors, while others could be upper acceptable errors for dynamic protocol. However, this is, as explained above, due to the lack of compensation biases such as gimbal lock. Smartphones can therefore be considered sufficiently accurate tools for the clinical measurement of range of motion, but the filter effects have to be discussed.</p>
</sec>
<sec id="sec5dot2dot3-sensors-15-23168">
<title>5.2.3. Impact of Velocity and Filter Effect</title>
<p>As we can see in
<xref ref-type="table" rid="sensors-15-23168-t003">Table 3</xref>
and
<xref ref-type="table" rid="sensors-15-23168-t004">Table 4</xref>
, for static protocol, ranked in order of increasing precision filter is not homogeneous, in both pitch and roll, unlike dynamic protocol. However, the used of Kruskal–Wallis test for comparing filter results take into account the number of sample RMS result of each protocol. In this context, only one significant difference was found in the case of the iPhone 4 between the manufacturer filter and the Madgwick filter in case of static protocol, and there are no significant differences between filters reported for dynamic protocol. The effect of the filters, in this context, therefore is null. A Wilcoxon signed rank test was used to evaluate the impact of velocity during dynamic protocol on the quality of the measurement. Contrary to [
<xref rid="B23-sensors-15-23168" ref-type="bibr">23</xref>
], no significant differences were found. However, our protocol is not exactly the same. RMS measurement is calculated during a static period after a wider angular movement than our static protocol. Finally, comparison between Xsens manufacturer filter and other manufacturer filters was done with a Kruskal–Wallis test. Xsens is a currently and widely used system for range of motion in clinical field [
<xref rid="B22-sensors-15-23168" ref-type="bibr">22</xref>
,
<xref rid="B23-sensors-15-23168" ref-type="bibr">23</xref>
]. No significant differences were found so it can be concluded that Smartphone range of motion results are at least comparable and similar to Xsens results. This confirms the previous conclusion: Smartphones can be used as a clinical tool to measure range of motion, and it can also be added that, for the three tested smartphones, there is no significant influence on the origin of the hardware sensors compared to Xsens.</p>
</sec>
</sec>
</sec>
<sec id="sec6-sensors-15-23168">
<title>6. Conclusions</title>
<p>In this paper, we have comprehensively evaluated the performance accuracy of smartphone sensors and algorithms. RMS mean values results for static protocol are under 0.3° for all Smartphones. RMS mean values results for dynamic protocol are more prone to bias induced by Euler angle representation. However, statistic results shows that in this context, there are no filter effect on results for both protocol and no hardware effect. In addition, the smartphone results can be compared to those of Xsens and especially to those of the gold standard, which is a Kuka robotic arm with a repeatability accuracy of ±0.02 mm. </p>
<p>It can be concluded that built-in inertial sensors, in Smartphone, are reliable for clinical fields compared to standard tools like universal goniometer, in static protocol. In dynamic measurement, we were confronted with the limit of Euler angles representation for Madgwick and Mahony filters. To avoid this drawback, algorithms can be improved, such as it can be observed for manufacturer system filters. Moreover, in clinical fields, solutions could be made by following recommendations on the definitions of joint coordinate systems of various joints for the reporting of human joint motion [
<xref rid="B28-sensors-15-23168" ref-type="bibr">28</xref>
]. Future research should take into account the medical field context.</p>
</sec>
</body>
<back>
<ack>
<title>Acknowledgments</title>
<p>This work was supported in part by funding by the French national program “programme d’Investissements d’Avenir IRT Nanoelec” ANR-10-AIRT-05, PhD scholarship of Mines Douai, and Institut Universitaire de France. The authors would like to thank anonymous reviewers for helpful comments and suggestions.</p>
</ack>
<notes>
<title>Author Contributions</title>
<p>Quentin Mourcou, Anthony Fleury, Céline Franco, Frédéric Klopcic, and Nicolas Vuillerme contributed equally to this work.</p>
</notes>
<notes>
<title>Conflicts of Interest</title>
<p>The authors declare no conflict of interest.</p>
</notes>
<ref-list>
<title>References</title>
<ref id="B1-sensors-15-23168">
<label>1.</label>
<element-citation publication-type="webpage">
<article-title>GfK</article-title>
<comment>Available online:
<ext-link ext-link-type="uri" xlink:href="http://www.gfk.com/news-and-events/press-room/press-releases/pages/global-smartphone-sales-exceed-1-2b-units-in-2014.aspx">http://www.gfk.com/news-and-events/press-room/press-releases/pages/ global-smartphone-sales-exceed-1-2b-units-in-2014.aspx</ext-link>
</comment>
<date-in-citation>(accessed on 1 July 2015)</date-in-citation>
</element-citation>
</ref>
<ref id="B2-sensors-15-23168">
<label>2.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kosse</surname>
<given-names>N.M.</given-names>
</name>
<name>
<surname>Caljouw</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Vervoort</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Vuillerme</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Lamoth</surname>
<given-names>C.J.</given-names>
</name>
</person-group>
<article-title>Validity and Reliability of Gait and Postural Control Analysis Using the Tri-axial Accelerometer of the iPod Touch</article-title>
<source>Ann. Biomed. Eng.</source>
<year>2014</year>
<volume>43</volume>
<fpage>1</fpage>
<lpage>12</lpage>
<pub-id pub-id-type="doi">10.1007/s10439-014-1232-0</pub-id>
<pub-id pub-id-type="pmid">25549774</pub-id>
</element-citation>
</ref>
<ref id="B3-sensors-15-23168">
<label>3.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Milani</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Coccetta</surname>
<given-names>C.A.</given-names>
</name>
<name>
<surname>Rabini</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Sciarra</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Massazza</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Ferriero</surname>
<given-names>G.</given-names>
</name>
</person-group>
<article-title>Mobile Smartphone Applications for Body Position Measurement in Rehabilitation: A Focus on Goniometric Tools</article-title>
<source>PM&R</source>
<year>2014</year>
<volume>6</volume>
<fpage>1038</fpage>
<lpage>1043</lpage>
<pub-id pub-id-type="pmid">24844445</pub-id>
</element-citation>
</ref>
<ref id="B4-sensors-15-23168">
<label>4.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Campbell</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Choudhury</surname>
<given-names>T.</given-names>
</name>
</person-group>
<article-title>From smart to cognitive phones</article-title>
<source>IEEE Pervasive Comput.</source>
<year>2012</year>
<volume>11</volume>
<fpage>7</fpage>
<lpage>11</lpage>
<pub-id pub-id-type="doi">10.1109/MPRV.2012.41</pub-id>
</element-citation>
</ref>
<ref id="B5-sensors-15-23168">
<label>5.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cook</surname>
<given-names>D.J.</given-names>
</name>
<name>
<surname>Das</surname>
<given-names>S.K.</given-names>
</name>
</person-group>
<article-title>Pervasive computing at scale: Transforming the state of the art</article-title>
<source>Pervasive Mob. Comput.</source>
<year>2012</year>
<volume>8</volume>
<fpage>22</fpage>
<lpage>35</lpage>
<pub-id pub-id-type="doi">10.1016/j.pmcj.2011.10.004</pub-id>
</element-citation>
</ref>
<ref id="B6-sensors-15-23168">
<label>6.</label>
<element-citation publication-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Anguita</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Ghio</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Oneto</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Parra</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Reyes-Ortiz</surname>
<given-names>J.L.</given-names>
</name>
</person-group>
<article-title>A public domain dataset for human activity recognition using smartphones</article-title>
<source>Proceedings of the European Symposium on Artificial Neural Networks, Computational Intelligence and Machine Learning (ESANN)</source>
<conf-loc>Bruges, Belgium</conf-loc>
<conf-date>24–26 April 2013</conf-date>
</element-citation>
</ref>
<ref id="B7-sensors-15-23168">
<label>7.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Habib</surname>
<given-names>M.A.</given-names>
</name>
<name>
<surname>Mohktar</surname>
<given-names>M.S.</given-names>
</name>
<name>
<surname>Kamaruzzaman</surname>
<given-names>S.B.</given-names>
</name>
<name>
<surname>Lim</surname>
<given-names>K.S.</given-names>
</name>
<name>
<surname>Pin</surname>
<given-names>T.M.</given-names>
</name>
<name>
<surname>Ibrahim</surname>
<given-names>F.</given-names>
</name>
</person-group>
<article-title>Smartphone-based solutions for fall detection and prevention: Challenges and open issues</article-title>
<source>Sensors</source>
<year>2014</year>
<volume>14</volume>
<fpage>7181</fpage>
<lpage>7208</lpage>
<pub-id pub-id-type="doi">10.3390/s140407181</pub-id>
<pub-id pub-id-type="pmid">24759116</pub-id>
</element-citation>
</ref>
<ref id="B8-sensors-15-23168">
<label>8.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abbate</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Avvenuti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bonatesta</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Cola</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Corsini</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Vecchio</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>A smartphone-based fall detection system</article-title>
<source>Pervasive Mob. Comput.</source>
<year>2012</year>
<volume>8</volume>
<fpage>883</fpage>
<lpage>899</lpage>
<pub-id pub-id-type="doi">10.1016/j.pmcj.2012.08.003</pub-id>
</element-citation>
</ref>
<ref id="B9-sensors-15-23168">
<label>9.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Williamson</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Andrews</surname>
<given-names>B.J.</given-names>
</name>
</person-group>
<article-title>Detecting absolute human knee angle and angular velocity using accelerometers and rate gyroscopes</article-title>
<source>Med. Biol. Eng. Comput.</source>
<year>2001</year>
<volume>39</volume>
<fpage>294</fpage>
<lpage>302</lpage>
<pub-id pub-id-type="doi">10.1007/BF02345283</pub-id>
<pub-id pub-id-type="pmid">11465883</pub-id>
</element-citation>
</ref>
<ref id="B10-sensors-15-23168">
<label>10.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mitchell</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Gutierrez</surname>
<given-names>S.B.</given-names>
</name>
<name>
<surname>Sutton</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Morton</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Morgenthaler</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>Reliability and validity of goniometric iPhone applications for the assessment of active shoulder external rotation</article-title>
<source>Physiother. Theor. Pract.</source>
<year>2014</year>
<volume>30</volume>
<fpage>521</fpage>
<lpage>525</lpage>
<pub-id pub-id-type="doi">10.3109/09593985.2014.900593</pub-id>
<pub-id pub-id-type="pmid">24654927</pub-id>
</element-citation>
</ref>
<ref id="B11-sensors-15-23168">
<label>11.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jenny</surname>
<given-names>J.Y.</given-names>
</name>
</person-group>
<article-title>Measurement of the knee flexion angle with a smartphone-application is precise and accurate</article-title>
<source>J. arthroplast.</source>
<year>2013</year>
<volume>28</volume>
<fpage>784</fpage>
<lpage>787</lpage>
<pub-id pub-id-type="doi">10.1016/j.arth.2012.11.013</pub-id>
<pub-id pub-id-type="pmid">23499407</pub-id>
</element-citation>
</ref>
<ref id="B12-sensors-15-23168">
<label>12.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vohralik</surname>
<given-names>S.L.</given-names>
</name>
<name>
<surname>Bowen</surname>
<given-names>A.R.</given-names>
</name>
<name>
<surname>Burns</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hiller</surname>
<given-names>C.E.</given-names>
</name>
<name>
<surname>Nightingale</surname>
<given-names>E.J.</given-names>
</name>
</person-group>
<article-title>Reliability and Validity of a Smartphone App to Measure Joint Range</article-title>
<source>Am. J. Phys. Med. Rehabil.</source>
<year>2015</year>
<volume>94</volume>
<fpage>325</fpage>
<lpage>330</lpage>
<pub-id pub-id-type="doi">10.1097/PHM.0000000000000221</pub-id>
<pub-id pub-id-type="pmid">25299533</pub-id>
</element-citation>
</ref>
<ref id="B13-sensors-15-23168">
<label>13.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Madgwick</surname>
<given-names>S.</given-names>
</name>
</person-group>
<source>An Efficient Orientation Filter for Inertial and Inertial/Magnetic Sensor Arrays</source>
<comment>Technical Report</comment>
<publisher-name>Report x-io and University of Bristol</publisher-name>
<publisher-loc>Bristol, UK</publisher-loc>
<day>30</day>
<month>4</month>
<year>2010</year>
</element-citation>
</ref>
<ref id="B14-sensors-15-23168">
<label>14.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cutti</surname>
<given-names>A.G.</given-names>
</name>
<name>
<surname>Giovanardi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Rocchi</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Davalli</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Sacchetti</surname>
<given-names>R.</given-names>
</name>
</person-group>
<article-title>Ambulatory measurement of shoulder and elbow kinematics through inertial and magnetic sensors</article-title>
<source>Med. Boil. Eng Comput.</source>
<year>2008</year>
<volume>46</volume>
<fpage>169</fpage>
<lpage>178</lpage>
<pub-id pub-id-type="doi">10.1007/s11517-007-0296-5</pub-id>
<pub-id pub-id-type="pmid">18087742</pub-id>
</element-citation>
</ref>
<ref id="B15-sensors-15-23168">
<label>15.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chung</surname>
<given-names>W.M.</given-names>
</name>
<name>
<surname>Yeung</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Chan</surname>
<given-names>W.W.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>R.</given-names>
</name>
</person-group>
<article-title>Validity of VICON Motion Analysis System for Upper Limb Kinematic MeasuremeNT–A Comparison Study with Inertial Tracking Xsens System</article-title>
<source>Hong Kong Physiother. J.</source>
<year>2011</year>
<volume>29</volume>
<pub-id pub-id-type="doi">10.1016/j.hkpj.2011.08.015</pub-id>
</element-citation>
</ref>
<ref id="B16-sensors-15-23168">
<label>16.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hamacher</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Bertram</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Fölsch</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Schega</surname>
<given-names>L.</given-names>
</name>
</person-group>
<article-title>Evaluation of a visual feedback system in gait retraining: A pilot study</article-title>
<source>Gait Posture</source>
<year>2012</year>
<volume>36</volume>
<fpage>182</fpage>
<lpage>186</lpage>
<pub-id pub-id-type="doi">10.1016/j.gaitpost.2012.02.012</pub-id>
<pub-id pub-id-type="pmid">22425191</pub-id>
</element-citation>
</ref>
<ref id="B17-sensors-15-23168">
<label>17.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Saber-Sheikh</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Bryant</surname>
<given-names>E.C.</given-names>
</name>
<name>
<surname>Glazzard</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Hamel</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>R.Y.</given-names>
</name>
</person-group>
<article-title>Feasibility of using inertial sensors to assess human movement</article-title>
<source>Man. Ther.</source>
<year>2010</year>
<volume>15</volume>
<fpage>122</fpage>
<lpage>125</lpage>
<pub-id pub-id-type="doi">10.1016/j.math.2009.05.009</pub-id>
<pub-id pub-id-type="pmid">19632882</pub-id>
</element-citation>
</ref>
<ref id="B18-sensors-15-23168">
<label>18.</label>
<element-citation publication-type="webpage">
<article-title>Kuka-Robotics</article-title>
<comment>Available online:
<ext-link ext-link-type="uri" xlink:href="http://www.kuka-robotics.com/res/sps/e6c77545-9030-49b1-93f5-4d17c92173aa_Spez_KR_5_sixx_CR_en.pdf">http://www.kuka-robotics.com/res/sps/e6c77545-9030-49b1-93f5-4d17c92173aa_Spez_KR_5_sixx_CR_en.pdf</ext-link>
</comment>
<date-in-citation>(accessed on 1 July 2015)</date-in-citation>
</element-citation>
</ref>
<ref id="B19-sensors-15-23168">
<label>19.</label>
<element-citation publication-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Euston</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Coote</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Mahony</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Kim</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hamel</surname>
<given-names>T.</given-names>
</name>
</person-group>
<article-title>A complementary filter for attitude estimation of a fixed-wing UAV</article-title>
<source>Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source>
<conf-loc>Nice, France</conf-loc>
<conf-date>22–26 September 2008</conf-date>
</element-citation>
</ref>
<ref id="B20-sensors-15-23168">
<label>20.</label>
<element-citation publication-type="book">
<person-group person-group-type="author">
<name>
<surname>Welch</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Bishop</surname>
<given-names>G.</given-names>
</name>
</person-group>
<source>An Introduction to the Kalman Filter</source>
<comment>Technical Report 95-041</comment>
<publisher-name>University of North Carolina</publisher-name>
<publisher-loc>Chapel Hill, NC, USA</publisher-loc>
<day>24</day>
<month>7</month>
<year>2006</year>
</element-citation>
</ref>
<ref id="B21-sensors-15-23168">
<label>21.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mahony</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Hamel</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Pflimlin</surname>
<given-names>J.-M.</given-names>
</name>
</person-group>
<article-title>Nonlinear complementary filters on the special orthogonal group</article-title>
<source>Auto. Control IEEE Transac.</source>
<year>2008</year>
<volume>53</volume>
<fpage>1203</fpage>
<lpage>1218</lpage>
<pub-id pub-id-type="doi">10.1109/TAC.2008.923738</pub-id>
</element-citation>
</ref>
<ref id="B22-sensors-15-23168">
<label>22.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sessa</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Zecca</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Bartolomeo</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Ishii</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Takanishi</surname>
<given-names>A.</given-names>
</name>
</person-group>
<article-title>A methodology for the performance evaluation of inertial measurement units</article-title>
<source>J. Intel. Robot. Syst.</source>
<year>2013</year>
<volume>71</volume>
<fpage>143</fpage>
<lpage>157</lpage>
<pub-id pub-id-type="doi">10.1007/s10846-012-9772-8</pub-id>
</element-citation>
</ref>
<ref id="B23-sensors-15-23168">
<label>23.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Lebel</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Boissy</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Hamel</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Duval</surname>
<given-names>C.</given-names>
</name>
</person-group>
<article-title>Inertial Measures of Motion for Clinical Biomechanics: Comparative Assessment of Accuracy under Controlled Conditions-Effect of Velocity</article-title>
<source>PloS One</source>
<year>2013</year>
<volume>8</volume>
<pub-id pub-id-type="doi">10.1371/journal.pone.0079945</pub-id>
<pub-id pub-id-type="pmid">24260324</pub-id>
</element-citation>
</ref>
<ref id="B24-sensors-15-23168">
<label>24.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Leardini</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Lullini</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Giannini</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Berti</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Ortolani</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Caravaggi</surname>
<given-names>P.</given-names>
</name>
</person-group>
<article-title>Validation of the angular measurements of a new inertial-measurement-unit based rehabilitation system: comparison with state-of-the-art gait analysis</article-title>
<source>J. Neuroeng. Rehabil.</source>
<year>2014</year>
<volume>11</volume>
<fpage>1</fpage>
<lpage>7</lpage>
<pub-id pub-id-type="doi">10.1186/1743-0003-11-136</pub-id>
<pub-id pub-id-type="pmid">24393611</pub-id>
</element-citation>
</ref>
<ref id="B25-sensors-15-23168">
<label>25.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Milanese</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Gordon</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Buettner</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Flavell</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Ruston</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Coe</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>O’Sullivan</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>McCormack</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Reliability and concurrent validity of knee angle measurement: Smart phone App versus Universal Goniometer used by experienced and novice clinicians</article-title>
<source>Man. Ther.</source>
<year>2014</year>
<volume>19</volume>
<fpage>569</fpage>
<lpage>574</lpage>
<pub-id pub-id-type="doi">10.1016/j.math.2014.05.009</pub-id>
<pub-id pub-id-type="pmid">24942491</pub-id>
</element-citation>
</ref>
<ref id="B26-sensors-15-23168">
<label>26.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gajdosik</surname>
<given-names>R.L.</given-names>
</name>
<name>
<surname>Bohannon</surname>
<given-names>R.W.</given-names>
</name>
</person-group>
<article-title>Clinical measurement of range of motion review of goniometry emphasizing reliability and validity</article-title>
<source>Phys. Ther.</source>
<year>1987</year>
<volume>67</volume>
<fpage>1867</fpage>
<lpage>1872</lpage>
<pub-id pub-id-type="pmid">3685114</pub-id>
</element-citation>
</ref>
<ref id="B27-sensors-15-23168">
<label>27.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Brosseau</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Tousignant</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Budd</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chartier</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Duciaume</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Plamondon</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>O’Sullivan</surname>
<given-names>J.P.</given-names>
</name>
<name>
<surname>O’Donoghue</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Balmer</surname>
<given-names>S.</given-names>
</name>
</person-group>
<article-title>Intratester and intertester reliability and criterion validity of the parallelogram and universal goniometers for active knee flexion in healthy subjects</article-title>
<source>Physiother. Res. Int.</source>
<year>1997</year>
<volume>2</volume>
<fpage>150</fpage>
<lpage>166</lpage>
<pub-id pub-id-type="doi">10.1002/pri.97</pub-id>
<pub-id pub-id-type="pmid">9421820</pub-id>
</element-citation>
</ref>
<ref id="B28-sensors-15-23168">
<label>28.</label>
<element-citation publication-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wu</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Van Der Helm</surname>
<given-names>F.C.</given-names>
</name>
<name>
<surname>Veeger</surname>
<given-names>H.E.J.</given-names>
</name>
<name>
<surname>Makhsous</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Van Roy</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Anglin</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Nagels</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Karduna</surname>
<given-names>A.R.</given-names>
</name>
<name>
<surname>McQuade</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>X.</given-names>
</name>
<etal></etal>
</person-group>
<article-title>ISB recommendation on definitions of joint coordinate systems of various joints for the reporting of human joint motion—Part II: Shoulder, elbow, wrist and hand</article-title>
<source>J. Biomech.</source>
<year>2005</year>
<volume>38</volume>
<fpage>981</fpage>
<lpage>992</lpage>
<pub-id pub-id-type="doi">10.1016/j.jbiomech.2004.05.042</pub-id>
<pub-id pub-id-type="pmid">15844264</pub-id>
</element-citation>
</ref>
</ref-list>
</back>
</pmc>
</record>

Pour manipuler ce document sous Unix (Dilib)

EXPLOR_STEP=$WICRI_ROOT/Ticri/CIDE/explor/HapticV1/Data/Pmc/Curation
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 000384 | SxmlIndent | more

Ou

HfdSelect -h $EXPLOR_AREA/Data/Pmc/Curation/biblio.hfd -nk 000384 | SxmlIndent | more

Pour mettre un lien sur cette page dans le réseau Wicri

{{Explor lien
   |wiki=    Ticri/CIDE
   |area=    HapticV1
   |flux=    Pmc
   |étape=   Curation
   |type=    RBID
   |clé=     PMC:4610531
   |texte=   Performance Evaluation of Smartphone Inertial Sensors Measurement for Range of Motion
}}

Pour générer des pages wiki

HfdIndexSelect -h $EXPLOR_AREA/Data/Pmc/Curation/RBID.i   -Sk "pubmed:26389900" \
       | HfdSelect -Kh $EXPLOR_AREA/Data/Pmc/Curation/biblio.hfd   \
       | NlmPubMed2Wicri -a HapticV1 

Wicri

This area was generated with Dilib version V0.6.23.
Data generation: Mon Jun 13 01:09:46 2016. Site generation: Wed Mar 6 09:54:07 2024