<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Control. Eng.</journal-id>
<journal-title>Frontiers in Control Engineering</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Control. Eng.</abbrev-journal-title>
<issn pub-type="epub">2673-6268</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">786188</article-id>
<article-id pub-id-type="doi">10.3389/fcteg.2021.786188</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Control Engineering</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>An Online Interval-Based Inertial Navigation System for Control Purposes of Autonomous Boats</article-title>
<alt-title alt-title-type="left-running-head">Le Bars et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Online Interval INS for Autonomous Boats</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Le Bars</surname>
<given-names>Fabrice</given-names>
</name>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1411214/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Sanchez&#x2009;</surname>
<given-names>Robin</given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Jaulin&#x2009;</surname>
<given-names>Luc</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/1355084/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Rohou&#x2009;</surname>
<given-names>Simon</given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Rauh&#x2009;</surname>
<given-names>Andreas</given-names>
</name>
<xref ref-type="fn" rid="fn1">
<sup>&#x2020;</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1037513/overview"/>
</contrib>
</contrib-group>
<aff>
<institution>Lab-STICC</institution>, <institution>ROBEX</institution>, <institution>ENSTA Bretagne</institution>, <addr-line>Brest</addr-line>, <country>France</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/978987/overview">Mudassir Rashid</ext-link>, Illinois Institute of Technology, United&#x20;States</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1517948/overview">Jos&#xe9; Carlos Alves</ext-link>, University of Porto, Portugal</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/472563/overview">Sunan Huang</ext-link>, National University of Singapore, Singapore</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Fabrice Le Bars, <email>fabrice.le_bars@ensta-bretagne.org</email>
</corresp>
<fn fn-type="present-address" id="fn1">
<label>
<sup>&#x2020;</sup>
</label>
<p>
<bold>Present address:</bold> Andreas Rauh, Department of Computing Science, Carl von Ossietzky Universit&#xe4;t Oldenburg, Group: Distributed Control in Interconnected Systems, Oldenburg, Germany</p>
</fn>
<fn fn-type="other">
<p>This article was submitted to Adaptive, Robust and Fault Tolerant Control, a section of the journal Frontiers in Control Engineering</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>04</day>
<month>03</month>
<year>2022</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>2</volume>
<elocation-id>786188</elocation-id>
<history>
<date date-type="received">
<day>29</day>
<month>09</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>20</day>
<month>12</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2022 Le Bars, Sanchez&#x2009;, Jaulin&#x2009;, Rohou&#x2009; and Rauh&#x2009;.</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>Le Bars, Sanchez&#x2009;, Jaulin&#x2009;, Rohou&#x2009; and Rauh&#x2009;</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>Interval analysis is a numerical tool classically used for solving nonlinear equations in a guaranteed way. It has been shown that it can be used to build reliable nonlinear state estimators for dynamical systems. Numerous simulations inspired from real-life applications have shown the applicability of the approach. This paper proposes to implement an interval-based INS (Inertial Navigation System) in an actual robot to estimate its orientation and position. It shows that some types of outliers can be naturally handled by the fusion algorithm, while the resulting controller can be both fast and reliable. Experiments with an actual autonomous boat conclude this article.</p>
</abstract>
<kwd-group>
<kwd>state estimation</kwd>
<kwd>interval</kwd>
<kwd>robotics</kwd>
<kwd>attitude and heading reference systems</kwd>
<kwd>inertial navigation systems</kwd>
<kwd>robustness against outliers</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>In mobile robotics, state estimation is often a tedious problem [see, e.g., <xref ref-type="bibr" rid="B44">Rohou et&#x20;al. (2019)</xref>]. Indeed, estimating especially the position and the attitude of a robot is a common task usually handled nowadays by off-the-shelf AHRS/INS [Attitude and Heading Reference System/Inertial Navigation System, such as <xref ref-type="bibr" rid="B46">SBG Systems (2021)</xref> and <xref ref-type="bibr" rid="B17">iXBlue (2021)</xref>] or autopilots [cf. <xref ref-type="bibr" rid="B30">Meier et&#x20;al. (2011)</xref>; <xref ref-type="bibr" rid="B14">Dronecode (2021)</xref>; <xref ref-type="bibr" rid="B1">ArduPilot (2021a)</xref>; <xref ref-type="bibr" rid="B33">Paparazzi UAV (2021)</xref>], but the best of them run proprietary fusion algorithms that are often not extensively described, while the cheapest of them may run simple ones from the literature. Since there are more and more internal and external sensors that could be easily available to fuse data and estimate the attitude, and whenever possible, the position, different fusion methods can be used to try to estimate the true but unknown values as closely as possible taking into account numerous of the following limitations or criteria:<list list-type="simple">
<list-item>
<p>&#x2022; Cost, dimension, weight, mutual disturbances, etc., of the sensors.</p>
</list-item>
<list-item>
<p>&#x2022; Nonlinear relations between the different state variables, inputs, or outputs.</p>
</list-item>
<list-item>
<p>&#x2022; Difficulty to find an accurate representation of the sensors and modeling errors.</p>
</list-item>
<list-item>
<p>&#x2022; Depending on the situation, unforeseen problems may occur, leading to outliers, or to a deterioration of the sensor quality that cannot be explained from a physical point of&#x20;view.</p>
</list-item>
</list>
</p>
<p>For a mobile robot designed for exploration (UAV, USV, UGV, or UUV<xref ref-type="fn" rid="fn2">
<sup>1</sup>
</xref>), there are several variables that we typically need to estimate, using different sensors or methods given here in a decreasing order of priority in typical conditions and with possible validity checks when available:<list list-type="simple">
<list-item>
<p>&#x2022; Heading:</p>
<list list-type="simple">
<list-item>
<p>&#x2022; True heading (usually with respect to the direction of the geographic North) can be computed by high-quality accelerometers and gyrometers such as those described in <xref ref-type="bibr" rid="B34">Paturel et&#x20;al. (2015)</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; For an outdoor mobile robot, true heading can also be obtained from a dual GPS<xref ref-type="fn" rid="fn3">
<sup>2</sup>
</xref>. Its validity depends usually on the number of visible GPS satellites, the level of reception, and the number of multipaths, which can be validated against the length between antennas that can be measured with a reasonable accuracy most of the time (this distance should be a constant, so even in cases when the user specified wrong values, this can still be a valuable validation condition). Also, the altitude difference between antennas can be compared with roll and pitch estimations, which can also be used to check that the GPS antennas are globally directed toward the sky (cf. <xref ref-type="bibr" rid="B2">ArduPilot 2021b)</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; By integration of low-cost gyrometer values (a calibration procedure to estimate the bias is usually necessary) and with a known reference for a short time of integration. Saturations (e.g., due to fast movement or shocks) should be detected to validate the estimates.</p>
</list-item>
<list-item>
<p>&#x2022; Magnetometers, if there is a good hard and soft calibration [cf. <xref ref-type="bibr" rid="B36">Promotion 2021, Robotique autonome (2021)</xref>] and an absence of dynamic magnetic disturbances (or a method to eliminate them from the data, e.g., by removing magnetometer spikes that are not consistent with the integration of gyrometer signals during a short time; knowing the magnetic vector in the area can also help), known magnetic declination (which assumes that the position and date are roughly known, which can be reasonably assumed for experiments in a limited area during several days, or if we have GPS data).</p>
</list-item>
<list-item>
<p>&#x2022; GPS COG (Course Over Ground), if it can be assumed that the vehicle should not have significant lateral movements.</p>
</list-item>
<list-item>
<p>&#x2022; Visual sensors, 2D lidars, sonars, or radars can sometimes also be used to improve the accuracy or to check the validity of the other sensors.</p>
</list-item>
</list>
</list-item>
<list-item>
<p>&#x2022; Roll and pitch:</p>
<list list-type="simple">
<list-item>
<p>&#x2022; A combination of three low-cost accelerometers together with gyrometers [see, e.g., <xref ref-type="bibr" rid="B29">Mahony et&#x20;al. (2008)</xref>, <xref ref-type="bibr" rid="B35">Premerlani and Bizard (2009)</xref>, and <xref ref-type="bibr" rid="B4">Bonargent et&#x20;al. (2020)</xref>]. This might require basic bias calibration, and some movement conditions might cause problems during initialization (related to the estimation of the gravity vector direction in the sensor data), even though those situations are commonly unlikely. Saturations also need to be checked.</p>
</list-item>
<list-item>
<p>&#x2022; Triple GPS can be used by following the same idea already employed to estimate the heading. As suggested before, the initialization phase for the roll and pitch estimation from accelerometers and gyrometers might be sensitive to movement conditions, while the triple GPS might be robust against some of them, e.g., in the case where an AHRS restarts unexpectedly in the middle of a quadrotor flight.</p>
</list-item>
<list-item>
<p>&#x2022; Rotation speeds: gyrometers are the typical way to get a quite robust estimate. They are typically necessary for the derivative term of PID (Proportional Integral Derivative) controllers.</p>
</list-item>
</list>
</list-item>
<list-item>
<p>&#x2022; Altitude:</p>
<list list-type="simple">
<list-item>
<p>&#x2022; GPS is able to get the altitude with a limited accuracy (10&#x2013;20&#xa0;m) in standard mode, a centimeter accuracy if RTK (Real-Time Kinematic) corrections are available.</p>
</list-item>
<list-item>
<p>&#x2022; Relative altitude measurements (e.g., above ground or sea floor, or sea surface): lidar, echosounder, DVL (Doppler Velocity Log), or sonar.</p>
</list-item>
<list-item>
<p>&#x2022; Pressure-based altitude measurements (depth when underwater): pressure sensor.</p>
</list-item>
</list>
</list-item>
<list-item>
<p>&#x2022; Position: GPS, visual, lidar, radar distance, and/or angle sensors, see, e.g., the instantaneous localization techniques in <xref ref-type="bibr" rid="B21">Jaulin (2015)</xref>.</p>
</list-item>
<list-item>
<p>&#x2022; Speed: GPS, odometers, DVL, good quality accelerometers if there is a precise calibration and known reference with a short time of integration, or relative sensors. Note that depending on the sensors, it can be a speed with respect to ground, surface, or a fluid, and since it can be expressed in the robot coordinate system, a precise knowledge of the Euler angles (heading, roll, pitch, usually expressed as a rotation matrix) of the robot might be necessary to correctly estimate the absolute&#x20;speed.</p>
</list-item>
<list-item>
<p>&#x2022; Air/water speed: Pitot tubes, propeller log, electromagnetic speed log, or DVL.</p>
</list-item>
</list>
</p>
<p>As fallback, an initial state and some prediction model need to be found in case some necessary variables cannot be estimated by any sensor. Also, some variables are often correlated although not theoretically equal (e.g., pressure-based altitude vs. altitude with respect to ground vs. altitude provided by GPS), which leads to the necessity to sometimes make strong assumptions and approximations to be able to fuse them. Among the state variables described, the ones that are often the most sensitive in typical applications are the heading and the position, which, therefore, will be specifically studied in this paper. Indeed, they are prone to outliers when using low-cost sensors, or sensors are not easily available to measure them directly. A wrong estimation can easily cause the failure of the mission and even the loss of the&#x20;robot.</p>
<p>Data fusion, uncertainty representation, and somehow inconsistencies are typically handled through Kalman filter-based techniques see (<xref ref-type="bibr" rid="B23">Kalman 1960)</xref>. In this framework, good models with few nonlinearities are often required to get the best behavior, and uncertain variables are assumed to follow a Gaussian distribution, which can be represented through covariance matrices together with the state-space model of the robot. A Kalman filter-based solution is most of the time able to provide precise estimates; however, it is not much designed to detect inconsistencies and warn the user about it, so usually, those kinds of problems need to be handled as special cases, e.g., by multihypothesis filters in the embedded software (see also <xref ref-type="bibr" rid="B49">Xiong et&#x20;al. (2013)</xref>, where an interval Kalman filter is proposed in a context of fault detection).</p>
<p>In this paper, we propose to show how data fusion and inconsistencies can be dealt with naturally using interval analysis. The purpose is to show how interval methods could be used to better fit the requirements of a specific application. The fusion method based on interval arithmetic should be able to:<list list-type="simple">
<list-item>
<p>i) Determine better when there are sensors that contradict each other and, whenever possible, which or what to output.</p>
</list-item>
<list-item>
<p>ii) Estimate more reliably the uncertainties considering bounded sensor errors as well as some data transmission delays, to get a safer navigation for the mobile&#x20;robot.</p>
</list-item>
</list>
</p>
<p>The results of experiments made with an autonomous boat designed for the exploration of rivers will be provided to visualize the proposed fusion procedure.</p>
<p>The <italic>Materials and methods</italic> section will present interval analysis and its use in the development of a simple interval-based INS designed for the reliable heading and position estimation of an autonomous boat. To validate the concept, comparisons with existing INS will be presented, and a focus on specific scenarios, where inconsistencies could occur, will be made. As prerequisite to build an observer and controller for real experiments, simulated state equations will be given. Finally, the <italic>Results</italic> section will show the results of a survey of a river made with the autonomous boat, and postprocessing methods will be proposed to estimate reliably the position of the robot during the experiment. The <italic>Conclusions and outlook on future work</italic> section will conclude the&#x20;paper.</p>
</sec>
<sec id="s2">
<title>2 Materials and Methods</title>
<p>The representation of uncertainties can be made in different ways. In this section, we will present interval methods and show how they can be applied to the problem of heading and position estimation of a real autonomous boat. First, the <italic>Interval analysis</italic> section will describe the main concepts of interval analysis. Then a simple example (strongly related to our application) in the <italic>Data fusion with interval analysis</italic> section will detail how we can easily make data fusion with interval methods. Since inconsistencies may occur in any fusion process, the <italic>Dealing with inconsistencies</italic> section will demonstrate that by design, any interval fusion algorithm forces to think about countermeasures against inconsistencies and, in that way, helps to make the underlying system more reliable. The real system (an autonomous boat) used in the <italic>Results</italic> section to validate experimentally the methods will be presented in the <italic>Description of the autonomous boat</italic> section. The formalization of the interval-based heading estimation algorithm will be given in the <italic>Interval-based inertial navigation system</italic> section, together with some comparative tests to preliminary check its practical functioning before using it on a real autonomous robot. The <italic>Jet-boat simulator</italic> section will propose a dynamic model for our boat, which will be used in the <italic>Results</italic> section to get an interval-based position estimation using the same principle as the previously described interval-based heading estimation algorithm.</p>
<sec id="s2-1">
<title>2.1 Interval Analysis</title>
<p>An <italic>interval</italic> [see, e.g., <xref ref-type="bibr" rid="B31">Moore (1979)</xref> and <xref ref-type="bibr" rid="B18">Jaulin et&#x20;al. (2001)</xref>] is a closed connected subset of <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>. <inline-formula id="inf2">
<mml:math id="m2">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1,2</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x221e;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, <inline-formula id="inf3">
<mml:math id="m3">
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, and &#x2205; are examples of intervals from the set of real-valued intervals denoted <inline-formula id="inf4">
<mml:math id="m4">
<mml:mi mathvariant="double-struck">IR</mml:mi>
</mml:math>
</inline-formula>. If <italic>x</italic> is a variable of <inline-formula id="inf5">
<mml:math id="m5">
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, the interval containing its possible values will be denoted as <inline-formula id="inf6">
<mml:math id="m6">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where <italic>x</italic>
<sup>&#x2212;</sup> is the <italic>lower bound</italic>, <italic>x</italic>
<sup>&#x2b;</sup> the <italic>upper bound</italic>, <inline-formula id="inf7">
<mml:math id="m7">
<mml:mi mathvariant="normal">m</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> its <italic>center</italic>, and <inline-formula id="inf8">
<mml:math id="m8">
<mml:mi>w</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> its width. Typical set operations such as &#x22c2; and &#x22c3; can be defined; note, however, that a specific union operation &#x2a06; is often defined to ensure that the results always stay in <inline-formula id="inf9">
<mml:math id="m9">
<mml:mi mathvariant="double-struck">IR</mml:mi>
</mml:math>
</inline-formula>. One major advantage of intervals is they can be manipulated easily using an arithmetic, e.g., if &#x22c4; &#x2208; { &#x2b;, &#x2212;, &#x22c5;,/} and <inline-formula id="inf10">
<mml:math id="m10">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c4;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is defined as the tightest interval which contains all feasible values for <italic>x</italic>&#x22c4;<italic>y</italic>, it is straightforward that we have <inline-formula id="inf11">
<mml:math id="m11">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1,2</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c5;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>1,2</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1,1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2,4</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1,1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3,5</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Additionally, functions of intervals can also be defined, e.g., <inline-formula id="inf12">
<mml:math id="m12">
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> (see, e.g., <xref ref-type="bibr" rid="B39">Revol 2001)</xref>. One difficulty is, however, to ensure that the interval used to represent an unknown variable encloses it as tightly as possible to avoid <italic>overestimation</italic>. This can easily happen when performing interval computations if an interval occurs multiple times in an expression to be evaluated. In such cases, factorization techniques need to be used to limit that effect<xref ref-type="fn" rid="fn4">
<sup>3</sup>
</xref>. Intervals are not limited to enclose real numbers. Interval vectors (usually named <italic>boxes</italic>) and intervals of trajectories (<italic>tubes</italic>) can also be manipulated in a similar way (see <xref ref-type="bibr" rid="B42">Rohou et&#x20;al. 2017)</xref>.</p>
<p>Interval analysis has already been widely used for dynamical systems [cf. <xref ref-type="bibr" rid="B37">Rauh and Auer (2010)</xref>; <xref ref-type="bibr" rid="B16">Ifqir et&#x20;al. (2019)</xref>] and, in particular, in state estimation problems for real robots, such as indoor localization [cf. <xref ref-type="bibr" rid="B10">Desrochers et&#x20;al. (2015)</xref>], outdoor localization [cf. <xref ref-type="bibr" rid="B12">Drevelle and Bonnifait (2013)</xref>], outlier handling [cf. <xref ref-type="bibr" rid="B32">Mourad-Chehade et&#x20;al. (2012)</xref>; <xref ref-type="bibr" rid="B40">Reynet et&#x20;al. (2009)</xref>], validation of controllers [cf. <xref ref-type="bibr" rid="B20">Jaulin and Le Bars (2012b)</xref>], etc. An application to the heading estimation with the aid of a camera has also been made in <xref ref-type="bibr" rid="B47">Voges and Wagner (2018)</xref>.</p>
</sec>
<sec id="s2-2">
<title>2.2 Data Fusion with Interval Analysis</title>
<p>Assume that you have a sensor, e.g., a compass, and another algorithm able to estimate the heading of the robot. The compass estimates an angle of 8&#xb0;, and its documentation suggests its error is likely to be within 2&#xb0;; therefore, we will represent its information with the interval <inline-formula id="inf13">
<mml:math id="m13">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,10</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. There is a bias between the compass and the robot of <inline-formula id="inf14">
<mml:math id="m14">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>&#x2009;&#xb0;, and the other algorithm estimates a heading for the robot of, e.g., <inline-formula id="inf15">
<mml:math id="m15">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>4,7</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>&#x2009;&#xb0;. Therefore, the variables <italic>x</italic>
<sub>1</sub>, <italic>x</italic>
<sub>2</sub>, and <italic>x</italic>
<sub>3</sub> are linked by the equation <italic>x</italic>
<sub>1</sub>&#xa0;&#x2b;&#xa0;<italic>x</italic>
<sub>2</sub>&#xa0;&#x3d;&#xa0;<italic>x</italic>
<sub>3</sub>, which implies<disp-formula id="equ1">
<mml:math id="m16">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>4,7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,10</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>4,7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,12</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,7</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>
<disp-formula id="equ2">
<mml:math id="m17">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,10</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>4,7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,10</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>2,7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,7</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>
<disp-formula id="equ3">
<mml:math id="m18">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,2</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>4,7</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>6,10</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,2</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x22c2;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>6,1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>These interval operations improve the estimation of all variables, especially the robot heading and the compass bias [note that in practice, we would need to take care of modulo 360&#xb0; problems when manipulating angles (see <xref ref-type="bibr" rid="B8">Desrochers and Jaulin 2016b)</xref>]. The procedure of refining the knowledge about <italic>x</italic>
<sub>1</sub>, <italic>x</italic>
<sub>2</sub>, and <italic>x</italic>
<sub>3</sub> is called <italic>contraction</italic>, and the corresponding operator is called a <italic>contractor</italic> (see <xref ref-type="bibr" rid="B7">Chabert and Jaulin 2009)</xref>. Its practical usage is simplified using the work of <xref ref-type="bibr" rid="B6">Chabert (2021)</xref> and especially <xref ref-type="bibr" rid="B11">Desrochers (2021)</xref>, or its generalization by <xref ref-type="bibr" rid="B41">Rohou (2021)</xref> <xref ref-type="fn" rid="fn5">
<sup>4</sup>
</xref>. Note that when we lack <italic>a priori</italic> knowledge about a variable, its corresponding interval needs to be initialized to <inline-formula id="inf16">
<mml:math id="m19">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x221e;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> before starting the contraction procedure, but most of the time bounded limits should be&#x20;known.</p>
</sec>
<sec id="s2-3">
<title>2.3 Dealing With Inconsistencies</title>
<p>Handling inconsistencies is often less natural when using probabilistic methods, such as Kalman-based filters, while it is a significant point with set-membership methods. Although outliers can usually be rejected using methods such as the Mahalanobis distance [see <xref ref-type="bibr" rid="B28">Mahalanobis (1936)</xref>] or RANSAC [see <xref ref-type="bibr" rid="B15">Fischler and Bolles (1981)</xref>] in cases where a reasonable amount of data is available, there are no general methods to detect and remove inconsistencies, especially when only two or three data points are available, and a model is difficult to formalize. Interval analysis can help in debugging: developing algorithms based on it shows that often several programming errors could have been left unnoticed in the embedded code if other kinds of methods were used, while interval methods quickly show empty sets or unexpected precise intervals when there is a problem. Indeed, the interval intersection described previously is efficient in cases where any outlier should be detected as far as possible. In the cases where a specific number of outliers is expected in normal operation, the <italic>q-relaxed intersection</italic> [cf. <xref ref-type="bibr" rid="B22">Jaulin (2009)</xref>] could be used instead.</p>
</sec>
<sec id="s2-4">
<title>2.4 Description of the Autonomous Boat</title>
<p>An autonomous boat has been used to demonstrate the use of interval methods for heading and position estimation (see <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>).</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Autonomous boat with an interval-based inertial navigation system (INS).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g001.tif"/>
</fig>
<p>It is based on a 1-m long hull (MHZ PowerBoats Jetsprint-Jetboat) that is equipped with a jet propeller (MHZ PowerBoats Jet 52) to control its speed and with a servomotor to control the direction of the water jet. On the boat we have:<list list-type="simple">
<list-item>
<p>&#x2022; A dual GPS (ArduSimple simpleRTK2B&#x2b;heading, with two u-blox GNSS multiband antennas ANN-MB-00) to get the absolute position, speed over ground (SOG), course over ground (COG), as well as true heading of the robot (note although it could be possible, we did not use RTK corrections for the position estimates).</p>
</list-item>
<list-item>
<p>&#x2022; An AHRS (SBG Ellipse2-A-G4A3-B1, with full scale of gyrometers of 450&#xb0;/s and accelerometers of 16&#xa0;g) to get the Euler angles and their derivates. Note that the accelerometers inside are not precise enough to estimate correctly the position; they are only used internally for the angle computations.</p>
</list-item>
<list-item>
<p>&#x2022; A DVL (Teledyne Wayfinder), to get the forward and lateral speed of the robot, especially when exploring narrow rivers, where GPS obstructions may occur on its banks. The distance to the river floor is also measured and can be used to generate a height map of the covered&#x20;area.</p>
</list-item>
</list>
</p>
<p>More information about the design of this autonomous boat is available in <xref ref-type="bibr" rid="B45">Sanchez (2021)</xref>.</p>
</sec>
<sec id="s2-5">
<title>2.5&#x20;Interval-Based Inertial Navigation System</title>
<sec id="s2-5-1">
<title>2.5.1 Principle of Operation</title>
<p>The purpose of this first interval-based INS is to estimate reliably the heading <italic>&#x3c8;</italic> of the boat as an interval <inline-formula id="inf17">
<mml:math id="m20">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, using the dual GPS of&#x20;the boat, which gives an estimation <italic>&#x3c8;</italic>
<sub>GPS</sub>, the gyrometers of the&#x20;AHRS <italic>&#x3c9;</italic> (rotation around the vertical axis), and the magnetometers of the AHRS, which gives an estimation <italic>&#x3c8;</italic>
<sub>mag</sub> (we will assume here that the magnetic declination and any&#x20;physical bias between the sensors have been already taken&#x20;into account, or their uncertainties are within the width&#x20;of the intervals). It is possible to describe our problem&#x20;as follows:<disp-formula id="e1">
<mml:math id="m21">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">v</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">l</mml:mi>
<mml:mi mathvariant="normal">u</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mtext>&#x2009;&#x2009;</mml:mtext>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">q</mml:mi>
<mml:mi mathvariant="normal">u</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">b</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">v</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mtext>&#x2009;&#x2009;</mml:mtext>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">q</mml:mi>
<mml:mi mathvariant="normal">u</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn mathvariant="bold">0</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="normal">c</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mi mathvariant="normal">c</mml:mi>
<mml:mi mathvariant="normal">y</mml:mi>
<mml:mtext>&#x2009;&#x2009;</mml:mtext>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">q</mml:mi>
<mml:mi mathvariant="normal">u</mml:mi>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(1)</label>
</disp-formula>where <inline-formula id="inf18">
<mml:math id="m22">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is the state vector, <inline-formula id="inf19">
<mml:math id="m23">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>GPS</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>GPS</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>mag</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>mag</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is the output vector, <inline-formula id="inf20">
<mml:math id="m24">
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>&#x3c9;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf21">
<mml:math id="m25">
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, and <inline-formula id="inf22">
<mml:math id="m26">
<mml:mi mathvariant="bold">h</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula>. We will assume that:<list list-type="simple">
<list-item>
<p>&#x2022; For all <inline-formula id="inf23">
<mml:math id="m27">
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have intervals enclosing <italic>&#x3c9;</italic>(<italic>t</italic>):</p>
</list-item>
</list>
<disp-formula id="e2">
<mml:math id="m28">
<mml:mo>&#x2200;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="italic">&#x3c9;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>;</mml:mo>
</mml:math>
<label>(2)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>&#x2022; For multiple time instants <inline-formula id="inf24">
<mml:math id="m29">
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have intervals enclosing <italic>&#x3c8;</italic>
<sub>GPS</sub>(<italic>t</italic>
<sub>
<italic>i</italic>
</sub>):</p>
</list-item>
</list>
<disp-formula id="e3">
<mml:math id="m30">
<mml:mo>&#x2203;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>GPS</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>GPS</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>;</mml:mo>
</mml:math>
<label>(3)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>&#x2022; For all <inline-formula id="inf25">
<mml:math id="m31">
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have intervals enclosing <italic>&#x3c8;</italic>
<sub>mag</sub>(<italic>t</italic>):</p>
</list-item>
</list>
<disp-formula id="e4">
<mml:math id="m32">
<mml:mo>&#x2200;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>mag</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>mag</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(4)</label>
</disp-formula>
</p>
<p>In 2D, the vertical gyrometer is measuring the heading velocity, so we have:<disp-formula id="e5">
<mml:math id="m33">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mo>.</mml:mo>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>If we apply at each time step the contraction procedure described in the <italic>Data fusion with interval analysis</italic> section, the observation equation in combination with <xref ref-type="disp-formula" rid="e3">Eq. (3)</xref> will provide precise intervals for <inline-formula id="inf26">
<mml:math id="m34">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> at regular time instants<xref ref-type="fn" rid="fn6">
<sup>5</sup>
</xref> (from <inline-formula id="inf27">
<mml:math id="m35">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>GPS</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> if the GPS is available and the distance between the two antennas is considered consistent with the user-provided antenna distance, or from <inline-formula id="inf28">
<mml:math id="m36">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>mag</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> otherwise), while <xref ref-type="disp-formula" rid="e5">Eqs. (5)</xref> and <xref ref-type="disp-formula" rid="e2">(2)</xref> should propagate an estimation for other time intervals. For that, we could discretize the differential <xref ref-type="disp-formula" rid="e5">Eq. 5</xref> using the Euler method, i.e.,&#x20;<inline-formula id="inf29">
<mml:math id="m37">
<mml:mi>&#x3c8;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3c8;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>; however, in practice manipulations such as additions and comparisons directly on angles are not recommended due to the modulo 2<italic>&#x3c0;</italic> (or 360&#xb0;) equivalence of angles. Instead, we can use the cos and sin of the angles, so if <inline-formula id="inf30">
<mml:math id="m38">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, due to <xref ref-type="disp-formula" rid="e5">Eq. 5</xref>, we have <inline-formula id="inf31">
<mml:math id="m39">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> (evolution equation). This can be written as <inline-formula id="inf32">
<mml:math id="m40">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:math>
</inline-formula> with <inline-formula id="inf33">
<mml:math id="m41">
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>&#x3c9;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>,</inline-formula> and additionally, it is possible to find an exact solution for this type of differential equation, as <inline-formula id="inf34">
<mml:math id="m42">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>exp</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> if <italic>&#x3c9;</italic> is assumed to be a piecewise constant (i.e.,&#x20;<bold>A</bold> is not varying much during the time step <italic>dt</italic>). By writing <inline-formula id="inf35">
<mml:math id="m43">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> with respect to <inline-formula id="inf36">
<mml:math id="m44">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, it can be discretized as <inline-formula id="inf37">
<mml:math id="m45">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>exp</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. If <bold>A</bold> is antisymmetric, <inline-formula id="inf38">
<mml:math id="m46">
<mml:mi>exp</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is a rotation matrix, of angle <italic>&#x3c9;</italic> &#x22c5; <italic>dt</italic> in our case. Although not strictly necessary, it is also possible to use the equation <inline-formula id="inf39">
<mml:math id="m47">
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula> (consistency equation) to try to limit potential overestimation of the uncertainty when evaluating <inline-formula id="inf40">
<mml:math id="m48">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and <inline-formula id="inf41">
<mml:math id="m49">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Then the polar contractor from <xref ref-type="bibr" rid="B8">Desrochers and Jaulin (2016b)</xref> <xref ref-type="fn" rid="fn7">
<sup>6</sup>
</xref> can be used to contract <inline-formula id="inf42">
<mml:math id="m50">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> from <inline-formula id="inf43">
<mml:math id="m51">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and <inline-formula id="inf44">
<mml:math id="m52">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. If an empty set appears at any time during the contraction procedure at a time step, <inline-formula id="inf45">
<mml:math id="m53">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is set to its last known&#x20;value.</p>
</sec>
<sec id="s2-5-2">
<title>2.5.2 Comparison With Alternative Systems</title>
<p>To get a first validation of the interval-based INS designed, comparisons with other systems have been made<xref ref-type="fn" rid="fn8">
<sup>7</sup>
</xref>. A first experiment has been set up with a high-end iXBlue QUADRANS Fiber-Optic Gyrocompass (FOG) INS (see <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>) as a kind of ground truth to get a first idea on the precision of our system. Both systems have been mounted together and moved manually with various rotations and oscillations at different speeds (only planar movements, see <xref ref-type="fig" rid="F3">Figures 3</xref> and <xref ref-type="fig" rid="F4">4</xref>). The mean error and the standard deviation between the systems are both around 1.5&#xb0;, which means that there was probably a physical bias of 1.5&#xb0; between the two systems, and assuming the QUADRANS is the ground truth (specifications suggest an error of less than 0.2&#xb0;), the interval-based INS has a typical error of 1.5&#xb0;<xref ref-type="fn" rid="fn9">
<sup>8</sup>
</xref>, which seems small enough&#x20;for the autonomous boat used as a target system to be able to follow a track within the typical precision of a standard GPS, as it will be demonstrated in the <italic>Online control results in real experiments</italic> section (also, note that the typical error of an SBG Ellipse2-A-G4A3-B1, whose hardware&#x2014;especially the gyrometers&#x2014;is used in the interval-based INS, is around 1&#xb0;).</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>The iXBlue QUADRANS INS mounted together with the hardware of the interval-based INS. The QUADRANS was in the opposite direction of the rest and outputting data at 50&#xa0;Hz, while the interval-based INS was operated at 20&#xa0;Hz. Note that the QUADRANS did not have GPS, since it is not required for its operation and to be in conditions as different as possible from the rest of the system.</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g002.tif"/>
</fig>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Evolution of the heading (in &#xb0; with respect to time in s) of the interval-based INS (in red) and the QUADRANS (in green). They visually coincide all the time except briefly sometimes due to the modulo 360&#xb0; effect and fast movements (fast w.r.t. temporal resolution).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g003.tif"/>
</fig>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Evolution of the heading error (in &#xb0; with respect to time in s) between the interval-based INS and the QUADRANS.</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g004.tif"/>
</fig>
<p>The purpose of the second batch of experiments is to demonstrate that the interval-based INS could be competitive compared with existing solutions in some scenarios where faults or inconsistencies between sensors occur. Contrary to the preceding experiment, we are not interested in precision but rather in the behavior when handling obvious outliers. For that, two other systems were tested: an SBG Ellipse3-D-G4A2-B2 (with gyrometers full scale of 450&#xb0;/s and accelerometers of 8&#xa0;g) with SDK 6.2 and a Pixhawk 4&#x20;mini [firmware ArduRover V4.1.0-dev (12&#x2009;645&#x2009;674)] with simpleRTK2B&#x2b;heading&#x2013;Basic Starter Kit [firmware UBX_F9_100_HPG_113_ZED_F9P configured with instructions from <xref ref-type="bibr" rid="B3">ArduSimple (2021)</xref>]. Both systems are made of three magnetometers, three gyrometers, three accelerometers, and a dual GPS, and they are supposed to provide heading information from a fusion of all these sensors, similar to the interval-based INS of the boat. For all systems, default settings were used with magnetometers disabled (as long as the GPS is available) and dual antenna settings (approximately 1&#xa0;m between the antennas, to fit the size of the boat). The antenna type is the same (antenna 1 at 46&#xa0;cm behind the Ellipse-D, antenna 2 at 58.5&#xa0;cm in front, set to &#x201c;Rough lever arm&#x201d; setting in <sc>sbgCenter</sc>), and initial date and lever arms are configured where applicable.</p>
<p>The test procedure has been the following:<list list-type="simple">
<list-item>
<p>&#x2022; The INS is first left at a constant angle oriented toward the South (180&#xb0;) during some time to ensure it is correctly initialized.</p>
</list-item>
<list-item>
<p>&#x2022; Then it is turned by 90&#xb0; toward West (270&#xb0;) and left around for 30&#xa0;s before returning to the initial position to check if the heading data are correct if the system is not static.</p>
</list-item>
<list-item>
<p>&#x2022; To generate an inconsistency between the heading computed from the dual GPS antennas and the gyrometers, the IMU part of the system is rapidly moved to try to saturate the gyrometers and left at a constant angle oriented toward the West around 30&#xa0;s, while the GPS antennas are not moved at all (therefore, they are still pointing toward the South).</p>
</list-item>
<list-item>
<p>&#x2022; Finally, the IMU is put back in its original position to check how it recovers from the inconsistency. For the interval-based INS, other movements were made after the inconsistency to check that it was still responding correctly.</p>
</list-item>
</list>
</p>
<p>
<xref ref-type="fig" rid="F5">Figure&#x20;5</xref> shows the results of the experiment for the Ellipse-D. The fused heading and the GPS heading coincide (except that the update rate of the GPS is 5&#xa0;Hz, while the fused heading is determined at a frequency of 50&#xa0;Hz) until the gyrometers are saturated. At this point, the fused heading outputs a wrong value of 200&#xb0;, possibly evaluated from the gyrometer data; however, it does not correspond with the heading of the IMU, which should have been 270&#xb0; or the heading of the GPS, which should have been 180&#xb0; at this point of the experiment. After the IMU is put back in the same direction of the GPS, the fused heading indicates 100&#xb0;, instead of 180&#xb0;. It should be noted, however, that in other tests, where the gyrometer saturation was probably shorter, the Ellipse-D was sometimes able to recover from that disturbance. Also, although not tested, it might be possible to make it trust more the GPS instead of the gyrometers with other settings. Indeed, the commercial purpose of this type of INS is probably to be able to be more robust to GPS outliers due to, e.g., multipaths as well as increasing the heading output rate compared with a dual GPS without IMU aid. However, it should be possible to detect easily the gyrometer saturations and to choose in that case automatically to trust more the GPS data as long as they seem to be correct (e.g., distance between antennas still consistent with what was evaluated previously and with what was specified by the user as the initial value), as it was the case in this experiment.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Evolution of the heading (in red) for the Ellipse-D (in &#xb0; with respect to time in s). The raw heading from the GPS is in green (in &#xb0;), and the gyrometer data is in blue (in &#xb0;/s).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g005.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F6">Figure&#x20;6</xref> shows the results of the experiment for the Pixhawk. The fused heading and the GPS heading coincide (except the update rate of the GPS is 5&#xa0;Hz, while the fused heading is determined at a frequency of 50&#xa0;Hz) until the gyrometers are saturated. At this point, the fused heading seems off but converges slowly toward the GPS value, until the IMU is moved back in the same direction of the GPS, when the gyrometers detect the rotation even though the fused heading seems again to converge finally toward the GPS value. This is probably due to a continuous weighted fusion between GPS and gyrometers data, which seems to be consistent with the fact that an EKF (Extended Kalman Filter) is known to be used internally (as this is an open-source design, this could be checked in more detail)<xref ref-type="fn" rid="fn10">
<sup>9</sup>
</xref>.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Evolution of the heading (in red) for the Pixhawk (in &#xb0; with respect to time in s). The raw heading from the GPS is in green (in &#xb0;), and the gyrometer data is in blue (in &#xb0;/s).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g006.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F7">Figure&#x20;7</xref> shows the results of the experiment for the interval-based INS. The fused heading and the GPS heading coincide (except that the update rate of the GPS is 1&#xa0;Hz, while the fused heading is 20&#xa0;Hz) except for a short time (1&#x2013;2&#xa0;s) when the gyrometers are saturated or when the IMU is moved back to its original position after the saturation. It could be interesting to check in further experiments whether a GPS rate of 5&#xa0;Hz (like in the Ellipse-D) would give better results especially in the experiment with the QUADRANS, since it is not expected that it would significantly change the behavior in the experiment of <xref ref-type="fig" rid="F7">Figure&#x20;7</xref>.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>Evolution of the heading (in red) for the interval-based INS (in &#xb0; with respect to time in s). The raw heading from the GPS is in green (in &#xb0;) and the gyrometer data is in blue (in &#xb0;/s).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g007.tif"/>
</fig>
<p>Although many improvements can already be foreseen, those results show that designing an interval-based INS naturally leads to consider which solution should be returned in case of inconsistencies in the data fusion process (i.e.,&#x20;empty intervals at some point in the computations). This can help to determine better when there are sensors that contradict each other and, whenever possible, which. Even if at the moment, it is not demonstrated that the designed interval-based INS would surpass other existing devices or methods, especially in terms of precision and accuracy, the foreseen theoretically increased reliability (with respect to inconsistencies, with a better propagation of all sensor and model errors, etc.) is alone worth to be reported, and this fact is already experimentally proven by the previously described experiments, which enable us to conclude that it appears to be better than COTS devices at least in some specific situations where inconsistencies could occur<xref ref-type="fn" rid="fn11">
<sup>10</sup>
</xref>.</p>
</sec>
</sec>
<sec id="s2-6">
<title>2.6&#x20;Jet-Boat Simulator</title>
<p>The boat described in the <italic>Description of the autonomous boat</italic> section can be simulated using the following model:<disp-formula id="e6">
<mml:math id="m54">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(6)</label>
</disp-formula>where <italic>x</italic> and <italic>y</italic> are the boat coordinates, <italic>&#x3c8;</italic> its heading, <italic>v</italic>
<sub>
<italic>x</italic>
</sub> and <italic>v</italic>
<sub>
<italic>y</italic>
</sub>, the corresponding velocities in <italic>x</italic> and <italic>y</italic> directions, <italic>u</italic>
<sub>1</sub> is the motor input, and <italic>u</italic>
<sub>2</sub> is the jet direction input (see <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>). To significantly simplify the equations, the damping coefficient <italic>&#x3b1;</italic>
<sub>
<italic>f</italic>
</sub> is assumed to be the same in all the directions with respect to the hull, <italic>L</italic> is the length of the boat, <italic>&#x3b1;</italic> is a coefficient such that <italic>&#x3b1;u</italic>
<sub>1</sub> is the propelling force, and <italic>&#x3b2;</italic> is such that <italic>&#x3b4;</italic>&#xa0;&#x3d;&#xa0;<italic>&#x3b2;u</italic>
<sub>2</sub> is the angle of the jet. The expression <inline-formula id="inf46">
<mml:math id="m55">
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> corresponds to the longitudinal speed of the boat expressed in the boat coordinate system. We assume that the jet direction acts as a rudder since even when <italic>u</italic>
<sub>1</sub>&#xa0;&#x3d;&#xa0;0, the water flowing through the jet (which is only due to <italic>v</italic>
<sub>
<italic>rx</italic>
</sub> and not much the lateral speed <inline-formula id="inf47">
<mml:math id="m56">
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>) can still rotate the boat a little. Also, the longitudinal speed decreases when the angle of the jet is not neutral (generating rotation without lateral speed, which is mainly due to inertia), which corresponds to the <inline-formula id="inf48">
<mml:math id="m57">
<mml:mi>cos</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and <inline-formula id="inf49">
<mml:math id="m58">
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> terms in the expressions of the accelerations. Water current speed components can be easily added to <inline-formula id="inf50">
<mml:math id="m59">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf51">
<mml:math id="m60">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> in the model, which would implicitly define a new coordinate system translating with the current. This model is used to build an interval observer for position estimation in the <italic>Results</italic> section.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Description of the variables in the simulated boat&#x20;model.</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g008.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F9">Figure&#x20;9</xref> presents a simulated boustrophedon track (typical pattern followed by survey vessels, lawnmowers, etc.) with the same waypoints as the real experiment that is described in the <italic>Online control results in real experiments</italic> section. The coefficients in the model have been manually set so that the simulated track closely fits the real one. The control algorithm used is similar to the simple line following controller described in <xref ref-type="bibr" rid="B19">Jaulin and Le Bars (2012a)</xref> (only the rudder control is used in our case, the motor input was constant or manual). Additional tests when manually controlling the inputs show that the behavior of the simulated boat is similar to the real&#x20;one.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>The simulated boustrophedon track (in green) with the desired waypoints (in yellow, connected by red lines). Short legs are approximately 20&#xa0;m and long ones are 70&#xa0;m.</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g009.tif"/>
</fig>
</sec>
</sec>
<sec id="s3">
<title>3 Results</title>
<p>This section discusses the experiments made with the autonomous boat previously described, in different scenarios. All the data and the corresponding processing methods are available at <ext-link ext-link-type="uri" xlink:href="http://www.ensta-bretagne.fr/lebars/spebot/">http://www.ensta-bretagne.fr/lebars/spebot/</ext-link> (see also footnote&#x20;7).</p>
<sec id="s3-1">
<title>3.1 Online Control Results in Real Experiments</title>
<p>To demonstrate that the designed interval-based INS can be used in real missions of outdoor autonomous robots, the boat described in the <italic>Description of the autonomous boat</italic> section has been programmed to follow the boustrophedon track presented in the <italic>Jet-boat simulator</italic> section on a river. In the embedded controller, the heading computed by the interval-based INS is used to follow a target heading, which can be defined by the direction to follow to go toward a target waypoint [case of a simple waypoint following controller, see, e.g., <xref ref-type="bibr" rid="B22">Jaulin (2009)</xref>], or a weighted combination between this direction and the distance to the line between the previous waypoint and the target waypoint [case of a line following controller, see, e.g., <xref ref-type="bibr" rid="B19">Jaulin and Le Bars (2012a)</xref>]. <xref ref-type="fig" rid="F10">Figure&#x20;10</xref> shows that the trajectory is indeed compatible with what could be expected for this type of mission, with a maximum distance of around 2.5&#xa0;m from the lines between the waypoints. Inaccurate heading estimations would make the robot often miss the target waypoint (and, in worst cases, go back to it and even turn around without managing to reach a desired minimum distance) in case of a waypoint-following controller, or oscillate near the line in case of a line-following controller (assuming the waypoints are reachable taking into account the robot dynamics).</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>The real boustrophedon track (in green) with the desired waypoints (in yellow, connected by red lines). Short legs are approximately 20&#xa0;m and long ones are 70&#xa0;m.</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g010.tif"/>
</fig>
</sec>
<sec id="s3-2">
<title>3.2 Additional Tests and Offline Processing</title>
<sec id="s3-2-1">
<title>3.2.1 Offline Processing to Fuse GPS Data with the Model</title>
<p>Since GPS only provides a new position estimate every second, the boat model used in the <italic>Jet-boat simulator</italic> section could be used to enhance the state estimation with an improved temporal resolution, e.g., by following the method in <xref ref-type="bibr" rid="B25">Le Bars et&#x20;al. (2018)</xref> (and the problem is somehow similar to the fusion between gyrometer and GPS heading described in the <italic>Principle of operation</italic> section). In this context, we can describe our problem as:<disp-formula id="e7">
<mml:math id="m61">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtext>evolution&#x2009;equation</mml:mtext>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">g</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtext>observation&#x2009;equation</mml:mtext>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(7)</label>
</disp-formula>where <bold>x</bold>(<italic>t</italic>) is the state vector of the boat, <bold>u</bold>(<italic>t</italic>) is its input vector, <bold>y</bold>(<italic>t</italic>) is its output vector, and:<list list-type="simple">
<list-item>
<p>&#x2022; For some time instant <italic>t</italic>
<sub>0</sub>, we have a box <inline-formula id="inf52">
<mml:math id="m62">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> containing the state vector:</p>
</list-item>
</list>
<disp-formula id="e8">
<mml:math id="m63">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>;</mml:mo>
</mml:math>
<label>(8)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>&#x2022; For all <inline-formula id="inf53">
<mml:math id="m64">
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have boxes enclosing <bold>u</bold>(<italic>t</italic>):</p>
</list-item>
</list>
<disp-formula id="e9">
<mml:math id="m65">
<mml:mo>&#x2200;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">u</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>;</mml:mo>
</mml:math>
<label>(9)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>&#x2022; For multiple time instants <inline-formula id="inf54">
<mml:math id="m66">
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have boxes enclosing <bold>y</bold> (<italic>t</italic>
<sub>
<italic>i</italic>
</sub>):</p>
</list-item>
</list>
<disp-formula id="e10">
<mml:math id="m67">
<mml:mo>&#x2203;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(10)</label>
</disp-formula>
</p>
<p>The evolution equation is given by <xref ref-type="disp-formula" rid="e6">Eq. (6)</xref>, and the observation equation is:<disp-formula id="e11">
<mml:math id="m68">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>x</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>y</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>&#x3c8;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(11)</label>
</disp-formula>because (<italic>x</italic>, <italic>y</italic>) can be measured regularly (i.e.,&#x20;not at all times) by the GPS, and <italic>&#x3c8;</italic> is measured by the INS at all&#x20;times.</p>
<p>To solve this problem, we will use the contractor approach described previously:<list list-type="simple">
<list-item>
<p>&#x2022; First, we need to use the observation equation to contract the known GPS positions of the&#x20;robot.</p>
</list-item>
<list-item>
<p>&#x2022; Then a propagation with respect to time on the differential equation [i.e.,&#x20;<xref ref-type="disp-formula" rid="e6">Eq. (6)</xref>] discretized using, for example, the explicit Euler method can be employed to get an evaluation of the trajectory between GPS positions.</p>
</list-item>
<list-item>
<p>&#x2022; Repeating all the previous contraction operations until no more significant improvement on the trajectory estimation is achievable should propagate the contractions performed at selected points through the whole trajectory.</p>
</list-item>
</list>
</p>
<p>Remember also that any interval for which we do not have specific initial data first needs to be initialized as wide as possible to stay consistent with any further data, but <inline-formula id="inf55">
<mml:math id="m69">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x221e;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> should only be used as a last resort to minimize the risk that no contraction can occur. In practice, we can almost always assume a bounded position and speed due to the physical limitations of the system in its actual operating conditions.</p>
</sec>
<sec id="s3-2-2">
<title>3.2.2 Dead Reckoning In Case Of GPS Loss Without Speed Sensor</title>
<p>The approach described in the previous section works also if we simulate the loss of the GPS position during a large portion of time (note that although the heading logs are here from the dual GPS, the system would have fell back to magnetometer in case of real GPS loss, which has no specific influence on the problem described in this section). During the loss of the GPS, the uncertainties will quickly increase over time (typical problem of <italic>dead reckoning</italic>), which translates to intervals (or boxes in 2D) with an increasing width, as explained in <xref ref-type="bibr" rid="B25">Le Bars et&#x20;al. (2018)</xref>. <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> illustrates the trajectory estimation of the boat assuming the GPS was lost after 150&#xa0;s, and details about the estimation of <italic>x</italic> and <italic>y</italic> are depicted in <xref ref-type="fig" rid="F12">Figures 12</xref> and <xref ref-type="fig" rid="F13">13</xref> (see the <italic>Interval analysis</italic> section for more details about tubes). The figures have been generated in a computing time of around 30&#xa0;s using the <sc>Codac</sc> library [see <xref ref-type="bibr" rid="B41">Rohou (2021)</xref>] and <sc>VIBes</sc> [see <xref ref-type="bibr" rid="B13">Drevelle and Nicola (2014)</xref>]. The GPS accuracy when it is in use is assumed to be 2.5&#xa0;m, and its data are available every second. Additionally, a water current of <inline-formula id="inf56">
<mml:math id="m70">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0.025</mml:mn>
<mml:mo>;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.022</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>m/s (assumed to be uniform, although it is not always the case especially in a river) has been taken into account in the state equation model, and the coefficients <italic>&#x3b1;</italic>
<sub>
<italic>f</italic>
</sub>&#xa0;&#x3d;&#xa0;1.3, <italic>&#x3b1;</italic>&#xa0;&#x3d;&#xa0;11.5, <italic>&#x3b2;</italic>&#xa0;&#x3d;&#xa0;23, and <italic>L</italic>&#xa0;&#x3d;&#xa0;1 have been estimated manually. Since most of the model uncertainties are likely to be related to the damping, it is assumed that <inline-formula id="inf57">
<mml:math id="m71">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mn>1.3</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.02</mml:mn>
<mml:mo>;</mml:mo>
<mml:mn>0.02</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> to ensure consistency of the model with the real positions. Therefore, the overall envelope of the trajectory estimation stays around a width of 5&#xa0;m as long as the GPS is in use, but grows over time as soon as no position information is available any more. Despite the large uncertainty even at the last position, it is close to the GPS estimation if the center of the <italic>x</italic> and <italic>y</italic> intervals are taken as first approximation (which is often the most likely to be close to reality, similar to what a Kalman filter would do). During the period when the GPS is taken into account, it is assumed that the position it gives is the one at the time of reception of the data, i.e.,&#x20;this approximation is assumed to be within the width of the corresponding interval, which is 5&#xa0;m. Due to this, it is allowed that the GPS trajectory (which is a step function) exits the position envelope, as long as it is at less than 2.5&#xa0;m.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>The trajectory estimation of the boat assuming the GPS cannot be used after 150&#xa0;s (scale is in m). The GPS position data (considered as ground truth) are in green and the trajectory is displayed as a blue tube whose center is in white (the beginning corresponds to the darkest box).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g011.tif"/>
</fig>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>The <italic>x</italic> position (in m) over time (in s) displayed as a tube in gray, GPS <italic>x</italic> position in green (in m), speed estimation (in m/s) tube in red, and error (in m) as the half-width of the tube (in black).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g012.tif"/>
</fig>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>The <italic>y</italic> position (in m) over time (in s) displayed as a tube in gray, GPS <italic>y</italic> position in green (in m), speed estimation (in m/s) tube in red, and error (in m) as the half-width of the tube (in black).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g013.tif"/>
</fig>
</sec>
<sec id="s3-2-3">
<title>3.2.3 Dead Reckoning in Case of GPS Loss with a Speed Sensor</title>
<p>As mentioned in the <italic>Description of the autonomous boat</italic> section, a DVL sensor has been installed on the boat for some experiments. Therefore, a state estimation method inspired from, e.g., <xref ref-type="bibr" rid="B26">Le Bars et&#x20;al. (2010)</xref> can be used (as a comparison, for a Kalman-based method, see, e.g., <xref ref-type="bibr" rid="B38">Reitbauer and Schmied (2021)</xref>. There, a similar problem is simulated for a ground robot. Odometers in combination with a Kalman filter are used to get the vehicle speed). Indeed, if <inline-formula id="inf58">
<mml:math id="m72">
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>x</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>y</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is the position of the robot, <bold>v</bold>
<sub>
<italic>r</italic>
</sub> is the speed vector measured directly by the DVL, and <bold>R</bold> is the Euler rotation matrix measured by the INS<xref ref-type="fn" rid="fn12">
<sup>11</sup>
</xref>, we have:<disp-formula id="e12">
<mml:math id="m73">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mo>&#x22c5;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:math>
<label>(12)</label>
</disp-formula>
</p>
<p>We can assume that:<list list-type="simple">
<list-item>
<p>&#x2022; For some time instant <italic>t</italic>
<sub>0</sub>, we have a box <inline-formula id="inf59">
<mml:math id="m74">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> containing the state vector:</p>
</list-item>
</list>
<disp-formula id="e13">
<mml:math id="m75">
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>;</mml:mo>
</mml:math>
<label>(13)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>&#x2022; For all <inline-formula id="inf60">
<mml:math id="m76">
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, we have boxes enclosing <bold>R</bold>(<italic>t</italic>) and <bold>v</bold>
<sub>
<italic>r</italic>
</sub>(<italic>t</italic>):</p>
</list-item>
</list>
<disp-formula id="e14">
<mml:math id="m77">
<mml:mo>&#x2200;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">R</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">R</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="normal">a</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(14)</label>
</disp-formula>
</p>
<p>A propagation with respect to time on the differential <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> discretized using the explicit Euler method can be used to get an evaluation of the trajectory. <xref ref-type="fig" rid="F14">Figure&#x20;14</xref> illustrates the trajectory estimation of the boat assuming the GPS was lost after 20&#xa0;s, and details about <italic>x</italic> and <italic>y</italic> estimations are visualized in <xref ref-type="fig" rid="F15">Figures 15</xref> and <xref ref-type="fig" rid="F16">16</xref>. Contrary to the previous situation without DVL, the position uncertainty grows slower when the GPS is not available anymore. There are also moments where the model is close to be inconsistent with the GPS position in <xref ref-type="fig" rid="F15">Figure&#x20;15</xref>, although it is not a problem due to the GPS uncertainties as explained before<xref ref-type="fn" rid="fn13">
<sup>12</sup>
</xref>.</p>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>The trajectory estimation of the boat assuming the GPS cannot be used after 20&#xa0;s, with DVL (scale is in m). The GPS position data (considered as ground truth) are in green, and the trajectory is displayed as a blue tube whose center is in white (the beginning corresponds to the darkest box).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g014.tif"/>
</fig>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>The <italic>x</italic> position (in m) over time (in s) displayed as a tube in gray, GPS <italic>x</italic> position in green (in m), speed estimation (in m/s) tube in red, and error (in m) as the half-width of the tube (in black).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g015.tif"/>
</fig>
<fig id="F16" position="float">
<label>FIGURE 16</label>
<caption>
<p>The <italic>y</italic> position (in m) over time (in s) displayed as a tube in gray, GPS <italic>y</italic> position in green (in m), speed estimation (in m/s) tube in red, and error (in m) as the half-width of the tube (in black).</p>
</caption>
<graphic xlink:href="fcteg-02-786188-g016.tif"/>
</fig>
<p>Whatever the sensors or model used, these results demonstrate that interval methods can naturally provide a reliable estimation of the position error during the survey. The consistency with the GPS position considered as ground truth validates also that the interval-based INS used inside the boat outputs correct data. As long as the different hypotheses are true (e.g., assumptions on the precision of the discretized model, sensors data, etc.), the system can then theoretically provide a guaranteed explored, potentially explored, and surely not explored area as proposed in <xref ref-type="bibr" rid="B9">Desrochers and Jaulin (2016a)</xref> (here the position of the boat is in some way considered as the explored area, but in practice, the payload sensor characteristics should be used, and e.g., it would be the explored underwater area that would need to be guaranteed for the search of a target underwater).</p>
<p>Note that there were boat dynamic problems due to the DVL shape, the use of a smaller DVL such as <xref ref-type="bibr" rid="B48">Water Linked (2021)</xref>, or improving its mechanical integration in the hull could easily limit the disturbances.</p>
</sec>
</sec>
</sec>
<sec id="s4">
<title>4 Conclusions and Outlook on Future Work</title>
<p>The reliable state estimation of an autonomous boat for river exploration has been presented in this paper. The main contribution is a first design of an interval-based INS, where the heading estimation is obtained from the fusion of dual GPS and gyrometer data in combination with a simple differential equation model, using interval analysis. Unit tests show that the precision and accuracy are compatible with the typically expected precision of the hardware, and in addition, some scenarios show a better resilience to outliers compared with alternative systems. The experiments made with an autonomous boat demonstrate the practical applicability of the approach.</p>
<p>Currently, it has to be noted that the described interval-based INS does not use interval analysis yet for roll and pitch, and the&#x20;yaw used as fallback in case of GPS loss is not from the raw&#x20;magnetometers from the SBG Ellipse-A underlying hardware, although no specific obstacle is foreseen for those improvements. Additionally, the system is not expected to be much robust to some GPS disturbances such as spoofing: Currently, it should fall back to the magnetometers in case the GPS is lost, or the estimated distance between the antennas is inconsistent, but sending misleading yet valid and consistent GPS data would make the system behave as if it was the other heading-related sensors that are failing, which should be also possible to take into account better in future work. Handling differential equation models <inline-formula id="inf61">
<mml:math id="m78">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> in the general case without discretizing using the explicit Euler method to estimate the state, assuming we have an initial condition, is currently also an open issue. Indeed, although the propagation with respect to time in <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> can be done successfully using the tube differential contractor described in <xref ref-type="bibr" rid="B42">Rohou et&#x20;al. (2017)</xref>, it will not be able to efficiently contract the model (6). The Lohner contractor proposed by <xref ref-type="bibr" rid="B5">Bourgois (2021)</xref> solves the problem of the generic differential contractor in the case where <inline-formula id="inf62">
<mml:math id="m79">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>; however, this still cannot be applied directly to <xref ref-type="disp-formula" rid="e6">Eq. (6)</xref> due to the inputs (which are typically interval quantities without any knowledge about temporal variations within their bounds and could come from a control algorithm and/or the user teleoperating the boat).</p>
</sec>
</body>
<back>
<sec id="s5">
<title>Data Availability Statement</title>
<p>The datasets presented in this study can be found in online repositories. The names of the repository/repositories and accession number(s) can be found below: <ext-link ext-link-type="uri" xlink:href="http://www.ensta-bretagne.fr/lebars/spebot/">http://www.ensta-bretagne.fr/lebars/spebot/</ext-link>.</p>
</sec>
<sec id="s6">
<title>Author Contributions</title>
<p>All authors listed have made a substantial, direct, and intellectual contribution to the work and approved it for publication.</p>
</sec>
<sec id="s10">
<title>Funding</title>
<p>This work was supported by the French Government Defense Procurement and Technology Agency (DGA).</p>
</sec>
<sec sec-type="COI-statement" id="s7">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s8">
<title>Publisher&#x2019;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors, and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<fn-group>
<fn id="fn2">
<label>1</label>
<p>Unmanned Aerial/Surface/Ground/Underwater Vehicle, the letter U is often replaced by the letter A for Autonomous when the vehicle is unmanned and can be autonomous, which will be in the scope of this&#x20;paper.</p>
</fn>
<fn id="fn3">
<label>2</label>
<p>For simplicity, GPS (Global Positioning System) and GNSS (Global Navigation Satellite System) notations will be used equally in the rest of the paper even though multiple constellations might be employed internally by the devices&#x20;used.</p>
</fn>
<fn id="fn4">
<label>3</label>
<p>Basic factorization steps are usually not detailed although they might be necessary at implementation time to achieve a good precision performance.</p>
</fn>
<fn id="fn5">
<label>4</label>
<p>The implementation of this example in Python is available at <ext-link ext-link-type="uri" xlink:href="http://replit.com/@lebarsfa/IntervalContractionProcedure">http://replit.com/@lebarsfa/IntervalContractionProcedure</ext-link>.</p>
</fn>
<fn id="fn6">
<label>5</label>
<p>In practice, the time delay between the moment when the GPS heading was received and the moment for which this value has been measured needs to be estimated as precisely as possible, see <xref ref-type="bibr" rid="B45">Sanchez (2021)</xref> for more details and also <xref ref-type="bibr" rid="B27">Le Bars et&#x20;al. (2012)</xref>, <xref ref-type="bibr" rid="B43">Rohou et&#x20;al. (2018)</xref> and <xref ref-type="bibr" rid="B24">Kletting et&#x20;al. (2006)</xref> in case of time-varying uncertainties.</p>
</fn>
<fn id="fn7">
<label>6</label>
<p>An implementation of the polar contractor is available in the <sc>Codac</sc> library (see <xref ref-type="bibr" rid="B41">Rohou (2021)</xref>). Since it currently appears to be precise only for <inline-formula id="inf63">
<mml:math id="m80">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c0;</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c0;</mml:mi>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> (there might be overestimation of the uncertainty for angles around &#x2212; <italic>&#x3c0;</italic>), a pre-processing has been made to ensure that the results remain precise in <inline-formula id="inf64">
<mml:math id="m81">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c0;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> by changing the sign of <inline-formula id="inf65">
<mml:math id="m82">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> if <inline-formula id="inf66">
<mml:math id="m83">
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> before applying the contractor and then negating the result and adding <italic>&#x3c0;</italic>, see <xref ref-type="bibr" rid="B45">Sanchez (2021)</xref> for more details.</p>
</fn>
<fn id="fn8">
<label>7</label>
<p>All experimental data are available at <ext-link ext-link-type="uri" xlink:href="http://www.ensta-bretagne.fr/lebars/spebot/">http://www.ensta-bretagne.fr/lebars/spebot/</ext-link>.</p>
</fn>
<fn id="fn9">
<label>8</label>
<p>With a potentially non-optimal time synchronization between data, and without specific effort to optimize the accuracy or precision, it has especially been noted during the experiment that the mounting of the antennas was not rigid enough.</p>
</fn>
<fn id="fn10">
<label>9</label>
<p>For an unknown reason (potentially a temporary bad connection or minor problem in the recording of the data), the heading from the GPS seems to drop punctually when the IMU part is moved rapidly, even though this does not seem to cause specific problems.</p>
</fn>
<fn id="fn11">
<label>10</label>
<p>It has to be noted that since many profiles or parameters are available in the systems used, the behavior might differ if settings other than the defaults were&#x20;used.</p>
</fn>
<fn id="fn12">
<label>11</label>
<p>To simplify, we have assumed that the movement of the robot is only in 2D even though it can be easily extended to 3D. Any lever arms between sensors are assumed within the estimation errors. Note also it could be interesting to estimate the orientation bias between the DVL and the INS during moments where we have the&#x20;GPS.</p>
</fn>
<fn id="fn13">
<label>12</label>
<p>It has to be noted that around <italic>t</italic>&#xa0;&#x3d;&#xa0;35&#x2009;s in <xref ref-type="fig" rid="F15">Figures 15</xref> and <xref ref-type="fig" rid="F16">16</xref>, the speed has a punctual unexpected uncertainty. Although this has few consequences on the final results, it would remain to be investigated (it could be due to a nonoptimality of the cos or sin interval functions (which appear in <bold>R</bold> &#x22c5;<bold>v</bold>
<sub>
<italic>r</italic>
</sub>) in the underlying implementation since it seems to correspond to an angle of <italic>&#x3c0;</italic>).</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>ArduPilot</collab> (<year>2021a</year>). <article-title>ArduPilot</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.ardupilot.org/">http://www.ardupilot.org/</ext-link>
</comment>. </citation>
</ref>
<ref id="B2">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>ArduPilot</collab> (<year>2021b</year>). <article-title>GPS for Yaw (Aka Moving Baseline)</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://ardupilot.org/copter/docs/common-gps-for-yaw.html">https://ardupilot.org/copter/docs/common-gps-for-yaw.html</ext-link>
</comment>. </citation>
</ref>
<ref id="B3">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>ArduSimple</collab> (<year>2021</year>). <article-title>ZED-F9P Firmware Update with simpleRTK2B &#x2b; Fw Version Check</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://www.ardusimple.com/zed-f9p-firmware-update-with-simplertk2b/">https://www.ardusimple.com/zed-f9p-firmware-update-with-simplertk2b/</ext-link>
</comment>. </citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bonargent</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>M&#xe9;nard</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Pigeon</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Pouliquen</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Gehan</surname>
<given-names>O.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Observer Design for Nonlinear Systems with Multi-Rate Sampled Outputs - Application to Attitude Estimation</article-title>,&#x201d; in <conf-name>2020 European Control Conference (ECC)</conf-name>, <conf-loc>Saint Petersburg, Russia</conf-loc>, <conf-date>May 12&#x2013;15, 2020</conf-date>, <fpage>997</fpage>&#x2013;<lpage>1002</lpage>. <pub-id pub-id-type="doi">10.23919/ECC51009.2020.9143923</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Bourgois</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Safe &#x26; Collaborative Autonomous Underwater Docking: Interval Methods for Proving the Feasibility of an Underwater Docking Problem</article-title>. <comment>PhD dissertation</comment>. <publisher-loc>France</publisher-loc>: <publisher-name>Universit&#xe9; de Bretagne Occidentale, ENSTA Bretagne</publisher-name>. </citation>
</ref>
<ref id="B6">
<citation citation-type="web">
<comment>[Dataset]</comment> <person-group person-group-type="author">
<name>
<surname>Chabert</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>IBEX</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.ibex-lib.org/">http://www.ibex-lib.org/</ext-link>
</comment>. </citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Chabert</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>Contractor Programming</article-title>. <source>Artif. Intelligence</source> <volume>173</volume>, <fpage>1079</fpage>&#x2013;<lpage>1100</lpage>. <pub-id pub-id-type="doi">10.1016/j.artint.2009.03.002</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Desrochers</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2016b</year>). <article-title>A Minimal Contractor for the Polar Equation; Application to Robot Localization</article-title>. <source>Eng. Appl. Artif. Intelligence</source> <volume>55</volume>, <fpage>83</fpage>&#x2013;<lpage>92</lpage>. <pub-id pub-id-type="doi">10.1016/j.engappai.2016.06.005</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Desrochers</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2016a</year>). <article-title>Computing a Guaranteed Approximation of the Zone Explored by a Robot</article-title>. <source>IEEE Transaction on Automatic Control</source> <volume>62</volume>, <fpage>425</fpage>&#x2013;<lpage>430</lpage>. <pub-id pub-id-type="doi">10.1109/TAC.2016.2530719</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Desrochers</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Lacroix</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Set-membership Approach to the Kidnapped Robot Problem</article-title>,&#x201d; in <conf-name>2015 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Hamburg, Germany</conf-loc>, <conf-date>September 28&#x2013;October 02, 2015</conf-date>. <pub-id pub-id-type="doi">10.1109/iros.2015.7353897</pub-id> </citation>
</ref>
<ref id="B11">
<citation citation-type="web">
<comment>[Dataset]</comment> <person-group person-group-type="author">
<name>
<surname>Desrochers</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>pyIbex</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://pypi.org/project/pyibex/">https://pypi.org/project/pyibex/</ext-link>
</comment>. </citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Drevelle</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Bonnifait</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Reliable Positioning Domain Computation for Urban Navigation</article-title>. <source>IEEE Intell. Transport. Syst. Mag.</source> <volume>5</volume>, <fpage>21</fpage>&#x2013;<lpage>29</lpage>. <pub-id pub-id-type="doi">10.1109/mits.2013.2252058</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Drevelle</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Nicola</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>VIBes: A Visualizer for Intervals and Boxes</article-title>. <source>Math.Comput.Sci.</source> <volume>8</volume>, <fpage>563</fpage>&#x2013;<lpage>572</lpage>. <pub-id pub-id-type="doi">10.1007/s11786-014-0202-0</pub-id> </citation>
</ref>
<ref id="B14">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>Dronecode</collab> (<year>2021</year>). <article-title>Dronecode</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.dronecode.org/">http://www.dronecode.org/</ext-link>
</comment>. </citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Fischler</surname>
<given-names>M. A.</given-names>
</name>
<name>
<surname>Bolles</surname>
<given-names>R. C.</given-names>
</name>
</person-group> (<year>1981</year>). <article-title>Random Sample Consensus</article-title>. <source>Commun. ACM</source> <volume>24</volume>, <fpage>381</fpage>&#x2013;<lpage>395</lpage>. <pub-id pub-id-type="doi">10.1145/358669.358692</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ifqir</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Rauh</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Kersten</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ichalal</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Ait-Oufroukh</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Mammar</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Interval Observer-Based Controller Design for Systems with State Constraints: Application to Solid Oxide Fuel Cells Stacks</article-title>,&#x201d; in <conf-name>2019 24th International Conference on Methods and Models in Automation and Robotics (MMAR)</conf-name>, <conf-loc>August 26&#x2013;29, 2019</conf-loc>, <conf-date>Miedzyzdroje, Poland</conf-date>, <fpage>372</fpage>&#x2013;<lpage>377</lpage>. <pub-id pub-id-type="doi">10.1109/MMAR.2019.8864718</pub-id> </citation>
</ref>
<ref id="B17">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>iXBlue</collab> (<year>2021</year>). <article-title>iXBlue</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.ixblue.com/">http://www.ixblue.com/</ext-link>
</comment>. </citation>
</ref>
<ref id="B18">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Kieffer</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Didrit</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Walter</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2001</year>). <source>Applied Interval Analysis, with Examples in Parameter and State Estimation, Robust Control and Robotics</source>. <publisher-loc>London</publisher-loc>: <publisher-name>Springer-Verlag</publisher-name>. </citation>
</ref>
<ref id="B19">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2012a</year>). &#x201c;<article-title>A Simple Controller for Line Following of Sailboats</article-title>,&#x201d; in <conf-name>5th International Robotic Sailing Conference</conf-name>, <conf-loc>Cardiff, United Kingdom</conf-loc>, <conf-date>September 17&#x2013;21, 2012</conf-date> (<publisher-loc>Cardiff, UK</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>107</fpage>&#x2013;<lpage>119</lpage>. </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2012b</year>). <article-title>An Interval Approach for Stability Analysis; Application to Sailboat Robotics</article-title>. <source>IEEE Transaction on Robotics</source> <volume>29</volume>, <fpage>282</fpage>&#x2013;<lpage>287</lpage>. <pub-id pub-id-type="doi">10.1109/TRO.2012.2217794</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2015</year>). <source>Mobile Robotics</source>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.iste.co.uk/book.php?id=1538">http://www.iste.co.uk/book.php?id&#x003D;1538</ext-link>
</comment>. <edition>1st edition</edition>. </citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>Robust Set-Membership State Estimation; Application to Underwater Robotics</article-title>. <source>Automatica</source> <volume>45</volume>, <fpage>202</fpage>&#x2013;<lpage>206</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2008.06.013</pub-id> </citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kalman</surname>
<given-names>R. E.</given-names>
</name>
</person-group> (<year>1960</year>). <article-title>A New Approach to Linear Filtering and Prediction Problems</article-title>. <source>Trans. AMSE, D, J.&#x20;Basic Eng.</source> <volume>82</volume>, <fpage>35</fpage>&#x2013;<lpage>45</lpage>. <pub-id pub-id-type="doi">10.1115/1.3662552</pub-id> </citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kletting</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Rauh</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Aschemann</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Hofer</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2006</year>). &#x201c;<article-title>Interval Observer Design for Nonlinear Systems with Uncertain Time-Varying Parameters</article-title>,&#x201d; in <conf-name>12th IEEE Intl. Conference on Methods and Models in Automation and Robotics MMAR 2006</conf-name>, <conf-loc>Miedzyzdroje, Poland</conf-loc>, <conf-date>August 28&#x2013;31, 2006</conf-date>. </citation>
</ref>
<ref id="B25">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Antonio</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Cervantes</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>De La Cruz</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Estimating the Trajectory of Low-Cost Autonomous Robots Using Interval Analysis: Application to the euRathlon Competition</article-title>,&#x201d; in <source>Marine Robotics and Applications</source>. Editor <person-group person-group-type="editor">
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>51</fpage>&#x2013;<lpage>68</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-319-70724-2_4</pub-id> </citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Bertholom</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Sliwka</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2010</year>). &#x201c;<article-title>Interval SLAM for Underwater Robots; a New experiment</article-title>,&#x201d; in <conf-name>NOLCOS 2010</conf-name>, <conf-loc>Bologna, Italy</conf-loc>, <conf-date>September 01&#x2013;03, 2010</conf-date>. <pub-id pub-id-type="doi">10.3182/20100901-3-it-2016.00083</pub-id> </citation>
</ref>
<ref id="B27">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Sliwka</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Reynet</surname>
<given-names>O.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Set-Membership State Estimation with Fleeting Data</article-title>. <source>Automatica</source> <volume>48</volume>, <fpage>381</fpage>&#x2013;<lpage>387</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2011.11.004</pub-id> </citation>
</ref>
<ref id="B28">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Mahalanobis</surname>
<given-names>P. C.</given-names>
</name>
</person-group> (<year>1936</year>). <source>On the Generalised Distance in Statistics</source>. <publisher-name>Proceedings of the National Institute of Sciences of India</publisher-name>, <fpage>49</fpage>&#x2013;<lpage>55</lpage>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://link.springer.com/article/10.1007/s13171-019-00164-5#citeas/">https://link.springer.com/article/10.1007/s13171-019-00164-5#citeas</ext-link>
</comment>. </citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mahony</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Hamel</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Pflimlin</surname>
<given-names>J.-M.</given-names>
</name>
</person-group> (<year>2008</year>). <article-title>Nonlinear Complementary Filters on the Special Orthogonal Group</article-title>. <source>IEEE Trans. Automat. Contr.</source> <volume>53</volume>, <fpage>1203</fpage>&#x2013;<lpage>1218</lpage>. <pub-id pub-id-type="doi">10.1109/TAC.2008.923738.16</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Meier</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Tanskanen</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Fraundorfer</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Pollefeys</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2011</year>). &#x201c;<article-title>PIXHAWK: A System for Autonomous Flight Using Onboard Computer Vision</article-title>,&#x201d; in <conf-name>2011 IEEE International Conference on Robotics and Automation</conf-name>, <conf-loc>Shanghai, China</conf-loc>, <conf-date>May 9&#x2013;13, 2011</conf-date>, <fpage>2992</fpage>&#x2013;<lpage>2997</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2011.5980229</pub-id> </citation>
</ref>
<ref id="B31">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Moore</surname>
<given-names>R. E.</given-names>
</name>
</person-group> (<year>1979</year>). <source>Methods and Applications of Interval Analysis</source>. <publisher-loc>Philadelphia, PA</publisher-loc>: <publisher-name>SIAM</publisher-name>. </citation>
</ref>
<ref id="B32">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mourad-Chehade</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Snoussi</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Kieffer</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Richard</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Robust Bounded-Error Tracking in Wireless Sensor Networks</article-title>. <source>SYSID 2012 (Bruxelles, Belgium)</source> <volume>45</volume>, <fpage>1097</fpage>&#x2013;<lpage>1102</lpage>. <pub-id pub-id-type="doi">10.3182/20120711-3-be-2027.00333</pub-id> </citation>
</ref>
<ref id="B33">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>Paparazzi UAV</collab> (<year>2021</year>). <article-title>Paparazzi UAV</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://wiki.paparazziuav.org/">http://wiki.paparazziuav.org/</ext-link>
</comment>. </citation>
</ref>
<ref id="B34">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Paturel</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Lacambre</surname>
<given-names>J.-B.</given-names>
</name>
<name>
<surname>Patin</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Moynagh</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Inertial Navigation at High Latitude: Trials and Test Results</article-title>,&#x201d; in <conf-name>OCEANS 2015 - MTS/IEEE Washington</conf-name>, <conf-loc>October 19&#x2013;22, 2015</conf-loc>, <conf-date>Washington D.C</conf-date>, <fpage>1</fpage>&#x2013;<lpage>5</lpage>. <pub-id pub-id-type="doi">10.23919/OCEANS.2015.7401904</pub-id> </citation>
</ref>
<ref id="B35">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Premerlani</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Bizard</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2009</year>). <source>Direction Cosine Matrix IMU: Theory</source>. <publisher-loc>USA</publisher-loc>: <publisher-name>DIY DRONE</publisher-name>. </citation>
</ref>
<ref id="B36">
<citation citation-type="journal">
<collab>Promotion 2021, Robotique autonome</collab> (<year>2021</year>). <article-title>Calibrating a Magnetometer Sensor Using Multiple Methods</article-title>. <comment>Tech. rep., ENSTA Bretagne</comment>. </citation>
</ref>
<ref id="B37">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Rauh</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Auer</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2010</year>). &#x201c;<article-title>Interval Approaches to Reliable Control of Dynamical Systems</article-title>,&#x201d; in <source>Computer-assisted Proofs - Tools, Methods and Applications Dagstuhl Seminar Proceedings</source>. Editors <person-group person-group-type="editor">
<name>
<surname>Brown</surname>
<given-names>B. M.</given-names>
</name>
<name>
<surname>Kaltofen</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Oishi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Rump</surname>
<given-names>S. M.</given-names>
</name>
</person-group> (<publisher-loc>Dagstuhl, Germany</publisher-loc>: <publisher-name>Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, Germany</publisher-name>), <fpage>09471</fpage>. </citation>
</ref>
<ref id="B38">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Reitbauer</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Schmied</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Bridging GNSS Outages with IMU and Odometry: A Case Study for Agricultural Vehicles</article-title>. <source>Sensors</source> <volume>21</volume>, <fpage>4467</fpage>. <pub-id pub-id-type="doi">10.3390/s21134467</pub-id> </citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Revol</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2001</year>). <article-title>Introduction &#xe0; l&#x2019;arithm&#xe9;tique par intervalles</article-title>. <comment>Rapport de recherche 4297</comment>. </citation>
</ref>
<ref id="B40">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Reynet</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Chabert</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2009</year>). &#x201c;<article-title>Robust TDOA Passive Location Using Interval Analysis and Contractor Programming</article-title>,&#x201d; in <conf-name>Radar 2009</conf-name>, <conf-loc>Bordeaux, France</conf-loc>, <conf-date>October 12&#x2013;16, 2009</conf-date>. </citation>
</ref>
<ref id="B41">
<citation citation-type="web">
<comment>[Dataset]</comment> <person-group person-group-type="author">
<name>
<surname>Rohou</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Codac</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://codac.io/">http://codac.io/</ext-link>
</comment>. </citation>
</ref>
<ref id="B42">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rohou</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Mihaylova</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Veres</surname>
<given-names>S. M.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Guaranteed Computation of Robot Trajectories</article-title>. <source>Robotics Autonomous Syst.</source> <volume>93</volume>, <fpage>76</fpage>&#x2013;<lpage>84</lpage>. <pub-id pub-id-type="doi">10.1016/j.robot.2017.03.020</pub-id> </citation>
</ref>
<ref id="B43">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rohou</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Mihaylova</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Veres</surname>
<given-names>S. M.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Reliable Non-Linear State Estimation Involving Time Uncertainties</article-title>. <source>Automatica</source> <volume>93</volume>, <fpage>379</fpage>&#x2013;<lpage>388</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2018.03.074</pub-id> </citation>
</ref>
<ref id="B44">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Rohou</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Jaulin</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Mihaylova</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Bars</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Veres</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Reliable Robot Localization</source>. <publisher-name>ISTE Group</publisher-name>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.iste.co.uk/book.php?id=1553">http://www.iste.co.uk/book.php?id&#x003D;1553</ext-link>
</comment>. </citation>
</ref>
<ref id="B45">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sanchez</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Fabrication et automatisation d&#x2019;un drone de surface</article-title>. <comment>Tech. rep., ENSTA Bretagne</comment>. </citation>
</ref>
<ref id="B46">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>SBG Systems</collab> (<year>2021</year>). <article-title>SBG Systems</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://www.sbg-systems.com/">http://www.sbg-systems.com/</ext-link>
</comment>. </citation>
</ref>
<ref id="B47">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Voges</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Wagner</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Timestamp Offset Calibration for an Imu-Camera System under Interval Uncertainty</article-title>,&#x201d; in <conf-name>2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Madrid, Spain</conf-loc>, <conf-date>October 1&#x2013;5, 2018</conf-date>, <fpage>377</fpage>&#x2013;<lpage>384</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2018.8594237</pub-id> </citation>
</ref>
<ref id="B48">
<citation citation-type="web">
<comment>[Dataset]</comment> <collab>Water Linked</collab> (<year>2021</year>). <article-title>DVL A50</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="https://waterlinked.com/product/dvl-a50/">https://waterlinked.com/product/dvl-a50/</ext-link>
</comment>. </citation>
</ref>
<ref id="B49">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xiong</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Jauberthie</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Trav&#xe9;-Massuy&#xe8;s</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Le Gall</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Fault Detection Using Interval Kalman Filtering Enhanced by Constraint Propagation</article-title>,&#x201d; in <conf-name>52nd IEEE Conference on Decision and Control</conf-name>, <conf-loc>Florence, Italy</conf-loc>, <conf-date>December 10&#x2013;13, 2013</conf-date>, <fpage>490</fpage>&#x2013;<lpage>495</lpage>. <pub-id pub-id-type="doi">10.1109/CDC.2013.675992910.1109/cdc.2013.6759929</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>