<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Robot. AI</journal-id>
<journal-title>Frontiers in Robotics and AI</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Robot. AI</abbrev-journal-title>
<issn pub-type="epub">2296-9144</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/frobt.2020.571574</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Robotics and AI</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Practical Aspects of Model-Based Collision Detection</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Mamedov</surname> <given-names>Shamil</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/1001695/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Mikhel</surname> <given-names>Stanislav</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/1108301/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Laboratory of Mechatronics, Control and Prototyping, Center for Technologies in Robotics &#x00026; Mechatronics Components, Innopolis University</institution>, <addr-line>Innopolis</addr-line>, <country>Russia</country></aff>
<aff id="aff2"><sup>2</sup><institution>Industrial Robotics Lab, Center for Technologies in Robotics &#x00026; Mechatronics Components, Innopolis University</institution>, <addr-line>Innopolis</addr-line>, <country>Russia</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Alessandra Sciutti, Italian Institute of Technology (IIT), Italy</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Gabriele Nava, Italian Institute of Technology (IIT), Italy; Matej Hoffmann, Czech Technical University in Prague, Czechia</p></fn>
<corresp id="c001">&#x0002A;Correspondence: Shamil Mamedov <email>sh.mamedov&#x00040;innopolis.ru</email></corresp>
<fn fn-type="other" id="fn001"><p>This article was submitted to Human-Robot Interaction, a section of the journal Frontiers in Robotics and AI</p></fn></author-notes>
<pub-date pub-type="epub">
<day>23</day>
<month>11</month>
<year>2020</year>
</pub-date>
<pub-date pub-type="collection">
<year>2020</year>
</pub-date>
<volume>7</volume>
<elocation-id>571574</elocation-id>
<history>
<date date-type="received">
<day>11</day>
<month>06</month>
<year>2020</year>
</date>
<date date-type="accepted">
<day>07</day>
<month>10</month>
<year>2020</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2020 Mamedov and Mikhel.</copyright-statement>
<copyright-year>2020</copyright-year>
<copyright-holder>Mamedov and Mikhel</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 terms.</p></license></permissions>
<abstract><p>Recently, with the increased number of robots entering numerous manufacturing fields, a considerable wealth of literature has appeared on the theme of physical human-robot interaction using data from proprioceptive sensors (motor or/and load side encoders). Most of the studies have then the accurate dynamic model of a robot for granted. In practice, however, model identification and observer design proceeds collision detection. To the best of our knowledge, no previous study has systematically investigated each aspect underlying physical human-robot interaction and the relationship between those aspects. In this paper, we bridge this gap by first reviewing the literature on model identification, disturbance estimation and collision detection, and discussing the relationship between the three, then by examining the practical sides of model-based collision detection on a case study conducted on UR10e. We show that the model identification step is critical for accurate collision detection, while the choice of the observer should be mostly based on computation time and the simplicity and flexibility of tuning. It is hoped that this study can serve as a roadmap to equip industrial robots with basic physical human-robot interaction capabilities.</p></abstract>
<kwd-group>
<kwd>dynamic identification</kwd>
<kwd>collision detection</kwd>
<kwd>disturbance observer</kwd>
<kwd>human-robot interaction</kwd>
<kwd>observer design</kwd>
<kwd>physical human-robot interaction</kwd>
</kwd-group>
<counts>
<fig-count count="8"/>
<table-count count="5"/>
<equation-count count="44"/>
<ref-count count="44"/>
<page-count count="16"/>
<word-count count="9906"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>1. Introduction</title>
<p>With the advancement and proliferation of robotics, particularly in the manufacturing industry, human-robot interaction (HRI) is becoming more complex. The safe collaboration of humans and robots is being studied within the physical human-robot interaction (pHRI) field, which considers such collaboration to be based upon the ability of robots to sense their environment. In its simplest form pHRI boils down to monitoring robots&#x00027; collisions with the environment or humans and stopping it if a collision has been detected. A more sophisticated realization of pHRI in terms of software should include collision localization (Haddadin et al., <xref ref-type="bibr" rid="B18">2017</xref>; Mikhel et al., <xref ref-type="bibr" rid="B27">2019</xref>), collision reaction strategies (Haddadin et al., <xref ref-type="bibr" rid="B16">2008</xref>), relevant control techniques such as force/impedance control, and real-time motion planning (De Santis et al., <xref ref-type="bibr" rid="B8">2008</xref>). In this paper, we focus on a simple form of pHRI which can be used independently&#x02014;in situations when a robot is performing a task and a human happens to be in its way, or in situations when a human, by deliberately coming into contact with a robot, can prevent it from hurting itself, others, or damage the environment&#x02014;or as a part of more sophisticated pHRI used for supportive, collaborative, or cooperative interactions (Haddadin and Croft, <xref ref-type="bibr" rid="B17">2016</xref>).</p>
<p>There are two main approaches to collision detection: model-free and model-based. Model-free methods usually compare torques/currents needed to execute the trajectory with real torques applied to the robot, and if a collision occurs, a certain threshold is exceeded (Takakura et al., <xref ref-type="bibr" rid="B39">1989</xref>). These methods require access to the trajectory planner and controller of the robot; however, such access is not available to the users of the industrial manipulators. On the other hand, model-based methods use the dynamic model of a robot to estimate the disturbance torques using observers, and, based on the value of such torques, conclude the presence of a collision.</p>
<p>Most studies on model-based pHRI focus primarily on collision detection schemes or external torque estimation where they assume that the real model of the robot is known (Haddadin et al., <xref ref-type="bibr" rid="B18">2017</xref>; Garofalo et al., <xref ref-type="bibr" rid="B10">2019</xref>). However, systematic treatment of all three aspects of basic pHRI&#x02013;model identification, observer design, and collision detection&#x02013;and the relationship between the three has not been addressed yet. This study aims to bridge this gap and put forward a clear roadmap for enabling industrial robots with basic pHRI capabilities. The remaining part of the paper proceeds as follows: in the Model Identification subsection we outline the main steps needed for accurate dynamic parameters estimation; for each step we review relevant literature and provide practical advice. Compared to Wu et al. (<xref ref-type="bibr" rid="B43">2010</xref>) our literature review includes important recent contributions and is primarily intended for practitioners. In the Disturbance Estimation subsection, we review and compare several algorithms in terms of computation time as well as simplicity and flexibility of tuning. Our paper reviews alternative observers to the well-established pHRI community momentum observer and provides a new perspective of the momentum observer. In the Collision Detection subsection, we review both classical and recently proposed collision detection algorithms and discuss their advantages and limitations. Finally, we demonstrate the roadmap on a case study that involved manipulator UR10e.</p></sec>
<sec id="s2">
<title>2. Theoretical Preliminaries</title>
<p>Industrial manipulators might be subject to external disturbances due to collisions or contact with the environment. Usually, industrial manipulators are supplied with a controller and a trajectory planner. The majority of such manipulators allow users to input high-level tasks and measure torques/currents, positions, and velocities; however, such robots give users access to neither control nor the output of the trajectory planner. Given everything mentioned above, a question arises as to the most efficient way of detecting collisions of robot with their environment. In this section, we answer this question by consecutively discussing three main cornerstones that constitute model-based collision detection: model identification, observation, and detection.</p>
<sec>
<title>2.1. Model Identification</title>
<p>An accurate dynamic model is the paramount element of any model-based collision detection algorithm. The manipulator dynamics equation generally used is</p>
<disp-formula id="E1"><label>(1)</label><mml:math id="M1"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>e</mml:mi><mml:mi>x</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M2"><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mstyle><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mstyle><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> are the vectors of generalized coordinates, velocities, and acceleration, respectively; <bold>M</bold>(<italic><bold>q</bold></italic>) &#x02208; &#x0211D;<sup><italic>n</italic>&#x000D7;<italic>n</italic></sup> is an inertia matrix; <inline-formula><mml:math id="M3"><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>q</mml:mi><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mstyle><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>&#x000D7;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> is a matrix of Coriolis and centrifugal forces; <inline-formula><mml:math id="M4"><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> and <bold><italic>g</italic></bold>(<bold><italic>q</italic></bold>) &#x02208; &#x0211D;<sup><italic>n</italic></sup> are the vectors of friction and gravitational torques; <bold><italic>&#x003C4;</italic></bold> is the vector of the actuation torques; <bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub> is the vector of the torques induced at the joints by the contact forces, in the absence of contact/collision with the environment <bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub> &#x0003D; <bold>0</bold> (Siciliano et al., <xref ref-type="bibr" rid="B33">2010</xref>). The model requires the exact knowledge of the kinematic and dynamic parameters. In real life, kinematic parameters are known (because of manufacturing standards and calibration of robots before shipping) and provided by manufacturers. However, the latter usually do not provide dynamic parameters, with rare exceptions like, for example, Universal Robots that provide CAD models. Even with the CAD model the torque prediction lacks accuracy because it contains neither friction nor motor inertia parameters. A more accurate model can be obtained by performing identification. In this subsection, we provide an outline of the identification procedure.</p>
<p>The process of the identification of the dynamic parameters of mechanical systems can be divided into seven main steps (Swevers et al., <xref ref-type="bibr" rid="B38">2007</xref>):</p>
<list list-type="order">
<list-item><p>derivation of the dynamic model in regressor form</p></list-item>
<list-item><p>computation of base inertial parameters</p></list-item>
<list-item><p>trajectory planning</p></list-item>
<list-item><p>experiment conducting and collecting data</p></list-item>
<list-item><p>data processing</p></list-item>
<list-item><p>parameter estimation</p></list-item>
<list-item><p>validation</p></list-item>
</list>
<p>Identification starts by deriving the dynamic model of a manipulator moving in free space (<bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub> &#x0003D; <bold>0</bold>) in a linear regressor form</p>
<disp-formula id="E2"><label>(2)</label><mml:math id="M5"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M6"><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup></mml:math></inline-formula> is the regressor matrix, that can be obtained symbolically or numerically using recursive Lagrange-Euler formulation (Siciliano et al., <xref ref-type="bibr" rid="B33">2010</xref>), modified recursive Newton-Euler formulation (Atkeson et al., <xref ref-type="bibr" rid="B3">1986</xref>), or screw theory formulation (Garofalo et al., <xref ref-type="bibr" rid="B11">2013</xref>), and <inline-formula><mml:math id="M7"><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup></mml:math></inline-formula> is the vector of dynamic parameters (standard parameters). It consists of inertial parameters of each link modeled as a rigid body, an actuator, and friction parameters of each joint. The inertial parameters of a link include mass <italic>m</italic><sub><italic>i</italic></sub>, the first moment of inertia <bold><italic>h</italic></bold><sub><italic>i</italic></sub> &#x0003D; <italic>m</italic><sub><italic>i</italic></sub><bold><italic>r</italic></bold><sub><italic>i</italic></sub> (the product of a mass and the position of the center of mass), and inertia tensor with respect to the origin of the link <bold><italic>I</italic></bold><sub><italic>i</italic></sub>. Friction parameters are the coefficient of the Coloumb friction <italic>f</italic><sub><italic>c</italic></sub>, the coefficient of the viscous friction <italic>f</italic><sub><italic>v</italic></sub>, and an offset due to motor current offset <italic>f</italic><sub><italic>o</italic></sub>. Actuator parameter is reflected rotor inertia <italic>J</italic><sub><italic>i</italic></sub> [If servomotor inertia <italic>I</italic><sub><italic>m, i</italic></sub> and the gear ratio of the transmission <italic>k</italic><sub><italic>ri</italic></sub> are known, then reflected rotor inertia can be computed as <inline-formula><mml:math id="M8"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>m</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:msubsup><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:math></inline-formula> and the components of the regressor corresponding to reflected inertia should be moved to the right-hand side of Equation (2)]. In total, the vector of dynamic parameters for each link is</p>
<disp-formula id="E3"><label>(3)</label><mml:math id="M9"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi><mml:mi>z</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>h</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>o</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mn>14</mml:mn></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p><italic>Remark. More advanced friction models, for example, models with the Stribeck effect are not linear in parameters, yield a non-linear regressor matrix, that significantly complicates the identification process. However, if the linear friction model does not accurately describe friction torques, then it can be replaced by a non-linear model after identifying all other parameters. The non-linear model is usually identified for each link separately using non-linear least squares</italic> (Gaz et al., <xref ref-type="bibr" rid="B15">2018</xref>).</p>
<p>Not all the dynamic parameters enter the dynamic equation of the robot independently; some of them do not enter at all, some of them enter in linear combinations with other parameters. Due to that, the regressor matrix <bold><italic>Y</italic></bold>(&#x000B7;) has zero or linearly dependent columns leading to singularity which causes problems during trajectory planning and parameter estimation. Several methods have been proposed to overcome these limitations by deriving a set of identifiable parameters called base parameters <bold><italic>&#x003C0;</italic></bold><sub><italic>b</italic></sub> and corresponding base regressor matrix <bold><italic>Y</italic></bold><sub><italic>b</italic></sub>(&#x000B7;). Gautier and Khalil (<xref ref-type="bibr" rid="B14">1990</xref>) proposed an analytical method based on the recursive properties of robot energy. However, a year later Gautier (<xref ref-type="bibr" rid="B12">1991</xref>) proposed numerical methods based on QR- and SVD- decompositions. The analytical method was derived using Denavit&#x02013;Hartenberg convention and it employs heuristics for determining linear dependence or independence of actuator parameters. Numerical methods (especially QR) are easy to implement and not limited to a specific convention, thus they should be the first choice when approaching parameter reduction.</p>
<p>The choice of trajectory significantly affects the accuracy of identification. For example, random point-to-point motion will most probably not lead to accurate parameter estimates because of the lack of property called persistence of excitation (Anderson, <xref ref-type="bibr" rid="B2">1982</xref>). To find a persistently exciting trajectory it is necessary to carry out trajectory planning that is usually posed as an optimization problem (non-linear program) that aims to find <inline-formula><mml:math id="M10"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mo>*</mml:mo></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:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mstyle></mml:mrow><mml:mrow><mml:mo>*</mml:mo></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:math></inline-formula>, and <inline-formula><mml:math id="M11"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mstyle></mml:mrow><mml:mrow><mml:mo>*</mml:mo></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:math></inline-formula> such that chosen objective function associated with persistence of excitation is minimized. The most commonly used objective functions are condition number of the observation matrix [cond(<bold><italic>W</italic></bold><sub><italic>b</italic></sub>), for the definition of <bold><italic>W</italic></bold><sub><italic>b</italic></sub> see Equation (5)] or log-determinant of the moment matrix (<inline-formula><mml:math id="M12"><mml:mtext>log</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mtext>det</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>) (Hollerbach et al., <xref ref-type="bibr" rid="B21">2016</xref>). For industrial manipulators, several families of trajectories were proposed in the literature: fifth-order polynomials (Atkeson et al., <xref ref-type="bibr" rid="B3">1986</xref>), truncated Fourier series (Swevers et al., <xref ref-type="bibr" rid="B37">1997</xref>), and their combination (Wu et al., <xref ref-type="bibr" rid="B44">2012</xref>). Fifth order polynomials have fewer parameters to optimize and can guarantee zero velocity and acceleration in the beginning and at the end of the trajectory. Periodic trajectories have an advantage in terms of data processing, as the same periodic trajectory can be executed several times and the collected data can be averaged. Moreover, they allow for exact frequency domain differentiation. However, there is a disadvantage in terms of abrupt change in initial velocities and accelerations (<inline-formula><mml:math id="M13"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, <inline-formula><mml:math id="M14"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></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:mo>&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, <inline-formula><mml:math id="M15"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, <inline-formula><mml:math id="M16"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></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:mo>&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>), which may cause robot vibration as well as hinder accurate trajectory tracking. Even in cases when zero initial and final velocities and accelerations are imposed as constraints of the optimization problem, the solver struggles to satisfy the constraints. The addition of a fifth-order polynomial solves this problem leading to the trajectory in the form</p>
<disp-formula id="E4"><label>(4)</label><mml:math id="M17"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></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:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:munderover></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003C9;</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mi>k</mml:mi></mml:mrow></mml:mfrac><mml:mtext>sin</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003C9;</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mi>k</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003C9;</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mi>k</mml:mi></mml:mrow></mml:mfrac><mml:mtext>cos</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003C9;</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mi>k</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>&#x0002B;</mml:mo><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:munderover></mml:mstyle><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:mi>t</mml:mi><mml:mo>-</mml:mo><mml:mrow><mml:mo stretchy='false'>&#x0230A;</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:mfrac></mml:mrow><mml:mo stretchy='false'>&#x0230B;</mml:mo></mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msup><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>w</italic><sub><italic>f</italic></sub> is the fundamental frequency, <italic>N</italic> is the number of harmonics, and &#x0230A; &#x0230B; is floor function.</p>
<p>Once trajectory planning has been performed, it is necessary to execute the trajectory on a real robot in closed-loop and record currents/torques, generalized positions <bold><italic>q</italic></bold>(<italic>t</italic>), and, if available, generalized velocities <inline-formula><mml:math id="M18"><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mstyle><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:math></inline-formula>. After the trajectory execution, the recorded data should be processed to remove measurement noise and to reconstruct missing variables from the available ones. If <inline-formula><mml:math id="M19"><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mstyle><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:math></inline-formula> are measurable, then only accelerations have to be estimated from velocities; otherwise, velocities have to be found first based on position measurements. As data processing is performed offline, the central difference scheme should be used for a more accurate estimation of derivatives (Hoffman and Frankel, <xref ref-type="bibr" rid="B20">2018</xref>). However, derivative estimates are noisy even with a central difference scheme, so they should be filtered. To avoid introducing delays, non-casual filters (a zero-phase filter) should be used during filtering (Mitra and Kuo, <xref ref-type="bibr" rid="B28">2006</xref>).</p>
<p>For parameter estimation, it is necessary to calculate observation matrix <bold><italic>W</italic></bold><sub><italic>b</italic></sub>(&#x000B7;) and observation vector <bold><italic>T</italic></bold> from the collected and processed data as</p>
<disp-formula id="E5"><label>(5)</label><mml:math id="M20"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>.</mml:mo><mml:mo>.</mml:mo><mml:mo>.</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo>(</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>;</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>then, compute base parameters estimates employing ordinary least squares</p>
<disp-formula id="E6"><label>(6)</label><mml:math id="M21"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>which minimizes the squared torque prediction error, i.e., the cost function <inline-formula><mml:math id="M22"><mml:mi>J</mml:mi><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy='false'>&#x02016;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:msub><mml:mo stretchy='false'>&#x02016;</mml:mo><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>. However, Equation (5) does not guarantee the physical consistency of parameters, thus the properties of the dynamic model (Siciliano et al., <xref ref-type="bibr" rid="B33">2010</xref>). Since model-based techniques are extensively used in robotics, and the properties of dynamic equations are used to prove theorems and to guarantee convergence of controllers and observers, several important developments have been made in dynamic parameter identification in terms of the physical consistency of parameters. First, Sousa and Cortes&#x000E3;o (<xref ref-type="bibr" rid="B35">2014</xref>) proposed to impose linear matrix inequality constraint on kinetic energy, more specifically&#x02014;on the generalized inertia matrix of each link (semi-physical consistency)</p>
<disp-formula id="E7"><label>(7)</label><mml:math id="M23"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x0227B;</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>S</italic></bold>(&#x000B7;) is the operator that maps a 3 &#x000D7; 1 vector into a 3 &#x000D7; 3 skew-symmetric matrix. Then, Wensing et al. (<xref ref-type="bibr" rid="B42">2017</xref>) and Sousa and Cortesao (<xref ref-type="bibr" rid="B36">2019</xref>) proposed to impose triangle inequality as the linear matrix inequality constraint (physical consistency)</p>
<disp-formula id="E8"><label>(8)</label><mml:math id="M24"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mi>t</mml:mi><mml:mi>r</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msubsup></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x0227B;</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Besides the constraints on inertial parameters of links, it is possible to impose constraints on other dynamic parameters: reflected inertia (<italic>J</italic><sub><italic>i</italic></sub> &#x0003E; 0) and friction (<inline-formula><mml:math id="M25"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0003E;</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:mo>&#x0003E;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>). To impose physical or semi&#x02013;physical consistency constraints while searching for base parameters, Sousa and Cortes&#x000E3;o (<xref ref-type="bibr" rid="B35">2014</xref>) proposed a bijective mapping from the base and dependent parameters to standard parameters. It does not require additional computation, rather uses the result of base parameter calculation.</p>
<p>For some robots, instead of torque measurements, current measurements are available. In such cases, in addition to <bold><italic>&#x003C0;</italic></bold> (<bold><italic>&#x003C0;</italic></bold><sub><italic>b</italic></sub>), it is necessary to estimate drive gains. For that, Gautier and Briot (<xref ref-type="bibr" rid="B13">2014</xref>) proposed to carry out an additional experiment with a load attached to the end-effector of the robot and use the extended observation vector <bold><italic>T</italic></bold> and matrix <bold><italic>W</italic></bold><sub><italic>be</italic></sub></p>
<disp-formula id="E9"><label>(9)</label><mml:math id="M26"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>K</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi><mml:mi>e</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>I</italic></bold><sub><italic>u</italic></sub> and <bold><italic>I</italic></bold><sub><italic>l</italic></sub> are current measurements for unloaded and loaded cases respectively; <bold><italic>K</italic></bold> is a vector of drive gains; <inline-formula><mml:math id="M27"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mn>10</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> is the observation matrix of the load, divided into parts corresponding to unknown and known inertial parameters. Using Equation (9), it is possible to derive the dynamics equation in a regression form linear with respect to unknown parameters</p>
<disp-formula id="E10"><label>(10)</label><mml:math id="M28"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>W</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi><mml:mi>u</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>K</mml:mi></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>that allows estimating base dynamic parameters, unknown load inertial parameters, and drive gains, satisfying the (semi)-physical consistency constraints provided that some of the parameters of the load <bold><italic>&#x003C0;</italic></bold><sub><italic>lk</italic></sub> are known (at least one), usually it is mass because it is easier to measure compared with other inertial parameters. Gautier and Briot (<xref ref-type="bibr" rid="B13">2014</xref>) proposed another method for computing drive gains using total least squares to avoid bias errors caused by the same <inline-formula><mml:math id="M29"><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><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>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mstyle><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:math></inline-formula>, and <inline-formula><mml:math id="M30"><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mstyle><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:math></inline-formula> used in both parts of Equation (10). However, it is not clear how to impose constraints in that case; without constraints, such a computation method can result in negative drive gains.</p>
<p><italic>Remark. For drive gain identification, it is important to choose a load such that torques for loaded and unloaded trajectories differ. It can be achieved by choosing a heavy load and attaching it in a way that is not aligned with the axis of the end-effector</italic>.</p>
<p>After the identification of parameters, model validation should be performed to assess the accuracy of torque prediction for any arbitrary trajectory executed by the robot. One example of a metric that can be used to measure accuracy is root mean square for the prediction error. If torque predictions are poor, then steps 3 to 6 should be repeated until the accurate model of the robot is obtained.</p></sec>
<sec>
<title>2.2. Disturbance Estimation</title>
<p>Ideally, to implement collision detection, it is necessary to estimate <bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub>, as it is the only indicator of the collision. However, even with the most recent model identification methods, it is impossible to reconstruct the exact model of a robot (Equation 1). The most accurate model available is</p>
<disp-formula id="E11"><label>(11)</label><mml:math id="M31"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>e</mml:mi><mml:mi>x</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>with a mismatch between the real model and its estimate (unmodeled dynamics) being equal to</p>
<disp-formula id="E12"><label>(12)</label><mml:math id="M32"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>u</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Using Equation (12) it is possible to rewrite Equation (11) as</p>
<disp-formula id="E13"><label>(13)</label><mml:math id="M33"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Thus, the parameter that can be estimated is lumped disturbance <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub> &#x0003D; &#x02212;<bold><italic>&#x003C4;</italic></bold><sub><italic>um</italic></sub> &#x0002B; <bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub>. If variables <bold><italic>q</italic></bold>, <inline-formula><mml:math id="M34"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula>, <inline-formula><mml:math id="M35"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:math></inline-formula>, <bold><italic>&#x003C4;</italic></bold> can be measured, then the vector of disturbance torques can be found from Equation (13) through straightforward subtraction. In practice, this approach is hardly applicable, since acceleration measurements are not available, and estimating them from noisy velocity measurements through numerical differentiation further amplifies noise. Therefore, more sophisticated techniques should be considered that would allow for estimating <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub> in absence of acceleration measurements. In the following two subsections we review several disturbance observers proposed in the context of pHRI.</p>
<sec>
<title>2.2.1. Non-linear Disturbance Observer (NDOB)</title>
<p>Inspired by the disturbance observer for linear systems, Chen et al. (<xref ref-type="bibr" rid="B5">2000</xref>)&#x02014;first assuming that acceleration measurements are available&#x02014;proposed an observer for lumped disturbance estimation</p>
<disp-formula id="E14"><label>(14)</label><mml:math id="M36"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>L</italic></bold> &#x02208; &#x0211D;<sup><italic>n</italic>&#x000D7;<italic>n</italic></sup> is the observer gain matrix. In general, the error dynamics of the observer is</p>
<disp-formula id="E15"><label>(15)</label><mml:math id="M37"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>if there is no prior information on <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub>, then <inline-formula><mml:math id="M38"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is set to zero yielding</p>
<disp-formula id="E16"><label>(16)</label><mml:math id="M39"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>When <bold><italic>L</italic></bold> is a constant stable matrix, the estimation error tends to be zero. However, due to lack of acceleration measurements, the authors modified the original observer by introducing an auxiliary variable <inline-formula><mml:math id="M40"><mml:mstyle mathvariant="bold-italic"><mml:mi>z</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> such that</p>
<disp-formula id="E17"><label>(17)</label><mml:math id="M41"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:mfrac><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>while the dynamics of <bold><italic>z</italic></bold> is:</p>
<disp-formula id="E18"><label>(18)</label><mml:math id="M42"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>z</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>z</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>(It is obtained by taking the time derivative of <bold><italic>z</italic></bold> followed by substituting Equation (14) for <inline-formula><mml:math id="M43"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and Equation (13) for <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub>.) The special choice of <inline-formula><mml:math id="M44"><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> used in modified observer results is the same error dynamics as the original observer (Equation 14).</p>
<p>The main difficulty in designing NDOB is choosing gain matrix <bold><italic>L</italic></bold> and vector <inline-formula><mml:math id="M45"><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. Chen et al. (<xref ref-type="bibr" rid="B5">2000</xref>) proposed a design procedure for planar 2 degrees of freedom (DOF) manipulator, Nikoobin and Haghighi (<xref ref-type="bibr" rid="B31">2009</xref>) extended it to n-DOF planar manipulators. Later, Mohammadi et al. (<xref ref-type="bibr" rid="B29">2013</xref>) extended the observer to the spatial case, more specifically authors proposed to choose <bold><italic>L</italic></bold> and <bold><italic>&#x003C8;</italic></bold> as</p>
<disp-formula id="E19"><label>(19)</label><mml:math id="M46"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mstyle><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>For <inline-formula><mml:math id="M47"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> using candidate Lyapunov function <inline-formula><mml:math id="M48"><mml:mi>V</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>e</mml:mi></mml:mstyle></mml:math></inline-formula> they proved that if <bold><italic>X</italic></bold> is invertible and there exists positive definite symmetric matrix <bold>&#x00393;</bold> such that <inline-formula><mml:math id="M49"><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>X</mml:mi></mml:mstyle><mml:mo>&#x02265;</mml:mo><mml:mstyle mathvariant="bold"><mml:mo>&#x00393;</mml:mo></mml:mstyle></mml:math></inline-formula> then disturbance estimation error converges exponentially to zero (Mohammadi et al., <xref ref-type="bibr" rid="B29">2013</xref>, Theorem 1). For <inline-formula><mml:math id="M50"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula> if the rate of change of the lumped disturbance is bounded i.e., <inline-formula><mml:math id="M51"><mml:mo stretchy='false'>&#x02016;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo stretchy='false'>&#x02016;</mml:mo><mml:mo>&#x02264;</mml:mo><mml:mi>&#x003BA;</mml:mi><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mi>&#x003BA;</mml:mi><mml:mo>&#x0003E;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, it was proven that the estimation error exponentially converges to a ball of a certain radius (Mohammadi et al., <xref ref-type="bibr" rid="B29">2013</xref>, Theorem 2). In both cases, to design <bold><italic>X</italic></bold> the user can either solve linear matrix inequality</p>
<disp-formula id="E20"><label>(20)</label><mml:math id="M52"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mo>-</mml:mo><mml:mi>&#x003BE;</mml:mi><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mtd><mml:mtd><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mtd><mml:mtd><mml:msup><mml:mrow><mml:mstyle mathvariant="bold"><mml:mo>&#x00393;</mml:mo></mml:mstyle></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>&#x02265;</mml:mo><mml:mn>0</mml:mn><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>Y</italic></bold> &#x0003D; <bold><italic>X</italic></bold><sup>&#x02212;1</sup>, &#x003BE; is upper bound of <inline-formula><mml:math id="M53"><mml:mo stretchy='false'>&#x02016;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo stretchy='false'>&#x02016;</mml:mo></mml:math></inline-formula> and <bold><italic>I</italic></bold> is identity matrix of proper dimension, or use analytical solution for the case when matrices <bold><italic>Y</italic></bold> and <bold>&#x00393;</bold> are scaled identity matrices</p>
<disp-formula id="E21"><label>(21)</label><mml:math id="M54"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>5</mml:mn><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>&#x003BE;</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>2</mml:mn><mml:mi>&#x003B2;</mml:mi><mml:msub><mml:mrow><mml:mi>&#x003C3;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where &#x003B2; is minimum convergence rate, &#x003C3; is upper bound of inertia matrix (<bold><italic>M</italic></bold>(<bold><italic>q</italic></bold>) &#x02264; &#x003C3;<sub>2</sub><bold><italic>I</italic></bold>).</p></sec>
<sec>
<title>2.2.2. Momentum Observer</title>
<p>Another widely used approach for disturbance estimation is based on generalized momentum and was proposed in the context of actuator fault detection and isolation (De Luca and Mattone, <xref ref-type="bibr" rid="B7">2003</xref>). Below we show the derivation of the observer following the same steps as for NDOB. Given the definition of the momenta</p>
<disp-formula id="E22"><label>(22)</label><mml:math id="M55"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>and its time derivative</p>
<disp-formula id="E23"><label>(23)</label><mml:math id="M56"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>we can rewrite the disturbance dynamics defined in Equation (14) in terms of the rate of change of momentum</p>
<disp-formula id="E24"><label>(24)</label><mml:math id="M57"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>If gain matrix <bold><italic>L</italic></bold> is constant, then by integrating both parts we can obtain a so-called momentum observer (Haddadin et al., <xref ref-type="bibr" rid="B18">2017</xref>)</p>
<disp-formula id="E25"><label>(25)</label><mml:math id="M58"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>L</mml:mi></mml:mstyle><mml:mrow><mml:mo>{</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:msubsup><mml:mrow><mml:mo>&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msubsup></mml:mstyle><mml:mrow><mml:mo>(</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mi>d</mml:mi><mml:mi>&#x003BE;</mml:mi><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>}</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Compared with NDOB, momentum observer does not require inertia matrix inversion and each diagonal entry of the gain matrix <bold><italic>L</italic></bold> can be assigned independently.</p>
<p>Equation (23) can be interpreted as linear system</p>
<disp-formula id="E26"><label>(26)</label><mml:math id="M59"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mi>u</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M60"><mml:mstyle mathvariant="bold-italic"><mml:mi>u</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> and <bold>0</bold> is zero matrix of proper dimension. In Oh and Chung (<xref ref-type="bibr" rid="B32">1999</xref>), the authors used Equation (26) together with apriori information on disturbance&#x02013;the disturbance is the output of some linear system (Johnson, <xref ref-type="bibr" rid="B23">1971</xref>)</p>
<disp-formula id="E27"><label>(27)</label><mml:math id="M61"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C9;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>G</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C9;</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C9;</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>&#x02013; to obtain extended linear system</p>
<disp-formula id="E28"><label>(28)</label><mml:math id="M62"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B6;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>G</mml:mi></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B6;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>u</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>y</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>I</mml:mi></mml:mstyle></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B6;</mml:mi></mml:mstyle><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>&#x003B6;</italic></bold> &#x0003D; <inline-formula><mml:math id="M63"><mml:mrow><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mstyle mathvariant='bold-italic'><mml:mi>p</mml:mi></mml:mstyle><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:msup><mml:mstyle mathvariant='bold-italic'><mml:mi>&#x003C9;</mml:mi></mml:mstyle><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> is the extended state vector. Then Oh and Chung (<xref ref-type="bibr" rid="B32">1999</xref>) used a reduced state observer in order to estimate <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub>. Hu and Xiong (<xref ref-type="bibr" rid="B22">2017</xref>) assumed that both states and output of Equation (28) are affected by white Gaussian noise and used the Kalman filter to estimate <bold><italic>&#x003C4;</italic></bold><sub><italic>d</italic></sub>.</p></sec>
<sec>
<title>2.2.3. Sliding Mode Momentum Observer</title>
<p>Garofalo et al. (<xref ref-type="bibr" rid="B10">2019</xref>) proposed a second-order sliding mode (Super Twisting Algorithm, Fridman and Levant, <xref ref-type="bibr" rid="B9">2002</xref>) extension of the classical momentum observer:</p>
<disp-formula id="E29"><label>(29)</label><mml:math id="M64"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>u</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>|</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:msup><mml:mrow><mml:mo>|</mml:mo></mml:mrow><mml:mrow><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mrow></mml:msup><mml:mi>s</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle><mml:mtext>&#x000A0;</mml:mtext><mml:mi>s</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <bold><italic>S</italic></bold>, <bold><italic>T</italic></bold> &#x02208; &#x0211D;<sup><italic>n</italic>&#x000D7;<italic>n</italic></sup> are positive definite diagonal matrices with diagonal elements satisfying conditions given in Moreno and Osorio (<xref ref-type="bibr" rid="B30">2008</xref>) that guarantees global finite-time stability of the equilibrium point <inline-formula><mml:math id="M65"><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mtd><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C3;</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:math></inline-formula>. Convergence property of the second order sliding mode observer can be improved&#x02014;from finite time to exponential&#x02014;by introducing linear correction terms (Moreno and Osorio, <xref ref-type="bibr" rid="B30">2008</xref>; Garofalo et al., <xref ref-type="bibr" rid="B10">2019</xref>):</p>
<disp-formula id="E30"><label>(30)</label><mml:math id="M66"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>u</mml:mi></mml:mstyle><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy='false'>|</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:msup><mml:mrow><mml:mo stretchy='false'>|</mml:mo></mml:mrow><mml:mrow><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mrow></mml:msup><mml:mi>s</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C3;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mi>s</mml:mi><mml:mi>g</mml:mi><mml:mi>n</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>A sliding mode momentum observer is superior to a classical momentum observer in terms of noise attenuation and convergence time; however, it requires tuning many more parameters.</p></sec>
<sec>
<title>2.2.4. Filtered Dynamics Observer</title>
<p>A different approach to disturbance estimation was put forward in Van Damme et al. (<xref ref-type="bibr" rid="B40">2011</xref>) and Ho and Song (<xref ref-type="bibr" rid="B19">2013</xref>) where they used the idea from online dynamic parameter estimation: if both parts of Equation (13) are filtered with a strictly stable filter then there is no need for acceleration measurements. To outline the derivation, assume we choose a filter with a transfer function</p>
<disp-formula id="E31"><label>(31)</label><mml:math id="M67"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mi>F</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>s</mml:mi><mml:mo>/</mml:mo><mml:mi>&#x003C9;</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:mfrac><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>and impulse response <inline-formula><mml:math id="M68"><mml:mi>f</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>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mi mathvariant="-tex-caligraphic">L</mml:mi></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>F</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>&#x003C9;</mml:mi><mml:mtext>&#x000A0;exp&#x000A0;</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mi>&#x003C9;</mml:mi><mml:mi>t</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. Multiplying both parts of Equation (13) by Equation (31) is equivalent to</p>
<disp-formula id="E32"><label>(32)</label><mml:math id="M69"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mi>f</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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mi>f</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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where &#x0002A; is used to denote convolution operation. Using properties of the convolution operation, we can rewrite Equation (32) as</p>
<disp-formula id="E33"><label>(33)</label><mml:math id="M70"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mi>f</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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mover accent='true'><mml:mi>f</mml:mi><mml:mo>&#x0002E;</mml:mo></mml:mover><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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mi>f</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mi>f</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:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>&#x0002B;</mml:mo><mml:mi>f</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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M71"><mml:mover accent='true'><mml:mi>f</mml:mi><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula>(<italic>t</italic>) is the impulse response of a stable filter</p>
<disp-formula id="E34"><label>(34)</label><mml:math id="M72"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>F</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>s</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msup><mml:mrow><mml:mi>&#x003C9;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>s</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mi>&#x003C9;</mml:mi></mml:mrow></mml:mfrac><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Rearranging Equation (33) and using properties of the rigid body dynamics, it is possible to obtain an expression for filtered disturbance</p>
<disp-formula id="E35"><label>(35)</label><mml:math id="M73"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mi>f</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>*</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mover accent='true'><mml:mi>f</mml:mi><mml:mo>&#x0002E;</mml:mo></mml:mover><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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mi>&#x003C9;</mml:mi><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mi>f</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>*</mml:mo><mml:mrow><mml:mo stretchy='false'>{</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy='false'>}</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>(For detailed derivation see Lewis et al., <xref ref-type="bibr" rid="B24">2003</xref> Chapter 6.6 or Van Damme et al., <xref ref-type="bibr" rid="B40">2011</xref>). Van Damme et al. (<xref ref-type="bibr" rid="B40">2011</xref>) showed that momentum observer and filtered dynamics observer are equivalent for special choice of <bold><italic>L</italic></bold> in Equation (25): all diagonal entries are the same.</p></sec></sec>
<sec>
<title>2.3. Collision Detection</title>
<p>From Equation (13) we know that disturbance observers estimate the sum of torques due to unmodeled dynamics and interaction. An easy and effective way to detect collisions in presence of unmodeled dynamics is to set a static threshold (upper and lower bounds on unmodeled dynamics). The value of the threshold can be chosen as a percentage from maximum torque, for example, &#x000B1;0.1&#x003C4;<sub><italic>max</italic></sub> (Haddadin et al., <xref ref-type="bibr" rid="B16">2008</xref>) or determined from data used for validation of dynamic parameters. However, inaccurate parameter identification or use of dynamic parameters from CAD may result in a high threshold yielding long collision detection time. To deal with it several solutions were proposed in the literature.</p>
<p>Hu and Xiong (<xref ref-type="bibr" rid="B22">2017</xref>) proposed to improve the dynamic model by training a neural network (multi-layer perceptron) to predict the residual between measured torques and torques found from a rigid body model. As the input of the network, they used generalized positions and velocities that, according to authors, provide the same degree of accuracy as the network with generalized positions, velocities, and accelerations. Rigid body model enhanced with neural network allowed authors to choose tight thresholds thus decrease collision detection time.</p>
<p>Ho and Song (<xref ref-type="bibr" rid="B19">2013</xref>) proposed using a 2nd order band-pass filter in Equation (33) instead of a low-pass filter (Equation 31). By carefully choosing cut-off frequencies they were able to filter out low-frequency torques due to the motion of the robot and high-frequency torques due to noise, leaving torques caused by the collision. Band-pass filtering allowed authors to decrease threshold 5-fold compared to classical momentum observer yielding to the detection of collision in 5&#x02013;6 ms. However, their approach is limited to cases when the dynamics of collision is significantly faster than the dynamics of the task, moreover, band-pass filtering modifies estimated disturbance torques making them impossible to use, for example, in collision localization. Haddadin et al. (<xref ref-type="bibr" rid="B16">2008</xref>) and Li et al. (<xref ref-type="bibr" rid="B25">2019</xref>) proposed to use two observers, one to detect slow or soft collisions using low-pass filtered collision torques and one to detect fast collisions using band-pass filtered collision torques.</p>
<p>Sotoudehnejad et al. (<xref ref-type="bibr" rid="B34">2012</xref>) proposed using time-variant thresholds that take into account uncertainties in inertial parameters of the robot as well as friction parameters. To estimate uncertainties authors proposed to conduct time-consuming experiments with a robot applying various collision torque at different states. Although it sounds promising, the difference in the detection time between the time-variant threshold and constant threshold is of the order of 0.1&#x02013;0.01 s. Briquet-Kerestedjian et al. (<xref ref-type="bibr" rid="B4">2019</xref>) proposed to also consider uncertainties due to numerical differentiation used to find generalized velocities and acceleration from noisy encoder measurements. Their approach is different from Sotoudehnejad et al. (<xref ref-type="bibr" rid="B34">2012</xref>) in a way they treat the model of the manipulator. Briquet-Kerestedjian et al. (<xref ref-type="bibr" rid="B4">2019</xref>) consider a decentralized linear model and treats non-linear coupling between joints as a disturbance. It allows authors to use linear estimation techniques such as Kalman filter. Sotoudehnejad et al. (<xref ref-type="bibr" rid="B34">2012</xref>) on the other hand consider a centralized non-linear model of the manipulator and use the momentum observer. In general, it is not clear if time-consuming experiments worth the amount of time gained in collision detection time and if the time-variant threshold is robust and provide consistent result in the whole workspace of the robot.</p></sec></sec>
<sec id="s3">
<title>3. Case Study: UR10e</title>
<p>In this section, we demonstrate all the steps required to implement model-based collision detection on real robot UR10e which is a collaborative industrial robot arm from the Universal Robots company. It weighs 33.5 kg, has a 10 kg payload, and the radius of workspace up to 1,300 mm. The robot consists of six rotating joints which allow having the full degree of freedom in Cartesian space.</p>
<sec>
<title>3.1. Software Implementation</title>
<p>Within the scope of this work, we developed a C&#x0002B;&#x0002B; library for processing the measurements and estimating disturbance torques (<ext-link ext-link-type="uri" xlink:href="https://github.com/mikhel1984/ext_observer">https://github.com/mikhel1984/ext_observer</ext-link>). The library consists of two basic abstract classes: robot and observer. The former provides an interface for defining the dynamic model of a robot. The latter allows working with an observer regardless of its internal implementation: it defines an obligatory method that takes current joint angles, velocities, torques, and time step, and returns the disturbance torque estimate. The library can be included in the source code of a robot control program, used with MATLAB (loaded as a C shared library) or robot operating system (ROS) as a standalone component.</p>
<p>To start working with the library, a user has to create a new robot instance inheriting the basic abstract class and define its dynamic model. The dynamic model can be supplied in two forms: functions for <inline-formula><mml:math id="M74"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M75"><mml:mrow><mml:mover accent='true'><mml:mstyle mathvariant='bold-italic'><mml:mi>C</mml:mi></mml:mstyle><mml:mo stretchy='true'>&#x0005E;</mml:mo></mml:mover><mml:mo stretchy='false'>(</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>q</mml:mi><mml:mo>&#x002D9;</mml:mo></mml:mover></mml:mstyle><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:math></inline-formula>, <inline-formula><mml:math id="M76"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>F</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, and <inline-formula><mml:math id="M77"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> generated based on symbolically derived model; numerical procedure such as recursive Newton-Euler algorithm (RNEA) implemented as <inline-formula><mml:math id="M78"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> where subscript <italic>g</italic> indicates the value of the gravity constant. If the dynamics of the robot is computed numerically, the problem arises related to the computation of <inline-formula><mml:math id="M79"><mml:mrow><mml:mover accent='true'><mml:mstyle mathvariant='bold-italic'><mml:mi>C</mml:mi></mml:mstyle><mml:mo stretchy='true'>&#x0005E;</mml:mo></mml:mover><mml:msup><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle mathvariant='bold'><mml:mover accent='true'><mml:mi>q</mml:mi><mml:mo>&#x002D9;</mml:mo></mml:mover></mml:mstyle><mml:mo stretchy='false'>)</mml:mo></mml:mrow><mml:mi>T</mml:mi></mml:msup></mml:mrow></mml:math></inline-formula> used in the majority of the observers. One way to overcome this problem is to use the modified Newton-Euler algorithm (De Luca and Ferrajoli, <xref ref-type="bibr" rid="B6">2009</xref>), another is to use the numerical approximation of the time derivative of the inertia matrix (<inline-formula><mml:math id="M80"><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x02248;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>t</mml:mi></mml:math></inline-formula>). Even though the second method is easier to implement, its accuracy depends on sampling time &#x00394;<italic>t</italic>. We propose a simple way to improve the accuracy, by using the definition of the rate of change of the inertia matrix</p>
<disp-formula id="E36"><label>(36)</label><mml:math id="M81"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mfrac><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow></mml:mfrac><mml:mo>&#x02026;</mml:mo><mml:mfrac><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo>&#x02202;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M82"><mml:mo>&#x02202;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>/</mml:mo><mml:mo>&#x02202;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02248;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mo>/</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> has to be calculated numerically, for example, with finite differences. Further, noting that all the observers we have discussed utilize the product <inline-formula><mml:math id="M83"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> and <inline-formula><mml:math id="M84"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula> rather than <inline-formula><mml:math id="M85"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula>, it is possible to reduce computational costs by evaluating the product directly as <inline-formula><mml:math id="M86"><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula> or</p>
<disp-formula id="E37"><label>(37)</label><mml:math id="M87"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>&#x02248;</mml:mo><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:munderover></mml:mstyle><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M88"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>p</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>r</mml:mi><mml:mi>n</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle mathvariant="bold"><mml:mn>0</mml:mn></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> and <italic>n</italic> is the number of joints. From a computational point of view Equation (37) is cheaper than computing <inline-formula><mml:math id="M89"><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula> and <inline-formula><mml:math id="M90"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:math></inline-formula> separately because it allows avoiding multiple calls of <bold><italic>rnea</italic></bold><sub><italic>g</italic></sub>(&#x000B7;) for column-wise evaluation of the matrix <inline-formula><mml:math id="M91"><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:math></inline-formula>.</p>
<p>Each observer has to be initialized when called for the first time; we suggest initializing based on the assumption that there is no collision, and disturbance torques are equal to zero. Moreover, each observer depends on its previous states that can be implicit as in the case of filters, or explicit and implemented via the integration of some parameters. Therefore, observer does not work as a &#x0201C;pure function&#x0201D; and cannot be used several times during a time instant.</p>
<sec>
<title>3.1.1. NDOB</title>
<p>NDOB is among the easiest in terms of implementation, partially because it does not require <inline-formula><mml:math id="M92"><mml:mrow><mml:mstyle mathvariant='bold-italic'><mml:mi>C</mml:mi></mml:mstyle><mml:msup><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>q</mml:mi><mml:mo>&#x002D9;</mml:mo></mml:mover></mml:mstyle><mml:mo stretchy='false'>)</mml:mo></mml:mrow><mml:mi>T</mml:mi></mml:msup><mml:mover><mml:mstyle mathvariant='bold-italic'><mml:mi>q</mml:mi></mml:mstyle><mml:mo>.</mml:mo></mml:mover></mml:mrow></mml:math></inline-formula>. The dynamics of the auxiliary variable (Equation 18) can be stiff for high convergence rates, therefore, to integrate it, we used the implicit Euler method. As for initialization, since the output is <inline-formula><mml:math id="M93"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>z</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, the initial value can be set to <inline-formula><mml:math id="M94"><mml:mstyle mathvariant="bold-italic"><mml:mi>z</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C8;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. In terms of performance, NDOB was among the slowest (<bold>Table 3</bold>) because of the matrix inversion, to decrease computation time associated with it the properties of the inertia matrix have to be exploited.</p>
</sec>
<sec>
<title>3.1.2. Momentum Observer</title>
<p>The observer retains states of the integrator <inline-formula><mml:math id="M95"><mml:msubsup><mml:mrow><mml:mo>&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo>(</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle><mml:mo>&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub><mml:mo>)</mml:mo></mml:mrow><mml:mi>d</mml:mi><mml:mi>&#x003BE;</mml:mi></mml:math></inline-formula>, that can be initialized with zeros, but it is better to use &#x02212;<italic>p</italic>(0) to avoid subtraction during the next calls. The efficiency of the observer depends on the accuracy of integration; a comparison of different integration schemes showed that a simple trapezoidal rule is sufficient for high sampling rates.</p></sec>
<sec>
<title>3.1.3. Sliding Mode Momentum Observer</title>
<p>Both observers Equation (29) and Equation (30) can be implemented in single program code, as they only differ in coefficients <bold><italic>T</italic></bold><sub>2</sub>, <bold><italic>S</italic></bold><sub>2</sub> that can be set to zero for second-order sliding mode observer. In our implementation, the dynamics of the observers is integrated using the explicit Euler method, and <italic>sgn</italic>(&#x000B7;) is replaced with the hyperbolic tangent to remove chattering. To initialize, <inline-formula><mml:math id="M96"><mml:mstyle mathvariant="bold-italic"><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> can be set to <bold><italic>p</italic></bold>(0).</p></sec>
<sec>
<title>3.1.4. Kalman Filter Observer</title>
<p>The method evaluates the variable <bold><italic>u</italic></bold> and calls the implementation of the discrete-time Kalman filter. The filter requires the user to define the discrete-time model of the system (Equation 28). If the sampling rate is constant, then the discrete-time model can be calculated from the original continuous-time model offline. However, if sampling time varies then online matrix exponent computation has to be used. For a high sampling rate, we approximated matrix exponential by the first terms of its Taylor series expansion.</p></sec>
<sec>
<title>3.1.5. Filtered Dynamics Observer</title>
<p>The implementation of the observer is based on infinite impulse response filters. In particular, <italic>F</italic>(<italic>s</italic>) and <italic>F</italic><sub>2</sub>(<italic>s</italic>) are implemented as <italic>y</italic><sub><italic>i</italic></sub> &#x0003D; <italic>k</italic><sub>1</sub><italic>y</italic><sub><italic>i</italic>&#x02212;1</sub> &#x0002B; <italic>k</italic><sub>2</sub>(<italic>x</italic><sub><italic>i</italic></sub> &#x0002B; <italic>x</italic><sub><italic>i</italic>&#x02212;1</sub>) where <italic>x</italic> and <italic>y</italic> are the input and output respectively, <italic>k</italic><sub>1</sub> and <italic>k</italic><sub>2</sub> are coefficients of the filters. Both coefficients depend on the cut-off frequency of the filter and can be found, for example, via bilinear transforms. For disturbance estimation, <italic>F</italic>(<italic>s</italic>) can be initialized as <inline-formula><mml:math id="M97"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>g</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>C</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:math></inline-formula>, while <italic>F</italic><sub>2</sub>(<italic>s</italic>) as <bold><italic>p</italic></bold>.</p></sec></sec>
<sec>
<title>3.2. Identifying Dynamic Model</title>
<p>Universal Robots provides a description of the UR10e in the universal robot description file (URDF). The file contains kinematic parameters of the robot as well as inertial parameters of links but does not contain inertial parameters of the motors, drive gains, and friction parameters needed for accurate modeling of dynamics. Thus, we performed model identification, following the main steps from section 2.1. First, we symbolically derived regressor matrix <bold><italic>Y</italic></bold>(&#x000B7;) &#x02208; &#x0211D;<sup>6 &#x000D7;84</sup> using kinematic parameters from URDF and Euler-Lagrange formulation of dynamics. Then reduced parameter space using QR&#x02014;decomposition obtaining <inline-formula><mml:math id="M98"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C0;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mn>40</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula> and <inline-formula><mml:math id="M99"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>Y</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi>&#x0211D;</mml:mi></mml:mrow><mml:mrow><mml:mn>6</mml:mn><mml:mo>&#x000D7;</mml:mo><mml:mn>40</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>.</p>
<p>In experiment design, as a trajectory, we chose the combination of truncated Fourier series and fifth-order polynomials (Equation 4); as an objective function&#x02014;condition number of the observation matrix. The optimization problem was posed in MATLAB and solved using the <italic>patternsearch</italic> algorithm. We performed trajectory optimization for different periods <italic>T</italic> (20, 30, 40, 50 s) and number of harmonics <italic>N</italic> (5, 8, 10, 12, 15); the best estimation in terms of root mean square error of torque prediction was obtained for <italic>N</italic> &#x0003D; 12 and <italic>T</italic> &#x0003D; 30 (<xref ref-type="fig" rid="F1">Figure 1</xref>).</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p>Optimized trajectory for dynamic parameter identification, executed on the robot UR10e. The condition number of the base observation matrix is <italic>cond</italic>(<bold><italic>W</italic></bold><sub><italic>b</italic></sub>(&#x000B7;)) &#x02248; 93.27.</p></caption>
<graphic xlink:href="frobt-07-571574-g0001.tif"/>
</fig>
<p>The optimized trajectory was executed on UR10e in the velocity control mode. There are several methods to program the robot to execute the desired trajectory: MATLAB, ROS, UR Script. We used UR Script because it allows sending commands to the robot with a higher sampling rate than other methods. Despite the trajectory tracking capabilities of the UR10e, the nominal and real trajectories do not always coincide because of safety limitations on velocities and accelerations. To overcome that either safety constraints can be removed, or maximum velocity and acceleration constraints can be decreased during the trajectory planning phase.</p>
<p>In the data processing stage currents, positions, and velocities were filtered with zero-phase fifth-order Butterworth filter (the <italic>filtfilt</italic> function in MATLAB). For acceleration estimation, we used numerical differentiation&#x02014;central difference scheme&#x02014;followed by zero-phase filtering to remove the noise.</p>
<p>Parameter estimation was divided into two parts: first, we identified drive gains on one trajectory (<italic>T</italic> &#x0003D; 50, <italic>N</italic> &#x0003D; 14), then on a different trajectory (<italic>T</italic> &#x0003D; 30, <italic>N</italic> &#x0003D; 12) the vector of base and standard parameters. In both cases, physical consistency was imposed by linear matrix inequality constraints using the YALMIP toolbox (Lofberg, <xref ref-type="bibr" rid="B26">2004</xref>). Finally, the parameters were validated on a different harmonic trajectory (<xref ref-type="fig" rid="F2">Figure 2</xref>) for which the root mean square error of torque prediction is <italic>rms</italic> &#x0003D; <inline-formula><mml:math id="M116"><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mn>2.81</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn>4.16</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn>1.90</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn>0.70</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn>0.65</mml:mn></mml:mrow></mml:mtd><mml:mtd><mml:mrow><mml:mn>0.46</mml:mn></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mtext>&#x02009;</mml:mtext><mml:mi>N</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:math></inline-formula>. The estimated parameters are shown in <xref ref-type="table" rid="T1">Tables 1</xref>, <xref ref-type="table" rid="T2">2</xref>.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Validation of identified dynamic parameters. &#x003C4;<sub><italic>i</italic></sub> is measured current multiplied by identified drive gains <italic>k</italic><sub><italic>i</italic></sub>, <inline-formula><mml:math id="M100"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> estimated torque based on identified dynamic paramters.</p></caption>
<graphic xlink:href="frobt-07-571574-g0002.tif"/>
</fig>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p>Identified link parameters.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th/>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>xx</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>xy</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>xz</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>yy</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>yz</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>I</italic><sub><italic>zz</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>h</italic><sub><italic>x</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>h</italic><sub><italic>y</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>h</italic><sub><italic>z</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>m</italic></bold></th>
</tr>
<tr>
<th valign="top" align="left"><bold><italic>No</italic></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic><sup>2</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic></bold></th>
<th valign="top" align="center"><bold><italic>m</italic></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">1</td>
<td valign="top" align="center">16.02</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">16.02</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">10<sup>&#x02212;6</sup></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">4.83</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="center">3.93</td>
<td valign="top" align="center">0.85</td>
<td valign="top" align="center">0.15</td>
<td valign="top" align="center">3.72</td>
<td valign="top" align="center">&#x02212;0.59</td>
<td valign="top" align="center">1.90</td>
<td valign="top" align="center">0.05</td>
<td valign="top" align="center">&#x02212;0.28</td>
<td valign="top" align="center">3.26</td>
<td valign="top" align="center">7.93</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td valign="top" align="center">2.22</td>
<td valign="top" align="center">&#x02212;0.53</td>
<td valign="top" align="center">&#x02212;0.18</td>
<td valign="top" align="center">1.39</td>
<td valign="top" align="center">&#x02212;0.22</td>
<td valign="top" align="center">1.39</td>
<td valign="top" align="center">0.02</td>
<td valign="top" align="center">0.24</td>
<td valign="top" align="center">0.89</td>
<td valign="top" align="center">2.48</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td valign="top" align="center">1.03</td>
<td valign="top" align="center">0.23</td>
<td valign="top" align="center">&#x02212;0.01</td>
<td valign="top" align="center">0.08</td>
<td valign="top" align="center">0.07</td>
<td valign="top" align="center">1.07</td>
<td valign="top" align="center">&#x02212;10<sup>&#x02212;3</sup></td>
<td valign="top" align="center">&#x02212;0.25</td>
<td valign="top" align="center">0.19</td>
<td valign="top" align="center">2.16</td>
</tr>
<tr>
<td valign="top" align="left">5</td>
<td valign="top" align="center">0.03</td>
<td valign="top" align="center">&#x02212;0.03</td>
<td valign="top" align="center">&#x02212;0.03</td>
<td valign="top" align="center">0.11</td>
<td valign="top" align="center">&#x02212;0.01</td>
<td valign="top" align="center">0.11</td>
<td valign="top" align="center">0.01</td>
<td valign="top" align="center">0.09</td>
<td valign="top" align="center">0.11</td>
<td valign="top" align="center">2.16</td>
</tr>
<tr>
<td valign="top" align="left">6</td>
<td valign="top" align="center">0.03</td>
<td valign="top" align="center">&#x02212;10<sup>&#x02212;3</sup></td>
<td valign="top" align="center">&#x02212;0.01</td>
<td valign="top" align="center">0.04</td>
<td valign="top" align="center">&#x02212;10<sup>&#x02212;3</sup></td>
<td valign="top" align="center">0.01</td>
<td valign="top" align="center">10<sup>&#x02212;3</sup></td>
<td valign="top" align="center">&#x02212;10<sup>&#x02212;3</sup></td>
<td valign="top" align="center">&#x02212;0.02</td>
<td valign="top" align="center">0.22</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p>Identified motor and friction parameters.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th/>
<th valign="top" align="center"><bold><italic>K</italic></bold></th>
<th valign="top" align="center"><bold><italic>J</italic></bold></th>
<th valign="top" align="center"><bold><italic>f</italic><sub><italic>v</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>f</italic><sub><italic>c</italic></sub></bold></th>
<th valign="top" align="center"><bold><italic>f</italic><sub>0</sub></bold></th>
</tr>
<tr>
<th valign="top" align="left"><bold><italic>No</italic></bold></th>
<th valign="top" align="center"><bold><italic>N</italic> &#x000B7; <italic>m</italic> &#x000B7; <italic>A</italic><sup>&#x02212;1</sup></bold></th>
<th valign="top" align="center"><bold><italic>kg</italic> &#x000B7; <italic>m</italic></bold></th>
<th valign="top" align="center"><bold><italic>N</italic> &#x000B7; <italic>s</italic></bold></th>
<th valign="top" align="center"><bold><italic>N</italic> &#x000B7; <italic>m</italic></bold></th>
<th valign="top" align="center"><bold><italic>N</italic> &#x000B7; <italic>m</italic></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">1</td>
<td valign="top" align="center">10.0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">21.25</td>
<td valign="top" align="center">12.54</td>
<td valign="top" align="center">0.20</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="center">10.70</td>
<td valign="top" align="center">3.74</td>
<td valign="top" align="center">20.22</td>
<td valign="top" align="center">13.27</td>
<td valign="top" align="center">&#x02212;0.75</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td valign="top" align="center">8.46</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">10.38</td>
<td valign="top" align="center">4.99</td>
<td valign="top" align="center">0.20</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td valign="top" align="center">9.0</td>
<td valign="top" align="center">0.07</td>
<td valign="top" align="center">3.58</td>
<td valign="top" align="center">2.0</td>
<td valign="top" align="center">0.05</td>
</tr>
<tr>
<td valign="top" align="left">5</td>
<td valign="top" align="center">9.48</td>
<td valign="top" align="center">0.23</td>
<td valign="top" align="center">2.49</td>
<td valign="top" align="center">2.69</td>
<td valign="top" align="center">&#x02212;0.01</td>
</tr>
<tr>
<td valign="top" align="left">6</td>
<td valign="top" align="center">10.12</td>
<td valign="top" align="center">0.44</td>
<td valign="top" align="center">3.03</td>
<td valign="top" align="center">2.30</td>
<td valign="top" align="center">0.04</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec>
<title>3.3. Choosing and Tuning Observers</title>
<p>In this subsection we provide the general guideline for selecting and tuning the disturbances observer discussed in the section 2.2. All the observers in absence of collisions show non-zero disturbance torques because of the inaccurate estimates of some dynamic parameters or unmodeled dynamics. The closer identified parameters are to real ones, the smaller are going to be estimated disturbance torques and vice versa. It emphasizes the significance of the accurate dynamic model in estimating torques associated with collisions. For high level comparison of the observers see <xref ref-type="table" rid="T3">Table 3</xref>.</p>
<table-wrap position="float" id="T3">
<label>Table 3</label>
<caption><p>Comparison of observers in terms of computation time (average time needed to predict disturbance torques at a given time instant, laptop parameters: CPU Core i3 2.30GHz, RAM 4 GB) and tuning.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th/>
<th valign="top" align="center"><bold>Average time</bold></th>
<th valign="top" align="center" colspan="2" style="border-bottom: thin solid #000000;"><bold><italic>Tuning</italic></bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center"><bold><italic>ms</italic></bold></th>
<th valign="top" align="center"><bold><italic>Simplicity</italic></bold></th>
<th valign="top" align="center"><bold><italic>Flexibility</italic></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Momentum observer</td>
<td valign="top" align="center">0.028</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
<tr>
<td valign="top" align="left">Nonlinear disturbance observer</td>
<td valign="top" align="center">0.146</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
<tr>
<td valign="top" align="left">Sliding mode observer</td>
<td valign="top" align="center">0.032</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
<tr>
<td valign="top" align="left">Kalman disturbance observer</td>
<td valign="top" align="center">0.294</td>
<td valign="top" align="center">&#x02717;</td>
<td valign="top" align="center">&#x02713;</td>
</tr>
<tr>
<td valign="top" align="left">Filtered dynamics</td>
<td valign="top" align="center">0.028</td>
<td valign="top" align="center">&#x02713;</td>
<td valign="top" align="center">&#x02717;</td>
</tr>
</tbody>
</table>
</table-wrap>
<sec>
<title>3.3.1. NDOB</title>
<p>To use NDOB, a user needs to specify gain matrix <bold><italic>L</italic></bold> and vector <bold><italic>&#x003C8;</italic></bold>, both of which can be obtained from <bold><italic>Y</italic></bold> &#x0003D; <bold><italic>X</italic></bold><sup>&#x02212;1</sup> (Equation 19). There are two approaches to finding <bold><italic>Y</italic></bold>: solving linear matrix inequality for a given positive definite symmetric matrix <bold>&#x00393;</bold> (Equation 20); using analytical solution found for the case when <bold>&#x00393;</bold> and <bold><italic>Y</italic></bold> are constrained to be scaled identity matrices (Equation 21). The latter is easier from a user perspective because it requires tuning single parameter &#x003B2; that defines minimum convergence rate whereas &#x003BE; and &#x003C3;<sub>2</sub> are constants that depend on the dynamics of the robot. While tuning the NDOB, whether matrix <bold>&#x00393;</bold> or scalar &#x003B2;, the user should seek a compromise between convergence rate and measurement noise amplification. <xref ref-type="fig" rid="F3">Figure 3</xref> shows disturbance torque estimation for different values of &#x003B2;. For the second joint the lower is &#x003B2; the less noisy is <inline-formula><mml:math id="M101"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>, but for the fourth joint the value of &#x003B2; does not affect the amount of noise. It is the drawback of the analytical solution that all diagonal elements of <bold><italic>Y</italic></bold> are identical, thus the convergence rate of each joint cannot be tuned separately. Solving linear matrix inequality instead of using an analytical solution can serve as a remedy to this problem.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Disturbance torque estimation for joints 2 and 4 using nonlinear disturbance observer with different rates of convergence &#x003B2;. The change in &#x003C4;<sub><italic>d</italic></sub> is due to collision with the wrist.</p></caption>
<graphic xlink:href="frobt-07-571574-g0003.tif"/>
</fig></sec>
<sec>
<title>3.3.2. Momentum Observer</title>
<p>If <bold><italic>L</italic></bold> in Equation (25) is chosen as diagonal, then the classical momentum observer can be interpreted as <italic>n</italic> low-pass filters driven by disturbance torque of each joint (<xref ref-type="fig" rid="F4">Figure 4</xref>). Therefore, the user can conveniently design each filter independently. On the other hand, the momentum observer can be treated as a linear time-invariant system (Equation 28) where disturbance torques are non-measurable states. In that case, the classical state observer can be designed using pole placement or linear quadratic techniques (&#x000C5;str&#x000F6;m and Murray, <xref ref-type="bibr" rid="B1">2010</xref>). The former is easier because the user needs to specify poles i.e., 12 parameters but it is not optimal, while the latter is more difficult to design as the user needs to tune matrices <bold><italic>Q</italic></bold> &#x02208; &#x0211D;<sup>12&#x000D7;12</sup> and <bold><italic>R</italic></bold> &#x02208; &#x0211D;<sup>6&#x000D7;6</sup> but it is optimal.</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Disturbance torque estimation for joints 2 and 4 using classical momentum observer with different <italic>L</italic>(4, 4). The change in &#x003C4;d is due to collision with the wrist.</p></caption>
<graphic xlink:href="frobt-07-571574-g0004.tif"/>
</fig>
<p>If unmodeled dynamics is mainly due to friction modeling and can be described as zero-mean Gaussian white noise, then theoretically we can estimate <bold><italic>&#x003C4;</italic></bold><sub><italic>ext</italic></sub> by filtering out unmodeled dynamics using the Kalman filter. The price for accuracy is a time-consuming tuning procedure. To design the Kalman filter user needs to identify the diagonal covariance matrix of the unmodeled dynamics <bold><italic>Q</italic></bold><sub>&#x003C4;<sub><italic>um</italic></sub></sub> by individually moving each joint and calculating the variance of the <inline-formula><mml:math id="M102"><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>u</mml:mi><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>, then the diagonal covariance matrix of output measurement <bold><italic>R</italic></bold><sub><italic>p</italic></sub> which is assumed to be mainly due to noise in velocity measurement. In turn, the covariance of the velocity measurement <inline-formula><mml:math id="M103"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>R</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow></mml:msub></mml:math></inline-formula> can be found by moving each joint at a constant velocity and finding the variance of the residual <inline-formula><mml:math id="M104"><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. Then time-variant covariance matrix of the momentum can be computed by applying linear transformation properties of the normal <inline-formula><mml:math id="M105"><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>R</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>R</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0002E;</mml:mo></mml:mover></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>M</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>T</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula>. The only parameter that has to be tuned is the covariance matrix of the external torque dynamics. In the absence of any apriori information, it can be chosen the diagonal. The general guideline is that the larger diagonal elements are the less filter trusts the dynamics and the more amplifies noise. The interested reader is referred to Wahrburg et al. (<xref ref-type="bibr" rid="B41">2017</xref>) for more details. <xref ref-type="fig" rid="F5">Figure 5</xref> shows <inline-formula><mml:math id="M106"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> for three different values of tuning parameter, the estimates are much less noisy and slower even for high values of the tuning parameter compared with other observers. Moreover, it does not filter model noise, probably because the assumptions on the diagonal structure of the covariance matrix as well as the source of unmodeled dynamics are too strong.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Disturbance torque estimation for joints 2 and 4 using Kalman disturbance observer with different disturbance covariance matrices.</p></caption>
<graphic xlink:href="frobt-07-571574-g0005.tif"/>
</fig></sec>
<sec>
<title>3.3.3. Sliding Momentum Observer</title>
<p>The sliding mode observers are the most difficult to tune as they require tuning two matrices for second-order sliding mode observer and four matrices for second-order slide mode observer with linear terms matrices. Even if the matrices are restricted to be diagonal, the user needs to tune 12 and 24, parameters respectively for 6-DOF industrial manipulator. In order to guarantee the stability of the observers, the parameters should satisfy certain constraints (Moreno and Osorio, <xref ref-type="bibr" rid="B30">2008</xref>). To obtain the desired behavior of the observer Garofalo et al. (<xref ref-type="bibr" rid="B10">2019</xref>) suggested considering the observer as a non-linear proportional-integral controller with all underlying tuning procedure. More specifically, they suggest tuning <bold><italic>S</italic></bold>, then starting from <inline-formula><mml:math id="M107"><mml:mstyle mathvariant="bold-italic"><mml:mi>T</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mn>1</mml:mn><mml:mo>.</mml:mo><mml:mn>5</mml:mn><mml:msqrt><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>S</mml:mi></mml:mstyle></mml:mrow></mml:msqrt></mml:math></inline-formula> tune <bold><italic>T</italic></bold>. Linear terms of the second orders sliding mode observer with linear terms can be interpreted as second-order linear filter that allows obtaining the desired damping. For a more detailed discussion of tuning sliding mode momentum observers, readers are referred to Garofalo et al. (<xref ref-type="bibr" rid="B10">2019</xref>).</p></sec>
<sec>
<title>3.3.4. Filtered Dynamics Observer</title>
<p>Probably the simplest observer in terms of tuning is the filtered dynamics observer (Equation 35) as it requires tuning the single parameter: cut-off frequency of the low-pass filter. It is identical to classical momentum observer when gain matrix <bold><italic>L</italic></bold> is a diagonal with identical entries along the diagonal. The drawback is the lack of flexibility e.g., a cut-off frequency can be well suited for the first joints but can be too high for the rest. <xref ref-type="fig" rid="F6">Figure 6</xref> shows disturbance torque estimation for three different values of the cut-off frequency. Different behavior of <inline-formula><mml:math id="M108"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> for higher (&#x003C9; &#x0003D; 60) and lower frequencies (&#x003C9; &#x0003D; 10/20) can be explained by high frequency dynamics, which was filtered during the model identification phase.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Disturbance torque estimation for joints 2 and 4 using filtered dynamics observer with different cutoff frequencies.</p></caption>
<graphic xlink:href="frobt-07-571574-g0006.tif"/>
</fig></sec></sec>
<sec>
<title>3.4. Detecting Collisions</title>
<p>For collision detection we did two experiments: in one experiment the robot experienced a soft collision with a human, while in another test&#x02014;a hard collision with a brick. In both cases, manufacturer safety presets were set to the least restricted to achieve fast motions. Model-based estimated disturbance torques were compared with those estimated based on the real and target currents of the UR10e that were computed as</p>
<disp-formula id="E38"><label>(38)</label><mml:math id="M109"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>U</mml:mi><mml:mi>R</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mi>d</mml:mi><mml:mi>i</mml:mi><mml:mi>a</mml:mi><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi><mml:mi>a</mml:mi><mml:mi>r</mml:mi><mml:mi>g</mml:mi><mml:mi>e</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi><mml:mi>e</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>K</italic> is the identified vector of drive gain coefficients, <italic>I</italic><sub><italic>target</italic></sub> and <italic>I</italic><sub><italic>real</italic></sub> are the vectors of measured and target currents, respectively.</p>
<p>Due to the modeling error and torque/current measurements noise, the estimated disturbance torques do not equal zero during nominal operation conditions (without collision). To detect a collision it is necessary to set upper and lower thresholds on estimated disturbance torque in the absence of collisions <inline-formula><mml:math id="M110"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>u</mml:mi><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula><mml:math id="M111"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>, respectively. When a collision occurs, some of <inline-formula><mml:math id="M112"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> significantly increases depending on the location of a collision crossing corresponding <inline-formula><mml:math id="M113"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>u</mml:mi><mml:mi>b</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> or <inline-formula><mml:math id="M114"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003C4;</mml:mi></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>l</mml:mi><mml:mi>b</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>. The static threshold is the easiest approach to detecting collisions; it can be chosen for a specific task or the whole workspace (any task). On the one side, task-specific bounds for a single or several tasks are tighter and result in faster collision detection time. On the other side, if a robot is reprogrammed to execute a new task, then the threshold can be violated in the absence of collision. Thus, for robots that are constantly reprogrammed to execute different tasks, global bounds are more advantageous even though they can be looser and can result in higher detection time.</p>
<p>To find task-specific thresholds it is necessary to execute a task making sure there is no collision, then estimate disturbance torques and choose bounds that exceed maximum and minimum values of <inline-formula><mml:math id="M115"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C4;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x0005E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>d</mml:mi><mml:mo>,</mml:mo><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> by 5&#x02013;10% (<bold>Figure 8</bold>). For global bounds, it is possible to use data from validation or execute several trajectories that cover the whole workspace, then perform the procedure similar to the one for task-specific thresholds. In any case, the bounds will depend on the choice of disturbance observer, particularly on the convergence rate: the higher the convergence rate, the higher the bounds and vice versa (<bold>Figure 8</bold>). However, although for faster convergence rates the bounds are higher, the detection time is shorter, especially for fast collisions (<xref ref-type="fig" rid="F7">Figure 7</xref>).</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p>Detecting a hard collision of the UR10e with a brick using static threshold. Thresholds and estimated disturbance torques are shown for two nonlinear disturbance observers with different rate of convergence. The third disturbance torque (in red) is estimated from current measurements of the UR10e. Dashed lines are thresholds associated with specific value of &#x003B2;.</p></caption>
<graphic xlink:href="frobt-07-571574-g0007.tif"/>
</fig>
<p>Both <xref ref-type="fig" rid="F7">Figures 7</xref>, <xref ref-type="fig" rid="F8">8</xref> show that collision detection capabilities of the UR10e and model-based collision detection algorithms with &#x003B2; &#x0003D; 30 were identical for hard collisions (<xref ref-type="table" rid="T4">Table 4</xref>), while for soft collisions UR10e was slightly faster (<xref ref-type="table" rid="T5">Table 5</xref>). One possible explanation is that the internal control loop of the UR10e is much faster than the rate at which we read generalized coordinates and velocities, and currents which are around 100 Hz. Another explanation is that the convergence rate of the disturbance observer inside the UR10e control system is higher than the convergence rate of the non-linear disturbance observer we use. The behavior of slower disturbance observer with &#x003B2; &#x0003D; 5 is different from the others; for example, in the case of hard collision of the third joint, estimated disturbance torque did not cross thresholds (<xref ref-type="fig" rid="F7">Figure 7</xref>), but overall collision detection time was the same as for &#x003B2; &#x0003D; 30. In the case of soft collision, the observer with &#x003B2; &#x0003D; 5 was the fastest to detect collision (<xref ref-type="table" rid="T5">Table 5</xref>). In view of this result, the best strategy could be to use several disturbance observers with different convergence rates and static thresholds.</p>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p>Detecting a soft collision of the UR10e with a human using static threshold. Thresholds and estimated disturbance torques are shown for two nonlinear disturbance observers with different rates of convergence. The third disturbance torque (in red) is estimated from current measurements of the UR10e. Dashed lines are thresholds associated with specific value of &#x003B2;.</p></caption>
<graphic xlink:href="frobt-07-571574-g0008.tif"/>
</fig>
<table-wrap position="float" id="T4">
<label>Table 4</label>
<caption><p>Identified link parameters.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Joint no</bold></th>
<th valign="top" align="center" colspan="3" style="border-bottom: thin solid #000000;"><bold>Collision detection time</bold>, <bold><bold><italic>s</italic></bold></bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center"><bold><bold>&#x003B2; &#x0003D; 30</bold></bold></th>
<th valign="top" align="center"><bold><bold>&#x003B2; &#x0003D; 5</bold></bold></th>
<th valign="top" align="center"><bold><italic>UR</italic></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">1</td>
<td valign="top" align="center">21.642</td>
<td valign="top" align="center">21.642</td>
<td valign="top" align="center">21.642</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="center">21.654</td>
<td valign="top" align="center">21.674</td>
<td valign="top" align="center">21.654</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td valign="top" align="center">21.664</td>
<td valign="top" align="center">&#x02013;</td>
<td valign="top" align="center">21.664</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td valign="top" align="center">21.632</td>
<td valign="top" align="center">21.632</td>
<td valign="top" align="center">21.632</td>
</tr>
<tr>
<td valign="top" align="left">Overall</td>
<td valign="top" align="center">21.632</td>
<td valign="top" align="center">21.632</td>
<td valign="top" align="center">21.632</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap position="float" id="T5">
<label>Table 5</label>
<caption><p>Identified motor and friction parameters.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Joint no</bold></th>
<th valign="top" align="center" colspan="3" style="border-bottom: thin solid #000000;"><bold>Collision detection time</bold>, <bold><bold><italic>s</italic></bold></bold></th>
</tr>
<tr>
<th/>
<th valign="top" align="center"><bold><bold>&#x003B2; &#x0003D; 30</bold></bold></th>
<th valign="top" align="center"><bold><bold>&#x003B2; &#x0003D; 5</bold></bold></th>
<th valign="top" align="center"><bold><italic>UR</italic></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">1</td>
<td valign="top" align="center">18.052</td>
<td valign="top" align="center">18.02</td>
<td valign="top" align="center">18.042</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="center">18.082</td>
<td valign="top" align="center">18.136</td>
<td valign="top" align="center">18.072</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td valign="top" align="center">18.178</td>
<td valign="top" align="center">18.198</td>
<td valign="top" align="center">18.208</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td valign="top" align="center">&#x02013;</td>
<td valign="top" align="center">&#x02013;</td>
<td valign="top" align="center">&#x02013;</td>
</tr>
<tr>
<td valign="top" align="left">Overall</td>
<td valign="top" align="center">18.052</td>
<td valign="top" align="center">18.02</td>
<td valign="top" align="center">18.042</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Theoretically, thresholds can be significantly reduced for fast collisions&#x02014;collisions that have a distinguishingly higher frequency than the motion of robot&#x02014;by a band-pass filtering, the dynamics of the robot (Ho and Song, <xref ref-type="bibr" rid="B19">2013</xref>; Li et al., <xref ref-type="bibr" rid="B25">2019</xref>). However, in our experiments by applying band-pass filter we were not able to reduce thresholds and to obtain faster collision detection time without getting false positives. A possible explanation is that the trajectory had abrupt changes in the sign of generalized velocities that caused fast changes in the friction torques, therefore the dynamics of the robot had high frequencies.</p>
<p>Another way to reduce the threshold is to use machine learning to predict unmodeled dynamics (Hu and Xiong, <xref ref-type="bibr" rid="B22">2017</xref>). If enough data is provided for training, then neural networks can approximate unmodeled dynamics with a high degree of accuracy. The limitation of this method is that it requires knowledge of the field that engineers may not have, making it suitable for few who are familiar with neural networks.</p></sec></sec>
<sec sec-type="conclusions" id="s4">
<title>4. Conclusion</title>
<p>This paper has outlined a roadmap for engineers and specialists new to the field, to equip industrial manipulators with collision detection capabilities needed to guarantee workplace safety. The roadmap consists of three main steps: identifying the dynamic model, choosing and tuning the disturbance observer, and detecting collisions based on the output of the disturbance observer. The most important step is model identification because the accurate model allows choosing tighter thresholds, and consequently reducing collision detection time. Accurate dynamic parameter estimation might be time-consuming, especially its trajectory planning phase (depending on the trajectory and the number of parameters, trajectory optimization can take up to 10 h on a usual desktop computer), which is necessary to guarantee persistent excitation. At the cost of model accuracy, the trajectory planning phase can be notably simplified by omitting optimization, and instead use several points connected with fifth-order polynomials. The rest of the steps, unfortunately, cannot be further simplified.</p>
<p>For disturbance estimation, there is a great variety of disturbance observers. If simplicity is the priority, then non-linear disturbance observer or filtered dynamics observer can be chosen as they are tuned with single parameter &#x003B2; and &#x003C9;, respectively. If more flexibility is required, then a classical momentum observer can be used because it allows prescribing the convergence rate of each joint separately. If better measurement and model noise filtering are required, then the Kalman momentum observer should be used. If finite time convergence is required, then second-order sliding mode observers should be chosen.</p>
<p>As the final step, it is necessary to choose thresholds for estimated disturbance torques in the absence of collisions, those can be chosen regardless of task type or on task-specific basis. Task-specific thresholds are tighter and result in faster detection time, while global bounds are not limited to any task but may result in slower detection time. In both cases, thresholds depend on the convergence rate of the disturbance observer, the faster the observer, the higher the threshold. In our experiments, faster disturbance observers were better at detecting hard collisions, while slower observers&#x02014;at detecting soft collisions. It can suggest that the use of both slow and fast observer can lead to faster collision detection regardless of the type of collision. To further decrease collision detection time, several authors proposed ways to reduce threshold by using band-pass filtering, neural networks, while others proposed to use time-varying thresholds. Band-pass filtering works well with very fast collisions, depends on the dynamic model (friction model) and the trajectory of robot&#x02014;in our experiment with a brick band-pass filtering did not decrease collision detection time&#x02014;the use of neural networks requires a certain background that prevents engineers from using it. Finally, identifying coefficients of the time-varying thresholds involves time consuming joint-wise experiments and do not result in a significant reduction in collision detection time (Sotoudehnejad et al., <xref ref-type="bibr" rid="B34">2012</xref>).</p></sec>
<sec sec-type="data-availability-statement" id="s5">
<title>Data Availability Statement</title>
<p>All datasets presented in this study are included in the article/<xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>.</p></sec>
<sec id="s6">
<title>Author Contributions</title>
<p>SMa did the literature review, dynamic identification and wrote the paper. SMi implemented disturbance observers library, did experiments with the robot and took part in writing the paper.</p></sec>
<sec 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>
</body>
<back><sec sec-type="supplementary-material" id="s8">
<title>Supplementary Material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/frobt.2020.571574/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/frobt.2020.571574/full#supplementary-material</ext-link></p>
<supplementary-material xlink:href="Data_Sheet_1.ZIP" id="SM1" mimetype="application/zip" xmlns:xlink="http://www.w3.org/1999/xlink"/>
<supplementary-material xlink:href="Data_Sheet_2.zip" id="SM2" mimetype="application/zip" xmlns:xlink="http://www.w3.org/1999/xlink"/></sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>&#x000C5;str&#x000F6;m</surname> <given-names>K. J.</given-names></name> <name><surname>Murray</surname> <given-names>R. M.</given-names></name></person-group> (<year>2010</year>). <source>Feedback Systems: An Introduction for Scientists and Engineers</source>. <publisher-loc>Princeton, NJ</publisher-loc>: <publisher-name>Princeton University Press</publisher-name>.</citation></ref>
<ref id="B2">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Anderson</surname> <given-names>B. D.</given-names></name></person-group> (<year>1982</year>). <article-title>Exponential convergence and persistent excitation</article-title>, in <source>1982 21st IEEE Conference on Decision and Control</source> (<publisher-loc>Orlando, FL</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>12</fpage>&#x02013;<lpage>17</lpage>.</citation></ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Atkeson</surname> <given-names>C. G.</given-names></name> <name><surname>An</surname> <given-names>C. H.</given-names></name> <name><surname>Hollerbach</surname> <given-names>J. M.</given-names></name></person-group> (<year>1986</year>). <article-title>Estimation of inertial parameters of manipulator loads and links</article-title>. <source>Int. J. Robot. Res.</source> <volume>5</volume>, <fpage>101</fpage>&#x02013;<lpage>119</lpage>. <pub-id pub-id-type="doi">10.1177/027836498600500306</pub-id></citation></ref>
<ref id="B4">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Briquet-Kerestedjian</surname> <given-names>N.</given-names></name> <name><surname>Makarov</surname> <given-names>M.</given-names></name> <name><surname>Grossard</surname> <given-names>M.</given-names></name> <name><surname>Rodriguez-Ayerbe</surname> <given-names>P.</given-names></name></person-group> (<year>2019</year>). <article-title>Performance quantification of observer-based robot impact detection under modeling uncertainties</article-title>. <source>Int. J. Intell. Robot. Appl.</source> <volume>3</volume>, <fpage>207</fpage>&#x02013;<lpage>220</lpage>. <pub-id pub-id-type="doi">10.1007/s41315-018-0068-4</pub-id></citation></ref>
<ref id="B5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chen</surname> <given-names>W.-H.</given-names></name> <name><surname>Ballance</surname> <given-names>D. J.</given-names></name> <name><surname>Gawthrop</surname> <given-names>P. J.</given-names></name> <name><surname>O&#x00027;Reilly</surname> <given-names>J.</given-names></name></person-group> (<year>2000</year>). <article-title>A nonlinear disturbance observer for robotic manipulators</article-title>. <source>IEEE Trans. Indus. Electron.</source> <volume>47</volume>, <fpage>932</fpage>&#x02013;<lpage>938</lpage>. <pub-id pub-id-type="doi">10.1109/41.857974</pub-id></citation></ref>
<ref id="B6">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>De Luca</surname> <given-names>A.</given-names></name> <name><surname>Ferrajoli</surname> <given-names>L.</given-names></name></person-group> (<year>2009</year>). <article-title>A modified newton-euler method for dynamic computations in robot fault detection and control</article-title>, in <source>2009 IEEE International Conference on Robotics and Automation</source> (<publisher-loc>Kobe</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>3359</fpage>&#x02013;<lpage>3364</lpage>.</citation></ref>
<ref id="B7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>De Luca</surname> <given-names>A.</given-names></name> <name><surname>Mattone</surname> <given-names>R.</given-names></name></person-group> (<year>2003</year>). <article-title>Actuator failure detection and isolation using generalized momenta</article-title>, in <source>2003 IEEE International Conference on Robotics and Automation (Cat. No. 03CH37422)</source>, Vol. 1 (<publisher-loc>Taipei</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>634</fpage>&#x02013;<lpage>639</lpage>.</citation></ref>
<ref id="B8">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>De Santis</surname> <given-names>A.</given-names></name> <name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>De Luca</surname> <given-names>A.</given-names></name> <name><surname>Bicchi</surname> <given-names>A.</given-names></name></person-group> (<year>2008</year>). <article-title>An atlas of physical human&#x02013;robot interaction</article-title>. <source>Mech. Mach. Theor.</source> <volume>43</volume>, <fpage>253</fpage>&#x02013;<lpage>270</lpage>. <pub-id pub-id-type="doi">10.1016/j.mechmachtheory.2007.03.003</pub-id></citation></ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fridman</surname> <given-names>L.</given-names></name> <name><surname>Levant</surname> <given-names>A.</given-names></name></person-group> (<year>2002</year>). <article-title>Higher order sliding modes</article-title>. <source>Sliding Mode Control Eng.</source> <volume>11</volume>, <fpage>53</fpage>&#x02013;<lpage>102</lpage>. <pub-id pub-id-type="doi">10.1201/9780203910856.ch3</pub-id></citation></ref>
<ref id="B10">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Garofalo</surname> <given-names>G.</given-names></name> <name><surname>Mansfeld</surname> <given-names>N.</given-names></name> <name><surname>Jankowski</surname> <given-names>J.</given-names></name> <name><surname>Ott</surname> <given-names>C.</given-names></name></person-group> (<year>2019</year>). <article-title>Sliding mode momentum observers for estimation of external torques and joint acceleration</article-title>, in <source>2019 International Conference on Robotics and Automation (ICRA)</source> (<publisher-loc>Montreal, QC</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>6117</fpage>&#x02013;<lpage>6123</lpage>.</citation></ref>
<ref id="B11">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Garofalo</surname> <given-names>G.</given-names></name> <name><surname>Ott</surname> <given-names>C.</given-names></name> <name><surname>Albu-Sch&#x000E4;ffer</surname> <given-names>A.</given-names></name></person-group> (<year>2013</year>). <article-title>On the closed form computation of the dynamic matrices and their differentiations</article-title>, in <source>2013 IEEE/RSJ International Conference on Intelligent Robots and Systems</source> (<publisher-loc>Tokyo</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>2364</fpage>&#x02013;<lpage>2359</lpage>.</citation></ref>
<ref id="B12">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gautier</surname> <given-names>M.</given-names></name></person-group> (<year>1991</year>). <article-title>Numerical calculation of the base inertial parameters of robots</article-title>. <source>J. Robot. Syst.</source> <volume>8</volume>, <fpage>485</fpage>&#x02013;<lpage>506</lpage>.</citation></ref>
<ref id="B13">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gautier</surname> <given-names>M.</given-names></name> <name><surname>Briot</surname> <given-names>S.</given-names></name></person-group> (<year>2014</year>). <article-title>Global identification of joint drive gains and dynamic parameters of robots</article-title>. <source>J. Dyn. Syst. Meas. Control</source> <volume>136</volume>:<fpage>051025</fpage>. <pub-id pub-id-type="doi">10.1115/1.4027506</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gautier</surname> <given-names>M.</given-names></name> <name><surname>Khalil</surname> <given-names>W.</given-names></name></person-group> (<year>1990</year>). <article-title>Direct calculation of minimum set of inertial parameters of serial robots</article-title>. <source>IEEE Trans. Robot. Autom.</source> <volume>6</volume>, <fpage>368</fpage>&#x02013;<lpage>373</lpage>.</citation>
</ref>
<ref id="B15">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gaz</surname> <given-names>C.</given-names></name> <name><surname>Magrini</surname> <given-names>E.</given-names></name> <name><surname>De Luca</surname> <given-names>A.</given-names></name></person-group> (<year>2018</year>). <article-title>A model-based residual approach for human-robot collaboration during manual polishing operations</article-title>. <source>Mechatronics</source> <volume>55</volume>, <fpage>234</fpage>&#x02013;<lpage>247</lpage>. <pub-id pub-id-type="doi">10.1016/j.mechatronics.2018.02.014</pub-id></citation></ref>
<ref id="B16">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Haddadin</surname> <given-names>S.</given-names></name> <name><surname>Albu-Schaffer</surname> <given-names>A.</given-names></name> <name><surname>De Luca</surname> <given-names>A.</given-names></name> <name><surname>Hirzinger</surname> <given-names>G.</given-names></name></person-group> (<year>2008</year>). <article-title>Collision detection and reaction: a contribution to safe physical human-robot interaction</article-title>, in <source>2008 IEEE/RSJ International Conference on Intelligent Robots and Systems</source> (<publisher-loc>Nice</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>3356</fpage>&#x02013;<lpage>3363</lpage>.</citation></ref>
<ref id="B17">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Haddadin</surname> <given-names>S.</given-names></name> <name><surname>Croft</surname> <given-names>E.</given-names></name></person-group> (<year>2016</year>). <article-title>Physical human&#x02013;robot interaction</article-title>, in <source>Springer Handbook of Robotics</source>, eds <person-group person-group-type="editor"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Khatib</surname> <given-names>O.</given-names></name></person-group> (<publisher-loc>Cham</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>1835</fpage>&#x02013;<lpage>1874</lpage>.</citation></ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Haddadin</surname> <given-names>S.</given-names></name> <name><surname>De Luca</surname> <given-names>A.</given-names></name> <name><surname>Albu-Sch&#x000E4;ffer</surname> <given-names>A.</given-names></name></person-group> (<year>2017</year>). <article-title>Robot collisions: a survey on detection, isolation, and identification</article-title>. <source>IEEE Trans. Robot.</source> <volume>33</volume>, <fpage>1292</fpage>&#x02013;<lpage>1312</lpage>. <pub-id pub-id-type="doi">10.1109/TRO.2017.2723903</pub-id></citation></ref>
<ref id="B19">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ho</surname> <given-names>C.-N.</given-names></name> <name><surname>Song</surname> <given-names>J.-B.</given-names></name></person-group> (<year>2013</year>). <article-title>Collision detection algorithm robust to model uncertainty</article-title>. <source>Int. J. Control Autom. Syst.</source> <volume>11</volume>, <fpage>776</fpage>&#x02013;<lpage>781</lpage>. <pub-id pub-id-type="doi">10.1007/s12555-012-0235-6</pub-id></citation></ref>
<ref id="B20">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hoffman</surname> <given-names>J. D.</given-names></name> <name><surname>Frankel</surname> <given-names>S.</given-names></name></person-group> (<year>2018</year>). <source>Numerical Methods for Engineers and Scientists.</source> <publisher-loc>Boca Raton</publisher-loc>: <publisher-name>CRC Press</publisher-name>.</citation></ref>
<ref id="B21">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hollerbach</surname> <given-names>J.</given-names></name> <name><surname>Khalil</surname> <given-names>W.</given-names></name> <name><surname>Gautier</surname> <given-names>M.</given-names></name></person-group> (<year>2016</year>). <article-title>Model identification</article-title>, in <source>Springer Handbook of Robotics</source>, eds <person-group person-group-type="editor"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Khatib</surname> <given-names>O.</given-names></name></person-group> (<publisher-loc>Berlin; Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>113</fpage>&#x02013;<lpage>138</lpage>.</citation></ref>
<ref id="B22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hu</surname> <given-names>J.</given-names></name> <name><surname>Xiong</surname> <given-names>R.</given-names></name></person-group> (<year>2017</year>). <article-title>Contact force estimation for robot manipulator using semiparametric model and disturbance kalman filter</article-title>. <source>IEEE Trans. Indus. Electron.</source> <volume>65</volume>, <fpage>3365</fpage>&#x02013;<lpage>3375</lpage>. <pub-id pub-id-type="doi">10.1109/TIE.2017.2748056</pub-id></citation></ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Johnson</surname> <given-names>C.</given-names></name></person-group> (<year>1971</year>). <article-title>Accomodation of external disturbances in linear regulator and servomechanism problems</article-title>. <source>IEEE Trans. Autom. Control</source> <volume>16</volume>, <fpage>635</fpage>&#x02013;<lpage>644</lpage>.</citation></ref>
<ref id="B24">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Lewis</surname> <given-names>F. L.</given-names></name> <name><surname>Dawson</surname> <given-names>D. M.</given-names></name> <name><surname>Abdallah</surname> <given-names>C. T.</given-names></name></person-group> (<year>2003</year>). <source>Robot Manipulator Control: Theory and Practice</source>. <publisher-loc>Boca Raton</publisher-loc>: <publisher-name>CRC Press</publisher-name>.</citation></ref>
<ref id="B25">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Li</surname> <given-names>Z.</given-names></name> <name><surname>Ye</surname> <given-names>J.</given-names></name> <name><surname>Wu</surname> <given-names>H.</given-names></name></person-group> (<year>2019</year>). <article-title>A virtual sensor for collision detection and distinction with conventional industrial robots</article-title>. <source>Sensors</source> <volume>19</volume>:<fpage>2368</fpage>. <pub-id pub-id-type="doi">10.3390/s19102368</pub-id><pub-id pub-id-type="pmid">31126010</pub-id></citation></ref>
<ref id="B26">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Lofberg</surname> <given-names>J.</given-names></name></person-group> (<year>2004</year>). <article-title>Yalmip: a toolbox for modeling and optimization in matlab</article-title>, in <source>2004 IEEE International Conference on Robotics and Automation (IEEE Cat. No. 04CH37508)</source> (<publisher-loc>New Orleans, LA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>284</fpage>&#x02013;<lpage>289</lpage>.<pub-id pub-id-type="pmid">18606409</pub-id></citation></ref>
<ref id="B27">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mikhel</surname> <given-names>S.</given-names></name> <name><surname>Popov</surname> <given-names>D.</given-names></name> <name><surname>Mamedov</surname> <given-names>S.</given-names></name> <name><surname>Klimchik</surname> <given-names>A.</given-names></name></person-group> (<year>2019</year>). <article-title>Development of typical collision reactions in combination with algorithms for external impacts identification</article-title>. <source>IFAC Pap. Online</source> <volume>52</volume>, <fpage>253</fpage>&#x02013;<lpage>258</lpage>. <pub-id pub-id-type="doi">10.1016/j.ifacol.2019.11.177</pub-id></citation></ref>
<ref id="B28">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Mitra</surname> <given-names>S. K.</given-names></name> <name><surname>Kuo</surname> <given-names>Y.</given-names></name></person-group> (<year>2006</year>). <source>Digital Signal Processing: A Computer-Based Approach, Vol. 2</source>. <publisher-loc>New York, NY</publisher-loc>: <publisher-name>McGraw-Hill</publisher-name>.</citation></ref>
<ref id="B29">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mohammadi</surname> <given-names>A.</given-names></name> <name><surname>Tavakoli</surname> <given-names>M.</given-names></name> <name><surname>Marquez</surname> <given-names>H. J.</given-names></name> <name><surname>Hashemzadeh</surname> <given-names>F.</given-names></name></person-group> (<year>2013</year>). <article-title>Nonlinear disturbance observer design for robotic manipulators</article-title>. <source>Control Eng. Pract.</source> <volume>21</volume>, <fpage>253</fpage>&#x02013;<lpage>267</lpage>. <pub-id pub-id-type="doi">10.1016/j.conengprac.2012.10.008</pub-id></citation></ref>
<ref id="B30">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Moreno</surname> <given-names>J. A.</given-names></name> <name><surname>Osorio</surname> <given-names>M.</given-names></name></person-group> (<year>2008</year>). <article-title>A lyapunov approach to second-order sliding mode controllers and observers</article-title>, in <source>2008 47th IEEE Conference on Decision and Control</source> (<publisher-loc>Cancun</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>2856</fpage>&#x02013;<lpage>2861</lpage>.</citation>
</ref>
<ref id="B31">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Nikoobin</surname> <given-names>A.</given-names></name> <name><surname>Haghighi</surname> <given-names>R.</given-names></name></person-group> (<year>2009</year>). <article-title>Lyapunov-based nonlinear disturbance observer for serial n-link robot manipulators</article-title>. <source>J. Intell. Robot. Syst.</source> <volume>55</volume>, <fpage>135</fpage>&#x02013;<lpage>153</lpage>. <pub-id pub-id-type="doi">10.1007/s10846-008-9298-2</pub-id></citation></ref>
<ref id="B32">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Oh</surname> <given-names>Y.</given-names></name> <name><surname>Chung</surname> <given-names>W. K.</given-names></name></person-group> (<year>1999</year>). <article-title>Disturbance-observer-based motion control of redundant manipulators using inertially decoupled dynamics</article-title>. <source>IEEE ASME Trans. Mechatron.</source> <volume>4</volume>, <fpage>133</fpage>&#x02013;<lpage>146</lpage>.</citation></ref>
<ref id="B33">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Sciavicco</surname> <given-names>L.</given-names></name> <name><surname>Villani</surname> <given-names>L.</given-names></name> <name><surname>Oriolo</surname> <given-names>G.</given-names></name></person-group> (<year>2010</year>). <source>Robotics: Modelling, Planning and Control</source>. <publisher-loc>London</publisher-loc>: <publisher-name>Springer Science &#x00026; Business Media</publisher-name>.</citation></ref>
<ref id="B34">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Sotoudehnejad</surname> <given-names>V.</given-names></name> <name><surname>Takhmar</surname> <given-names>A.</given-names></name> <name><surname>Kermani</surname> <given-names>M. R.</given-names></name> <name><surname>Polushin</surname> <given-names>I. G.</given-names></name></person-group> (<year>2012</year>). <article-title>Counteracting modeling errors for sensitive observer-based manipulator collision detection</article-title>, in <source>2012 IEEE/RSJ International Conference on Intelligent Robots and Systems</source> (<publisher-loc>Vilamoura</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>4315</fpage>&#x02013;<lpage>4320</lpage>.</citation></ref>
<ref id="B35">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sousa</surname> <given-names>C. D.</given-names></name> <name><surname>Cortes&#x000E3;o</surname> <given-names>R.</given-names></name></person-group> (<year>2014</year>). <article-title>Physical feasibility of robot base inertial parameter identification: a linear matrix inequality approach</article-title>. <source>Int. J. Robot. Res.</source> <volume>33</volume>, <fpage>931</fpage>&#x02013;<lpage>944</lpage>. <pub-id pub-id-type="doi">10.1177/0278364913514870</pub-id></citation></ref>
<ref id="B36">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sousa</surname> <given-names>C. D.</given-names></name> <name><surname>Cortesao</surname> <given-names>R.</given-names></name></person-group> (<year>2019</year>). <article-title>Inertia tensor properties in robot dynamics identification: a linear matrix inequality approach</article-title>. <source>IEEE ASME Trans. Mechatron.</source> <volume>24</volume>, <fpage>406</fpage>&#x02013;<lpage>411</lpage>. <pub-id pub-id-type="doi">10.1109/TMECH.2019.2891177</pub-id></citation></ref>
<ref id="B37">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Swevers</surname> <given-names>J.</given-names></name> <name><surname>Ganseman</surname> <given-names>C.</given-names></name> <name><surname>Bilgin T&#x000FC;kel</surname> <given-names>D.</given-names></name> <name><surname>De Schutter</surname> <given-names>J.</given-names></name> <name><surname>Van Br&#x000FC;ssel</surname> <given-names>H.</given-names></name></person-group> (<year>1997</year>). <article-title>Optimal robot excitation and identification</article-title>. <source>IEEE Trans. Robot. Autom.</source> <volume>13</volume>, <fpage>730</fpage>&#x02013;<lpage>740</lpage>.</citation></ref>
<ref id="B38">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Swevers</surname> <given-names>J.</given-names></name> <name><surname>Verdonck</surname> <given-names>W.</given-names></name> <name><surname>De Schutter</surname> <given-names>J.</given-names></name></person-group> (<year>2007</year>). <article-title>Dynamic model identification for industrial robots</article-title>. <source>IEEE Control Syst. Magaz.</source> <volume>27</volume>, <fpage>58</fpage>&#x02013;<lpage>71</lpage>. <pub-id pub-id-type="doi">10.1109/MCS.2007.904659</pub-id></citation></ref>
<ref id="B39">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Takakura</surname> <given-names>S.</given-names></name> <name><surname>Murakami</surname> <given-names>T.</given-names></name> <name><surname>Ohnishi</surname> <given-names>K.</given-names></name></person-group> (<year>1989</year>). <article-title>An approach to collision detection and recovery motion in industrial robot</article-title>, in <source>15th Annual Conference of IEEE Industrial Electronics Society</source> (<publisher-loc>Philadelphia, PA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>421</fpage>&#x02013;<lpage>426</lpage>.</citation></ref>
<ref id="B40">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Van Damme</surname> <given-names>M.</given-names></name> <name><surname>Beyl</surname> <given-names>P.</given-names></name> <name><surname>Vanderborght</surname> <given-names>B.</given-names></name> <name><surname>Grosu</surname> <given-names>V.</given-names></name> <name><surname>Van Ham</surname> <given-names>R.</given-names></name> <name><surname>Vanderniepen</surname> <given-names>I.</given-names></name> <etal/></person-group>. (<year>2011</year>). <article-title>Estimating robot end-effector force from noisy actuator torque measurements</article-title>, in <source>2011 IEEE International Conference on Robotics and Automation</source> (<publisher-loc>Shanghai</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1108</fpage>&#x02013;<lpage>1113</lpage>.</citation></ref>
<ref id="B41">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wahrburg</surname> <given-names>A.</given-names></name> <name><surname>B&#x000F6;s</surname> <given-names>J.</given-names></name> <name><surname>Listmann</surname> <given-names>K. D.</given-names></name> <name><surname>Dai</surname> <given-names>F.</given-names></name> <name><surname>Matthias</surname> <given-names>B.</given-names></name> <name><surname>Ding</surname> <given-names>H.</given-names></name></person-group> (<year>2017</year>). <article-title>Motor-current-based estimation of cartesian contact forces and torques for robotic manipulators and its application to force control</article-title>. <source>IEEE Trans. Autom. Sci. Eng.</source> <volume>15</volume>, <fpage>879</fpage>&#x02013;<lpage>886</lpage>. <pub-id pub-id-type="doi">10.1109/TASE.2017.2691136</pub-id></citation></ref>
<ref id="B42">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wensing</surname> <given-names>P. M.</given-names></name> <name><surname>Kim</surname> <given-names>S.</given-names></name> <name><surname>Slotine</surname> <given-names>J.-J. E.</given-names></name></person-group> (<year>2017</year>). <article-title>Linear matrix inequalities for physically consistent inertial parameter identification: a statistical perspective on the mass distribution</article-title>. <source>IEEE Robot. Autom. Lett.</source> <volume>3</volume>, <fpage>60</fpage>&#x02013;<lpage>67</lpage>. <pub-id pub-id-type="doi">10.1109/LRA.2017.2729659</pub-id></citation></ref>
<ref id="B43">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wu</surname> <given-names>J.</given-names></name> <name><surname>Wang</surname> <given-names>J.</given-names></name> <name><surname>You</surname> <given-names>Z.</given-names></name></person-group> (<year>2010</year>). <article-title>An overview of dynamic parameter identification of robots</article-title>. <source>Robot. Comput. Integr. Manuf.</source> <volume>26</volume>, <fpage>414</fpage>&#x02013;<lpage>419</lpage>. <pub-id pub-id-type="doi">10.1016/j.rcim.2010.03.013</pub-id></citation></ref>
<ref id="B44">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wu</surname> <given-names>W.</given-names></name> <name><surname>Zhu</surname> <given-names>S.</given-names></name> <name><surname>Wang</surname> <given-names>X.</given-names></name> <name><surname>Liu</surname> <given-names>H.</given-names></name></person-group> (<year>2012</year>). <article-title>Closed-loop dynamic parameter identification of robot manipulators using modified fourier series</article-title>. <source>Int. J. Adv. Robot. Syst.</source> <volume>9</volume>:<fpage>29</fpage>. <pub-id pub-id-type="doi">10.5772/45818</pub-id></citation></ref>
</ref-list>
<fn-group>
<fn fn-type="financial-disclosure"><p><bold>Funding.</bold> This work was supported by Russian Foundation for Basic Research (RFBR) grant 18-38-20186 and center for technologies in robotics &#x00026; mechatronics components.</p>
</fn>
</fn-group>
</back>
</article>