<?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/s100301511</article-id>
<article-id pub-id-type="publisher-id">sensors-10-01511</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Concurrent Initialization for Bearing-Only SLAM</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Munguía</surname><given-names>Rodrigo</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Grau</surname><given-names>Antoni</given-names></name><xref ref-type="corresp" rid="c1-sensors-10-01511"><sup>*</sup></xref></contrib>
<aff id="af1-sensors-10-01511">Automatic Control Department, Technical University of Catalonia, c/ Pau Gargallo, 5 E-08028 Barcelona, Spain; E-Mail: <email>rodrigo.munguia@upc.edu</email></aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-10-01511">
<label>*</label>Author to whom correspondence should be addressed; E-Mail: <email>antoni.grau@upc.edu</email>; Tel.: +34-93-401-6975; Fax: +34-93-401-7045.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2010</year></pub-date>
<pub-date pub-type="epub">
<day>1</day>
<month>3</month>
<year>2010</year></pub-date>
<volume>10</volume>
<issue>3</issue>
<fpage>1511</fpage>
<lpage>1534</lpage>
<history>
<date date-type="received">
<day>18</day>
<month>12</month>
<year>2009</year></date>
<date date-type="rev-recd">
<day>15</day>
<month>2</month>
<year>2010</year></date>
<date date-type="accepted">
<day>24</day>
<month>2</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 (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>Simultaneous Localization and Mapping (SLAM) is perhaps the most fundamental problem to solve in robotics in order to build truly autonomous mobile robots. The sensors have a large impact on the algorithm used for SLAM. Early SLAM approaches focused on the use of range sensors as sonar rings or lasers. However, cameras have become more and more used, because they yield a lot of information and are well adapted for embedded systems: they are light, cheap and power saving. Unlike range sensors which provide range and angular information, a camera is a projective sensor which measures the bearing of images features. Therefore depth information (range) cannot be obtained in a single step. This fact has propitiated the emergence of a new family of SLAM algorithms: the Bearing-Only SLAM methods, which mainly rely in especial techniques for features system-initialization in order to enable the use of bearing sensors (as cameras) in SLAM systems. In this work a novel and robust method, called <italic>Concurrent Initialization</italic>, is presented which is inspired by having the complementary advantages of the Undelayed and Delayed methods that represent the most common approaches for addressing the problem. The key is to use concurrently two kinds of feature representations for both undelayed and delayed stages of the estimation. The simulations results show that the proposed method surpasses the performance of previous schemes.</p></abstract>
<kwd-group>
<kwd>bearing-sensor</kwd>
<kwd>SLAM</kwd>
<kwd>robotics</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Simultaneous Localization and Mapping (SLAM) is perhaps the most fundamental problem to solve in robotics in order to build truly autonomous mobile robots. SLAM treats of the way how a mobile robot can operate in an <italic>a priori</italic> unknown environment using only onboard sensors to simultaneously building a map of its surroundings which uses to track its position.</p>
<p>The robot’s sensors have a large impact on the algorithm used for SLAM. Early SLAM approaches focused on the use of range sensors as sonar rings or lasers e.g., [<xref ref-type="bibr" rid="b1-sensors-10-01511">1</xref>]. Nevertheless there are some disadvantages with the use of range sensors in SLAM: correspondence or data association is difficult; they are expensive and some of them are limited to 2D maps and computational overhead due to large number of features (see [<xref ref-type="bibr" rid="b2-sensors-10-01511">2</xref>,<xref ref-type="bibr" rid="b3-sensors-10-01511">3</xref>] for a complete review).</p>
<p>The aforementioned issues have propitiated that recent work moves towards the use of cameras as the primary sensing modality. Cameras have become more and more interesting for the robotic research community, because they yield a lot of information for data association, although this problem remains latent. Cameras are well adapted for embedded systems: they are light, cheap and power saving. Using vision, a robot can localize itself using common objects as landmarks.</p>
<p>On the other hand, while range sensors (<italic>i.e.</italic>, laser) provide range and angular information, a camera is a projective sensor which measures the bearing of images features. Therefore depth information (range) cannot be obtained in a single frame. This fact has propitiated the emergence of a new family of SLAM methods: The Bearing-Only SLAM methods, which mainly rely in especial techniques for features system-initialization in order to enable the use of bearing sensors (as cameras) in SLAM systems.</p>
<p>In this context, a camera connected to a computer becomes a position sensor which could be applied to different fields such as robotics (motion estimation for generally moving robots humanoids), wearable robotics (motion estimation for camera equipped devices worn by humans), tele-presence (head motion estimation using an outward-looking camera), or television (camera motion estimation for live augmented reality) [<xref ref-type="bibr" rid="b4-sensors-10-01511">4</xref>].</p>
<p>Usually the Bearing-Only SLAM has been associated with vision-based SLAM systems, possibly because cameras are by far the most popular bearing sensor used in robotics. In that sense, the use of alternative bearing sensors (<italic>i.e.</italic>, auditory sensing) for performing SLAM has been much less explored. Nevertheless in an authors’ previous work [<xref ref-type="bibr" rid="b5-sensors-10-01511">5</xref>], a Sound-Based SLAM system is proposed where sound sources are used as map features and thus showing the viability on the inclusion of the hearing sense in SLAM and the use of alternative bearing sensors.</p>
<p>In recent years several important improvements and variants to this kind of methods have appeared [<xref ref-type="bibr" rid="b6-sensors-10-01511">6</xref>,<xref ref-type="bibr" rid="b7-sensors-10-01511">7</xref>]. Also different schemes for increasing the number of features managed into the map have appeared [<xref ref-type="bibr" rid="b8-sensors-10-01511">8</xref>]. Nevertheless the initialization process of new features is still the most important problem for addressing in Bearing-Only SLAM in order to improve the robustness.</p>
<p>In this work a novel and robust method called <italic>Concurrent Initialization</italic> is presented which is inspired by having the complementary advantages of the Undelayed and Delayed methods, which represent the most common approaches for addressing the problem of initializing new features in bearing-only SLAM.</p></sec>
<sec>
<label>2.</label>
<title>Related Work</title>
<p>Bearing-Only SLAM has received most attention in the current decade. Therefore many of the related approaches are actually very recent. In [<xref ref-type="bibr" rid="b9-sensors-10-01511">9</xref>] Deans proposes a combination of a global optimization BA, (Bundle Adjustment) for feature initialization and Kalman Filter for state estimation. In this method, due to the limitation on the baseline on which features can be initialized and depending on the camera motion and the landmark location, some features cannot be initialized. Strelow proposes in [<xref ref-type="bibr" rid="b10-sensors-10-01511">10</xref>] a similar method but mixing camera and inertial sensors measurements in an Iterated Extended Kalman Filter (IEKF). In [<xref ref-type="bibr" rid="b11-sensors-10-01511">11</xref>] Bailey proposes a variant of constrained initialization for bearing-only SLAM, where past vehicle pose estimates are retained in the SLAM state so that feature initialization can be deferred until their estimates become well-conditioned. In that sense the past poses of the robot are stacked in the map, together with associated measures, until base-line is sufficient to permit a Gaussian initialization. The criteria used for determining whether the estimation is well-conditioned (Gaussian) is the Kullback distance. The complexity of the proposed sampling method to evaluate this distance is very high.</p>
<p>Also there are some works that use other estimation techniques (apart to the EKF) in Bearing-Only SLAM like the Particle Filters (PF) based methods. In a series of papers, Kwok uses Particle Filters: in [<xref ref-type="bibr" rid="b12-sensors-10-01511">12</xref>] variations to standard PF are proposed to remedy the sample impoverishment problem in bearing-only SLAM. In [<xref ref-type="bibr" rid="b13-sensors-10-01511">13</xref>] initial state of features is approximated using a sum of Gaussians, which defines a set of hypothesis for the position of the landmark, and includes all the features inside the map from the beginning. On successive observations, sequential radio test (SRT) based on likelihoods is used to prune bad hypothesis. The way these hypotheses are initialized is not detailed, and convergence and consistency issues are not discussed. In [<xref ref-type="bibr" rid="b14-sensors-10-01511">14</xref>] Kwok extends the algorithm using a Gaussian Sum Filter, with an approach similar to the proposed in [<xref ref-type="bibr" rid="b15-sensors-10-01511">15</xref>] for bearing-only tracking. This method is perhaps the first undelayed feature initialization method. The main drawback of this approach is that the number of required filters can grow exponentially, and therefore computational load grows exponentially with the number of landmarks.</p>
<p>Some of the most notably advances on Bearing-Only SLAM have been presented by Davison [<xref ref-type="bibr" rid="b4-sensors-10-01511">4</xref>,<xref ref-type="bibr" rid="b16-sensors-10-01511">16</xref>], who shows the feasibility of real-time SLAM with a single camera, using the well-established EKF estimation framework. In this work a Bayesian partial-initialization scheme for incorporating new landmarks are proposed where a separate Particle Filter is used for estimating the feature depth which is not correlated with the rest of the map. In that sense it maintains a set of depth hypotheses uniformly distributed along the viewing ray of a new landmark, with a particle filter in one dimension. Each new observation is used to update the distribution of possible depths, until the variance range is small enough to consider a Gaussian estimation, in this point the estimation is added to the map as a three-dimensional entity. Until this initialization occurs, the ray estimation is maintained in the system`s single Extended Kalman Filter. A drawback of this approach is that the initial distribution of particles has to cover all possible depth values for a landmark, this fact makes it difficult to use when the number of detected features is large or when there are far features in the scene. As a result, its application in large environments is not straightforward, as it would require a huge number of particles.</p>
<p>Jensfelt in [<xref ref-type="bibr" rid="b17-sensors-10-01511">17</xref>] presents a method where the idea is to let the SLAM estimation lag behind N frames and using these N frames to determine which points are good landmarks and find an estimate of their 3D location. Mainly the focus in this work is on the management of the features to achieve real-time performance in extraction, matching and loop detection.</p>
<p>In [<xref ref-type="bibr" rid="b18-sensors-10-01511">18</xref>] Sola presents a method based on Federate Kalman Filtering technique. With initial Probability Distribution Function (PDF) for the features, a geometric sum of Gaussians is defined. The method is an approximation of the Gaussian Sum Filter (GSF), which was used in [<xref ref-type="bibr" rid="b14-sensors-10-01511">14</xref>], that permits undelayed initialization with simply an additive growth of the problem size. A drawback of this approach is that it does not cope with features at very large depths. In [<xref ref-type="bibr" rid="b19-sensors-10-01511">19</xref>] Sola presents a similar method to the presented one in [<xref ref-type="bibr" rid="b18-sensors-10-01511">18</xref>] but features are initialized with a delayed method.</p>
<p>In [<xref ref-type="bibr" rid="b20-sensors-10-01511">20</xref>] a FastSLAM [<xref ref-type="bibr" rid="b21-sensors-10-01511">21</xref>] based approach is proposed by Eade. Here the pose of the robot is represented by particles and a set of Kalman Filters refines the estimation of the features. When the inverse depth collapses, the feature is converted to a fully initialized standard Euclidean representation. This approach for features initialization seems appropriate within a FastSLAM implementation, but it lacks for a more general framework.</p>
<p>Montiel <italic>et al.</italic> in [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>] presented a method, where the transition from partially to fully initialized features does not need to be explicitly tackled, making it suitable for direct use in EKF framework for sparse mapping. In this approach the features are initialized in the first frame observed with an initial fixed inverse depth and uncertainty, determined heuristically to cover range from nearby to infinity, therefore distant points can be coded. Due to the clarity and scalability, this approach is a good option to be implemented.</p>
<p>On the other hand, experiments show that initial fixed parameters can affect the robustness of the method, especially when an initial metric reference is used in order to recover/set the scale of the map. This fact motivated the authors to develop in [<xref ref-type="bibr" rid="b23-sensors-10-01511">23</xref>] a delayed version of the above method. In this case, initial depth and uncertainty of each feature are dynamically estimated prior to add this new landmark in the stochastic map. The works [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>] and [<xref ref-type="bibr" rid="b23-sensors-10-01511">23</xref>] are analyzed in the next sections. <xref ref-type="table" rid="t1-sensors-10-01511">Table 1</xref> shows a summary of the above methods.</p></sec>
<sec>
<label>3.</label>
<title>Problem Statement</title>
<sec>
<label>3.1.</label>
<title>Sensor motion model</title>
<p>Let us consider a bearing sensor, with a limited field of view, moving freely in 2DOF. The sensor state x̂<italic><sub>v</sub></italic> is defined by:
<disp-formula id="FD1">
<label>(1)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>x</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>y</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mi>θ</mml:mi></mml:msub></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>where [<italic>x<sub>v</sub>, y<sub>v</sub>, θ<sub>v</sub></italic>] represents the center position and orientation of the sensor and [<italic>v<sub>x</sub>, v<sub>y</sub>, v<sub>θ</sub></italic>] denoting linear and angular velocity.</p>
<p>At every step it is assumed an unknown linear and angular acceleration with zero mean and known covariance Gaussian processes, <italic>a</italic><sup>W</sup> and α<sup>W</sup>, producing an impulse of linear and angular velocity:
<disp-formula id="FD2">
<label>(2)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>n</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:mi>x</mml:mi>
<mml:mi>W</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>y</mml:mi>
<mml:mi>W</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>θ</mml:mi>
<mml:mi>W</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>a</mml:mi></mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>a</mml:mi></mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The sensor motion prediction model is:
<disp-formula id="FD3">
<label>(3)</label>
<mml:math display="block">
<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:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:mi>t</mml:mi></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mtable columnalign="left">
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>x</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>y</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>V</mml:mi></mml:mrow>
<mml:mi>θ</mml:mi>
<mml:mi>W</mml:mi></mml:msubsup></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>An Extended Kalman Filter propagates the sensor pose and velocity estimates, as well as feature estimates.</p></sec>
<sec>
<label>3.2.</label>
<title>Features definition and measurement model</title>
<p>The complete state x̂ that includes the features ŷ is made of:
<disp-formula id="FD4">
<label>(4)</label>
<mml:math display="block">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<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:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>...</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">n</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>where a feature ŷ represents a feature <italic>i</italic> defined by the 4-dimension state vector:
<disp-formula id="FD5">
<label>(5)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<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 mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">y</mml:mi></mml:mrow></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</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>which models a 2-D point located at:
<disp-formula id="FD6">
<label>(6)</label>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</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:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mi>m</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>x<sub>i</sub>, y<sub>i</sub></italic> is the sensor center coordinates when the feature was first observed; and <italic>θ</italic><sub>i</sub> represents the azimuth (respect to the world reference <italic>W</italic>) for the directional unitary vector <italic>m</italic>(<italic>θ</italic><sub>i</sub>). The point depth <italic>d<sub>i</sub></italic> along the ray is coded by its inverse <italic>ρ<sub>i</sub></italic> = 1<italic>/d<sub>i</sub></italic> (<xref ref-type="fig" rid="f1-sensors-10-01511">Figure 1</xref>).</p>
<p>The use of an inverse depth parameterization for bearing-only SLAM can improve the linearity of the measurement equation even for small changes in the sensor position (corresponding to small changes in the parallax angle), this fact allows a Gaussian distribution to cover uncertainty in depth which spans a depth range from nearby to infinity. It is well known the relevance of a good uncertainty Gaussian representation in a scheme based in EKF [<xref ref-type="bibr" rid="b24-sensors-10-01511">24</xref>].</p>
<p><xref ref-type="fig" rid="f2-sensors-10-01511">Figure 2</xref> shows a simulation for a point reconstruction from noisy bearing measurements at different parallax (upper plot), using both, the Euclidean and the Inverse Depth parameterization. The location of the vehicle is known. A Gaussian error σ<italic><sub>θ</sub></italic> = 1° (degrees) is introduced in bearings. Lower plots show the evolution of the likelihood for depth and inverse depth as the parallax in the observation grows: in (a), the estimates of depth likelihood converge to a Gaussian-like shape, but the initial estimates are highly non-Gaussian, with heavy tails. In contrast, likelihoods of inverse depth (b) (abscissa in inverse meters) are nearly Gaussian, even for low parallax. Therefore it can be clearly appreciated how the uncertainty can be represented by a Gaussian using the inverse depth parameterization over whole parallax range, whereas the Euclidean representation converges to a Gaussian-like shape only to the final estimates. For the Euclidean representation, the parallax needed for the likelihood converges to a Gaussian-like shape, depending on the sensor noise, and thus the noisier the sensor the more parallax is needed for convergence.</p>
<p>The different locations of the sensor, along with the location of the already mapped features, are used to predict the feature angle <italic>h<sub>i</sub></italic> (angle describing the direction of the feature in the sensor coordinate frame). The measurement model is defined by:
<disp-formula id="FD7">
<label>(7)</label>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mtext>atan</mml:mtext>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mtext>sin</mml:mtext>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mfrac>
<mml:mtext>cos</mml:mtext>
<mml:mi> </mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>atan2 is a two-argument function that computes the arctangent of <italic>y</italic>/<italic>x</italic> given <italic>y</italic> and <italic>x</italic>, within a range of [−π, π]. At this stage it is assumed that the bearing sensor is capable of tracking and discriminating between the landmarks, in other words, the data association problem is obviated.</p>
<p>In implementation using real data, features search could be constrained to regions around the predicted <italic>h<sub>i</sub></italic>. These regions are defined by the innovation covariance matrix <italic>S<sub>i</sub></italic> = <italic>H<sub>i</sub>P</italic><sub><italic>k</italic>+1</sub><italic>H′<sub>i</sub></italic> + <italic>R</italic> where <italic>H<sub>i</sub></italic> is the Jacobian of the sensor model with respect to the state, <italic>P</italic><sub><italic>k</italic>+1</sub> is the prior state covariance, and measurements <italic>z</italic> are assumed corrupted by zero mean Gaussian noise with covariance <italic>R</italic>.</p>
<p>As it was stated before, depth information cannot be obtained in a single measurement when bearing sensors are used. To infer the depth of a feature, the sensor must observe it repeatedly as the sensor freely moves through its environment, estimating the angle from the feature to its center. The difference between angle measurements is the feature parallax. Actually, parallax is the key that allows to estimating features depth. In the case of indoor sequences, centimeters are enough to produce parallax, on the other hand, the more distant the feature, the more the sensor has to travel to produce parallax. Therefore, in order to incorporate new features to the map, special techniques for features system-initialization are needed in order to enable the use of bearing sensors in SLAM systems.</p>
<p>Let us consider two methods, which represent the main approaches (undelayed and delayed) for addressing the initialization problem.</p></sec>
<sec>
<label>3.3.</label>
<title>ID-Undelayed initialization</title>
<p>For the Inverse depth (ID) undelayed method presented in [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>], transition from partially to fully initialized features do not need to be explicitly tackled; this means that the feature is added to the map in its final representation since the first frame was observed. The initialization includes both the feature state initial values and the covariance assignment. The initial uncertainty region covers a huge range depth [<italic>d<sub>min</sub></italic>, ∞] as Gaussian because the low linearization errors, due to the inverse depth parameterization. Once initialized, the feature is processed with the standard EKF prediction-update loop.</p>
<p>Using the inverse depth parameterization, while the feature is observed at low parallax, the feature will be used mainly to determine the sensor orientation but the feature depth will be kept quite uncertain; if the sensor translation is able to produce a parallax big enough then the feature depth estimation will be improved.</p>
<p>For the ID-Undelayed method (<xref ref-type="fig" rid="f1-sensors-10-01511">Figure 1</xref>), a new feature ŷnew (<xref ref-type="disp-formula" rid="FD5">Equation 5</xref>) is initialized, when is detected the first time <italic>k</italic>, as follows:
<disp-formula id="FD8">
<label>(8)</label>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>θ</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 <italic>x<sub>v</sub></italic>, <italic>y<sub>v</sub></italic>, <italic>θ<sub>v</sub></italic> are taken directly from the current state x̂<italic><sub>v</sub></italic> and <italic>z<sub>θ</sub></italic> is the initial bearing measurement. The initial value for ρ<italic><sub>i</sub></italic> is derived heuristically to cover in its 95% acceptance region, a working space from infinity to a predefined close distance d<sub>min</sub> expressed as inverse depth:
<disp-formula id="FD9">
<label>(9)</label>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mtext>so</mml:mtext>
<mml:mo>:</mml:mo>
<mml:mo>  </mml:mo></mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:mfrac>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>ρ</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow></mml:msub></mml:mrow>
<mml:mn>4</mml:mn></mml:mfrac>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>min</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula></p>
<p>In [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>] the parameters are set as <italic>d<sub>min</sub></italic> = 1, ρ<italic><sub>i</sub></italic> = 0.5, σ<sub>ρ</sub> = 0.25. The new system state x̂ is conformed simply adding the new feature ŷ<sub>i</sub> to the final of the vector state:
<disp-formula id="FD10">
<label>(10)</label>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>     </mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mtext>new</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</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:math></disp-formula></p>
<p>The state covariance after feature initialization is defined by:
<disp-formula id="FD11">
<label>(11)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>new</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">R</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">j</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>ρ</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:msup>
<mml:mi>J</mml:mi>
<mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:math></disp-formula>being <italic>J</italic> the Jacobian for the initialization function.</p></sec>
<sec>
<label>3.4.</label>
<title>ID-Delayed initialization</title>
<p>In experiments using the undelayed initialization, it often happens that the inverse depth becomes negative after a Kalman update, due to the observation noise that predominates over the update of the depth, but there are simple solutions to solve this problem. Moreover, when an initial metric reference is used in order to recover/set the scale of the map (very relevant for robotics applications), initial fixed parameters (inverse depth and uncertainty) must be tuned in order to ensure convergence.</p>
<p><xref ref-type="fig" rid="f3-sensors-10-01511">Figure 3</xref> illustrates the SLAM process using the ID-Undelayed following a simple straight trajectory for 5 features, (4 of them near to the vehicle and the other more distant). In upper plots (a,b and c) the initial parameters (<italic>ρ<sub>o</sub></italic> = 0.01, σ<italic><sub>ρ</sub></italic> = 0.005) are set in order to initialize the features at the middle of the distance between the vehicle and the more distant feature, and therefore far enough respect to the nearby features (plot <italic>a</italic>). In this case we found in almost every case a huge drift in the estimates (plot <italic>c</italic>), and it can be appreciated that initializing the features far away from the sensor fails if there are some closest landmarks. If other values (<italic>ρ<sub>o</sub></italic> = 0.5, <italic>σ<sub>ρ</sub></italic> = 0.25) are used (near to the sensor), (central plots <italic>d</italic>, <italic>e</italic> and <italic>f</italic>) then the percentage of convergence is poor (approx 50%) (plot <italic>f</italic>), due to the influence of the distant feature. In this case if the distant feature is removed from the map (not illustrated here) then a percentage of convergence of 80% is achieved. In the last series (lower plots <italic>g</italic>, <italic>h</italic> and <italic>i</italic>) we combine both initial values: <italic>ρ<sub>o</sub></italic> = 0.01, <italic>σ<sub>ρ</sub></italic> = 0.005 for the distant landmark and <italic>ρ<sub>o</sub></italic> = 0.5, <italic>σ<sub>ρ</sub></italic> = 0.25 for the all the nearby ones. In this case an effectiveness of 90% was achieved for the algorithm.</p>
<p>The issues mentioned above suggest us that the initial inverse depth and their associated initial uncertainty of the new features added to the map could be treated before to be added to the system state instead of use fixed initial depth and uncertainty. In [<xref ref-type="bibr" rid="b23-sensors-10-01511">23</xref>] a delayed version of an undelayed method is proposed. In this case, initial depth and uncertainty of each feature are dynamically estimated prior to adding the new landmark in the stochastic map.</p>
<p>For the ID-Delayed method, a new feature <italic>ŷ<sub>new</sub></italic> (<xref ref-type="disp-formula" rid="FD5">Equation 5</xref>) is initialized as follows:</p>
<p>When a feature is detected the first time <italic>k</italic>, some part of the current state x̂ and covariance matrix P together with the sensor measurement are stored, this data λ (called <italic>candidate points</italic>) is composed by:
<disp-formula id="FD12">
<label>(12)</label>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>θ</mml:mi></mml:msubsup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The values <italic>x</italic><sub>1</sub>, <italic>y</italic><sub>1</sub> and <italic>θ</italic><sub>1</sub> represent the current robot position; <italic>σ</italic><sub>1</sub><sup><italic>x</italic></sup>, <italic>σ</italic><sub>1</sub><sup><italic>y</italic></sup> and <italic>σ</italic><sub>1</sub><sup><italic>θ</italic></sup> represent their associated variances taken from the state covariance matrix P<sub>k</sub> and z<sub>1</sub> is the first bearing measurement to the landmark. In subsequent instants <italic>k</italic>, the feature is tracked until a minimum parallax threshold <italic>α<sub>min</sub></italic> is reached. <xref ref-type="fig" rid="f4-sensors-10-01511">Figure 4</xref> shows that a few degrees of parallax are enough to reduce the uncertainty in the estimation.</p>
<p>The parallax α is estimated using:
<list list-type="roman-lower">
<list-item>
<p>The base-line <italic>b</italic>.</p></list-item>
<list-item>
<p><italic>λ<sub>i</sub></italic>, using its associated data (<italic>x</italic><sub>1</sub>, <italic>y</italic><sub>1</sub>, <italic>θ</italic><sub>1</sub>, <italic>z</italic><sub>1</sub>, <italic>σ</italic><sub>1</sub><italic><sup>x</sup></italic>, <italic>σ</italic><sub>1</sub><italic><sup>y</sup></italic>, <italic>σ</italic><sub>1</sub><italic><sup>θ</sup></italic>).</p></list-item>
<list-item>
<p>The current state (<italic>x</italic><sub>v</sub>, <italic>y</italic><sub>v</sub>, <italic>θ</italic><sub>v</sub>, <italic>z</italic>, <italic>σ<sup>x</sup></italic><sub>v</sub>, <italic>σ<sup>y</sup></italic><sub>v</sub>, <italic>σ<sup>θ</sup></italic><sub>v</sub>).</p></list-item></list></p>
<p>For each candidate point λ<sub>i</sub>, every time that a new bearing measurement <italic>z</italic> is available, the parallax angle <italic>α</italic> can be estimated as (<xref ref-type="fig" rid="f4-sensors-10-01511">Figure 4</xref>):
<disp-formula id="FD13">
<label>(13)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>α</mml:mi>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mo>=</mml:mo>
<mml:mo> </mml:mo></mml:mrow>
<mml:mi>π</mml:mi>
<mml:mo>−</mml:mo>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>β</mml:mi>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mo>+</mml:mo>
<mml:mo> </mml:mo></mml:mrow>
<mml:mi>γ</mml:mi></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>The angle <italic>β</italic> is determined by the directional unitary vector <italic>h</italic><sub>1</sub> and the vector <italic>b</italic><sub>1</sub> defines the base-line <italic>b</italic> in the direction of the sensor trajectory.</p>
<p>The angle <italic>γ</italic> is determined in a similar way as <italic>β</italic> but using the directional unitary vector <italic>h</italic><sub>2</sub> and the vector <italic>b</italic><sub>2</sub> defining the base line in the opposite direction of the sensor trajectory by:
<disp-formula id="FD14">
<label>(14)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>β</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mo>cos</mml:mo>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow>
<mml:mo>        </mml:mo>
<mml:mi>γ</mml:mi>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mtext>cos</mml:mtext></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>⋅</mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow></mml:mrow></mml:mfrac></mml:mrow>
<mml:mo>)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where (<italic>h</italic><sub>1</sub> · <italic>b</italic><sub>1</sub>) is the dot product between <italic>h</italic><sub>1</sub> and <italic>b</italic><sub>1</sub>. The directional vector <italic>h</italic><sub>1</sub>, expressed in the absolute frame W, points from the sensor location to the direction when the landmark was observed for the first time, and is computed using the data stored in λ<sub>i</sub> denoting the bearing <italic>z<sub>i</sub></italic>. The directional vector <italic>h</italic><sub>2</sub> expressed in the absolute frame W is computed in a similar way as <italic>h</italic><sub>1</sub> but using the current sensor position <italic>x̂<sub>v</sub></italic> and the current measurement <italic>z<sub>i</sub></italic>.
<disp-formula id="FD15">
<label>(15)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>1</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:mtext>cos</mml:mtext>
<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>1</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtext>sin</mml:mtext>
<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>1</mml:mn></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mn>1</mml:mn></mml:msub></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:mo>    </mml:mo>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>2</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:mtext>cos</mml:mtext>
<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:mi>v</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mtext>sin</mml:mtext>
<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:mi>v</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></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:mrow></mml:math></disp-formula></p>
<p><italic>b</italic><sub>1</sub> is the vector representing the robot base-line between the robot center position <italic>x</italic><sub>1</sub>, <italic>y</italic><sub>1</sub> stored in <italic>λ<sub>i</sub></italic> where the point was first detected and the current sensor center (<italic>x</italic><sub>v</sub>, <italic>y</italic><sub>v</sub>). <italic>b</italic><sub>2</sub> is equal to <italic>b</italic><sub>1</sub> but pointing to the opposite direction. The base-line <italic>b</italic> is the module of <italic>b</italic><sub>2</sub> or <italic>b</italic><sub>1</sub>:
<disp-formula id="FD16">
<label>(16)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">‖</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">‖</mml:mo></mml:mrow>
<mml:mo>    </mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<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>v</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mn>1</mml:mn></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>  </mml:mo>
<mml:msub>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>y</mml:mi>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>If α &gt; α<sub>min</sub> then <italic>λ<sub>i</sub></italic> is initialized as a new feature ŷ<sub>i</sub>. The threshold α<sub>min</sub> can be established depending on the accuracy of the bearing sensor. Depth uncertainty is reasonably well minimized when <italic>α</italic> = 10°.</p>
<p>For a new feature ŷ<sub>i,</sub> values of <italic>x<sub>i</sub></italic>, <italic>y<sub>i</sub></italic>, <italic>θ<sub>i</sub></italic> are defined in the same way as <xref ref-type="disp-formula" rid="FD8">Equation 8</xref>. For the delayed approach the dynamical estimation of ρ<italic><sub>i</sub></italic> is derived from:
<disp-formula id="FD17">
<label>(17)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mtext>sin</mml:mtext>
<mml:mi> </mml:mi>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi> </mml:mi>
<mml:mtext>sin</mml:mtext>
<mml:mi> </mml:mi>
<mml:mi>β</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:math></disp-formula></p>
<p>The variance <italic>σ<sub>ρ</sub></italic> for the inverse depth <italic>ρ</italic> is calculated now from the initialization process, instead of a variance predefined heuristically as it was made in the undelayed method, therefore the covariance for the new feature ŷ<sub>new</sub> is derived from the error diagonal covariance matrix <italic>R<sub>i</sub></italic> measurement and the state covariance matrix P.
<disp-formula id="FD18">
<label>(18)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi mathvariant="italic">diag</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>x</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>y</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>θ</mml:mi></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>For reasons of simplicity <italic>R<sub>i</sub></italic> is defined as a diagonal matrix (cross-covariances are not taken into account) and is now conformed by the error variance of the standard deviation of the bearing sensor <italic>σ<sub>z</sub></italic> (one for each bearing estimation <italic>z</italic><sub>1</sub> and <italic>z</italic>) and the variances stored in <italic>λ<sub>i</sub></italic> (<italic>σ</italic><sub>1</sub><italic><sup>x</sup></italic>, <italic>σ</italic><sub>1</sub><italic><sup>y</sup></italic> and <italic>σ</italic><sub>1</sub><italic><sup>θ</sup></italic>). Note that the value of σ<sub>z</sub> is constant and is not stored previously in <xref ref-type="disp-formula" rid="FD12">Equation 12</xref>.</p>
<p>The new state covariance matrix, after initialization, is:
<disp-formula id="FD19">
<label>(19)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>new</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">k</mml:mi></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">R</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">j</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:msup>
<mml:mi>J</mml:mi>
<mml:mo>′</mml:mo></mml:msup></mml:mrow></mml:math></disp-formula></p>
<p>Note that unlike the ID-Undelayed method there is not an implicit initial uncertainty in depth σ<sub>ρ</sub> (<xref ref-type="disp-formula" rid="FD11">Equation 11</xref>). In the ID-Delayed method the complete covariance for the new feature is fully estimated by the initialization process.</p></sec>
<sec>
<label>3.5.</label>
<title>Undelayed <italic>vs.</italic> Delayed</title>
<p>In an Undelayed approach, when a feature is added to the map the first time that it has been observed, its depth is modeled with a huge uncertainty. In that sense, this new feature does not provide any depth information. However, at this stage the benefit of the Undelayed approach is that features provide information about the sensor orientation from the beginning.</p>
<p>On the other hand, it can be useful to wait until the sensor movement produces some degrees of parallax, (gathering depth information) in order to improve robustness, especially when an initial metric reference is used for recovering scale. Moreover, when cameras are used in real cluttered environments, the delay can be used for efficiently reject weak features, thus initializing only the best features as new landmarks to the map.</p></sec></sec>
<sec>
<label>4.</label>
<title>Concurrent Initialization</title>
<p>This section presents a novel and robust method, called <italic>Concurrent Initialization,</italic> for initializing new features in bearing-sensor-based SLAM systems. The method takes advantage of both, undelayed and delayed approaches. When a feature is detected for the first time, it is immediately initialized in the map (undelayed) as a directional vector which contributes since the beginning to the estimation of the sensor orientation. After that, while the sensor moves freely through its environment, the incoming measurements are incorporated via an uncorrelated linear Kalman filter in order to estimate the depth of the feature. If the sensor movement produces enough parallax, then the feature will be updated with the estimated depth, and thus also contributing to the estimation of the sensor location. Very far features will not produce parallax, and will remain in the form of a directional vector in the map, but contributing to the estimation of sensor orientation. <xref ref-type="fig" rid="f5-sensors-10-01511">Figure 5</xref> illustrates the concurrent initialization process.</p>
<sec>
<label>4.1.</label>
<title>Undelayed stage</title>
<p>When a feature is detected for the first time <italic>k</italic>, it is initialized immediately in the map as a new landmark ŷ<sub>L(i)</sub> which is composed by the 3-dimension state vector:
<disp-formula id="FD20">
<label>(20)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">y</mml:mi></mml:mrow></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub></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>where
<disp-formula id="FD21">
<label>(21)</label>
<mml:math>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>θ</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></p>
<p><italic>x<sub>v</sub></italic>, <italic>y<sub>v</sub></italic>, <italic>θ<sub>v</sub></italic> are taken directly from the current state x̂<italic><sub>v</sub></italic> and <italic>z<sub>θ</sub></italic> is the initial bearing measurement. ŷ<sub>L(i)</sub> defines a directional vector, expressed in the absolute frame W, which represents the direction of the landmark from the sensor, when it was observed for the first time. The covariance matrix P is updated in the same manner as <xref ref-type="disp-formula" rid="FD19">Equation 19</xref> but using the proper Jacobian <italic>J</italic>.</p>
<p>Parallel to the system state (represented by the state vector x̂), a state vector x̂<sub>can</sub> is used for estimating (via an extra linear Kalman Filter) the feature depth of each landmark ŷ<sub>L</sub>. The state x̂<sub>can</sub> is not directly correlated with the map.</p>
<p>Every time a new feature ŷ<sub>L(i)</sub> is initialized in x̂, the state x̂<sub>can</sub> is augmented as:
<disp-formula id="FD22">
<label>(22)</label>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mtext>can</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>     </mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mtext>can</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>new</mml:mtext></mml:mrow></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</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:math></disp-formula>where λ<sub>i</sub> is a 3-dimension vector composed by:
<disp-formula id="FD23">
<label>(23)</label>
<mml:math>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>λ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mrow>
<mml:mo>=</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">]</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>′</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>For each λ<sub>i</sub>, α<sub>i</sub> is the estimated parallax, Δα<sub>i</sub> is the rate of change in parallax and ρ<italic><sub>i</sub></italic> is the estimated inverse depth.</p>
<p>The covariance matrix of x̂<sub>can</sub>, P<sub>can</sub>, is augmented simply by:
<disp-formula id="FD24">
<label>(24)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>can</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mtext>new</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>can</mml:mtext></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">R</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">c</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></p>
<p>The three initial values of λ<sub>i</sub> are set to zero, and the initial values of R<sub>c</sub> have been heuristically determined as: R<sub>c</sub> = <italic>diag</italic>(.01, .01, 1).</p></sec>
<sec>
<label>4.2.</label>
<title>Delayed stage</title>
<p>While the sensor moves through its environment, it can observe repeatedly a landmark ŷ<sub>L(i)</sub>, at each iteration generating a new angle measurement <italic>z</italic>. All these new measurements are successively added to the linear Kalman Filter (responsible for estimating x̂<sub>can</sub>) in order to infer the landmark depth. For each new measurement <italic>z<sub>i</sub></italic> of a feature ŷ<sub>L(i)</sub> an iteration of the filter is executed.</p>
<p>The state transition model for each λ<sub>i</sub> is:
<disp-formula id="FD25">
<label>(25)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo> </mml:mo>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mtext>can</mml:mtext>
<mml:mo>_</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>+</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi mathvariant="normal">Δ</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>α</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>A process noise w<italic><sub>k</sub></italic> ∼ <italic>N</italic>(0,Q<italic><sub>k</sub></italic>) is considered. In experiments: Q<italic><sub>k</sub></italic> = <italic>diag</italic>(8e<sup>−7</sup>, 10e<sup>−9</sup>) have been used.</p>
<p>The measurement prediction model is directly obtained from the state. On the other hand, the measurements <italic>z<sub>can</sub></italic> used to update the filter are a function of: (i) the feature ŷ<sub>L(i)</sub>, (ii) the sensor state x̂<italic><sub>v</sub></italic> and (iii) the current measurement <italic>z<sub>i</sub></italic>.
<disp-formula id="FD26">
<label>(26)</label>
<mml:math display="block">
<mml:mrow>
<mml:mo> </mml:mo>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mi mathvariant="italic">can</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>z</mml:mi></mml:mrow>
<mml:mi>α</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>ρ</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:msub>
<mml:mrow>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>z</mml:mi></mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p><italic>z<sub>α</sub></italic> and <italic>z<sub>ρ</sub></italic> are estimated in the same manner as <xref ref-type="disp-formula" rid="FD13">Equation 13</xref> and <xref ref-type="disp-formula" rid="FD17">Equation 17</xref> respectively. Only note that in <xref ref-type="disp-formula" rid="FD16">Equation 16</xref>, <italic>x</italic><sub>1</sub> and <italic>y</italic><sub>1</sub> are taken from ŷ<sub>L(i)</sub>, so <italic>x</italic><sub>1</sub> = <italic>x<sub>i</sub></italic> and <italic>y</italic><sub>1</sub> = <italic>y<sub>i</sub></italic>.</p>
<p>The implicit uncertainties in the estimation of the function <italic>f<sub>z</sub></italic> are used to compose the error measurement covariance matrix R<sub>can</sub>:
<disp-formula id="FD27">
<label>(27)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mi>R</mml:mi>
<mml:mi mathvariant="italic">can</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>∇</mml:mo>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">t</mml:mi></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo>∇</mml:mo>
<mml:mi>f</mml:mi></mml:mrow>
<mml:mi>z</mml:mi></mml:msub>
<mml:mo>′</mml:mo></mml:mrow></mml:math></disp-formula>where Δ<italic>f<sub>z</sub></italic> is the Jacobian of <italic>f<sub>z</sub></italic> with respect to <italic>z</italic><sub>can</sub>. P<sub>t</sub> is formed by:
<disp-formula id="FD28">
<label>(28)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">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:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">P</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi>z</mml:mi>
<mml:mn>2</mml:mn></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>All the components of P<sub>t</sub>, except σ<sub>z</sub> (the error variance of the bearing sensor) are taken directly from the covariance matrix P of the system state x̂. P<sub>x̂<italic>v</italic></sub> is the submatrix of P corresponding to the covariance of the sensor state x̂<sub>v</sub>. P<sub>ŷ<sub>L(i)</sub></sub> is the covariance of the feature ŷ<sub>L(i)</sub>. P<sub>x̂<sub>v</sub>ŷ<sub>L(i)</sub></sub> and P<sub>ŷ<sub>L(i)</sub>x̂<sub>v</sub></sub> are the correlations between x̂<sub>v</sub> and ŷ<sub>L(i)</sub>.</p>
<p>R<sub>can</sub> is used in the Kalman update equations for estimating the innovation covariance matrix <italic>S<sub>i</sub></italic>.</p></sec>
<sec>
<label>4.3.</label>
<title>Updating depth</title>
<p>Features expressed in the form of ŷ<sub>L(i)</sub> are very useful to estimate the sensor orientation <italic>θ<sub>v</sub></italic>. In [<xref ref-type="bibr" rid="b25-sensors-10-01511">25</xref>] a visual compass is proposed based in this fact. Besides, the depth of features are needed for estimating the sensor location [<italic>x<sub>v</sub></italic>,<italic>y<sub>v</sub></italic>]. For near features ŷ<sub>L(i)</sub>, a small sensor translation is enough to produce some parallax and thus to infer depth.</p>
<p>The state x̂<sub>can</sub> encloses the parallax α<sub>i</sub> and inverse depth ρ<italic><sub>i</sub></italic> estimations for each feature ŷ<sub>L(i)</sub>. <xref ref-type="fig" rid="f6-sensors-10-01511">Figure 6</xref> shows the evolution of parameters α<sub>i</sub> (upper plot) and <italic>d</italic> = 1/ρ<italic><sub>i</sub></italic> (lower plot) and its uncertainty for the feature estimated by the linear Kalman filter, (left plot) feature at a distance of <italic>d</italic> = 1,000 units and (right plot) for a distance of <italic>d</italic> = 50 units. The boundary uncertainties at 3σ are indicated in blue color. The filtered values are depicted in red color. Also note in green color the raw measurements <italic>z</italic><sub>can</sub> (taken from <xref ref-type="disp-formula" rid="FD26">Equation 26</xref>). In these graphics it can be clearly appreciated how the estimation of depth <italic>d</italic> is directly influenced by the parallax; for the near feature, about 100 steps are needed to producing parallax and thus <italic>d</italic> converges rapidly to its real value. Also note that the uncertainty is rapidly minimized. On the other hand, the distant feature produces small parallax. For a low parallax the sensor noise predominates and therefore produces very fluctuant raw measurements. Even so, after several steps, the filter estimates the depth reasonable well with a high related uncertainty.</p>
<p>A minimum parallax threshold α<sub>min</sub> is used for updating a feature ŷ<sub>L(i)</sub> as ŷ<sub>i</sub>. Distant features will not produce parallax and therefore will remain expressed as ŷ<sub>L(i)</sub>, but contributing to the estimation of sensor orientation <italic>θ<sub>v</sub></italic>.</p>
<p>On the other hand, if α<sub>i</sub> &gt; α<sub>min</sub> then:
<disp-formula id="FD29">
<label>(29)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">y</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:mo>→</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">y</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></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>where <italic>ρ<sub>i</sub></italic> is taken directly from x̂<sub>can</sub>. The covariance matrix P is transformed by the corresponding Jacobian:
<disp-formula id="FD30">
<label>(30)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mtext>new</mml:mtext></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>J</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi mathvariant="normal">P</mml:mi></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ρ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub></mml:mrow>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>′</mml:mo></mml:mrow></mml:math></disp-formula>being σ<sub>ρ</sub><sup>y</sup> the variance of the inverse depth estimation for ŷ<sub>L(i)</sub> and taken from P<sub>can</sub>. The constant <italic>q</italic> is used to increase the initial uncertainty of ρ<italic><sub>i</sub></italic> in order to improve filter consistency. In experiments <italic>q</italic> is set to 100.
<disp-formula id="FD31">
<label>(31)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>J</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mi mathvariant="normal">I</mml:mi></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">i</mml:mi></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>1</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:mi mathvariant="normal">I</mml:mi></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>When a feature ŷ<sub>L(i)</sub> is updated as ŷ<sub>i</sub>, then its corresponding values will be removed from the linear Kalman filter responsible for estimating the state x̂<sub>can</sub>.</p></sec>
<sec>
<label>4.4.</label>
<title>Measurement</title>
<p>At any time, the map can include both kind of features ŷ<sub>L(i)</sub> and ŷ<sub>i</sub>. Thus each kind of feature has its own measurement prediction model:
<list list-type="simple">
<list-item>
<p>- For features ŷ<sub>i</sub> measurement <xref ref-type="disp-formula" rid="FD7">Equation 7</xref> is used. A value of 2 to 6 times the real error of the bearing sensor is considered for the measurement process.</p></list-item>
<list-item>
<p>- Features ŷ<sub>L(i)</sub> are supposed to be very far from the sensor and therefore it is assumed that its corresponding bearing measurement <italic>z<sub>i</sub></italic> will remain almost constant. The measurement prediction model is simply:
<disp-formula id="FD32">
<label>(32)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>i</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>θ</mml:mi></mml:mrow>
<mml:mi>v</mml:mi></mml:msub></mml:mrow></mml:math></disp-formula></p></list-item>
<list-item>
<p>- For near features ŷ<sub>L(i)</sub>, the bearing measurement <italic>z<sub>i</sub></italic> will change rapidly. Due to this fact the standard deviation of the bearing sensor σ<sub>z</sub> for features ŷ<sub>L(i),</sub> (in update Kalman equations) is multiplied by a high value <italic>c</italic>, (<italic>c</italic> = 10e<sup>10</sup> were used in experiments). An interesting issue, to be treated for further work, could be the dynamical estimation of parameter <italic>c</italic>.</p></list-item></list></p>
<p>Both kinds of measurement prediction models must be used together, if several measurements <italic>z<sub>i</sub></italic> are made at the same time for both kinds of features. For example, consider that the bearing sensor takes measurements of the features ŷ<sub>L(2)</sub> and ŷ<sub>3</sub> simultaneously, then:
<disp-formula id="FD33">
<label>(33)</label>
<mml:math display="block">
<mml:mrow>
<mml:mi>v</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:mi>z</mml:mi>
<mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>z</mml:mi>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mo>−</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>    </mml:mo>
<mml:mi mathvariant="normal">R</mml:mi>
<mml:mo>=</mml:mo></mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">z</mml:mi>
<mml:mn>2</mml:mn></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:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>σ</mml:mi></mml:mrow>
<mml:mi mathvariant="normal">z</mml:mi>
<mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>
<disp-formula id="FD34">
<label>(34)</label>
<mml:math display="block">
<mml:mrow>
<mml:mo>∇</mml:mo>
<mml:mi mathvariant="normal">H</mml:mi>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mi>h</mml:mi></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mi mathvariant="normal">v</mml:mi></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd>
<mml:mtd>
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:msub>
<mml:mi>h</mml:mi>
<mml:mn>3</mml:mn></mml:msub></mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mo>∂</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:mfrac></mml:mrow></mml:mtd>
<mml:mtd>
<mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where <italic>v</italic> is the innovation, R is the error covariance matrix and ∇H is the Jacobian measurement model.</p></sec></sec>
<sec>
<label>5.</label>
<title>Experiments</title>
<p>Several simulations have been executed in order test the performance of the proposed method in relation to other approaches. Simulations are extremely helpful when different methods are compared among others, because numerous variables (inherent to real environments) are obviated (e.g., data association), or become constants (<italic>i.e.</italic>, synthetic map), therefore the cores of the methods are compared.</p>
<sec>
<label>5.1.</label>
<title>Initialization process of distant and near features</title>
<p><xref ref-type="fig" rid="f7-sensors-10-01511">Figure 7</xref> shows the evolution in the initialization process of two features maps with the concurrent initialization: a distant one (600 units of depth) and a near one (50 units of depth). The only information given a priori to the system was the scale reference (the three points in yellow) which was introduced with an associated uncertainty close to zero in the covariance matrix R. Taking into account that there is not an additional sensory input (e.g., odometry), at every step an unknown linear and angular acceleration is introduced with zero mean and known-covariance Gaussian processes (Section 3.1). In this case, <italic>a</italic><sup>W</sup><sub>x</sub> = 4 m/s<sup>2</sup>, <italic>a</italic><sup>W</sup><sub>y</sub> = 4 m/s<sup>2</sup> and <italic>a</italic><sup>W</sup><sub>θ</sub> = 2 rad/s<sup>2</sup> were used. The only input sensor of the system is a noisy sensor capable of measuring the bearing of features, with a limited field of view of 110° (emulating a 2-DOF camera). A standard deviation of σ = 1° is considered for the sensor readings.</p>
<p>At the begin of the sequence (plot <italic>a</italic>) both features has been initialized as a directional vector ŷ<sub>L(i)</sub>, defining a ray (in cyan color). Note that three feature points (in yellow color) have been previously added to the map as a priori known landmarks in order to define/set the scale of the world. Around step 100 (plot <italic>b</italic>), the small displacement of the sensor to the right produces enough parallax to estimating the depth of the near feature. Observe that the near feature ŷ<sub>L(i)</sub> has been transformed to a ŷ<sub>i</sub> feature (blue color). Also note that some uncertainty (especially in depth) remains at the moment of the transformation. By the last step, at 250 iterations, (plot <italic>c</italic>) the uncertainty in the near feature has been full minimized, on the other hand, the movement of the sensor has not produced enough parallax and therefore, the distant feature remains in the form of ŷ<sub>L(i)</sub> but still contributing to the estimation of the sensor orientation.</p></sec>
<sec sec-type="methods">
<label>5.2.</label>
<title>Comparative study</title>
<p>In order to show the performance of the Concurrent method proposed in this article, a comparative study between the ID-Undelayed method [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>] and the ID-Delayed [<xref ref-type="bibr" rid="b23-sensors-10-01511">23</xref>] method is presented.</p>
<p><xref ref-type="fig" rid="f8-sensors-10-01511">Figure 8</xref> illustrates the environment setup used in the study. For all the tests, the bearing sensor is moved over a semi-cycled U-like shape trajectory, since our main goal is to observe the effect of the initialization process of new features in the estimation of both map and sensor location, instead of the closing loop problem. About 100 landmarks (in green) simulate the environment of the sensor. <xref ref-type="fig" rid="f8-sensors-10-01511">Figure 8</xref> also shows both the map and sensor trajectory estimates after a single run of 2,000 steps of the Concurrent method. The features map and their uncertainties are indicated in blue. Note the evolution of uncertainty in both sensor and features location. Also note the typical (in SLAM systems) drift in both trajectory and map estimations as the sensor moves far away from its initial location.</p>
<p>The <italic>average</italic> NEES (normalised estimation error squared [<xref ref-type="bibr" rid="b26-sensors-10-01511">26</xref>]) over N Monte Carlo runs of the filter was used in order to evaluate the consistency of the methods, as it is proposed in [<xref ref-type="bibr" rid="b27-sensors-10-01511">27</xref>]. The NEES is estimated as follows:
<disp-formula id="FD35">
<label>(35)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>ε</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi mathvariant="normal">k</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:mrow>
<mml:mi>T</mml:mi></mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi mathvariant="normal">k</mml:mi></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mo>−</mml:mo>
<mml:mn>1</mml:mn></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">x</mml:mi></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>−</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mi mathvariant="normal">x</mml:mi>
<mml:mo>^</mml:mo></mml:mover></mml:mrow></mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">k</mml:mi>
<mml:mo stretchy="false">|</mml:mo>
<mml:mi mathvariant="normal">k</mml:mi></mml:mrow></mml:mrow></mml:msub></mml:mrow>
<mml:mo>]</mml:mo></mml:mrow></mml:mrow></mml:math></disp-formula>where x<italic><sub>k</sub></italic> is the true state and the average NEES is computed as:
<disp-formula id="FD36">
<label>(36)</label>
<mml:math display="block">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>¯</mml:mo></mml:mover></mml:mrow>
<mml:mi>k</mml:mi></mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mi>N</mml:mi></mml:mfrac>
<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:msub>
<mml:mrow>
<mml:mi>ε</mml:mi></mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msub></mml:mrow></mml:mrow></mml:math></disp-formula></p>
<p>Four different tests were realized to comparing the methods under diverse conditions. <xref ref-type="table" rid="t2-sensors-10-01511">Table 2</xref> shows the values for the linear and angular acceleration (<italic>a</italic><sup>W</sup><sub>x</sub>, <italic>a</italic><sup>W</sup><sub>y</sub> and <italic>a</italic><sup>W</sup><sub>θ</sub> in 4m/s<sup>2</sup>) and the time between “frames” (Δ<italic>t</italic> in seconds) used for each test. In this case, a higher Δ<italic>t</italic> implies bigger displacements of the robot from frame to frame and therefore more linearization errors due to large changes in parallax.</p>
<p>In experiments <italic>ρ<sub>ini</sub></italic> = 0.05 and <italic>σ<sub>ρ</sub></italic> = 0.025 were used for the ID-Undelayed method and α<sub>min</sub> = 10° were used for both ID-Delayed and Concurrent methods. The NEES was estimated over the 3-dimensional robot pose. The average NEES for each method was estimated using N=20 Monte Carlo runs. In simulations the sensor was moved 3 meters every Δ<italic>t</italic> = 1 second for the straight sections and 4.5 meters every Δ<italic>t</italic> = 1 seconds for the curve sections of the trajectory.</p>
<p>MATLAB code was run using a 1.73 GHz Pentium M laptop. <xref ref-type="table" rid="t3-sensors-10-01511">Table 3</xref> shows the execution time of the three methods for conditions Δ<italic>t</italic> = 1/30 and Δ<italic>t</italic> = 1/120. As it would be expected, for Δ<italic>t</italic> = 1/120 the execution time was around four times longer than Δ<italic>t</italic> = 1/30, for the same trajectory. Execution time of the Concurrent method was estimated using a diagnostic version of the algorithm, marked with an asterisk (*) in <xref ref-type="table" rid="t3-sensors-10-01511">Table 3</xref>. This version uses a 5<italic>n</italic> Kalman filter (instead of 3<italic>n</italic>) which estimates two extra diagnostic parameters. This means that the real execution time of the Concurrent method should be somewhat faster.</p>
<p>For some runs of the algorithms, filter divergence could occur. <xref ref-type="table" rid="t3-sensors-10-01511">Table 3</xref> also shows the failed attempts, this means the number of times that filter divergence appeared before a method reach N = 20 positives runs (with convergence), for each test. The average NEES was only estimated using positive runs.</p>
<p><xref ref-type="fig" rid="f9-sensors-10-01511">Figure 9</xref> shows the evolution of the average NEES (<italic>ε̄<sub>k</sub></italic>) for tests (a), (b), (c), (d) for each method. Note that test (b) and (d) need four times more steps than test (a) and (c) in order to complete the same trajectory due to their particular value of Δ<italic>t</italic>.</p>
<p>As it would be expected, the whole methods become optimistic after a certain time [<xref ref-type="bibr" rid="b27-sensors-10-01511">27</xref>]. Nevertheless, it can be observed for tests (a), (b) and (c) that <italic>ε̄<sub>k</sub></italic> achieved for Concurrent method (red) tends to be lower than <italic>ε̄ <sub>k</sub></italic> achieved for both ID-Undelayed (blue) and ID-Delayed (green) methods. This behavior is more evident in test (a) and (c), where lower noise is injected into the sensor motion model. The difference between (a) and (c) is the time between “frames” (Δ<italic>t</italic>) used for each test. The above results suggest, that if adequate noise is injected, then Concurrent method seems to be less sensitive to large jumps in parallax (and linearization errors), and therefore could be suitable for application where a high “frame-rate” is not available. Regarding to the ID-Undelayed method, it can be observed the effect of the parameter Δ<italic>t</italic> over the magnitude of <italic>ε̄<sub>k</sub></italic>, although its form is somewhat similar for all tests. In test (a) and (c) where Δ<italic>t</italic> is higher (1/30), <italic>ε̄<sub>k</sub></italic> reaches around 600 units, while in test (b) and (d) where Δ<italic>t</italic> is lower (1/120) <italic>ε̄<sub>k</sub></italic> reaches around 200 units. Theoretically the <italic>ε̄<sub>k</sub></italic> for the ID-Undelayed method would be more favorable as Δ<italic>t</italic>→0. At this point, it is important to remember that implementation of Concurrent method implies the estimation of an extra linear Kalman filter of dimension 3<italic>n</italic>, where <italic>n</italic> is the number of features ŷ<sub>L(i)</sub> in the state x̂. On the other hand, the Concurrent method is lees sensitive to the parameter Δ<italic>t</italic>. At least for this experimental setup, the average NEES for the Concurrent method, when Δ<italic>t</italic> = 1/30 (94 s of execution time), is even lower than the <italic>ε̄<sub>k</sub></italic> for the ID-Undelayed, when Δ<italic>t</italic> = 1/120 (302 s of execution time). The ID-Delayed method represents the most efficient alternative in computational cost with medium performance in average NEES terms. However the ID-Delayed method shows to be the least robust method in terms of convergence (<xref ref-type="table" rid="t3-sensors-10-01511">Table 3</xref>). The problem of convergence for the ID-Delayed method is notorious in tests (a) and (c) where Δ<italic>t</italic> is higher (1/30), these results indicate a frame-rate dependency of the method. On the other hand, for the realized tests, the Concurrent method shows the best results in terms of convergence.</p></sec></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Conclusions</title>
<p>This work proposes a novel and robust approach for initializing new features in SLAM systems based in bearing sensors. First, an overview of the problem is given and the most relevant related work is presented. Most of the methods presented in the literature can be classified into two categories: Undelayed and Delayed Methods. In that sense, an analysis of two representative methods of the aforementioned taxonomy is also presented. Undelayed methods provide information of orientation since a feature is first detected, on the other hand, Delayed methods await until some depth information is gathered, improving convergence.</p>
<p>The proposed approach in this article, the concurrent initialization method, takes the best of both, Undelayed and Delayed approaches. The key is to use two kinds of feature representations concurrently for both undelayed and delayed stages of the estimation. The simulations results, based in the average NEES test, showed that the Concurrent method can maintain the filter consistency satisfactorily. Moreover, observing the percentage of convergence, the Concurrent method appears also to be robust.</p>
<p>It is important to mention that the complexity of the Concurrent method is higher than other methods (<italic>i.e.</italic>, ID-Undelayed method) and the additional Kalman filter certainly implies an increase of computational requirements per frame. On the other hand, the Concurrent method appears to be less sensitive to the linearization errors induced for large jumps in parallax (much time between frames). In that sense the Concurrent method could be even more efficient in computational terms than other methods because it seems to work properly at low frame rate. This attribute also makes it suitable for applications where a high frame rate is not available for different reasons. The concurrent initialization method could be a robust alternative to bearing sensor based SLAM systems.</p></sec></body>
<back>
<ack>
<p>This research was conducted in the Automatic Control Department, Universitat Politecnica de Catalunya (UPC) and supported by the Spanish Ministry of Science and Innovation, UbROB Project, CICYT number DPI2007-61452.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-10-01511"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vázquez-Martín</surname><given-names>R.</given-names></name><name><surname>Núñez</surname><given-names>P.</given-names></name><name><surname>Bandera</surname><given-names>A.</given-names></name><name><surname>Sandoval</surname><given-names>F.</given-names></name></person-group><article-title>Curvature-based environment description for robot navigation using laser range sensors</article-title><source>Sensors</source><year>2009</year><volume>9</volume><fpage>5894</fpage><lpage>5918</lpage><pub-id pub-id-type="doi">10.3390/s90805894</pub-id><pub-id pub-id-type="pmid">22461732</pub-id></citation></ref>
<ref id="b2-sensors-10-01511"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Durrant-Whyte</surname><given-names>H.</given-names></name><name><surname>Bailey</surname><given-names>T.</given-names></name></person-group><article-title>Simultaneous localization and mapping: part I</article-title><source>IEEE Rob. Autom. Mag</source><year>2006</year><volume>13</volume><fpage>99</fpage><lpage>110</lpage></citation></ref>
<ref id="b3-sensors-10-01511"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bailey</surname><given-names>T.</given-names></name><name><surname>Durrant-Whyte</surname><given-names>H.</given-names></name></person-group><article-title>Simultaneous localization and mapping: part II</article-title><source>IEEE Rob. Autom. Mag</source><year>2006</year><volume>13</volume><fpage>108</fpage><lpage>117</lpage><pub-id pub-id-type="doi">10.1109/MRA.2006.1678144</pub-id></citation></ref>
<ref id="b4-sensors-10-01511"><label>4.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Davison</surname><given-names>A.</given-names></name></person-group><article-title>Real-time simultaneous localization and mapping with a single camera</article-title><conf-name>Proceedings of the ICCV’03</conf-name><conf-loc>Nice, France</conf-loc><conf-date>October 13–16, 2003</conf-date></citation></ref>
<ref id="b5-sensors-10-01511"><label>5.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Munguía</surname><given-names>R.</given-names></name><name><surname>Grau</surname><given-names>A.</given-names></name></person-group><article-title>Single sound source SLAM</article-title><source>Lecture Notes in Computer Science</source><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2008</year><volume>5197</volume><fpage>70</fpage><lpage>77</lpage></citation></ref>
<ref id="b6-sensors-10-01511"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Williams</surname><given-names>G.</given-names></name><name><surname>Klein</surname><given-names>G.</given-names></name><name><surname>Reid</surname><given-names>D.</given-names></name></person-group><article-title>Real-time SLAM relocalisation</article-title><conf-name>Proceedings of the ICCV’07</conf-name><conf-loc>Rio de Janeiro, Brazil</conf-loc><conf-date>October 14–20, 2007</conf-date></citation></ref>
<ref id="b7-sensors-10-01511"><label>7.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Chekhlov</surname><given-names>D.</given-names></name><name><surname>Pupilli</surname><given-names>M.</given-names></name><name><surname>Mayol-Cuevas</surname><given-names>W.</given-names></name><name><surname>Calway</surname><given-names>A.</given-names></name></person-group><article-title>Real-time and robust monocular SLAM using predictive multi-resolution descriptors</article-title><source>Advances in Visual Computing</source><publisher-name>Springer Berlin/Heidelberg</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2006</year><fpage>276</fpage><lpage>285</lpage></citation></ref>
<ref id="b8-sensors-10-01511"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Munguía</surname><given-names>R.</given-names></name><name><surname>Grau</surname><given-names>A.</given-names></name></person-group><article-title>Closing loops with a virtual sensor based on monocular SLAM</article-title><source>IEEE Trans. Instrum. Measure</source><year>2009</year><volume>58</volume><fpage>2377</fpage><lpage>2385</lpage><pub-id pub-id-type="doi">10.1109/TIM.2009.2016377</pub-id></citation></ref>
<ref id="b9-sensors-10-01511"><label>9.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Deans</surname><given-names>H.</given-names></name><name><surname>Martial</surname><given-names>M.</given-names></name></person-group><article-title>Experimental comparison of techniques for localization and mapping using a bearing-only sensor</article-title><conf-name>Proceedings of International Symposium on Experimental Robotic</conf-name><conf-loc>Waikiki, HI, USA</conf-loc><conf-date>December 11–13, 2000</conf-date></citation></ref>
<ref id="b10-sensors-10-01511"><label>10.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Strelow</surname><given-names>S.</given-names></name><name><surname>Sanjiv</surname><given-names>D.</given-names></name></person-group><article-title>Online motion estimation from image and inertial measurements</article-title><conf-name>Proceedings of Workshop on Integration of Vision and Inertial Sensors (INERVIS’03)</conf-name><conf-loc>Coimbra, Portugal</conf-loc><conf-date>June 2003</conf-date></citation></ref>
<ref id="b11-sensors-10-01511"><label>11.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Bailey</surname><given-names>T.</given-names></name></person-group><article-title>Constrained initialisation for Bearing-Only SLAM</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation (ICRA’03)</conf-name><conf-loc>Taipei, Taiwan</conf-loc><conf-date>September 14–19, 2003</conf-date></citation></ref>
<ref id="b12-sensors-10-01511"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kwok</surname><given-names>N.M.</given-names></name><name><surname>Dissanayake</surname><given-names>G.</given-names></name></person-group><article-title>Bearing-only SLAM in indoor environments</article-title><conf-name>Proceedings of Australasian Conference on Robotics and Automation</conf-name><conf-loc>Brisbane, Australia</conf-loc><conf-date>December 1–3, 2003</conf-date></citation></ref>
<ref id="b13-sensors-10-01511"><label>13.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kwok</surname><given-names>N.M.</given-names></name><name><surname>Dissanayake</surname><given-names>G.</given-names></name></person-group><article-title>An efficient multiple hypotheses filter for bearing-only SLAM</article-title><conf-name>Proceedings of International Conference on Intelligent Robots and Systems (IROS’04)</conf-name><conf-loc>Sendai, Japan</conf-loc><conf-date>September 28–October 2, 2004</conf-date></citation></ref>
<ref id="b14-sensors-10-01511"><label>14.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kwok</surname><given-names>N.M.</given-names></name><name><surname>Dissanayake</surname><given-names>G.</given-names></name></person-group><article-title>Bearing-only SLAM using a SPRT based gaussian sum filter</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation (ICRA’05)</conf-name><conf-loc>Barcelona, Spain</conf-loc><conf-date>April 18–22, 2005</conf-date></citation></ref>
<ref id="b15-sensors-10-01511"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Peach</surname><given-names>N.</given-names></name></person-group><article-title>Bearing-only tracking using a set of range-parametrised extended Kalman filters</article-title><source>IEE Proc. Control Theory Appl</source><year>1995</year><volume>142</volume><fpage>21</fpage><lpage>80</lpage></citation></ref>
<ref id="b16-sensors-10-01511"><label>16.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Davison</surname><given-names>A.</given-names></name><name><surname>Gonzalez</surname><given-names>Y.</given-names></name><name><surname>Kita</surname><given-names>N.</given-names></name></person-group><article-title>Real-Time 3D SLAM with wide-angle vision</article-title><conf-name>Proceedings of IFAC Symposium on Intelligent Autonomous Vehicles</conf-name><conf-loc>Lisbon, Portugal</conf-loc><conf-date>July 5–7, 2004</conf-date></citation></ref>
<ref id="b17-sensors-10-01511"><label>17.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Jensfelt</surname><given-names>P.</given-names></name><name><surname>Folkesson</surname><given-names>J.</given-names></name><name><surname>Kragic</surname><given-names>D.</given-names></name><name><surname>Christensen</surname><given-names>H.</given-names></name></person-group><article-title>Exploiting distinguishable image features in robotics mapping and localization</article-title><conf-name>Proceedings of European Robotics Symposium</conf-name><conf-loc>Palermo, Italy</conf-loc><conf-date>March 16–17, 2006</conf-date></citation></ref>
<ref id="b18-sensors-10-01511"><label>18.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Sola</surname><given-names>J.</given-names></name><name><surname>Devy</surname><given-names>M.</given-names></name><name><surname>Monin</surname><given-names>A.</given-names></name><name><surname>Lemaire</surname><given-names>T.</given-names></name></person-group><article-title>Undelayed initialization in bearing only SLAM</article-title><conf-name>Proceedings of IEEE International Conference on Intelligent Robots and Systems</conf-name><conf-loc>Edmonton, Canada</conf-loc><conf-date>August 2–6, 2005</conf-date></citation></ref>
<ref id="b19-sensors-10-01511"><label>19.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lemaire</surname><given-names>T.</given-names></name><name><surname>Lacroix</surname><given-names>S.</given-names></name><name><surname>Sola</surname><given-names>J.</given-names></name></person-group><article-title>A practical bearing-only SLAM algorithm</article-title><conf-name>Proceedings of IEEE International Conference on Intelligent Robots and Systems</conf-name><conf-loc>Edmonton, Canada</conf-loc><conf-date>August 2–6, 2005</conf-date></citation></ref>
<ref id="b20-sensors-10-01511"><label>20.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Eade</surname><given-names>E.</given-names></name><name><surname>Drummond</surname><given-names>T.</given-names></name></person-group><article-title>Scalable monocular SLAM</article-title><conf-name>Proceedings of IEEE Computer Vision and Pattern Recognition</conf-name><conf-loc>New York, NY, USA</conf-loc><conf-date>June 17–22, 2006</conf-date></citation></ref>
<ref id="b21-sensors-10-01511"><label>21.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Montemerlo</surname><given-names>M.</given-names></name><name><surname>Thrun</surname><given-names>S.</given-names></name><name><surname>Koller</surname><given-names>D.</given-names></name><name><surname>Wegbreit</surname><given-names>B.</given-names></name></person-group><article-title>FastSLAM: Factored solution to the simultaneous localization and mapping problem</article-title><conf-name>Proceedings of National Conference on Artificial Intelligence</conf-name><conf-loc>Edmonton, AB, Canada</conf-loc><conf-date>July 28–29, 2002</conf-date></citation></ref>
<ref id="b22-sensors-10-01511"><label>22.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Montiel</surname><given-names>J.M.M.</given-names></name><name><surname>Civera</surname><given-names>J.</given-names></name><name><surname>Davison</surname><given-names>A.</given-names></name></person-group><article-title>Unified inverse depth parametrization for monocular SLAM</article-title><conf-name>Proceedings of Robotics: Science and Systems Conference</conf-name><conf-loc>Philadelphia, PA, USA</conf-loc><conf-date>August 16–19, 2006</conf-date></citation></ref>
<ref id="b23-sensors-10-01511"><label>23.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Munguía</surname><given-names>R.</given-names></name><name><surname>Grau</surname><given-names>A.</given-names></name></person-group><article-title>Delayed inverse depth monocular SLAM</article-title><conf-name>Proceedings of the 17th IFAC World Congress</conf-name><conf-loc>Coex, Seoul, Korea</conf-loc><conf-date>July 6–11, 2008</conf-date></citation></ref>
<ref id="b24-sensors-10-01511"><label>24.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Andrade-Cetto</surname><given-names>J.</given-names></name><name><surname>Sanfeliu</surname><given-names>A.</given-names></name></person-group><source>Environment Learning for Indoor Mobile Robots. A Stochastic State Estimation Approach to Simultaneous Localization and Map Building (Springer Tracts in Advanced Robotics)</source><publisher-name>Springer</publisher-name><publisher-loc>Berlin, Germany</publisher-loc><year>2006</year><volume>23</volume></citation></ref>
<ref id="b25-sensors-10-01511"><label>25.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Montiel</surname><given-names>J.M.M.</given-names></name><name><surname>Davison</surname><given-names>A.</given-names></name></person-group><article-title>Visual compass based on SLAM</article-title><conf-name>Proceedings of IEEE International Conference on Robotics and Automation</conf-name><conf-loc>Orlando, FL, USA</conf-loc><conf-date>May 15–19, 2006</conf-date></citation></ref>
<ref id="b26-sensors-10-01511"><label>26.</label><citation citation-type="book"><person-group person-group-type="author"><name><surname>Bar-Shalom</surname><given-names>Y.</given-names></name><name><surname>Li</surname><given-names>X.R.</given-names></name><name><surname>Kirubarajan</surname><given-names>T.</given-names></name></person-group><source>Estimation with Applications to Tracking and Navigation</source><publisher-name>John Wiley &amp; Sons</publisher-name><publisher-loc>Hoboken, NJ, USA</publisher-loc><year>2001</year></citation></ref>
<ref id="b27-sensors-10-01511"><label>27.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Bailey</surname><given-names>T.</given-names></name><name><surname>Nieto</surname><given-names>J.</given-names></name><name><surname>Guivant</surname><given-names>J.</given-names></name><name><surname>Stevens</surname><given-names>M.</given-names></name><name><surname>Nebot</surname><given-names>E.</given-names></name></person-group><article-title>Consistency of the ekf-slam algorithm</article-title><conf-name>Proceedings of IEEE International Conference on Intelligent Robots and Systems</conf-name><conf-loc>Beijing, China</conf-loc><conf-date>December 4–6, 2006</conf-date></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures and Tables</title>
<fig id="f1-sensors-10-01511" position="float">
<label>Figure 1.</label>
<caption>
<p>Inverse depth parameterization.</p></caption>
<graphic xlink:href="sensors-10-01511f1.gif"/></fig>
<fig id="f2-sensors-10-01511" position="float">
<label>Figure 2.</label>
<caption>
<p>Simulation of a point reconstruction from observations with different parallax.</p></caption>
<graphic xlink:href="sensors-10-01511f2.gif"/></fig>
<fig id="f3-sensors-10-01511" position="float">
<label>Figure 3.</label>
<caption>
<p>Some issues of the ID-Undelayed initialization.</p></caption>
<graphic xlink:href="sensors-10-01511f3.gif"/></fig>
<fig id="f4-sensors-10-01511" position="float">
<label>Figure 4.</label>
<caption>
<p>ID-Delayed parameterization.</p></caption>
<graphic xlink:href="sensors-10-01511f4.gif"/></fig>
<fig id="f5-sensors-10-01511" position="float">
<label>Figure 5.</label>
<caption>
<p>Concurrent initialization process.</p></caption>
<graphic xlink:href="sensors-10-01511f5.gif"/></fig>
<fig id="f6-sensors-10-01511" position="float">
<label>Figure 6.</label>
<caption>
<p>Parallax and depth estimations for a distant and a close feature.</p></caption>
<graphic xlink:href="sensors-10-01511f6.gif"/></fig>
<fig id="f7-sensors-10-01511" position="float">
<label>Figure 7.</label>
<caption>
<p>Sequence illustrating the concurrent initialization process: (a) beginning of initialization; (b) initialization process at step 100; (c) initialization process at step 250.</p></caption>
<graphic xlink:href="sensors-10-01511f7.gif"/></fig>
<fig id="f8-sensors-10-01511" position="float">
<label>Figure 8.</label>
<caption>
<p>SLAM simulation using the concurrent initialization method.</p></caption>
<graphic xlink:href="sensors-10-01511f8.gif"/></fig>
<fig id="f9-sensors-10-01511" position="float">
<label>Figure 9.</label>
<caption>
<p>Comparison of the average NEES for ID-Undelayed, ID-Delayed and Concurrent methods.</p></caption>
<graphic xlink:href="sensors-10-01511f9.gif"/></fig>
<table-wrap id="t1-sensors-10-01511" position="float">
<label>Table 1.</label>
<caption>
<p>Summary of methods.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Approach</bold></th>
<th align="center" valign="middle"><bold>Delayed / Undelayed</bold></th>
<th align="center" valign="middle"><bold>Initial representation</bold></th>
<th align="center" valign="middle"><bold>Estimation</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">Deans [<xref ref-type="bibr" rid="b9-sensors-10-01511">9</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Bundle adjustment</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Strelow [<xref ref-type="bibr" rid="b10-sensors-10-01511">10</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Triangulation</td>
<td align="center" valign="top">IEKF</td></tr>
<tr>
<td align="center" valign="top">Bailey [<xref ref-type="bibr" rid="b11-sensors-10-01511">11</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Triangulation</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Davison [<xref ref-type="bibr" rid="b16-sensors-10-01511">16</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Multi-Hypotheses</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Kwok (a) [<xref ref-type="bibr" rid="b13-sensors-10-01511">13</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Multi-Hypotheses</td>
<td align="center" valign="top">PF</td></tr>
<tr>
<td align="center" valign="top">Kwok (b) [<xref ref-type="bibr" rid="b14-sensors-10-01511">14</xref>]</td>
<td align="center" valign="top">Undelayed</td>
<td align="center" valign="top">Multi-Hypotheses</td>
<td align="center" valign="top">PF</td></tr>
<tr>
<td align="center" valign="top">Sola [<xref ref-type="bibr" rid="b18-sensors-10-01511">18</xref>]</td>
<td align="center" valign="top">Undelayed</td>
<td align="center" valign="top">Multi-Hypotheses</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Lemaire [<xref ref-type="bibr" rid="b19-sensors-10-01511">19</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Multi-Hypotheses</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Jensfelt [<xref ref-type="bibr" rid="b17-sensors-10-01511">17</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Triangulation</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Eade [<xref ref-type="bibr" rid="b20-sensors-10-01511">20</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Single Hypotheses</td>
<td align="center" valign="top">FastSLAM</td></tr>
<tr>
<td align="center" valign="top">Montiel [<xref ref-type="bibr" rid="b22-sensors-10-01511">22</xref>]</td>
<td align="center" valign="top">Undelayed</td>
<td align="center" valign="top">Single Hypotheses</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top">Munguía[<xref ref-type="bibr" rid="b23-sensors-10-01511">23</xref>]</td>
<td align="center" valign="top">Delayed</td>
<td align="center" valign="top">Triang.- S. Hypotheses</td>
<td align="center" valign="top">EKF</td></tr>
<tr>
<td align="center" valign="top"><bold>This work</bold></td>
<td align="center" valign="top">Delayed-Undelayed</td>
<td align="center" valign="top">KF-Triang.- S.</td>
<td align="center" valign="top">EKF</td></tr></tbody></table></table-wrap>
<table-wrap id="t2-sensors-10-01511" position="float">
<label>Table 2.</label>
<caption>
<p>Setup of the tests.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="middle"><bold>Test</bold></th>
<th align="center" valign="middle"><bold><italic>a</italic><sup>W</sup><sub>x</sub></bold></th>
<th align="center" valign="middle"><bold><italic>a</italic><sup>W</sup><sub>y</sub></bold></th>
<th align="center" valign="middle"><bold><italic>a</italic><sup>W</sup><sub>θ</sub></bold></th>
<th align="center" valign="middle"><bold>Δ<italic>t</italic></bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top"><bold>a</bold></td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">1/30</td></tr>
<tr>
<td align="center" valign="top"><bold>b</bold></td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">1/120</td></tr>
<tr>
<td align="center" valign="top"><bold>c</bold></td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">1/30</td></tr>
<tr>
<td align="center" valign="top"><bold>d</bold></td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">6</td>
<td align="center" valign="top">3</td>
<td align="center" valign="top">1/120</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-10-01511" position="float">
<label>Table 3.</label>
<caption>
<p>Execution time &amp; Failed attempts.</p></caption>
<table frame="hsides" rules="groups">
<thead>
<tr>
<th align="center" valign="top"><bold>Method</bold></th>
<th align="center" valign="top">Δ<italic>t</italic> = 1/30</th>
<th align="center" valign="top">Δ<italic>t</italic> = 1/120</th>
<th align="center" valign="top"><bold>a</bold></th>
<th align="center" valign="top"><bold>b</bold></th>
<th align="center" valign="top"><bold>c</bold></th>
<th align="center" valign="top"><bold>d</bold></th></tr></thead>
<tbody>
<tr>
<td align="center" valign="top">ID-Undelayed</td>
<td align="center" valign="top">76s</td>
<td align="center" valign="top">302s</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">1</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">2</td></tr>
<tr>
<td align="center" valign="top">ID-Delayed</td>
<td align="center" valign="top">60s</td>
<td align="center" valign="top">235s</td>
<td align="center" valign="top">9</td>
<td align="center" valign="top">2</td>
<td align="center" valign="top">11</td>
<td align="center" valign="top">4</td></tr>
<tr>
<td align="center" valign="top">Concurrent</td>
<td align="center" valign="top">94s*</td>
<td align="center" valign="top">376s*</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td>
<td align="center" valign="top">0</td></tr></tbody></table></table-wrap></sec></back></article>
