<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article article-type="research-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. 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="publisher-id">767878</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2021.767878</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>Quick Setup of Force-Controlled Industrial Gluing Tasks Using Learning From Demonstration</article-title>
<alt-title alt-title-type="left-running-head">Iturrate et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Quick Setup of Gluing Tasks</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Iturrate</surname>
<given-names>I&#xf1;igo</given-names>
</name>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1242435/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Kramberger</surname>
<given-names>Aljaz</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/791827/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Sloth</surname>
<given-names>Christoffer</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/1527540/overview"/>
</contrib>
</contrib-group>
<aff>SDU Robotics, Maersk McKinney Moller Institute, University of Southern Denmark, <addr-line>Odense</addr-line>, <country>Denmark</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1167758/overview">Jacopo Aleotti</ext-link>, University of Parma, Italy</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1473291/overview">Adam Conkey</ext-link>, The University of Utah, United&#x20;States</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1474267/overview">Anuj Pasricha</ext-link>, University of Colorado Boulder, United&#x20;States</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1476448/overview">Marco Carnevale</ext-link>, Universit&#xe0; di Pavia, Italy</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: I&#xf1;igo Iturrate, <email>inju@mmmi.sdu.dk</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Robot and Machine Vision, a section of the journal Frontiers in Robotics and&#x20;AI</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>05</day>
<month>11</month>
<year>2021</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>8</volume>
<elocation-id>767878</elocation-id>
<history>
<date date-type="received">
<day>31</day>
<month>08</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>15</day>
<month>10</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2021 Iturrate, Kramberger and Sloth.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Iturrate, Kramberger and Sloth</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>This paper presents a framework for programming in-contact tasks using learning by demonstration. The framework is demonstrated on an industrial gluing task, showing that a high quality robot behavior can be programmed using a single demonstration. A unified controller structure is proposed for the demonstration and execution of in-contact tasks that eases the transition from admittance controller for demonstration to parallel force/position control for the execution. The proposed controller is adapted according to the geometry of the task constraints, which is estimated online during the demonstration. In addition, the controller gains are adapted to the human behavior during demonstration to improve the quality of the demonstration. The considered gluing task requires the robot to alternate between free motion and in-contact motion; hence, an approach for minimizing contact forces during the switching between the two situations is presented. We evaluate our proposed system in a series of experiments, where we show that we are able to estimate the geometry of a curved surface, that our adaptive controller for demonstration allows users to achieve higher accuracy in a shorter demonstration duration when compared to an off-the-shelf controller for teaching implemented on a collaborative robot, and that our execution controller is able to reduce impact forces and apply a constant process force while adapting to the surface geometry.</p>
</abstract>
<kwd-group>
<kwd>learning from demonstration</kwd>
<kwd>parameter estimation</kwd>
<kwd>force control</kwd>
<kwd>gluing</kwd>
<kwd>adaptive control</kwd>
</kwd-group>
<contract-sponsor id="cn001">Innovationsfonden<named-content content-type="fundref-id">10.13039/100012774</named-content>
</contract-sponsor>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Learning from demonstration enables programming of a variety of robotic tasks in a way that is intuitive to a non-expert end-user. Previously, this method was utilized in an industrial context to teach robot based assembly tasks e.g., peg-in-hole insertion task, as well as polishing and grinding tasks. However, most existing approaches are applied on artificial or simplified benchmarks, and often do not consider the tight tolerances and process requirements with regards to the applied force that occur in a real manufacturing scenario. They often require multiple task demonstrations in order to learn task constraints or achieve robust task executions. Lastly, they often do not encompass the full pipeline of demonstration&#x2014;encoding&#x2014;execution from an end-user point of&#x20;view.</p>
<p>In this paper we present a method for fast programming of a force-controlled industrial gluing task from a single user demonstration. We propose the use of adaptive admittance control during the demonstration phase to enable the user to kinesthetically move the robot more intuitively by providing a better control response, allowing them to provide more accurate task demonstrations.</p>
<p>From a user demonstration of the task, we obtain information on the kinematic trajectory of the robot. This allows us to then encode the motion in a motion primitive that allows both direct replay and generalization of the task. By detecting the contact state of the robot and estimating the surface normal, we can segment the task into phases of unconstrained (free-air) and constrained (in-contact) movement. Simultaneously, we estimate the constrained axes of the robot along the trajectory. This allows us to formulate a parallel position/force controller for the subsequent execution of the task, such that we can either imitate the forces applied during the demonstration or allow the user to specify a constant contact force, as is typical in industrial applications.</p>
<p>We evaluate our system on a benchmark that is closely based on a real industrial gluing task related to printed circuit board assembly, as shown in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>, showing that our method can ensure constant and safe interaction forces and suitable trajectories in a task with low contact-force requirements.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>User demonstration of a gluing-like task on our benchmark system.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g001.tif"/>
</fig>
</sec>
<sec id="s2">
<title>2 Related Work</title>
<p>With the evolution of collaborative robots, new user-friendly efficient and flexible ways for automating industrial tasks which were previously done with specialized automation equipment are possible (<xref ref-type="bibr" rid="B20">Ga&#x161;par et&#x20;al., 2020</xref>). Furthermore, methods such as Learning by demonstration (LbD) (<xref ref-type="bibr" rid="B4">Billard et&#x20;al., 2008</xref>) and force control can be exploited, thanks to the integrated sensors and controllers of the collaborative robot systems.</p>
<p>In robotic learning by demonstration scenarios, robot trajectories that describe the kinematic information are recorded (<xref ref-type="bibr" rid="B13">Deni&#x161;a and Ude, 2015</xref>). On the other hand, for tasks associated with industrial robotics e.g., assembly (<xref ref-type="bibr" rid="B1">Abu-Dakka et&#x20;al., 2015</xref>) or polishing (<xref ref-type="bibr" rid="B18">Gams et&#x20;al., 2013</xref>), dynamic data is equally important. These two data sets lay the basis for in-contact execution of robot tasks, where the learned trajectory cannot be replayed but has to be adaptable to changes in the environment. To facilitate this requirement, in a lot of works, robot trajectories are represented with Dynamic Movement Primitives (<xref ref-type="bibr" rid="B23">Ijspeert et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B53">Ude et&#x20;al., 2014</xref>). With this framework, both kinematic and dynamic trajectories can be represented in a unified manner, and can be enhanced with additional properties such as modulation and time scaling.</p>
<p>The benefits of the DMP framework can be efficiently exploited for in-contact tasks, when coupling the DMP in a force-based LbD scenario, as shown in <xref ref-type="bibr" rid="B27">Koropouli et&#x20;al. (2012)</xref> and <xref ref-type="bibr" rid="B26">Kormushev et&#x20;al. (2011)</xref>. In the work of <xref ref-type="bibr" rid="B46">Rozo et&#x20;al. (2013)</xref> a two stage force LbD approach was presented, where in the first stage they recorded the positions and orientations of the desired movement and in the subsequent stage the corresponding forces and torques.</p>
<p>Simultaneous control of force and position for teaching and execution tasks is physically impossible (<xref ref-type="bibr" rid="B52">Stramigioli, 2001</xref>), and therefore these approaches all have to make compromises between prioritising force control or position control. In literature, classical position/force controllers are still adopted for dealing with this challenge. One of the early works in this field was presented by <xref ref-type="bibr" rid="B3">Asada and Izumi (1989)</xref>. The measured data was used to automatically program the position and force set points for the hybrid force control framework (<xref ref-type="bibr" rid="B45">Raibert and Craig, 1981</xref>) used in Cartesian space. Furthermore, simultaneous position and force control frameworks in the LbD literature primarily focus on selecting the dimension of the constraint frame on which the force or position control is applied (<xref ref-type="bibr" rid="B43">Peternel et&#x20;al., 2017</xref>) and the selection of the best control frame (<xref ref-type="bibr" rid="B54">Ureche et&#x20;al., 2015</xref>).</p>
<p>The main motivation for constraint selection methods is that the dimension of the constraint frame that is exposed to a high variance in force and low variance in position should favor force control, and vice versa (<xref ref-type="bibr" rid="B54">Ureche et&#x20;al., 2015</xref>). Constraint frames are usually chosen manually based on the task specifications <xref ref-type="bibr" rid="B45">Raibert and Craig (1981)</xref>. Common choices include the tool frame (<xref ref-type="bibr" rid="B28">Kronander and Billard, 2014</xref>; <xref ref-type="bibr" rid="B43">Peternel et&#x20;al., 2017</xref>) and the surface normals (<xref ref-type="bibr" rid="B12">Deng et&#x20;al., 2016</xref>; <xref ref-type="bibr" rid="B10">Conkey and Hermans, 2019</xref>). The latter can also be estimated, e.g. from the velocity of the contact point (<xref ref-type="bibr" rid="B24">Karayiannidis et&#x20;al., 2014</xref>; <xref ref-type="bibr" rid="B51">Sloth and Iturrate, 2021</xref>). <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref> present a framework for learning a dynamic constraint frame aligned to the direction of desired force using CDMPs and force control to ensure that the force is aligned in the normal plane with the direction of the movement. In (<xref ref-type="bibr" rid="B25">Kober et&#x20;al., 2015</xref>), multiple demonstrations of a task are used to segment a series of separate movement primitives, each associated with a specific discrete frame of reference. The transitions between each of the primitives&#x2014;and therefore compliant frames&#x2014;are then separately addressed. <xref ref-type="bibr" rid="B30">Kumar and Rani (2021)</xref> present a new hybrid force/position control approach for time-varying constrained re-configurable manipulators for physical human robot interaction with environment of unknown stiffness. A review of hybrid position/force controllers is presented in <xref ref-type="bibr" rid="B39">Ortenzi et&#x20;al. (2017)</xref>.</p>
<p>An alternative to hybrid force/position control is impedance control with varying parameters. By changing the stiffness parameters of the impedance controller, the interaction forces can be adjusted between the robot and the environment (<xref ref-type="bibr" rid="B7">Buchli et&#x20;al., 2011</xref>). Stiffness adaptation can be learned from demonstration in multiple ways, and typically requires multiple demonstrations or iterative corrections of the path. In <xref ref-type="bibr" rid="B31">Lee et&#x20;al. (2015)</xref>, the mean and covariance information of the trajectories from multiple demonstrations of a task are used as an approximation of the desired stiffness along different regions of the path. <xref ref-type="bibr" rid="B29">Kronander and Billard (2012</xref>, <xref ref-type="bibr" rid="B28">2014)</xref> allow the user to iteratively re-execute the task and apply external disturbances on the robot such that it deviates from the demonstrated path. The magnitude of these deviations is then used analogously to stiffness. <xref ref-type="bibr" rid="B41">Pastor et&#x20;al. (2011)</xref> introduced a method for real-time adaptation of demonstrated trajectories for task exertions, depending on the measured sensory data. They developed an adaptive regulator for learning and adaptation of demonstrated motion, where actual and learned force feedback was utilized. <xref ref-type="bibr" rid="B49">Schindlbeck and Haddadin (2015)</xref> presented a unified impedance approach for safe online parameter adaptation, based on passivity and energy tanks. Furthermore, a review of online adaptation of impedance control parameters for human robot interaction is presented in (<xref ref-type="bibr" rid="B17">Ficuciello et&#x20;al., 2015</xref>; <xref ref-type="bibr" rid="B34">M&#xfc;ller et&#x20;al., 2018</xref>) and in-contact execution tasks are presented by <xref ref-type="bibr" rid="B2">Abu-Dakka and Saveriano (2020)</xref>. To adapt the controller parameters one can estimate the compliance of the interaction between robot and environment. This approach is taken in <xref ref-type="bibr" rid="B47">Santos and Cortes&#xe3;o (2018)</xref>, where the perceived stiffness is estimated and used for controller gain scheduling.</p>
<p>For tasks where impedance control cannot be utilized because of the physical limitation of the used systems, admittance control (<xref ref-type="bibr" rid="B50">Siciliano et&#x20;al., 2009</xref>) can be used for teaching and execution of tasks in contact with the environment. A variable admittance controller, for safe human-robot interaction, where the admittance control parameters were adapted based on the passivity criterion was presented by <xref ref-type="bibr" rid="B16">Ferraguti et&#x20;al. (2019)</xref>. Furthermore, variable admittance control can be adopted in human-robot cooperation tasks by means of learning (<xref ref-type="bibr" rid="B14">Dimeas and Aspragathos, 2014</xref>, <xref ref-type="bibr" rid="B15">2015</xref>). Finally, <xref ref-type="bibr" rid="B32">Li et&#x20;al. (2020)</xref> consider the robot to be in contact with both human and environment, similar to the condition considered in this&#x20;paper.</p>
<p>It is important to ensure the stability and guarantee satisfactory performance despite varying controller gains and environmental compliance. Elegant stability conditions are set up in <xref ref-type="bibr" rid="B33">M&#xfc;ller et&#x20;al. (2019)</xref> for a physical human-robot system with delays in the human reaction. The system considered in this paper has varying parameters in addition to input delays; thus, the methods presented in <xref ref-type="bibr" rid="B5">Briat (2014)</xref> may be used for the stability analysis and performance specification.</p>
<p>Recently, automated gluing applications have become very popular with the development of new industrial machines and tools, which can be efficiently utilized by collaborative robots. The majority of the work focuses on defining the robot trajectories based on the CAD description of the industrial object (<xref ref-type="bibr" rid="B9">Castelli et&#x20;al., 2021</xref>). Other approaches, utilize simple Cartesian space industrial manipulators coupled with computer vision (<xref ref-type="bibr" rid="B40">Pagano et&#x20;al., 2020</xref>). The vision system enables localization and reconstruction of the shape of objects to which glue should be applied. The gathered information is used to construct a motion trajectory that can be executed with the specialized manipulators, achieving the desired industrial performance.</p>
</sec>
<sec id="s3">
<title>3 Problem Formulation and Contributions</title>
<p>Given a gluing or similar in-contact processing or dispensing task, our objective is to develop a full pipeline comprising the demonstration, encoding and execution that enables a robust and high-quality execution of the task with as little setup as possible required from the end-user. In order to make the approach more universally deployable in an industrial setting, we propose to learn from a single user demonstration, while exploiting the semantics of the task to adapt the robot controllers.</p>
<p>A key characteristic of the addressed task is that it is composed of free-air approach and retraction motions, but the actual dispensing or gluing consists in an in-contact motion whereby the manipulator is partially constrained by the environment. In particular, this constraint will be given by a surface normal during contact. In addition to this, in the proposed learning from demonstration scenario using kinesthetic teaching, the human is also in contact with the robot, thus partially constraining its motion as&#x20;well.</p>
<p>An illustration of how these concepts fit into our system pipeline is shown in <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>. From an initial approach motion consisting only of the robot in contact with the human, the human will then move the robot into contact with the target surface and perform a sliding motion for the actual dispensing. This will correspond to a state where the entire system dynamics are comprised of the robot, the human and the environment. Finally, a retraction motion will move the robot away from the surface and into a final state where the dynamics will be given by the robot and human. If we consider the subsequent autonomous execution of the task, the dynamics will be the same, with the exception of the human&#x2019;s contribution.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Idea of the approach.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g002.tif"/>
</fig>
<p>We consider our main contribution to be our controller design for kinesthetic teaching of processing tasks. We propose an adaptive controller architecture that takes into account the different constraints of the task at different phases of the execution. In particular, our approach to demonstration comprises the following:<list list-type="simple">
<list-item>
<p>1) We learn continuous kinematic and dynamic task constraints from a single demonstration.</p>
</list-item>
<list-item>
<p>2) We use variable-gain admittance control for kinesthetic teaching, where the damping is continuously adapted based on a velocity-force rule in order to match the user&#x2019;s intention and reduce the physical effort needed during teaching.</p>
</list-item>
<list-item>
<p>3) We couple this controller with a contact detection algorithm, such that we are able to detect the start of the dispensing phase and increase controller damping to guarantee stability, even in cases of sudden impact with a stiff environment.</p>
</list-item>
<list-item>
<p>4) Once contact with a surface is established, we additionally couple our gain scheduler with a surface normal estimator. The formulation of this estimator is guaranteed to converge given adequate excitation and furthermore guarantees the preservation of the unit norm. By estimating the surface normal, we are able to adapt the eigenstructure of gain matrices, such that we maintain higher damping in the direction(s) constrained by the environment, while being able to lower the damping&#x2014;and thus assist the user&#x2014;in the non-constrained directions.</p>
</list-item>
</list>
</p>
<p>In addition to our controller for demonstration, we also propose a second controller for task execution. This controller adopts a similar structure to the one used for teaching, albeit with a few modifications, and exhibits the following characteristics:<list list-type="simple">
<list-item>
<p>1) We use parallel position/force control to guarantee that both the kinematic and dynamic targets of the task are&#x20;met.</p>
</list-item>
<list-item>
<p>2) Task kinematics are encoded as Dynamic Movement Primitives (DMPs). This allows us to learn from a single demonstration, while adopting an encoding that enables modulation of the motions. We specifically use modulation of the DMP goal to ensure a smooth transition between the approach and process motions, and to reduce the impact forces upon first contact with the target surface.</p>
</list-item>
<list-item>
<p>3) Task dynamics are preserved by encoding the output of the normal estimator during demonstration as Radial Basis Functions (RBFs) synchronized with the DMPs. By applying a user-defined process force magnitude in the direction of the encoded normal vector, we ensure that contact with the surface is maintained. We also use this information to vary the gains of the parallel position/force controller, such that force control is applied only on the normal axis, while the other axes are position-controlled.</p>
</list-item>
</list>
</p>
<sec id="s3-1">
<title>3.1 Comparison to Other Approaches</title>
<p>Our work is conceptually similar to <xref ref-type="bibr" rid="B29">Kronander and Billard (2012)</xref>; <xref ref-type="bibr" rid="B25">Kober et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B31">Lee et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref>, in that we are interested in learning task constraints from demonstration, such that we can then adapt the parameters/gains of a compliant controller to the structure of the task. However, in contrast to other approaches (<xref ref-type="bibr" rid="B29">Kronander and Billard, 2012</xref>; <xref ref-type="bibr" rid="B25">Kober et&#x20;al., 2015</xref>; <xref ref-type="bibr" rid="B31">Lee et&#x20;al., 2015</xref>), which require either multiple (typically more than three) demonstrations of the task or multiple execution iterations in order to determine these constraints, our approach can do so from a single demonstration by exploiting the surface normal estimator to determine the task geometry. We consider this one of the main contributions of our proposed approach, as single-demonstration LbD methods are more widely applicable in industrial scenarios.</p>
<p>Our work is methodologically most similar to <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref>. While their method is also able to learn task constraints from a single demonstration, they rely on the forces observed during the demonstration to do so. Such an approach assumes that the demonstration forces correspond with the forces of an ideal execution and, furthermore, does not consider that the forces measured by the sensor during demonstration will not only be task/environmental forces, but will also be coupled with those applied by the human demonstrator to kinesthetically move/teach the robot. These two sets of forces will not always be aligned; thus, using them to learn task constraints will result in an alignment error in the constraint frame. By using the estimated surface normal as the desired direction that the forces should be applied in, our approach does not suffer from this coupling. The magnitude of the desired force can simply be specified by the user or could, e.g., be computed from the average of the magnitude of the demonstration forces in the normal direction.</p>
<p>As indicated above, in order to reduce contact force transients during the execution, we modulate the goal of the DMP slowly into the contact surface. Although this method is similar to <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref>, our use of it is qualitatively different. Whereas <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref> use goal modulation reactively to adapt to unforseen generalizations of the task&#x2014;i.e.,&#x20;a contact that is established either earlier or later than anticipated&#x2014;we do so proactively by purposely setting the initial goal higher than originally demonstrated, to ensure that impact forces are always reduced.</p>
<p>Note also that contrary to the above-mentioned works by using surface normal estimation as the basis for determining task constraints, our approach is able to use these constraints not only to adapt the controller during the execution but also during the demonstration phase to actively aid the user. This is, indeed, not possible for approaches that determine task constraints a posteriori based on positional variance or segmentation (<xref ref-type="bibr" rid="B29">Kronander and Billard, 2012</xref>; <xref ref-type="bibr" rid="B25">Kober et&#x20;al., 2015</xref>; <xref ref-type="bibr" rid="B31">Lee et&#x20;al., 2015</xref>).</p>
</sec>
</sec>
<sec id="s4">
<title>4 Methodology</title>
<p>The purpose of this section is to describe the proposed approach to obtain high-quality robotic gluing based on learned behaviors from kinesthetic teaching. It is challenging to learn the gluing behavior, as it is a task that requires contact between robot and environment; thus, both the motion and environment geometry and dynamic parameters should be learned from a single demonstration. As it is chosen to use only one demonstration for learning the task, the parameters estimated from the demonstration should be improved from executions of the task. We describe the entire process of 1) Programming by demonstration, 2) Encoding of robot behavior, and 3) Execution of desired gluing control; however, the main focus of the paper is the demonstration phase, as this is the novel contribution of the&#x20;paper.</p>
<p>We propose a unified controller structure for the kinesthetic teaching and execution of tasks with interaction between robot and environment. <xref ref-type="fig" rid="F3">Figure&#x20;3</xref> is a block diagram of the controller that runs during demonstration. The controller is an adaptive admittance controller, where the adaptation is conducted based on the surface normal to the environment when the robot and environment is in contact. This ensures stability and improves the quality of the demonstrated behaviors. A similar control structure is used for the execution, as shown in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref>; however, a parallel position/force controller is used instead of the admittance controller.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Block diagram of the controller architecture used for task demonstration.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g003.tif"/>
</fig>
<sec id="s4-1">
<title>4.1 Adaptive Admittance Control for Kinesthetic Demonstration</title>
<p>The purpose of this section is to describe the admittance controller that is used for the demonstration of the gluing task. The admittance controller uses the notation from <xref ref-type="bibr" rid="B8">Caccavale et&#x20;al. (1999)</xref> and is shown below<disp-formula id="e1">
<mml:math id="m1">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>f</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(1)</label>
</disp-formula>where <italic>M</italic>
<sub>
<italic>p</italic>
</sub>, <italic>M</italic>
<sub>
<italic>o</italic>
</sub>, <italic>D</italic>
<sub>
<italic>p</italic>
</sub>, <italic>D</italic>
<sub>
<italic>o</italic>
</sub>, <italic>K</italic>
<sub>
<italic>p</italic>
</sub>, <italic>K</italic>
<sub>
<italic>o</italic>
</sub> are 3 &#xd7; 3 matrices, <inline-formula id="inf1">
<mml:math id="m2">
<mml:mi>f</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the force applied to the end-effector of the robot given in Base frame, &#x394;<italic>p</italic>
<sub>
<italic>cd</italic>
</sub> &#x3d; <italic>p</italic>
<sub>
<italic>c</italic>
</sub> &#x2212; <italic>p</italic>
<sub>
<italic>d</italic>
</sub>, <inline-formula id="inf2">
<mml:math id="m3">
<mml:msup>
<mml:mrow>
<mml:mi>&#x3bc;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the torque applied to the end-effector given in desired frame, &#x394;<italic>&#x3c9;</italic>
<sub>
<italic>cd</italic>
</sub> &#x3d; <italic>&#x3c9;</italic>
<sub>
<italic>c</italic>
</sub> &#x2212; <italic>&#x3c9;</italic>
<sub>
<italic>d</italic>
</sub>, and <inline-formula id="inf3">
<mml:math id="m4">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. The skew-symmetric operator is denoted by <italic>S</italic> and the unit quaternion is (<italic>&#x3b7;</italic>, <italic>&#x3f5;</italic>), where <italic>&#x3f5;</italic> is the vector-part.</p>
<p>The objective of this paper is to adapt the controller according to the interaction with both human and environment. In particular the interaction with the environment can cause instability if the controller gains are not adapted. Therefore, the surface normal is estimated during demonstration to allow the damping of the controller to be increased only in the direction of the environment.</p>
<sec id="s4-1-1">
<title>4.1.1 Surface Normal Estimation</title>
<p>The surface normal is estimated during contact using the following sliding condition<disp-formula id="e2">
<mml:math id="m5">
<mml:msubsup>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
</mml:math>
<label>(2)</label>
</disp-formula>where <italic>n</italic>
<sub>
<italic>c</italic>
</sub> is the surface normal and <inline-formula id="inf4">
<mml:math id="m6">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the velocity of the contact point given by<disp-formula id="e3">
<mml:math id="m7">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi>r</mml:mi>
<mml:mo>,</mml:mo>
</mml:math>
<label>(3)</label>
</disp-formula>and <italic>&#x3c9;</italic> is the angular velocity of the end-effector, and <italic>R</italic>
<sub>
<italic>e</italic>
</sub> is a rotation matrix from base frame to end-effector frame, and <sup>
<italic>e</italic>
</sup>
<italic>r</italic> is a vector from the end-effector to the contact point, which is assumed to be constant.</p>
<p>Since <sup>
<italic>e</italic>
</sup>
<italic>r</italic> is assumed to be known, the estimate of <italic>n</italic>
<sub>
<italic>c</italic>
</sub> can be accomplished based on the estimation method presented in <xref ref-type="bibr" rid="B24">Karayiannidis et&#x20;al. (2014)</xref> summarized in the following proposition. The proposition uses the projection matrix onto the orthogonal complement of a column vector <inline-formula id="inf5">
<mml:math id="m8">
<mml:mi>a</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, defined as <inline-formula id="inf6">
<mml:math id="m9">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>:</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x21a6;</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>a</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where <italic>I</italic> is a 3 &#xd7; 3 identity matrix.</p>
<p>
<statement content-type="proposition" id="Proposition_1">
<label>Proposition 1</label>
<p>
<italic>The integral adaptive law</italic>
<disp-formula id="e4">
<mml:math id="m10">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</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:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(4)</label>
</disp-formula>
<disp-formula id="e5">
<mml:math id="m11">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mspace width="2em"/>
<mml:msub>
<mml:mrow>
<mml:mi>L</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:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(5)</label>
</disp-formula>
<italic>where</italic> <inline-formula id="inf7">
<mml:math id="m12">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> <italic>guarantees that</italic>
<list list-type="simple">
<list-item>
<p>1) <italic>the norm of the estimate</italic> <inline-formula id="inf8">
<mml:math id="m13">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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:math>
</inline-formula> <italic>is invariant, i.e.,&#x20;given that</italic> <inline-formula id="inf9">
<mml:math id="m14">
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:math>
</inline-formula>
<italic>,</italic> <inline-formula id="inf10">
<mml:math id="m15">
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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 stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula> <italic>for all</italic> <italic>t</italic>&#x20;&#x2265;&#x20;0</p>
</list-item>
<list-item>
<p>2) <italic>if</italic> <inline-formula id="inf11">
<mml:math id="m16">
<mml:mi>&#x3d1;</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:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <italic>then</italic> <inline-formula id="inf12">
<mml:math id="m17">
<mml:mi>&#x3d1;</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>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x3c0;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <italic>for all</italic> <italic>t</italic>&#x20;&#x3e; 0<italic>, where</italic> <italic>&#x3d1;</italic> <italic>is the angle between</italic> <italic>n</italic>
<sub>
<italic>c</italic>
</sub> <italic>and</italic> <inline-formula id="inf13">
<mml:math id="m18">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>3) <inline-formula id="inf14">
<mml:math id="m19">
<mml:msub>
<mml:mrow>
<mml:mi>lim</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>4) <italic>if</italic> <inline-formula id="inf15">
<mml:math id="m20">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> <italic>is persistently excited then</italic> <italic>&#x3d1;</italic> <italic>converges to zero exponentially which implies that</italic> <inline-formula id="inf16">
<mml:math id="m21">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> <italic>converges exponentially to</italic> <italic>n</italic>
<sub>
<italic>c</italic>
</sub> <italic>with a rate that can be tuned by</italic> <italic>&#x3b3;</italic>
<sub>
<italic>n</italic>
</sub>
<italic>.</italic>
</p>
</list-item>
</list>
</p>
<p>The proposition is based on Theorem 4.3.3 in <xref ref-type="bibr" rid="B24">Karayiannidis et&#x20;al. (2014)</xref> and ensures that <inline-formula id="inf17">
<mml:math id="m22">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> remains a unit vector. The surface normal estimate is initialized based on the velocity <inline-formula id="inf18">
<mml:math id="m23">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> when contact is detected, i.e.,&#x20;<disp-formula id="equ1">
<mml:math id="m24">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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 stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
</mml:mfrac>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>The projection matrix <inline-formula id="inf19">
<mml:math id="m25">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e4">Eq. 4</xref> ensures that the norm of <inline-formula id="inf20">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is preserved, since <inline-formula id="inf21">
<mml:math id="m27">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is tangent to the unit sphere; thus, we can compute the instantaneous angular velocity <italic>&#x3c9;</italic>(<italic>t</italic>) from <inline-formula id="inf22">
<mml:math id="m28">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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:math>
</inline-formula> and <inline-formula id="inf23">
<mml:math id="m29">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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:math>
</inline-formula> as<disp-formula id="equ2">
<mml:math id="m30">
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</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:math>
</disp-formula>
</p>
<p>This property must be preserved when implementing the algorithm in discrete time. To accomplish this, we exploit the instantaneous angular velocity <italic>&#x3c9;</italic>(<italic>t</italic>) for the update of the surface normal estimate. In particular, we implement the surface normal estimation using the following difference equations:<disp-formula id="e6">
<mml:math id="m31">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c9;</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:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<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:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(6)</label>
</disp-formula>
<disp-formula id="e7">
<mml:math id="m32">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>L</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:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</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:msub>
<mml:mrow>
<mml:mi>L</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:mi>k</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mspace width="2em"/>
<mml:msub>
<mml:mrow>
<mml:mi>L</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:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(7)</label>
</disp-formula>where <italic>T</italic>
<sub>
<italic>s</italic>
</sub> is the sample time and<disp-formula id="equ3">
<mml:math id="m33">
<mml:mi>&#x3c9;</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:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<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:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>L</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:mi>k</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<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:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
</statement>
</p>
</sec>
<sec>
<title>4.1.2 Contact Detection</title>
<p>A statistical method is used for contact detection; in particular, we consider the signal<disp-formula id="e8">
<mml:math id="m34">
<mml:mi>&#x3c6;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mtext>tip</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>tip</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(8)</label>
</disp-formula>which will be negative when a collision occurs since a force is applied in the opposite direction of the motion. To achieve a robust collision detection, the non-restarting cumulative sum method (CUSUM) is applied to <italic>&#x3c6;</italic> (<xref ref-type="bibr" rid="B19">Gandy and Lau, 2013</xref>).</p>
</sec>
<sec id="s4-1-2">
<title>4.1.3 Parameter Adaptation</title>
<p>This section describes how the gains of the admittance controller are changed based on the dynamics of the demonstrator and the environment. Our approach is to change the eigenaxis of the parameter matrices according to the surface normal, and change the eigenvalues according to a force-dependent heuristic.</p>
<p>There exist multiple approaches for adapting the gains of an admittance controller, including force-dependent variable impedance control (<xref ref-type="bibr" rid="B34">M&#xfc;ller et&#x20;al., 2018</xref>), velocity-dependent variable impedance control (<xref ref-type="bibr" rid="B17">Ficuciello et&#x20;al., 2015</xref>), and passivity-based approaches (<xref ref-type="bibr" rid="B16">Ferraguti et&#x20;al., 2019</xref>).</p>
<p>A force-dependent variable impedance control makes it easier to accelerate and decelerate the robot, as the damping is given by (<xref ref-type="bibr" rid="B34">M&#xfc;ller et&#x20;al., 2018</xref>):<disp-formula id="e9">
<mml:math id="m35">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>V</mml:mi>
<mml:mi>I</mml:mi>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mi mathvariant="monospace">d</mml:mi>
<mml:mi mathvariant="monospace">i</mml:mi>
<mml:mi mathvariant="monospace">a</mml:mi>
<mml:mi mathvariant="monospace">g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi mathvariant="monospace">d</mml:mi>
<mml:mi mathvariant="monospace">i</mml:mi>
<mml:mi mathvariant="monospace">a</mml:mi>
<mml:mi mathvariant="monospace">g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="monospace">sign</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(9)</label>
</disp-formula>where &#x393; is the wrench vector, <italic>&#x3b1;</italic> &#x3e; 0 is a tuning parameter, <inline-formula id="inf24">
<mml:math id="m36">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is the Cartesian velocity, and <italic>D</italic>
<sub>0</sub> is a diagonal matrix.</p>
<p>To ensure stability of the impedance controller when interacting with a human that varies the active damping and stiffness, a lower bound can be found for the damping that ensures stability; this is denoted <italic>D</italic>
<sub>
<italic>obs</italic>
</sub>. Finally, the damping of the force-dependent variable impedance control is given by<disp-formula id="e10">
<mml:math id="m37">
<mml:mi>D</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>max</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>V</mml:mi>
<mml:mi>I</mml:mi>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
<mml:mi>b</mml:mi>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:math>
<label>(10)</label>
</disp-formula>
</p>
<p>To analyze the stability of the impedance controlled robot during interaction with both environment and human, one can describe the system as a linear parameter varying (LPV) system. The varying parameters include the damping of the impedance control, the compliance of the human and the compliance of the environment. The stability of such systems has been considered in several work, including <xref ref-type="bibr" rid="B33">M&#xfc;ller et&#x20;al. (2019)</xref>, but here several parameters are considered to be constant. The presented stability criterion relaxes this assumption.</p>
<p>The model used in similar physical human-robot collaboration works such as <xref ref-type="bibr" rid="B33">M&#xfc;ller et&#x20;al. (2019)</xref> is linear, but most of the gains are varying in the considered application. In particular, the compliance parameters of the human and stiffness of the environment may vary. These parameters may be estimated or considered to be unknown but bounded to some set of feasible parameter values. Also the damping of the controller is varying but known (in the force-dependent variable impedance control, it depends on the measured wrench). Finally, delays are present in the system originating from the active response of the human and delays in the control software.</p>
<p>The variations in the system dynamics may be modelled using an <italic>N</italic>-dimensional exogenous variable <italic>&#x3c1;</italic>(<italic>t</italic>), but since the response of the controller may be delayed compared to the response of the system, the delayed variable <italic>&#x3c1;</italic>
<sub>
<italic>h</italic>
</sub>(<italic>t</italic>) &#x3d; <italic>&#x3c1;</italic>(<italic>t</italic>&#x20;&#x2212; <italic>h</italic>) is introduced where <inline-formula id="inf25">
<mml:math id="m38">
<mml:mi>h</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is a constant time-delay.</p>
<p>Due to the linearity of the considered system dynamics, the impedance controlled robot can be modelled as the following LPV system with time-delays, see <xref ref-type="bibr" rid="B5">Briat (2014)</xref>,<disp-formula id="e11">
<mml:math id="m39">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml: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:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>w</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:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(11)</label>
</disp-formula>
<disp-formula id="e12">
<mml:math id="m40">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>z</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:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</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:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>w</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:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(12)</label>
</disp-formula>
<disp-formula id="e13">
<mml:math id="m41">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>x</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:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3d5;</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:mspace width="0.17em"/>
<mml:mi>s</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(13)</label>
</disp-formula>where <italic>x</italic> is the state of the system, <italic>w</italic> is a disturbance input, <italic>z</italic> is the performance output, <italic>A</italic>, <italic>A</italic>
<sub>
<italic>h</italic>
</sub>, and <italic>E</italic> define the system dynamics, and <italic>C</italic>, <italic>C</italic>
<sub>
<italic>h</italic>
</sub>, and <italic>F</italic> define the performance measure, and <italic>&#x3d5;</italic>(<italic>s</italic>) provides the initial condition. The value of the parameter vector <italic>&#x3c1;</italic> must be within the compact set &#x394;<sub>
<italic>&#x3c1;</italic>
</sub>, and the rate of variation of the parameters should be within the set &#x394;<sub>
<italic>v</italic>
</sub> &#x3d; [&#x2212;1,1]<sup>
<italic>N</italic>
</sup>. To simplify notation, we define the Hermitian operator (for real matrices) as <inline-formula id="inf26">
<mml:math id="m42">
<mml:mi mathvariant="monospace">H</mml:mi>
<mml:mi mathvariant="monospace">e</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>A</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, denote the set of positive definite <italic>n</italic>&#x20;&#xd7; <italic>n</italic> matrices by <inline-formula id="inf27">
<mml:math id="m43">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x227b;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, and define the following sets:<disp-formula id="e14">
<mml:math id="m44">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="0.17em"/>
<mml:mi>t</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(14)</label>
</disp-formula>
<disp-formula id="e15">
<mml:math id="m45">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="script">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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>&#x3d;</mml:mo>
<mml:mi>&#x3c1;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(15)</label>
</disp-formula>
<disp-formula id="e16">
<mml:math id="m46">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x2264;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mspace width="0.17em"/>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(16)</label>
</disp-formula>
</p>
<p>The stability of the time-delayed LPV system can be analyzed by the use of the following theorem (<xref ref-type="bibr" rid="B5">Briat, 2014</xref>, Theorem 6.3.3), which is based on identifying a parameter-dependent Lyapunov-Krasovskii functional due to the existence of time-delays. Also, a desired performance can be specified via a mixed sensitivity description and optimized by minimizing <italic>&#x3b3;</italic> in the following theorem.</p>
<p>
<statement content-type="theorem" id="Theorem_1">
<label>Theorem 1</label>
<p>
<italic>Assume that there exists a continuously differentiable matrix function</italic> <inline-formula id="inf28">
<mml:math id="m47">
<mml:mi>P</mml:mi>
<mml:mo>:</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2192;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x227b;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>
<italic>, a matrix function</italic> <inline-formula id="inf29">
<mml:math id="m48">
<mml:mi>Q</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x227b;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>
<italic>, a constant matrix</italic> <inline-formula id="inf30">
<mml:math id="m49">
<mml:mi>R</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x227b;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> <italic>and a scalar</italic> <italic>&#x3b3;</italic> &#x3e; 0 <italic>such that the LMI</italic>
<disp-formula id="e17">
<mml:math id="m50">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>12</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>E</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mi>C</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>A</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>R</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mi>E</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2217;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x227a;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(17)</label>
</disp-formula>
<italic>holds for all</italic> <inline-formula id="inf31">
<mml:math id="m51">
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> <italic>and all</italic> <italic>&#x3bd;</italic>, <italic>&#x3bd;</italic>
<sub>
<italic>h</italic>
</sub> &#x2208; {&#x2212;1,1}<sup>
<italic>N</italic>
</sup> &#xd7;{&#x2212;1,1}<sup>
<italic>N</italic>
</sup> <italic>where</italic>
<disp-formula id="e18">
<mml:math id="m52">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="italic">H</mml:mi>
<mml:mi mathvariant="italic">e</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</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:mo>&#x2b;</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bd;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bd;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(18)</label>
</disp-formula>
<disp-formula id="e19">
<mml:math id="m53">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>12</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>P</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>R</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(19)</label>
</disp-formula>
</p>
<p>
<italic>Then the LPV system is asymptotically stable for all constant delays</italic> <inline-formula id="inf32">
<mml:math id="m54">
<mml:mi>h</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> <italic>and</italic> <inline-formula id="inf33">
<mml:math id="m55">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> <italic>and the</italic> <italic>L</italic>
<sub>2</sub>
<italic>-gain from</italic> <italic>w</italic> <italic>to</italic> <italic>z</italic> <italic>is less than</italic> <italic>&#x3b3;</italic>
<italic>.</italic>
</p>
<p>
<xref ref-type="statement" rid="Theorem_1">Theorem 1</xref> applies to the considered robotic system; however, to ease the computation of the stability condition, the system model should be written as a polytopic LPV system. Then it is sufficient to evaluate <xref ref-type="disp-formula" rid="e17">Eq. 17</xref> at the vertices of the parameter space, see <xref ref-type="bibr" rid="B5">Briat (2014)</xref> for details.</p>
</statement>
</p>
</sec>
</sec>
<sec id="s4-2">
<title>4.2 Learning Task Kinematics</title>
<p>In order to encode a gluing trajectory from a user demonstration in a flexible manner that will allow us to reparameterize and reuse the learned task, we adopt Dynamic Movement Primitives as our representation for robot kinematic trajectories.</p>
<sec id="s4-2-1">
<title>4.2.1&#x20;Cartesian-Space Dynamic Movement Primitives</title>
<p>In SE(3), dynamic movement primitives (<xref ref-type="bibr" rid="B48">Schaal, 2006</xref>; <xref ref-type="bibr" rid="B23">Ijspeert et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B53">Ude et&#x20;al., 2014</xref>) represent robot trajectories as a second order dynamical system of the form:<disp-formula id="e20">
<mml:math id="m56">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>&#x3c4;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mn>2</mml:mn>
<mml:mo>&#x2061;</mml:mo>
<mml:mi>log</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2a;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(20)</label>
</disp-formula>
<disp-formula id="e21">
<mml:math id="m57">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>&#x3c4;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>z</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mi>&#x3b7;</mml:mi>
<mml:mo>&#x2217;</mml:mo>
<mml:mi>q</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(21)</label>
</disp-formula>
<disp-formula id="e22">
<mml:math id="m58">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>&#x3c4;</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(22)</label>
</disp-formula>where <inline-formula id="inf34">
<mml:math id="m59">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <inline-formula id="inf35">
<mml:math id="m60">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> are constant gains, <inline-formula id="inf36">
<mml:math id="m61">
<mml:mi>g</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <italic>g</italic>
<sub>
<italic>o</italic>
</sub> &#x2208; SO(3) are attractor (goal) points for the positional and orientational components of the DMP, respectively, <inline-formula id="inf37">
<mml:math id="m62">
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is a time constant corresponding to the duration of the movement, <italic>x</italic> is a phase variable, <italic>q</italic> is a unit quaternion, and &#x2217; denotes the quaternion product. Notice that in the absence of terms <italic>f</italic>
<sub>
<italic>p</italic>
</sub>(<italic>x</italic>) and <italic>f</italic>
<sub>
<italic>o</italic>
</sub>(<italic>x</italic>), <xref ref-type="disp-formula" rid="e20">Eqs 20</xref>, <xref ref-type="disp-formula" rid="e21">21</xref> behave as a mass-spring-damper, and will converge towards <italic>g</italic> and <italic>g</italic>
<sub>
<italic>o</italic>
</sub> regardless of their initial condition. In this sense, constants <italic>&#x3b1;</italic>
<sub>
<italic>y</italic>
</sub>, <italic>&#x3b1;</italic>
<sub>
<italic>o</italic>
</sub>, <italic>&#x3b2;</italic>
<sub>
<italic>y</italic>
</sub> and <italic>&#x3b2;</italic>
<sub>
<italic>o</italic>
</sub> are usually chosen for critical damping. By adding the forcing terms <italic>f</italic>
<sub>
<italic>p</italic>
</sub>(<italic>x</italic>) and <italic>f</italic>
<sub>
<italic>o</italic>
</sub>(<italic>x</italic>), given by <xref ref-type="disp-formula" rid="e23">Eqs 23</xref>, <xref ref-type="disp-formula" rid="e24">24</xref>, the system is modulated to fit an arbitrary trajectory, typically provided by demonstration. The forcing terms<disp-formula id="e23">
<mml:math id="m63">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(23)</label>
</disp-formula>
<disp-formula id="e24">
<mml:math id="m64">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>o</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(24)</label>
</disp-formula>
<disp-formula id="e25">
<mml:math id="m65">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>exp</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(25)</label>
</disp-formula>consist of <inline-formula id="inf38">
<mml:math id="m66">
<mml:mi>N</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">Z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> Gaussian radial basis functions (RBF) (<xref ref-type="disp-formula" rid="e25">Eq. 25</xref>) with centers <italic>c</italic>
<sub>
<italic>i</italic>
</sub>, widths <italic>h</italic>
<sub>
<italic>i</italic>
</sub> and attached weight vectors <inline-formula id="inf39">
<mml:math id="m67">
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>.</p>
<p>The canonical system <xref ref-type="disp-formula" rid="e22">Eq. 22</xref>, controls the time evolution of the system and at the same time guarantees convergence of <xref ref-type="disp-formula" rid="e20">Eqs 20</xref>, <xref ref-type="disp-formula" rid="e21">21</xref>, as the influence of <italic>f</italic>
<sub>
<italic>p</italic>
</sub>(<italic>x</italic>) and <italic>f</italic>
<sub>
<italic>o</italic>
</sub>(<italic>x</italic>) will vanish as <italic>x</italic>&#x20;&#x2192;&#x20;0.</p>
<p>Given a demonstration trajectory <inline-formula id="inf40">
<mml:math id="m68">
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, <xref ref-type="disp-formula" rid="e20">Eqs 20</xref>, <xref ref-type="disp-formula" rid="e21">21</xref> can be reformulated:<disp-formula id="e26">
<mml:math id="m69">
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>,</mml:mo>
<mml:mtext>desired</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>g</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mtext>demo</mml:mtext>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(26)</label>
</disp-formula>such that the open parameters in <xref ref-type="disp-formula" rid="e23">Eqs 23</xref>, <xref ref-type="disp-formula" rid="e24">24</xref>, can be learned by, e.g., least-squares weighted linear regression. The same approach can similarly be applied to the orientation.</p>
</sec>
</sec>
<sec id="s4-3">
<title>4.3 Encoding Task Dynamics</title>
<p>Process tasks, such as gluing, involve dynamic interaction with the environment and require that contact between the robot and the workpiece be maintained throughout the task execution. This implies that a target force and torque trajectory must be generated and inputted as a feed-forward signal into an appropriate robot controller (such as a hybrid or parallel position/force controller).</p>
<p>Typically, force-learning within the context of DMPs has consisted of running the robot task open-loop once the kinematic trajectory has been encoded, while the task interaction forces and torques are recorded. These force and torque profiles are assumed to correspond to the desired task profiles and can then be encoded as a mixture of RBFs (<xref ref-type="bibr" rid="B36">Nemec et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B1">Abu-Dakka et&#x20;al., 2015</xref>).</p>
<p>As the kinematic trajectory taught by the user is not likely to be optimal, the forces and torques learned using the previously mentioned approach might not be desirable and therefore not result in the best possible task execution. This is particularly the case for process tasks such as gluing, where often a constant contact force is necessary in order to ensure even distribution of glue along the target surface. Thus, we propose to instead record the output of the surface normal estimator (see <xref ref-type="sec" rid="s4-1-1">Section 4.1.1</xref>) during the user demonstration and encode this as RBFs:<disp-formula id="e27">
<mml:math id="m70">
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c8;</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>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mi>x</mml:mi>
<mml:mo>.</mml:mo>
</mml:math>
<label>(27)</label>
</disp-formula>
</p>
<p>The user can then manually input a desired force magnitude <italic>F</italic>
<sub>
<italic>in</italic>
</sub>&#x2014;which is often a known process variable&#x2014;and this will then be applied in the direction of the surface normal, i.e. the desired force is <italic>f</italic>
<sub>
<italic>d</italic>
</sub>(<italic>x</italic>) &#x3d; <italic>F</italic>
<italic>
<sub>in</sub>
</italic>
<italic>n</italic>
<sub>
<italic>c</italic>,<italic>d</italic>
</sub>(<italic>x</italic>).</p>
</sec>
<sec id="s4-4">
<title>4.4 Execution</title>
<p>Given the encodings of both the task kinematics (<xref ref-type="sec" rid="s4-2">Section 4.2</xref>) and dynamics (<xref ref-type="sec" rid="s4-3">Section 4.3</xref>) the controller chosen for task execution must ensure tracking of both the target position and orientation and the target forces and torques. Simultaneously, it must handle the prioritization of these two tasks in a way that guarantees both the successful outcome of the task and the stability of the system. Here, we apply segmentation in order to more effectively handle the different requirements of different stages of the task, as well as to allow us to apply strategies to increase the robustness of the execution.</p>
<p>The remainder of this section will present our approach to task segmentation and how it applies to task execution, and our proposed parallel position/force controller.</p>
<sec id="s4-4-1">
<title>4.4.1 Segmentation and Execution Flow</title>
<p>A key aspect to our overall approach is segmentation, whereby we divide the overall task into an <italic>approach phase</italic> and a <italic>process phase</italic> based on the output of the contact detector during the demonstration. The approach phase includes all robot motions prior to establishing contact with the target surface, while the process phase includes all in-contact interactions with the surface, as well as retraction motions where the robot leaves the surface. Technically, a third <italic>retraction phase</italic> could easily be defined to encompass these motions, but this has not been implemented in the current system iteration.</p>
<p>Segmentation of the task phases is crucial to our method, as it allows us to use the semantic information contained in the different phases to apply appropriate control schemes and approaches to generalization. Namely, the execution is split into two separate DMPs, one for each of the phases, and these DMPs are run with different termination conditions. <xref ref-type="fig" rid="F4">Figure&#x20;4</xref> shows the segmented execution&#x20;flow.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Block diagram of segmented execution&#x20;flow.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g004.tif"/>
</fig>
<p>The approach DMP is modulated in a non-standard way by raising its goal a preset distance in the direction normal to the initial contact point in the surface. Once the robot reaches this point, if contact has not been established, the DMP goal is slowly moved down along the direction of the surface normal into the surface. This approach allows us to minimize impact forces, thus ensuring safe interaction with the PCB. A suitable trade-off between execution speed and impact forces can be achieved by regulating the speed of modulation of the goal, depending on the specific application. While this approach is similar to <xref ref-type="bibr" rid="B10">Conkey and Hermans (2019)</xref>, note that they use it in a reactive manner, where the goal is modulated downwards towards the surface only in the case that contact is not established at the same point as it occurred in the demonstration, whereas we use it proactively in order to purposely reduce impact forces.</p>
<p>Once contact has been established with the surface, the starting point of the process DMP will be modulated to coincide with the robot position at contact, in this way avoiding discontinuities. Next, the parallel position/force controller parameters will be changed to appropriate values for the contact state. The target force will be obtained from the normal estimator, but instead of being directly inputted to the controller, will be ramped up slowly to avoid sudden overshoots. Finally, the process DMP will be run in parallel with the target forces obtained from the normal estimator. The next section will examine the details of the parallel position/force controller used for this purpose.</p>
</sec>
<sec id="s4-4-2">
<title>4.4.2 Parallel Force/Position Control</title>
<p>The purpose of this section is to describe the parallel force/position control applied for the execution of the gluing behavior. The controller uses the standard formulation from (<xref ref-type="bibr" rid="B50">Siciliano et&#x20;al., 2009</xref>, Section 9.4.3). The force-controller component is chosen to be a PIV control, i.e.,&#x20;a PI control on the force with velocity damping as explained in (<xref ref-type="bibr" rid="B42">P&#xe9;rez-Ubeda et&#x20;al., 2020</xref>). In addition, the controller gains are adapted according to the surface normal. The block diagram shown in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref> shows the use of the controller during execution of the gluing&#x20;task.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Block diagram of the controller architecture used for task execution.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g005.tif"/>
</fig>
<p>Notice the structural similarities with the admittance controller used for demonstration in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>. The most notable differences are the removal of the normal estimation block and addition of a DMP and encoded normals block. The DMP provides the positional input to the parallel position/force controller. The encoded normals are used for two purposes: 1) In combination with an input process force, <italic>F</italic>
<sub>
<italic>in</italic>
</sub> provided by the user they specify the force input to the parallel position/force controller. 2) Through the gain scheduler, they specify the structure for the gain matrices of the parallel position/force controller, such that force-control is applied only in the axis perpendicular to the surface of contact, while the other two axes are purely position-controlled. Note that contact detection is also incorporated in a manner similar to during the demonstration. In this case, while contact has not yet been detected, the gains of the force-control component of the parallel position/force controller will be set to zero, such that the robot is purely position controlled. Once a contact is detected, gain-switching occurs, and the controller begins tracking the desired forces, <italic>F</italic>
<sub>
<italic>d</italic>
</sub>, so as to minimize the force error,&#x20;<italic>F</italic>
<sub>
<italic>e</italic>
</sub>.</p>
</sec>
</sec>
</sec>
<sec id="s5">
<title>5 Experimental Evaluation</title>
<p>In order to evaluate the performance of our proposed system, we constructed a benchmark from a real-world use-case provided by a partner company. The original use-case involves gluing electronic components to a PCB. For our evaluation, we 3D-printed a replica of the PCB with the attached components. Similarly, we substituted the original gluing dispenser tip with a 3D-printed model. Both the PCB and gluing tip mock-ups can be observed in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>. Note that, due to being 3D-printed, our mock-ups actually introduce more challenges from a control perspective than the original components. Printing imperfections on the surface of the PCB mock-up increase friction and introduce high frequency components in the forces that the parallel position/force controller must then address. The 3D-printed tip is also stiffer, which can challenge the stability of the system when compared to the more compliant true gluing&#x20;tip.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Robot executing the taught gluing-like task on our benchmark system. Notice the 3D-printed mock-up PCB (in green) and the 3D-printed mock-up gluing tip in a conical shape attached to the robot end-effector.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g006.tif"/>
</fig>
<p>We used a Universal Robots UR10e collaborative robot manipulator for our experiments. The robot is equipped with an internal force-torque (FT) sensor at the wrist 3 joint, close to the tool flange. All force-torque measurements and control were performed using the output of this sensor. The controllers were implemented in Python 3, using the <italic>ur_rtde</italic>
<xref ref-type="fn" rid="FN1">
<sup>1</sup>
</xref> library for communication with the robot, both for streaming data and for sending commands to the internal robot controller. Our Python control application and the internal robot controller both run at a frequency of 500&#xa0;Hz.</p>
<p>The following sections will evaluate our full system pipeline, from a demonstration of a task, as shown in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>, to its segmentation, encoding and subsequent execution. We will present results for each of the system components previously described in <xref ref-type="sec" rid="s4">Section 4</xref>. Note that all figures in the following sections are expressed in robot base frame, that is, with the <italic>z</italic>-axis normal to the table surface and its positive direction pointing out of the table, while the <italic>x</italic>&#x20;&#x2212; <italic>y</italic> plane coincides with the table&#x20;plane.</p>
<sec id="s5-1">
<title>5.1 Demonstration and Encoding</title>
<p>We will first evaluate the components of the system involved in the demonstration and task encoding pipeline. This consists of the surface normal estimator, damping adaptation scheme for the admittance controller, and DMPs for both the approach and process phases.</p>
<sec id="s5-1-1">
<title>5.1.1 Admittance Controller Parameter Adaptation</title>
<p>
<xref ref-type="fig" rid="F7">Figure&#x20;7</xref> shows adaptation of the damping term in the admittance controller used for kinesthetic teaching of the task, as outline in <xref ref-type="sec" rid="s4-1-2">Section 4.1.2</xref>. Notice that the damping is varied slightly in all directions between <italic>t</italic>&#x20;&#x3d; 0&#xa0;s and <italic>t</italic>&#x20;&#x2248; 3&#xa0;s, that is during the free air (approach) phase of the task. This is followed by an abrupt increase in damping in all axes of both the position and the orientation) at <italic>t</italic>&#x20;&#x2248; 3&#xa0;s, when contact with the surface of the PCB/table is detected. This ensures that the stability of the interaction is maintained despite the sudden increase in the environmental stiffness. The high damping value is maintained for another half a second, after which the parameters are allowed to vary again, albeit this time around the increased damping value as base value. This is particularly noticeable in the positional axes at <italic>t</italic>&#x20;&#x2248; 8&#xa0;s. Here, the user attempted to increase the speed of movement in a direction parallel to the plane of contact. This caused a decrease in damping in the <italic>x</italic>- and <italic>y</italic>-axes, accompanied by a slight increase in damping in the <italic>z</italic>-axis, as the robot was not moving in this plane. Once the robot leaves the surface during the retraction motion at <italic>t</italic>&#x20;&#x3d; 15&#xa0;s and is moved again in free air, the damping in the <italic>z</italic>-axis very rapidly decreases. In all of these cases, the damping adaptation aims to assist the user in accomplishing their demonstration intention.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>Damping adaptation throughout a demonstration of the gluing&#x20;task.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g007.tif"/>
</fig>
</sec>
<sec id="s5-1-2">
<title>5.1.2 Comparison of Admittance Controller vs. Freedrive for Demonstration</title>
<p>To test the usability of our adaptive admittance controller for demonstration, we devised an experiment where we compared it to the Free-drive control mode implemented in the Universal Robots. We programmed the robot to draw a reference figure-eight trajectory on a flat steel surface using a permanent marker. This was subsequently used as a visual reference in a small-scale user experiment consisting of six subjects. The subjects were instructed to kinesthetically teach the robot to follow the reference as closely as possible, without any requirements as to speed or time of the demonstration. Each subject repeated the demonstration three times with each controller, alternating between freedrive and our proposed adaptive admittance scheme.</p>
<p>To account for different timescales, we used Dynamic Time Warping (DTW) (<xref ref-type="bibr" rid="B35">M&#xfc;ller, 2007</xref>) to temporally align all demonstrations to the reference trajectory. We used DTW distance as a measure of deviation from the reference. Likewise, we measured the duration of the demonstration. The results are shown in <xref ref-type="table" rid="T1">Table&#x20;1</xref>, where each value is the average of the three attempts for that condition.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Comparison of the mean distance from reference (lower is better) and mean duration (lower is better) between our adaptive admittance controller and Universal Robots&#x2019; freedrive controller for an experiment with six subjects. Each number is an average of three attempts performed by that subject.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left"/>
<th colspan="2" align="center">Mean distance from reference</th>
<th colspan="2" align="center">Mean duration</th>
</tr>
<tr>
<th align="left">Subject</th>
<th align="center">Adaptive admittance (ours)</th>
<th align="center">Freedrive</th>
<th align="center">Adaptive admittance (ours)</th>
<th align="center">Freedrive</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">A</td>
<td align="char" char=".">16.1</td>
<td align="char" char=".">25.0</td>
<td align="char" char=".">28.9</td>
<td align="char" char=".">34.5</td>
</tr>
<tr>
<td align="left">B</td>
<td align="char" char=".">52.3</td>
<td align="char" char=".">79.3</td>
<td align="char" char=".">18.6</td>
<td align="char" char=".">27.3</td>
</tr>
<tr>
<td align="left">C</td>
<td align="char" char=".">40.0</td>
<td align="char" char=".">42.1</td>
<td align="char" char=".">17.3</td>
<td align="char" char=".">22.5</td>
</tr>
<tr>
<td align="left">D</td>
<td align="char" char=".">72.2</td>
<td align="char" char=".">80.5</td>
<td align="char" char=".">25.3</td>
<td align="char" char=".">27.5</td>
</tr>
<tr>
<td align="left">E</td>
<td align="char" char=".">58.0</td>
<td align="char" char=".">105.7</td>
<td align="char" char=".">18.1</td>
<td align="char" char=".">34.6</td>
</tr>
<tr>
<td align="left">F</td>
<td align="char" char=".">62.1</td>
<td align="char" char=".">83.8</td>
<td align="char" char=".">13.3</td>
<td align="char" char=".">21.1</td>
</tr>
<tr>
<td align="left">All</td>
<td align="char" char=".">
<bold>50.1</bold>
</td>
<td align="char" char=".">69.4</td>
<td align="char" char=".">
<bold>20.2</bold>
</td>
<td align="char" char=".">27.9</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Although the sample size is not large enough to achieve statistical significance, the results show a clear trend that users achieve lower distances from the reference in a shorter amount of time when using our adaptive admittance controller compared to when using Freedrive.</p>
</sec>
<sec id="s5-1-3">
<title>5.1.3 Surface Normal Estimator</title>
<p>We evaluated the surface normal estimator on a separate curved surface based on an eigenfunction of the L-shaped membrane, as shown in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>. This surface is composed of a flat plane in one of its quadrants, which transitions into a smooth continuous function along the other three quadrants. Using a compliant controller, the robot was taught a motion along the surface, starting on the planar quadrant and moving onto and along the surface peak. The surface normal estimator was initialized to the value [0, 0, &#x2212;1]. <xref ref-type="fig" rid="F9">Figure&#x20;9</xref> shows the evolution of the angular error along the path. An error of <inline-formula id="inf41">
<mml:math id="m71">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>6</mml:mn>
<mml:mo>&#xb0;</mml:mo>
</mml:math>
</inline-formula> is maintained along the planar quadrant of the surface. At <italic>t</italic>&#x20;&#x3d; 4&#xa0;s the robot tool is moved onto the curved section of the surface, resulting in a discontinuous jump in the error up to <inline-formula id="inf42">
<mml:math id="m72">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>12</mml:mn>
<mml:mo>&#xb0;</mml:mo>
</mml:math>
</inline-formula>. This is to be expected, as the surface is in fact discontinuous at this point. The estimator then begins converging and the error decreases to 8&#xb0; at <italic>t</italic>&#x20;&#x3d; 5&#xa0;s. A maximum angular error of <inline-formula id="inf43">
<mml:math id="m73">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>16</mml:mn>
<mml:mo>&#xb0;</mml:mo>
</mml:math>
</inline-formula> is reached at <italic>t</italic>&#x20;&#x2248; 6.5&#xa0;s, coinciding with the area along the surface that exhibits the fastest rate of curvature change, after which the error decreases to <inline-formula id="inf44">
<mml:math id="m74">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>9</mml:mn>
<mml:mo>&#xb0;</mml:mo>
</mml:math>
</inline-formula> at <italic>t</italic>&#x20;&#x2248; 8.5&#xa0;s.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Output of the surface normal estimator compared to the ground truth value for a taught robot tool path along a curved surface defined by an eigenfunction of the L-shaped membrane.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g008.tif"/>
</fig>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Estimation error for the surface normal compared to the ground&#x20;truth.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g009.tif"/>
</fig>
</sec>
<sec id="s5-1-4">
<title>5.1.4 DMP Encoding</title>
<p>The segmented approach phase of the demonstration, together with the output of the corresponding DMP learned from it are shown in <xref ref-type="fig" rid="F10">Figure&#x20;10</xref> for the position and <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> for the orientation, respectively. Likewise, the process phase is shown in <xref ref-type="fig" rid="F12">Figures 12</xref>, <xref ref-type="fig" rid="F13">13</xref>. Notice, particularly in the <italic>y</italic>-axis of component of <xref ref-type="fig" rid="F10">Figure&#x20;10</xref> and quaternion <italic>w</italic>- and <italic>z</italic>-components of <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> that some error in the least-squares fit for the RBFs is present. However, at the scale this is apparent, it has little effect on the robot motion and is irrelevant to the approach phase overall.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Demonstrated position and corresponding Position DMP for the approach motion.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g010.tif"/>
</fig>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Demonstrated orientation (quaternion) and corresponding Quaternion DMP for the approach motion.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g011.tif"/>
</fig>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Demonstrated position and corresponding Position DMP for the process motion.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g012.tif"/>
</fig>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>Demonstrated orientation (quaternion) and corresponding Quaternion DMP for the process motion.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g013.tif"/>
</fig>
</sec>
</sec>
<sec id="s5-2">
<title>5.2 Execution</title>
<p>Now that we have examined the components involved in demonstration and encoding processes, we will analyze the results of execution, particularly with regards to the performance of the parallel position/force controller.</p>
<p>
<xref ref-type="fig" rid="F14">Figure&#x20;14</xref> shows the target force reference of the controller, together with the actual forces measured by the robot f/t sensor end-effector during execution. The detected contact point with the surface of the PCB is indicated by a red dotted line at <italic>t</italic>&#x20;&#x2248; 4.5&#xa0;s. Note that the output of the normal estimator previously shown in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref> multiplied by the user-inputted process force magnitude, which in this case was set to 5&#xa0;N, is the target force. Furthermore, this means that the majority of the force control happens in the <italic>z</italic>-axis, as the robot was nearly perpendicular to the contact surface throughout the task. We will consequently focus most of our analysis on the <italic>z</italic>-axis component. During contact, the robot experiences an impact force of <inline-formula id="inf45">
<mml:math id="m75">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>9</mml:mn>
</mml:math>
</inline-formula> N (together with <inline-formula id="inf46">
<mml:math id="m76">
<mml:mo>&#x223c;</mml:mo>
<mml:mn>2.5</mml:mn>
</mml:math>
</inline-formula> N in the <italic>x</italic>-axis). Such a low impact force is achievable due to our slow modulation of the approach DMP goal, as described in <xref ref-type="sec" rid="s4-4-1">Section 4.4.1</xref> and visualized in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>. Following this, the force target is ramped up from 0 to 5&#xa0;N between impact and <italic>t</italic>&#x20;&#x2248; 7.5&#xa0;s, after which it maintains a nearly constant process force of 5&#xa0;N. Notice that after <italic>t</italic>&#x20;&#x2248; 17.5&#xa0;s, the robot is unable to maintain the target force. This is because the position reference moves it up and away from the contact surface, as can be seen in <xref ref-type="fig" rid="F15">Figure&#x20;15</xref>. This can similarly be observed in the <italic>x</italic>-axis force, and is reflected again in the <italic>x</italic>-axis of <xref ref-type="fig" rid="F15">Figure&#x20;15</xref>, as the prevalence of the force target means that the robot does not actually meet the position target. Since the retraction motion is not considered crucial to the successful completion of the task, it is currently not explicitly handled by the segmentation algorithm. Were it so, it would suffice with setting either the target force or the force control gains to zero in order to more precisely follow the position target.</p>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>Target forces input to the parallel position/force controller (labelled <italic>target</italic>) compared to the actual measured forces (labelled <italic>actual</italic>). The dotted vertical red line shows the point at which contact with the surface was detected, upon which the gains of the parallel position/force controller are adapted and the forces are ramped to the target process force magnitude.</p>
</caption>
<graphic xlink:href="frobt-08-767878-g014.tif"/>
</fig>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>Target positions input to the parallel position/force controller (labelled <italic>target</italic>) compared to the total controller output consisting of combined position and force contributions (labelled <italic>controller output</italic>) and to the actual measured positions (labelled <italic>actual</italic>).</p>
</caption>
<graphic xlink:href="frobt-08-767878-g015.tif"/>
</fig>
<p>A prevalent issue visible in <xref ref-type="fig" rid="F14">Figure&#x20;14</xref> is the amount of noise present in the FT sensor measurements. Notice that this is noticeable even before impact, at <italic>t</italic>&#x20;&#x3c; 4.5&#xa0;s, when the robot is in free air. This shows that this is an issue in the sensor used in the Universal Robots themselves, and not in our system. Indeed, similar performance to our results here has been reported by, e.g. <xref ref-type="bibr" rid="B42">P&#xe9;rez-Ubeda et&#x20;al. (2020)</xref> when applying force control on Universal Robots&#x20;arms.</p>
</sec>
</sec>
<sec id="s6">
<title>6 Discussion and Perspectives</title>
<p>In the previous section, we evaluated our system on a benchmark inspired by a real industrial gluing use case, and analyzed the performance of the different system components both during a task demonstration and during the subsequent execution of the learned primitive. During demonstration, we showed that the adaptive damping in the admittance controller can assist the user in accomplishing their intended motion, while at the same time guaranteeing a stable interaction despite a changing environmental stiffness. Similarly, we showed that our surface normal estimator works satisfactory and allows the admittance controller to change the structure of its gain matrices, such that the normal direction maintains a higher damping to ensure stability, while the damping in the other directions is reduced to assist the user. During execution, we showed that our controller is able to track positional targets while applying the target force profile in the normal direction. We also showed the system&#x2019;s ability to reduce impact forces by using DMP goal modulation.</p>
<p>However, there are many factors that were not fully considered and that could be improved upon in future iterations of the system.</p>
<p>When it comes to our adaptive admittance controller for demonstration, our small-scale usability evaluation in <xref ref-type="sec" rid="s5-1-2">Section 5.1.2</xref> shows a clear trend that our controller enables users to provide both more accurate and more efficient demonstrations of a path-constrained task when compared to Freedrive, as implemented on Universal Robots manipulators. This was verbally confirmed by the participants following the experiment. The subjects also reported that demonstrating was considerably more physically taxing using Freedrive, whereas our adaptive admittance scheme assisted in completing the task, making it easier to keep contact with the surface and to maintain a smooth continuous motion. As a full usability evaluation falls beyond the scope of this paper, backing this up with, e.g. the NASA-TLX (<xref ref-type="bibr" rid="B21">Hart and Staveland, 1988</xref>) or SUS (<xref ref-type="bibr" rid="B6">Brooke et&#x20;al., 1996</xref>) tests is left for future&#x20;work.</p>
<p>In gluing and dispensing tasks, it is often imperative for an optimal process outcome that the feed-rate be kept constant throughout the surface of application. While approaches that are able to adjust the feed-rate of the gluing gun to compensate for changes in robot speed exist <xref ref-type="fn" rid="FN2">
<sup>2</sup>
</xref>, by far the majority of applications use constant feed-rate gluing guns and therefore require constant robot movement speed. With our approach, a skilled demonstrator can with some practice provide a near-constant speed demonstration, as is close to the case with the <italic>y</italic>-axis of <xref ref-type="fig" rid="F15">Figure&#x20;15</xref>. However, it would be preferable to normalize execution speed in the encoding of the task to allow for imperfect demonstrations. Some approaches to DMP speed-scaling have been presented (<xref ref-type="bibr" rid="B37">Nemec et&#x20;al., 2018a</xref>,<xref ref-type="bibr" rid="B38">b</xref>), typically through modulation of the time-constant, <italic>&#x3c4;</italic>, with an additional term <italic>&#x3bd;</italic>(<italic>x</italic>) that can be encoded as a mixture of RBFs. This method was considered for our system, but we were unable to achieve better performance than was demonstrated with it, as it did not result in constant speed. Alternative modulation schemes for DMP-speed will be investigated in future&#x20;work.</p>
<p>The performance of the surface normal estimator is imperative for obtaining a good performance of the admittance controller used during the demonstration. It is of importance to both obtain fast convergence and little noise on the estimate. As seen in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>, the convergence of the estimator might be improved; however, the parameters were chosen as a compromise between convergence rate and noise on the estimate. The surface normal estimation could potentially be improved by using a sliding model observer as presented in <xref ref-type="bibr" rid="B22">Hasan and Husain (2009)</xref>. An analysis of the stability of the interconnection between the adaptive controllers and the surface normal estimator was omitted, as the faster dynamics of the controller when compared to those of the gain adaptation according to the surface normal estimator preclude instability. Note that the performance of the surface normal estimator still enables tracking of curved surfaces, as shown in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>, despite its dynamics being slower than those of the controller.</p>
<p>In applications relying on force control it is important to ensure that force limits are not surpassed. Especially when relying on programming by demonstration there is a high chance that the nominal behavior will not comply with force constraints. Thus, it is relevant to modify the position/force controller such that it guarantees compliance with force constraints. This can e.g. be ensured by set invariance control as shown in <xref ref-type="bibr" rid="B44">Polverini et&#x20;al. (2017)</xref>. High forces will likely occur in the transition between free and constrained motions if small positional uncertainties are present. Therefore, it could be beneficial to adapt the reference path according to the measured force as proposed in <xref ref-type="bibr" rid="B11">De Wit and Brogliato (1997)</xref> with an adaptive approach. This would be an alternative approach to the goal modulation proposed in <xref ref-type="sec" rid="s4-4-1">Section&#x20;4.4.1</xref>.</p>
<p>As our system relies heavily on the performance of several parameter estimators, particularly the surface normal estimator, a possible improvement would be to allow for repetitive update of our parameter estimates, for instance through the use of Iterative Learning Control (ILC) (<xref ref-type="bibr" rid="B55">Wang et&#x20;al., 2009</xref>). Such methods have already shown good performance in learning from demonstration systems for peg-in-hole tasks (<xref ref-type="bibr" rid="B36">Nemec et&#x20;al., 2013</xref>; <xref ref-type="bibr" rid="B1">Abu-Dakka et&#x20;al., 2015</xref>).</p>
</sec>
<sec id="s7">
<title>7 Conclusion</title>
<p>In this paper, we have presented a full system for learning from demonstration of gluing and dispensing tasks that encompasses the full pipeline of demonstration, encoding and execution.</p>
<p>During the demonstration, our system is designed to assist the user and provide a non-obtrusive kinesthetic teaching experience. By adapting the damping of an admittance controller according to a force-velocity law, we aid the user during acceleration or deceleration. Furthermore, when contact against the target surface is detected, a surface normal estimation algorithm is used to adapt the gain matrices of the controller to guarantee higher damping and preserve stability in the normal direction, while allowing lower damping in the other directions. Unlike previous approaches in the literature, we do not assume diagonal gain matrices. Rather, we allow the whole eigenstructure to change. This results in lower user forces and better adaptation to the user&#x2019;s intention.</p>
<p>During the encoding, we segment the task based on the initial contact into an approach phase and a process phase. Each of these are encoded as Dynamic Movement Primitives. Similarly, the surface normal estimate is encoded as Radial Basis Functions and synchronized with the process DMP phase system.</p>
<p>During the execution, a parallel position/force controller is used to meet both a position target and a force target, which is calculated based on a user-specified force magnitude applied on the encoded normal direction. The encoded normal is again used to vary the eigenstructure of the force controller gain matrices so as to apply force control in the contact direction and position control otherwise. Finally, we are able to reduce impact forces during the transition from approach to process by slowly modulating the goal of the approach&#x20;DMP.</p>
<p>We have evaluated and analyzed our system on a benchmark based on a real industrial PCB gluing application and verified the suitability of our proposed methods, showing robust execution performance capable of meeting both the kinematic and dynamic requirements of the task. We have also shown that the surface normal estimator works satisfactorily on curved geometries, and that the adaptive controller used for demonstration results in faster and more accurate executions compared to a standard controller implemented on a collaborative&#x20;robot.</p>
</sec>
</body>
<back>
<sec id="s8">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusion of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec id="s9">
<title>Ethics Statement</title>
<p>Written informed consent was obtained from the individual(s) for the publication of any potentially identifiable images or data included in this article.</p>
</sec>
<sec id="s10">
<title>Author Contributions</title>
<p>CS provided the initial suggestion for the system design and II, AK, and CS subsequently contributed to the conceptual development of the system. II implemented the core of the system, with AK and CS suggesting improvements. All three authors helped with the practical evaluation. II set up the initial article structure and first draft, and all three authors contributed to the writing and revision of the manuscript. II was mainly responsible for the figures.</p>
</sec>
<sec id="s11">
<title>Funding</title>
<p>The work leading to this publication is funded by the Innovation Fund Denmark (Innovationsfonden) as part of the Programming Ignition for Robotic Assembly Tasks (PIRAT) project, grant number 9069-00046B.</p>
</sec>
<sec sec-type="COI-statement" id="s12">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s13">
<title>Publisher&#x2019;s Note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<fn-group>
<fn id="FN1">
<label>1</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://gitlab.com/sdurobotics/ur_rtde">https://gitlab.com/sdurobotics/ur_rtde</ext-link>.</p>
</fn>
<fn id="FN2">
<label>2</label>
<p>
<ext-link ext-link-type="uri" xlink:href="https://aim-robotics.com/">https://aim-robotics.com/</ext-link>.</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abu-Dakka</surname>
<given-names>F. J.</given-names>
</name>
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>J&#xf8;rgensen</surname>
<given-names>J.&#x20;A.</given-names>
</name>
<name>
<surname>Savarimuthu</surname>
<given-names>T. R.</given-names>
</name>
<name>
<surname>Kr&#xfc;ger</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Adaptation of Manipulation Skills in Physical Contact with the Environment to Reference Force Profiles</article-title>. <source>Auton. Robot</source> <volume>39</volume>, <fpage>199</fpage>&#x2013;<lpage>217</lpage>. <pub-id pub-id-type="doi">10.1007/s10514-015-9435-2</pub-id> </citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Abu-Dakka</surname>
<given-names>F. J.</given-names>
</name>
<name>
<surname>Saveriano</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Variable Impedance Control and Learning&#x2014;A Review</article-title>. <source>Front. Robotics AI</source> <volume>7</volume>, <fpage>177</fpage>. <pub-id pub-id-type="doi">10.3389/frobt.2020.590681</pub-id> </citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Asada</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Izumi</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>1989</year>). <article-title>Automatic Program Generation from Teaching Data for the Hybrid Control of Robots</article-title>. <source>IEEE Trans. Robot. Automat.</source> <volume>5</volume>, <fpage>166</fpage>&#x2013;<lpage>173</lpage>. <pub-id pub-id-type="doi">10.1109/70.88037</pub-id> </citation>
</ref>
<ref id="B4">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Billard</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Calinon</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Dillmann</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Schaal</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2008</year>). &#x201c;<article-title>Robot Programming by Demonstration</article-title>,&#x201d; in <source>Springer Handbook of Robotics</source> (<publisher-loc>Berlin Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>1371</fpage>&#x2013;<lpage>1394</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-540-30301-5_60</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Briat</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2014</year>). <source>Linear Parameter-Varying and Time-Delay Systems: Analysis, Observation, Filtering &#x26; Control</source>. <publisher-loc>Berlin Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>, <volume>3</volume>, <fpage>5</fpage>&#x2013;<lpage>7</lpage>. </citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Brooke</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1996</year>). <article-title>Sus-a Quick and Dirty Usability Scale</article-title>. <source>Usability Eval. industry</source> <volume>189</volume>, <fpage>4</fpage>&#x2013;<lpage>7</lpage>. </citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Buchli</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Stulp</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Theodorou</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Schaal</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Learning variable impedance control</article-title>. <source>Int. J. Robot. Res.</source> <volume>30</volume>, <fpage>820</fpage>&#x2013;<lpage>833</lpage>. <pub-id pub-id-type="doi">10.1177/0278364911402527</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Caccavale</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Siciliano</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Villani</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>1999</year>). <article-title>The Role of Euler Parameters in Robot Control</article-title>. <source>Asian J.&#x20;Control.</source> <volume>1</volume>, <fpage>25</fpage>&#x2013;<lpage>34</lpage>. <pub-id pub-id-type="doi">10.1111/j.1934-6093.1999.tb00003.x</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Castelli</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Zaki</surname>
<given-names>A. M. A.</given-names>
</name>
<name>
<surname>Dmytriyev</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Carnevale</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Giberti</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>A Feasibility Study of a Robotic Approach for the Gluing Process in the Footwear Industry</article-title>. <source>Robotics</source> <volume>10</volume>, <fpage>6</fpage>. <pub-id pub-id-type="doi">10.3390/robotics10010006</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Conkey</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Hermans</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Learning Task Constraints from Demonstration for Hybrid Force/position Control</article-title>,&#x201d; in <conf-name>2019 IEEE-RAS&#x20;19th International Conference on Humanoid Robots (Humanoids)</conf-name>, <conf-loc>Toronto, Canada</conf-loc>, <conf-date>October 2019</conf-date>, <fpage>162</fpage>&#x2013;<lpage>169</lpage>. <pub-id pub-id-type="doi">10.1109/Humanoids43949.2019.9035013</pub-id> </citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>De Wit</surname>
<given-names>C. C.</given-names>
</name>
<name>
<surname>Brogliato</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>1997</year>). <article-title>Direct Adaptive Impedance Control Including Transition Phases</article-title>. <source>Automatica</source> <volume>33</volume>, <fpage>643</fpage>&#x2013;<lpage>649</lpage>. <pub-id pub-id-type="doi">10.1016/s0005-1098(96)00190-2</pub-id> </citation>
</ref>
<ref id="B12">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Deng</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Mi</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chen</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Einig</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Zou</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Learning Human Compliant Behavior from Demonstration for Force-Based Robot Manipulation</article-title>,&#x201d; in <conf-name>2016 IEEE International Conference on Robotics and Biomimetics (ROBIO)</conf-name>, <conf-loc>Qingdao, China</conf-loc>, <conf-date>December 2016</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>319</fpage>&#x2013;<lpage>324</lpage>. <pub-id pub-id-type="doi">10.1109/robio.2016.7866342</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Deni&#x161;a</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Synthesis of New Dynamic Movement Primitives through Search in a Hierarchical Database of Example Movements</article-title>. <source>Int. J.&#x20;Adv. Robotic Syst.</source> <volume>12</volume>, <fpage>137</fpage>. <pub-id pub-id-type="doi">10.5772/61036</pub-id> </citation>
</ref>
<ref id="B14">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Dimeas</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Aspragathos</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Fuzzy Learning Variable Admittance Control for Human-Robot Cooperation</article-title>,&#x201d; in <conf-name>2014 IEEE/RSJ International Conference on Intelligent Robots and Systems</conf-name>, <conf-loc>Chicago</conf-loc>, <conf-date>September 2014</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>4770</fpage>&#x2013;<lpage>4775</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2014.6943240</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Dimeas</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Aspragathos</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Reinforcement Learning of Variable Admittance Control for Human-Robot Co-manipulation</article-title>,&#x201d; in <conf-name>2015 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Hamburg, Germany</conf-loc>, <conf-date>September 2015</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>1011</fpage>&#x2013;<lpage>1016</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2015.7353494</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ferraguti</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Talignani Landi</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Sabattini</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Bonf&#xe8;</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Fantuzzi</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Secchi</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>A Variable Admittance Control Strategy for Stable Physical Human-Robot Interaction</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>38</volume>, <fpage>747</fpage>&#x2013;<lpage>765</lpage>. <pub-id pub-id-type="doi">10.1177/0278364919840415</pub-id> </citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ficuciello</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Villani</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Siciliano</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Variable Impedance Control of Redundant Manipulators for Intuitive Human-Robot Physical Interaction</article-title>. <source>IEEE Trans. Robot.</source> <volume>31</volume>, <fpage>850</fpage>&#x2013;<lpage>863</lpage>. <pub-id pub-id-type="doi">10.1109/TRO.2015.2430053</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Gams</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Zlajpah</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Wachter</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ijspeert</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Asfour</surname>
<given-names>T.</given-names>
</name>
<etal/>
</person-group> (<year>2013</year>). &#x201c;<article-title>Modulation of Motor Primitives Using Force Feedback: Interaction with the Environment and Bimanual Tasks</article-title>,&#x201d; in <conf-name>IEEE/RSJ International Conference on Intelligent Robots and Systems</conf-name>, <conf-loc>Tokyo, Japan</conf-loc>, <conf-date>November 2013</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>5629</fpage>&#x2013;<lpage>5635</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2013.6697172</pub-id> </citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gandy</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Lau</surname>
<given-names>F. D.-H.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Non-restarting Cumulative Sum Charts and Control of the False Discovery Rate</article-title>. <source>Biometrika</source> <volume>100</volume>, <fpage>261</fpage>&#x2013;<lpage>268</lpage>. <pub-id pub-id-type="doi">10.1093/biomet/ass066</pub-id> </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ga&#x161;par</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Deni&#x161;a</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Radanovi&#x10d;</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Ridge</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Savarimuthu</surname>
<given-names>T. R.</given-names>
</name>
<name>
<surname>Kramberger</surname>
<given-names>A.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>Smart Hardware Integration with Advanced Robot Programming Technologies for Efficient Reconfiguration of Robot Workcells</article-title>. <source>Robotics and Computer-Integrated Manufacturing</source> <volume>66</volume>, <fpage>101979</fpage>. <pub-id pub-id-type="doi">10.1016/j.rcim.2020.101979</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Hart</surname>
<given-names>S. G.</given-names>
</name>
<name>
<surname>Staveland</surname>
<given-names>L. E.</given-names>
</name>
</person-group> (<year>1988</year>). &#x201c;<article-title>Development of Nasa-Tlx (Task Load index): Results of Empirical and Theoretical Research</article-title>,&#x201d; in <source>Advances in Psychology</source> (<publisher-name>Elsevier</publisher-name>), <volume>52</volume>, <fpage>139</fpage>&#x2013;<lpage>183</lpage>. <pub-id pub-id-type="doi">10.1016/s0166-4115(08)62386-9</pub-id> </citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hasan</surname>
<given-names>S. M. N.</given-names>
</name>
<name>
<surname>Husain</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>A Luenberger&#x2013;Sliding Mode Observer for Online Parameter Estimation and Adaptation in High-Performance Induction Motor Drives</article-title>. <source>IEEE Trans. Ind. Applicat.</source> <volume>45</volume>, <fpage>772</fpage>&#x2013;<lpage>781</lpage>. <pub-id pub-id-type="doi">10.1109/TIA.2009.2013602</pub-id> </citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ijspeert</surname>
<given-names>A. J.</given-names>
</name>
<name>
<surname>Nakanishi</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Hoffmann</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Pastor</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Schaal</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Dynamical Movement Primitives: Learning Attractor Models for Motor Behaviors</article-title>. <source>Neural Comput.</source> <volume>25</volume>, <fpage>328</fpage>&#x2013;<lpage>373</lpage>. <pub-id pub-id-type="doi">10.1162/neco_a_00393</pub-id> </citation>
</ref>
<ref id="B24">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Karayiannidis</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Smith</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Vi&#xf1;a</surname>
<given-names>F. E.</given-names>
</name>
<name>
<surname>Kragic</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Online Contact point Estimation for Uncalibrated Tool Use</article-title>,&#x201d; in <conf-name>2014 IEEE International Conference on Robotics and Automation (ICRA)</conf-name>, <conf-loc>Hong Kong, China</conf-loc>, <conf-date>May 31-June 5, 2014</conf-date>, <fpage>2488</fpage>&#x2013;<lpage>2494</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2014.6907206</pub-id> </citation>
</ref>
<ref id="B25">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kober</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Gienger</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Steil</surname>
<given-names>J.&#x20;J.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Learning Movement Primitives for Force Interaction Tasks</article-title>,&#x201d; in <conf-name>2015 IEEE International Conference on Robotics and Automation (ICRA)</conf-name>, <conf-loc>Seattle</conf-loc>, <conf-date>May 2015</conf-date>, <fpage>3192</fpage>&#x2013;<lpage>3199</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2015.7139639</pub-id> </citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kormushev</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Calinon</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Caldwell</surname>
<given-names>D. G.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>Imitation Learning of Positional and Force Skills Demonstrated via Kinesthetic Teaching and Haptic Input</article-title>. <source>Adv. Robotics</source> <volume>25</volume>, <fpage>581</fpage>&#x2013;<lpage>603</lpage>. <pub-id pub-id-type="doi">10.1163/016918611x558261</pub-id> </citation>
</ref>
<ref id="B27">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Koropouli</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Hirche</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2012</year>). &#x201c;<article-title>Learning and Generalizing Force Control Policies for Sculpting</article-title>,&#x201d; in <conf-name>IEEE International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Vilamoura, Portugal</conf-loc>, <conf-date>October 2012</conf-date> (<publisher-loc>Vilamoura</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1493</fpage>&#x2013;<lpage>1498</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2012.6385957</pub-id> </citation>
</ref>
<ref id="B28">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kronander</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Billard</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>Learning Compliant Manipulation through Kinesthetic and Tactile Human-Robot Interaction</article-title>. <source>IEEE Trans. Haptics</source> <volume>7</volume>, <fpage>367</fpage>&#x2013;<lpage>380</lpage>. <pub-id pub-id-type="doi">10.1109/toh.2013.54</pub-id> </citation>
</ref>
<ref id="B29">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kronander</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Billard</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2012</year>). &#x201c;<article-title>Online Learning of Varying Stiffness through Physical Human-Robot Interaction</article-title>,&#x201d; in <conf-name>2012 IEEE International Conference on Robotics and Automation</conf-name>, <conf-loc>Saint Paul, MN</conf-loc>, <conf-date>May 2012</conf-date>, <fpage>1842</fpage>&#x2013;<lpage>1849</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2012.6224877</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kumar</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Rani</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>A New Hybrid Force/position Control Approach for Time-Varying Constrained Reconfigurable Manipulators</article-title>. <source>ISA Trans.</source> <volume>110</volume>, <fpage>138</fpage>&#x2013;<lpage>147</lpage>. <pub-id pub-id-type="doi">10.1016/j.isatra.2020.10.046</pub-id> </citation>
</ref>
<ref id="B31">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Lee</surname>
<given-names>A. X.</given-names>
</name>
<name>
<surname>Gupta</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Levine</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Abbeel</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Learning from Multiple Demonstrations Using Trajectory-Aware Non-rigid Registration with Applications to Deformable Object Manipulation</article-title>,&#x201d; in <conf-name>2015 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Hamburg, Germany</conf-loc>, <conf-date>September 2015</conf-date>, <fpage>5265</fpage>&#x2013;<lpage>5272</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2015.7354120</pub-id> </citation>
</ref>
<ref id="B32">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Li</surname>
<given-names>H.-Y.</given-names>
</name>
<name>
<surname>Dharmawan</surname>
<given-names>A. G.</given-names>
</name>
<name>
<surname>Paranawithana</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Tan</surname>
<given-names>U.-X.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>A Control Scheme for Physical Human-Robot Interaction Coupled with an Environment of Unknown Stiffness</article-title>. <source>J.&#x20;Intell. Robotic Syst.</source>, <fpage>1</fpage>&#x2013;<lpage>18</lpage>. <pub-id pub-id-type="doi">10.1007/s10846-020-01176-2</pub-id> </citation>
</ref>
<ref id="B33">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>M&#xfc;ller</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>J&#xe4;kel</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Such&#xfd;</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Thomas</surname>
<given-names>U.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Stability of Nonlinear Time-Delay Systems Describing Human-Robot Interaction</article-title>. <source>Ieee/asme Trans. Mechatron.</source> <volume>24</volume>, <fpage>2696</fpage>&#x2013;<lpage>2705</lpage>. <pub-id pub-id-type="doi">10.1109/TMECH.2019.2939907</pub-id> </citation>
</ref>
<ref id="B34">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>M&#xfc;ller</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Janetzky</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Behrnd</surname>
<given-names>U.</given-names>
</name>
<name>
<surname>J&#xe4;kel</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Thomas</surname>
<given-names>U.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>User Force-dependent Variable Impedance Control in Human-Robot Interaction</article-title>,&#x201d; in <conf-name>2018 IEEE 14th International Conference on Automation Science and Engineering (CASE)</conf-name>, <conf-loc>Munich, Germany</conf-loc>, <conf-date>August 2018</conf-date>, <fpage>1328</fpage>&#x2013;<lpage>1335</lpage>. <pub-id pub-id-type="doi">10.1109/COASE.2018.8560340</pub-id> </citation>
</ref>
<ref id="B35">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>M&#xfc;ller</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2007</year>). &#x201c;<article-title>Dynamic Time Warping</article-title>,&#x201d; in <source>Information Retrieval for Music and Motion</source>. <publisher-loc>Berlin Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>, <fpage>69</fpage>&#x2013;<lpage>84</lpage>. </citation>
</ref>
<ref id="B36">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Abu-Dakka</surname>
<given-names>F. J.</given-names>
</name>
<name>
<surname>Ridge</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>J&#xf8;rgensen</surname>
<given-names>J.&#x20;A.</given-names>
</name>
<name>
<surname>Savarimuthu</surname>
<given-names>T. R.</given-names>
</name>
<etal/>
</person-group> (<year>2013</year>). &#x201c;<article-title>Transfer of Assembly Operations to New Workpiece Poses by Adaptation to the Desired Force Profile</article-title>,&#x201d; in <conf-name>2013 16th International Conference on Advanced Robotics (ICAR)</conf-name>, <conf-loc>Montevideo, Uruguay</conf-loc>, <conf-date>November 2013</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>1</fpage>&#x2013;<lpage>7</lpage>. <pub-id pub-id-type="doi">10.1109/icar.2013.6766568</pub-id> </citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Likar</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Gams</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2018a</year>). <article-title>Human Robot Cooperation with Compliance Adaptation along the Motion Trajectory</article-title>. <source>Auton. Robot</source> <volume>42</volume>, <fpage>1023</fpage>&#x2013;<lpage>1035</lpage>. <pub-id pub-id-type="doi">10.1007/s10514-017-9676-3</pub-id> </citation>
</ref>
<ref id="B38">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>&#x17d;lajpah</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>&#x160;lajpa</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Pi&#x161;kur</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2018b</year>). &#x201c;<article-title>An Efficient Pbd Framework for Fast Deployment of Bi-manual Assembly Tasks</article-title>,&#x201d; in <conf-name>2018 IEEE-RAS 18th International Conference on Humanoid Robots (Humanoids)</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>166</fpage>&#x2013;<lpage>173</lpage>. <pub-id pub-id-type="doi">10.1109/humanoids.2018.8625010</pub-id> </citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ortenzi</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Stolkin</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Kuo</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Mistry</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Hybrid Motion/force Control: a Review</article-title>. <source>Adv. Robotics</source> <volume>31</volume>, <fpage>1102</fpage>&#x2013;<lpage>1113</lpage>. <pub-id pub-id-type="doi">10.1080/01691864.2017.1364168</pub-id> </citation>
</ref>
<ref id="B40">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pagano</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Russo</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Savino</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>A Vision Guided Robotic System for Flexible Gluing Process in the Footwear Industry</article-title>. <source>Robotics and Computer-Integrated Manufacturing</source> <volume>65</volume>, <fpage>101965</fpage>. <pub-id pub-id-type="doi">10.1016/j.rcim.2020.101965</pub-id> </citation>
</ref>
<ref id="B41">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Pastor</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Righetti</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Kalakrishnan</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Schaal</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2011</year>). &#x201c;<article-title>Online Movement Adaptation Based on Previous Sensor Experiences</article-title>,&#x201d; in <conf-name>IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>San Francisco</conf-loc>, <conf-date>September 2011</conf-date> (<publisher-loc>San Francisco</publisher-loc>), <fpage>365</fpage>&#x2013;<lpage>371</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2011.6095059</pub-id> </citation>
</ref>
<ref id="B42">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>P&#xe9;rez-Ubeda</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Zotovic-Stanisic</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Guti&#xe9;rrez</surname>
<given-names>S. C.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Force Control Improvement in Collaborative Robots through Theory Analysis and Experimental Endorsement</article-title>. <source>Appl. Sci.</source> <volume>10</volume>, <fpage>4329</fpage>. <pub-id pub-id-type="doi">10.3390/app10124329</pub-id> </citation>
</ref>
<ref id="B43">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Peternel</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Rozo</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Caldwell</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Ajoudani</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>A Method for Derivation of Robot Task-Frame Control Authority from Repeated Sensory Observations</article-title>. <source>IEEE Robot. Autom. Lett.</source> <volume>2</volume>, <fpage>719</fpage>&#x2013;<lpage>726</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2017.2651368</pub-id> </citation>
</ref>
<ref id="B44">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Polverini</surname>
<given-names>M. P.</given-names>
</name>
<name>
<surname>Nicolis</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Zanchettin</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Rocco</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>Robust Set Invariance for Implicit Robot Force Control in Presence of Contact Model Uncertainty</article-title>,&#x201d; in <conf-name>2017 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name>, <conf-loc>Vancouver, Canada</conf-loc>, <conf-date>September 2017</conf-date>, <fpage>6393</fpage>&#x2013;<lpage>6399</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2017.8206544</pub-id> </citation>
</ref>
<ref id="B45">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Raibert</surname>
<given-names>M. H.</given-names>
</name>
<name>
<surname>Craig</surname>
<given-names>J.&#x20;J.</given-names>
</name>
</person-group> (<year>1981</year>). <article-title>Hybrid Position/force Control of Manipulators</article-title>. <source>J. Dyn. Syst. Measur. Control Trans. ASME</source> <volume>103</volume>, <fpage>126</fpage>&#x2013;<lpage>133</lpage>. <pub-id pub-id-type="doi">10.1115/1.3139652</pub-id> </citation>
</ref>
<ref id="B46">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rozo</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Jim&#xe9;nez</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Torras</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>A Robot Learning from Demonstration Framework to Perform Force-Based Manipulation Tasks</article-title>. <source>Intel Serv. Robotics</source> <volume>6</volume>, <fpage>33</fpage>&#x2013;<lpage>51</lpage>. <pub-id pub-id-type="doi">10.1007/s11370-012-0128-9</pub-id> </citation>
</ref>
<ref id="B47">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Santos</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Cortes&#xe3;o</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Perceived Stiffness Estimation for Robot Force Control</article-title>,&#x201d; in <conf-name>2018 IEEE International Conference on Robotics and Automation (ICRA)</conf-name>, <conf-loc>Brisbane, Australia</conf-loc>, <conf-date>May 2018</conf-date>, <fpage>1667</fpage>&#x2013;<lpage>1672</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2018.8460925</pub-id> </citation>
</ref>
<ref id="B48">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Schaal</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2006</year>). &#x201c;<article-title>Dynamic Movement Primitives-A Framework for Motor Control in Humans and Humanoid Robotics</article-title>,&#x201d; in <source>Adaptive Motion of Animals and Machines</source> (<publisher-loc>Tokyo</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>261</fpage>&#x2013;<lpage>280</lpage>. </citation>
</ref>
<ref id="B49">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Schindlbeck</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Haddadin</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Unified Passivity-Based Cartesian Force/impedance Control for Rigid and Flexible Joint Robots via Task-Energy Tanks</article-title>,&#x201d; in <conf-name>2015 IEEE international conference on robotics and automation (ICRA)</conf-name>, <conf-loc>Seattle</conf-loc>, <conf-date>May 2015</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>440</fpage>&#x2013;<lpage>447</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2015.7139036</pub-id> </citation>
</ref>
<ref id="B50">
<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>2009</year>). <source>Robotics - Modelling, Planning and Control</source>. <publisher-name>Springer</publisher-name>. </citation>
</ref>
<ref id="B51">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Sloth</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Iturrate</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Simultaneous Contact point and Surface normal Estimation during Soft finger Contact</article-title>,&#x201d; in <conf-name>Proceedings of the 20th International Conference on Advanced Robotics</conf-name>, <conf-loc>Ljubljana, Slovenia</conf-loc>, <conf-date>December 2021</conf-date>. </citation>
</ref>
<ref id="B52">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Stramigioli</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2001</year>). <source>Modeling and Ipc Control of Interactive Mechanical Systems&#x2014;A Coordinate-free Approach</source>. <publisher-loc>New York</publisher-loc>: <publisher-name>Springer-Verlag</publisher-name>. </citation>
</ref>
<ref id="B53">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Ude</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Nemec</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Petri&#x107;</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Morimoto</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Orientation in Cartesian Space Dynamic Movement Primitives</article-title>,&#x201d; in <conf-name>2014 IEEE International Conference on Robotics and Automation (ICRA)</conf-name>, <conf-loc>Hong Kong, China</conf-loc>, <conf-date>May 2014</conf-date> (<publisher-name>IEEE</publisher-name>), <fpage>2997</fpage>&#x2013;<lpage>3004</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2014.6907291</pub-id> </citation>
</ref>
<ref id="B54">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ureche</surname>
<given-names>A. L. P.</given-names>
</name>
<name>
<surname>Umezawa</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Nakamura</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Billard</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Task Parameterization Using Continuous Constraints Extracted from Human Demonstrations</article-title>. <source>IEEE Trans. Robot.</source> <volume>31</volume>, <fpage>1458</fpage>&#x2013;<lpage>1471</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2015.2495003</pub-id> </citation>
</ref>
<ref id="B55">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wang</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Gao</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Doyle</surname>
<given-names>F. J.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>Survey on Iterative Learning Control, Repetitive Control, and Run-To-Run Control</article-title>. <source>J.&#x20;Process Control.</source> <volume>19</volume>, <fpage>1589</fpage>&#x2013;<lpage>1600</lpage>. <pub-id pub-id-type="doi">10.1016/j.jprocont.2009.09.006</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>