<?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/s100403655</article-id>
<article-id pub-id-type="publisher-id">sensors-10-03655</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Localization of Mobile Robots Using Odometry and an External Vision Sensor</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Pizarro</surname><given-names>Daniel</given-names></name><xref ref-type="corresp" rid="c1-sensors-10-03655"><sup>★</sup></xref></contrib>
<contrib contrib-type="author">
<name><surname>Mazo</surname><given-names>Manuel</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Santiso</surname><given-names>Enrique</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Marron</surname><given-names>Marta</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Jimenez</surname><given-names>David</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Cobreces</surname><given-names>Santiago</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Losada</surname><given-names>Cristina</given-names></name></contrib>
<aff id="af1-sensors-10-03655">Department of Electronics, University of Alcala, NII km 33,600, Alcala de Henares, Spain; E-Mails: <email>mazo@depeca.uah.es</email> (M.M.); <email>santiso@depeca.uah.es</email> (E.S.); <email>marta@depeca.uah.es</email> (M.M.); <email>david.jimenez@depeca.uah.es</email> (D.J.); <email>cobreces@depeca.uah.es</email> (S.C.); <email>losada@depeca.uah.es</email> (C.L.)</aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-10-03655">
<label>★</label> Author to whom correspondence should be addressed: E-Mail: <email>pizarro@depeca.uah.es</email>; Tel.: +34-918-856-582. Fax: +34-918-856-591.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2010</year></pub-date>
<pub-date pub-type="epub">
<day>13</day>
<month>4</month>
<year>2010</year></pub-date>
<volume>10</volume>
<issue>4</issue>
<fpage>3655</fpage>
<lpage>3680</lpage>
<history>
<date date-type="received">
<day>15</day>
<month>1</month>
<year>2010</year></date>
<date date-type="rev-recd">
<day>3</day>
<month>3</month>
<year>2010</year></date>
<date date-type="accepted">
<day>31</day>
<month>3</month>
<year>2010</year></date></history>
<permissions>
<copyright-statement>© 2010 by the authors; licensee Molecular Diversity Preservation International, Basel, Switzerland.</copyright-statement>
<copyright-year>2010</copyright-year>
<license>
<p>This article is an open-access article distributed under the terms and conditions of the Creative Commons Attribution license <ext-link xlink:href="http://creativecommons.org/licenses/by/3.0/" ext-link-type="uri">http://creativecommons.org/licenses/by/3.0/</ext-link>.</p></license></permissions>
<abstract>
<p>This paper presents a sensor system for robot localization based on the information obtained from a single camera attached in a fixed place external to the robot. Our approach firstly obtains the 3D geometrical model of the robot based on the projection of its natural appearance in the camera while the robot performs an initialization trajectory. This paper proposes a structure-from-motion solution that uses the odometry sensors inside the robot as a metric reference. Secondly, an online localization method based on a sequential Bayesian inference is proposed, which uses the geometrical model of the robot as a link between image measurements and pose estimation. The online approach is resistant to hard occlusions and the experimental setup proposed in this paper shows its effectiveness in real situations. The proposed approach has many applications in both the industrial and service robot fields.</p></abstract>
<kwd-group>
<kwd>robotics</kwd>
<kwd>vision sensor</kwd>
<kwd>intelligent spaces</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>This paper presents a sensor system composed of a single camera attached to a fixed position and orientation in a bounded environment (indoor workplace) which is observing a mobile robot. The aim of the sensor system is to obtain the orientation and position (<italic>i.e.</italic>, pose) of a mobile robot using both visual information retrieved by the camera and relative odometry readings obtained from the internal sensors of the robot. The camera acquisition and image processing tasks are executed in a specialized hardware, which also controls the behavior and internal sensors of the mobile robot through a wireless channel. The proposed schema allows the robot to perform complex tasks without requiring dedicated processing hardware on it. This approach is sustained in the Intelligent Space [<xref ref-type="bibr" rid="b1-sensors-10-03655">1</xref>] concept and it can be equally applied to multiple scenarios, specially both in the industrial field (e.g., automatic crane positioning, autonomous car parking) and in the service fields (e.g., wheelchair positioning in medical environments or autonomous driving of mobile platforms). The single camera solution presented in this paper allows to cover large areas with less cameras compared to multiple camera configurations where overlapped areas are mandatory. This feature reduces the cost and improves the reliability of the intelligent space philosophy.</p>
<p>In this paper, we suppose that the camera is correctly calibrated and thus the parameters governing the projection model of the camera are previously known. To connect the pose of the robot with information found in the image plane of the camera, we propose to obtain a 3D geometric model of the mobile robot. Such model is composed of several sparse points whose coordinates represent some well-localized points belonging to the physical structure of the robot. These points are determined by image measurements, called image features, which usually correspond to corner-like points due to texture changes or geometry changes such as 3D vertexes. Usually in industrial fields the image features are obtained by including some kind of artificial marker on the structure of the robot (infrared markers or color bands). These methods are very robust and can be used to recognize human activity and models with high degrees of freedom (AICON 3D online [<xref ref-type="bibr" rid="b2-sensors-10-03655">2</xref>] or ViconPeak online systems [<xref ref-type="bibr" rid="b3-sensors-10-03655">3</xref>]). However, in this paper we want to minimize the required “a priori” knowledge of the robot, so that it is not necessary to place artificial markers or beacons on it to detect its structure in the images.</p>
<p>Independent of the nature of the image features, the information obtained from a camera is naturally ambiguous and thus some sort of extra metric information are required in order to solve such ambiguity. In this work, we propose to use the odometry sensors inside the robot (<italic>i.e.</italic>, wheel velocities) to act as the metric reference.</p>
<p>The general diagram of the algorithm proposed in this paper is shown in <xref ref-type="fig" rid="f1-sensors-10-03655">Figure 1</xref>. It shows a clear division of the processes involved in obtaining the pose of the robot: first we denote as “Initialization of Pose and Geometry” to those processes necessary to start up the system, such as the 3D model of the robot and the initial pose it occupies. The initialization consists of a batch processing algorithm where the robot is commanded to follow a certain trajectory so that the camera is able to track some points of the robot’s structure under different viewpoints jointly with the recording of the odometry information. All this information is combined to give the 3D model of the robot and the initial pose it occupies.</p>
<p>Given the initialization information, the second group of processes, named “Sequential Localization”, provides the pose of the robot in a sequential manner. It is composed of a pose estimator, given odometry readings and a pose correction block which combines the estimation of the pose with image measurements to accurately give a coherent pose with the measurements. This algorithm operates entirely on-line and thus the pose is available at each time sample.</p>
<p>Both group of processes are supplied with two main sources of information:
<list list-type="order">
<list-item>
<p>Image measurements: they consist of the projection in the camera’s image plane of certain points of the robot’s 3D structure. The measurement process is in charge of searching coherent correspondences through images with different perspective changes due to the movement of the robot.</p></list-item>
<list-item>
<p>Motion estimation of the robot: The odometry sensors built on-board the robot supply the localization system with an accurate motion estimation in short trajectories but that is prone to accumulative errors in large ones.</p></list-item></list></p>
<sec>
<label>1.1.</label>
<title>Previous Works</title>
<p>Despite the inherent potential of using external cameras to localize robots, there are relative few attempts to solve it compared to the approach that consider the camera on-board the robot [<xref ref-type="bibr" rid="b4-sensors-10-03655">4</xref>, <xref ref-type="bibr" rid="b5-sensors-10-03655">5</xref>]. However, some examples of robot localization with cameras can be found in the literature, where the robot is equipped with artificial landmarks, either active [<xref ref-type="bibr" rid="b6-sensors-10-03655">6</xref>, <xref ref-type="bibr" rid="b7-sensors-10-03655">7</xref>] or passive ones [<xref ref-type="bibr" rid="b8-sensors-10-03655">8</xref>, <xref ref-type="bibr" rid="b9-sensors-10-03655">9</xref>]. In other works a model of the robot, either geometrical or of appearance [<xref ref-type="bibr" rid="b10-sensors-10-03655">10</xref>, <xref ref-type="bibr" rid="b11-sensors-10-03655">11</xref>], is learnt previously to the tracking task. In [<xref ref-type="bibr" rid="b12-sensors-10-03655">12</xref>, <xref ref-type="bibr" rid="b13-sensors-10-03655">13</xref>], the position of static and dynamic objects is obtained by multiple camera fusion inside an occupancy grid. An appearance model is used afterwards to ascertain which object is each robot. Despite the technique used for tracking, the common point of many of the proposals found in the topic comes from the fact that rich knowledge is obtained previously to the tracking, in a supervised task.</p>
<p>In this paper the localization of the robot is obtained in terms of its natural appearance. We propose a full metric and accurate system based on identifying natural features belonging to the geometric structure of the robot. On most natural objects we can find points whose image projection can be tracked in the image plane independently of the position the object occupies and based on local properties found in the image (<italic>i.e.</italic>, lines, corners or color blobs). Those points are considered natural markers, as they serve as reference points in the image plane that can be easily relate with their three-dimensional counterparts. The set of methods focused on tracking natural markers have become a very successful and deeply studied topic in the literature [<xref ref-type="bibr" rid="b14-sensors-10-03655">14</xref>, <xref ref-type="bibr" rid="b15-sensors-10-03655">15</xref>], as they represent the basic measurements of most of existing reconstruction methods.</p>
<p>Scene reconstruction from image measurements is a classic and mature discipline in the computer vision field. Among the wide amount of proposals it can be highlighted those grouped under the name “Bundle Adjustment” [<xref ref-type="bibr" rid="b16-sensors-10-03655">16</xref>, <xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>]. Their aim is essentially to estimate, jointly and optimally, the 3D structure of a scene and the camera parameters from a set of images taken under some kind of motion. (<italic>i.e.</italic>, it can be the camera that moves or equally some part of the scene w.r.t. the camera).</p>
<p>In general terms, Bundle Adjustment reconstruction methods are based in iterative optimization methods which try to minimize the image discrepancy between the measured positions of the 3D model and the expected ones using the last iteration solution. The discrepancy balances the contribution of the measurements into the final solution and plays an important role in this paper. Our main contribution is a redefinition of the discrepancy function using a Maximum Likelihood approach which takes into account the statistical distribution of the error. This distribution is especially affected by the odometry errors which are accumulative in long trajectories.</p>
<p>On the other hand, once a geometric model is obtained using a structure-from-motion approach, its pose with respect to a global coordinate origin can be easily retrieved by measuring the projection of the model in the image plane. This problem, commonly known as the Perspective n Point Problem (PnP), has received considerable attention in the literature, where some accurate solutions are found such as [<xref ref-type="bibr" rid="b18-sensors-10-03655">18</xref>] or the recent global solution proposed in [<xref ref-type="bibr" rid="b19-sensors-10-03655">19</xref>]. In this paper we instead follow a filtering approach, where not only image measurements but also last time pose information and odometry information are used to obtain the pose. This approach, which is based on the use of a Kalman Filter, is much more regular than solving the PnP problem at each time instant and will be described in this paper.</p>
<p>The paper is organized as follows. In Section 2. the notation and mathematical elements used in the paper are described. In Section 3. the description of the initialization algorithms is given. The online Kalman loop is explained in Section 4. and some results in a real environment are shown in Section 5. Conclusions are in Section 6.</p></sec></sec>
<sec>
<label>2.</label>
<title>Definitions and Notation</title>
<p>This section presents a description of the symbols and mathematical models used in the rest of the paper.</p>
<sec>
<label>2.1.</label>
<title>Robot and Image Measurements</title>
<p>The robot’s pose at time <italic>k</italic> is described by a vector <italic>X<sub>k</sub></italic>. We suppose that the robot’s motion lie on the plane <italic>z</italic> = 0 referred from the world coordinate origin <italic>O<sub>W</sub></italic> (See <xref ref-type="fig" rid="f2-sensors-10-03655">Figure 2</xref>). The pose vector <italic>X<sub>k</sub></italic> is described by 3 components (<italic>x<sub>k</sub>, y<sub>k</sub>, α<sub>k</sub></italic>), corresponding to two position coordinates <italic>x<sub>k</sub>, y<sub>k</sub></italic> and the rotation angle <italic>α<sub>k</sub></italic> in the <italic>z</italic> axis. The motion model <italic>X<sub>k</sub></italic> = <italic>g</italic>(<italic>X</italic><sub><italic>k</italic>−1</sub><italic>, U<sub>k</sub></italic>) defines the relationship between the current pose <italic>X<sub>k</sub></italic> with respect to the previous time one <italic>X</italic><sub><italic>k</italic>−1</sub> and the input <italic>U<sub>k</sub></italic> given by odometry sensors inside the robot. In our proposal the robot used is a differential wheeled platform and thus <italic>U<sub>k</sub></italic> = (<italic>Vl<sub>k</sub>,</italic> Ω<italic><sub>k</sub></italic>)<italic><sup>T</sup></italic>, where <italic>Vl<sub>k</sub></italic> and Ω<italic><sub>k</sub></italic> describe the linear and angular speed of the robot’s center of rotation (<italic>O<sub>R</sub></italic> in <xref ref-type="fig" rid="f2-sensors-10-03655">Figure 2</xref>) respectively. The motion model <italic>g</italic> is then very simple in function of the discretized linear speed <italic>Vl<sub>k</sub></italic> and the angular speed Ω<italic><sub>k</sub></italic>.</p>
<p>The robot’s geometry is composed of a sparse set of <italic>N</italic> 3D points 𝒨 = {<italic>M</italic><sup>1</sup>, ⋯, <italic>M<sup>N</sup></italic>} referred from the local coordinate origin <italic>O<sub>R</sub></italic> described by robot’s pose <italic>X<sub>k</sub></italic>. The points <italic>M<sup>i</sup></italic> are static in time due to robot’s rigidness, and thus, no temporal subindex is required for them. Function 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> uses actual pose <italic>X<sub>k</sub></italic> to express <italic>M<sup>i</sup></italic> in the global coordinate origin <italic>O<sub>W</sub></italic> that <italic>X<sub>k</sub></italic> is referred to (see <xref ref-type="fig" rid="f2-sensors-10-03655">Figure 2</xref>):
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mtext>cos</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mtd>
<mml:mtd>
<mml:mtext>sin</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>−</mml:mo>
<mml:mtext>sin</mml:mtext>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mtd>
<mml:mtd>
<mml:mi mathvariant="italic">cos</mml:mi>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></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:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mi>T</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The augmented vector 
<inline-formula>
<mml:math>
<mml:msubsup>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:math></inline-formula>, which is the state vector of the system, is defined as the concatenation in one column vector of both the pose <italic>X<sub>k</sub></italic> and the set of static structure points 𝒨:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi>M</mml:mi>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mo>⋯</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi>M</mml:mi>
<mml:mi>N</mml:mi></mml:msup>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>An augmented motion model <italic>g<sup>a</sup></italic> is defined as the transition of the state vector:
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mi>X</mml:mi>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>g</mml:mi>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>U</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>U</mml:mi>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mo>⋯</mml:mo>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>It must be noticed that the motion model <italic>g<sup>a</sup></italic> leaves the structure points contained in the state vector untouched, as we suppose that the object is rigid.</p>
<p>The whole set of measurements obtained in the image plane of the camera at time <italic>k</italic> is denoted by <italic>Y<sub>k</sub></italic>. Each measurement inside <italic>Y<sub>k</sub></italic> is defined by a two-dimensional vector 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, describing the projection of each point inside 𝒨 in the image plane, where <italic>i</italic> stands for the correspondence with the point <italic>M<sup>i</sup></italic>. It must be remarked that, in general, <italic>Y<sub>k</sub></italic> does not contain the image projection of every point in the set <italic>M</italic> as some of them can be occluded depending on the situation.</p>
<p>The camera is modeled with a zero-skew “pin-hole” model (see [<xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>] for more details), with the following matrix <italic>K<sub>c</sub></italic> containing the intrinsic parameters:
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>u</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The extrinsic parameters of the camera (<italic>i.e.</italic>, position and orientation of the camera w.r.t. <italic>O<sub>W</sub></italic>) are described using the rigid transformation <italic>R<sub>c</sub>, T<sub>c</sub></italic> (<italic>i.e.</italic>, rotation matrix and translation vector). The matrix <italic>R<sub>c</sub></italic> is defined by three Euler angles <italic>α<sub>c</sub>, β<sub>c</sub>, γ<sub>c</sub></italic>. The vector <italic>T<sub>c</sub></italic> can be decomposed into its three spatial coordinates <italic>T<sub>x</sub>, T<sub>y</sub>, T<sub>z</sub></italic>. All calibration parameters can be grouped inside vector <italic>P</italic>:
<disp-formula id="FD6">
<label>(6)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>u</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>β</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>z</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>Given a single measurement 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> from the set <italic>Y<sub>k</sub></italic>, its 2D coordinates can be expressed using the “pin-hole” model and the aforementioned calibration parameters:
<disp-formula id="FD7">
<label>(7)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> represents a projective scale factor that can be obtained so that the third element of the right part of <xref ref-type="disp-formula" rid="FD7">Equation (7)</xref> is equal to one. It is important to remark that the projection model, although simple, depends in a non-linear fashion w.r.t. <italic>M<sup>i</sup></italic> due to the factor 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. For compactness the projection model of <xref ref-type="disp-formula" rid="FD7">Equation (7)</xref> can be described as the function <italic>h</italic>:
<disp-formula id="FD8">
<label>(8)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>h</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>In the same way, the whole vector <italic>Y<sub>k</sub></italic> can be expressed with the following function:
<disp-formula id="FD9">
<label>(9)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula></p></sec>
<sec>
<label>2.2.</label>
<title>Random Processes</title>
<p>This paper explicitly deals with uncertainties by describing every process as a random variable with a Gaussian distribution whose covariance matrix stands for its uncertainty. The random processes are expressed in bold typography (<italic>i.e.</italic>, <bold>X<sub>k</sub></bold> is the random process describing the pose and <italic>X<sub>k</sub></italic> is a realization of it) and each of them are defined by a mean vector and a covariance matrix. Therefore 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">k</mml:mi>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is defined by its mean 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and covariance 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> (or simplifying 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>𝒩</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>). The following processes are considered in the paper:
<list list-type="bullet">
<list-item>
<p>Pose <bold>X<sub>k</sub></bold> = 𝒩(<italic>X̂<sub>k</sub></italic>, ∑<italic><sub>k</sub></italic>) and 3D model <bold>M</bold> = 𝒩(<italic>M̂</italic>, ∑<italic><sub>M</sub></italic>) processes. Its joint distribution is encoded in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">k</mml:mi>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>𝒩</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>.</p></list-item>
<list-item>
<p>Measurement process <bold>Y<sub>k</sub></bold> = 𝒩(<italic>Ŷ<sub>k</sub>,</italic> ∑<sub><italic>Y</italic><sub><italic>k</italic></sub></sub>), whose uncertainty comes from errors in image detection.</p></list-item>
<list-item>
<p>Odometry input values <bold>U<sub>k</sub></bold> = 𝒩(<italic>Û<sub>k</sub></italic>, ∑<sub><italic>U</italic><sub><italic>k</italic></sub></sub>), which are polluted by random deviations.</p></list-item></list></p></sec></sec>
<sec>
<label>3.</label>
<title>Initialization Process</title>
<p>The initialization step consists of obtaining the initial pose the robot occupies and a 3D model of its structure using visual features (<italic>i.e.</italic>, to obtain an initial guess of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>). The importance of this step is crucial, as the robot’s geometric model serves as the necessary link between robot’s pose and image measurements. The initialization allows to use afterwards the online approach presented in Section 4.</p>
<p>A delayed initialization approach is proposed, based on collecting image measurements and the corresponding odometry position estimation along a sequence of time (<italic>i.e.</italic>, <italic>k</italic> = 1, ⋯, <italic>K</italic>). After taking a sufficient amount of measurements of the object in motion, an iterative optimization method is used to obtain the best solution for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> according to a cost criterion. The odometry readings are used in this step as metric information, which allows to remove the natural ambiguity produced by measurements from a single camera. The main problem of using odometry as a metric reference for reconstruction comes from the accumulative error it presents, which is a very well-known problem in dead-reckoning tasks.</p>
<p>The initialization algorithm consists of a Maximum Likelihood (M.L.) estimation of the vector 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, which does not estimate the initialization value itself but its equivalent Gaussian distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>0</mml:mn></mml:mstyle>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mi>𝒩</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> by using a “Bundle Adjustment” method (See <xref ref-type="fig" rid="f3-sensors-10-03655">Figure 3</xref>). The M.L. approach (see [<xref ref-type="bibr" rid="b16-sensors-10-03655">16</xref>, <xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>] f or more details) allows to properly tackle the growing drift present in the odometry estimation by giving fair less importance or weight to those instants where the odometry is expected to be more uncertain.</p>
<p>In the following sections, the initialization algorithm is explained in detail.</p>
<sec>
<label>3.1.</label>
<title>Odometry Estimation</title>
<p>A set of odometry readings, <italic>U</italic><sub>1</sub>, ⋯, <italic>U<sub>K</sub></italic> are collected over a set of <italic>K</italic> consecutive time samples <italic>k</italic> = 1, ⋯, <italic>K</italic>, which corresponds to the initialization trajectory performed by the robot. Using a motion model <italic>g</italic> given initial position <italic>X</italic><sub>0</sub>, an estimation of the robot’s pose in the whole initialization sequence is obtained as follows:
<disp-formula id="FD10">
<label>(10)</label>
<mml:math display="block">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>0</mml:mn></mml:mstyle></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">U</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>2</mml:mn></mml:mstyle></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">U</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>2</mml:mn></mml:mstyle></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi>
<mml:mo>−</mml:mo>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">U</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>where we recall that <bold>X<sub>k</sub></bold> and <bold>U<sub>k</sub></bold> denote Gaussian processes. Using expression <xref ref-type="disp-formula" rid="FD10">(10)</xref>, and by propagating the statistical processes through function <italic>g</italic>, the joint distribution <italic>p</italic>(<italic>X</italic><sub>1</sub>, ⋯, <italic>X<sub>K</sub></italic>|<italic>X</italic><sub>0</sub>) can be obtained. The propagation of statistical processes through non-linear functions is in general a very complex task, as it requires to solve integral equations. However in this paper we will follow a first order approximation of the non-linear functions centered in the mean of the process (see [<xref ref-type="bibr" rid="b20-sensors-10-03655">20</xref>] for more details). Using this technique the Gaussian processes <bold>X<sub>k</sub></bold> and <bold>U<sub>k</sub></bold> can be iteratively propagated through function <italic>g</italic> at the cost of being an approximation. This paper shows that despite being an approximation this approach end in a good estimation of the initialization vector.</p>
<p>By denoting as <italic>X</italic> to the joint vector containing all poses 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, the joint distribution of all poses, given the initial state <italic>X</italic><sub>0</sub>, <italic>p</italic>(<italic>X</italic>|<italic>X</italic><sub>0</sub>) is approximated as Gaussian p.d.f. with mean <italic>X̂</italic> and covariance matrix ∑<italic><sub>X</sub></italic>.</p></sec>
<sec>
<label>3.2.</label>
<title>Image Measurements</title>
<p>In this step we describe how to collect the position in the image plane of different points from the robot’s structure during the initialization trajectory. We base our method in the work [<xref ref-type="bibr" rid="b15-sensors-10-03655">15</xref>] where the SIFT descriptor is introduced. The process used in the initialization is composed of two steps:
<list list-type="bullet">
<list-item>
<p>Feature-based background subtraction.</p>
<p>We describe the static background of the scene using a single image, from which a set of features, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>𝒡</mml:mi></mml:mrow>
<mml:mi>b</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>b</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> and its correspondent SIFT descriptors 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>𝒟</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">}</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> are obtained. The sets 𝒟<italic><sub>b</sub></italic> and 𝒡<italic><sub>b</sub></italic> are our feature-based background model.</p>
<p>Given an input image, namely <italic>I<sub>k</sub></italic>, we find the sets 𝒟<italic><sub>k</sub></italic> and 𝒡<italic><sub>k</sub></italic>. We consider that a feature 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒡</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒟</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> belongs to the background if we can find a feature 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒡</mml:mi></mml:mrow>
<mml:mi>b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi>j</mml:mi></mml:msubsup>
<mml:mo>∈</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>𝒟</mml:mi></mml:mrow>
<mml:mi>b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> such that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi>j</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>&lt;</mml:mo>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>max</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi>j</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>&lt;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>max</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:math></inline-formula>. This method although simple shows to be very effective and robust in real environments (See <xref ref-type="fig" rid="f4-sensors-10-03655">Figure 4</xref>).</p></list-item>
<list-item>
<p>Supervised tracking algorithm.</p>
<p>Given the first image of the initialization trajectory, namely <italic>I</italic><sub>1</sub>, we obtain the set of <italic>N</italic> features 𝒡<sub>1</sub>, once they are cleaned by the aforementioned background subtraction method. We propose a method to track them in the whole initialization trajectory.</p>
<p>By only using SIFT descriptors and its tracking in consecutive frames does not produce stable tracks, specially when dealing with highly irregular objects where many of the features are due to corners. We thus propose to use a classical feature tracking approach based on the Kanade–Lucas–Tomasi (KLT) algorithm [<xref ref-type="bibr" rid="b14-sensors-10-03655">14</xref>]. To avoid degeneracy in the tracks, which is a very common problem in those kind of trackers, we use the SIFT descriptors to remove those segments of the tracks that clearly do not correspond to the feature tracked. This can be done easily by checking distance between the descriptors in the track. The threshold used must be chosen experimentally so that it does not eliminate useful parts of the tracks. In <xref ref-type="fig" rid="f5-sensors-10-03655">Figure 5a</xref> we can see the tracks obtained by the KLT tracker without degeneracy supervision. In <xref ref-type="fig" rid="f5-sensors-10-03655">Figure 5b</xref> the automatically removed segments are displayed.</p></list-item></list></p></sec>
<sec>
<label>3.3.</label>
<title>Likelihood Function</title>
<p>Using the feature-based algorithm proposed before a set of measurements in the whole trajectory, <italic>Y</italic><sub>1</sub>, ⋯, <italic>Y<sub>K</sub></italic>, is obtained, where each vector <italic>Y<sub>k</sub></italic> contains the projection of <italic>N</italic> points from robot’s structure at time sample <italic>k</italic>. The set of <italic>N</italic> points, <italic>M</italic><sup>1</sup><italic>,</italic> ⋯, <italic>M<sup>N</sup></italic>, jointly with the initial pose <italic>X</italic><sub>0</sub>, represent the initialization unknowns. As the robot’s motion does not depend of its structure, the following statistical independence is true:
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>If all trajectories are packed into vector <italic>Y<sub>L</sub></italic>, the following function put in relation <italic>Y<sub>L</sub></italic> with the distribution of expression <xref ref-type="disp-formula" rid="FD11">(11)</xref>:
<disp-formula id="FD12">
<label>(12)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Y</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">L</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Y</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Y</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">V</mml:mi></mml:mrow>
<mml:mstyle mathvariant="bold">
<mml:mn>1</mml:mn></mml:mstyle></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mi>P</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">V</mml:mi></mml:mrow>
<mml:mi mathvariant="bold">K</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <bold>V<sub>k</sub></bold> represents the uncertainty in image detection. Using distribution showed in <xref ref-type="disp-formula" rid="FD11">(11)</xref>, and propagating statistics through function <xref ref-type="disp-formula" rid="FD12">(12)</xref>, the following likelihood distribution is obtained:
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>The likelihood function <xref ref-type="disp-formula" rid="FD13">(13)</xref> is represented by a Gaussian distribution using a first order approximation of <xref ref-type="disp-formula" rid="FD12">(12)</xref>. It is thus defined by a mean <italic>Ŷ<sub>L</sub></italic> and a covariance matrix ∑<italic><sub>L</sub></italic>:
<disp-formula id="FD14">
<label>(14)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">Σ</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow></mml:msqrt>
<mml:msup>
<mml:mrow>
<mml:mn>2</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi></mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">Σ</mml:mi></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula></p></sec>
<sec>
<label>3.4.</label>
<title>Maximum Likelihood Approach</title>
<p>The likelihood function <xref ref-type="disp-formula" rid="FD14">(14)</xref>, parametrized by its covariance matrix ∑<italic><sub>L</sub></italic> and its mean <italic>Ŷ<sub>L</sub></italic>, is dependent of the conditional parameters and unknown values 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>
<p>The “Maximum Likelihood” estimation consists of finding the values for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> that maximize the likelihood function:
<disp-formula id="FD15">
<label>(15)</label>
<mml:math display="block">
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>max</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow></mml:munder>
<mml:mo> </mml:mo>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>In its Gaussian approximation and by taking logarithms, it is converted into the following minimization problem:
<disp-formula id="FD16">
<label>(16)</label>
<mml:math display="block">
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow></mml:munder>
<mml:mo> </mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">Σ</mml:mi></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>Y<sub>L</sub></italic> is the realization of the process (<italic>i.e.</italic>, the set of measurements from the image) and <italic>Ŷ<sub>L</sub></italic> are the expected measurements given a value of the parameters <italic>X</italic><sub>0</sub><italic>, M</italic><sup>1</sup><italic>,</italic> ⋯, <italic>M<sup>N</sup></italic>.</p>
<p>The configuration of ∑<italic><sub>L</sub></italic> is ruled by the expected uncertainty in the measurements and the statistical relation between them. Usually all cross-correlated terms of ∑<italic><sub>L</sub></italic> are non-zero, which has an important effect in the sparsity of the Hessian used inside the optimization algorithm and consequently in the computational complexity of the problem (see [<xref ref-type="bibr" rid="b21-sensors-10-03655">21</xref>] for more details).</p>
<p>The covariance matrix ∑<italic><sub>L</sub></italic> can be approximated assuming either independence between time samples (discarding cross-correlation terms between time indexes) or total independence between time and each measurement (discarding all cross-correlation terms except the 2×2 boxes belonging to a single measurement). In <xref ref-type="table" rid="t1-sensors-10-03655">Table 1</xref>, the different cost functions are shown depending on the discarded terms of ∑<italic><sub>L</sub></italic>. The different approximations of ∑<italic><sub>L</sub></italic> have a direct impact in the accuracy and the reconstruction error, and the results will be shown in Section 5.</p>
<p>Intuitively, if ∑<italic><sub>L</sub></italic> results to be a identity matrix, the cost function is reduced to a simple image residual minimization extensively used in Bundle Adjustment techniques, where in principle all cost differences 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> have equal importance:
<disp-formula id="FD17">
<label>(17)</label>
<mml:math display="block">
<mml:mrow>
<mml:munder>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:munder>
<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>N</mml:mi></mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:munderover>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The result of minimizing <xref ref-type="disp-formula" rid="FD16">Equation (16)</xref> instead of the usual <xref ref-type="disp-formula" rid="FD17">(17)</xref> show significant improvements in the reconstruction error. In Section 5. a comparison is shown between the initialization accuracy under the different assumptions of the matrix ∑<italic><sub>L</sub></italic>, from its diagonal version to the complete correlated form. The minimum of <xref ref-type="disp-formula" rid="FD16">(16)</xref> is obtained using the Levenberg–Mardquardt [<xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>] iterative optimization method.</p>
<p>We suppose that during the measurement step there is a low probability of encountering outliers in the features. This argument can be very optimistic in some real configurations where more objects appear in the scene and produce occlusions or false matchings. For those cases, all cost functions presented in this section can be modified to be robust against outliers by using M-Estimators. We refer the reader to [<xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>] for more details.</p></sec>
<sec>
<label>3.5.</label>
<title>Initialization before Optimization</title>
<p>The use of an iterative optimization method for obtaining the minimum of <xref ref-type="disp-formula" rid="FD16">(16)</xref> requires a setup value from which to start iterating. An initial estimation of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> close to its correct value reduces the probability to fall in a local extrema of the cost function.</p>
<p>The method proposed in this paper to give an initial value for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> consists of a non-iterative and exact method, which gives directly an accurate solution for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> in absence of noise in odometry values. This method is based on the assumption that the robot moves in a plane and thus only the angle over its <italic>Z</italic> axis is needed. As explained below, this assumption allows to solve the problem with a rank deficient Linear Least Squares approximation, which is solved using the Singular Value Decomposition of the system’s matrix and imposing a constraint that ensures a valid rotation. Its development is briefly introduced next.</p>
<p>For a point <italic>M<sup>i</sup></italic> of robot’s model and at time <italic>k</italic> of the initialization trajectory, the image measurement 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> results from the following projection:
<disp-formula id="FD18">
<label>(18)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where the matrix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and vector 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> represent the rotation and position of the robot in the floor plane given by the odometry supposing that 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mn>0</mml:mn>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mn>0</mml:mn></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>. The rotation matrix <italic>R</italic><sub>0</sub> and the offset <italic>T</italic><sub>0</sub> correspond with the initial pose 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> in form of rigid transformation:
<disp-formula id="FD19">
<label>(19)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="italic">cos</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">sin</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="italic">sin</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="italic">cos</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></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:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>R</italic><sub>0</sub> is a non-linear function of the orientation angle. The expression <xref ref-type="disp-formula" rid="FD18">(18)</xref> depends non-linearly of vector 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and so a new parametrization is proposed jointly with a transformation which removes the projective parameter 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>
<p>The point <italic>M<sup>i</sup></italic> is replaced by the rotated 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula>, removing thus the product between unknowns. The orientation angle in the pose is substituted by parameters <italic>a</italic> = <italic>cos</italic>(<italic>α</italic><sub>0</sub>) and <italic>b</italic> = <italic>sin</italic>(<italic>α</italic><sub>0</sub>), with the constraint <italic>a</italic><sup>2</sup> + <italic>b</italic><sup>2</sup> = 1. Using the new parameterization the expression <xref ref-type="disp-formula" rid="FD18">(18)</xref> is transformed in the following:
<disp-formula id="FD20">
<label>(20)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>λ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi>a</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mi>b</mml:mi></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>:
<disp-formula id="FD21">
<label>(21)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></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:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> y 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula> are the two first coordinates of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>
<p>The new unknown vector, which correspond to the new parametrization of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, is:
<disp-formula id="FD22">
<label>(22)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mi>a</mml:mi></mml:mtd>
<mml:mtd>
<mml:mi>b</mml:mi></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>The expression <xref ref-type="disp-formula" rid="FD20">(20)</xref> is decomposed in the following elements:
<disp-formula id="FD23">
<label>(23)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi mathvariant="normal">Δ</mml:mi></mml:msubsup></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> y 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are linear in terms of Φ but not in terms of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.
<disp-formula id="FD24">
<label>(24)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></disp-formula></p>
<p>The projective scale is removed from the transformation by using vector product properties:
<disp-formula id="FD25">
<label>(25)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></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:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn></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:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></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:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where two lineally independent equations are obtained for Φ.
<disp-formula id="FD26">
<label>(26)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtable columnalign="left">
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>0</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<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:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr columnalign="left">
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Using all measurements inside <italic>Y<sub>L</sub></italic>, a lineal system of equations is obtained in terms of Φ:
<disp-formula id="FD27">
<label>(27)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mi mathvariant="normal">Φ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>B</mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi>A</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi>B</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mo>⋮</mml:mo></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>b</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>K</mml:mi></mml:msub></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>It is straightforward to show that system of <xref ref-type="disp-formula" rid="FD27">(27)</xref> has a single-parameter family of solutions. If Φ<sub>0</sub> is a possible solution, then Φ<sub>0</sub> + <italic>ψ</italic>Δ is a solution for any <italic>ψ</italic> ∈ <italic>R</italic>, with Δ:
<disp-formula id="FD28">
<label>(28)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mi>a</mml:mi></mml:mtd>
<mml:mtd>
<mml:mi>b</mml:mi></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msup></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msup></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>In fact, if Δ is normalized, it matches up with the eigen-vector associated to the zero eigenvalue of matrix <italic>A<sup>T</sup> A</italic>.</p>
<p>Using the constraint that <italic>a</italic><sup>2</sup> + <italic>b</italic><sup>2</sup> = 1, and the singular value decomposition of matrix <italic>A</italic>, an exact solution of system <xref ref-type="disp-formula" rid="FD20">(20)</xref> is obtained.</p>
<p>Once Φ is available, the solution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is obtained by inverting the parametrization:
<disp-formula id="FD29">
<label>(29)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mtext>tan</mml:mtext></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>N</mml:mi></mml:msup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>This method, although exact, is prone to error due to odometry noise and does not benefit from the Maximum Likelihood metric. However it is valid as a method to give an initial value for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> before using the iterative approach.</p></sec>
<sec>
<label>3.6.</label>
<title>Degenerate Configurations</title>
<p>The kind of trajectory performed by the robot during initialization has direct influence in the solution of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. There are three kinds of movements that yields degenerate solutions:
<list list-type="bullet">
<list-item>
<p>Straight motion: there is no information about the center of rotation of the robot and thus the pose has multiple solutions.</p></list-item>
<list-item>
<p>Rotational motion around robot axis: the following one-parameter (<italic>i.e.</italic>, <italic>n</italic>) family of solutions gives identical measurements in the image plane:
<disp-formula id="FD30">
<label>(30)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>T</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>3</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:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mn>0</mml:mn>
<mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>T</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo stretchy="false">(</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:mrow>
<mml:mover accent="true">
<mml:mi>T</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>with 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>T</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>c</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>.
<disp-formula id="FD31">
<label>(31)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>n</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:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mn>0</mml:mn>
<mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>N</mml:mi></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p></list-item>
<list-item>
<p>Circular trajectory: under a purely circular trajectory the following one-parameter family of initialization vectors gives identical measurements in the image plane:
<disp-formula id="FD32">
<label>(32)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mn>0</mml:mn>
<mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>n</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi></mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mi>c</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD33">
<label>(33)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>n</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:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mn>0</mml:mn>
<mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi>
<mml:mn>1</mml:mn></mml:msubsup></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mo>⋯</mml:mo></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>n</mml:mi></mml:msub>
<mml:mi>N</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p></list-item></list></p>
<p>In practical cases it has been proved to be effective enough to combine straight trajectories with circular motion to avoid degeneracies in the solution of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p></sec>
<sec>
<label>3.7.</label>
<title>Obtaining the Gaussian Equivalent of the Solution</title>
<p>Once the minimum of <xref ref-type="disp-formula" rid="FD16">(16)</xref> is reached we suppose that the resulting value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is the mean of the distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">X</mml:mi></mml:mrow>
<mml:mstyle fontweight="bold" fontstyle="normal">
<mml:mn>0</mml:mn></mml:mstyle>
<mml:mi mathvariant="bold">a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. This section describes how to also obtain the covariance matrix.</p>
<p>The covariance matrix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> of the optimized parameters is easily obtained by using a local approximation of the term <italic>Y<sub>L</sub></italic> − <italic>Ŷ<sub>L</sub></italic> in the vicinity of the minimum 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> using the following expression:
<disp-formula id="FD34">
<label>(34)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></disp-formula>where <italic>J</italic> is the Jacobian matrix of <italic>Ŷ</italic> with respect to parameters 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. The Jacobian is available from the optimization method, in which is used to compute the iteration steps.</p></sec></sec>
<sec>
<label>4.</label>
<title>Online Robot Localization</title>
<p>In this section the solution to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> given the last pose information is derived. The fact that last frame information is available and the assumption of soft motion between frames allows to greatly simplify the problem.</p>
<p>A special emphasis is given to the fact that any process handled by the system is considered a random entity, in fact a Gaussian distribution defined at each case by its mean vector and covariance matrix. The problem of obtaining pose and structure, encoded in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> given image observations <italic>Y<sub>k</sub></italic> and the previous time estimation 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is viewed from the point of view of statistical inference, which means searching for the posterior probability distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>. That distribution gives the best estimation of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> given all the past knowledge available. In <xref ref-type="fig" rid="f6-sensors-10-03655">Figure 6</xref>, a brief overview of the online method is presented.</p>
<p>The online approach is divided into three steps:
<list list-type="bullet">
<list-item>
<p><bold>Estimation Step</bold>: using the previous pose distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>, defined by its mean 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and covariance matrix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>, and the motion model <italic>g<sup>a</sup></italic>, a Gaussian distribution which infers the next state is given 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>.</p></list-item>
<list-item>
<p><bold>Robust Layer</bold>: the correspondence between image measurements and the 3D model of the robot easily fails, so a number of wrongly correspondences or outliers pollute the measurement vector <italic>Y<sub>k</sub></italic>. Using a robust algorithm and the information contained in the state vector, the outliers are discarded before the next step.</p></list-item>
<list-item>
<p><bold>Correction Step</bold>: using an outlier-free measurement vector, we are confident to use all the information available to obtain the target posterior distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></p></list-item></list></p>
<p>In all three steps it is required to propagate statistic processes over non-linear functions (<italic>f</italic> and <italic>h</italic>). As was stated in the previous section we show how to face the problem using first order expansions as it offers more compactness and is more readable. As a consequence the “Estimation” and “Correction” steps are solved using the so called Extended Kalman Filter (EKF) equations, which have been already implemented in problems of similar complexity such as visual Simultaneous Localization and Mapping (SLAM) [<xref ref-type="bibr" rid="b5-sensors-10-03655">5</xref>].</p>
<sec>
<label>4.1.</label>
<title>Estimation Step</title>
<p>The estimation step uses the motion models available to infer the next pose of the robot which implies an increment in uncertainty. Starting from the last pose distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>N</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>, the motion model <italic>g<sup>a</sup></italic> and the noise included in odometry values, the following update is obtained:
<disp-formula id="FD35">
<label>(35)</label>
<mml:math display="block">
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>g</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>U</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>U</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>W</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>U</mml:mi></mml:msub>
<mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>where 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> are the mean and covariance matrix of distribution:
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo stretchy="false">|</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The matrices <italic>J<sub>X</sub></italic> and <italic>J<sub>U</sub></italic> are the first derivatives of the function <italic>g<sup>a</sup></italic> with respect to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and <italic>U<sub>k</sub></italic> respectively. Usually <italic>J<sub>X</sub></italic> in odometry systems is the identity, therefore, at this step, the covariance matrix 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> results to be bigger in terms of eigenvalues, which means uncertainty.</p></sec>
<sec>
<label>4.2.</label>
<title>Correction Step</title>
<p>The correction step removes the added uncertainty in the estimation by using image measurements. It passes from the distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> to the target distribution 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>⋯</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow></mml:mrow></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>, which includes the last measurement.</p>
<p>Using the estimation shown in <xref ref-type="disp-formula" rid="FD35">(35)</xref>, and knowing the correspondence between measurements with the camera and structure point of the state vector, the estimated measurement is given:
<disp-formula id="FD36">
<label>(36)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD37">
<label>(37)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>T</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>h</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>V</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD38">
<label>(38)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mi>Y</mml:mi></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi></mml:mrow>
<mml:mi>h</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula>where <italic>J<sub>h</sub></italic> is the Jacobian matrix of the function <italic>h<sup>a</sup></italic> with respect to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and ∑<italic><sub>V</sub></italic> is block diagonal matrix with ∑<italic><sub>v</sub></italic> on each block. Function <italic>h<sup>a</sup></italic> performs the projection in the image plane of the camera of all visible points that form up the measurement vector <italic>Y<sub>k</sub></italic>. The correction step itself is a linear correction of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> by means of the Kalman gain <italic>K<sub>G</sub></italic>:
<disp-formula id="FD39">
<label>(39)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>G</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mi>Y</mml:mi></mml:mrow></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD40">
<label>(40)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>G</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD41">
<label>(41)</label>
<mml:math display="block">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi></mml:mrow>
<mml:mi>G</mml:mi></mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>a</mml:mi></mml:msup>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msubsup></mml:mrow></mml:math></disp-formula></p>
<p>As it is stated in <xref ref-type="disp-formula" rid="FD41">(41)</xref> the resulting 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> is reduced compared to 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> which means that after the correction step, the uncertainty is “smaller”.</p></sec>
<sec>
<label>4.3.</label>
<title>Robust Layer</title>
<p>The robust layer has the objective of removing bad measurements from <italic>Y<sub>k</sub></italic> to avoid inconsistent updates of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> in the correction step. In this paper we propose to include the Random Sample Consensus (RANSAC) algorithm [<xref ref-type="bibr" rid="b22-sensors-10-03655">22</xref>] between the estimation and correction step of the filter. The general idea is to found among the measured data <italic>Y<sub>k</sub></italic> a set which agrees in the pose <italic>X<sub>k</sub></italic>, using the 3D model obtained in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p>
<p>The interest of applying RANSAC in a sequential update approach resides on several reasons: firstly it allows to efficiently discard outliers from <italic>Y<sub>k</sub></italic> preventing algorithm’s degeneracy, which happens even if the motion model is accurate. Secondly, compared to online robust approaches, where a robust cost function is optimized, RANSAC allows not to break the Kalman filter approach, as it only cleans the measurement vector of outliers. Furthermore we have observed experimentally that the RANSAC algorithm can be very fast between iterations, as only a few outliers are inside the data. (We use the RANSAC implementation described in [<xref ref-type="bibr" rid="b17-sensors-10-03655">17</xref>], which implements a dynamical computation of the outlier probability).</p>
<p>The RANSAC method proposed in the commented framework obtains the consensus pose <italic>X<sub>k</sub></italic> from the set of measurements <italic>Y<sub>k</sub></italic> and the 3D model available in 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> using the algorithm presented in [<xref ref-type="bibr" rid="b18-sensors-10-03655">18</xref>]. For a robot moving in a plane, as it is the case with the mobile robot considered in this paper, it is enough to use a minimum of 2 correspondences between the model and the measurement which makes the RANSAC very fast for removing outliers.</p></sec>
<sec>
<label>4.4.</label>
<title>Image Measurements</title>
<p>Contrary to the initialization case, in this step we have an accurate prediction of the tracked points in the image plane at each time instant, namely vector <italic>Y</italic><sub><italic>k</italic>|<italic>k</italic>−1</sub>. Using such prediction we can easily match the 3D points in the state vector with measurements taken in a measurement set 𝒡<italic><sub>k</sub></italic>, using the SIFT detector applied to current image <italic>I<sub>k</sub></italic>. The matching is done in terms of distance in the image plane. Let 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> a feature inside vector <italic>Y</italic><sub><italic>k</italic>|<italic>k</italic>−1</sub> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> a candidate obtained using SIFT method. We conclude that they are matched if 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">|</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>j</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">|</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>M</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>&lt;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>τ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">max</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:math></inline-formula>, where ‖<italic><sub>M</sub></italic> states for the Mahalanobis distance using the covariance ∑<sub><italic>y</italic><sub><italic>k</italic>|<italic>k</italic>−1</sub></sub> computed from the matrix ∑<sub><italic>Y</italic><sub><italic>k</italic>|<italic>k</italic>−1</sub></sub>. The Mahalanobis distance allows to take into account the uncertainty predicted for 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> and also helps to select a threshold <italic>τ<sub>max</sub></italic> with a probabilistic criterion.</p></sec></sec>
<sec sec-type="results">
<label>5.</label>
<title>Results</title>
<p>This section describes the experimental setup developed to support the theoretical algorithms proposed in this paper. The experiments are divided in those performed over synthetic data and those run in a real implementation of the Intelligent Space in the University of Alcala (ISPACE-UAH) [<xref ref-type="bibr" rid="b23-sensors-10-03655">23</xref>]. In both kind of experiments the same camera parameters are used, derived from the real device used in its real placement. The single camera consists of a CCD based sensor with resolution of 640 × 480 pixels and a physical size of 1/2 (around 8 mm diagonal). The optical system is chosen with a focal length of 6.5 mm which gives around 45° of Field of View (FOV). The camera is connected to a processing and acquisition node through a IEEE1394 port, which support 15 fps in RGB image format acquisition. The intrinsic parameters are the following:
<disp-formula id="FD42">
<label>(42)</label>
<mml:math display="block">
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>u</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>636.7888</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>637.5610</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>313.3236</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>210.6894</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:math></disp-formula></p>
<p>The camera is placed with respect a global coordinate origin, as it is displayed in <xref ref-type="fig" rid="f7-sensors-10-03655">Figure 7</xref>. Camera calibration is performed previously to the localization task, using checkerboards as calibration patterns and the “Matlab Calibration Toolbox” implemented by [<xref ref-type="bibr" rid="b24-sensors-10-03655">24</xref>]. The distortion parameters of the camera are not considered in this case. As it can be shown in <xref ref-type="fig" rid="f7-sensors-10-03655">Figure 7</xref>, the camera is placed in oblique angle, which is specially useful for covering large areas with less FOV requirements (less distortion) compared to overhead configurations.</p>
<p>The robotic platform is connected to the same processing node controlling the camera by means of a wireless network. The camera acquisition and the odometry values obtained from the robot are synchronized. The control loop of the robot is internal, and it is prepared to follow position landmarks based on odometry feedback at faster sampling frequency than the image localization system (15 fps). Therefore, for each image acquisition cycle, the odometry system obtain several readings that are used by the internal loop control. In this paper the localization information provided by the cameras is not included in the control loop of the robot.</p>
<sec sec-type="methods">
<label>5.1.</label>
<title>Simulated Data</title>
<p>In this experiment the robot structure is simulated with a set of <italic>N</italic> = 10 points distributed randomly inside a cylinder with radius <italic>R</italic> = 0.5<italic>m</italic> and height <italic>h</italic> = 1<italic>m</italic>. The odometry system is supposed to have an uncertainty 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Vl</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">Ω</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:math></inline-formula> in linear and angular speed respectively. The initialization trajectory is shown in <xref ref-type="fig" rid="f8-sensors-10-03655">Figure 8</xref>. The image measurements are considered polluted with a Gaussian process of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>v</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>=</mml:mo>
<mml:mn>10</mml:mn></mml:mrow></mml:math></inline-formula>, independently of each measurement and image coordinate.</p>
<p>To compare the performance of the initialization method proposed in Section 3., the following error magnitudes are described:
<disp-formula id="FD43">
<label>(43)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ɛ</mml:mi></mml:mrow>
<mml:mi>M</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">gth</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:msqrt></mml:mrow>
<mml:mrow>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mo>∑</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">gth</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:mrow></mml:msqrt></mml:mrow></mml:mfrac>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>ɛ</mml:mi></mml:mrow>
<mml:mi>T</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">gth</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>ɛ</mml:mi></mml:mrow>
<mml:mi>α</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi> </mml:mi>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mn>0</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">gth</mml:mi></mml:mrow></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>T</italic><sub>0<italic>,gth</italic></sub><italic>, α</italic><sub>0<italic>,gth</italic></sub> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>M</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">gth</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula> correspond to the ground truth values of the initialization vector 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>. The following two experiments are proposed:
<list list-type="bullet">
<list-item>
<p><italic>Initialization errors in function of the odometry error</italic>. In this experiment the value of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">Vl</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> and 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">Ω</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula> are multiplied by the following multiplicative factor:
<disp-formula id="FD44">
<label>(44)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>ρ</mml:mi>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0.01</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.1</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.5</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>5</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>10</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The different errors of <xref ref-type="disp-formula" rid="FD43">Equation 43</xref> can be viewed in <xref ref-type="fig" rid="f9-sensors-10-03655">Figure 9a–c</xref> in terms of <italic>ρ</italic>. As it can be observed in the results, the M.C. (Complete correlated matrix ∑<italic><sub>L</sub></italic>) method outperforms the rest of approximations of ∑<italic><sub>L</sub></italic>, specially the full diagonal method M.I., which means that the statistical modelling proposed in this paper is effective.</p></list-item>
<list-item>
<p><italic>Initialization errors in function of the trajectory length</italic>. The trajectory used in the experiment and displayed in <xref ref-type="fig" rid="f8-sensors-10-03655">Figure 8</xref> is uniformly scaled by parameter <italic>ρ<sub>t</sub></italic>,
<disp-formula id="FD45">
<label>(45)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>t</mml:mi></mml:msub>
<mml:mo>∈</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mn>0.2</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.4</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.6</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>0.8</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>1</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>1.2</mml:mn></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mn>1.4</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>so that it can be guessed the relationship between trajectory length and initialization errors. In <xref ref-type="fig" rid="f10-sensors-10-03655">Figure 10</xref> the initialization errors are displayed versus <italic>ρ<sub>t</sub></italic>.</p>
<p>In light of the results shown in <xref ref-type="fig" rid="f10-sensors-10-03655">Figure 10a–c</xref>, the M.C. method is capable of reducing the error no matter how large is the trajectory chosen. However, in the rest of the approximations of ∑<italic><sub>L</sub></italic> there is an optimal point where the initialization errors are minimum. This results make sense, as without statistical modelling large trajectories contain accumulative errors which usually affects the final solution of 
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>X</mml:mi></mml:mrow>
<mml:mn>0</mml:mn>
<mml:mi>a</mml:mi></mml:msubsup></mml:mrow></mml:math></inline-formula>.</p></list-item></list></p>
<p>Both experiments clearly manifest that the complete matrix ∑<italic><sub>L</sub></italic>, with all its cross-correlated terms (M.C.), outperforms the rest of proposals, especially when it is compared to the case where ∑<italic><sub>L</sub></italic> is the identity matrix (M.I.), which means no statistical modeling.</p></sec>
<sec sec-type="methods">
<label>5.2.</label>
<title>Real Data</title>
<p>The initialization experiment proposed in this paper consists of a robot performing a short trajectory from which its 3D model and initial position is obtained using the results of Section 3.. We present a comparison of the initialization results using three different trajectories. Each one of the trajectories is displayed in <xref ref-type="fig" rid="f11-sensors-10-03655">Figure 11</xref> as a colored interval of the whole trajectory performed by the robot in the experiment.</p>
<p>The results of the initialization method on each of the 3 trajectories selected is shown in <xref ref-type="fig" rid="f12-sensors-10-03655">Figure 12</xref>. Depending on the trajectory used, the features viewed by the camera vary and thus the corresponding initialized 3D model. As it can be seen in <xref ref-type="fig" rid="f12-sensors-10-03655">Figure 12</xref>, the 3D model is accurate and its projection matches with points in the robot’s structure in all cases. It must be remarked that on each case, the position obtained as a result of the initialization (<italic>i.e.</italic>, <italic>X</italic><sub>0</sub>) corresponds to the first position of each interval.</p>
<p>The sequential algorithm is tested using the whole trajectory shown in <xref ref-type="fig" rid="f11-sensors-10-03655">Figure 11</xref>. The initial pose and 3D model are the result of the initialization results shown in <xref ref-type="fig" rid="f12-sensors-10-03655">Figure 12e,f</xref>. The estimated position of the robot, compared to a “ground truth” measurement, is presented in <xref ref-type="fig" rid="f13-sensors-10-03655">Figure 13a,b</xref>.</p>
<p>The ground truth is obtained by means of a manually measured 3D model of the robot. The model is composed of 3D points, that are easily recognized by a human observer. By manually clicking points of the 3D model in the image plane, and by using the method proposed in [<xref ref-type="bibr" rid="b18-sensors-10-03655">18</xref>], the reference pose of the robot is obtained in some of the frames of the experiment.</p>
<p>Another experiment is proposed to test the online algorithm with occlusions and a larger path followed by the robot. In <xref ref-type="fig" rid="f14-sensors-10-03655">Figure 14a</xref> it is shown the geometric placement of the camera and in <xref ref-type="fig" rid="f14-sensors-10-03655">Figure 14b</xref> it is shown the geometric model obtained during initialization.</p>
<p>The resulting localization error is shown in <xref ref-type="fig" rid="f15-sensors-10-03655">Figure 15b</xref>. In <xref ref-type="fig" rid="f16-sensors-10-03655">Figure 16</xref> it is shown several frames, indexed by the time sample number <italic>k</italic>, presenting hard occlusions between the camera and the robot without losing the tracking. The RANSAC method used in the Kalman loop avoid erroneous matches in the occluded parts of the object. Besides, in those frames with completely occluded features, only the estimation step of the Kalman filter is done, which is accurate enough for short periods of time.</p>
<p>In both sequential experiments the 3D model is composed of 8 to 10 points and no extra geometrical information is introduced in the state vector. As a future line of study a simultaneous reconstruction and localization approach can be adopted to introduce online extra 3D points in the state vector as the robot is tracked. A very similar approach is done in the Simultaneous Localization and Mapping (SLAM) problem, and some of their solutions [<xref ref-type="bibr" rid="b5-sensors-10-03655">5</xref>] are perfectly applicable to the problem assessed in this paper.</p></sec></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>This paper has presented a complete localization system for mobile robots inside intelligent environments with a single external camera. The objectives of obtaining the pose of the robot based on its natural appearance has been tackled in the paper using a reconstruction approach followed by a sequential localization approach.</p>
<p>The main contributions of this paper are summarized in the following list:
<list list-type="bullet">
<list-item>
<p>The initialization step provides a non-supervised method for obtaining the initial pose and structure of the robot previously to its sequential localization. A Maximum Likelihood cost function is proposed, which obtains the pose and geometry given a trajectory performed by the robot. The proposal of this paper allows to compensate for the odometry drift in the solution. Also an exact initialization method has been proposed and the degenerate configurations have been identified theoretically.</p></list-item>
<list-item>
<p>The online approach of the algorithm obtains the robot’s pose by using a sequential Bayesian inference approach. A robust step, based on the RANSAC algorithm, is proposed to clean the measurement vector out of outliers.</p></list-item>
<list-item>
<p>The results show that the proposed method is suitable to be used in real environments. The accuracy and non-drifting nature of the pose estimation have been also evaluated in a real environment.</p></list-item></list></p>
<p>The future research must be oriented to scale the problem for large configurations of non-overlapped cameras and multiple robots, where extra problems arise, such as to automatically detect the transitions between cameras and online refinement of the geometric models. It is important from our point of view to, in the future, combine the information given by the system proposed in this paper with information sensed onboard the robots using cameras. This approach allows to jointly build large maps attached to information given by the cameras, so that robots can be localized and controlled to perform a complex task.</p></sec></body>
<back>
<ack>
<p>This work was supported by the Ministry of Science and Technology under RESELAI project (references TIN2006-14896-C02-01) and also by the Spanish Ministry of Science and Innovation (MICINN) under the VISNU project (REF-TIN2009-08984).</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-10-03655"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>J.</given-names></name><name><surname>Hashimoto</surname><given-names>H.</given-names></name></person-group><article-title>Intelligent space concept and contents</article-title><source>Advanced Robotics</source><year>2002</year><volume>16</volume><fpage>265</fpage><lpage>280</lpage><pub-id pub-id-type="doi">10.1163/156855302760121936</pub-id></citation></ref>
<ref id="b2-sensors-10-03655"><label>2.</label><citation citation-type="web"><person-group person-group-type="author"><collab>Aicon 3D</collab></person-group><comment>Available online: <ext-link xlink:href="www.aicon.de" ext-link-type="uri">www.aicon.de</ext-link> (accessed January 2010).</comment></citation></ref>
<ref id="b3-sensors-10-03655"><label>3.</label><citation citation-type="web"><person-group person-group-type="author"><collab>ViconPeak</collab></person-group><comment>Available Online: <ext-link xlink:href="www.vicon.com" ext-link-type="uri">www.vicon.com</ext-link> (accessed January 2010).</comment></citation></ref>
<ref id="b4-sensors-10-03655"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Se</surname><given-names>S.</given-names></name><name><surname>Lowe</surname><given-names>D.</given-names></name><name><surname>Little</surname><given-names>J.</given-names></name></person-group><article-title>Vision-based global localization and mapping for mobile robots</article-title><source>IEEE Trans. Robotics Automat</source><year>2005</year><volume>21</volume><fpage>364</fpage><lpage>375</lpage><pub-id pub-id-type="doi">10.1109/TRO.2004.839228</pub-id></citation></ref>
<ref id="b5-sensors-10-03655"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Davison</surname><given-names>A.J.</given-names></name><name><surname>Murray</surname><given-names>D.W.</given-names></name></person-group><article-title>Simultaneous Localization and Map-Building Using Active Vision</article-title><source>IEEE Trans. Patt. Anal</source><year>2002</year><volume>24</volume><fpage>865</fpage><lpage>880</lpage><pub-id pub-id-type="doi">10.1109/TPAMI.2002.1017615</pub-id></citation></ref>
<ref id="b6-sensors-10-03655"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hada</surname><given-names>Y.</given-names></name><name><surname>Hemeldan</surname><given-names>E.</given-names></name><name><surname>Takase</surname><given-names>K.</given-names></name><name><surname>Gakuhari</surname><given-names>H.</given-names></name></person-group><article-title>Trajectory tracking control of a nonholonomic mobile robot using iGPS and odometry</article-title><conf-name>Proceedings of IEEE International Conference on Multisensor Fusion and Integration for Intelligent Systems</conf-name><conf-loc>Tokyo, Japan</conf-loc><year>2003</year><fpage>51</fpage><lpage>57</lpage></citation></ref>
<ref id="b7-sensors-10-03655"><label>7.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fernandez</surname><given-names>I.</given-names></name><name><surname>Mazo</surname><given-names>M.</given-names></name><name><surname>Lazaro</surname><given-names>J.</given-names></name><name><surname>Pizarro</surname><given-names>D.</given-names></name><name><surname>Santiso</surname><given-names>E.</given-names></name><name><surname>Martin</surname><given-names>P.</given-names></name><name><surname>Losada</surname><given-names>C.</given-names></name></person-group><article-title>Guidance of a mobile robot using an array of static cameras located in the environment</article-title><source>Auton. Robots</source><year>2007</year><volume>23</volume><fpage>305</fpage><lpage>324</lpage><pub-id pub-id-type="doi">10.1007/s10514-007-9049-4</pub-id></citation></ref>
<ref id="b8-sensors-10-03655"><label>8.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Morioka</surname><given-names>K.</given-names></name><name><surname>Mao</surname><given-names>X.</given-names></name><name><surname>Hashimoto</surname><given-names>H.</given-names></name></person-group><article-title>Global color model based object matching in the multi-camera environment</article-title><conf-name>Proceedings of IEEE /RSJ International Conference on Intelligent Robots and Systems</conf-name><conf-loc>Beijing, China</conf-loc><year>2006</year><fpage>2644</fpage><lpage>2649</lpage></citation></ref>
<ref id="b9-sensors-10-03655"><label>9.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Chung</surname><given-names>J.</given-names></name><name><surname>Kim</surname><given-names>N.</given-names></name><name><surname>Kim</surname><given-names>J.</given-names></name><name><surname>Park</surname><given-names>C.M.</given-names></name></person-group><article-title>POSTRACK: a low cost real-time motion tracking system for VR application</article-title><conf-name>Proceedings of Seventh International Conference on Virtual Systems and Multimedia</conf-name><conf-loc>Berkeley, CA, USA</conf-loc><year>2001</year><fpage>383</fpage><lpage>392</lpage></citation></ref>
<ref id="b10-sensors-10-03655"><label>10.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Sogo</surname><given-names>T.</given-names></name><name><surname>Ishiguro</surname><given-names>H.</given-names></name><name><surname>Ishida</surname><given-names>T.</given-names></name></person-group><article-title>Acquisition of qualitative spatial representation by visual observation</article-title><conf-name>Proceedings of International Joint Conference on Artificial Intelligence</conf-name><conf-loc>Stockholm, Sweden</conf-loc><year>1999</year></citation></ref>
<ref id="b11-sensors-10-03655"><label>11.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kruse</surname><given-names>E.</given-names></name><name><surname>Wahl</surname><given-names>F.M.</given-names></name></person-group><article-title>Camera-based observation of obstacle motions to derive statistical data for mobile robot motion planning</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation</conf-name><conf-loc>Leuven, Belgium</conf-loc><year>1998</year><fpage>662</fpage><lpage>667</lpage></citation></ref>
<ref id="b12-sensors-10-03655"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hoover</surname><given-names>A.</given-names></name><name><surname>Olsen</surname><given-names>B.D.</given-names></name></person-group><article-title>Sensor network perception for mobile robotics</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation</conf-name><conf-loc>Krakow, Poland</conf-loc><year>2000</year><fpage>342</fpage><lpage>347</lpage></citation></ref>
<ref id="b13-sensors-10-03655"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Steinhaus</surname><given-names>P.</given-names></name><name><surname>Ehrenmann</surname><given-names>M.</given-names></name><name><surname>Dillmann</surname><given-names>R.</given-names></name></person-group><article-title>MEPHISTO. A Modular and extensible path planning system using observation</article-title><source>Lect. Notes Comput. Sci</source><year>1999</year><volume>1542</volume><fpage>361</fpage><lpage>375</lpage></citation></ref>
<ref id="b14-sensors-10-03655"><label>14.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Shi</surname><given-names>J.</given-names></name><name><surname>Tomasi</surname><given-names>C.</given-names></name></person-group><article-title>Good features to track</article-title><conf-name>Proceedings of IEEE Conference on Computer Vision and Pattern Recognition</conf-name><conf-loc>Seattle, WA, USA</conf-loc><year>1994</year><fpage>593</fpage><lpage>600</lpage></citation></ref>
<ref id="b15-sensors-10-03655"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lowe</surname><given-names>D.G.</given-names></name></person-group><article-title>Distinctive image features from scale-invariant keypoints</article-title><source>Int. J. Comput. Vision</source><year>2004</year><volume>60</volume><fpage>91</fpage><lpage>110</lpage><pub-id pub-id-type="doi">10.1023/B:VISI.0000029664.99615.94</pub-id></citation></ref>
<ref id="b16-sensors-10-03655"><label>16.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Triggs</surname><given-names>B.</given-names></name><name><surname>McLauchlan</surname><given-names>P.</given-names></name><name><surname>Hartley</surname><given-names>R.</given-names></name><name><surname>Fitzgibbon</surname><given-names>A.</given-names></name></person-group><article-title>Bundle adjustment–a modern synthesis</article-title><source>Lect. Notes Comput. Sci</source><year>1999</year><volume>1883</volume><fpage>298</fpage><lpage>372</lpage></citation></ref>
<ref id="b17-sensors-10-03655"><label>17.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Hartley</surname><given-names>R.</given-names></name><name><surname>Zisserman</surname><given-names>A.</given-names></name></person-group><source>Multiple View Geometry in Computer Vision</source><edition>2nd ed.</edition><publisher-name>Cambridge University Press</publisher-name><publisher-loc>Cambridge, UK</publisher-loc><year>2003</year></citation></ref>
<ref id="b18-sensors-10-03655"><label>18.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Moreno-Noguer</surname><given-names>F.</given-names></name><name><surname>Lepetit</surname><given-names>V.</given-names></name><name><surname>Fua</surname><given-names>P.</given-names></name></person-group><article-title>Accurate non-iterative o (n) solution to the PnP problem</article-title><conf-name>Proceedings of IEEE International Conference on Computer Vision</conf-name><conf-loc>Rio de Janeiro, Brasil</conf-loc><year>2007</year><fpage>1</fpage><lpage>8</lpage></citation></ref>
<ref id="b19-sensors-10-03655"><label>19.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Schweighofer</surname><given-names>G.</given-names></name><name><surname>Pinz</surname><given-names>A.</given-names></name></person-group><article-title>Globally optimal o (n) solution to the pnp problem for general camera models</article-title><conf-name>Proceedings of BMVC</conf-name><conf-loc>Leeds, UK</conf-loc><year>2008</year></citation></ref>
<ref id="b20-sensors-10-03655"><label>20.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Van der Merwe</surname><given-names>R.</given-names></name><name><surname>de Freitas</surname><given-names>N.</given-names></name><name><surname>Doucet</surname><given-names>A.</given-names></name><name><surname>Wan</surname><given-names>E.</given-names></name></person-group><source>The Unscented Particle Filter</source><comment>Technical Report CUED/F-INFENG/TR380;</comment><publisher-name>Engineering Department of Cambridge University</publisher-name><publisher-loc>Cambridge, UK</publisher-loc><year>2000</year></citation></ref>
<ref id="b21-sensors-10-03655"><label>21.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Pizarro</surname><given-names>D.</given-names></name><name><surname>Mazo</surname><given-names>M.</given-names></name><name><surname>Santiso</surname><given-names>E.</given-names></name><name><surname>Hashimoto</surname><given-names>H.</given-names></name></person-group><article-title>Mobile robot geometry initialization from single camera</article-title><comment>Field and Service Robotics;</comment><publisher-name>Springer Tracts in Advanced Robotics</publisher-name><publisher-loc>Heidelberg, Germany</publisher-loc><year>2008</year><fpage>93</fpage><lpage>102</lpage></citation></ref>
<ref id="b22-sensors-10-03655"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fischler</surname><given-names>M.A.</given-names></name><name><surname>Bolles</surname><given-names>R.C.</given-names></name></person-group><article-title>Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography</article-title><source>Comm. Assoc. Comp. Match</source><year>1981</year><volume>24</volume><fpage>381</fpage><lpage>395</lpage></citation></ref>
<ref id="b23-sensors-10-03655"><label>23.</label><citation citation-type="web"><person-group person-group-type="author"><collab>GEINTRA</collab></person-group><article-title>Group of Electronic Engineering Applied to Intelligent Spaces and Transport</article-title><comment>Available online: <ext-link xlink:href="http://www.geintra-uah.org/en" ext-link-type="uri">http://www.geintra-uah.org/en</ext-link> (accessed December 2009).</comment></citation></ref>
<ref id="b24-sensors-10-03655"><label>24.</label><citation citation-type="web"><person-group person-group-type="author"><name><surname>Bouguet</surname><given-names>J.Y.</given-names></name></person-group><article-title>Matlab Calibration Toolbox</article-title><comment>Available online: <ext-link xlink:href="http://www.vision.caltech.edu/bouguetj/calib-doc" ext-link-type="uri">http://www.vision.caltech.edu/bouguetj/calib-doc</ext-link> (accessed December 2008).</comment></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Table</title>
<fig id="f1-sensors-10-03655" position="float">
<label>Figure 1.</label>
<caption>
<p>General diagram of the proposed localization system using a vision sensor and odometry readings.</p></caption>
<graphic xlink:href="sensors-10-03655f1.gif"/></fig>
<fig id="f2-sensors-10-03655" position="float">
<label>Figure 2.</label>
<caption>
<p>Spatial relationship between world’s coordinate origin <italic>O<sub>W</sub></italic>, robot’s coordinate origin <italic>O<sub>R</sub></italic> and camera’s coordinate origin <italic>O<sub>C</sub></italic>.</p></caption>
<graphic xlink:href="sensors-10-03655f2.gif"/></fig>
<fig id="f3-sensors-10-03655" position="float">
<label>Figure 3.</label>
<caption>
<p>Maximum likelihood initialization by means of reducing the residual of the expected measurements (red diamonds) and the measured image trajectories (blue circles).</p></caption>
<graphic xlink:href="sensors-10-03655f3.gif"/></fig>
<fig id="f4-sensors-10-03655" position="float">
<label>Figure 4.</label>
<caption>
<p>Feature-based background subtraction method.</p></caption>
<graphic xlink:href="sensors-10-03655f4.gif"/></fig>
<fig id="f5-sensors-10-03655" position="float">
<label>Figure 5.</label>
<caption>
<p>Comparison between the KLT tracker and the SIFT-supervised KLT version.</p></caption>
<graphic xlink:href="sensors-10-03655f5.gif"/></fig>
<fig id="f6-sensors-10-03655" position="float">
<label>Figure 6.</label>
<caption>
<p>Overview of the online algorithm.</p></caption>
<graphic xlink:href="sensors-10-03655f6.gif"/></fig>
<fig id="f7-sensors-10-03655" position="float">
<label>Figure 7.</label>
<caption>
<p>Geometric distribution of the camera and robot’s trajectory.</p></caption>
<graphic xlink:href="sensors-10-03655f7.gif"/></fig>
<fig id="f8-sensors-10-03655" position="float">
<label>Figure 8.</label>
<caption>
<p>Initialization trajectory of the robot in the experiment based on synthetic data.</p></caption>
<graphic xlink:href="sensors-10-03655f8.gif"/></fig>
<fig id="f9-sensors-10-03655" position="float">
<label>Figure 9.</label>
<caption>
<p>Experiment showing the different initialization errors in function of the amount of error in odometry readings.</p></caption>
<graphic xlink:href="sensors-10-03655f9.gif"/></fig>
<fig id="f10-sensors-10-03655" position="float">
<label>Figure 10.</label>
<caption>
<p>Experiment showing the different initialization errors in function of the trajectory length performed by the robot.</p></caption>
<graphic xlink:href="sensors-10-03655f10.gif"/></fig>
<fig id="f11-sensors-10-03655" position="float">
<label>Figure 11.</label>
<caption>
<p>Intervals of robot’s trajectory used for initialization.</p></caption>
<graphic xlink:href="sensors-10-03655f11.gif"/></fig>
<fig id="f12-sensors-10-03655" position="float">
<label>Figure 12.</label>
<caption>
<p>Single camera initialization results. On each row it is shown the resulting reconstruction and its projection in the image plane of the camera.</p></caption>
<graphic xlink:href="sensors-10-03655f12.gif"/></fig>
<fig id="f13-sensors-10-03655" position="float">
<label>Figure 13.</label>
<caption>
<p>Online robot’s pose compared with the “ground-truth”.</p></caption>
<graphic xlink:href="sensors-10-03655f13.gif"/></fig>
<fig id="f14-sensors-10-03655" position="float">
<label>Figure 14.</label>
<caption>
<p>Scene geometry and 3D model obtained during initialization.</p></caption>
<graphic xlink:href="sensors-10-03655f14.gif"/></fig>
<fig id="f15-sensors-10-03655" position="float">
<label>Figure 15.</label>
<caption>
<p>Localization results in an experiment with occlusions.</p></caption>
<graphic xlink:href="sensors-10-03655f15.gif"/></fig>
<fig id="f16-sensors-10-03655" position="float">
<label>Figure 16.</label>
<caption>
<p>Occlusions and its influence in the localization accuracy.</p></caption>
<graphic xlink:href="sensors-10-03655f16.gif"/></fig>
<table-wrap id="t1-sensors-10-03655" position="float">
<label>Table 1.</label>
<caption>
<p>Different cost functions depending on the approximations of ∑<italic><sub>L</sub></italic>.</p></caption>
<table frame="box" rules="all">
<thead>
<tr>
<th align="center" valign="middle">Type of Approximation</th>
<th align="center" valign="middle">cost function</th></tr></thead>
<tbody>
<tr>
<td align="center" valign="middle">Complete Correlated matrix ∑<italic><sub>L</sub></italic> (M.C.)</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>L</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi></mml:mrow></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>L</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="center" valign="middle">2<italic>N</italic> × 2<italic>N</italic> block approximation of ∑<italic><sub>L</sub></italic> (M.B.)</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>K</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>Y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="center" valign="middle">2 × 2 block approximation of ∑<italic><sub>L</sub></italic> (M.D.)</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>K</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></td></tr>
<tr>
<td align="center" valign="middle">Identity approximation of ∑<italic><sub>L</sub></italic> (M.I.)</td>
<td align="center" valign="middle">
<inline-formula>
<mml:math>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>K</mml:mi></mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mo>∑</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn></mml:mrow>
<mml:mi>N</mml:mi></mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup>
<mml:mo>−</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi>
<mml:mi>i</mml:mi></mml:msubsup></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula></td></tr></tbody></table></table-wrap></sec></back></article>
