<?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">749591</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2021.749591</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>A Semilinear Parameter-Varying Observer Method for Fabric-Reinforced Soft Robots</article-title>
<alt-title alt-title-type="left-running-head">Bui and Schultz</alt-title>
<alt-title alt-title-type="right-running-head">Observer for Soft Robots</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Bui</surname>
<given-names>Phuc D.H.</given-names>
</name>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1339006/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Schultz</surname>
<given-names>Joshua A.</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/387579/overview"/>
</contrib>
</contrib-group>
<aff>Department of Mechanical Engineering, The University of Tulsa, <addr-line>Tulsa</addr-line>, <addr-line>OK</addr-line>, <country>United&#x20;States</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/1201215/overview">Moritz B&#xe4;cher</ext-link>, Disney Research, United&#x20;States</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1325788/overview">Jakub Bernat</ext-link>, Pozna&#x144; University of Technology, Poland</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1114934/overview">Kristin M. De Payrebrune</ext-link>, University of Kaiserslautern, Germany</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Phuc D.H. Bui, <email>phuc-bui@utulsa.edu</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Soft Robotics, a section of the journal Frontiers in Robotics and&#x20;AI</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>03</day>
<month>11</month>
<year>2021</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>8</volume>
<elocation-id>749591</elocation-id>
<history>
<date date-type="received">
<day>29</day>
<month>07</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>21</day>
<month>09</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2021 Bui and Schultz.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Bui and Schultz</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 an observer architecture that can estimate a set of configuration space variables, their rates of change and contact forces of a fabric-reinforced inflatable soft robot. We discretized the continuum robot into a sequence of discs connected by inextensible threads; this allows great flexibility when describing the robot&#x2019;s behavior. At first, the system dynamics is described by a linear parameter-varying (LPV) model that includes a set of subsystems, each of which corresponds to a particular range of chamber pressure. A real-world challenge we confront is that the physical robot prototype exhibits a hysteresis loop whose directions depend on whether the chamber is inflating or deflating. In this paper we transform the hysteresis model to a semilinear model to avoid backward-in-time definitions, making it suitable for observer and controller design. The final model describing the soft robot, including the discretized continuum and hysteresis behavior, is called the semilinear parameter-varying (SPV) model. The semilinear parameter-varying observer architecture includes a set of sub-observers corresponding to the subsystems for each chamber pressure range in the SPV model. The proposed observer is evaluated through simulations and experiments. Simulation results show that the observer can estimate the configuration space variables and their rate of change with no steady-state error. In addition, experimental results display fast convergence of generalized contact force estimates and good tracking of the robot&#x2019;s configuration relative to ground-truth motion capture&#x20;data.</p>
</abstract>
<kwd-group>
<kwd>soft robotics</kwd>
<kwd>fabric-reinforced</kwd>
<kwd>inflatable</kwd>
<kwd>hysteresis</kwd>
<kwd>linear parameter-varying</kwd>
<kwd>observer design</kwd>
<kwd>contact force</kwd>
<kwd>sliding mode</kwd>
</kwd-group>
<contract-sponsor id="cn001">Division of Emerging Frontiers in Research and Innovation<named-content content-type="fundref-id">10.13039/100000150</named-content>
</contract-sponsor>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Soft robots are designed to safely interact with and adapt to their surrounding environment (<xref ref-type="bibr" rid="B8">Kim et&#x20;al., 2013</xref>). Their bodies are soft and deformable so that they can be compliant in narrow spaces or when they make contact with objects (<xref ref-type="bibr" rid="B2">Bauer et&#x20;al., 2014</xref>; <xref ref-type="bibr" rid="B14">Rus and Tolley, 2015</xref>). Hence, body deformation and contact forces are the main issues that a soft robot has to confront during operation. In order to complete a task, the controller of a soft robot needs to know the current states of the robot as well as the information about disturbances such as contact forces acting on the robot body. However, due to the continuously deformable nature of a soft robot, perceiving such information is still technically challenging (<xref ref-type="bibr" rid="B15">Santina et&#x20;al., 2020</xref>). Despite recent advances in soft sensor technologies, it&#x2019;s almost impossible to accurately measure those quantities by sensors integrated into the robot body. A good alternative is using an observer for state and generalized contact force estimation. There have been several authors working on the design of observers for soft robots. <xref ref-type="bibr" rid="B15">Santina et&#x20;al. (2020)</xref> designed an observer combined with machine learning to detect contacts on a soft robot. The work focuses on characterizing contact events on the soft robot when only knowledge of its posture and actuation are available. <xref ref-type="bibr" rid="B22">Zhang et&#x20;al. (2016)</xref> used finite elements to estimate the configuration matrices. The observer was based on the real-time finite element method (FEM) that combined feedback signals from the real robot and model information from the robot simulated by FEM. <xref ref-type="bibr" rid="B5">Gillespie et&#x20;al. (2016)</xref> used a Kalman filter to integrate accelerations and angular velocities for robot postures. <xref ref-type="bibr" rid="B1">Ataka et&#x20;al. (2016)</xref> used a multi-stage Extended Kalman Filter to estimate the soft robot poses. <xref ref-type="bibr" rid="B13">Rone and Ben-Tzvi (2013)</xref> estimated the robot states using the displacement of passive cables. <xref ref-type="bibr" rid="B17">Srivatsan et&#x20;al. (2014)</xref> used Lie algebra to estimate the shape of a medical snake robot. In general, due to the complication of the soft robots, a lot of efforts were made in the aforementioned works to estimate some states or to detect a contact event. However, there has been no model-based observer designed to estimate both soft robot state and contact forces. It is worth noting that designing observers for soft robots is a challenging task because they are highly nonlinear systems and modeling processes for them are complicated. Currently there are three predominant approaches to model a soft robot: Piece-wise Constant Curvature (PCC) (<xref ref-type="bibr" rid="B20">Webster and Jones, 2010</xref>), discrete Cosserat models (<xref ref-type="bibr" rid="B12">Renda et&#x20;al., 2018</xref>) and 3D Finite Element Models (<xref ref-type="bibr" rid="B4">Connolly et&#x20;al., 2015</xref>). The PCC model seems to be the simplest one among the three modeling approaches due to its simplifications and assumptions but even so, a model-based observer for a PCC soft robot is still very difficult to obtain.</p>
<p>In this paper, we introduce a new observer design for our recently developed fabric-reinforced inflatable soft robot &#x201c;Squishy&#x201d; <xref ref-type="bibr" rid="B21">Williamson et&#x20;al. (2021)</xref>. It is a model-based observer built around the new disc-thread model state parameterization <xref ref-type="bibr" rid="B16">Schultz et&#x20;al. (2020)</xref>. We use a third-order sliding mode approach, which is powerful and has high robustness, to design the observer so that it can estimate a large number of robot states and generalized contact forces. The state estimation uses position data from markers placed at several locations on the robot body. The estimator computes an estimated contact force by considering it to be a disturbance to the disc-thread model prediction. We will compare this to contact force measurements acquired experimentally using a force sensor. The advantage of the proposed observer over the existing ones is that it can estimate a large number of both the robot states and generalized contact forces. A preliminary version of this observer architecture appears in the proceedings of ICRA 2021 (<xref ref-type="bibr" rid="B3">Bui and Schultz, 2021</xref>), but this article includes additional details in the formulation of the observer, new runs of the simulation with a refinement to the model, and the experimental validation that did not appear in the conference paper. In addition, the discussion of the hysteresis behavior is new to this work. For the modeling part, this paper uses the recently developed disc-thread approach to model a fabric-reinforced inflatable soft robot. In the disc-thread modeling approach, the soft robot is discretized into <italic>N</italic> discs connected by <italic>N</italic>&#x20;&#x2212; 1 threads to represent a kinematic chain of rigid bodies, and the equations of motion are formulated using the Langrangian method. Since the modeling process produces ODEs in the manner of a traditional robot, the observer is model-based and has a closed form for the same class of robot models. In order to design a model-based observer, at first we developed a linear parameter-varying (LPV) system which is comprised of a set of linear systems, each corresponding to different working pressures, to represent the whole nonlinear soft robot. This LPV model is also suitable to design a model-based controller in the future.</p>
<p>This paper also discusses the hysteresis behavior of the soft robot. Like almost every other viscoelastic system, this silicone soft robot follows a different path when inflating than it does when deflating. This behavior is interesting but it increases the complexity in the modeling and control process of the robot because the controller must keep track of whether the robot is inflating or deflating. There have been only a few papers working on the hysteresis of soft robots such as the work of <xref ref-type="bibr" rid="B6">Ho&#x161;ovsk&#xfd; et&#x20;al. (2016)</xref> where hysteretic behavior of a two-DOF soft robotic arm is analyzed, or the work of <xref ref-type="bibr" rid="B19">Vo-Minh et&#x20;al. (2011)</xref> where the hysteresis is modeled using several Maxwell-slip elements each with different stiffness and saturation force. Our paper applies a modified generalized Duhem model to describe the hysteresis behavior of the robot. The advantage of this approach is that it avoids backward-in-time definitions, making it suitable for observer and controller design. We call the final system the semilinear parameter-varying (SPV) model, which is the proposed LPV system that accounts for the hysteresis behavior.</p>
<p>This article is structured as follows. In <xref ref-type="sec" rid="s2-1">Section 2.1</xref>, we introduce our soft robot and review the disc-thread model approach as well as the formulation of the equations of motion. The LPV system is addressed in <xref ref-type="sec" rid="s2-2">Section 2.2</xref>. <xref ref-type="sec" rid="s2-3">Section 2.3</xref> discusses the hysteresis loop behavior and the SPV model of the soft robot. <xref ref-type="sec" rid="s2-4">Section 2.4</xref> describes the observer design for the soft robot. The settings of simulations and experiments are described in <xref ref-type="sec" rid="s2-5">Section 2.5</xref>. <xref ref-type="sec" rid="s3">Section 3</xref> shows the simulation and experimental results of the observer. The conclusion is presented in <xref ref-type="sec" rid="s4">Section&#x20;4</xref>.</p>
</sec>
<sec id="s2">
<title>2 Materials and Methods</title>
<sec id="s2-1">
<title>2.1 The Fabric-Reinforced Inflatable Soft Robot and Disc-Thread Model</title>
<p>Our soft robot, &#x201c;Squishy&#x201d;, is an inflatable elastomeric chamber made of Smooth-On Dragon Skin 30 silicone that has a thin band of fabric embedded longitudinally to reinforce one side of the robot. The details of the manufacturing process and basic characteristics, such as the workspace volume and inflation-displacement behavior can be found in (<xref ref-type="bibr" rid="B21">Williamson et&#x20;al., 2021</xref>). The undeformed shape of the chamber and the fabric band are 2D circular arcs. The chamber is closed by two caps at either end. One of the two caps has an inlet so that compressed air can be pumped in. When inflated pneumatically, the unreinforced side can undergo large strains while the fabric side maintains a constant length. This causes the chamber to bend and twist. Because of the fabric&#x2019;s placement on the robot, its tip can trace 3D curves rather than just 2D curves as would a straight robot. <xref ref-type="fig" rid="F1">Figure&#x20;1</xref> shows the poses of the robot at some different working pressures.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>The poses of the fabric-reinforced inflatable soft robot at four different pressures, <bold>(A)</bold> At 1.5&#xa0;psi, <bold>(B)</bold> at 2.5&#xa0;psi, <bold>(C)</bold> at 3&#xa0;psi, <bold>(D)</bold> at 3.5&#xa0;psi [Reprinted from (<xref ref-type="bibr" rid="B3">Bui and Schultz, 2021</xref>) with permissions].</p>
</caption>
<graphic xlink:href="frobt-08-749591-g001.tif"/>
</fig>
<p>The higher the robot chamber pressure is, the more it expands and the more it bends down and twists. The entire length of the robot arm could be used to perform some tasks such as scraping or pushing against objects in its environment. The advantage of this soft robot is that it can perform some tasks in 3D space with only one actuator (which is the controlled compressed air <bold>P</bold>). It should not damage objects, nor itself in the case of collisions due to the soft body. When the robot is not in use, it can be deflated, rolled, and stored in a tiny box to save space. The robot can also be included as a single module within a larger system to perform more sophisticated&#x20;tasks.</p>
<p>To represent the motion of the robot, which is a continuum, using a finite set of variables, we use the Disc-thread model, which is briefly reviewed in this section. This was introduced in <xref ref-type="bibr" rid="B16">Schultz et&#x20;al. (2020)</xref>, and has the advantages of describing the bending and twisting of the soft robot in an easily customized fashion by a set of differential equations. In this approach, we discretize the chamber longitudinally into a sequence of <italic>N</italic> discs, each connected to its neighbors on either side by a single inextensible thread (representing the fabric reinforcement). Each disc is considered to be a rigid body and is constrained only by the thread. The frame assignments and their implications are illustrated in <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>. Each pose of the soft robot is derived from the relative position and orientation between pairs of adjacent discs. Each disc is parameterized by five generalized coordinates. The thread <italic>i</italic> is parameterized by two angles <italic>&#x3b1;</italic>
<sub>
<italic>i</italic>
</sub>, <italic>&#x3b2;</italic>
<sub>
<italic>i</italic>
</sub> &#x2208; [0; <italic>&#x3c0;</italic>]. The subsequent frames will involve a translation along the inextensible thread (of a fixed distance <italic>&#x2113;</italic>
<sub>
<italic>i</italic>
</sub>), together with three other rotations <italic>&#x3b3;</italic>
<sub>
<italic>i</italic>
</sub>, <italic>&#x3c8;</italic>
<sub>
<italic>i</italic>
</sub> and <italic>&#x3d5;</italic>
<sub>
<italic>i</italic>
</sub>, where the twisting of the robot is accounted by <italic>&#x3b3;</italic>
<sub>
<italic>i</italic>
</sub>. So by relying on these fictitious discs and threads as well as angles from <italic>&#x3b1;</italic>
<sub>1</sub> to <italic>&#x3d5;</italic>
<sub>5(<italic>N</italic>&#x2212;1)</sub>, this approach models the soft robot as a kinematic chain of rigid bodies. However, because the joints are not prismatic or revolute this model contains a higher number of variables than a traditional kinematic&#x20;chain.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Disc-thread model [Reprinted from (<xref ref-type="bibr" rid="B3">Bui and Schultz, 2021</xref>) with permissions].</p>
</caption>
<graphic xlink:href="frobt-08-749591-g002.tif"/>
</fig>
<p>With the kinematics of the soft robot fully defined by the disc-thread model, we formulate the Lagrangian and took its derivatives to find the equations of motion using the Euler-Lagrange formulation. The elasticity of the air is modeled by treating the air as an ideal gas, which exerts a normal force on the <italic>N</italic>th disc in the <italic>z</italic>
<sub>
<italic>N</italic>
</sub> direction. The elasticity of the walls is modeled by connecting springs from some origin on disk <italic>i</italic> to insertion on disk <italic>i</italic>&#x20;&#x2b; 1. The equations of motion has the familiar form:<disp-formula id="e1">
<mml:math id="m1">
<mml:mfrac>
<mml:mrow>
<mml:mi mathvariant="normal">d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold-italic">&#x3bb;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
</mml:math>
<label>(1)</label>
</disp-formula>where <inline-formula id="inf1">
<mml:math id="m2">
<mml:mi mathvariant="bold">q</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>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the configuration vector containing <italic>&#x3b1;</italic>
<sub>1</sub>&#x22ef;<italic>&#x3d5;</italic>
<sub>
<italic>N</italic>&#x2212;1</sub> variables, <inline-formula id="inf2">
<mml:math id="m3">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> is the partial derivative of the Lagrangian with respect to each generalized variable, <inline-formula id="inf3">
<mml:math id="m4">
<mml:mi mathvariant="bold">Q</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>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the generalized forces due to the internal pressure acting on the surface of the last disc, and <inline-formula id="inf4">
<mml:math id="m5">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">q</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>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the Jacobian of the Pfaffian constraints arranged so that it can be multiplied by the vector of Lagrange multipliers <inline-formula id="inf5">
<mml:math id="m6">
<mml:mi mathvariant="bold">&#x3bb;</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>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. In this work, we are trying to observe the robot configuration (and contact force, if applicable), whether the robot is in free space or in contact. In contact the product <inline-formula id="inf6">
<mml:math id="m7">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold-italic">&#x3bb;</mml:mi>
</mml:math>
</inline-formula> will be nonzero and we replace it by <bold>F</bold>
<sub>
<italic>c</italic>
</sub>, where &#x201c;<italic>c</italic>&#x201d; denotes the effects of the contact force on the robot&#x2019;s configuration space. This term will have the same units as the generalized force <bold>Q</bold>. By using the canonical momenta vector <inline-formula id="inf7">
<mml:math id="m8">
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="bold">M</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> with the mass matrix <inline-formula id="inf8">
<mml:math id="m9">
<mml:mi mathvariant="bold">M</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>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>5</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, we can rewrite the above equation of motion in the state space form as:<disp-formula id="e2">
<mml:math id="m10">
<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 mathvariant="bold">q</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 mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</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:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</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="bold">q</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="bold">p</mml:mi>
</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:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">Q</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(2)</label>
</disp-formula>
</p>
</sec>
<sec id="s2-2">
<title>2.2 Linear Parameter-Varying Modeling of the Soft Robot</title>
<p>The inflatable soft robot described in <xref ref-type="sec" rid="s2-1">Section 2.1</xref> will operate at a range of pressures. Because the analytical expressions of <bold>M</bold>, <inline-formula id="inf9">
<mml:math id="m11">
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:math>
</inline-formula> and <bold>Q</bold> are functions of generalized coordinate <bold>q</bold> and the input pressure <bold>P</bold>, the equations of motion of the soft robot are not constant but change corresponding to each pressure (operating point). Note that the expressions of these matrices are complicated because they include partial derivatives of expressions of many variables and they are varying nonlinearly with pressure. Therefore, if we evaluate <bold>M</bold>, <inline-formula id="inf10">
<mml:math id="m12">
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:math>
</inline-formula> and <bold>Q</bold> at a particular pressure and obtain the numerical values at that operating point, we can retrieve an affine linear-time-invariant state space that represents the soft robot nearby that operating point. In order to describe the robot throughout its entire range of motion, we divide the entire system into <italic>K</italic> subsystems fixed to a sequence of operating points, by evaluating the constituent matrices at corresponding pressures. This action forms a switched LPV (linear parameter-varying) system. Note that input pressure is chosen as the switching condition because it is the only input that changes the robot configuration. It is also measured easily and we don&#x2019;t have to know the robot pose explicitly to select the correct operating points. The LPV system consists of a set of linear systems whose state-space operational modes are driven by an underlying decision process based on the current input pressure. The LPV system is expressed as the linear state space system:<disp-formula id="e3">
<mml:math id="m13">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</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>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mi>u</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 mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</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:mtr>
</mml:mtable>
</mml:math>
<label>(3)</label>
</disp-formula>where <inline-formula id="inf11">
<mml:math id="m14">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, the output <inline-formula id="inf12">
<mml:math id="m15">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> consists of position measurements from motion capture markers attached to the body of the robot. The output is related to the states by <inline-formula id="inf13">
<mml:math id="m16">
<mml:mi>C</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.3333em"/>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> which results from the linearization of the nonlinear functions mapping the measured data to the world frame. The switching rule <italic>v</italic>(<italic>u</italic>) &#x2208; <italic>S</italic>
<sup>
<italic>K</italic>
</sup> <italic>&#x2250;</italic>{1, 2, &#x2026;<italic>K</italic>} depends on input pressure <bold>P</bold>. For each <italic>j</italic>&#x20;&#x2208; <italic>S</italic>
<sup>
<italic>K</italic>
</sup>, the subsystem matrices <italic>A</italic>
<sub>
<italic>j</italic>
</sub>, <italic>B</italic>
<sub>
<italic>j</italic>
</sub> and &#x398;<sub>
<italic>j</italic>
</sub> are evaluated at the <bold>q</bold> corresponding the pose at the pressure <bold>P</bold>
<sub>
<italic>j</italic>
</sub>, resulting in constant matrices and have the forms:<disp-formula id="e4">
<mml:math id="m17">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(4)</label>
</disp-formula>The number of operating points and their distribution are carefully selected so that the switched LPV system can adequately represent the whole continuous system. The system is considered under the following Assumption.</p>
<p>Assumption 1 The generalized contact forces in <xref ref-type="disp-formula" rid="e4">Eq. 4</xref> satisfy the following conditions: <bold>F</bold>
<sub>
<italic>cj</italic>
</sub> has a derivative and both are upper bounded as &#x2016;<bold>F</bold>
<sub>
<italic>cj</italic>
</sub>&#x2016; &#x2264; <italic>L</italic>
<sub>
<italic>j</italic>
</sub>, <inline-formula id="inf14">
<mml:math id="m18">
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="s2-3">
<title>2.3 Hysteresis Loop and Semilinear Parameter-Varying Model of the Soft Robot</title>
<p>Before continuing with the discussion of the observer we discuss the hysteresis behavior of the soft robot. Hysteresis is defined as a &#x201c;special type of memory-based relation between the input and the output&#x201d; (<xref ref-type="bibr" rid="B11">Macki et&#x20;al., 1993</xref>) or &#x201c;rate-independent memory effect&#x201d; (<xref ref-type="bibr" rid="B18">Visintin, 1994</xref>). Although there have been variations of the definition, hysteresis is generally used to describe a dynamical system with a phase lag that depends on the input. Hysteresis systems can be found in different areas such as physics, chemistry, engineering or economics. For our robot, we conducted experiments and observed that since our robot is made of silicone and is stretchable, its behavior is described as a hysteresis loop where the body of the robot follows different curves depending on the changing direction of the input pressure. Specifically, by using the motion tracking system to inspect the tip position in the <italic>Y</italic> direction of the robot, we could see that the tip followed the red curve while the chamber was inflating and followed the blue curve while the chamber was deflating, as shown in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>. Note that the curves are generated by polynomial regressions using data (the discrete points) collected from the motion tracking system. It can be seen that the deflating curve has a higher slope than that of the inflating curve. In other words, when deflating, the robot can reach a desired position faster than when it is inflating. This behavior of the inflatable robot is interesting but it increases the complexity in the system observation and control design.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>The hysteresis loop describing the translation of the tip of the soft robot in <italic>Y</italic> direction.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g003.tif"/>
</fig>
<p>Since the system configuration depends on the direction of the input pressure, from the idea of an LPV system in <xref ref-type="disp-formula" rid="e3">Eq. 3</xref>, we can express it as a generalized Duhem model as follows (<xref ref-type="bibr" rid="B18">Visintin, 1994</xref>):<disp-formula id="e5">
<mml:math id="m19">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
<mml:mi>u</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 mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</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:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</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:mtr>
</mml:mtable>
</mml:math>
<label>(5)</label>
</disp-formula>where<disp-formula id="e6">
<mml:math id="m20">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>g</mml:mi>
<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:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mi>w</mml:mi>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:mi>w</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mi>w</mml:mi>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:mi>w</mml:mi>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(6)</label>
</disp-formula>where <italic>h</italic>
<sup>&#x2b;</sup> and <italic>h</italic>
<sup>&#x2212;</sup> are different functions corresponding to the direction of the input signal.</p>
<p>More specifically, this hysteretic system can be writen as an SPV system as:<disp-formula id="e7">
<mml:math id="m21">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</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>&#x225c;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi>u</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:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi>u</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:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</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>&#x225c;</mml:mo>
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</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:mtr>
</mml:mtable>
</mml:math>
<label>(7)</label>
</disp-formula>This SPV system contains twice the number of subsystems in <xref ref-type="disp-formula" rid="e3">Eq. 3</xref>, including a half subsystem to describe the LPV system while the robot is inflating and the other half to represent the system in the deflating direction of the input. The switching action takes place when the control input changes its direction.</p>
<p>In the current formulation, we have to do backward-in-time identification for the hysteresis curve and the input pressure, which are not suitable when designing conventional observers and controllers. To avoid such kind of identification and checking the derivative of the input, we applied a transformation by introducing a monotonically increasing independent variable, <inline-formula id="inf15">
<mml:math id="m22">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The transformation is inspired by the work of <xref ref-type="bibr" rid="B7">Oh and Bernstein (2005)</xref>. This helps us to rewrite the model as a new semilinear Duhem model as follows:<disp-formula id="e8">
<mml:math id="m23">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x398;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="bold">y</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(8)</label>
</disp-formula>where<disp-formula id="e9">
<mml:math id="m24">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mspace width="1em"/>
<mml:mtext>if</mml:mtext>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mspace width="1em"/>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(9)</label>
</disp-formula>The new hysteresis curves describing the tip of the robot are displayed in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref> where the inflation curve is the red line and the deflation curve is the blue line. Compared to the version in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>, the deflating curve is now flipped over so that the two curves form a continuous function with respect to the new monotonically increasing input <inline-formula id="inf16">
<mml:math id="m25">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. A system identification process has been performed to define each matrix in the SPV system in <xref ref-type="disp-formula" rid="e8">Eq. 8</xref> at each working point to complete all of its subsystems. Then the SPV model can be used for observer and controller design.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>The new hysteresis curves describing the translation of the tip of the soft robot in <italic>Y</italic> direction with respect to <inline-formula id="inf17">
<mml:math id="m26">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>
</p>
</caption>
<graphic xlink:href="frobt-08-749591-g004.tif"/>
</fig>
</sec>
<sec id="s2-4">
<title>2.4 Observer Design for the Soft Robot</title>
<p>Due to the deformable body of the soft robot, the numerical values of <bold>q</bold>, <bold>p</bold> and <bold>F</bold>
<sub>
<italic>c</italic>
</sub> in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref> can not be obtained directly from measurements from the sensors we are using. The model of the soft robot in this study includes a large number of state variables, and we need an observer to estimate both states and contact forces. For these reasons, we selected the high-order sliding mode observer, because it has a simple rule to select the observer gains, no matter the size of the state space in observation; and based on our knowledge, it is the best observer that works well for both states and disturbance observation. The other alternatives are more challenging to be applied to our system. The following Lemma is re-stated to summarize the result of finite-time stability of the dynamical system in the study of Levant and Livne (<xref ref-type="bibr" rid="B9">Levant, 2003</xref>), which is applied to develop the observer:</p>
<p>Lemma 1 Consider the following system:<disp-formula id="e10">
<mml:math id="m27">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</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>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</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>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>/</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</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>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</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>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</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>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mi>f</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(10)</label>
</disp-formula>
<italic>where</italic> <italic>n</italic> <italic>is the relative degree,</italic> <italic>&#x25b;</italic>
<sub>0</sub>, &#x2026;, <italic>&#x25b;</italic>
<sub>
<italic>n</italic>
</sub> <italic>are the state variables,</italic> <italic>&#x3bb;</italic>
<sub>0</sub>, &#x2026;, <italic>&#x3bb;</italic>
<sub>
<italic>n</italic>
</sub> <italic>and</italic> <italic>&#x3b7;</italic>
<sub>0</sub>, &#x2026;, <italic>&#x3b7;</italic>
<sub>
<italic>n</italic>
</sub> <italic>are appropriate positive scalar constants and the perturbation</italic> <italic>f</italic>(<italic>t</italic>) <italic>satisfies the condition</italic> &#x7c;<italic>f</italic>(<italic>t</italic>)&#x7c; &#x2264; <italic>L</italic>
<sub>0</sub> <italic>with</italic> <italic>L</italic>
<sub>0</sub> <italic>a proper positive constant. Then the system converges to the origin in finite&#x20;time.</italic>
</p>
<p>Given position data from the marker set, we built a set of observers based on the third order sliding mode approach of <xref ref-type="bibr" rid="B9">Levant (2003)</xref>, which has fast convergence and high robustness. The number of observers is the same as the number of subsystems in <xref ref-type="disp-formula" rid="e8">Eq. 8</xref> The observer for subsystem <italic>j</italic> is of the form: <disp-formula id="e11">
<mml:math id="m28">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</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:mo>/</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>2</mml:mn>
<mml:mi>j</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>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</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:mi>j</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>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(11)</label>
</disp-formula>where <inline-formula id="inf18">
<mml:math id="m29">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, <inline-formula id="inf19">
<mml:math id="m30">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> are vectors of estimated states, <italic>k</italic>
<sub>1<italic>j</italic>
</sub> to <italic>k</italic>
<sub>6<italic>j</italic>
</sub> are the observer gains to be designed and <inline-formula id="inf20">
<mml:math id="m31">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the vector of estimated generalized contact forces. Note that <bold>x</bold>
<sub>1<italic>j</italic>
</sub> can be obtained from the multiplication of the inverse of <italic>C</italic>
<sub>1</sub> and <bold>y</bold>. Since we have more outputs than the number of states (one marker provides three outputs including the 3D coordinate of that marker in <italic>X</italic>, <italic>Y</italic>, <italic>Z</italic> direction), we can form a non-singular square matrix <italic>C</italic>
<sub>1</sub> so that it is invertible.</p>
<p>
<bold>Theorem</bold> 1 For system <xref ref-type="disp-formula" rid="e8">Eq. 8</xref>, if the observer set is designed as in <xref ref-type="disp-formula" rid="e11">Eq. 11</xref> and the observer gains are selected properly, then the estimated states and contact forces will converge to the true values in finite time, which follows from Lemma 1 (<xref ref-type="bibr" rid="B9">Levant, 2003</xref>).</p>
<p>Proof. The estimation error variables are defined by the following formulation:<disp-formula id="e12">
<mml:math id="m32">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="bold">M</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(12)</label>
</disp-formula>the dynamics of the estimation errors are then obtained as:<disp-formula id="e13">
<mml:math id="m33">
<mml:mtable class="aligned">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mfenced open="(" close="">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</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:mo>/</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</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>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>j</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:mo>/</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</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:mn>1</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mfenced open="(" close="">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</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:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>j</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>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</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:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
<mml:mi>j</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:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mi>j</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>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mi mathvariant="normal">n</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:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3f5;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">F</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(13)</label>
</disp-formula>If the conditions in Assumption 1 are satisfied, it follows from Lemma 1 that system <xref ref-type="disp-formula" rid="e13">Eq. 13</xref> is finite-time stable, which implies that the estimation variables converge to true variables in finite time. According to the rule recommended by <xref ref-type="bibr" rid="B10">Levant (2005)</xref>, the convergence can be guaranteed by defining the gains as <italic>k</italic>
<sub>1<italic>j</italic>
</sub> &#x2265; 3, <italic>k</italic>
<sub>3<italic>j</italic>
</sub> &#x2265; 1.5, <italic>k</italic>
<sub>5<italic>j</italic>
</sub> &#x2265; 1.1 for this third-order system. Note that the larger the gains, the faster the convergence and the higher sensitivity to input noises and the sampling step. <italic>k</italic>
<sub>2<italic>j</italic>
</sub>, <italic>k</italic>
<sub>4<italic>j</italic>
</sub>, <italic>k</italic>
<sub>6<italic>j</italic>
</sub> can be selected through trials in the simulation.</p>
<p>The block diagram in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref> summarizes the design process for the robot systems and the observer. The observer block stands for the sub-observer <italic>j</italic> serving the corresponding subsystem <italic>j</italic> working at a certain pressure&#x20;value.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Block diagram of the observer.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g005.tif"/>
</fig>
</sec>
<sec id="s2-5">
<title>2.5 Simulation and Experimental Validation</title>
<p>The soft robot and position of the fabric can be seen in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref> with the detailed dimensions (in mm) of the undeformed shape are given in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>. To apply the Disc-Thread modeling into the simulations and experiments, our soft robot is discretized into four discs and three threads. The first and last discs are at the base and the tip of the robot, correspondingly. The second disc is considered to go through two points <italic>O</italic>
<sub>2</sub> and <inline-formula id="inf21">
<mml:math id="m34">
<mml:msubsup>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and the third disc is consider to go through <italic>O</italic>
<sub>3</sub> and <inline-formula id="inf22">
<mml:math id="m35">
<mml:msubsup>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> (see <xref ref-type="fig" rid="F7">Figure&#x20;7</xref>). The thread lengths are set at <italic>&#x2113;</italic>
<sub>1</sub> &#x3d; 7&#xa0;cm, <italic>&#x2113;</italic>
<sub>2</sub> &#x3d; 9&#xa0;cm and <italic>&#x2113;</italic>
<sub>3</sub> &#x3d; 7&#xa0;cm. Note that the robot can be modeled with a higher number of discs but it will result in longer expressions without much improvement in model accuracy. For a robot of this size and aspect ratio, this four-disc model can adequately describe its behavior. We selected four operating points at different increasing pressures at (1.5, 2.5, 3, 3.5) psi (see <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>) and evaluate <bold>M</bold>, <inline-formula id="inf23">
<mml:math id="m36">
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="script">L</mml:mi>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:math>
</inline-formula> and <bold>Q</bold> at these points to generate four corresponding subsystems that represent the entire working range of the soft robot during its inflation. The set of these matrices are provided in the supplemental data. Note that these four subsystems are the same for the LPV system and the inflating branch of the SPV system. Considering that working with the whole SPV system is too long for this paper, and it does not improve the illustration of the observer performance, we only use the inflating branch of the SPV system for our simulation and experiment. A set of sub-observers is designed using the form of <xref ref-type="disp-formula" rid="e11">Eq. 11</xref>. The observer gains are chosen as <italic>k</italic>
<sub>1</sub> &#x3d; 3, <italic>k</italic>
<sub>2</sub> &#x3d; 4, <italic>k</italic>
<sub>3</sub> &#x3d; 1.5, <italic>k</italic>
<sub>4</sub> &#x3d; 3, <italic>k</italic>
<sub>5</sub> &#x3d; 1.1, <italic>k</italic>
<sub>6</sub> &#x3d; 2 for all sub-observers. The disturbance is assumed to be bounded by <italic>L</italic>&#x20;&#x3d; 20. At the run-time of the robot, when a new subsystem is switched on due to the changing pressure, the new corresponding sub-observer with updated system matrices is switched on as well. The switching rule is illustrated in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>Soft robot dimension.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g006.tif"/>
</fig>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>The contact case at disc three for contact forces measurement and 7 markers for the robot poses tracking.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g007.tif"/>
</fig>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Switching&#x20;rule.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g008.tif"/>
</fig>
<p>The proposed observer was validated by simulations and experiments. The simulations were performed in Matlab Simulink using S-functions for the dynamics of the plant and observer. The experiments were conducted in our laboratory environment. They are described in detail as follows:<list list-type="simple">
<list-item>
<p>Simulation 1: We examined the ability of the observer to estimate the space variables <italic>q</italic>
<sub>
<italic>i</italic>
</sub> at four operating points during quasistatic motion in free space for the whole continuous system.</p>
</list-item>
<list-item>
<p>Simulation 2: We assumed that the soft robot is undergoing a motion in free space going through all four operating points with a constant angular acceleration to check the estimation of the rates of changes of each&#x20;<italic>q</italic>
<sub>
<italic>i</italic>
</sub>.</p>
</list-item>
</list>
</p>
<p>Experiment 1: We conducted this experiment to gather data from a real contact event between the soft robot and its surrounding environment. The data will be used to validate the observer performance after it estimates the generalized contact force. In order to measure the real contact forces, we built a system that includes a load cell connected to an acrylic plate on one end and connected to a frame on the other (see <xref ref-type="fig" rid="F7">Figure&#x20;7</xref>). The load cell is an Interface 6A27 which can measure forces simultaneously in three mutually perpendicular axes and three simultaneous torques about those same axes. Initially, the robot was kept in a stable position and the plate was located at 3.38&#xa0;cm above the robot. We inflated and deflated the robot with the input pressure history shown in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>. We observed that at first the robot raised its head and then bent down and twisted (as can be seen in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>) when inflated, and returned to its original pose when deflated. The input pressure and the initial gap between the plate and the robot were chosen so that the robot was in contact with the plate surface at the location corresponding to disc three when the chamber pressure was in the range [1.5&#x2013;3.3] psi. During the contact event, the contact forces in each direction were recorded by the load cell. Then a set of 15 generalized contact forces (which have units of torque) were calculated using <inline-formula id="inf24">
<mml:math id="m37">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi>F</mml:mi>
</mml:math>
</inline-formula> (where <italic>F</italic> is the three components of the contact forces measured by the load cell and <italic>J</italic>
<sub>
<italic>bc</italic>
</sub> is the relative Jacobian between the base and the contact point). These values were the ground-truth generalized contact forces. To simulate the observer estimating generalized contact forces, the measured forces were considered as disturbances to the robot model. When we ran the Simulink model of the plant and the observer, the observer could detect the disturbances (generalized contact forces) and produced the close estimates of these same measured forces.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Input pressure for the experiment to estimate contact forces and the robot&#x20;poses.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g009.tif"/>
</fig>
<p>Experiment 2: In this experiment, the robot was moving in free space without any contact with the environment. We inflated and deflated the robot with the same input pressure history shown in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>. Since the disc-thread model represents a discretization of a continuum soft robot, the discs themselves are fictitious and do not exist in the physical system. Thus, there is no ground-truth value against which to directly compare the state estimates (<italic>&#x3b1;</italic>
<sub>1</sub> to <italic>&#x3d5;</italic>
<sub>3</sub>). However, we can compute what the marker locations <italic>should</italic> be based on the estimated states and compare them to the measured marker locations. The poses assumed by the robot during its movement were recorded by seven markers of the Polhemus electromagnetic motion tracking system. The 3D location of the markers on the body of the robot are considered to be the measured output of this robot system. We then feed the data measured from the markers into the observer into the Simulink model to estimate the soft robot&#x20;poses.</p>
</sec>
</sec>
<sec id="s3">
<title>3 Results</title>
<p>Simulation 1: The simulation occurred over 4&#xa0;s and is shown in <xref ref-type="fig" rid="F10">Figure&#x20;10</xref>. From the initial time, after each second, the system switched to a new subsystem which is illustrated by a different shading from the light to the darker gray with the darker segments corresponding to a higher pressure. There will be, in total, 15 generalized coordinates to track but due to space considerations, only the estimates of a few representative variables are shown. We can see that from their initial values at &#x2212;0.2 rad, the estimated variables returned by the observer quickly converge to the true states (from the simulation of the plant), in every subsystem.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Estimation of space variables, <bold>(A)</bold> <italic>q</italic>
<sub>1</sub>, <bold>(B)</bold> <italic>q</italic>
<sub>7</sub>, <bold>(C)</bold> <italic>q</italic>
<sub>9</sub>, <bold>(D)</bold> <italic>q</italic>
<sub>11</sub>, <bold>(E)</bold> <italic>q</italic>
<sub>13</sub>, <bold>(F)</bold> <italic>q</italic>
<sub>15</sub>.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g010.tif"/>
</fig>
<p>Simulation 2: The simulation also ran for 4&#xa0;s and is shown in <xref ref-type="fig" rid="F11">Figure&#x20;11</xref>. It can be observed that the estimates of the rates of changes of the space variables can quickly converge to the true values from their initial values at 5, and without steady-state errors. There are definitely some biases when switching between the subsystems but the steady estimates will be obtained within a short time after entering a new subsystem. Note that the convergence can be smoother at switching points if we linearize the robot by a higher number of subsystems (at more pressure points) but the resulting system will be more complex. In this case, the biases happen in a short time with low magnitudes so their effects are negligible.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Estimation of the rate of changes of space variables, <bold>(A)</bold> <italic>p</italic>
<sub>1</sub>, <bold>(B)</bold> <italic>p</italic>
<sub>7</sub>, <bold>(C)</bold> <italic>p</italic>
<sub>9</sub>, <bold>(D)</bold> <italic>p</italic>
<sub>11</sub>, <bold>(E)</bold> <italic>p</italic>
<sub>13</sub>, <bold>(F)</bold> <italic>p</italic>
<sub>15</sub>.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g011.tif"/>
</fig>
<p>Experiment 1: The result is shown in <xref ref-type="fig" rid="F12">Figure&#x20;12</xref> where the estimated generalized contact forces are red lines and the ground truth are blue lines. The initial values of estimated contact forces were set at &#x2212;0.5 Nm, while the initial values of the real generalized contact force were at 0 Nm (there is no contact at the initial time). It can be seen that the observer successfully estimates the generalized contact forces in this experiment with fast convergence. Note that since the contact was at disc 3, the generalized contact forces for all the discs being distal to disc three were zero. Therefore, the real and estimated forces for disc four converge to zero as shown in <xref ref-type="fig" rid="F12">Figure&#x20;12E</xref> and <xref ref-type="fig" rid="F12">Figure&#x20;12F</xref>. There is some chattering in the estimated forces but due to their low magnitudes, this can be ignored.</p>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Estimation of generalized contact force, <bold>(A)</bold> <italic>F</italic>
<sub>
<italic>c</italic>1</sub>, <bold>(B)</bold> <italic>F</italic>
<sub>
<italic>c</italic>3</sub>, <bold>(C)</bold> <italic>F</italic>
<sub>
<italic>c</italic>6</sub>, <bold>(D)</bold> <italic>F</italic>
<sub>
<italic>c</italic>8</sub>, <bold>(E)</bold> <italic>F</italic>
<sub>
<italic>c</italic>11</sub>, <bold>(F)</bold> <italic>F</italic>
<sub>
<italic>c</italic>13</sub>.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g012.tif"/>
</fig>
<p>Experiment 2: The robot pose is defined as the <italic>X</italic>, <italic>Y</italic>, <italic>Z</italic> coordinates of the seven points that coincide with the markers attached on the body of the robot. The 3D location of the markers are shown as blue lines in <xref ref-type="fig" rid="F13">Figure&#x20;13</xref> while their estimates (provided by the observer) are red lines. To save space, only the estimates of certain selected points (<inline-formula id="inf25">
<mml:math id="m38">
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>) are shown in this experiment. We can see that the poses of the soft robot, represented by marker coordinates are well estimated. The estimated coordinates quickly converge to the marker coordinates from their initial values at zero. This indicates that the estimated states of the real robot obtained by the observer are plausible and can be used for model-based control design and implementation.</p>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>Estimation of marker positions, <bold>(A)</bold> <italic>y</italic>
<sub>1</sub>, <bold>(B)</bold> <italic>y</italic>
<sub>6</sub>, <bold>(C)</bold> <italic>y</italic>
<sub>11</sub>, <bold>(D)</bold> <italic>y</italic>
<sub>13</sub>, <bold>(E)</bold> <italic>y</italic>
<sub>14</sub>, <bold>(F)</bold> <italic>y</italic>
<sub>15</sub>.</p>
</caption>
<graphic xlink:href="frobt-08-749591-g013.tif"/>
</fig>
</sec>
<sec id="s4">
<title>4 Conclusion</title>
<p>This paper introduces an observer method to estimate the generalized states and contact forces for a fabric-reinforced inflatable robot. The proposed observer is a switched linear observer and the switching condition only requires a simple measurement of the chamber pressure. It is based on the disc-thread discretization of the continuum soft robot. An SPV model is developed to equally describe the nonlinear and the hysteretic behavior of the robot. Simulations and experiments are performed to examine the performance of the observer. The results show that the observer works well in simulation by driving the estimated states to the true states in static poses and during movements. The results from the first experiment indicate that the proposed observer can precisely estimate the generalized contact forces during a contact event. The second experimental result shows that by closely estimating the true position of the markers, the observer successfully estimates the system states of the robot. This observer can serve to provide estimates of quantities that are very difficult to measure by sensors. In addition to providing a solution for soft robot perception, by applying this modeling approach and observer design, we may exploit well-developed model-based linear control theory for a class of inflatable soft robots. Although the control schemes for soft robots are not exactly like those for traditional robots, the ability to apply traditional control algorithms can provide stability guarantees and could save considerable effort in controller design. Our future work will develop another sensing approach that can replace the motion capture system and allows the observer to run in real-time.</p>
</sec>
</body>
<back>
<sec id="s5">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec id="s6">
<title>Author Contributions</title>
<p>In this work, PB proposed the research approach. The simulations and experiments were set up and done by PB. JS provided methodology and made important revisions to the paper. All the participants approved the final version of the paper to be submitted.</p>
</sec>
<sec id="s7">
<title>Funding</title>
<p>This work is supported by NSF grant No. 1935312 EFRI C3 SoRo: Between a Soft Robot and a Hard Place: Estimation and Control Algorithms that Exploit Soft Robots&#x2019; Unique Abilities.</p>
</sec>
<sec sec-type="COI-statement" id="s8">
<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="s9">
<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>
<ack>
<p>We thank Haley Sanders and Marc Killpack for their Python program to calculate numerical values of the subsystems&#x2019; components. We also thank John G. Williamson for his support in collecting the data from the experiments.</p>
</ack>
<sec id="s10">
<title>Supplementary Material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/frobt.2021.749591/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/frobt.2021.749591/full&#x23;supplementary-material</ext-link>
</p>
<supplementary-material xlink:href="DataSheet1.CSV" id="SM1" mimetype="application/CSV" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ataka</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Qi</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>ShivaI</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Shafti</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Wurdemann</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>H.</given-names>
</name>
<etal/>
</person-group> (<year>2016</year>). &#x201c;<article-title>Real-time Pose Estimation and Obstacle Avoidance for Multi-Segment Continuum Manipulator in Dynamic Environments</article-title>,&#x201d; in <conf-name>2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name> (<publisher-loc>Daejeon, Korea</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>2827</fpage>&#x2013;<lpage>2832</lpage>. </citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bauer</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Bauer-Gogonea</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Graz</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Kaltenbrunner</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Keplinger</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Schw&#xf6;diauer</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>25th Anniversary Article: A Soft Future: from Robots and Sensor Skin to Energy Harvesters</article-title>. <source>Adv. Mater.</source> <volume>26</volume>, <fpage>149</fpage>&#x2013;<lpage>161</lpage>. <pub-id pub-id-type="doi">10.1002/adma.201303349</pub-id> </citation>
</ref>
<ref id="B3">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Bui</surname>
<given-names>P. D. H.</given-names>
</name>
<name>
<surname>Schultz</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>States and Contact Forces Estimation for a Fabric-Reinforced Inflatable Soft Robot</article-title>,&#x201d; in <conf-name>IEEE-RAS International Conference on Robotics and Automation (Xi&#x2019;an, China)</conf-name>, <fpage>11820</fpage>&#x2013;<lpage>11826</lpage>. </citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Connolly</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Polygerinos</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Walsh</surname>
<given-names>C. J.</given-names>
</name>
<name>
<surname>Bertoldi</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Mechanical Programming of Soft Actuators by Varying Fiber Angle</article-title>. <source>Soft Robotics</source> <volume>2</volume>, <fpage>26</fpage>&#x2013;<lpage>32</lpage>. <pub-id pub-id-type="doi">10.1089/soro.2015.0001</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Gillespie</surname>
<given-names>M. T.</given-names>
</name>
<name>
<surname>Best</surname>
<given-names>C. M.</given-names>
</name>
<name>
<surname>Killpack</surname>
<given-names>M. D.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Simultaneous Position and Stiffness Control for an Inflatable Soft Robot</article-title>,&#x201d; in <conf-name>2016 IEEE International Conference on Robotics and Automation (ICRA)</conf-name> (<publisher-loc>Stockholm, Sweden</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1095</fpage>&#x2013;<lpage>1101</lpage>. </citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ho&#x161;ovsk&#xfd;</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pite&#x13e;</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Zidek</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Analysis of Hysteretic Behavior of Two-DOF Soft Robotic Arm</article-title>. <source>MM Sci. J.</source> <volume>03</volume>, <fpage>935</fpage>&#x2013;<lpage>941</lpage>. <pub-id pub-id-type="doi">10.17973/MMSJ.2016_09_201625</pub-id> </citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>JinHyoung Oh</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Bernstein</surname>
<given-names>D. S.</given-names>
</name>
</person-group> (<year>2005</year>). <article-title>Semilinear Duhem Model for Rate-independent and Rate-dependent Hysteresis</article-title>. <source>IEEE Trans. Automat. Contr.</source> <volume>50</volume> (<issue>5</issue>), <fpage>631</fpage>&#x2013;<lpage>645</lpage>. <pub-id pub-id-type="doi">10.1109/TAC.2005.847035</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kim</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Laschi</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Trimmer</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Soft Robotics: a Bioinspired Evolution in Robotics</article-title>. <source>Trends Biotechnol.</source> <volume>31</volume>, <fpage>287</fpage>&#x2013;<lpage>294</lpage>. <pub-id pub-id-type="doi">10.1016/j.tibtech.2013.03.002</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Levant</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2003</year>). <article-title>Higher Order Sliding Modes, Differentiation and Output-Feedback controlHigher Order Sliding Modes, Differentiation and Output-Feedback Control</article-title>. <source>Int. J.&#x20;Control.</source> <volume>76</volume>, <fpage>924</fpage>&#x2013;<lpage>941</lpage>. <pub-id pub-id-type="doi">10.1080/0020717031000099029</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Levant</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2005</year>). <article-title>Homogeneity Approach to High-Order Sliding Mode Design</article-title>. <source>Automatica</source> <volume>41</volume>, <fpage>823</fpage>&#x2013;<lpage>830</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2004.11.029</pub-id> </citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Macki</surname>
<given-names>J.&#x20;W.</given-names>
</name>
<name>
<surname>Nistri</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Zecca</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>1993</year>). <article-title>Mathematical Models for Hysteresis</article-title>. <source>SIAM Rev.</source> <volume>35</volume> (<issue>1</issue>), <fpage>94</fpage>&#x2013;<lpage>123</lpage>. <pub-id pub-id-type="doi">10.1137/1035005</pub-id> </citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Renda</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Boyer</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Dias</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Seneviratne</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Discrete Cosserat Approach for Multisection Soft Manipulator Dynamics</article-title>. <source>IEEE Trans. Robot.</source> <volume>34</volume> (<issue>6</issue>), <fpage>1518</fpage>&#x2013;<lpage>1533</lpage>. <pub-id pub-id-type="doi">10.1109/TRO.2018.2868815</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Rone</surname>
<given-names>W. S.</given-names>
</name>
<name>
<surname>Ben-Tzvi</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Multi-segment Continuum Robot Shape Estimation Using Passive cable Displacement</article-title>,&#x201d; in <conf-name>ROSE 2013 - IEEE International Symposium on Robotic and Sensors Environments</conf-name> (<publisher-loc>Washington, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>37</fpage>&#x2013;<lpage>42</lpage>. <pub-id pub-id-type="doi">10.1109/rose.2013.6698415</pub-id> </citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rus</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Tolley</surname>
<given-names>M. T.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Design, Fabrication and Control of Soft Robots</article-title>. <source>Nature</source> <volume>521</volume>, <fpage>467</fpage>&#x2013;<lpage>475</lpage>. <pub-id pub-id-type="doi">10.1038/nature14543</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Santina</surname>
<given-names>C. D.</given-names>
</name>
<name>
<surname>Truby</surname>
<given-names>R. L.</given-names>
</name>
<name>
<surname>Rus</surname>
<given-names>D.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Data-Driven Disturbance Observers for Estimating External Forces on Soft Robots</article-title>. <source>IEEE Robot. Autom. Lett.</source> <volume>5</volume>, <fpage>5717</fpage>&#x2013;<lpage>5724</lpage>. <pub-id pub-id-type="doi">10.1109/LRA.2020.3010738</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Schultz</surname>
<given-names>J.&#x20;A.</given-names>
</name>
<name>
<surname>Sanders</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Bui</surname>
<given-names>P. D. H.</given-names>
</name>
<name>
<surname>Keller</surname>
<given-names>M. W.</given-names>
</name>
<name>
<surname>Killpack</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Representing Fabric-Reinforced Inflatable Robots by Discs and Threads</article-title>,&#x201d; in <conf-name>International Mechatronics Conference and Workshops</conf-name> (<publisher-loc>Oklahoma City, USA</publisher-loc>: <publisher-name>Springer</publisher-name>). </citation>
</ref>
<ref id="B17">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Srivatsan</surname>
<given-names>R. A.</given-names>
</name>
<name>
<surname>Travers</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Choset</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Using Lie Algebra for Shape Estimation of Medical Snake Robots</article-title>,&#x201d; in <conf-name>2014 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2014)</conf-name> (<publisher-loc>Chicago, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>3483</fpage>&#x2013;<lpage>3488</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2014.6943048</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Visintin</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>1994</year>). <source>Differential Models of Hysteresis</source>. <publisher-loc>New York</publisher-loc>: <publisher-name>Springer-Verlag</publisher-name>. </citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vo-Minh</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Tjahjowidodo</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Ramon</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Van Brussel</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>A New Approach to Modeling Hysteresis in a Pneumatic Artificial Muscle Using the Maxwell-slip Model</article-title>. <source>Ieee/asme Trans. Mechatron.</source> <volume>16</volume> (<issue>1</issue>), <fpage>177</fpage>&#x2013;<lpage>186</lpage>. <pub-id pub-id-type="doi">10.1109/TMECH.2009.2038373</pub-id> </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Webster</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Jones</surname>
<given-names>B. A.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Design and Kinematic Modeling of Constant Curvature Continuum Robots: A Review</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>29</volume> (<issue>13</issue>), <fpage>1661</fpage>&#x2013;<lpage>1683</lpage>. <pub-id pub-id-type="doi">10.1177/0278364910368147</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Williamson</surname>
<given-names>J.&#x20;G.</given-names>
</name>
<name>
<surname>Schell</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Keller</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Schultz</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Extending the Reach of Single-Chamber Inflatable Soft Robots Using Magnetorheological Fluids</article-title>,&#x201d; in <conf-name>IEEE International Conference on Soft Robotics</conf-name> (<publisher-loc>New Haven, Connecticut</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>119</fpage>&#x2013;<lpage>125</lpage>. <pub-id pub-id-type="doi">10.1109/RoboSoft51838.2021.9479295</pub-id> </citation>
</ref>
<ref id="B22">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Dequidt</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Kruszewski</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Largilliere</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Duriez</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Kinematic Modeling and Observer Based Control of Soft Robot Using Real-Time Finite Element Method</article-title>,&#x201d; in <conf-name>2016 IEEE/RSJ International Conference on Intelligent Robots and Systems</conf-name> (<publisher-loc>Daejeon, Korea</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>5509</fpage>&#x2013;<lpage>5514</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2016.7759810</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>