<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s120708491</article-id>
<article-id pub-id-type="publisher-id">sensors-12-08491</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Variable-State-Dimension Kalman-Based Filter for Orientation Determination Using Inertial and Magnetic Sensors</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Sabatini</surname><given-names>Angelo Maria</given-names></name></contrib>
<aff id="af1-sensors-12-08491">The BioRobotics Institute, Scuola Superiore Sant'Anna, Piazza Martiri della Libertà 33, Pisa 56127, Italy; E-Mail: <email>sabatini@sssup.it</email>; Tel.: +39-05-088-3415; Fax: +39-05-088-3101</aff></contrib-group>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>25</day>
<month>06</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>7</issue>
<fpage>8491</fpage>
<lpage>8506</lpage>
<history>
<date date-type="received">
<day>18</day>
<month>05</month>
<year>2012</year></date>
<date date-type="rev-recd">
<day>08</day>
<month>06</month>
<year>2012</year></date>
<date date-type="accepted">
<day>11</day>
<month>06</month>
<year>2012</year></date></history>
<permissions>
<copyright-statement>© 2012 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2012</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>In this paper a quaternion-based Variable-State-Dimension Extended Kalman Filter (VSD-EKF) is developed for estimating the three-dimensional orientation of a rigid body using the measurements from an Inertial Measurement Unit (IMU) integrated with a triaxial magnetic sensor. Gyro bias and magnetic disturbances are modeled and compensated by including them in the filter state vector. The VSD-EKF switches between a quiescent EKF, where the magnetic disturbance is modeled as a first-order Gauss-Markov stochastic process (GM-1), and a higher-order EKF where extra state components are introduced to model the time-rate of change of the magnetic field as a GM-1 stochastic process, namely the magnetic disturbance is modeled as a second-order Gauss-Markov stochastic process (GM-2). Experimental validation tests show the effectiveness of the VSD-EKF, as compared to either the quiescent EKF or the higher-order EKF when they run separately.</p></abstract>
<kwd-group>
<kwd>inertial/magnetic sensing</kwd>
<kwd>sensor fusion</kwd>
<kwd>orientation determination</kwd>
<kwd>Kalman filters</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Accurate determination of the three-dimensional (3D) orientation of rigid bodies is important in several technical fields, including robotics and virtual reality [<xref ref-type="bibr" rid="b1-sensors-12-08491">1</xref>], human motion analysis [<xref ref-type="bibr" rid="b2-sensors-12-08491">2</xref>] and pedestrian navigation [<xref ref-type="bibr" rid="b3-sensors-12-08491">3</xref>]. One popular approach to the design of orientation trackers in these applications is based on the physical principles of inertial navigation [<xref ref-type="bibr" rid="b4-sensors-12-08491">4</xref>,<xref ref-type="bibr" rid="b5-sensors-12-08491">5</xref>].</p>
<p>Usually, a fully integrated inertial measurement unit (IMU) consists of three vector-sensors, namely an accelerometer, a gyro, and a magnetic sensor; each of them has three mutually orthogonal sensitive axes. The 3D orientation can be computed by time-integrating the gyro output from initial conditions that are given by the aiding sensors (accelerometer and magnetic sensor). The gyro integration errors tend to grow unbounded over time because of time-varying biases and wideband measurement noise superimposed to gyro output. On the other hand, the accelerometer can provide drift-free inclination estimates by sensing the gravity field; the magnetic sensor, which would sense the Earth's magnetic field, helps providing drift-free heading estimates. However, the interpretation of the accelerometer output is critical because of the presence of the acceleration components related to the body motion [<xref ref-type="bibr" rid="b6-sensors-12-08491">6</xref>]; moreover, additional artificial magnetic fields determining magnetic anomalies or distortions lead to severe errors in the heading estimates [<xref ref-type="bibr" rid="b7-sensors-12-08491">7</xref>–<xref ref-type="bibr" rid="b9-sensors-12-08491">9</xref>].</p>
<p>Sensor fusion techniques are needed in order for the aiding sensors to help mitigate the gyro integration errors, while the errors incurred by the aiding sensors are mitigated using the gyro output [<xref ref-type="bibr" rid="b10-sensors-12-08491">10</xref>]. Extended Kalman filters (EKF) are by far the most common tools used to achieve this goal [<xref ref-type="bibr" rid="b2-sensors-12-08491">2</xref>,<xref ref-type="bibr" rid="b11-sensors-12-08491">11</xref>,<xref ref-type="bibr" rid="b12-sensors-12-08491">12</xref>]. In our previous research, a quaternion-based EKF was developed; the angular velocity was taken as a control input and compensation of gyro bias and magnetic disturbance was implemented using state-augmentation [<xref ref-type="bibr" rid="b12-sensors-12-08491">12</xref>,<xref ref-type="bibr" rid="b13-sensors-12-08491">13</xref>].</p>
<p>State-augmentation is a useful technique to estimate the state vector of interest, <italic>i.e.</italic>, the orientation representation, jointly with a number of variables that are uncertain, e.g., the sensor errors [<xref ref-type="bibr" rid="b14-sensors-12-08491">14</xref>,<xref ref-type="bibr" rid="b15-sensors-12-08491">15</xref>]. The state vector is augmented with a vector containing the uncertain variables, and the model of the uncertain variables are accounted for in the state transition model before applying the Kalman filter equations. For instance, a popular approach to magnetic disturbance compensation assumes that the deviations from the local reference magnetic field, henceforth also called magnetic distortions, are first-order Gauss-Markov (GM-1) stochastic vector processes [<xref ref-type="bibr" rid="b2-sensors-12-08491">2</xref>,<xref ref-type="bibr" rid="b13-sensors-12-08491">13</xref>,<xref ref-type="bibr" rid="b16-sensors-12-08491">16</xref>].</p>
<p>Because of some difficulties in tracking abrupt magnetic distortions [<xref ref-type="bibr" rid="b16-sensors-12-08491">16</xref>], the GM-1 model is better suited in our view to describe the time-rate of change of the magnetic field, namely the magnetic distortions are modeled with a second-order Gauss-Markov model (GM-2) model. We are unaware of any previous work modeling magnetic distortions in this manner. In this paper, we present a variable-state-dimension (VSD) approach to the development of a Kalman-filter-based orientation tracker. The VSD-EKF switches between the quiescent EKF and the higher-order EKF, where the model of the magnetic distortion is, respectively, GM-1 and GM-2; the switching rule is when the fading memory average of the normalized filter innovation exceeds a given threshold. The switching back to the quiescent EKF occurs when the time-rate of change of the magnetic field is detected small. Under quiet magnetic conditions using the quiescent EKF may yield maximum estimation accuracy: no information is wasted on estimating components that are zero or small. Experimental validation tests show the effectiveness of the proposed VSD-EKF in magnetically perturbed environments, as compared to either the quiescent EKF or the higher-order EKF when they run separately.</p></sec>
<sec sec-type="methods">
<label>2.</label>
<title>Method</title>
<p>The VSD-EKF estimates the following state variables: the quaternion between the body-fixed frame, <italic>i.e.</italic>, the B-frame, whose axes are assumed aligned with the triad of IMU sensitivity axes, and the Earth-fixed frame, <italic>i.e.</italic>, the E-frame; the gyro-bias and the components of the magnetic distortion, expressed in the E-frame, including their time-rates of change when the higher-order EKF is invoked.</p>
<sec>
<label>2.1.</label>
<title>Kinematic Equations</title>
<p>The time-derivative 
<inline-graphic xlink:href="sensors-12-08491i1.gif"/> of the quaternion <bold>q̄</bold>=[<bold>q</bold><italic><sup>T</sup></italic> q<sub>4</sub>]<italic><sup>T</sup></italic> and the angular velocity <bold>ω</bold> = [<italic>p q r</italic>]<italic><sup>T</sup></italic> of the B-frame relative to the E-frame, resolved in the B-frame, are related by the following system of differential equations[<xref ref-type="bibr" rid="b17-sensors-12-08491">17</xref>,<xref ref-type="bibr" rid="b18-sensors-12-08491">18</xref>], where the time argument is dropped for notational convenience:
<disp-formula id="FD1">
<label>(1)</label>
<mml:math id="mm1" display="block">
<mml:semantics id="sm1">
<mml:mrow>
<mml:mover accent="true">
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>×</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mi mathvariant="bold">ω</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="bold">Ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In (<xref rid="FD1" ref-type="disp-formula">1</xref>) the operator:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math id="mm2" display="block">
<mml:semantics id="sm2">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>×</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>r</mml:mi></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mi>q</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>r</mml:mi></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>p</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>q</mml:mi></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mi>p</mml:mi></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>is the standard vector cross product.</p>
<p>The discrete-time equivalent of (<xref rid="FD1" ref-type="disp-formula">1</xref>) is given by:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math id="mm3" display="block">
<mml:semantics id="sm3">
<mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">Φ</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>,</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>with:
<disp-formula id="FD4">
<label>(4)</label>
<mml:math id="mm4" display="block">
<mml:semantics id="sm4">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Φ</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>4</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="bold">Ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>sin</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mfrac>
<mml:mo>,</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>where <bold>I</bold><italic><sub>n</sub></italic> is the <italic>n</italic> × <italic>n</italic> identity matrix (<italic>n</italic> = 4) and ‖·‖denotes the standard vector norm. If the angular velocity is assumed constant during the sampling interval <italic>T<sub>s</sub></italic> = <italic>t<sub>k</sub></italic> − <italic>t<sub>k</sub></italic><sub>−1</sub>, we have:
<disp-formula id="FD5">
<label>(5)</label>
<mml:math id="mm5" display="block">
<mml:semantics id="sm5">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:munderover>
<mml:mrow>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>τ</mml:mi></mml:mrow></mml:mrow>
<mml:mo>≈</mml:mo>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In this paper the IMU signals are sampled at <italic>T<sub>s</sub></italic> = 0.01 s.</p></sec>
<sec>
<label>2.2.</label>
<title>Modeling the Magnetic Distortion</title>
<p>The conditions for accurate orientation determination using a magnetic sensor are that the magnetic field be homogeneous and accurately known. The homogeneity is difficult to achieve [<xref ref-type="bibr" rid="b7-sensors-12-08491">7</xref>–<xref ref-type="bibr" rid="b9-sensors-12-08491">9</xref>]. The magnetic field can thus unpredictably change in direction and magnitude when the IMU moves relative to the environment. We propose two stochastic models for describing the magnetic distortion <italic><sup>h</sup></italic><bold>b</bold>, <italic>i.e.</italic>, the difference between the magnetic field and its vector value in a given point at a given time—the local reference magnetic field <bold>h</bold>—both expressed in the E-frame.</p>
<p>The GM-1 model assumes that <italic><sup>h</sup></italic><bold>b</bold> is the realization of an exponentially time-correlated vector stochastic process whose components are statistically independent:
<disp-formula id="FD6">
<label>(6)</label>
<mml:math id="mm6" display="block">
<mml:semantics id="sm6">
<mml:mrow>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>L</mml:mi></mml:msub>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>α<sub>L</sub></italic> is the reciprocal of the correlation time constant <italic>τ<sub>L</sub></italic> and <bold>w</bold><italic><sub>L</sub></italic> is white Gaussian noise, with zero mean and covariance matrix 
<inline-formula>
<mml:math id="mm7" display="inline">
<mml:semantics id="sm7">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>σ</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mi>b</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>L</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>The GM-2 model assumes that the time-rate of change of <italic><sup>h</sup></italic><bold>b</bold> is the realization of a GM-1 vector stochastic process with statistically independent components:
<disp-formula id="FD7">
<label>(7)</label>
<mml:math id="mm8" display="block">
<mml:semantics id="sm8">
<mml:mrow>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>¨</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mi>H</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>α<sub>H</sub></italic> is the reciprocal of the correlation time constant <italic>τ<sub>H</sub></italic>, and <bold>w</bold><italic><sub>H</sub></italic> is white Gaussian noise, with zero mean and covariance matrix 
<inline-formula>
<mml:math id="mm9" display="inline">
<mml:semantics id="sm9">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>H</mml:mi></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>σ</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mi>b</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>H</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. Henceforth, we refer to 
<inline-formula>
<mml:math id="mm10" display="inline">
<mml:semantics id="sm10">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>σ</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mi>b</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>H</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> as the strength of the GM-2 model driving noise.</p></sec>
<sec>
<label>2.3.</label>
<title>IMU Sensor Modeling</title>
<p>In response to body angular velocity <bold>ω</bold><italic><sub>b</sub></italic>, acceleration (gravity field <bold>g</bold> and body acceleration <bold>a</bold><italic><sub>b</sub></italic>), and magnetic field <italic><sup>s</sup></italic><bold>h</bold> (local magnetic field <bold>h</bold> and magnetic distortion <italic><sup>h</sup></italic><bold>b</bold>), the measured outputs of the IMU sensors can be written as [<xref ref-type="bibr" rid="b10-sensors-12-08491">10</xref>]:
<disp-formula id="FD8">
<label>(8)</label>
<mml:math id="mm11" display="block">
<mml:semantics id="sm11">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">G</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts>
<mml:msub>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mi>b</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">a</mml:mtext>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">G</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>a</mml:mi></mml:mmultiscripts>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mtext mathvariant="bold">g</mml:mtext>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">a</mml:mtext>
<mml:mi>b</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>a</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>a</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">m</mml:mtext>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">G</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>m</mml:mi></mml:mmultiscripts>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtext mathvariant="bold">h</mml:mtext>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>m</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>m</mml:mi></mml:mmultiscripts>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The orientation matrix 
<inline-formula>
<mml:math id="mm12" display="inline">
<mml:semantics id="sm12">
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts></mml:mrow></mml:semantics></mml:math></inline-formula> moves vector representations from the E-frame to the B-frame; <italic><sup>g</sup></italic><bold>G</bold>, <italic><sup>a</sup></italic><bold>G</bold>, <italic><sup>m</sup></italic><bold>G</bold> are the matrices of the scale factors (ideally equal to the identity matrix <bold>I</bold><sub>3</sub>); <italic><sup>g</sup></italic><bold>b</bold>, <italic><sup>a</sup></italic><bold>b</bold>, <italic><sup>m</sup></italic><bold>b</bold> are the bias vectors (ideally, they are zero); <italic><sup>g</sup></italic><bold>v</bold>, <italic><sup>a</sup></italic><bold>v</bold>, <italic><sup>m</sup></italic><bold>v</bold> are uncorrelated white Gaussian measurement noises, with zero mean and covariance matrix 
<inline-formula>
<mml:math id="mm13" display="inline">
<mml:semantics id="sm13">
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>g</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>g</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>a</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>a</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm14" display="inline">
<mml:semantics id="sm14">
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mi>m</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>m</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. <xref rid="FD8" ref-type="disp-formula">Equation (8)</xref> is a model that does not account for additional error sources, such as cross-axis sensitivity, gyro <italic>g</italic>-sensitivity, nonlinearity, hysteresis and misalignment [<xref ref-type="bibr" rid="b19-sensors-12-08491">19</xref>]. Finally, we also assume for simplicity that the tracked objects are slowly moving, namely <bold>a</bold><italic><sub>b</sub></italic> ≈ <bold>0</bold>.</p>
<p>The deterministic errors associated with inertial and magnetic sensors can be compensated using the procedures described in [<xref ref-type="bibr" rid="b19-sensors-12-08491">19</xref>,<xref ref-type="bibr" rid="b20-sensors-12-08491">20</xref>], respectively, leaving the time varying biases, in particular of gyros, as the residual errors. In line with a common practice [<xref ref-type="bibr" rid="b2-sensors-12-08491">2</xref>,<xref ref-type="bibr" rid="b10-sensors-12-08491">10</xref>,<xref ref-type="bibr" rid="b14-sensors-12-08491">14</xref>,<xref ref-type="bibr" rid="b15-sensors-12-08491">15</xref>], we model the gyro-bias vector as the realization of a random-walk vector stochastic process with statistically independent components:
<disp-formula id="FD9">
<label>(9)</label>
<mml:math id="mm15" display="block">
<mml:semantics id="sm15">
<mml:mrow>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mi>g</mml:mi></mml:msub>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>where <bold>w</bold><italic><sub>g</sub></italic> is white Gaussian noise, with zero mean and covariance matrix 
<inline-formula>
<mml:math id="mm16" display="inline">
<mml:semantics id="sm16">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mo>∑</mml:mo>
<mml:mi>g</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo></mml:mrow></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>σ</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mi>b</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>d</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></sec>
<sec>
<label>2.4.</label>
<title>Filter Development</title>
<p>The VSD-EKF adopts two state models: the quiescent state model, where the state vector is <bold>x</bold>=[<bold>q̄</bold><italic><sup>T h</sup></italic><bold>b</bold><italic><sup>T g</sup></italic><bold>b</bold><italic><sup>T</sup></italic>]<italic><sup>T</sup></italic> and the magnetic distortion is GM-1, and the higher-order state model, where the state vector is <bold>x</bold>=[<bold>q̄</bold><italic><sup>T h</sup></italic><bold>b</bold><italic><sup>T h</sup></italic><bold>ḃ</bold><italic><sup>T g</sup></italic><bold>b</bold><italic><sup>T</sup></italic>]<italic><sup>T</sup></italic> and the magnetic distortion is GM-2. The quiescent EKF is fully developed in [<xref ref-type="bibr" rid="b13-sensors-12-08491">13</xref>]. The continuous-time system equations of the higher-order EKF are written as follows:
<disp-formula id="FD10">
<label>(10)</label>
<mml:math id="mm17" display="block">
<mml:semantics id="sm17">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="bold">Ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>¨</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mi>H</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mi>g</mml:mi></mml:msub>
<mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The discrete-time model allows employing the sampled measurements of the IMU for propagating the state vector:
<disp-formula id="FD11">
<label>(11)</label>
<mml:math id="mm18" display="block">
<mml:semantics id="sm18">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">F</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mo>˙</mml:mo></mml:mover>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>q</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>h</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where:
<disp-formula id="FD12">
<label>(12)</label>
<mml:math id="mm19" display="block">
<mml:semantics id="sm19">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">F</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Φ</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>4</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>and:
<disp-formula id="FD13">
<label>(13)</label>
<mml:math id="mm20" display="block">
<mml:semantics id="sm20">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="bold">Φ</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>4</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>∼</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="bold">Ω</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>∼</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>sin</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>∼</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>‖</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="bold">ω</mml:mi>
<mml:mo>∼</mml:mo></mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>‖</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn></mml:mrow></mml:mfrac>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>In (<xref rid="FD13" ref-type="disp-formula">13</xref>) the angular velocity <bold>ω̃</bold> = <bold>ω</bold><italic><sub>m</sub></italic> − <italic><sup>g</sup></italic><bold>b</bold> is taken as the control input.</p>
<p>The process noise component <italic><sup>q</sup></italic><bold>w</bold><italic><sub>k</sub></italic><sub>−1</sub> describes how the gyro measurement noise enters the state model through a quaternion-dependent linear transformation:
<disp-formula id="FD14">
<label>(14)</label>
<mml:math id="mm21" display="block">
<mml:semantics id="sm21">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>q</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mi mathvariant="bold">Ξ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>g</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>and the matrix <bold>Ξ</bold>(<bold>q̄</bold>) is given by:
<disp-formula id="FD15">
<label>(15)</label>
<mml:math id="mm22" display="block">
<mml:semantics id="sm22">
<mml:mrow>
<mml:mi mathvariant="bold">Ξ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>×</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Since the process noise components <italic><sup>q</sup></italic><bold>w</bold><italic><sub>k</sub></italic><sub>−1</sub>, <italic><sup>h</sup></italic><bold>w</bold><italic><sub>k</sub></italic><sub>−1</sub>, <italic><sup>g</sup></italic><bold>w</bold><italic><sub>k</sub></italic><sub>−1</sub> are assumed to be uncorrelated, the process noise covariance matrix <bold>Q</bold><italic><sub>k</sub></italic><sub>−1</sub> has the following structure [<xref ref-type="bibr" rid="b21-sensors-12-08491">21</xref>,<xref ref-type="bibr" rid="b22-sensors-12-08491">22</xref>]:
<disp-formula id="FD16">
<label>(16)</label>
<mml:math id="mm23" display="block">
<mml:semantics id="sm23">
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>4</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mtext>trace</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mtext mathvariant="bold">M</mml:mtext>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>-</mml:mo>
<mml:mtext mathvariant="bold">M</mml:mtext></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>g</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>σ</mml:mi>
<mml:mprescripts/>
<mml:none/>
<mml:mi>b</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mi>g</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mn>12</mml:mn>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>11</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>3</mml:mn>
<mml:mo>-</mml:mo>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi>
<mml:mn>3</mml:mn></mml:msubsup></mml:mrow></mml:mfrac>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>H</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>12</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>H</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mmultiscripts>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">Q</mml:mtext>
<mml:mrow>
<mml:mn>22</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mprescripts/>
<mml:none/>
<mml:mi>H</mml:mi></mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>H</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>H</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:semantics></mml:math></disp-formula>where:
<disp-formula id="FD17">
<label>(17)</label>
<mml:math id="mm24" display="block">
<mml:semantics id="sm24">
<mml:mrow>
<mml:mtext mathvariant="bold">M</mml:mtext>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:msubsup>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mtext mathvariant="bold">P</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>q</mml:mi></mml:msubsup>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula><bold>q̄</bold><italic><sub>k</sub></italic><sub>−1</sub> and 
<inline-formula>
<mml:math id="mm25" display="inline">
<mml:semantics id="sm25">
<mml:mrow>
<mml:msubsup>
<mml:mtext mathvariant="bold">P</mml:mtext>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>q</mml:mi></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> denote, respectively, the expectation and the covariance matrix of the quaternion component of the state vector [<xref ref-type="bibr" rid="b22-sensors-12-08491">22</xref>].</p>
<p>The measurement equations can be written as follows:
<disp-formula id="FD18">
<label>(18)</label>
<mml:math id="mm26" display="block">
<mml:semantics id="sm26">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">a</mml:mtext>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">m</mml:mtext>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mspace width="0.2em"/>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mtext mathvariant="bold">g</mml:mtext></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>s</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>a</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>m</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The rotation matrix can be derived from the quaternion [<xref ref-type="bibr" rid="b10-sensors-12-08491">10</xref>]:
<disp-formula id="FD19">
<label>(19)</label>
<mml:math id="mm27" display="block">
<mml:semantics id="sm27">
<mml:mrow>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">I</mml:mtext>
<mml:mn>3</mml:mn></mml:msub>
<mml:mo>-</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mi>q</mml:mi>
<mml:mn>4</mml:mn></mml:msub>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>×</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:mn>2</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>×</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn></mml:mrow></mml:msup>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The measurement equations are non-linear, hence we need to compute their Jacobian matrix <bold>H</bold>, as prescribed by the EKF linearization process:
<disp-formula id="FD20">
<label>(20)</label>
<mml:math id="mm28" display="block">
<mml:semantics id="sm28">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">H</mml:mtext>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold">ψ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>-</mml:mo>
<mml:mtext mathvariant="bold">g</mml:mtext></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="bold">ψ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">b</mml:mtext>
<mml:mprescripts/>
<mml:none/>
<mml:mi>s</mml:mi></mml:mmultiscripts></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>C</mml:mi>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>,</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>where, for a generic vector <bold>p</bold>, we define:
<disp-formula id="FD21">
<label>(21)</label>
<mml:math id="mm29" display="block">
<mml:semantics id="sm29">
<mml:mrow>
<mml:mi mathvariant="bold">ψ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>,</mml:mo>
<mml:mtext mathvariant="bold">p</mml:mtext></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow></mml:mfrac>
<mml:mmultiscripts>
<mml:mtext mathvariant="bold">C</mml:mtext>
<mml:mprescripts/>
<mml:mi>E</mml:mi>
<mml:mi>B</mml:mi></mml:mmultiscripts>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">q</mml:mtext>
<mml:mo>¯</mml:mo></mml:mover>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mtext mathvariant="bold">p</mml:mtext>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The detailed calculation of (<xref rid="FD21" ref-type="disp-formula">21</xref>) is illustrated in [<xref ref-type="bibr" rid="b13-sensors-12-08491">13</xref>]. The measurement noise covariance matrix can be expressed directly in terms of the statistics of the measurement noise affecting each sensor:
<disp-formula id="FD22">
<label>(22)</label>
<mml:math id="mm30" display="block">
<mml:semantics id="sm30">
<mml:mrow>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>a</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>×</mml:mo>
<mml:mn>3</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mo mathvariant="bold">∑</mml:mo>
<mml:mi>m</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>.</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Vector selection methods for measurement noise covariance matrix adaptation can be applied to guard against the effects of body accelerations and magnetic disturbances, as discussed in, e.g., [<xref ref-type="bibr" rid="b12-sensors-12-08491">12</xref>,<xref ref-type="bibr" rid="b23-sensors-12-08491">23</xref>,<xref ref-type="bibr" rid="b24-sensors-12-08491">24</xref>]. They are not implemented here.</p>
<p>The state-transition matrix <bold>F</bold><italic><sub>k</sub></italic><sub>−1</sub>, the process noise covariance matrix <bold>Q</bold><italic><sub>k</sub></italic><sub>−1</sub> and the measurement noise covariance matrix <bold>H</bold><italic><sub>k</sub></italic> are dependent on the state. Since the true state is unknown, the state predicted in the prediction stage is used in its place, as it is common practice in EKF formulations. Finally, the unit-quaternion constraint needed for the quaternion to represent a valid rotation is enforced by brute-force normalization after the update stage [<xref ref-type="bibr" rid="b10-sensors-12-08491">10</xref>].</p>
<p>The filter initialization is carried out in conditions when the IMU is still and no time-varying magnetic dipoles influence the local magnetic field. The sensor measurements are averaged during an initial rest period of 1 s. The inclination is computed by processing the initial average vector of acceleration measurements. The local magnetic field is estimated by projecting the initial average vector of magnetic measurements using the estimated inclination; the magnetic distortion is initialized to zero. Finally, the initial quaternion and its covariance matrix are computed using the TRIAD method [<xref ref-type="bibr" rid="b25-sensors-12-08491">25</xref>]. Computing the average vector of gyro measurements in the rest period allows performing the capture of the gyro-bias, which is then initialized to zero.</p></sec>
<sec>
<label>2.5.</label>
<title>Filter Adaptation</title>
<p>The default operating mode of the proposed algorithm is based on the GM-1 model for the magnetic distortion (quiescent EKF). When necessary, extra components are added to the system's state vector, as prescribed by the GM-2 model (higher-order EKF). The higher-order EKF is reverted to the quiescent EKF by another decision. When the magnetic perturbations are small or negligible, using the higher-order EKF increases the state estimation errors. Conversely, using the quiescent EKF may yield maximum estimation accuracy—no information is wasted on estimating components that are zero or small. However, if fast changes of magnetic direction and intensity are experienced, the quiescent EKF may not effectively track the magnetic distortion, which is essential for accurate orientation determination.</p>
<p>To implement the VSD-EKF we apply the technique discussed in [<xref ref-type="bibr" rid="b26-sensors-12-08491">26</xref>]. The switching from the quiescent to the higher-order EKF is based on computing a fading memory average of the normalized innovation squared from the quiescent EKF (<italic>a</italic> = 0.9). The switching takes place when the fading memory average of the normalized innovations exceeds a given up-crossing threshold. The fading memory has an effective window length <italic>s</italic>, and the onset of the magnetic perturbation is taken at the beginning of this window. As for the initialization of the higher-order EKF, when a magnetic perturbation is detected at time <italic>k</italic>, the algorithm assumes that the magnetic distortion has a constant rate of change starting at <italic>k</italic> − <italic>s</italic> − 1. Then, the higher-order EKF equations reprocess the IMU measurements sequentially up to time <italic>k</italic>, before sequentially processing incoming measurements at later times. The scheme for reverting to the quiescent EKF is based on using a fading memory average of the normalized innovation squared computed for the extra-state components of the GM-2 model; the fading memory average is then compared to a given down-crossing threshold. When falling below the threshold the quiescent EKF is called on again.</p></sec>
<sec>
<label>2.6.</label>
<title>Experimental Validation Tests</title>
<p>The experimental validation tests were carried out using the Xsens MTx orientation sensor, whose raw data were delivered to a host computer via a USB interface at a rate of 100 Hz. The manufacturer expressed the measurements of the magnetic field in arbitrary units (a.u.).</p>
<p>Before starting each test the IMU sensors were calibrated [<xref ref-type="bibr" rid="b19-sensors-12-08491">19</xref>,<xref ref-type="bibr" rid="b20-sensors-12-08491">20</xref>]. During the static test, whose duration was 3 min, the IMU remained on a table far from electromagnetic devices and ferromagnetic materials. A magnetic disturbance was generated at the time when a cell phone was moved close to the IMU toward the end of the first and second minute of data recording, for approximately 10 seconds. The dynamic test was performed as follows. The IMU was fastened to a plastic plate with size 10 cm × 13 cm using double-side adhesive tape. The plate was raised by the experimenter slightly over the table and then it was freely moved around, thereby sweeping a volume of about 60 cm × 60 cm × 60 cm. The plate orientation was recorded using a six-camera Vicon optical motion analysis system with a sampling rate of <italic>f<sub>s</sub></italic> = 100 Hz. The Vicon system measured the position of four reflective markers (diameter: 14 mm) arranged at the corners of the plate. The IMU and Vicon data streams were electronically synchronized. The initial orientation of the sensor frame, <italic>i.e.</italic>, the B-frame, relative to the marker frame, <italic>i.e.</italic>, the E-frame, was computed during the initial rest period of the IMU. Occasionally the IMU was moved close to a loudspeaker magnet placed on the table, a first time after 30 seconds of data recording. In the neighborhood of the loudspeaker, the magnetic field was strongly perturbed. The IMU was either taken at rest by the experimenter for few seconds, or it was moved around in the surroundings before being kept away. The visits to the region where the magnetic field was perturbed occurred every minute for approximately 10 seconds.</p></sec>
<sec>
<label>2.7.</label>
<title>Performance Assessment and Filter Parameter Tuning</title>
<p>The ground-truth orientation was obtained by processing the marker coordinates provided by the optical motion analysis system as described in [<xref ref-type="bibr" rid="b8-sensors-12-08491">8</xref>]. The Euler angles time functions delivered by the EKFs were obtained from the estimated quaternion using standard conversion formulas. We then computed the RMS errors incurred by the EKF in estimating the Euler angles using the ground-truth orientation as reference.</p>
<p>The magnetic field was estimated directly from the magnetic sensor measurements during the static test, since we assumed that the E-frame and the B-frame were aligned; as for the dynamic test, the ground-truth orientation was used to project the magnetic sensor measurements from the B-frame into the E-frame, yielding a good approximation to the magnetic field (ground-truth magnetic field). The strength of the magnetic perturbation was computed by taking the difference vector between the ground-truth magnetic field and the initial field <bold>h</bold>. The overall RMS value was then computed using the root sum-of-square rule applied to single components of the difference vector. Either for static or dynamic tests, the error between the estimated and the ground-truth fields was analyzed in terms of the overall RMS error, computed as described above for the strength of the magnetic perturbation.</p>
<p>The following filter implementations were assessed: the VSD-EKF, the quiescent EKF and the higher-order EKF. Either the quiescent or the higher-order EKF were made adaptive, although we did not develop specific switching rules for adaptation. Our approach was to adapt their state-transition and process noise covariance matrices by changing the value of the parameters valid for the condition Perturbation OFF to those valid for the condition Perturbation ON, or vice versa, using the OFF-ON and ON-OFF switching times computed by the VSD-EKF. For the purpose of a fair comparison between the various filter implementations, the OFF-ON switching times for adapting the quiescent and the higher-order EKFs were taken at the beginning of the fading memory window used by the VSD-EKF to reprocess the IMU measurements. The standard deviation of the random-walk model for gyro-bias compensation was set to <italic><sup>g</sup>σ</italic> = 0.01 °/s<sup>2</sup> (filtering option: Y); the gyro-bias compensation was disabled by setting <italic><sup>g</sup>σ</italic> = 0 °/s<sup>2</sup>. The filter parameter setting reported in <xref ref-type="table" rid="t1-sensors-12-08491">Tables 1</xref> and <xref ref-type="table" rid="t2-sensors-12-08491">2</xref> was chosen during the static test the process noise covariance matrix Q was tuned using the value of the gyro measurement noise standard deviation, assessed when the IMU was at rest.</p>
<p>The Kalman-based filters were written in Matlab for off-line data processing using a MacBook Pro computer and the virtualization technology from Parallel Desktop 4.0 for Mac. The VSD-EKF cycle time for a single iteration was about 4 ms, on average.</p></sec></sec>
<sec sec-type="results|discussion">
<label>3.</label>
<title>Results and Discussion</title>
<p>During the static test the variation of the magnetic field intensity and of the dip angle, namely the angle that the total field vector makes with respect to the horizontal plane, are about 62% and 31%, respectively); the RMS value of the magnetic distortion is about 181 a.u.. <xref ref-type="fig" rid="f1-sensors-12-08491">Figure 1</xref> shows the ground-truth magnetic field and the magnetic field estimated by the various filters.</p>
<p>The fading memory average that is monitored for switching to the higher-order state model is shown in <xref ref-type="fig" rid="f2-sensors-12-08491">Figure 2</xref>. The sojourns in the higher-order state model are in the intervals <italic>T</italic><sub>1</sub> = [61.98; 73.2] s; <italic>T</italic><sub>2</sub> = [121.9; 123.4] s; <italic>T</italic><sub>3</sub> = [133.1; 134.1] s, where the fading memory average is zero. The RMS errors are reported in <xref ref-type="table" rid="t3-sensors-12-08491">Table 3</xref>. The estimated yaw angle is plotted in <xref ref-type="fig" rid="f3-sensors-12-08491">Figure 3</xref>.</p>
<p>The dynamic test is carried out in an environment where the RMS value of the magnetic distortion is about 75 a.u. (the variation of the magnetic field intensity and of the dip angle are about 20% and 30%, respectively). The acceleration magnitude is 1 <italic>g</italic> ± 84 m<italic>g</italic>. The ground-truth magnetic field is plotted in <xref ref-type="fig" rid="f4-sensors-12-08491">Figure 4</xref>. The RMS errors are reported in <xref ref-type="table" rid="t4-sensors-12-08491">Table 4</xref>. Finally, the ground-truth Euler angles and the angle estimation errors are shown in <xref ref-type="fig" rid="f5-sensors-12-08491">Figure 5</xref>.</p></sec>
<sec sec-type="conclusions">
<label>4.</label>
<title>Conclusions</title>
<p>The GM-1 model is used in most reported Kalman-based-filters for explaining the magnetic distortion, either in fixed-parameter or adaptive implementations. The filter response to a magnetic perturbation is faster and more accurate when the standard deviation of the process noise is increased and, although to a more limited extent, its correlation time constant is decreased [<xref ref-type="bibr" rid="b16-sensors-12-08491">16</xref>]. However, the GM-1 model suffers from severe limitations when abrupt changes of intensity or direction of the perturbed magnetic field have to be dealt with, as the plot of <xref ref-type="fig" rid="f1-sensors-12-08491">Figure 1</xref> and the results presented in <xref ref-type="table" rid="t3-sensors-12-08491">Table 3</xref> show. Since both the disturbance strength and the corresponding variation in the dip angle are of much greater extent during the perturbation at the first minute of data recording as compared with the perturbation at the second minute, the yaw estimate is more affected during the former episode.</p>
<p>Quite typically, the yaw estimates produced by the adapted quiescent EKF may drift even when quiet magnetic conditions are restored after a disturbance occurrence. This is due to its limited capability of accurately tracking the time-changes of the magnetic field when they occur. The inability of the adapted higher-order EKF to produce accurate yaw angle estimates in magnetically perturbed conditions is quite surprising, in the face of the success met by the SVD-EKF, whose model in magnetically perturbed conditions is essentially the same. A possible explanation is that the higher-order EKF is extremely sensitive to the strength of the GM-2 driving noise. In conditions of magnetic quiet, the higher-order EKF tends to diverge when the driving noise strength is too large. With those values of the driving noise strength that are acceptable in conditions of magnetic quiet, the algorithm tends to perform very poorly when the magnetic field is about to change. This does not occur with the SVD-EKF, which relies on the quiescent EKF in conditions of magnetic quiet. As expected, the switching to the higher-order EKF increases the algorithm capability of accurately tracking the time-changes of the magnetic field. In conclusion, we catch the best by combining the two models together as done in the VSD-EKF, which shows good accuracy of the estimated yaw and good compensation of the magnetic disturbances.</p>
<p>The results of the dynamic test show the effectiveness of the proposed VSD-EKF and basically confirm the results of the static test. Not surprisingly perhaps, the RMS errors affecting the roll and pitch angle estimates are worse than in the static test. A possible reason may be due to slight imperfections in the synchronization process between IMU and Vicon data streams and errors incurred by the optical motion analysis system itself in generating the ground-truth reference orientation data used for computation. Another reason is certainly that the acceleration measurements cannot be explained by gravity alone. Although slow in nature, the IMU motion determines additional components in the acceleration measurements that cannot be taken into account when they are used in the measurement update of the EKF. The trick we choose to mitigate this problem is to increase the values of the accelerometer measurement noise standard deviation in the matrix <bold>R</bold>, as compared with the value used during the static test, <xref ref-type="table" rid="t2-sensors-12-08491">Table 2</xref>. Vector selection schemes are not considered in this paper as a means to guard against the effects of body motions. In our ongoing research on using the VSD-EKF to process the measurements from the inertial/magnetic sensors embedded in a state-of-the-art smartphone, we are planning to investigate how vector selection methods can be exploited in the case of faster body motions than those considered in the present work.</p>
<p>Another interesting observation from our tests is that the gyro-bias compensation generally helps produce more accurate estimates of either orientation or magnetic field. This may be quite surprising, since the gyro output is submitted to a bias capture procedure during the filter initialization and the gyro bias cannot change significantly over the limited time duration of the tests. Our interpretation is that adding a limited amount of pseudo-noise to the gyro-bias components of the state vector has a useful stabilizing effect, which is beneficial in producing more accurate estimates. The injection of limited amounts of process noise is often suggested as a means to stabilize the behavior of Kalman-based filters [<xref ref-type="bibr" rid="b27-sensors-12-08491">27</xref>]. However, the stabilizing effect of pseudo-noise injection fails to act in the higher-order EKF. Our explanation is in the reduced observability of the filter design when the time-rate of change of the magnetic field is also included in the system's state.</p>
<p>The results of the tracking tests reported in this paper are quite representative of the behavior of the investigated filters. We may state that the quiescent EKF with gyro bias compensation and the higher-order EKF without gyro bias compensation perform similarly, and both are inferior to the SVD-EKF, sometimes remarkably.</p>
<p>In conclusion, we have presented in this paper an adaptive variable-state-dimension EKF for processing the data from an IMU integrated with a magnetic sensor. The proposed algorithm estimates the quaternion of rotation and attempts to compensate magnetic disturbances and gyro bias. The filter switches from a quiescent EKF, built around a first-order Gauss-Markov model for describing magnetic distortions, to a higher-order EKF, built around the same stochastic model applied to the time-rate of change of the local magnetic field. Experimental validation tests show the effectiveness of the proposed approach in magnetically perturbed environments.</p></sec></body>
<back>
<ack>
<p>The author is indebted to Andrea Mannini for his help in performing the experiments described in the paper.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-12-08491"><label>1.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Foxlin</surname><given-names>E.</given-names></name></person-group><article-title>Motion Tracking Requirements and Technologies</article-title><source>Handbook of Virtual Environments: Design, Implementation, and Applications</source><person-group person-group-type="editor"><name><surname>Stanney</surname><given-names>K.M.</given-names></name></person-group><publisher-name>Lawrence Erlbaum Associates</publisher-name><publisher-loc>Mahwah, NJ, USA</publisher-loc><year>2002</year><fpage>163</fpage><lpage>210</lpage></citation></ref>
<ref id="b2-sensors-12-08491"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Roetenberg</surname><given-names>D.</given-names></name><name><surname>Luinge</surname><given-names>H.J.</given-names></name><name><surname>Baten</surname><given-names>C.T.M.</given-names></name><name><surname>Veltink</surname><given-names>P.H.</given-names></name></person-group><article-title>Compensation of magnetic disturbances improves inertial and magnetic sensing of human body segment orientation</article-title><source>IEEE Trans. Neural Syst. Rehabil. Eng.</source><year>2005</year><volume>13</volume><fpage>395</fpage><lpage>405</lpage><pub-id pub-id-type="doi">10.1109/TNSRE.2005.847353</pub-id><pub-id pub-id-type="pmid">16200762</pub-id></citation></ref>
<ref id="b3-sensors-12-08491"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Foxlin</surname><given-names>E.</given-names></name></person-group><article-title>Pedestrian tracking with shoe-mounted inertial sensors</article-title><source>IEEE Comput. Graph. Appl.</source><year>2005</year><volume>25</volume><fpage>38</fpage><lpage>46</lpage><pub-id pub-id-type="doi">10.1109/MCG.2005.140</pub-id><pub-id pub-id-type="pmid">16315476</pub-id></citation></ref>
<ref id="b4-sensors-12-08491"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Welch</surname><given-names>G.F.</given-names></name><name><surname>Foxlin</surname><given-names>E.</given-names></name></person-group><article-title>Motion tracking: No silver bullet, but a respectable arsenal</article-title><source>IEEE Comput. Graph. Appl.</source><year>2002</year><volume>22</volume><fpage>24</fpage><lpage>38</lpage></citation></ref>
<ref id="b5-sensors-12-08491"><label>5.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Sabatini</surname><given-names>A.M.</given-names></name></person-group><article-title>Inertial Sensing in Biomechanics: A Survey of Computational Techniques Bridging Motion Analysis and Personal Navigation</article-title><source>Computational Intelligence for Movement Sciences, Neural Networks and other Emerging Techniques</source><person-group person-group-type="editor"><name><surname>Begg</surname><given-names>R.</given-names></name><name><surname>Palaniswami</surname><given-names>M.</given-names></name></person-group><publisher-name>IGP Idea Group Publishing</publisher-name><publisher-loc>Hershey PA, USA</publisher-loc><year>2006</year><fpage>70</fpage><lpage>100</lpage></citation></ref>
<ref id="b6-sensors-12-08491"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Veltink</surname><given-names>P.H.</given-names></name><name><surname>Bussmann</surname><given-names>H.B.J.</given-names></name><name><surname>de Vries</surname><given-names>W.H.K.</given-names></name><name><surname>Martens</surname><given-names>W.L.J.</given-names></name><name><surname>van Lummel</surname><given-names>R.C.</given-names></name></person-group><article-title>Detection of static and dynamic activities using uniaxial accelerometers</article-title><source>IEEE Trans. Rehabil. Eng.</source><year>1996</year><volume>4</volume><fpage>375</fpage><lpage>385</lpage><pub-id pub-id-type="doi">10.1109/86.547939</pub-id><pub-id pub-id-type="pmid">8973963</pub-id></citation></ref>
<ref id="b7-sensors-12-08491"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Bachmann</surname><given-names>E.R.</given-names></name><name><surname>Xiaoping</surname><given-names>Y.</given-names></name><name><surname>Peterson</surname><given-names>C.W.</given-names></name></person-group><article-title>An Investigation of the Effects of Magnetic Variations on Inertial/Magnetic Orientation Sensors</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation (ICRA '04)</conf-name><conf-loc>New Orleans, LA, USA</conf-loc><conf-date>26 April—1 May 2004</conf-date><fpage>1115</fpage><lpage>1122</lpage></citation></ref>
<ref id="b8-sensors-12-08491"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>de Vries</surname><given-names>W.H.K.</given-names></name><name><surname>Veeger</surname><given-names>H.E.J.</given-names></name><name><surname>Baten</surname><given-names>C.T.M.</given-names></name><name><surname>van der Helm</surname><given-names>F.C.T.</given-names></name></person-group><article-title>Magnetic distortion in motion labs, implications for validating inertial magnetic sensors</article-title><source>Gait Posture</source><year>2009</year><volume>29</volume><fpage>535</fpage><lpage>541</lpage><pub-id pub-id-type="doi">10.1016/j.gaitpost.2008.12.004</pub-id><pub-id pub-id-type="pmid">19150239</pub-id></citation></ref>
<ref id="b9-sensors-12-08491"><label>9.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Afzal</surname><given-names>M.H.</given-names></name><name><surname>Renaudin</surname><given-names>V.</given-names></name><name><surname>Lachapelle</surname><given-names>G.</given-names></name></person-group><article-title>Assessment of Indoor Magnetic Field Anomalies Using Multiple Magnetometers</article-title><conf-name>Proceedings of the 23rd International Technical Meeting of The Satellite Division of the Institute of Navigation (ION GNSS 2010)</conf-name><conf-loc>Portland, OR, USA</conf-loc><conf-date>21–24 September 2010</conf-date></citation></ref>
<ref id="b10-sensors-12-08491"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sabatini</surname><given-names>A.M.</given-names></name></person-group><article-title>Estimating three-dimensional orientation of human body parts by inertial/magnetic sensing</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>1489</fpage><lpage>1525</lpage><pub-id pub-id-type="doi">10.3390/s110201489</pub-id><pub-id pub-id-type="pmid">22319365</pub-id></citation></ref>
<ref id="b11-sensors-12-08491"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Yun</surname><given-names>X.</given-names></name><name><surname>Bachmann</surname><given-names>E.R.</given-names></name></person-group><article-title>Design, implementation, and experimental results of a quaternion-based Kalman filter for human body motion tracking</article-title><source>IEEE Trans. Robot.</source><year>2006</year><volume>22</volume><fpage>1216</fpage><lpage>1227</lpage><pub-id pub-id-type="doi">10.1109/TRO.2006.886270</pub-id></citation></ref>
<ref id="b12-sensors-12-08491"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sabatini</surname><given-names>A.M.</given-names></name></person-group><article-title>Quaternion-based extended Kalman filter for determining orientation by inertial and magnetic sensing</article-title><source>IEEE Trans. Biomed. Eng.</source><year>2006</year><volume>53</volume><fpage>1346</fpage><lpage>1356</lpage><pub-id pub-id-type="doi">10.1109/TBME.2006.875664</pub-id><pub-id pub-id-type="pmid">16830938</pub-id></citation></ref>
<ref id="b13-sensors-12-08491"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sabatini</surname><given-names>A.M.</given-names></name></person-group><article-title>Kalman-filter-based orientation determination using inertial/magnetic sensors: Observability analysis and performance evaluation</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>9182</fpage><lpage>9206</lpage><pub-id pub-id-type="doi">10.3390/s111009182</pub-id><pub-id pub-id-type="pmid">22163689</pub-id></citation></ref>
<ref id="b14-sensors-12-08491"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lefferts</surname><given-names>E.J.</given-names></name><name><surname>Markley</surname><given-names>F.L.</given-names></name><name><surname>Shuster</surname><given-names>M.D.</given-names></name></person-group><article-title>Kalman filtering for spacecraft attitude estimation</article-title><source>J. Guid.</source><year>1982</year><volume>5</volume><fpage>417</fpage><lpage>429</lpage><pub-id pub-id-type="doi">10.2514/3.56190</pub-id></citation></ref>
<ref id="b15-sensors-12-08491"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Crassidis</surname><given-names>J.L.</given-names></name><name><surname>Markley</surname><given-names>F.L.</given-names></name></person-group><article-title>Unscented filtering for spacecraft attitude estimation</article-title><source>J. Guid. Contr. Dyn.</source><year>2003</year><volume>26</volume><fpage>536</fpage><lpage>542</lpage><pub-id pub-id-type="doi">10.2514/2.5102</pub-id></citation></ref>
<ref id="b16-sensors-12-08491"><label>16.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tomé</surname><given-names>P.</given-names></name><name><surname>Yalak</surname><given-names>O.</given-names></name></person-group><article-title>Improvement of orientation estimation in pedestrian navigation by compensation of magnetic disturbances</article-title><source>J. Navig.</source><year>2008</year><volume>55</volume><fpage>179</fpage><lpage>190</lpage></citation></ref>
<ref id="b17-sensors-12-08491"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chou</surname><given-names>J.C.K.</given-names></name></person-group><article-title>Quaternion kinematics and dynamic differential equations</article-title><source>IEEE Trans. Robot. Autom.</source><year>1992</year><volume>8</volume><fpage>53</fpage><lpage>64</lpage><pub-id pub-id-type="doi">10.1109/70.127239</pub-id></citation></ref>
<ref id="b18-sensors-12-08491"><label>18.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shuster</surname><given-names>M.D.</given-names></name></person-group><article-title>A survey of attitude representations</article-title><source>J. Astronaut. Sci.</source><year>1993</year><volume>41</volume><fpage>439</fpage><lpage>517</lpage></citation></ref>
<ref id="b19-sensors-12-08491"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ferraris</surname><given-names>F.</given-names></name><name><surname>Grimaldi</surname><given-names>U.</given-names></name><name><surname>Parvis</surname><given-names>M.</given-names></name></person-group><article-title>Procedure for effortless in-field calibration of three-axis rate gyros and accelerometers</article-title><source>Sens. Mater.</source><year>1995</year><volume>7</volume><fpage>311</fpage><lpage>330</lpage></citation></ref>
<ref id="b20-sensors-12-08491"><label>20.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gebre-Egziabher</surname><given-names>D.</given-names></name><name><surname>Elkaim</surname><given-names>G.H.</given-names></name><name><surname>Powell</surname><given-names>J.D.</given-names></name><name><surname>Parkinson</surname><given-names>B.W.</given-names></name></person-group><article-title>Calibration of strapdown magnetometers in magnetic field domain</article-title><source>J. Aerosp. Eng.</source><year>2006</year><volume>19</volume><fpage>87</fpage><lpage>102</lpage><pub-id pub-id-type="doi">10.1061/(ASCE)0893-1321(2006)19:2(87)</pub-id></citation></ref>
<ref id="b21-sensors-12-08491"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Singer</surname><given-names>R.A.</given-names></name></person-group><article-title>Estimating optimal tracking filter performance for manned maneuvering targets</article-title><source>IEEE Trans. Aerosp. Electron. Syst.</source><year>1970</year><volume>6</volume><fpage>473</fpage><lpage>483</lpage><pub-id pub-id-type="doi">10.1109/TAES.1970.310128</pub-id></citation></ref>
<ref id="b22-sensors-12-08491"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Choukroun</surname><given-names>D.</given-names></name><name><surname>Bar-Itzhack</surname><given-names>I.Y.</given-names></name><name><surname>Oshman</surname><given-names>Y.</given-names></name></person-group><article-title>Novel quaternion Kalman filter</article-title><source>IEEE Trans. Aerosp. Electron. Syst.</source><year>2006</year><volume>41</volume><fpage>174</fpage><lpage>190</lpage></citation></ref>
<ref id="b23-sensors-12-08491"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Harada</surname><given-names>T.</given-names></name><name><surname>Mori</surname><given-names>T.</given-names></name><name><surname>Sato</surname><given-names>T.</given-names></name></person-group><article-title>Development of a tiny orientation estimation device to operate under motion and magnetic disturbance</article-title><source>Int. J. Rob. Res.</source><year>2007</year><volume>26</volume><fpage>547</fpage><lpage>559</lpage><pub-id pub-id-type="doi">10.1177/0278364907079272</pub-id></citation></ref>
<ref id="b24-sensors-12-08491"><label>24.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>J.K.</given-names></name><name><surname>Park</surname><given-names>E.J.</given-names></name></person-group><article-title>A fast quaternion-based orientation optimizer via virtual rotation for human motion tracking</article-title><source>IEEE Trans. Biomed. Eng.</source><year>2009</year><volume>56</volume><fpage>1574</fpage><lpage>1582</lpage><pub-id pub-id-type="doi">10.1109/TBME.2008.2001285</pub-id><pub-id pub-id-type="pmid">19473934</pub-id></citation></ref>
<ref id="b25-sensors-12-08491"><label>25.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shuster</surname><given-names>M.D.</given-names></name><name><surname>Oh</surname><given-names>S.</given-names></name></person-group><article-title>Three-axis attitude determination from vector observations</article-title><source>J. Guid. Control</source><year>1981</year><volume>4</volume><fpage>70</fpage><lpage>77</lpage><pub-id pub-id-type="doi">10.2514/3.19717</pub-id></citation></ref>
<ref id="b26-sensors-12-08491"><label>26.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Bar-Shalom</surname><given-names>Y.</given-names></name><name><surname>Li</surname><given-names>X.R.</given-names></name><name><surname>Kirubarajan</surname><given-names>T.</given-names></name></person-group><source>Estimation with Applications to Tracking and Navigation</source><publisher-name>John Wiley &amp; Sons</publisher-name><publisher-loc>Hoboken, NJ, USA</publisher-loc><year>2001</year></citation></ref>
<ref id="b27-sensors-12-08491"><label>27.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Maybeck</surname><given-names>P.S.</given-names></name></person-group><source>Stochastic Models, Estimation and Control</source><publisher-name>Academic Press</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><year>1982</year></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-12-08491" position="float">
<label>Figure 1.</label>
<caption>
<p>Static test. (<bold>a</bold>) The ground-truth magnetic field; (<bold>b</bold>) The magnetic field estimated by the VSD-EKF; (<bold>c</bold>) the magnetic field estimated by the higher-order EKF; (<bold>d</bold>) the magnetic field estimated by the quiescent EKF.</p></caption>
<graphic xlink:href="sensors-12-08491f1.gif"/></fig>
<fig id="f2-sensors-12-08491" position="float">
<label>Figure 2.</label>
<caption>
<p>Fading memory average used for switching from the quiescent state model to the higher-order state model in the VSD-EKF (static test).</p></caption>
<graphic xlink:href="sensors-12-08491f2.gif"/></fig>
<fig id="f3-sensors-12-08491" position="float">
<label>Figure 3.</label>
<caption>
<p>Estimated yaw angle for the three different filters (static test).</p></caption>
<graphic xlink:href="sensors-12-08491f3.gif"/></fig>
<fig id="f4-sensors-12-08491" position="float">
<label>Figure 4.</label>
<caption>
<p>Components of the ground-truth reference magnetic field. The horizontal bars at the top of the plot show the time intervals of sojourns in the higher-order state model (dynamic test).</p></caption>
<graphic xlink:href="sensors-12-08491f4.gif"/></fig>
<fig id="f5-sensors-12-08491" position="float">
<label>Figure 5.</label>
<caption>
<p>Ground-truth Euler angles and estimation errors incurred by the VSD-EKF (dynamic test).</p></caption>
<graphic xlink:href="sensors-12-08491f5a.gif"/>
<graphic xlink:href="sensors-12-08491f5b.gif"/></fig>
<table-wrap id="t1-sensors-12-08491" position="float">
<label>Table 1.</label>
<caption>
<p>Parameter tuning.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th colspan="3" align="center" valign="middle"><bold>Static test</bold></th></tr>
<tr>
<th align="left" valign="middle" rowspan="2"><bold>Filtering algorithm</bold></th>
<th colspan="2" align="center" valign="middle"><bold>Models for magnetic distortion</bold></th></tr>
<tr>
<th align="center" valign="middle">Perturbation OFF</th>
<th align="center" valign="middle">Perturbation ON</th></tr></thead>
<tbody>
<tr>
<td align="left" valign="top"><bold>VSD-EKF</bold></td>
<td align="center" valign="top">GM-1</td>
<td align="center" valign="top">GM-2</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation</td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−2</sup> a.u./s</td>
<td align="center" valign="top">0.2<break/>5 · 10<sup>−1</sup> a.u./s<sup>2</sup></td></tr>
<tr>
<td align="left" valign="top"><bold>Higher-order EKF</bold></td>
<td align="center" valign="top">GM-2</td>
<td align="center" valign="top">GM-2</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation, a.u./s<sup>2</sup></td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−5</sup></td>
<td align="center" valign="top">0.2<break/>5 · 10<sup>−1</sup></td></tr>
<tr>
<td align="left" valign="top"><bold>Quiescent EKF</bold></td>
<td align="center" valign="top">GM-1</td>
<td align="center" valign="top">GM-1</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation, a.u./s</td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−2</sup></td>
<td align="center" valign="top">0<break/>5</td></tr>
<tr>
<td colspan="3" align="center" valign="middle"><bold>Dynamic test</bold></td></tr>
<tr>
<td align="left" valign="middle" rowspan="2"><bold>Filtering algorithm</bold></td>
<td colspan="2" align="center" valign="middle"><bold>Models for magnetic distortion</bold></td></tr>
<tr>
<td align="center" valign="middle">Perturbation OFF</td>
<td align="center" valign="middle">Perturbation ON</td></tr>
<tr>
<td align="left" valign="top"><bold>VSD-EKF</bold></td>
<td align="center" valign="top">GM-1</td>
<td align="center" valign="top">GM-2</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation</td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−2</sup> a.u./s</td>
<td align="center" valign="top">0.2<break/>5 · 10<sup>−2</sup> a.u./s<sup>2</sup></td></tr>
<tr>
<td align="left" valign="top"><bold>Higher-order EKF</bold></td>
<td align="center" valign="top">GM-2</td>
<td align="center" valign="top">GM-2</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation, a.u./s<sup>2</sup></td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−5</sup></td>
<td align="center" valign="top">0.2<break/>5 · 10<sup>−1</sup></td></tr>
<tr>
<td align="left" valign="top"><bold>Quiescent EKF</bold></td>
<td align="center" valign="top">GM-1</td>
<td align="center" valign="top">GM-1</td></tr>
<tr>
<td align="left" valign="top">Correlation time constant, s<break/>Standard deviation, a.u./s</td>
<td align="center" valign="top">0.1<break/>5 · 10<sup>−2</sup></td>
<td align="center" valign="top">0.4<break/>5</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-12-08491" position="float">
<label>Table 2.</label>
<caption>
<p>Parameter tuning.</p></caption>
<table frame="box" rules="cols">
<thead>
<tr>
<th align="left" valign="top"><bold>Measurement noise standard deviation</bold></th>
<th align="center" valign="top"><bold>Static test</bold></th>
<th align="center" valign="top"><bold>Dynamic test</bold></th></tr>
<tr>
<th valign="bottom" colspan="3">
<hr/></th></tr></thead>
<tbody>
<tr>
<td align="left" valign="top"><italic>σ<sub>g</sub></italic>, °/s</td>
<td align="center" valign="top">0.4</td>
<td align="center" valign="top">0.5</td></tr>
<tr>
<td align="left" valign="top"><italic>σ<sub>a</sub></italic>, m<italic>g</italic></td>
<td align="center" valign="top">1.0</td>
<td align="center" valign="top">15.0</td></tr>
<tr>
<td align="left" valign="top"><italic>σ<sub>m</sub></italic>, a.u. (×10<sup>−3</sup>)</td>
<td align="center" valign="top">1.0</td>
<td align="center" valign="top">2.0</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-12-08491" position="float">
<label>Table 3.</label>
<caption>
<p>Euler angles and magnetic distortion RMSE (static test).</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"/>
<th align="center" valign="bottom"><bold>Roll, °</bold></th>
<th align="center" valign="bottom"><bold>Pitch, °</bold></th>
<th align="center" valign="bottom"><bold>Yaw, °</bold></th>
<th align="center" valign="bottom"><bold>Field, a.u.</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">VSD-EKF-Y</td>
<td align="center" valign="top">0.09</td>
<td align="center" valign="top">0.02</td>
<td align="center" valign="top">0.17</td>
<td align="center" valign="top">7.89</td></tr>
<tr>
<td align="center" valign="top">VSD-EKF-N</td>
<td align="center" valign="top">0.09</td>
<td align="center" valign="top">0.02</td>
<td align="center" valign="top">3.16</td>
<td align="center" valign="top">25.31</td></tr>
<tr>
<td align="center" valign="top">Higher-order EKF-Y</td>
<td align="center" valign="top">0.07</td>
<td align="center" valign="top">0.08</td>
<td align="center" valign="top">3.54</td>
<td align="center" valign="top">26.10</td></tr>
<tr>
<td align="center" valign="top">Higher-order EKF-N</td>
<td align="center" valign="top">0.07</td>
<td align="center" valign="top">0.08</td>
<td align="center" valign="top">2.57</td>
<td align="center" valign="top">20.81</td></tr>
<tr>
<td align="center" valign="top">Quiescent EKF-Y</td>
<td align="center" valign="top">0.09</td>
<td align="center" valign="top">0.02</td>
<td align="center" valign="top">1.60</td>
<td align="center" valign="top">60.40</td></tr>
<tr>
<td align="center" valign="top">Quiescent EKF-N</td>
<td align="center" valign="top">0.09</td>
<td align="center" valign="top">0.02</td>
<td align="center" valign="top">4.87</td>
<td align="center" valign="top">70.12</td></tr></tbody></table></table-wrap>
<table-wrap id="t4-sensors-12-08491" position="float">
<label>Table 4.</label>
<caption>
<p>Euler angles and magnetic distortion RMSE (dynamic test).</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="bottom"/>
<th align="center" valign="bottom"><bold>Roll, °</bold></th>
<th align="center" valign="bottom"><bold>Pitch, °</bold></th>
<th align="center" valign="bottom"><bold>Yaw, °</bold></th>
<th align="center" valign="bottom"><bold>Field, a.u.</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">VSD-EKF-Y</td>
<td align="center" valign="top">1.39</td>
<td align="center" valign="top">1.21</td>
<td align="center" valign="top">1.90</td>
<td align="center" valign="top">19.78</td></tr>
<tr>
<td align="center" valign="top">VSD-EKF-N</td>
<td align="center" valign="top">1.81</td>
<td align="center" valign="top">1.47</td>
<td align="center" valign="top">6.66</td>
<td align="center" valign="top">33.02</td></tr>
<tr>
<td align="center" valign="top">Higher-order EKF-Y</td>
<td align="center" valign="top">2.19</td>
<td align="center" valign="top">1.47</td>
<td align="center" valign="top">8.20</td>
<td align="center" valign="top">49.39</td></tr>
<tr>
<td align="center" valign="top">Higher-order EKF-N</td>
<td align="center" valign="top">1.99</td>
<td align="center" valign="top">2.06</td>
<td align="center" valign="top">2.18</td>
<td align="center" valign="top">36.89</td></tr>
<tr>
<td align="center" valign="top">Quiescent EKF-Y</td>
<td align="center" valign="top">1.29</td>
<td align="center" valign="top">1.10</td>
<td align="center" valign="top">2.06</td>
<td align="center" valign="top">20.96</td></tr>
<tr>
<td align="center" valign="top">Quiescent EKF-N</td>
<td align="center" valign="top">1.66</td>
<td align="center" valign="top">1.27</td>
<td align="center" valign="top">7.17</td>
<td align="center" valign="top">37.10</td></tr></tbody></table></table-wrap></sec></back></article>
