<?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/s120606764</article-id>
<article-id pub-id-type="publisher-id">sensors-12-06764</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Enhancing Positioning Accuracy in Urban Terrain by Fusing Data from a GPS Receiver, Inertial Sensors, Stereo-Camera and Digital Maps for Pedestrian Navigation</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Przemyslaw</surname><given-names>Baranski</given-names></name><xref ref-type="corresp" rid="c1-sensors-12-06764"><sup>*</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Pawel</surname><given-names>Strumillo</given-names></name></contrib>
<aff id="af1-sensors-12-06764">Institute of Electronics, Technical University of Lodz, Wolczanska 211/215, 90-924 Lodz, Poland; E-Mail: <email>pawel.strumillo@p.lodz.pl</email></aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-12-06764">
<label>*</label>Author to whom correspondence should be addressed; E-Mail: <email>przemyslaw.baranski@p.lodz.pl</email>; Tel.: +48-42-631-2685.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2012</year></pub-date>
<pub-date pub-type="epub">
<day>25</day>
<month>05</month>
<year>2012</year></pub-date>
<volume>12</volume>
<issue>6</issue>
<fpage>6764</fpage>
<lpage>6801</lpage>
<history>
<date date-type="received">
<day>06</day>
<month>03</month>
<year>2012</year></date>
<date date-type="rev-recd">
<day>19</day>
<month>04</month>
<year>2012</year></date>
<date date-type="accepted">
<day>29</day>
<month>04</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>The paper presents an algorithm for estimating a pedestrian location in an urban environment. The algorithm is based on the particle filter and uses different data sources: a GPS receiver, inertial sensors, probability maps and a stereo camera. Inertial sensors are used to estimate a relative displacement of a pedestrian. A gyroscope estimates a change in the heading direction. An accelerometer is used to count a pedestrian's steps and their lengths. The so-called probability maps help to limit GPS inaccuracy by imposing constraints on pedestrian kinematics, e.g., it is assumed that a pedestrian cannot cross buildings, fences <italic>etc</italic>. This limits position inaccuracy to <italic>ca.</italic> 10 m. Incorporation of depth estimates derived from a stereo camera that are compared to the 3D model of an environment has enabled further reduction of positioning errors. As a result, for 90% of the time, the algorithm is able to estimate a pedestrian location with an error smaller than 2 m, compared to an error of 6.5 m for a navigation based solely on GPS.</p></abstract>
<kwd-group>
<kwd>particle filtering</kwd>
<kwd>stereovision</kwd>
<kwd>digital maps</kwd>
<kwd>GPS</kwd>
<kwd>Monte Carlo</kwd>
<kwd>dead reckoning</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>GPS-NAVSTAR (Global Positioning System-NAVigation Signal Timing And Ranging), popularly known as the GPS system, has considerably gained in civilian interests, since May 2000. Earlier, the system was practically reserved for military purposes. The positioning accuracy for the civilian sector was <italic>ca.</italic> 100 m due to an intentional error, called Selective Availability. According to report [<xref ref-type="bibr" rid="b1-sensors-12-06764">1</xref>], the horizontal positioning error is less than 17 m for 99% of the time in average conditions or 17 m for 90% of the time in worse outdoor conditions. The error depends on many factors, like atmospheric conditions, sun activity, geographical location, terrain type, satellites' constellation, etc. In an open space, positioning errors are of <italic>ca.</italic> 2–3 m. However, in dense built-up areas, the location error may reach 100 m [<xref ref-type="bibr" rid="b2-sensors-12-06764">2</xref>,<xref ref-type="bibr" rid="b3-sensors-12-06764">3</xref>] or even more [<xref ref-type="bibr" rid="b4-sensors-12-06764">4</xref>]. The error is introduced due to multipath propagation of signals transmitted by the satellites when there is no line-of-sight. A satellite signal is bounced off the walls of a building before finding its way to a GPS receiver. The propagation time of the signal is delayed and the GPS receiver miscalculates its location with a reference to the satellites.</p>
<p>There are many techniques to improve the location accuracy. Along coasts, for marine purposes, special ground DGPS (Differential GPS) reference stations broadcast differential corrections that allow a GPS receiver to eliminate tropospheric, ionospheric, ephemeris and clock errors. The overall error is reduced to 10 m with accuracy decreasing by 1 m with each 150 km increase in distance from the reference station. The corrections are transmitted on a <italic>ca.</italic> 300 kHz carrier frequency. A receiver must be, however, equipped with an additional antenna [<xref ref-type="bibr" rid="b5-sensors-12-06764">5</xref>].</p>
<p>A-GPS (Assisted GPS) is a technique that downloads from the Internet the data concerning GPS satellite constellation [<xref ref-type="bibr" rid="b6-sensors-12-06764">6</xref>]. Otherwise a GPS receiver may require up to 12.5 minutes to receive data about satellite constellation. By employing the A-GPS, the first fix is provided within few seconds. Additionally, a GSM modem can support a GPS receiver with a rough location which is obtained by measuring the strengths of signals from GSM base stations.</p>
<p>Apart from L1 = 1,227 MHz, a second frequency called L2C = 1,575 MHz, has been made available to the civilian sector with the aim of reducing the ionospheric and tropospheric errors which are a well defined function of frequency. Also, the so-called augmentation systems effectively reduce tropospheric and ionospheric errors by sending differential corrections from geostationary satellites directly to GPS receivers. The geostationary satellites imitate also GPS satellites and improve mainly the vertical accuracy. EGNOS (European Geostationary Navigation Overlay Service) works in Europe, WAAS (Wide Area Augmentation System) in the US, MSAS (Multi-functional Satellite Augmentation System) in Japan and GAGAN (GPS aided Geo-Augmented Navigation) in India.</p>
<p>Real Time Kinematics technique achieves the accuracy of millimetres in an open space and is designated for cartographic measurements. However, two GPS receiver are necessary. The base receiver is placed in a known position and calculates tropospheric, ionospheric, ephemerids and clock errors of satellites. The corrections are sent via a radio link to a mobile GPS receiver. In the trials reported in [<xref ref-type="bibr" rid="b4-sensors-12-06764">4</xref>] RMS error of 2 cm on a mountain high-way was noted whereas trials in urban canyons yielded a 50 m RMS error.</p>
<p>All the above mentioned techniques are helpless against multipath propagation errors. Algorithms harnessed in car navigation alleviate these errors by taking advantage of car kinematics and a comparatively sparse network of roads, as described, e.g., in [<xref ref-type="bibr" rid="b7-sensors-12-06764">7</xref>] or [<xref ref-type="bibr" rid="b8-sensors-12-06764">8</xref>]. An error of 20 m is of no bigger importance to a driver. In case of navigating pedestrians, especially blind ones, the target accuracy should ideally not exceed the pavement width, <italic>i.e., ca.</italic> 2 m.</p>
<p>This work presents a navigation scheme using GPS readouts, digital maps, inertial sensors and stereovision images with an aim of navigating a blind pedestrian. An accelerometer is used to detect pedestrian's strides and estimate their length. A gyroscope serves for estimating the heading direction. Those data sources help eliminate gross positioning errors and outliers. The digital maps are used twofold. Firstly, the so-called probability map is built to eliminate improbable user transitions, like traversing water ponds, crossing walls and buildings, etc. Secondly, a 3D model of the environment is built. The model is compared to stereoscopic images recorded by a mobile stereo camera. Interestingly, this comparison of 3D geometry of the environment provides good positioning accuracy in the surrounding of buildings, where GPS readouts are compromised. The proposed scheme employs the particle filter, also known as a sequential Monte Carlo method.</p></sec>
<sec>
<label>2.</label>
<title>Related Work</title>
<p>The topic of pedestrian navigation including navigation aids for blind pedestrians has been described in many publications [<xref ref-type="bibr" rid="b9-sensors-12-06764">9</xref>–<xref ref-type="bibr" rid="b11-sensors-12-06764">11</xref>]. The first step to correct GPS readouts is to apply inertial sensors. Inertial sensors are mainly used in aviation to compute the orientation and position of an aircraft. Calculating the location requires double integration of the acceleration vector. Prior to these calculations the gravity acceleration must be removed, as accelerometers cannot distinguish gravity from an aircraft's accelerations. Therefore, the orientation of an aircraft with respect to the Earth's surface must be calculated from gyroscopes. The technique is known as INS (Inertial Navigation Systems) and warrants very precise and expensive laser sensors using the Sagnac effect. However, the strict implementation of INS using MEMS sensors (Micro Electro-Mechanical Systems) is useless after few seconds due to errors growing quadratically with time [<xref ref-type="bibr" rid="b12-sensors-12-06764">12</xref>].</p>
<p>A travelled distance of a pedestrian can be estimated with surprisingly good accuracy by measuring the length of steps. This is done by analysing the acceleration in the gravity axis [<xref ref-type="bibr" rid="b10-sensors-12-06764">10</xref>,<xref ref-type="bibr" rid="b13-sensors-12-06764">13</xref>]. As a person walks, the body undulates according to the strides. The technique is accurate from 0.5% to 10%, depending on the gait style. ZUPT (Zero Velocity Update) technique exploits the fact that a foot is at rest for some short period. An accelerometer must be mounted to a foot which is an inconvenience, offset however by better accuracy compared to the previous method [<xref ref-type="bibr" rid="b14-sensors-12-06764">14</xref>].</p>
<p>A heading direction can simply be read out from a magnetic compass, optionally supported by a gyroscope. A compass is sensitive to local distortions of a magnetic field due to cars, power lines <italic>etc.</italic> [<xref ref-type="bibr" rid="b10-sensors-12-06764">10</xref>]. An electric tram can compromise a compass readouts within the radius of up to 100 m. A gyroscope, coupled by the Kalman filter, can reduce erroneous readouts [<xref ref-type="bibr" rid="b15-sensors-12-06764">15</xref>].</p>
<p>The combination of GPS and inertial sensors readouts provides continuous estimates during GPS outages in harsh environments like tunnels, underground passages, dense urban areas etc. Positioning data from these two sources are usually integrated by the Extended Kalman filter or particle filter, which perform well when errors can be modelled by white noise which has the property of being uncorrelated with itself. However, the GPS errors are characterized by coloured noise [<xref ref-type="bibr" rid="b2-sensors-12-06764">2</xref>,<xref ref-type="bibr" rid="b16-sensors-12-06764">16</xref>]. This is because when a GPS receiver loses track of satellites its position is estimated by using the history of previous locations. Secondly, signals from satellites occluded by the same building are equally delayed, which introduces a bias in a given direction. This feature of errors corrupting GPS readouts was reported in earlier studies [<xref ref-type="bibr" rid="b14-sensors-12-06764">14</xref>,<xref ref-type="bibr" rid="b17-sensors-12-06764">17</xref>]. Jirawimut <italic>et al.</italic> [<xref ref-type="bibr" rid="b18-sensors-12-06764">18</xref>] present an interesting concept where the height of buildings wereutilized to check if a given satellite is occluded. The authors carried out simulation which yielded good results.</p>
<p>To improve the accuracy of dead-reckoning techniques, an additional source of the absolute pedestrian location should be introduced. Experiments in [<xref ref-type="bibr" rid="b4-sensors-12-06764">4</xref>] showed that a combination of GPS and GLONASS navigation systems reduces root-mean-square (RMS) error by half and outliers by several times. Another solution is introducing the so-called probability map as a new source of data, which defines regions of a terrain that the user is most likely to enter or cross. A pedestrian is more likely to walk along pavements, parking places, paths, <italic>etc.</italic>, rather than crossing walls, water ponds, <italic>etc</italic>. This cuts down the positioning errors as they start to aggregate. This map-based navigation concept proved its usefulness in outdoor pedestrian applications [<xref ref-type="bibr" rid="b19-sensors-12-06764">19</xref>,<xref ref-type="bibr" rid="b20-sensors-12-06764">20</xref>] as well as indoor positioning [<xref ref-type="bibr" rid="b21-sensors-12-06764">21</xref>–<xref ref-type="bibr" rid="b23-sensors-12-06764">23</xref>]. In built-up areas, a probability map limits inaccuracy to a width of an urban canyon, usually delineated by buildings on both sides.</p>
<p>A further improvement of positioning accuracy requires positioning with respect to known landmarks, <italic>i.e.</italic>, the so-called exteroception. The accuracy of landmarks' location should be approximately an order of magnitude better than the target accuracy of <italic>ca.</italic> 2 m. A vision-based technique called SLAM (Simultaneous Localization and Mapping) enables to build a map of the surrounding space and provide localization at the same time without employing any global navigation method. The SLAM based technique can be applied to build a 3D map of the environment. A review of SLAM techniques, modifications, results, <italic>etc.</italic>, are given in book [<xref ref-type="bibr" rid="b24-sensors-12-06764">24</xref>]. An application of SLAM for pedestrian navigation with results is given in [<xref ref-type="bibr" rid="b25-sensors-12-06764">25</xref>]. Also a navigation system for the blind using a stereo-camera for tracing landmarks is presented in [<xref ref-type="bibr" rid="b26-sensors-12-06764">26</xref>].</p>
<p>On the other hand, precise maps of outdoor or indoor environments may already be available, e.g., a plan of a building or plans of a city which are accurate to single centimetres, accuracy hardly achievable by any SLAM techniques. There are different sensors used to compare the environmental map with a robot's or pedestrian's location. Ultrasound sensors measure distance with 1% accuracy, being at the same time very cheap and compact. The maximum achievable distance is <italic>ca.</italic> 10 m. The angular resolution, however, is poor, ±15°. Laser scanners provide 0.1% distance measurement accuracy with a maximum distance of <italic>ca.</italic> 50 m. The angular resolution is of a fraction of a degree. The scanning is omnidirectional. The power consumption is <italic>ca.</italic> 10 W for longer distances. The size of a laser sensor is around 5 cm by 5 cm by 5 cm. The cost is rather high (<italic>ca.</italic> $4,000 USD depending on accuracy, maximum distance <italic>etc.</italic>). These sensors are commonly used in robotics. Time-of-Flight (ToF) cameras offer similar parameters as laser sensors providing 3D reconstruction of the scanned environment. The angle of view is <italic>ca.</italic> 30°. Application of laser scanners and ToF cameras is limited to indoor environments due sunlight interference.</p>
<p>In [<xref ref-type="bibr" rid="b27-sensors-12-06764">27</xref>] ultrasound and laser sensing techniques are compared for indoor positioning of a robot. Work [<xref ref-type="bibr" rid="b23-sensors-12-06764">23</xref>] presents an indoor localization system based on the particle filter. The user wears ultrasound sensors which measure a distance to adjacent walls. Therefore, the user location can be compared against the alignment of building walls. Application of an ultrasound sensor improved the positioning accuracy by 7 times in good trial conditions, <italic>i.e.</italic>, with no additional objects in the building's corridor, closed doors <italic>etc</italic>. A similar technique using a laser sensor mounted on a white cane is reported in [<xref ref-type="bibr" rid="b22-sensors-12-06764">22</xref>]. A laser sensor detects corners of corridors what provides a comparison with a building's plan.</p>
<p>Finally, stereovision is a passive imaging technique that can be used indoors and outdoors. The cameras can be compact and inexpensive. However, stereovision imaging is limited to the environments featuring good lighting conditions, requires calibration of the stereovision optics and offers worse depth estimation accuracy than the earlier outlined active methods [<xref ref-type="bibr" rid="b28-sensors-12-06764">28</xref>]. Moreover, demanding computations are required for calculating depth maps. In stereovision, depth accuracy can range from a few centimetres for objects located in a few metres range to a few metres for more distant objects. The so-called subpixel interpolation methods were proposed to improve depth estimation accuracy [<xref ref-type="bibr" rid="b29-sensors-12-06764">29</xref>].</p>
<p>The work presented here combines global and local positioning techniques. GPS location estimates are augmented by dead reckoning techniques derived from inertial sensors, <italic>i.e.</italic>, gyroscopes and accelerometers. A stereo-camera is used for distance measurements. Finally, a digital map of the outdoor terrain is incorporated into the algorithm. Each of the listed source of positioning data features different error characteristic, e.g., in open spaces GPS readouts are most accurate whereas stereovision may yield large depth estimation errors. Conversely, for city canyons where GPS accuracy falters, stereovision and the digital map offer good positioning. A particle filtering algorithm is proposed to optimally fuse all data source.</p></sec>
<sec>
<label>3.</label>
<title>A Prototype System for Pedestrian Positioning</title>
<p>A block diagram of the proposed system is presented in <xref ref-type="fig" rid="f1-sensors-12-06764">Figure 1</xref>. From the hardware point of view, the system is made up of three parts: a PC platform, stereo camera connected through FireWire interface and an electronic module housing a GPS receiver and 6DOF sensor. The data was acquired by walking through the University Campus with the stereovision camera attached to the chest of an experimenter. The laptop stored data from the electronic module and stereo camera. Then the data was processed off-line on a PC.</p>
<sec>
<label>3.1.</label>
<title>Electronic Module</title>
<p>The built electronic module, see <xref ref-type="fig" rid="f2-sensors-12-06764">Figure 2</xref>, is a dedicated PCB with a microcontroller, 6DOF sensor and GPS receiver. The microcontroller reads out data from the 6DOF sensor, ADIS16355 at a rate of 820 Hz. Downsampling is carried out to limit data stream to the PC. An 8th order, lowpass Chebyshev filter is used to avoid aliasing. Samples are sent to the computer at a rate of 205 Hz. The module sends data through the USB interface.</p>
<sec>
<label>3.1.1.</label>
<title>6DOF Sensor</title>
<p>The 6DOF sensor, ADIS16355 from Analog Devices, comprises a 3-axial accelerometer and 3-axial gyro. The data from the sensor is read out through a digital interface, SPI. The samples are of 14-bit resolution whereby practically the three least significant bits are random. The ADIS16355 has been superseded by much less noisy ADIS16375. The static parameters of the former were investigated by the Allan variance [<xref ref-type="bibr" rid="b30-sensors-12-06764">30</xref>].</p>
<sec>
<title>Gyroscope</title>
<p>The gyroscope is used to estimate the pedestrian orientation. Angular velocity <italic>ω</italic>(<italic>t</italic>), returned by the gyroscope, is corrupted mainly by white and flicker noise. The relative direction change Δ<italic>φ</italic> is calculated by integrating the angular velocity according to <xref rid="FD1" ref-type="disp-formula">Equation (1)</xref>.</p>
<p>
<disp-formula id="FD1">
<label>(1)</label>
<mml:math id="mm1" display="block">
<mml:semantics id="sm1">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>ϕ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi></mml:munderover>
<mml:mrow>
<mml:mi>ω</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi></mml:munderover>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mover accent="true">
<mml:mi>ω</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>w</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>f</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD2">
<label>(2)</label>
<mml:math id="mm2" display="block">
<mml:semantics id="sm2">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>ϕ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mover accent="true">
<mml:mi>ϕ</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mrow>
<mml:mtext>ARW</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>F</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD3">
<label>(3)</label>
<mml:math id="mm3" display="block">
<mml:semantics id="sm3">
<mml:mrow>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mrow>
<mml:mtext>ARW</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>w</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD4">
<label>(4)</label>
<mml:math id="mm4" display="block">
<mml:semantics id="sm4">
<mml:mrow>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>F</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>f</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>ω̂</italic>(<italic>t</italic>) denotes the true angular velocity, <italic>ω<sub>w</sub></italic> (<italic>t</italic>) white noise and <italic>ω<sub>f</sub></italic> (<italic>t</italic>) flicker noise in angular velocity readouts. Δ<italic>φ̂</italic>(<italic>t</italic>) is the true change in the heading direction. Integrated white noise <italic>ω<sub>w</sub></italic>(<italic>t</italic>) results in a first-order random walk, called in this case angular random walk (ARW), and is denoted by <italic>φ</italic><sub>ARW</sub>(<italic>t</italic>) in <xref rid="FD2" ref-type="disp-formula">Equations (2)</xref> and <xref rid="FD3" ref-type="disp-formula">(3)</xref>. Angular random walk <italic>φ</italic><sub>ARW</sub>(<italic>t</italic>) is described by the Gaussian distribution but it is not a stationary process as its standard deviation is growing with the square root of the integration time [<xref ref-type="bibr" rid="b31-sensors-12-06764">31</xref>]. For the sensor used in the project the standard deviation of <italic>φ</italic><sub>ARW</sub> grows at a rate of 
<inline-formula>
<mml:math id="mm5" display="inline">
<mml:semantics id="sm5">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mn>2.77</mml:mn>
<mml:mo>°</mml:mo></mml:mrow>
<mml:mo>/</mml:mo>
<mml:mrow>
<mml:msqrt>
<mml:mtext>h</mml:mtext></mml:msqrt></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></inline-formula>.</p>
<p>Similarly, integrated flicker noise <italic>ω<sub>f</sub></italic>(<italic>t</italic>) causes an angular error Δ<italic>φ<sub>F</sub></italic>(<italic>t</italic>), according to <xref rid="FD4" ref-type="disp-formula">Equation (4)</xref>. The values of Δ<italic>φ<sub>F</sub></italic> are described by the Gaussian distribution whose standard deviation grows proportionally with the time and therefore it is a non-stationary process. In case of the gyroscope used in the project, the standard deviation of Δ<italic>φ<sub>F</sub></italic> grows at a rate of 48°/h. Therefore, confidence intervals for estimating Δ<italic>φ</italic>(<italic>t</italic>) widens with the time <italic>t</italic>. After an hour, a motionless gyro can drift by ±144° for ±3<italic>σ</italic> confidence interval. Hence, dead reckoning is justified for short periods only, e.g., during GPS outages.</p>
<p>Inertial sensors also suffer from other errors like non-linearity or temperature random bias. The former error is ±0.3°/s. The experienced random bias due to temperature was much higher than the manufacturer claimed and it reads 0.5°/s for ±3<italic>σ</italic> confidence interval. This is, however, easy to compensate by leaving the sensor motionless and measuring the constant offset to be later subtracted from the readouts.</p></sec>
<sec>
<title>Accelerometer</title>
<p>The accelerometer is used in the project to estimate the user's steps and their lengths. This method is more precise than integrating twice the acceleration readouts to obtain the displacement. The accelerations readouts are also used to estimate the gravity direction which is necessary for correct calculation of the orientation change. By analogy, velocity random walk is a product of integration of white noise in acceleration. On average, the velocity random walk was 
<inline-formula>
<mml:math id="mm6" display="inline">
<mml:semantics id="sm6">
<mml:mrow>
<mml:mn>0.5</mml:mn>
<mml:mtext>m</mml:mtext>
<mml:mo>/</mml:mo>
<mml:mtext>s</mml:mtext>
<mml:mo>/</mml:mo>
<mml:msqrt>
<mml:mtext>h</mml:mtext></mml:msqrt></mml:mrow></mml:semantics></mml:math></inline-formula>. Flicker noise introduces an error of 9.3 m/s/h. The displacement errors are much larger since they are products of integrating velocity errors. Any offset in acceleration readouts grows quadratically with the time. This quickly leads to aggregation of errors and renders the analytical approach ineffective after a dozen of seconds.</p></sec></sec>
<sec>
<label>3.1.2.</label>
<title>GPS Receiver</title>
<p>The PCB board houses a standard GPS receiver with an integrated ceramic antenna, measuring 15 mm by 15 mm. The receiver is built on the MTK MT3329 chipset and supports WAAS, EGNOS, MSAS, GAGAN corrections. GPS readouts are based on the WGS84 coordinate system aligned in the centre of the Earth, being represented by an ellipsoid. The conversion to a local coordinate system follows in two steps. Firstly, the polar coordinates, <italic>i.e.</italic>, latitude, longitude and height above the ground, are transformed to the WGS84 Cartesian coordinates (<italic>x</italic><sub>WGS84</sub>, <italic>y</italic><sub>WGS84</sub>, <italic>z</italic><sub>WGS84</sub>). This step, along with associated errors and corrections, is described in detail in [<xref ref-type="bibr" rid="b32-sensors-12-06764">32</xref>]. Secondly, the local coordinates (<italic>x, y, z</italic>) are obtained by simplified Helmert's transformation <xref rid="FD5" ref-type="disp-formula">(5)</xref>.</p>
<p>
<disp-formula id="FD5">
<label>(5)</label>
<mml:math id="mm7" display="block">
<mml:semantics id="sm7">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>x</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>y</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>z</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">R</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>WGS</mml:mtext>
<mml:mn>84</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>WGS</mml:mtext>
<mml:mn>84</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mrow>
<mml:mtext>WGS</mml:mtext>
<mml:mn>84</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:mtext mathvariant="bold">T</mml:mtext></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The rotation <bold>R</bold> and translation <bold>T</bold> matrices are structured in such a way that the centre of the local coordinate system is on the Earth's surface. Versor <bold>1</bold><sub>x</sub> is directed along with longitude, <bold>1</bold><sub>y</sub> with latitude (towards the pole), <bold>1</bold><sub>z</sub> is determined by <bold>1</bold><sub>x</sub> and <bold>1</bold><sub>y</sub>. The conversion accuracy is in an order of 10 cm for 20 km from the centre of the local coordinate system.</p>
<p>A GPS receiver provides the HDOP parameter (Horizontal Dilution of Precision) informing about the accuracy of the estimated coordinates, <italic>i.e.</italic>, latitude and longitude <xref rid="FD6" ref-type="disp-formula">(6)</xref>. Higher values of HDOP should inform a dead reckoning filter to trust to other sources of positioning (e.g., inertial sensors) and disregard GPS readouts.</p>
<p>
<disp-formula id="FD6">
<label>(6)</label>
<mml:math id="mm8" display="block">
<mml:semantics id="sm8">
<mml:mrow>
<mml:mtext>HDOP</mml:mtext>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The standard deviations of estimating <italic>x</italic> and <italic>y</italic> on the Earth surface are denoted by <italic>σ<sub>x</sub></italic> and <italic>σ<sub>y</sub></italic> respectively. Providing that <italic>x</italic> and <italic>y</italic> have the Gaussian distribution and are independent, the probability density function of distance error <italic>r<sub>e</sub></italic> is given by the Rayleigh distribution [<xref ref-type="bibr" rid="b33-sensors-12-06764">33</xref>], which is not a monotone function of its argument. The function has a maximum for <italic>r<sub>e</sub></italic> &gt; 0. Tests showed that the function defined by <xref rid="FD7" ref-type="disp-formula">Equations (7)</xref>, <xref rid="FD8" ref-type="disp-formula">(8)</xref> and <xref rid="FD9" ref-type="disp-formula">(9)</xref> yields definitively superior results. This can be explained by a poor relationship between the HDOP parameter and the error <italic>r<sub>e</sub></italic>. Since <italic>r<sub>e</sub></italic> can assume only positive values, the Gaussian function <italic>p</italic><sub>GPS</sub>(<italic>r<sub>e</sub>, σ</italic><sub>GPS</sub>) is accordingly scaled by a factor of 2. The coefficient <italic>β</italic><sub>GPS</sub> in <xref rid="FD9" ref-type="disp-formula">Equation (9)</xref> is chosen by trial and error.</p>
<p>
<disp-formula id="FD7">
<label>(7)</label>
<mml:math id="mm9" display="block">
<mml:semantics id="sm9">
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>π</mml:mi></mml:mrow></mml:msqrt>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD8">
<label>(8)</label>
<mml:math id="mm10" display="block">
<mml:semantics id="sm10">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD9">
<label>(9)</label>
<mml:math id="mm11" display="block">
<mml:semantics id="sm11">
<mml:mrow>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mtext>HDOP</mml:mtext></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>If a GPS receiver loses track of satellites, prediction of its position is based on the previous velocities and position. The first order autocorrelation coefficients for <italic>x̃</italic> and <italic>ỹ</italic> were calculated for a 2.6 km path—see <xref rid="FD10" ref-type="disp-formula">Equation (10)</xref>. They had considerable values of <italic>a<sub>x</sub></italic> ≈ <italic>a<sub>y</sub></italic> ≈ 0.86. Thus <italic>x̃</italic> and <italic>ỹ</italic> can be modelled by <xref rid="FD11" ref-type="disp-formula">Equation (11)</xref>, which is known as exponentially correlated noise.</p>
<p>
<disp-formula id="FD10">
<label>(10)</label>
<mml:math id="mm12" display="block">
<mml:semantics id="sm12">
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:munderover>
<mml:mtext>∑</mml:mtext>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:munderover>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mtext>∑</mml:mtext>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:munderover>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD11">
<label>(11)</label>
<mml:math id="mm13" display="block">
<mml:semantics id="sm13">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></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:mi>a</mml:mi>
<mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi></mml:msub></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:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>˜</mml:mo></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></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:mi>υ</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>υ</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>υ<sub>x</sub></italic>(<italic>t</italic>) and <italic>υ<sub>y</sub></italic>(<italic>t</italic>) are random realizations of white noise, whereby 
<inline-formula>
<mml:math id="mm14" display="inline">
<mml:semantics id="sm14">
<mml:mrow>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>υ</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> and 
<inline-formula>
<mml:math id="mm15" display="inline">
<mml:semantics id="sm15">
<mml:mrow>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>υ</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula>. This is a very important point. There are periods of e.g., 30s when GPS readouts stray away by 40 m in one direction. A dead reckoning system, weighting GPS coordinates with inertial sensors' readouts to produce a better position estimate, will succumb to this bias error sooner or later. When the GPS receiver regains good visibility with satellites, the estimated position will be all of a sudden in a quite different location. The dead reckoning filter will have to take some time to adapt to a new, accurate GPS position. During this time the filter output will be encumbered with large errors. A way out is to recognize the situation and reinitialize the filter. To account for these random bias errors another source of absolute positioning should be introduced. Maps, video data are examples thereof.</p>
<p>Another problem associated with GPS readouts is the correspondence of the HDOP parameter with the actual accuracy of latitude and longitude. <xref rid="FD6" ref-type="disp-formula">Equation (6)</xref> shows that the value of HDOP is interpreted as the distance error. <xref ref-type="fig" rid="f3-sensors-12-06764">Figure 3</xref> sheds light on the problem. It was noticed that the interpretation of the HDOP parameter depends on a GPS receiver at hand. The correlation coefficient <xref rid="FD12" ref-type="disp-formula">(12)</xref> shows a poor linear dependence between distance errors <italic>r<sub>e</sub></italic>(<italic>t</italic>) and the values of HDOP. The number of observed satellites and position error is not correlated. This confirms the statement about the necessity of additional positioning data.</p>
<p>
<disp-formula id="FD12">
<label>(12)</label>
<mml:math id="mm16" display="block">
<mml:semantics id="sm16">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext>HDOP</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>Cov</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext>HDOP</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mtext>Var</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mtext>Var</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>HDOP</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mn>0.19</mml:mn></mml:mrow></mml:semantics></mml:math></disp-formula></p></sec></sec>
<sec>
<label>3.2.</label>
<title>Pedometer</title>
<p>When a person walks, the body undulates in unison with the steps. The step-detection algorithm examines the acceleration of the body only in the vertical direction (parallel to the gravity axis). The gravity axis is obtained from the algorithm presented in Section 3.3. The acceleration signal also reflects knee movements, body swings, sensor jerks and so forth. A 3 Hz 4-order low-pass Butterworth filter was applied to eliminate undesired constituents. The step detection algorithm is presented in <xref ref-type="fig" rid="f4-sensors-12-06764">Figure 4</xref>. The minimum <italic>A</italic><sub>min</sub> and maximum <italic>A</italic><sub>max</sub> acceleration in the filtered signal are detected. The difference between the peaks is raised to the empirical power of 0.25. The result is multiplied by the scale factor <italic>K</italic>, depending on the individual. <xref rid="FD13" ref-type="disp-formula">Equation (13)</xref> expresses an estimated step length d. Related work can be found in [<xref ref-type="bibr" rid="b10-sensors-12-06764">10</xref>,<xref ref-type="bibr" rid="b13-sensors-12-06764">13</xref>,<xref ref-type="bibr" rid="b34-sensors-12-06764">34</xref>]. Step length accuracy measurements are between 1% to 10% depending on an individual and gait style.</p>
<p>
<disp-formula id="FD13">
<label>(13)</label>
<mml:math id="mm17" display="block">
<mml:semantics id="sm17">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo>min</mml:mo></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mn>0.25</mml:mn></mml:mrow></mml:msup>
<mml:mo>⋅</mml:mo>
<mml:mi>K</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p></sec>
<sec>
<label>3.3.</label>
<title>Tilt Estimation</title>
<p>Tilt estimation, <italic>i.e.</italic>, estimation of the direction of the gravity axis, is important for two reasons:</p>
<list list-type="order">
<list-item>
<p>Calculation of the relative change in the heading direction. When the sensor is not levelled, the gyroscope's axis does not coincide with the pivotal axis of the pedestrian. When the user turns, the relative change in the heading direction is underestimated. For example, when the gyroscope axis is tilted by 25° from the pivotal axis, the angular velocity is underestimated by ≈ 10%. Consequently, the relative direction change might be 81° instead of 90°—<italic>c.f.</italic> <xref ref-type="fig" rid="f5-sensors-12-06764">Figure 5</xref>.</p></list-item>
<list-item>
<p>Estimation of the camera orientation with respect to the ground. The stereo camera is used to measure distance to nearest objects like buildings. When the camera is not levelled the measured distance will be overestimated.</p></list-item></list>
<p>A human rotates along the gravity axis when changing the walking direction. Thus, the task of estimating the correct change in direction comes down to finding the gravity axis. The problem is known in aeronautics as Inertial Navigation Systems. The estimation of six coordinates of an aeroplane (three for orientation and three for position) is not a trivial task. A standard approach based on off-the-shelf sensors and cosine direction matrices is very inaccurate after few dozens of seconds [<xref ref-type="bibr" rid="b12-sensors-12-06764">12</xref>]. However, humans move with much smaller accelerations. The dominant acceleration comes from the gravity. When a person moves, the body is usually aligned vertically. The pitch and roll are limited to ≈ ±30°. These assumptions help greatly to design an algorithm estimating the gravity axis. The algorithm uses Kalman filter to integrate the readouts from the gyroscopes and accelerometers. The angles between the sensor's axes and the gravity axis (see <xref ref-type="fig" rid="f5-sensors-12-06764">Figure 5</xref>) can be calculated from <xref rid="FD14" ref-type="disp-formula">Equations (14)</xref> and <xref rid="FD15" ref-type="disp-formula">(15)</xref>, given the sensor is not moving.</p>
<p>
<disp-formula id="FD14">
<label>(14)</label>
<mml:math id="mm18" display="block">
<mml:semantics id="sm18">
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>arccos</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi></mml:msub></mml:mrow>
<mml:mi>g</mml:mi></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>;</mml:mo>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>π</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD15">
<label>(15)</label>
<mml:math id="mm19" display="block">
<mml:semantics id="sm19">
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>arccos</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi></mml:msub></mml:mrow>
<mml:mi>g</mml:mi></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>;</mml:mo>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>π</mml:mi>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD16">
<label>(16)</label>
<mml:math id="mm20" display="block">
<mml:semantics id="sm20">
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>arccos</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>z</mml:mi></mml:msub></mml:mrow>
<mml:mi>g</mml:mi></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>a<sub>x</sub>, a<sub>y</sub></italic> and <italic>a<sub>z</sub></italic> are accelerations measured by the 3-axial accelerometer, <italic>g</italic> is the gravity constant, 9.81 m/s<sup>2</sup>. When a user walks, the accelerations will fluctuate by ±0.25 g, depending on the walking style. The acceleration vector due to walking is treated here as measurement noise. Hence, calculating the direction of the gravity axis from <xref rid="FD16" ref-type="disp-formula">Equation (16)</xref> would result in an error of 15°. The accelerations need to meet the constraint <xref rid="FD17" ref-type="disp-formula">Equation (17)</xref>.</p>
<p>
<disp-formula id="FD17">
<label>(17)</label>
<mml:math id="mm21" display="block">
<mml:semantics id="sm21">
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>a</mml:mi>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:msqrt>
<mml:mo>=</mml:mo>
<mml:mi>g</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>This reduces the number of degrees of freedom by one. Gyroscopes can be used to improve the estimation of the sensor orientation. The transition equation of the Extended Kalman Filter (EKF) is given by <xref rid="FD18" ref-type="disp-formula">Equations (18)</xref> and <xref rid="FD19" ref-type="disp-formula">(19)</xref>. Appearance of angular velocity <italic>ω<sub>y</sub></italic> causes the <italic>X</italic> axis of the sensor changing its orientation with respect to the gravity. This change also depends on the orientation of the <italic>Y</italic> axis and is expressed by the sin <italic>α<sub>y</sub></italic> term.</p>
<p>
<disp-formula id="FD18">
<label>(18)</label>
<mml:math id="mm22" display="block">
<mml:semantics id="sm22">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">f</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext mathvariant="bold">w</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD19">
<label>(19)</label>
<mml:math id="mm23" display="block">
<mml:semantics id="sm23">
<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:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi>
<mml:mo>sin</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula><italic>k</italic> denotes time instant, where <italic>t</italic> = <italic>k</italic> · <italic>dT</italic> and 1/<italic>dT</italic> = 205 Hz. <italic>w<sub>y</sub></italic>(<italic>k</italic>) and <italic>w<sub>x</sub></italic>(<italic>k</italic>) are the gyroscope errors.</p>
<p>The measurement equation of the EKF is given by <xref rid="FD20" ref-type="disp-formula">Equation (20)</xref>
<disp-formula id="FD20">
<label>(20)</label>
<mml:math id="mm24" display="block">
<mml:semantics id="sm24">
<mml:mrow>
<mml:mtext mathvariant="bold">y</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">k</mml:mtext>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">g</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>υ</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>υ</mml:mi>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The accelerometers readouts are corrupted by noise v(<italic>k</italic>). Further implementation of this Extended Kalman Filter is straightforward and follows through Taylor linearisation. Details can be found in [<xref ref-type="bibr" rid="b35-sensors-12-06764">35</xref>]. Having estimated <italic>α<sub>x</sub></italic> and <italic>α<sub>y</sub></italic> and complementary angles <italic>β<sub>x</sub></italic> and <italic>β<sub>y</sub></italic>, the angle <italic>γ</italic> between the <italic>Z</italic>-axis gyroscope and the inverted gravity axis (see <xref ref-type="fig" rid="f6-sensors-12-06764">Figure 6</xref>) can be calculated from <xref rid="FD21" ref-type="disp-formula">Equation (21)</xref>.</p>
<p>
<disp-formula id="FD21">
<label>(21)</label>
<mml:math id="mm25" display="block">
<mml:semantics id="sm25">
<mml:mrow>
<mml:mi>γ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>arcsin</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo>sin</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>sin</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mi>y</mml:mi></mml:msub></mml:mrow></mml:msqrt></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The angular velocity can be corrected by <xref rid="FD22" ref-type="disp-formula">Equation (22)</xref>. The relative heading direction should be calculated from <xref rid="FD23" ref-type="disp-formula">Equation (23)</xref>.</p>
<p>
<disp-formula id="FD22">
<label>(22)</label>
<mml:math id="mm26" display="block">
<mml:semantics id="sm26">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ω</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>/</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>γ</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD23">
<label>(23)</label>
<mml:math id="mm27" display="block">
<mml:semantics id="sm27">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>ϕ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo>∫</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ω</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>As mentioned before, this approach is valid for limited range of pitch and roll, due to singularity in <xref rid="FD22" ref-type="disp-formula">Equation (22)</xref> when <italic>γ</italic> approaches <italic>π</italic>/2. The measurement of <italic>γ</italic> can be included from <xref rid="FD16" ref-type="disp-formula">Equation (16)</xref>, however with a small benefit due to considerable fluctuations of the corresponding acceleration <italic>a<sub>z</sub></italic>. The average error of estimating <italic>γ</italic> was measured to be 0.5° with a standard deviation of 0.45°. <xref ref-type="fig" rid="f7-sensors-12-06764">Figure 7(a,b)</xref> shows a trial with the sensor tilted by ≈15°.</p></sec>
<sec>
<label>3.4.</label>
<title>Heading Estimation</title>
<p>A gyroscope provides an angular velocity <italic>ω</italic>. A direction change can be found by integrating <italic>ω</italic> (<italic>c.f.</italic>, <xref rid="FD23" ref-type="disp-formula">Equation (23)</xref>). Thus a gyroscope can provide only a relative orientation as opposed to a magnetic compass. Experiments with a magnetic compass showed its susceptibility to magnetic field distortions due to tram lines, DC power lines with no return cable, cars changing a local magnetic field, <italic>etc</italic>. The magnitude of the Earth's magnetic field is <italic>ca.</italic> 50 <italic>μT</italic>. By comparison, a departing tram produces 120 m away a magnetic induction of 5 <italic>μT</italic>. Hence, a magnetic compass was not included. The absolute pedestrian orientation is sorted out run-time by the particle filtering algorithm based on other data. A magnetic compass could give a rough approximation ±90° until the absolute orientation has been found and then switched off.</p></sec>
<sec>
<label>3.5.</label>
<title>Probability Map</title>
<p>The digital map is divided into three types of area. The areas have their associated weights:</p>
<list list-type="bullet">
<list-item>
<p>forbidden areas—buildings, ponds, walls, fences <italic>etc.</italic>, <italic>w</italic><sub>map</sub>(<italic>x, y</italic>) = 0.0,</p></list-item>
<list-item>
<p>probable areas—lawns, fields <italic>etc.</italic>, <italic>w</italic><sub>map</sub>(<italic>x, y</italic>) ∈ (0; 1),</p></list-item>
<list-item>
<p>preferred areas—pavements, streets, squares, alleys <italic>etc.</italic>, <italic>w</italic><sub>map</sub>(<italic>x, y</italic>) = 1.0.</p></list-item></list>
<p><italic>w</italic><sub>map</sub>(<italic>x, y</italic>) denotes the type of an area at (<italic>x, y</italic>) coordinates. Each weight corresponds to the probability of the user being in a given area. Since the system is destined for outdoor navigation, it is rather improbable that the user will traverse buildings, walls and fences—<italic>c.f.</italic>, <xref ref-type="fig" rid="f8-sensors-12-06764">Figure 8</xref>. The user is likely to travel along pavements and alleys, however, he or she can also walk across lawns, although less likely. The probability map mitigates the problem of gyroscope drifts and stepmeter inaccuracy. The particle filtering approach to the discussed problem will be explained in Section 3.9. Here the term particles denotes a collection of hypothetical locations of the user and the weights associated with each particle is understood as the probability of the user being at this location. When particles enter a forbidden area, they will be gradually eliminated. Particles that move along a preferred area will be preserved. Therefore, the direction will align itself and the direction drift will be reduced. The weight assigned for probable areas should not be too low, because otherwise when a user crosses a wide street, the particles' weights will be successively reduced and consequently die out. Consequently, the user's location will not be correctly calculated. The project was developed with a view of pedestrians, especially blind ones.</p></sec>
<sec>
<label>3.6.</label>
<title>Stereovision Camera</title>
<sec sec-type="intro">
<label>3.6.1.</label>
<title>Introduction</title>
<p>A stereovision camera [<xref ref-type="bibr" rid="b28-sensors-12-06764">28</xref>] is comprised of two cameras which are shifted away along the <italic>X</italic> axis, <italic>c.f.</italic>, <xref ref-type="fig" rid="f9-sensors-12-06764">Figure 9</xref>. The distance between the cameras is called the baseline of a stereo system and is denoted by <italic>B</italic>. The baseline distance makes the same scene point <italic>P</italic> to be visible in the left and right camera at coordinates <italic>x<sub>L</sub></italic> and <italic>x<sub>R</sub></italic> respectively. The difference between the <italic>x<sub>L</sub></italic> and <italic>x<sub>R</sub></italic> values is called the disparity, and will be denoted by <italic>x<sub>d</sub></italic>. The z coordinate of the observed object can be calculated from <xref rid="FD24" ref-type="disp-formula">Equation (24)</xref>, where <italic>f</italic> is the focal length.</p>
<p>
<disp-formula id="FD24">
<label>(24)</label>
<mml:math id="mm28" display="block">
<mml:semantics id="sm28">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>For the legibility sake, the stereovision system can be treated as one camera, whose simplified coordinate system is shown in <xref ref-type="fig" rid="f9-sensors-12-06764">Figure 9</xref>. The <italic>Z</italic> axis coincides with the optical axis of the camera model.</p>
<p>The coordinates of a point (<italic>x, y, z</italic>) are projected onto the camera projection plane <italic>P<sub>P</sub></italic> according to the transformation <xref rid="FD25" ref-type="disp-formula">(25)</xref>.</p>
<p>
<disp-formula id="FD25">
<label>(25)</label>
<mml:math id="mm29" display="block">
<mml:semantics id="sm29">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>p</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>p</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 columnalign="center">
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mfrac>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>f</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr columnalign="center">
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mfrac>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>f</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn></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:mi>x</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>y</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>z</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The depth of a point (<italic>x, y, z</italic>), denoted by <italic>d<sub>p</sub></italic>(<italic>x, y, z</italic>), is understood as the distance from the point to the projection plane and equals <xref rid="FD26" ref-type="disp-formula">Equation (26)</xref>.</p>
<p>
<disp-formula id="FD26">
<label>(26)</label>
<mml:math id="mm30" display="block">
<mml:semantics id="sm30">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>p</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mi>z</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The distance from the Y axis of the camera to a point with the (<italic>x, y, z</italic>) coordinates is denoted by <italic>d<sub>Y</sub></italic> (<italic>x, y, z</italic>) and calculated from <xref rid="FD27" ref-type="disp-formula">Equation (27)</xref>.</p>
<p>
<disp-formula id="FD27">
<label>(27)</label>
<mml:math id="mm31" display="block">
<mml:semantics id="sm31">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>Y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msup>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Let us define a function which returns the distance from the <italic>Y</italic> camera's axis to the nearest point visible at angle <italic>α</italic> from the optical axis <italic>Z, c.f.</italic> <xref ref-type="fig" rid="f9-sensors-12-06764">Figure 9</xref>. This function is defined by <xref rid="FD28" ref-type="disp-formula">Equation (28)</xref>.</p>
<p>
<disp-formula id="FD28">
<label>(28)</label>
<mml:math id="mm32" display="block">
<mml:semantics id="sm32">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>α</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>α</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>Y</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>;</mml:mo>
<mml:mtext>where</mml:mtext>
<mml:mo>tan</mml:mo>
<mml:mi>α</mml:mi>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>p</mml:mi></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>x</mml:mi>
<mml:mi>z</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The data from the stereovision camera is digitized. The (<italic>x<sub>p</sub>, y<sub>p</sub></italic>) coordinates are quantized and converted to units called pixels. The transformed coordinates are denoted by (<italic>x</italic><sub>pix</sub>, <italic>y</italic><sub>pix</sub>). The conversion follows through <xref rid="FD29" ref-type="disp-formula">Equation (29)</xref>.</p>
<p>
<disp-formula id="FD29">
<label>(29)</label>
<mml:math id="mm33" display="block">
<mml:semantics id="sm33">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></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:mtext>Round</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>p</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtext>Round</mml:mtext>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mi>f</mml:mi></mml:mfrac>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>p</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:mrow></mml:semantics></mml:math></disp-formula>where the Round() operator denotes rounding to a nearest integer number, <italic>f</italic><sub>pix</sub> is the focal length of the camera expressed in pixels and is provided by the manufacturer in the technical specification. The difference between the maximal and minimal value of <italic>x</italic><sub>pix</sub> is called the horizontal resolution of the camera and is denoted by <italic>x</italic><sub>res</sub>. The vertical resolution <italic>y</italic><sub>res</sub> is defined by analogy. A depth map or a depth picture <bold>L</bold> is a two dimensional map defined by <xref rid="FD30" ref-type="disp-formula">Equation (30)</xref>.</p>
<p>
<disp-formula id="FD30">
<label>(30)</label>
<mml:math id="mm34" display="block">
<mml:semantics id="sm34">
<mml:mrow>
<mml:mtext mathvariant="bold">L</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>p</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>;</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mover>
<mml:mo>→</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>25</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>29</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The coordinates (<italic>x, y</italic>) are related with (<italic>x</italic><sub>pix</sub>, <italic>y</italic><sub>pix</sub>) through transformations <xref rid="FD25" ref-type="disp-formula">(25)</xref> and <xref rid="FD29" ref-type="disp-formula">(29)</xref>. <xref rid="FD30" ref-type="disp-formula">Equation (30)</xref> formally says that a stereo camera provides the depth to nearest points that are not occluded. This is so-called 2.5 dimension image. Usually, the depth for a given point (<italic>x</italic><sub>pix</sub>, <italic>y</italic><sub>pix</sub>) is represented by a floating point-number. Using the identity <xref rid="FD24" ref-type="disp-formula">(24)</xref>, the disparity map <bold>K</bold> can be defined by <xref rid="FD31" ref-type="disp-formula">Equation (31)</xref>.</p>
<p>
<disp-formula id="FD31">
<label>(31)</label>
<mml:math id="mm35" display="block">
<mml:semantics id="sm35">
<mml:mrow>
<mml:mtext mathvariant="bold">K</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>L</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>As a matter of fact, stereovision cameras first determine the disparity map <bold>K</bold> and then calculate the depth map <bold>L</bold>. The disparity <italic>x<sub>d</sub></italic> is calculated in digital cameras in pixels, thus <bold>K</bold> should be a map containing integer numbers. An example of a depth map is presented in <xref ref-type="fig" rid="f12-sensors-12-06764">Figure 12(b)</xref>. Advanced stereo cameras perform subpixel interpolation, e.g., the camera used in the project calculates the disparity with the resolution of 0.25 pixel and then performs filtering and interpolation on the depth map.</p></sec>
<sec sec-type="methods">
<label>3.6.2.</label>
<title>Error Analysis</title>
<p>As the object recedes from the camera, the disparity <italic>x<sub>d</sub></italic> decreases. An error in calculating the shift <italic>x<sub>d</sub></italic> becomes more significant. Calculating the derivative of <italic>z</italic> with respect to <italic>x<sub>d</sub></italic> in <xref rid="FD24" ref-type="disp-formula">Equation (24)</xref> gives <xref rid="FD32" ref-type="disp-formula">Equation (32)</xref>. The accuracy of determining the distance <italic>z</italic> decreases with its squared value. As the stereo-camera is digital, the values of <italic>x<sub>L</sub>, x<sub>R</sub></italic> are quantized and so is <italic>x<sub>d</sub></italic>. It means that <italic>z</italic> manifests discontinuities as <italic>x<sub>d</sub></italic> changes to an adjacent quantum. Let ∈ denote the size of the pixel in metrical units. For the sake of simplicity, <italic>x<sub>d</sub></italic> will have units of metres or pixels, whereby the appropriate unit will be clear from the context or mentioned implicitly. Let us assume at this stage that the error of determining x<italic><sub>d</sub></italic> can be 
<inline-formula>
<mml:math id="mm36" display="inline">
<mml:semantics id="sm36">
<mml:mrow>
<mml:mo>±</mml:mo>
<mml:mfrac>
<mml:mo>∈</mml:mo>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> or 
<inline-formula>
<mml:math id="mm37" display="inline">
<mml:semantics id="sm37">
<mml:mrow>
<mml:mo>±</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>pixel</mml:mtext></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>. <xref ref-type="fig" rid="f10-sensors-12-06764">Figure 10</xref> exemplifies the effect of such quantization.</p>
<p>
<disp-formula id="FD32">
<label>(32)</label>
<mml:math id="mm38" display="block">
<mml:semantics id="sm38">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo>≈</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo>≈</mml:mo>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow></mml:mfrac>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The error of determining the disparity does not only come from quantizing x<sub>d</sub>, in which case, the disparity maps presented in Section 3.8 would be devoid of any artifacts or falsely calculated disparities—see [<xref ref-type="bibr" rid="b36-sensors-12-06764">36</xref>] for full clarification.</p>
<p>The camera used in this work calculates disparity by correlating small blocks (e.g., 7 × 7 pixels) and looking for best match. The probability density function of the disparity error is disputable in this case. Let it be the Gaussian distribution, expressed by <xref rid="FD33" ref-type="disp-formula">Equation (33)</xref>, where Δ<italic>x<sub>d</sub></italic> denotes the disparity error.</p>
<p>
<disp-formula id="FD33">
<label>(33)</label>
<mml:math id="mm39" display="block">
<mml:semantics id="sm39">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>π</mml:mi></mml:mrow></mml:msqrt>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The probability density function of Δ<italic>z</italic> can be calculated from <xref rid="FD34" ref-type="disp-formula">Equation (34)</xref>. The function <italic>f<sub>z</sub></italic> is conditioned on <italic>z, i.e.</italic>, the error Δ<italic>z</italic> depends on the value of <italic>z</italic> as mentioned before.</p>
<p>
<disp-formula id="FD34">
<label>(34)</label>
<mml:math id="mm40" display="block">
<mml:semantics id="sm40">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">∣</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>|</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>|</mml:mo></mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><xref rid="FD32" ref-type="disp-formula">Equation (32)</xref> holds for small <italic>x<sub>d</sub></italic>. The exact value of Δ<italic>z</italic> can be computed from <xref rid="FD35" ref-type="disp-formula">Equation (35)</xref>. The formula necessary for the transformation is given by <xref rid="FD36" ref-type="disp-formula">Equation (36)</xref>.</p>
<p>
<disp-formula id="FD35">
<label>(35)</label>
<mml:math id="mm41" display="block">
<mml:semantics id="sm41">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>−</mml:mo>
<mml:mi>z</mml:mi></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD36">
<label>(36)</label>
<mml:math id="mm42" display="block">
<mml:semantics id="sm42">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Thus, <italic>f<sub>z</sub></italic> can be calculated from <xref rid="FD37" ref-type="disp-formula">Equation (37)</xref>.</p>
<p>
<disp-formula id="FD37">
<label>(37)</label>
<mml:math id="mm43" display="block">
<mml:semantics id="sm43">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo>∣</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>π</mml:mi></mml:mrow></mml:msqrt>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mi>d</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>d</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The shape of the function <italic>f<sub>z</sub></italic>(Δ<italic>z</italic>\<italic>z</italic>) for different values of <italic>z</italic> is presented in <xref ref-type="fig" rid="f11-sensors-12-06764">Figure 11</xref>. The function is skewed as one should have suspected and decays slower for Δ<italic>z</italic> greater than 0.</p></sec></sec>
<sec>
<label>3.7.</label>
<title>3D Map of an Urban Terrain</title>
<p>A precise 3D map of an urban terrain was provided by the local cartographic office of Lodz (MODGiK). The map is divided in layers containing: roads, buildings, entrances to buildings, steps, fences, lawns, trees, bushes, ponds, lamp posts and many other data not used in the project. The accuracy of building deployment is in an order of single centimetres and the buildings' heights were measured with a bit worse accuracy. The radius of trees' crowns was assumed 3 m and the radius of lamp posts 0.5 m.</p></sec>
<sec>
<label>3.8.</label>
<title>3D Matching Algorithm</title>
<p>Estimated location based on the stepmeter, gyroscope and digital maps is accurate to within 15 m (a street with pavements on both sides) [<xref ref-type="bibr" rid="b3-sensors-12-06764">3</xref>]. GPS errors in urban canyons being a several dozens of metres, practically both sides of a road are equally probable.</p>
<p><xref ref-type="fig" rid="f12-sensors-12-06764">Figures 12(a–c)</xref> show a picture from a monocamera, a disparity map <bold>K</bold> and a part of the 3D model of the University Campus.</p>
<p>Let us use the local coordinate system defined in Section 3.1.2. Let the vector [<italic>x</italic>′<italic><sub>S</sub>, y</italic>′<italic><sub>S</sub>, z</italic>′<italic><sub>S</sub>, φ</italic>′<italic><sub>S</sub></italic>]<italic><sup>T</sup></italic> denote the Cartesian coordinates and the orientation of the stereo camera in the local coordinate system. <italic>φ</italic>′<italic><sub>S</sub></italic> is called the azimuth of the stereo camera and it has the same interpretation as with a magnetic compass. It is assumed that the stereovision camera is worn by a pedestrian and it is attached to the chest, say at <italic>z</italic> = <italic>h</italic> = 1.5 m above the ground. The optical axis of the camera is directed roughly parallel to the ground plane. The positioning algorithm has a precise 3D model of the environment that is defined for the local coordinate system—see <xref ref-type="fig" rid="f12-sensors-12-06764">Figure 12(c)</xref>. Let us put a virtual camera in the (<italic>x</italic>′<italic><sub>V</sub>, y</italic>′<italic><sub>V</sub>, z</italic>′<italic><sub>V</sub></italic>) coordinates and set its orientation to <italic>φ</italic>′<italic><sub>V</sub></italic>. Then, let us render the virtual environment based on the 3D model. The virtual camera should see the picture presented in <xref ref-type="fig" rid="f12-sensors-12-06764">Figure 12(c)</xref>. On the other hand, the stereovision camera provides a depth image of the environment. Both images can be compared. Let <bold>L<sub>S</sub></bold> and <bold>L<sub>V</sub></bold> denote the depth image returned by the stereovision camera and retrieved from the virtual environment, correspondingly. <italic>f<sub>L</sub></italic>(<bold>L<sub>S</sub>, L<sub>V</sub></bold>) is some cost function comparing the two depth images and returning comparison error. The function is defined by <xref rid="FD38" ref-type="disp-formula">Equation (38)</xref>.</p>
<p>
<disp-formula id="FD38">
<label>(38)</label>
<mml:math id="mm44" display="block">
<mml:semantics id="sm44">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mtext>L</mml:mtext></mml:msub>
<mml:mo>:</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">L</mml:mtext>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">L</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>→</mml:mo>
<mml:msup>
<mml:mi>ℝ</mml:mi>
<mml:mn>1</mml:mn></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Formally, the problem comes down to finding the vector [<italic>x</italic>′<italic><sub>V</sub>, y</italic>′<italic><sub>V</sub>, z</italic>′<italic><sub>V</sub>, φ</italic>′<italic><sub>V</sub></italic>]<italic><sup>T</sup></italic> where the function <italic>f<sub>l</sub></italic>(<bold>L<sub>S</sub>, L<sub>V</sub></bold>) returns a minimum value, that is, the difference ‖<bold>L<sub>S</sub></bold> − <bold>L<sub>V</sub></bold>‖ is minimal according to some criterion. Then the estimated coordinates of the stereo camera (that is the pedestrian location) are given by <xref rid="FD39" ref-type="disp-formula">Equation (39)</xref>. This task is handled by the particle filtering algorithm.</p>
<p>
<disp-formula id="FD39">
<label>(39)</label>
<mml:math id="mm45" display="block">
<mml:semantics id="sm45">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>S</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mi>S</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>z</mml:mi>
<mml:mi>S</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>ϕ</mml:mi>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>V</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mi>V</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>z</mml:mi>
<mml:mi>V</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mi>ϕ</mml:mi>
<mml:mi>V</mml:mi>
<mml:mo>′</mml:mo></mml:msubsup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Assuming <italic>z<sub>S</sub></italic> = <italic>z<sub>V</sub></italic> = <italic>h</italic> reduces the dimension of the problem. The function <italic>f<sub>L</sub></italic> is still not trivial. The depth picture <bold>L<sub>S</sub></bold> is encumbered with many errors, see <xref ref-type="fig" rid="f12-sensors-12-06764">Figure 12(b)</xref>. For example, sun illumination causes some parts of the depth map to have falsely determined values (see <xref ref-type="fig" rid="f13-sensors-12-06764">Figure 13</xref>). The function <italic>f<sub>L</sub></italic> should be immune to these undesirable effects that can cause random bias errors, most troublesome errors to correct by any filter, including a particle filter which is used in the presented project. A random bias error is understood as an error whose expected value differs considerably from 0 for a significant period of time, e.g., 30 seconds. There can be also objects that can compromise the comparison between <bold>L<sub>S</sub></bold> and <bold>L<sub>V</sub></bold> and cannot be filtered by any methods, <italic>i.e.</italic>, parked cars, trucks, bushes, posters, garbage bins, <italic>etc</italic>. Their influence can be minimized to some extent by excluding from comparison that part of <bold>L<sub>S</sub></bold> which is below the optical axis of the camera. Hence the ground surface is also excluded from comparison. First <bold>L<sub>S</sub></bold> is analysed to seek fragments for comparison. The method of analysing <bold>L<sub>S</sub></bold> depends on many empirical factors that were verified during many trials. The idea is following:</p>
<list list-type="order">
<list-item>
<p>Reject the part of the depth map <bold>L<sub>S</sub></bold> that is below the optical axis of the camera.</p></list-item>
<list-item>
<p>Divide vertically the upper part of <bold>L<sub>S</sub></bold> into <italic>n<sub>S</sub></italic> = 5 equal regions <italic>S<sub>j</sub>, j</italic> = 1… <italic>n<sub>S</sub></italic>—see <xref ref-type="fig" rid="f13-sensors-12-06764">Figure 13(a)</xref>. This forces to compare the depth maps <italic>L<sub>S</sub></italic> and <italic>L<sub>V</sub></italic> in different regions, which, to some extend, decorrelate random bias errors.</p></list-item>
<list-item>
<p>for <italic>j</italic> = 1 to <italic>n<sub>S</sub></italic></p>
<list list-type="alpha-lower">
<list-item>
<p>From the area <italic>S<sub>j</sub></italic>, pick at random a small square window <bold>W<sub>j</sub></bold> of <italic>W<sub>W</sub></italic> by <italic>W<sub>W</sub></italic> measurements, where <italic>W<sub>W</sub></italic> = 24 pix.</p></list-item>
<list-item>
<p>Check if <bold>W</bold><italic><sub>j</sub></italic> is devoid of artifacts like sun illumination, falsely determined disparity <italic>etc.</italic>—<italic>c.f.</italic> <xref ref-type="fig" rid="f13-sensors-12-06764">Figure 13(b)</xref>.</p></list-item>
<list-item>
<p>Calculate the angle <italic>α<sub>j</sub></italic> at which the camera sees the object pointed by <bold>W</bold><italic><sub>j</sub></italic> (compare with the angle <italic>α</italic> in <xref ref-type="fig" rid="f9-sensors-12-06764">Figure 9</xref>).</p></list-item>
<list-item>
<p>Calculate the distance <italic>d<sub>Sj</sub></italic> to an object encompassed by <bold>W</bold><italic><sub>j</sub></italic>.</p></list-item>
<list-item>
<p>Check what the virtual camera sees at the angle <italic>α<sub>j</sub></italic> from coordinates [<italic>x</italic>′<italic><sub>V</sub>, y</italic>′<italic><sub>V</sub>, z</italic>′<italic><sub>V</sub>, φ</italic>′<italic><sub>V</sub></italic>]. Calculate in this direction the distance to the nearest object <italic>d<sub>Vj</sub></italic>.</p></list-item>
<list-item>
<p>Compare the distances <italic>d<sub>Sj</sub></italic> and <italic>d<sub>Vj</sub></italic> by the distance error function <italic>f<sub>Lj</sub></italic>.</p></list-item></list></list-item>
<list-item>
<p>Return the comparison error between <bold>L<sub>S</sub></bold> and <bold>L<sub>V</sub></bold> as <italic>f<sub>L</sub></italic>(<bold>L<sub>S</sub>, L<sub>V</sub></bold>) = <italic>f<sub>L</sub></italic><sub>1</sub> · <italic>f<sub>L</sub></italic><sub>2</sub> · <italic>f<sub>L</sub></italic><sub>3</sub> · <italic>f<sub>L</sub></italic><sub>4</sub> · f<italic><sub>L</sub></italic><sub>5</sub>.</p></list-item></list>
<p><bold>Ad. 1, 2.</bold> The areas S<italic><sub>j</sub></italic> are shown in <xref ref-type="fig" rid="f13-sensors-12-06764">Figure 13(a)</xref>.</p>
<p><bold>Ad. 3a.</bold> The window <bold>W</bold><italic><sub>j</sub></italic> is picked at random from the corresponding area S<italic><sub>j</sub></italic>, according to <xref ref-type="fig" rid="f13-sensors-12-06764">Figure 13(a)</xref>.</p>
<p><bold>Ad. 3b.</bold> By trial and error, the empirical measure <xref rid="FD40" ref-type="disp-formula">(40)</xref> was proposed to check if the disparity map for <bold>W</bold><italic><sub>j</sub></italic> is devoid of artifacts. 
<inline-formula>
<mml:math id="mm46" display="inline">
<mml:semantics id="sm46">
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> <xref rid="FD41" ref-type="disp-formula">(41)</xref> and 
<inline-formula>
<mml:math id="mm47" display="inline">
<mml:semantics id="sm47">
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>min</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:semantics></mml:math></inline-formula> <xref rid="FD42" ref-type="disp-formula">(42)</xref> are the maximum and minimum values of disparities for a given window <bold>W</bold><italic><sub>j</sub></italic>
<disp-formula id="FD40">
<label>(40)</label>
<mml:math id="mm48" display="block">
<mml:semantics id="sm48">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>min</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD41">
<label>(41)</label>
<mml:math id="mm49" display="block">
<mml:semantics id="sm49">
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>max</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>max</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">K</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>;</mml:mo>
<mml:mo>∀</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD42">
<label>(42)</label>
<mml:math id="mm50" display="block">
<mml:semantics id="sm50">
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mo>min</mml:mo></mml:mrow></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mo>min</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">K</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>;</mml:mo>
<mml:mo>∀</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>Window <bold>W</bold><italic><sub>j</sub></italic> is stated to be devoid of artifacts if <italic>k<sub>j</sub></italic> &gt; <italic>k</italic><sub>thr</sub>, where an empirical value of <italic>k</italic><sub>thr</sub> ≈ 0.8.</p>
<p><bold>Ad. 3c.</bold> The angle <italic>α<sub>j</sub></italic> at which the stereovision camera sees the object encompassed by the <bold>W</bold><italic><sub>j</sub></italic> window can be calculated from <xref rid="FD43" ref-type="disp-formula">Equation (43)</xref>, where <italic>x</italic><sup>(c)</sup> denotes the <italic>x</italic> coordinate of the centre of <bold>W</bold><italic><sub>j</sub></italic>.</p>
<p>
<disp-formula id="FD43">
<label>(43)</label>
<mml:math id="mm51" display="block">
<mml:semantics id="sm51">
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mo>arctan</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>x</mml:mi>
<mml:mi>j</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><bold>Ad. 3d.</bold> The distance <italic>d<sub>Sj</sub></italic> to the object pointed by <bold>W</bold><italic><sub>j</sub></italic> can be calculated from <xref rid="FD44" ref-type="disp-formula">Equation (44)</xref>. This is an arithmetical average of depths divided by the cos <italic>α<sub>j</sub></italic> factor to obtain the Euclidean distance—<italic>c.f.</italic>, <xref rid="FD26" ref-type="disp-formula">Equations (26)</xref> and <xref rid="FD27" ref-type="disp-formula">(27)</xref> that show the difference between the depth of a point and distance to the camera's <italic>Y</italic> axis.</p>
<p>
<disp-formula id="FD44">
<label>(44)</label>
<mml:math id="mm52" display="block">
<mml:semantics id="sm52">
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mtext>S</mml:mtext>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mo>cos</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msubsup>
<mml:mi>W</mml:mi>
<mml:mi>W</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mfrac>
<mml:munder>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:munder>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:munder>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">L</mml:mtext>
<mml:mi mathvariant="bold">S</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>;</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>pix</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">W</mml:mtext>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><bold>Ad. 3e.</bold> Given the coordinates and orientation of a virtual camera in the 3D environment, the <italic>d<sub>Vj</sub></italic> distance from the virtual camera to the nearest object at <italic>α<sub>j</sub></italic> angle can be easily obtained.</p>
<p><bold>Ad. 3f.</bold> The corresponding distances <italic>d<sub>Sj</sub></italic> and <italic>d<sub>Vj</sub></italic> are compared by the error function <italic>f<sub>Lj</sub></italic>. For the integrity sake of <xref rid="FD47" ref-type="disp-formula">Equation (47)</xref>, the function <italic>f<sub>Lj</sub></italic> should return 1 if window <bold>W</bold><italic><sub>j</sub></italic> was rejected from comparison, <italic>i.e., k<sub>j</sub></italic> ≤ <italic>k</italic><sub>thr</sub>. The function <italic>f<sub>Lj</sub></italic> reflects the correspondence between <italic>d<sub>Sj</sub></italic> and <italic>d<sub>Vj</sub></italic>, whereby the comparison should be more tolerant for greater distances, according to formula <xref rid="FD32" ref-type="disp-formula">(32)</xref>—the accuracy of determining <italic>d<sub>Sj</sub></italic> drops with its square value. Following the reasoning in the previous chapter, the function <italic>f<sub>Lj</sub></italic>, expressed by <xref rid="FD45" ref-type="disp-formula">Equation (45)</xref>, was proposed. The parameter <italic>a</italic> introduces some tolerance in case of unexpected objects registered by the stereo camera (e.g., cars, humans), <italic>c.f.</italic> <xref ref-type="fig" rid="f14-sensors-12-06764">Figure 14</xref>. Experimentally, <italic>a</italic> ∈ &lt; 0.95, 0.98 &gt; gives desired results.</p>
<p>
<disp-formula id="FD45">
<label>(45)</label>
<mml:math id="mm53" display="block">
<mml:semantics id="sm53">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>j</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>V</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>≤</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mtext>thr</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>−</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>exp</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>B</mml:mi>
<mml:mi>f</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:msubsup>
<mml:mi>σ</mml:mi>
<mml:mi>L</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>&gt;</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mtext>thr</mml:mtext></mml:mrow></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>
<disp-formula id="FD46">
<label>(46)</label>
<mml:math id="mm54" display="block">
<mml:semantics id="sm54">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>z</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><bold>Ad. 4.</bold> Finally, the function <italic>f<sub>L</sub></italic> comparing the two environments, <italic>i.e.</italic>, real and virtual, can be defined by <xref rid="FD47" ref-type="disp-formula">Equation (47)</xref>.</p>
<p>
<disp-formula id="FD47">
<label>(47)</label>
<mml:math id="mm55" display="block">
<mml:semantics id="sm55">
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mtext>L</mml:mtext></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">L</mml:mtext>
<mml:mtext mathvariant="bold">S</mml:mtext></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">L</mml:mi>
<mml:mtext mathvariant="bold">V</mml:mtext></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:munderover>
<mml:mo>∏</mml:mo>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>n</mml:mi>
<mml:mi>s</mml:mi></mml:msub></mml:mrow></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>L</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>V</mml:mi>
<mml:mi>j</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>The 3D match algorithm is evoked 10 times a second.</p></sec>
<sec>
<label>3.9.</label>
<title>Particle Filtering</title>
<sec sec-type="intro">
<label>3.9.1.</label>
<title>Introduction</title>
<p>The particle filter is a sequential version of the Monte Carlo method [<xref ref-type="bibr" rid="b37-sensors-12-06764">37</xref>] which enables to find solutions of a multidimensional problem by generating a large number of possible solutions, so-called particles, and then verifying these solutions by a given criterion, <italic>i.e.</italic>, an error function. The particle filter can be looked at from the statistical point of view, whereby the solution is represented by a probability density function. The particle filter improves upon Kalman filter in case of multi-modal distributions and non-linear dynamics at the cost of high computation burden. Let <italic>i</italic> denote the number of a particle and <italic>L</italic> the total number of particles, thus <italic>i</italic> ∈ &lt; 1, <italic>L</italic> &gt;. A particle at a given time instant <italic>k</italic> is represented by vector c<italic><sub>i</sub></italic>(<italic>k</italic>) given by <xref rid="FD48" ref-type="disp-formula">Equation (48)</xref>.</p>
<p>
<disp-formula id="FD48">
<label>(48)</label>
<mml:math id="mm56" display="block">
<mml:semantics id="sm56">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">c</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where x<italic><sub>i</sub></italic>(<italic>k</italic>) is a possible system state at time instant <italic>k</italic> and <italic>w<sub>i</sub></italic>(<italic>k</italic>) is the weight associated with <italic>i</italic>-th particle. A possible system state is understood as a possible solution of the problem in question. In our case x<italic><sub>i</sub></italic>(<italic>k</italic>) represents a hypothetical user location and orientation, x<italic><sub>i</sub></italic>(<italic>k</italic>) = [<italic>x<sub>i</sub>, y<sub>i</sub>, φ<sub>i</sub></italic>]<italic><sup>T</sup>, x<sub>i</sub>, y<sub>i</sub></italic> denote coordinates in the local coordinate system defined in Section 3.1.2. <italic>φ<sub>i</sub></italic> is the azimuth orientation. The aim of this simulation is to to find the most probable user location. Given the series of measurements y(1) … y(<italic>k</italic>) the pedestrian's location is given by the probability density function that can be approximated by the probability mass function <xref rid="FD49" ref-type="disp-formula">(49)</xref>.</p>
<p>
<disp-formula id="FD49">
<label>(49)</label>
<mml:math id="mm57" display="block">
<mml:semantics id="sm57">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>x</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>∣</mml:mo>
<mml:mtext>y</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>:</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>≈</mml:mo>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>L</mml:mi></mml:munderover>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext>x</mml:mtext>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mtext>x</mml:mtext>
<mml:mtext>i</mml:mtext></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula>where <italic>δ</italic>(·) is the Dirac delta function. Weights <italic>w<sub>i</sub></italic>(<italic>k</italic>) of all generated particles should sum up to unity.</p></sec>
<sec>
<label>3.9.2.</label>
<title>Implementation of the Particle Filtering Algorithm</title>
<p>The implementation of the particle filtering algorithm for processing the positioning data is as follows:</p>
<list list-type="order">
<list-item>
<p><bold>Initialization.</bold> At the algorithm outset for <italic>k</italic>=1, all the particle states x<sub>i</sub>(1) are randomly initialized according to a given distribution. The weights <italic>w<sub>i</sub></italic>(1) are assigned equal values of 
<inline-formula>
<mml:math id="mm58" display="inline">
<mml:semantics id="sm58">
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>L</mml:mi></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>.</p></list-item>
<list-item>
<p><bold>Prediction.</bold> Based on the transition <xref rid="FD50" ref-type="disp-formula">Equation (50)</xref>, new particle states are predicted.</p>
<p>
<disp-formula id="FD50">
<label>(50)</label>
<mml:math id="mm59" display="block">
<mml:semantics id="sm59">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mtext mathvariant="bold">f</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mtext mathvariant="bold">u</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">v</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>u(<italic>k</italic> − 1) is a driving vector, v<italic><sub>i</sub></italic>(<italic>k</italic> − 1) is a noise vector introduced to the state due to the error of u(<italic>k</italic> − 1), where each particle is perturbed with an individually generated vector v<italic><sub>i</sub></italic>(<italic>k</italic> − 1), f(·) is a transition function that calculates a new state based on the previous one, driving signals and errors thereof.</p></list-item>
<list-item>
<p><bold>Measurement update.</bold> Each measurement y(<italic>k</italic>) updates the weights of the particles by <xref rid="FD51" ref-type="disp-formula">Equation (51)</xref>.</p>
<p>
<disp-formula id="FD51">
<label>(51)</label>
<mml:math id="mm60" display="block">
<mml:semantics id="sm60">
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:mi>p</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mtext mathvariant="bold">y</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>|</mml:mo>
<mml:msub>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula><italic>p</italic>(y(<italic>k</italic>)|x<italic><sub>i</sub></italic>(<italic>k</italic>) is a conditional probability density of measuring y(<italic>k</italic>), given the particle state x<italic><sub>i</sub></italic>(<italic>k</italic>). In other words, <italic>p</italic>(y(<italic>k</italic>)|x<italic><sub>i</sub></italic>(<italic>k</italic>) characterizes error distribution of a given data source. Particles that diverge in the long run from measurements will assume small weights <italic>w<sub>i</sub></italic>(<italic>k</italic>).</p></list-item>
<list-item>
<p><bold>Weights' normalization.</bold> The weights are normalized so that they sum up to 1—<xref rid="FD52" ref-type="disp-formula">Equation (52)</xref>.</p>
<p>
<disp-formula id="FD52">
<label>(52)</label>
<mml:math id="mm61" display="block">
<mml:semantics id="sm61">
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>:</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mtext>∑</mml:mtext>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>L</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula></p></list-item>
<list-item>
<p><bold>State estimation.</bold> The most probable system state is estimated, e.g., by the first moment <xref rid="FD53" ref-type="disp-formula">(53)</xref>:
<disp-formula id="FD53">
<label>(53)</label>
<mml:math id="mm62" display="block">
<mml:semantics id="sm62">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mo mathvariant="bold">¯</mml:mo></mml:mover></mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>L</mml:mi></mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">x</mml:mtext>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p></list-item>
<list-item>
<p><bold>Resampling.</bold> After a number of algorithm iterations, all but a few particles have negligible weights and therefore do not participate in the simulation effectively. This situation is detected by calculating the so-called degeneration indicator, expressed by <xref rid="FD54" ref-type="disp-formula">Equation (54)</xref>, which is an inverse of the second moment reflecting the dispersion of the weights.</p>
<p>
<disp-formula id="FD54">
<label>(54)</label>
<mml:math id="mm63" display="block">
<mml:semantics id="sm63">
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:munderover>
<mml:mtext>∑</mml:mtext>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>L</mml:mi></mml:munderover>
<mml:mrow>
<mml:msubsup>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow></mml:semantics></mml:math></disp-formula>If all particles have the same weights of <italic>L</italic><sup>−1</sup> then <italic>d</italic>(<italic>k</italic>) reaches its maximum value of 1. As the weights start to differ, the <italic>d</italic>(<italic>k</italic>) indicator decreases. If <italic>d</italic>(<italic>k</italic>) falls below a given threshold, then a process called resampling is introduced and a new set of particles is created. The probability of copying a particle to the new set is proportional to its weight <italic>w<sub>i</sub></italic>(<italic>k</italic>). Therefore particles that poorly approximate the system state are superseded by more “accurate” particles. Then all particles are assigned the same weight <italic>L</italic><sup>−1</sup>.</p></list-item>
<list-item>
<p>Go to point 2.</p></list-item></list></sec>
<sec>
<label>3.9.3.</label>
<title>Implementation</title>
<p><bold>Ad. 1.</bold> The particles can be initialized, e.g., around a first GPS readout.</p>
<p><bold>Ad. 2.</bold> Based on <xref ref-type="fig" rid="f15-sensors-12-06764">Figure 15</xref>, the transition equation for a particle <italic>i</italic> reads <xref rid="FD55" ref-type="disp-formula">(55)</xref>.</p>
<p>
<disp-formula id="FD55">
<label>(55)</label>
<mml:math id="mm64" display="block">
<mml:semantics id="sm64">
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></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:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></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:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>υ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>sin</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>υ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>cos</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>ϕ</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>T</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><italic>υ<sub>i</sub></italic>(<italic>k</italic>) and <italic>w<sub>i</sub></italic>(<italic>k</italic>) are random realizations of the pedometer and gyroscope noise respectively. Each particle is perturbed individually. <italic>k</italic> is the time instant, where <italic>t</italic> = <italic>k</italic> · <italic>dT</italic>.</p>
<p><bold>Ad. 3.</bold> The following sources are used to update the particle weights:</p>
<list list-type="bullet">
<list-item>
<p>GPS. The measurement update for the GPS readouts are given by <xref rid="FD56" ref-type="disp-formula">Equations (56)</xref> through <xref rid="FD58" ref-type="disp-formula">(58)</xref> based on the <xref rid="FD7" ref-type="disp-formula">Equation (7)</xref></p>
<p>
<disp-formula id="FD56">
<label>(56)</label>
<mml:math id="mm65" display="block">
<mml:semantics id="sm65">
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD57">
<label>(57)</label>
<mml:math id="mm66" display="block">
<mml:semantics id="sm66">
<mml:mrow>
<mml:msub>
<mml:mi>r</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mn>2</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msqrt></mml:mrow></mml:semantics></mml:math></disp-formula>
<disp-formula id="FD58">
<label>(58)</label>
<mml:math id="mm67" display="block">
<mml:semantics id="sm67">
<mml:mrow>
<mml:msub>
<mml:mi>σ</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>β</mml:mi>
<mml:mrow>
<mml:mtext>GPS</mml:mtext></mml:mrow></mml:msub>
<mml:mtext>HDOP</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>58</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p><italic>β</italic><sub>GPS</sub> is a coefficient which enables to weight GPS readouts with appropriate importance. Larger values of <italic>β</italic><sub>GPS</sub> makes the <italic>p</italic><sub>GPS</sub>() function more tolerant to GPS errors.</p>
<p>
<disp-formula id="FD59">
<label>(59)</label>
<mml:math id="mm68" display="block">
<mml:semantics id="sm68">
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mtext>map</mml:mtext></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p></list-item>
<list-item>
<p>comparison between the 3D virtual environment model and depth picture retrieved from the stereo camera. The measurement update equation is given by <xref rid="FD60" ref-type="disp-formula">Equation (60)</xref>.</p>
<p>
<disp-formula id="FD60">
<label>(60)</label>
<mml:math id="mm69" display="block">
<mml:semantics id="sm69">
<mml:mrow>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">L</mml:mi>
<mml:mi mathvariant="bold">S</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi mathvariant="bold">L</mml:mi>
<mml:mrow>
<mml:mi mathvariant="bold">V</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi></mml:mrow></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:semantics></mml:math></disp-formula></p>
<p>For each particle, a virtual environment is generated individually. The coordinates of the virtual camera are set to [<italic>x<sub>i</sub>, y<sub>i</sub>, h, φ<sub>i</sub></italic>]. <italic>h</italic> is the height at which the stereo camera is attached. Then the depth map <italic>L<sub>V,i</sub></italic> is generated. The function <italic>f<sub>L</sub></italic>(<bold>L<sub>S</sub>, L<sub>V,i</sub></bold>) is evoked for every particle. This is a computation demanding procedure. Note that, if an unexpected object appears in front of the stereo camera for 10 seconds, given particles' weights will be decreased by <italic>a</italic><sup>10/</sup><italic><sup>s</sup></italic><sup>·10</sup><italic><sup>s</sup>, c.f.</italic> <xref rid="FD45" ref-type="disp-formula">Equation (45)</xref> (3D matching algorithm is run 10 times a second). This might introduce a large error in the position estimation. Bigger values of <italic>a</italic> diminish the benefit of using a stereo camera and 3D model of the urban terrain.</p></list-item></list></sec></sec></sec>
<sec>
<label>4.</label>
<title>Trials</title>
<p>The trials were carried out at the campus of Lodz University of Technology, in an area of <italic>ca.</italic> 500 m by 500 m. The length of the trial path was <italic>ca.</italic> 2.6 km. The reference path was restored off-line by analysing images recorded by the camera. The average error of determining the reference path was <italic>ca.</italic> 0.5 m on average. The maximum error might have been 2–3 m. The delineated path is composed of straight lines. The location error is calculated as the distance between the appropriate path segment and the estimated location by a GPS receiver or the particle filter. Thus, actual positioning errors are larger. On the other hand, GPS errors assume dominant values in the direction perpendicular to a street. In the direction parallel to a street there are no buildings to occlude the sky. Hence, the signal from GPS satellites is not occluded, which results in a small error in the direction along a street [<xref ref-type="bibr" rid="b2-sensors-12-06764">2</xref>].</p></sec>
<sec sec-type="results">
<label>5.</label>
<title>Results</title>
<p>The results are presented by plots of paths, a histogram and a cumulated histogram of errors and a table that summarizes the errors. An interesting question is how much a given data source improves the accuracy of the positioning. <xref ref-type="table" rid="t1-sensors-12-06764">Table 1</xref> provides the answer. Therefore, several off-line tests were run with different combination of data sources. It was though assumed that the starting location is known. Otherwise, a bigger number of particles would have been necessary to find a first approximate location. Once, a rough location is found the filter is convergent. The initial errors might have been large and therefore eclipse the key point of measurements. On one side, this assumption might be justified. A pedestrian, e.g., a blind user goes out from his home, so he knows his location. On the other hand, a blind pedestrian might use the system when lost. The aforementioned distance error <italic>r<sub>e</sub></italic> is used as a comparison criterion. The results are evaluated by the following measures:</p>
<list list-type="order">
<list-item>
<p>Root-mean-square value, denoted by RMS<italic><sub>e</sub></italic>,</p></list-item>
<list-item>
<p>Mean error, denoted by <italic>μ<sub>e</sub></italic>,</p></list-item>
<list-item>
<p>CEP50—Circle of Error Probability 50%—the radius of a circle encompassing 50% of errors, <italic>i.e.</italic>, a median value,</p></list-item>
<list-item>
<p>CEP90—the radius of a circle encompassing 90% of errors, <italic>i.e.</italic>, ninth decile,</p></list-item>
<list-item>
<p>CEP95—the radius of a circle encompassing 95% of errors, <italic>i.e.</italic>, 95th percentile,</p></list-item>
<list-item>
<p>CEP99—the radius of a circle encompassing 99% of errors, i.e., 99th percentile,</p></list-item>
<list-item>
<p>Maximal error—the maximum value of an error recorded during a trial, denoted by max(<italic>r<sub>e</sub></italic>)</p></list-item></list></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>The results were calculated based on <italic>ca.</italic> 1,900 GPS readouts, 3,400 particle filter estimates and 19,000 pictures from the stereo camera. The particle filter using all available data sources provides by far the best accuracy. For 99% of the time the accuracy is better than 4.5 m. This is still too large an error for safe navigation of visually impaired pedestrians. The main source of errors were introduced by misestimated direction, which is visible in <xref ref-type="fig" rid="f22-sensors-12-06764">Figure 22</xref> at coordinates (410 m, 125 m). The turn is misestimated by ≈20°. This error is too large for the non-linearity error mentioned in Section 3.1.1 or any other gyroscope error. Possibly the sensors came adrift and did not change its direction accordingly. This error, when not corrected immediately, has a ripple effect. This can be, however, taken care of. Also, more accurate sensors are available on the market. It is surmised that an error of 3 m for 99% of time is achievable.</p>
<p>It is interesting to note that when the initial position is known, the location of a pedestrian can be estimated without having to use a GPS receiver. The setup number 5 (see <xref ref-type="table" rid="t1-sensors-12-06764">Table 1</xref>) gives best results after the setup number 4 and it is better than sole GPS readouts. Needless to say, this approach can be used in limited areas, e.g., inside buildings where GPS readouts are not available. The probability map concept limits the positioning error to the width of a street, <italic>ca.</italic> 10 m. Due to the imposed constraints on the pedestrian kinematics, the error dropped 3 times in terms of a root-mean-square error, which poses the best improvement from all other additional sources.</p>
<p>As mentioned before, on the bases of GPS readouts and the probability map, a user's location can be estimated within <italic>ca.</italic> 10 m. A stereo camera can refine the user's position down to 2 m, providing there are no unexpected objects, or difficult objects like trees, whose crown's radius could differ from the assumed 2 m. GPS readouts complement nicely with the algorithm in which the depth images derived from terrain model and stereoscopy are compared. In the presence of high buildings, GPS readouts are compromised. Under these circumstances the image matching algorithm performs well as the walls of buildings are confidently detectable by a stereo camera. On the other hand, in an open space GPS readouts are accurate down to, <italic>ca.</italic> 2–3 m. Then in turn, the image matching algorithm has no reference points to perform a viable comparison.</p>
<p>The presented algorithm works off-line. It is quite computationally demanding. The particle filtering algorithm requires generation of <italic>ca.</italic> 500 particles for good positioning accuracy. However, the task can be handled on-line without any optimization techniques by a dual core, 2.5 GHz standard notebook.</p></sec></body>
<back>
<ack>
<p>The project is financed by the National Centre of Research and Development of Poland in years 2010–2013 under the grant NR02-0083-10.</p></ack>
<ref-list>
<title>References and Notes</title>
<ref id="b1-sensors-12-06764"><label>1.</label><citation citation-type="web"><person-group person-group-type="author"><collab>Official U.S. Information Website about the GPS System</collab></person-group><comment>Available online: <ext-link xlink:href="http://www.gps.gov" ext-link-type="uri">http://www.gps.gov</ext-link> (accessed on 14 February 2012)</comment></citation></ref>
<ref id="b2-sensors-12-06764"><label>2.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Modsching</surname><given-names>M.</given-names></name><name><surname>Kramer</surname><given-names>R.</given-names></name><name><surname>Hagen</surname><given-names>K.</given-names></name></person-group><article-title>Field Trial on GPS Accuracy in a Medium Size City: The Influence of Built-up</article-title><conf-name>Proceedings of the 3rd Workshop on Positioning, Navigation and Communication</conf-name><conf-loc>Hannover, Germany</conf-loc><conf-date>16 March 2006</conf-date><fpage>209</fpage><lpage>121</lpage></citation></ref>
<ref id="b3-sensors-12-06764"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Baranski</surname><given-names>P.</given-names></name><name><surname>Strumillo</surname><given-names>P.</given-names></name></person-group><article-title>Fusion of Data From Inertial Sensors, Raster Maps and GPS for Estimation of Pedestrian Geographic Location in Urban Terrain</article-title><source>Metrol. Measure. Syst.</source><year>2011</year><volume>1</volume><fpage>145</fpage><lpage>158</lpage></citation></ref>
<ref id="b4-sensors-12-06764"><label>4.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Ong</surname><given-names>R.B.</given-names></name><name><surname>Petovello</surname><given-names>M.G.</given-names></name><name><surname>Lachapelle</surname><given-names>G.</given-names></name></person-group><article-title>Assessment of GPS/GLONASS RTK under Various Operational Conditions</article-title><conf-name>Proceedings of the 22nd International Technical Meeting of the Satellite Division of the Institute of Navigation (ION GNSS 2009)</conf-name><conf-loc>Savannah, GA, USA</conf-loc><conf-date>22–25 September 2009</conf-date><fpage>3297</fpage><lpage>3308</lpage></citation></ref>
<ref id="b5-sensors-12-06764"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Trajkowski</surname><given-names>K.K.</given-names></name><name><surname>Sterle</surname><given-names>O.</given-names></name><name><surname>Stopar</surname><given-names>B.</given-names></name></person-group><article-title>Sturdy Positioning with High Sensitivity GPS Sensors under Adverse Conditions</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>8332</fpage><lpage>8347</lpage><pub-id pub-id-type="doi">10.3390/s100908332</pub-id><pub-id pub-id-type="pmid">22163657</pub-id></citation></ref>
<ref id="b6-sensors-12-06764"><label>6.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Diggelen</surname><given-names>F.</given-names></name></person-group><article-title>Generating Assisted Data</article-title><source>A-GPS: Assisted GPS, GNSS, and SBAS</source><publisher-name>Artech House</publisher-name><publisher-loc>Boston, MA, USA</publisher-loc><year>2009</year></citation></ref>
<ref id="b7-sensors-12-06764"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Krakiwsky</surname><given-names>E.</given-names></name><name><surname>Harris</surname><given-names>C.</given-names></name><name><surname>Wong</surname><given-names>R.</given-names></name></person-group><article-title>A Kalman Filter for Integrating Dead Reckoning, Map Matching and GPS Positioning</article-title><conf-name>Proceedings of Position Location and Navigation Symposium, Navigation into the 21st Century</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>29 November–2 December 1988</conf-date><fpage>39</fpage><lpage>46</lpage></citation></ref>
<ref id="b8-sensors-12-06764"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Taghipour</surname><given-names>S.</given-names></name><name><surname>Meybodi</surname><given-names>M.</given-names></name><name><surname>Taghipour</surname><given-names>A.</given-names></name></person-group><article-title>An Algorithm for Map Matching for Car Navigation System</article-title><conf-name>Proceedings of the 3rd International Conference on Information and Communication Technologies From Theory to Applications</conf-name><conf-loc>Damascus, Syria</conf-loc><conf-date>7–11 April 2008</conf-date><fpage>1</fpage><lpage>5</lpage></citation></ref>
<ref id="b9-sensors-12-06764"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mezentsev</surname><given-names>O.</given-names></name><name><surname>Lachapelle</surname><given-names>G.</given-names></name></person-group><article-title>Pedestrian Dead Reckoning—A Solution to Navigation in GPS Signal Degraded Areas</article-title><source>Geomatica</source><year>2005</year><volume>59</volume><fpage>145</fpage><lpage>182</lpage></citation></ref>
<ref id="b10-sensors-12-06764"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fang</surname><given-names>L.</given-names></name><name><surname>Panos</surname><given-names>J.</given-names></name></person-group><article-title>Design of a Wireless Assisted Pedestrian Dead Reckoning System—The NavMote EXperience</article-title><source>IEEE Trans. Instrume. Measur.</source><year>2005</year><volume>50</volume><fpage>2342</fpage><lpage>2359</lpage></citation></ref>
<ref id="b11-sensors-12-06764"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>van der Spek</surname><given-names>S.</given-names></name><name><surname>van Schaick</surname><given-names>J.</given-names></name><name><surname>de Bois</surname><given-names>P.</given-names></name><name><surname>de Haan</surname><given-names>R.</given-names></name></person-group><article-title>Sensing Human Activity: GPS Tracking</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>3033</fpage><lpage>3055</lpage><pub-id pub-id-type="doi">10.3390/s90403033</pub-id><pub-id pub-id-type="pmid">22574061</pub-id></citation></ref>
<ref id="b12-sensors-12-06764"><label>12.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Woodman</surname><given-names>O.</given-names></name></person-group><source>An Introduction to Inertial Navigation</source><comment>Technical Report Number 696</comment><publisher-name>University of Cambridge</publisher-name><publisher-loc>Cambridge, UK</publisher-loc><year>2007</year><comment>Available oneline: <ext-link xlink:href="http://www.cl.cam.ac.uk/techreports/" ext-link-type="uri">http://www.cl.cam.ac.uk/techreports/</ext-link> (accessed on 1 February 2012)</comment></citation></ref>
<ref id="b13-sensors-12-06764"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jirawimut</surname><given-names>R.</given-names></name><name><surname>Ptasinski</surname><given-names>P.</given-names></name><name><surname>Garaj</surname><given-names>V.</given-names></name></person-group><article-title>A Method for Dead Reckoning Parameter Correction in Pedestrian Navigation System</article-title><source>IEEE Trans. Instrum. Measur.</source><year>2003</year><volume>52</volume><fpage>209</fpage><lpage>215</lpage><pub-id pub-id-type="doi">10.1109/TIM.2002.807986</pub-id></citation></ref>
<ref id="b14-sensors-12-06764"><label>14.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Godha</surname><given-names>S.</given-names></name><name><surname>Lachapelle</surname><given-names>G.</given-names></name><name><surname>Cannon</surname><given-names>M.</given-names></name></person-group><article-title>Integrated GPS/INS System for Pedestrian Navigation in a Signal Degraded Environment</article-title><conf-name>Proceedings of the 19th International Technical Meeting (ION GNSS 2006)</conf-name><conf-loc>Fort Worth, TX, USA</conf-loc><conf-date>26–29 September 2006</conf-date><fpage>2151</fpage><lpage>2164</lpage></citation></ref>
<ref id="b15-sensors-12-06764"><label>15.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Ladetto</surname><given-names>Q.</given-names></name><name><surname>Merminod</surname><given-names>B.</given-names></name></person-group><article-title>An Alternative Approach to Vision Techniques: Pedestrian Navigation System Based on Digital Magnetic Compass and Gyroscope Integration</article-title><conf-name>Proceedings of the 6th World Multi-Conference on Systemics, Cybernetics and Informatics</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>14–18 July 2002</conf-date><fpage>145</fpage><lpage>150</lpage></citation></ref>
<ref id="b16-sensors-12-06764"><label>16.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Seung-Hyun</surname><given-names>K.</given-names></name></person-group><article-title>Statistical Analysis of Urban GPS Multipaths and Pseudo-Range Measurement Errors</article-title><source>IEEE Trans. Aerospace Electr. Syst.</source><year>2011</year><volume>47</volume><fpage>1101</fpage><lpage>1113</lpage><pub-id pub-id-type="doi">10.1109/TAES.2011.5751245</pub-id></citation></ref>
<ref id="b17-sensors-12-06764"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bancroft</surname><given-names>J.B.</given-names></name><name><surname>Lachapelle</surname><given-names>G.</given-names></name></person-group><article-title>Data Fusion Algorithms for Multiple Inertial Measurement Units</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>6771</fpage><lpage>6798</lpage><pub-id pub-id-type="doi">10.3390/s110706771</pub-id><pub-id pub-id-type="pmid">22163985</pub-id></citation></ref>
<ref id="b18-sensors-12-06764"><label>18.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Jirawimut</surname><given-names>R.</given-names></name><name><surname>Shah</surname><given-names>M. A.</given-names></name><name><surname>Ptasinski</surname><given-names>P.</given-names></name><name><surname>Cecelja</surname><given-names>F.</given-names></name><name><surname>Balachandran</surname><given-names>W.</given-names></name></person-group><article-title>Integrated DGPS and Dead Reckoning for A Pedestrian Navigation System in Signal Blocked Environments</article-title><conf-name>Proceedings of the 13th International Technical Meeting of the Satellite Division of The Institute of Navigation</conf-name><conf-loc>Salt Lake City, UT, USA</conf-loc><conf-date>19–22 September 2000</conf-date><fpage>1741</fpage><lpage>1747</lpage></citation></ref>
<ref id="b19-sensors-12-06764"><label>19.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Williamson</surname><given-names>J.</given-names></name><name><surname>Strachan</surname><given-names>S.</given-names></name><name><surname>Murray-Smith</surname><given-names>R.</given-names></name></person-group><article-title>It's a Long Way to Monte Carlo: Probabilistic Display in GPS Navigation</article-title><conf-name>Proceedings of the 8th Conference on Human-Computer Interaction with Mobile Devices and Services</conf-name><conf-loc>Espoo, Finland</conf-loc><conf-date>12–15 September 2006</conf-date><fpage>89</fpage><lpage>96</lpage></citation></ref>
<ref id="b20-sensors-12-06764"><label>20.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Ceranka</surname><given-names>S.</given-names></name><name><surname>Niedzwiecki</surname><given-names>M.</given-names></name></person-group><article-title>Application of Particle Filtering in Navigation System for Blind</article-title><conf-name>Proceedings of Signal Processing and its Applications</conf-name><conf-loc>Paris, France</conf-loc><conf-date>1–4 July 2003</conf-date><fpage>495</fpage><lpage>498</lpage></citation></ref>
<ref id="b21-sensors-12-06764"><label>21.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Widyawan</surname></name><name><surname>Klepal</surname><given-names>M.</given-names></name><name><surname>Beauregard</surname><given-names>S.</given-names></name></person-group><article-title>A Backtracking Particle Filter for Fusing Building Plans with PDR Displacement Estimates</article-title><conf-name>Proceedings of Positioning, Navigation and Communication</conf-name><conf-loc>Hannover, Germany</conf-loc><conf-date>27 March 2008</conf-date><fpage>207</fpage><lpage>212</lpage></citation></ref>
<ref id="b22-sensors-12-06764"><label>22.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hesch</surname><given-names>J.A.</given-names></name><name><surname>Roumeliotis</surname><given-names>S.I.</given-names></name></person-group><article-title>An Indoor Localization Aid for the Visually Impaired</article-title><conf-name>2007 IEEE International Conference on Robotics and Automation (ICRA'07)</conf-name><conf-loc>Roma, Italy</conf-loc><conf-date>10–14 April 2007</conf-date><fpage>3545</fpage><lpage>3551</lpage></citation></ref>
<ref id="b23-sensors-12-06764"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Girard</surname><given-names>G.</given-names></name><name><surname>Cote</surname><given-names>S.</given-names></name><name><surname>Zlatanova</surname><given-names>S.</given-names></name><name><surname>Barette</surname><given-names>Y.</given-names></name><name><surname>St-Pierre</surname><given-names>J.</given-names></name><name><surname>Van Oosterom</surname><given-names>P.</given-names></name></person-group><article-title>Indoor Pedestrian Navigation Using Foot-Mounted IMU and Portable Ultrasound Range Sensors</article-title><source>Sensors</source><year>2011</year><volume>11</volume><fpage>7606</fpage><lpage>7624</lpage><pub-id pub-id-type="doi">10.3390/s110807606</pub-id><pub-id pub-id-type="pmid">22164034</pub-id></citation></ref>
<ref id="b24-sensors-12-06764"><label>24.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Thrun</surname><given-names>S.</given-names></name><name><surname>Montemerlo</surname><given-names>M.</given-names></name></person-group><article-title>FastSLAM</article-title><source>A Scalable Method for the Simultaneous Localization and Mapping Problem in Robotics</source><person-group person-group-type="editor"><name><surname>Siciliano</surname><given-names>B.</given-names></name><name><surname>Khatib</surname><given-names>O.</given-names></name><name><surname>Groen</surname><given-names>F.</given-names></name></person-group><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Heidelberg, Germany</publisher-loc><year>2007</year></citation></ref>
<ref id="b25-sensors-12-06764"><label>25.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kleiner</surname><given-names>A.</given-names></name><name><surname>Dali</surname><given-names>S.</given-names></name></person-group><article-title>Decentralized SLAM for Pedestrians without Direct Communication</article-title><conf-name>Proceedings of the International Conference on Intelligent Robots and Systems</conf-name><conf-loc>San Diego, CA, USA</conf-loc><conf-date>29 October–2 November 2007</conf-date><fpage>1461</fpage><lpage>1466</lpage></citation></ref>
<ref id="b26-sensors-12-06764"><label>26.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Cecelja</surname><given-names>F.</given-names></name><name><surname>Balachandran</surname><given-names>W.</given-names></name><name><surname>Jirawimut</surname><given-names>R.</given-names></name></person-group><article-title>A Stereo Vision System for Pedestrian Navigation</article-title><conf-name>Proceedings of the 17th International Conference on Applied Electromagnetics and Communications</conf-name><conf-loc>Dubrovnik, Croatia</conf-loc><conf-date>1–3 October 2003</conf-date><fpage>30</fpage><lpage>33</lpage></citation></ref>
<ref id="b27-sensors-12-06764"><label>27.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Burguera</surname><given-names>A.</given-names></name><name><surname>Gonzlez</surname><given-names>Y.</given-names></name><name><surname>Oliver</surname><given-names>G.</given-names></name></person-group><article-title>Sonar Sensor Models and Their Application to Mobile Robot Localization</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>10217</fpage><lpage>10243</lpage><pub-id pub-id-type="doi">10.3390/s91210217</pub-id><pub-id pub-id-type="pmid">22303171</pub-id></citation></ref>
<ref id="b28-sensors-12-06764"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Brown</surname><given-names>M.Z.</given-names></name><name><surname>Burschka</surname><given-names>D.</given-names></name><name><surname>Hager</surname><given-names>G.D.</given-names></name></person-group><article-title>Advances in Computational Stereo</article-title><source>IEEE Trans. Patt. Anal. Mach. Intell.</source><year>2003</year><volume>25</volume><fpage>9931008</fpage></citation></ref>
<ref id="b29-sensors-12-06764"><label>29.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Szeliski</surname><given-names>R.</given-names></name><name><surname>Scharstein</surname><given-names>D.</given-names></name></person-group><article-title>Symmetric Sub-Pixel Stereo Matching</article-title><conf-name>Proceedings of the 7th European Conference on Computer Vision</conf-name><conf-loc>Copenhagen, Denmark</conf-loc><conf-date>27 May–2 June 2002</conf-date><fpage>525</fpage><lpage>540</lpage></citation></ref>
<ref id="b30-sensors-12-06764"><label>30.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Howe</surname><given-names>D.A.</given-names></name><name><surname>Allan</surname><given-names>D.W.</given-names></name><name><surname>Barnes</surname><given-names>J.A.</given-names></name></person-group><article-title>Properties of Signal Sources and Measurement Methods</article-title><conf-name>Proceedings of the 35th Annual Symposium on Frequency Control</conf-name><conf-loc>Philadelphia, PA, USA</conf-loc><conf-date>27–29 May 1981</conf-date></citation></ref>
<ref id="b31-sensors-12-06764"><label>31.</label><citation citation-type="book"><source>IEEE Standard for Inertial Sensor Terminology</source><comment>IEEE Std 528-2001 (Revision of IEEE Std 528-1994)</comment><publisher-name>The Institute of Electrical and Electronics Engineers Inc.</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><year>2001</year></citation></ref>
<ref id="b32-sensors-12-06764"><label>32.</label><citation citation-type="web"><person-group person-group-type="author"><collab>International Hydrographic Organization</collab></person-group><source>User's Handbook On Datum Transformations Involving WGS 84</source><comment>Available online: <ext-link xlink:href="www.iho.int/iho_pubs/standard/S60_Ed3Eng.pdf" ext-link-type="uri">www.iho.int/iho_pubs/standard/S60_Ed3Eng.pdf</ext-link> (accessed on 10 February 2012)</comment></citation></ref>
<ref id="b33-sensors-12-06764"><label>33.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Brown</surname><given-names>R.</given-names></name><name><surname>Hwang</surname><given-names>P.</given-names></name></person-group><article-title>Transformation of Random Variables</article-title><source>Introduction to Random Signals and Applied Kalman Filtering</source><publisher-name>John Willey &amp; Sons</publisher-name><publisher-loc>New York, NY, USA</publisher-loc><year>1997</year><fpage>42</fpage><lpage>49</lpage></citation></ref>
<ref id="b34-sensors-12-06764"><label>34.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Park</surname><given-names>S.A.</given-names></name><name><surname>Suh</surname><given-names>Y.S.</given-names></name></person-group><article-title>A Zero Velocity Detection Algorithm Using Inertial Sensors for Pedestrian Navigation Systems</article-title><source>Sensors</source><year>2010</year><volume>10</volume><fpage>9163</fpage><lpage>9178</lpage><pub-id pub-id-type="doi">10.3390/s101009163</pub-id><pub-id pub-id-type="pmid">22163402</pub-id></citation></ref>
<ref id="b35-sensors-12-06764"><label>35.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Anderson</surname><given-names>B.D.O.</given-names></name><name><surname>Moore</surname><given-names>J.B.</given-names></name></person-group><source>Optimal Filtering</source><publisher-name>Prentice Hall</publisher-name><publisher-loc>Englewood Cliffs, NJ, USA</publisher-loc><year>1972</year></citation></ref>
<ref id="b36-sensors-12-06764"><label>36.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Rodriguez</surname><given-names>J.</given-names></name><name><surname>Aggarwal</surname><given-names>J.</given-names></name></person-group><article-title>Quantization Error in Stereo Imaging</article-title><conf-name>Proceedings of Computer Society Conference on Computer Vision and Pattern Recognition</conf-name><conf-loc>Ann Arbor, MI, USA</conf-loc><conf-date>5–9 June 1988</conf-date><fpage>153</fpage><lpage>158</lpage></citation></ref>
<ref id="b37-sensors-12-06764"><label>37.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Cappe</surname><given-names>O.</given-names></name><name><surname>Godsill</surname><given-names>S.J.</given-names></name><name><surname>Moulines</surname><given-names>E.</given-names></name></person-group><article-title>An Overview of Existing Methods and Recent Advances in Sequential Monte Carlo</article-title><source>Proc. IEEE</source><year>2007</year><volume>95</volume><fpage>899</fpage><lpage>924</lpage><pub-id pub-id-type="doi">10.1109/JPROC.2007.893250</pub-id></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Table</title>
<fig id="f1-sensors-12-06764" position="float">
<label>Figure 1.</label>
<caption>
<p>The block diagram of the system. The electronic module is a dedicated electronic circuit comprised of a 6DOF sensor, GPS receiver and microcontroller. The module is connected with the PC via USB interface. The stereovision block represents a stereo camera.</p></caption>
<graphic xlink:href="sensors-12-06764f1.gif"/></fig>
<fig id="f2-sensors-12-06764" position="float">
<label>Figure 2.</label>
<caption>
<p>A picture of the built electronic module. The black box is a 6DOF sensor—3-axial gyroscope and 3-axial accelerometer. The orange cuboid is an antenna of a GPS receiver. The module is connected with the PC through a mini-USB socket.</p></caption>
<graphic xlink:href="sensors-12-06764f2.gif"/></fig>
<fig id="f3-sensors-12-06764" position="float">
<label>Figure 3.</label>
<caption>
<p>The relation between the values of the HDOP parameter and the distance errors <italic>r<sub>e</sub></italic>(<italic>t</italic>).</p></caption>
<graphic xlink:href="sensors-12-06764f3.gif"/></fig>
<fig id="f4-sensors-12-06764" position="float">
<label>Figure 4.</label>
<caption>
<p>The algorithm for estimating the number of steps and their lengths.</p></caption>
<graphic xlink:href="sensors-12-06764f4.gif"/></fig>
<fig id="f5-sensors-12-06764" position="float">
<label>Figure 5.</label>
<caption>
<p>The local coordinate system of the 6DOF sensor. <italic>g</italic> denotes the gravity acceleration. <italic>ω<sub>x</sub>, ω<sub>y</sub></italic> and <italic>ω<sub>z</sub></italic> are angular velocities which are clock-wise oriented with their rotation axes. <italic>α<sub>x</sub>, α<sub>y</sub></italic> and <italic>α<sub>z</sub></italic> are angles between the sensor's axes and the gravity.</p></caption>
<graphic xlink:href="sensors-12-06764f5.gif"/></fig>
<fig id="f6-sensors-12-06764" position="float">
<label>Figure 6.</label>
<caption>
<p>The relationship between the angles <italic>β<sub>x</sub></italic> and <italic>β<sub>y</sub></italic> and the angle <italic>γ</italic> which describes the sensor tilt and is measured between the sensor's Z-axis and the −<italic>g</italic> axis.</p></caption>
<graphic xlink:href="sensors-12-06764f6.gif"/></fig>
<fig id="f7-sensors-12-06764" position="float">
<label>Figure 7.</label>
<caption>
<p><bold>(a</bold>) Path plotted for the pedometer and gyroscope readouts. The gyroscope readouts are corrected by the gravity estimation algorithm. (<bold>b</bold>) Path with no gyroscope correction. Points (<italic>x, y</italic>) = (0, 0) denote the starting point. There were 20 turns, each 90°. The trial was started and ended in the same point. The difference between the heading direction at the beginning and at the end was ≈ 21°, which corresponds to 1° of error per every rotation.</p></caption>
<graphic xlink:href="sensors-12-06764f7.gif"/></fig>
<fig id="f8-sensors-12-06764" position="float">
<label>Figure 8.</label>
<caption>
<p>An example of a probability map of the University Campus. Forbidden, probable and preferred areas are denoted by black, grey and white respectively. The streets at the campus are paved and have the same texture as pavements. A blind user would rather refrain from walking through lawns.</p></caption>
<graphic xlink:href="sensors-12-06764f8.gif"/></fig>
<fig id="f9-sensors-12-06764" position="float">
<label>Figure 9.</label>
<caption>
<p>The local coordinate system of the stereovision camera. <italic>F</italic> is the focus of the camera, and f is the focal length, (<italic>x,y,z</italic>) are the coordinates of a point in the camera coordinate system. This point has the coordinates (<italic>x<sub>P</sub>, y<sub>P</sub></italic>, 0) on the projection plane <italic>P<sub>P</sub></italic> of the camera and <italic>α</italic> denotes the angle from the <italic>Z</italic> axis at which point (<italic>x, y, z</italic>) is visible by the camera.</p></caption>
<graphic xlink:href="sensors-12-06764f9.gif"/></fig>
<fig id="f10-sensors-12-06764" position="float">
<label>Figure 10.</label>
<caption>
<p>An illustration of the quantization effect on estimating the <italic>z</italic> coordinate. (<bold>a</bold>) The plot of <italic>z</italic> and errors thereof as a function of disparity <italic>x<sub>d</sub></italic>. Dots symbolize the depth <italic>z</italic> calculated from <italic>z</italic> = <italic>Bf/x<sub>d</sub></italic>. Bars symbolizes errors of <italic>z</italic> when <italic>x<sub>d</sub></italic> is encumbered with an error of 
<inline-formula>
<mml:math id="mm70" display="inline">
<mml:semantics id="sm70">
<mml:mrow>
<mml:mo>±</mml:mo>
<mml:mfrac>
<mml:mo>∈</mml:mo>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula> or 
<inline-formula>
<mml:math id="mm71" display="inline">
<mml:semantics id="sm71">
<mml:mrow>
<mml:mo>±</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>pixel</mml:mtext></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac></mml:mrow></mml:semantics></mml:math></inline-formula>, (<bold>b</bold>) The absolute error of <italic>z</italic> as a function of the depth <italic>z</italic>.</p></caption>
<graphic xlink:href="sensors-12-06764f10.gif"/></fig>
<fig id="f11-sensors-12-06764" position="float">
<label>Figure 11.</label>
<caption>
<p>(<bold>a</bold>) A plot of <italic>f<sub>z</sub></italic>(Δ<italic>z</italic>|<italic>z</italic>) for different values of <italic>z</italic>. As <italic>z</italic> increases the conditional probability density function widens. (<bold>b</bold>) A 3D plot of <italic>f<sub>z</sub></italic>. For illustration purposes, <italic>σ<sub>d</sub></italic> was assumed 6 pix, whereby, to account for the units, <italic>f</italic> = 279 pix was substituted.</p></caption>
<graphic xlink:href="sensors-12-06764f11.gif"/></fig>
<fig id="f12-sensors-12-06764" position="float">
<label>Figure 12.</label>
<caption>
<p>(<bold>a</bold>) TV camera image. (<bold>b</bold>) Disparity map from the stereo camera. Darker colours correspond to smaller disparity, thus bigger distance. (<bold>c</bold>) 3D model of the corresponding urban environment.</p></caption>
<graphic xlink:href="sensors-12-06764f12.gif"/></fig>
<fig id="f13-sensors-12-06764" position="float">
<label>Figure 13.</label>
<caption>
<p>(<bold>a</bold>) An example of a disparity map <bold>K</bold>. Darker colours correspond to smaller values of disparity, thus larger distances. Example windows for each region <italic>S<sub>j</sub></italic> (<italic>j</italic> = 1… 5) are denoted by <bold>W</bold><sub>1</sub> through <bold>W</bold><sub>5</sub>. One can see that for windows <bold>W</bold><sub>2</sub> and <bold>W</bold><sub>3</sub> the depth map was determined correctly and these windows should be compared with corresponding windows in the <bold>L</bold><italic><sub>V</sub></italic> depth map. (<bold>b</bold>) The disparity values <italic>x<sub>d</sub></italic> for each window <bold>W</bold><sub>j</sub> as a function of the <italic>x</italic><sub>pix</sub> coordinate in the disparity picture. For <bold>W</bold><sub>1</sub>, <bold>W</bold><sub>4</sub> and <bold>W</bold><sub>5</sub> windows, the disparity <italic>x<sub>d</sub></italic> changes from 0 pix to ≈2 pix which corresponds to distances ∞ to ≈16 m. These windows should be rejected from further analysis.</p></caption>
<graphic xlink:href="sensors-12-06764f13.gif"/></fig>
<fig id="f14-sensors-12-06764" position="float">
<label>Figure 14.</label>
<caption>
<p>(<bold>a</bold>) An example of the <italic>f<sub>Lj</sub></italic> function from <xref rid="FD45" ref-type="disp-formula">Equation (45)</xref> where <italic>k<sub>j</sub></italic> &gt; <italic>k</italic><sub>thr</sub>. Example values of <italic>a</italic> = 0.5 and <italic>σ<sub>L</sub></italic> = 6 pix were used (to account for the units, <italic>f</italic> = 279pix was substituted). (<bold>b</bold>) A 3D plot of <italic>f<sub>Lj</sub></italic> function where <italic>k<sub>j</sub></italic> &gt; <italic>k</italic><sub>thr</sub> and Δ<italic>z</italic> = <italic>d<sub>Sj</sub></italic> − <italic>d<sub>Lj</sub></italic>. The base of the function widens as the compared distances increase.</p></caption>
<graphic xlink:href="sensors-12-06764f14.gif"/></fig>
<fig id="f15-sensors-12-06764" position="float">
<label>Figure 15.</label>
<caption>
<p>An explanation of the unperturbed state transition: <italic>d</italic>(<italic>k</italic>) is the length of a step estimated by the pedometer. <italic>φ</italic>(<italic>k</italic>) is the azimuth orientation. <italic>ω<sub>z</sub></italic>(<italic>k</italic>) is the angular velocity around the gravity axis. <italic>ω<sub>z</sub></italic> is estimated by the gyroscope and the gravity estimation algorithm. (<italic>x</italic>(<italic>k</italic> − 1),<italic>y</italic>(<italic>k</italic> − 1)), (<italic>x</italic>(<italic>k</italic>), <italic>y</italic>(<italic>k</italic>)) are the coordinates in the previous and current time instant.</p></caption>
<graphic xlink:href="sensors-12-06764f15.gif"/></fig>
<fig id="f16-sensors-12-06764" position="float">
<label>Figure 16.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of a GPS receiver. In the presence of buildings, the GPS readouts are ≈30 m inaccurate. The errors depends also on the satellites configuration against a building. This can be noticed for coordinates (220 m, 80 m). The same place was revisited after a couple of minutes and the positioning error was very different. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f16.gif"/></fig>
<fig id="f17-sensors-12-06764" position="float">
<label>Figure 17.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of GPS receiver and inertial sensors. The readouts from the inertial sensors enable to eliminate big errors. The accuracy improvement is not significant due to errors in estimating direction. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f17.gif"/></fig>
<fig id="f18-sensors-12-06764" position="float">
<label>Figure 18.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of GPS receiver, inertial sensors, probability map. The probability map eliminates direction errors, by pruning particles that diverge from a reference direction. Therefore errors are instantly eliminated and do not propagate. The positioning errors are then described by random walk with bounds. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f18.gif"/></fig>
<fig id="f19-sensors-12-06764" position="float">
<label>Figure 19.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of GPS receiver, inertial sensors, probability map, stereo camera and 3D model of the environment. The positioning is quite precise. The errors are mainly introduced by the error in estimating the heading direction. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f19.gif"/></fig>
<fig id="f20-sensors-12-06764" position="float">
<label>Figure 20.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of inertial sensors, probability map, stereo camera and 3D model of the environment. When the initial position is known, the filter can estimate the pedestrian location with smaller errors than the GPS receiver. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f20.gif"/></fig>
<fig id="f21-sensors-12-06764" position="float">
<label>Figure 21.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of GPS receiver, inertial sensors, probability map, stereo camera and 3D model of the environment. The error of estimating direction at (400 m, 120 m) introduces big errors later on. The filter managed to recover at (240 m, 80 m). (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f21.gif"/></fig>
<fig id="f22-sensors-12-06764" position="float">
<label>Figure 22.</label>
<caption>
<p>(<bold>a</bold>) Red dashed line—reference path. Blue solid line—estimated path with a help of the inertial sensors, <italic>i.e.</italic>, gyroscope for estimating direction change and accelerometers for counting steps and their lengths. As times goes on, the errors accumulate due to angular random walk. (<bold>b</bold>) Histograms of distance errors.</p></caption>
<graphic xlink:href="sensors-12-06764f22.gif"/></fig>
<table-wrap id="t1-sensors-12-06764" position="float">
<label>Table 1.</label>
<caption>
<p>Results of the trial at the University Campus. Seven setups of data sources were simulated. The sign ‘+’ in a column denotes that a given data source was included in the simulation. Otherwise the data source is not used. Setup number 4 was carried out with all data sources on. The results for this setup are best.</p></caption>
<table frame="box" rules="all">
<tbody>
<tr>
<td align="right" valign="top">Setup</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">5</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">7</td></tr>
<tr>
<td align="right" valign="top">GPS</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top"/>
<td align="center" valign="top"/>
<td align="center" valign="top"/></tr>
<tr>
<td align="right" valign="top">Inertialsensors</td>
<td align="center" valign="top"/>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td></tr>
<tr>
<td align="right" valign="top">Probability map</td>
<td align="center" valign="top"/>
<td align="center" valign="top"/>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top"/></tr>
<tr>
<td align="right" valign="top">3D matching algorithm</td>
<td align="center" valign="top"/>
<td align="center" valign="top"/>
<td align="center" valign="top"/>
<td align="center" valign="top">+</td>
<td align="center" valign="top">+</td>
<td align="center" valign="top"/>
<td align="center" valign="top"/></tr>
<tr>
<td align="right" valign="top">RMS<italic><sub>e</sub></italic> [m]</td>
<td align="center" valign="top">5.23</td>
<td align="center" valign="top">4.96</td>
<td align="center" valign="top">2.10</td>
<td align="center" valign="top">1.26</td>
<td align="center" valign="top">1.65</td>
<td align="center" valign="top">4.39</td>
<td align="center" valign="top">107.5</td></tr>
<tr>
<td align="right" valign="top"><italic>μ<sub>e</sub></italic> [m]</td>
<td align="center" valign="top">3.27</td>
<td align="center" valign="top">3.45</td>
<td align="center" valign="top">1.56</td>
<td align="center" valign="top">0.87</td>
<td align="center" valign="top">0.95</td>
<td align="center" valign="top">2.94</td>
<td align="center" valign="top">86.4</td></tr>
<tr>
<td align="right" valign="top">CEP50 [m]</td>
<td align="center" valign="top">2.19</td>
<td align="center" valign="top">2.47</td>
<td align="center" valign="top">1.24</td>
<td align="center" valign="top">0.57</td>
<td align="center" valign="top">0.55</td>
<td align="center" valign="top">1.89</td>
<td align="center" valign="top">76.4</td></tr>
<tr>
<td align="right" valign="top">CEP90 [m]</td>
<td align="center" valign="top">6.54</td>
<td align="center" valign="top">6.79</td>
<td align="center" valign="top">3.39</td>
<td align="center" valign="top">2.03</td>
<td align="center" valign="top">2.13</td>
<td align="center" valign="top">6.92</td>
<td align="center" valign="top">182</td></tr>
<tr>
<td align="right" valign="top">CEP95 [m]</td>
<td align="center" valign="top">10.7</td>
<td align="center" valign="top">12.0</td>
<td align="center" valign="top">4.28</td>
<td align="center" valign="top">2.90</td>
<td align="center" valign="top">3.19</td>
<td align="center" valign="top">9.09</td>
<td align="center" valign="top">210</td></tr>
<tr>
<td align="right" valign="top">CEP99 [m]</td>
<td align="center" valign="top">23.3</td>
<td align="center" valign="top">18.2</td>
<td align="center" valign="top">6.41</td>
<td align="center" valign="top">4.50</td>
<td align="center" valign="top">7.02</td>
<td align="center" valign="top">16.0</td>
<td align="center" valign="top">261</td></tr>
<tr>
<td align="right" valign="top">max(<italic>r<sub>e</sub></italic>) [m]</td>
<td align="center" valign="top">30.6</td>
<td align="center" valign="top">20.6</td>
<td align="center" valign="top">8.64</td>
<td align="center" valign="top">5.24</td>
<td align="center" valign="top">12.8</td>
<td align="center" valign="top">25.5</td>
<td align="center" valign="top">265</td></tr>
<tr>
<td align="right" valign="top">Figure</td>
<td align="center" valign="top"><xref ref-type="fig" rid="f16-sensors-12-06764">16</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f17-sensors-12-06764">17</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f18-sensors-12-06764">18</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f19-sensors-12-06764">19</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f20-sensors-12-06764">20</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f21-sensors-12-06764">21</xref></td>
<td align="center" valign="top"><xref ref-type="fig" rid="f22-sensors-12-06764">22</xref></td></tr></tbody></table></table-wrap></sec></back></article>
