<?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">1070627</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2023.1070627</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>Cable failure tolerant control and planning in a planar reconfigurable cable driven parallel robot</article-title>
<alt-title alt-title-type="left-running-head">Raman et&#xa0;al.</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/frobt.2023.1070627">10.3389/frobt.2023.1070627</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Raman</surname>
<given-names>Adhiti</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1887355/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Walker</surname>
<given-names>Ian</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/752024/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Krovi</surname>
<given-names>Venkat</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2095299/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Schmid</surname>
<given-names>Matthias</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/2153626/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>Clemson University</institution>, <institution>Automotive Engineering</institution>, <addr-line>Greenville</addr-line>, <addr-line>SC</addr-line>, <country>United States</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Clemson University</institution>, <institution>Electrical/Computer Engineering</institution>, <addr-line>Clemson</addr-line>, <addr-line>SC</addr-line>, <country>United 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/1785090/overview">S&#xe9;bastien Briot</ext-link>, UMR6004 Laboratoire des Sciences du Num&#xe9;rique &#xe0; Nantes (LS2N), France</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/2058527/overview">Edoardo Id&#xe0;</ext-link>, University of Bologna, Italy</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1724856/overview">Philippe Cardou</ext-link>, Laval University, Canada</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/2062380/overview">St&#xe9;phane Caro</ext-link>, UMR6004 Laboratoire des Sciences du Num&#xe9;rique &#xe0; Nantes (LS2N), France</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Adhiti Raman, <email>adhitir@clemson.edu</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>17</day>
<month>05</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>10</volume>
<elocation-id>1070627</elocation-id>
<history>
<date date-type="received">
<day>15</day>
<month>10</month>
<year>2022</year>
</date>
<date date-type="accepted">
<day>06</day>
<month>04</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2023 Raman, Walker, Krovi and Schmid.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Raman, Walker, Krovi and Schmid</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p>
</license>
</permissions>
<abstract>
<p>The addition of geometric reconfigurability in a cable driven parallel robot (CDPR) introduces kinematic redundancies which can be exploited for manipulating structural and mechanical properties of the robot through redundancy resolution. In the event of a cable failure, a reconfigurable CDPR (rCDPR) can also realign its geometric arrangement to overcome the effects of cable failure and recover the original expected trajectory and complete the trajectory tracking task. In this paper we discuss a fault tolerant control (FTC) framework that relies on an Interactive Multiple Model (IMM) adaptive estimation filter for simultaneous fault detection and diagnosis (FDD) and task recovery. The redundancy resolution scheme for the kinematically redundant CDPR takes into account singularity avoidance, manipulability and wrench quality maximization during trajectory tracking. We further introduce a trajectory tracking methodology that enables the automatic task recovery algorithm to consistently return to the point of failure. This is particularly useful for applications where the planned trajectory is of greater importance than the goal positions, such as painting, welding or 3D printing applications. The proposed control framework is validated in simulation on a planar rCDPR with elastic cables and parameter uncertainties to introduce modeled and unmodeled dynamics in the system as it tracks a complete trajectory despite the occurrence of multiple cable failures. As cables fail one by one, the robot topology changes from an over-constrained to a fully constrained and then an under-constrained CDPR. The framework is applied with a constant-velocity kinematic feedforward controller which has the advantage of generating steady-state inputs despite dynamic oscillations during cable failures, as well as a Linear Quadratic Regulator (LQR) feedback controller to locally dampen these oscillations.</p>
</abstract>
<kwd-group>
<kwd>Reconfigurable CDPR (Cable Driven Parallel Robot)</kwd>
<kwd>IMM (interacting multiple model) algorithm</kwd>
<kwd>LQR (linear quadratic regulator) control</kwd>
<kwd>FTC (fault tolerant control)</kwd>
<kwd>FDD (fault diagnosis and detection)</kwd>
<kwd>EKF (extended kalman filter)</kwd>
<kwd>redundancy resolution</kwd>
<kwd>switching control</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Soft Robotics</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Cable driven parallel robots (CDPRs) are lightweight mechanisms with favourable power-to-weight ratios. They can be designed and structured to be manipulable over large workspaces, which can prove useful in application domains such as painting, bricklaying, material hauling, warehousing and concrete 3D printing. Large workspace domains bring with them a set of challenges such as increased cable sag, unmodeled cable dynamics and the increased effects of environmental factors such as unmodeled vibrations and air resistance. Heavy and dynamically-changing payloads may also cause cables to experience high tensions while possibly exciting unmodeled dynamic effects, such as swinging payloads (if the system is under-constrained) or unexpected cable collisions with surrounding objects in the workspace. Here, the addition of geometric reconfigurability is able to offer the flexibility needed to overcome some of these challenges. Geometric reconfigurability in this context is the ability of a robot to change its configuration through kinematic redundancy which is introduced by actuating the cable attachment points on the base frame of the CDPR. This robot is known as a <italic>reconfigurable CDPR</italic> or <italic>rCDPR</italic> in this work. Although most CDPRs can be manually reconfigured to accommodate different workspace reachability requirements by changing their geometric attachment points (as designed in (<xref ref-type="bibr" rid="B11">Gagliardini&#xa0;et&#xa0;al., 2016</xref>)), automating this process for online reconfiguration provides unique advantages that are still only minimally explored. For example, the robot can not only move to new configurations or new locations in the workspace without manual intervention, but can also gain capabilities that would otherwise not be possible (<xref ref-type="bibr" rid="B30">Rasheed, 2019</xref>), such as changing the quality (or performance index) of the pose at the end-effector without effecting its position or orientation (<xref ref-type="bibr" rid="B39">Zhou&#xa0;et&#xa0;al., 2014</xref>; <xref ref-type="bibr" rid="B28">Raman&#xa0;et&#xa0;al., 2020</xref>). Online reconfigurability introduces the properties of kinematic redundancy (i.e. singularity avoidance, self-motion) to a naturally actuation redundant system (i.e. the kinematically controllable degrees-of-freedom at the end-effector of a CDPR is less than the number of cables that support it). In this work, we exploit geometric reconfigurability to introduce a new control strategy for fault tolerance against cable failures.</p>
<p>This research is motivated by the development of a cooperative robot (cobot) assisting in concrete delivery tasks such as concrete 3D printing or human-directed concrete application (<xref ref-type="fig" rid="F1">Figure&#xa0;1</xref>). The cobot is expected to consist of two subsystems: (i) a cable driven parallel manipulator that controls a payload over a large workspace (called the <italic>macro</italic>-manipulator); and (ii) a continuum robot enclosing a concrete delivery tube that provides finely directed control through congested spaces (called the <italic>micro</italic>-manipulator) (<xref ref-type="bibr" rid="B32">Srivastava&#xa0;et&#xa0;al., 2022</xref>).</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Micro &#x2b; macro manipulator concept drawing for concrete 3D printing.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g001.tif"/>
</fig>
<p>This work contributes to the development of the first subsystem by focusing on research questions involving the challenges posed by the addition of kinematic redundancies to conventional CDPRs (<xref ref-type="bibr" rid="B28">Raman&#xa0;et&#xa0;al., 2020</xref>; <xref ref-type="bibr" rid="B27">2021</xref>; <xref ref-type="bibr" rid="B36">Walker&#xa0;et&#xa0;al., 2022</xref>). Online geometric reconfiguration can recover the static workspace and mobility lost through cable failures while also optimizing the quality of that mobility to a feasible extent. The basic idea is pictorially demonstrated in <xref ref-type="fig" rid="F2">Figure&#xa0;2</xref>. This form of fault tolerant control (FTC) may be unique to the addition of kinematic reconfigurability in CDPRs.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Geometric reconfigurability allows the trajectory tracking to continue. <bold>(A)</bold> A cable fails. <bold>(B)</bold> However, sliders reconfigure to allow the trajectory tracking to continue.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g002.tif"/>
</fig>
<p>In our previous work (<xref ref-type="bibr" rid="B29">Raman&#xa0;et&#xa0;al., 2022</xref>) we demonstrated a proof-of-concept implementation of the automatic cable failure tolerant control framework that could simultaneously identify and overcome cable failures in an automatically without requiring an accessory diagnostic fault detection protocol. Failure identification, pose estimation, and cable failure tolerant control are accomplished simultaneously in this framework by relying on pose measurements from the end-effector alone. An interactive multiple model (IMM) adaptive estimation algorithm with a set of extended Kalman filters (EKFs), where each EKF corresponds to a different motion model, is applied to this measurement data and integrated into the control scheme which in turn provides input information from a set of controllers dependent on the different motion models of the failure modes.</p>
<p>In this research, we build upon that body of work by eliminating some design assumptions and increasing the uncertainties in model and noise measurements. The plant model is simulated to be as realistic as possible by incorporating disturbances, actuator dynamics and non-linearities arising from cable elasticity to demonstrate the real-world feasibility of the framework. In addition, we track complete trajectories despite cable failures by automatically returning to the point of failure to continue the task. The framework is updated to include two controllers (i) a feed-forward controller which has the advantage of input stability in the face of dynamic oscillations during cable failures and (ii) an LQR-based feedback controller stabilized around the desired joint inputs that is helpful in damping dynamic oscillations during a failure event and in recovering the trajectory quickly. The addition of the feedback controller eliminates the need for the resource-intensive feedforward kinematic controller to run at every timestep.</p>
</sec>
<sec id="s2">
<title>2 Related work</title>
<p>Fault tolerant control in robotics has a long history (<xref ref-type="bibr" rid="B35">Visinsky&#xa0;et&#xa0;al. (1994)</xref>). The use of kinematic redundancy to compensate for joint failures in serial robots is also well-established &#x2a;&#x2a;&#x2a;<xref ref-type="bibr" rid="B20">Maciejewski (1990)</xref>. Early studies accounting for cable failures in CDPRs (<xref ref-type="bibr" rid="B31">Roberts&#xa0;et&#xa0;al. (1998)</xref>) showed that static equilibrium can be maintained (upon failure) if the robot is aligned to specific singular configurations. <xref ref-type="bibr" rid="B4">Bosscher and Ebert-Uphoff (2004)</xref> noted two kinds of failure modes: cable breakage due to excessive positive cable tensions or slackness due to the lack of cable tension. These failure modes could be precluded by limiting the desired wrenches at the end-effector to lie within the available wrench set <xref ref-type="bibr" rid="B6">Bouchard&#xa0;et&#xa0;al. (2010)</xref>; <xref ref-type="bibr" rid="B22">Notash (2012)</xref> examined additional modes of cable failure such as stuck actuators (applying a passive restraint on the end-effector) or situations in which the actuator moves but the output is biased. However, these works are limited to kinematic models of CDPRs with ideal and inelastic cables. In a later work, <xref ref-type="bibr" rid="B8">Caro and Merlet (2020)</xref> outlined all possible dynamic failures for cable driven suspended robots and presented a practical passive solution to raise the end-effector load and ensure human safety in the event of cable failure. The authors noted the challenges of relying only on cable length measurements through the encoders or the loss of cable tensions to recognize that a cable failure has occurred. The authors instead recommended measuring the cable angles through IMUs affixed on the cables to detect a cable failure.</p>
<p>Outside of the context of cable failure, the challenges of relying on encoder and force measurements have been noted extensively in the context of CDPR control. <xref ref-type="bibr" rid="B19">Le&#xa0;Nguyen and Caverly (2021)</xref>; <xref ref-type="bibr" rid="B17">Korayem&#xa0;et&#xa0;al. (2018)</xref>; <xref ref-type="bibr" rid="B9">Caverly and Forbes (2016)</xref> addressed the futility of relying on forward kinematics from cable length measurements to determine end-effector pose, reasoning that encoder measurements do not necessarily correspond to the true cable length, which may be affected by unknown deformations and stiffnesses. To mitigate this issue, pose estimation techniques based on Extended (EKF) and Unscented (UKF) Kalman Filters applied on data from payload mounted IMUs were implemented. <xref ref-type="bibr" rid="B17">Korayem&#xa0;et&#xa0;al. (2018)</xref> further incorporated filtering with linearized feedback control for CDPRs, demonstrating that payload mounted IMUs can improve pose estimations in the presence of moderate-to-high dynamic effects.</p>
<p>Other literature on CDPR cable failures focused on dynamic failure recovery strategies or dynamic collision avoidance strategies. For instance, <xref ref-type="bibr" rid="B24">Passarini&#xa0;et&#xa0;al. (2019)</xref> studied emergency stop strategies for preventing collisions in cable suspended robots, whereas <xref ref-type="bibr" rid="B7">Boumann and Bruckmann (2022)</xref> focused on a force control strategy in the remaining cables of a cable-suspended robot to minimize the safety risk of dynamic effects during cable failures in the workspace. The authors assumed that the cable failures, when triggered, were always correctly identified and the proposed control framework was restricted to a post-failure setting.</p>
<p>Kinematic redundancies have also been shown to enable robust fault tolerant systems in parallel kinematic manipulators (PKMs). <xref ref-type="bibr" rid="B23">Notash (2011)</xref>, for instance, investigated the effect of joint failures on the motion of kinematically redundant PKMs by analyzing the behavior of the changed kinematic model and setting task priorities to recover complete or partial motion. However, literature on the use of such redundancies for fault tolerant control (FTC) in cable driven manipulators is non-existent.</p>
<p>In this work we have explored a popular approach to failure detection and diagnosis (FDD) that has been utilized abundantly in aerospace applications. This FDD technique employs Multi Model Adaptive Estimation (MMAE) through the use of a bank of filters, with each filter correlated to a possible failure mode that may occur. In this study, we utilize an Interactive MMAE or IMM for short. Within robotics, IMMs have been employed for tracking trajectories (<xref ref-type="bibr" rid="B21">Mazor&#xa0;et&#xa0;al. (1998)</xref>) and behaviour prediction (<xref ref-type="bibr" rid="B12">Gill&#xa0;et&#xa0;al. (2019)</xref>) as well as in actuator fault detection and identification (<xref ref-type="bibr" rid="B33">Tudoroiu and Khorasani (2005)</xref>). Many of these studies focus on FDD only and do not attempt to integrate controllers for task recovery. One of the few exceptions is the work of <xref ref-type="bibr" rid="B14">Hill&#xa0;et&#xa0;al. (2021)</xref>, where a non-linear Model Predictive Controller is applied to recover from reaction wheel failures that are identified through an UKF-based IMM for satellite maneuvering; an approach that is similar to our proposed strategy.</p>
<p>In this study, the cables are modeled as elastic springs. Furthermore, we assume that the employed dynamic models for control and estimation are imperfect and do not correspond perfectly to physical reality (e.g., through the inclusion of parametric uncertainties and process noise). We also assume that encoder readings do not correspond accurately to the true position of the end-effector and constitute an unreliable source of information; a reasonable assumption to make when accounting for elasticity in cables.</p>
<p>The inclusion of elastic behavior in the cables presents an additional control challenge. A feedforward controller that employs a simplified inelastic model does not account for this flexibility, causing the internal dynamics to present as undesired oscillations or vibrations at the end-effector. A feedback controller can be challenging to design when the local cable stiffness parameters (at time <italic>t</italic>
<sub>
<italic>k</italic>
</sub>) are unknown or uncertain and the mapping from input to end-effector state is highly non-linear. The challenges of dynamic feedback control in CDPRs are well studied in literature, but their application has largely been focused on systems with cables of high stiffness. Feedback linearization <xref ref-type="bibr" rid="B2">Begey&#xa0;et&#xa0;al. (2018)</xref>; <xref ref-type="bibr" rid="B25">Picard&#xa0;et&#xa0;al. (2020)</xref>, sliding mode, and <italic>H</italic>
<sub>
<italic>&#x221e;</italic>
</sub> controllers have been successfully employed. Feedforward dynamic controllers like input-shaping have shown success (<xref ref-type="bibr" rid="B1">Baklouti&#xa0;et&#xa0;al. (2021)</xref>) in minimizing unwanted dynamics, especially in underactuated CDPRs (<xref ref-type="bibr" rid="B15">Id&#xe0;&#xa0;et&#xa0;al. (2021)</xref>). In all these systems, the CDPR dynamics is often well known and the topology is unchanging making the system predictable and controllable. Nevertheless, model uncertainties and measurement noise can continue to present a challenge and can be overcome by the inclusion of an additional state estimation framework <xref ref-type="bibr" rid="B18">Kosari&#xa0;et&#xa0;al. (2013)</xref>. Another approach to optimal control is the Linear-Quadratic-Gaussian (LQG) approach. In a recent work <xref ref-type="bibr" rid="B10">Chen&#xa0;et&#xa0;al. (2022)</xref> successfully employed an LQG with time-varying LQR gains on a CDPR and demonstrated improved performance compared to a baseline feedforward controller. <xref ref-type="bibr" rid="B16">Korayem&#xa0;et&#xa0;al. (2017)</xref> employed LQG alongside a feedback linearized controller to demonstrate improved tracking performance in the presence of model uncertainty and measurement noise. In this work we use LQRs for local stability by employing the state estimates from the IMM for state feedback. The steady-state control inputs that the LQRs are stabilized around are generated through kinematic feedforward controllers.</p>
<p>In this research, the applied IMM utilizes a parallel bank of Extended Kalman Filters, with each filter corresponding to one of the various cable failure modes. The mixed estimate from the IMM provides a corrected pose estimate together with an understanding of the current working mode. A parallel bank of feedforward controllers computes a set of possible joint inputs to the plant model (robot simulation) based on the desired trajectory information from the waypoint following algorithm. This forms the steady-state input that is modulated through a set of LQRs to generate updated inputs to minimize dynamic oscillations. The control inputs from the LQR are mixed with the IMM weights to control the robot. This approach simultaneously detects the fault, provides a corrected estimate and updates the input such that the system can robustly cope with sudden failures.</p>
<p>This framework is implemented in a simulation-only setting and thus serves as a proof-of-concept implementation of this framework. The highlights of this paper are as follows: (i) an Interactive Multi Model Filter is derived and demonstrated as a robust estimator for cable failure detection and diagnosis (FDD) as well as for real-time pose estimation of the rCDPR end-effector; (ii) a waypoint following and a constant-velocity path tracking algorithm is introduced to maintain constant velocity while path tracking and to recover the trajectory from the waypoint closest to the break-point after a cable failure event; (iii) a bank of kinematic feedforward controllers generate steady-state control inputs through kinematic redundancy resolution of each rCDPR model corresponding to each failure mode; and finally (iv) and LQR-based local stabilization framework is applied on the non-linear system to minimize local oscillations at the plant and hasten the recovery.</p>
</sec>
<sec id="s3">
<title>3 System models</title>
<p>This section introduces the mathematical model of the robot utilized in this research. The robot is a planar kinematically redundant CDPR with a platform that is driven by 4 cables and 4 linear actuators housing the cable winch mechanism. The system model is described in <xref ref-type="fig" rid="F3">Figure&#xa0;3</xref>. When the robot is fully functional, the system possesses four cables which are actuated by cable winches mounted on platforms on a linear actuator. The end-effector is a planar rigid body whose center is given by the origin of frame {<italic>O</italic>}. Of the three available degrees of freedom ({<italic>x</italic>, <italic>y</italic>, <italic>&#x3d5;</italic>}), only two ({<italic>x</italic>, <italic>y</italic>}) are actively controlled. The cables are modeled as linear springs whose spring constant is a function of the current free (untensioned) cable length. The material constant of the cable stiffness is given by <italic>k</italic>
<sub>0</sub>, where <italic>k</italic>
<sub>0</sub> is interpreted as the stiffness per unit reciprocal length of free cable. This indicates that longer cable lengths lead to lower stiffness in the cable and thus higher elastic deformations for the same tension. The current stiffness of the cable is therefore given by <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> where <italic>l</italic>
<sub>
<italic>p</italic>,0</sub> is the current free length of the cable. The true cable length <italic>l</italic>
<sub>
<italic>p</italic>
</sub> is the length of the prismatic joint from <inline-formula id="inf2">
<mml:math id="m2">
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> to {<italic>F</italic>}<sub>
<italic>i</italic>
</sub> as seen in <xref ref-type="fig" rid="F3">Figure&#xa0;3</xref> such that <italic>l</italic>
<sub>
<italic>p</italic>
</sub> &#x3d; <italic>l</italic>
<sub>
<italic>p</italic>,0</sub> &#x2b; &#x394;<italic>l</italic>
<sub>
<italic>p</italic>
</sub> where &#x394;<italic>l</italic>
<sub>
<italic>p</italic>
</sub> is the cable elongation due to tension. Many approaches to modeling cable stiffness assume that the true cable length and free cable length are equal in the calculation of the current cable stiffness <xref ref-type="bibr" rid="B34">Verhoeven (2006)</xref>, which helps decouple the dependence of cable stiffness on the cable tension and helps linearize the system. This assumption is not made here. The free cable length <italic>l</italic>
<sub>
<italic>p</italic>,0</sub> was determined to be closer to the encoder value given by <italic>l</italic>
<sub>
<italic>c</italic>
</sub> &#x3d; <italic>r&#x3b8;</italic> where <italic>r</italic> is the winch radius and the interdependence of cable stiffness and cable tension is maintained. The tension in the cables is represented by <italic>&#x3c4;</italic> &#x3d; <italic>k</italic>&#xa0;(<italic>l</italic>
<sub>
<italic>p</italic>
</sub> &#x2212; <italic>l</italic>
<sub>
<italic>c</italic>
</sub>) where the condition <italic>l</italic>
<sub>
<italic>c</italic>
</sub> &#x3c; <italic>l</italic>
<sub>
<italic>p</italic>
</sub> is maintained as much as possible to prevent cable sag. The cable tension is modulated by a unit step function, such that when this constraint is violated, the cable tension becomes zero, mimicking a realistic consequence of cable sag.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>The kinematically redundant 4 cable CDPR.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g003.tif"/>
</fig>
<p>The cable-winch attachment points, {<italic>S</italic>
<sub>2</sub>}, are not constant as in traditional CDPRs, but instead move along linear actuators along the <italic>x</italic>-axis of the base frames {<italic>S</italic>
<sub>1</sub>}. The longitudinal positions of these attachment points with respect to the base frame are given by <italic>l</italic>
<sub>
<italic>s</italic>
</sub>. Both the slider joints and the cable winching mechanisms are subject to actuation dynamics which inform the cable tensions and cable stiffnesses that effect the dynamics at the end-effector.</p>
<sec id="s3-1">
<title>3.1 Actuator dynamics</title>
<p>Let the complete joint input vector from the controller (i.e. desired reference values to the plant model) be expressed as <inline-formula id="inf3">
<mml:math id="m3">
<mml:mi mathvariant="bold">q</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and the realized joint vector (actual values at time <italic>t</italic>) be given by <inline-formula id="inf4">
<mml:math id="m4">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. The moving slider bases are modeled as single degree-of-freedom (DOF) second order linear systems subject to maximum and minimum velocity constraints to mimic the motion of a screw-type linear actuator. The bases are modeled with inertia and friction and a simple proportional controller as shown in Eq.&#xa0;<xref ref-type="disp-formula" rid="e1">1</xref>. For every <italic>i</italic>th actuator in the vector <bold>l</bold>
<sub>
<bold>s</bold>
</sub> (dropping the subscript <italic>i</italic> to indicate each individual slider joint) we model the dynamic equation as,<disp-formula id="e1">
<mml:math id="m5">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mi>m</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>d</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>l</mml:mi>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mtext>s.t.&#x2009;</mml:mtext>
<mml:mspace width="0.3333em"/>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(1)</label>
</disp-formula>where <italic>g</italic>
<sub>
<italic>p</italic>,<italic>ls</italic>
</sub> is the proportional gain and the maximum velocity that a linear screw actuator can travel in is limited to a small value <inline-formula id="inf5">
<mml:math id="m6">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x3d;</mml:mo>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The motor cable spooling <inline-formula id="inf6">
<mml:math id="m7">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is modeled as a first order lag system, i.e.<disp-formula id="e2">
<mml:math id="m8">
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(2)</label>
</disp-formula>where <italic>T</italic>
<sub>
<italic>s</italic>
</sub> is the settling time and <inline-formula id="inf7">
<mml:math id="m9">
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the proportional gain. In addition to the specified models and constraints, there are also limits placed on the position values of the actuator joints in order to set hard constraints defined by geometric limits.</p>
</sec>
<sec id="s3-2">
<title>3.2 End-effector dynamics</title>
<p>The cable failure is modeled as a linear drop in the cable stiffness of the failed joint, i.e., <italic>k</italic>
<sub>
<italic>i</italic>
</sub> &#x2192; 0 over a small but finite time interval &#x394;<italic>t</italic>
<sub>
<italic>f</italic>
</sub>. Thus if there is no change in winch angle as the cable fails, the tension in the corresponding cable falls. The full dynamic model of the rCDPR can be derived via the Lagrangian approach as<disp-formula id="e3">
<mml:math id="m10">
<mml:mi>M</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<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:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<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:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(3)</label>
</disp-formula>where end-effector pose is given by <inline-formula id="inf8">
<mml:math id="m11">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>x</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mi>y</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mi>&#x3d5;</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <inline-formula id="inf9">
<mml:math id="m12">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is the pulling map or wrench Jacobian. The prismatic length, <bold>l</bold>
<sub>
<bold>p</bold>
</sub>, comes from inverse kinematics. Both are dependent on the current pose, <bold>x</bold>
<sub>
<bold>e</bold>
</sub>, and the realized geometric attachment points, <inline-formula id="inf10">
<mml:math id="m13">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, while the joint state stiffness matrix, <italic>K</italic>
<sub>
<italic>q</italic>
</sub>, is a diagonal matrix with the elements (<italic>k</italic>
<sub>1</sub>, <italic>&#x2026;</italic> , <italic>k</italic>
<sub>4</sub>). <italic>M</italic> is the mass/inertia matrix whose coefficients are informed by the mass and shape of the end effector. This formulation ignores the effects of Coriolis forces. The damping coefficients of the damping matrix <italic>D</italic> are minor and expected to be a result of surface friction alone. An effect of low cable stiffness and damping constants is that oscillations induced due to system dynamics in operation or during cable failure do not dissipate easily. A feedforward controller for such a system would be intractable. The complete dynamic system is shown in <xref ref-type="fig" rid="F4">Figure&#xa0;4</xref>.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Plant model.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g004.tif"/>
</fig>
<sec id="s3-2-1">
<title>3.2.1 First order motion model</title>
<p>The states of the end-effector are given by <inline-formula id="inf11">
<mml:math id="m14">
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<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:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. The resulting non-linear system model is given by<disp-formula id="e4">
<mml:math id="m15">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<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:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold-italic">&#x3c9;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(4)</label>
</disp-formula>where <bold>
<italic>&#x3c9;</italic>
</bold> and <bold>v</bold> are zero mean Gaussian vector processes accounting for model and measurement delta correlated noise. The non-linear vector functions <italic>f</italic> and <italic>h</italic> emerge as<disp-formula id="e5">
<mml:math id="m16">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml: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:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi>D</mml:mi>
<mml:msub>
<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:mi mathvariant="bold">e</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="right">
<mml:mi>h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtext mathvariant="bold">x</mml:mtext>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</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>(5)</label>
</disp-formula>where the explicit dependence on time has been dropped for ease of notation. The measurement model assumes that unbiased noisy position measurements are directly available, for instance by processing and filtering information from an on-board IMU or a range-based localization system.</p>
</sec>
</sec>
<sec id="s3-3">
<title>3.3 Model assumptions for estimation and control</title>
<p>The motion models employed in the Extended Kalman Filters for the IMM (<xref ref-type="sec" rid="s3-2">Section.&#xa0;3.2</xref>) and the LQR (<xref ref-type="sec" rid="s5-4">Section&#xa0;5.4</xref>) use Eq.&#xa0;<xref ref-type="disp-formula" rid="e4">4</xref> and <xref ref-type="disp-formula" rid="e5">5</xref> as the motion model. Three motion models are employed to describe the seven working modes 4.1. For each working mode, the effect of the corresponding cable failure is incorporated in the dynamic model through the loss of stiffness in the respective cables. However, the model does not consider the true stiffness constant value from the plant model but instead employs static parameters corresponding to the different failure modes. In addition, it does not consider the model for actuator dynamics, but instead accepts a measurement of the current joint state, <inline-formula id="inf12">
<mml:math id="m17">
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where <bold>v&#x2032;</bold> is modeled as a zero mean Gaussian delta correlated noise. On the other hand, the LQR assumes that the joint input to the motion model is the desired joint state. This is further discussed in <xref ref-type="sec" rid="s5-4">Section&#xa0;5.4</xref>.</p>
<p>The kinematic feedforward controller does not use the dynamic models and instead relies on the computation of the forward and inverse kinetostatic solutions for the redundant system. The cable stiffness model used to compute the desired cable tensions is approximated to consider the true cable length instead of the free cable length <inline-formula id="inf13">
<mml:math id="m18">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. This was done to remove the direct dependence of the cable stiffness parameter on <italic>l</italic>
<sub>
<italic>c</italic>
</sub> which is a control variable.</p>
<p>These assumptions add unmodeled uncertainties to the control and estimation problem. The complexity introduced by this bears resemblance to similar challenges associated with real-world experimental implementations. In addition, only a single measurement source (at the end-effector) is considered. It must be emphasized that the simulated measurement noise is unbiased and Gaussian. The deteriorating effect of measurement bias (such as IMU drift) on most estimation approaches is well known and well explained and are not considered in this work. Sensors such as ultrasonic sensors, GPS devices or visual systems can help eliminate bias. The selected measurement noise characteristics in this work was not based on simulations of a real measurement device.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Estimation of failure states</title>
<sec id="s4-1">
<title>4.1 Failure mode classification</title>
<p>Cable failure in a CDPR reduces the degrees of freedom (DOFs) or the quality of the DOF (i.e. manipulability or dexterity) available at the end-effector. We control only 2 DOFs at the end-effector for the four-cable planar CDPR model in this paper. The total working modes considered can be described by 3 motion models (i) an over-constrained CDPR with 4 cables, (ii) a fully constrained CDPR with 3 cables and (iii) and under-constrained CDPR with two cables (<xref ref-type="fig" rid="F5">Figure&#xa0;5</xref>).</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>The 3 kinds of failures in a 4-PRPR CDPR <bold>(A)</bold> No failures <bold>(B)</bold> 1 cable fails <bold>(C)</bold> 2 cables fail.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g005.tif"/>
</fig>
<p>Therefore, there are 7 total working modes (mode 1) no cables have failed, (modes 2&#x2013;5) only cable A, B, C, or D fail, (mode 6) cables A and B have failed, (mode 7) cables C and D have failed. If any other failure combination occurs, significant areas of the workspace become unreachable and are considered to be complete failure modes (i.e. cannot be recovered from). If the sliders were not constrained to geometric limits and free to move like mobile robots or drones, then these additional failure modes can also be considered.</p>
</sec>
<sec id="s4-2">
<title>4.2 Interactive multiple model estimation</title>
<p>An interactive multiple model filter (IMM) is a dynamic estimator (<xref ref-type="bibr" rid="B3">Blom and Bar-Shalom (1988)</xref>) which can be used when model changes appear suddenly or gradually over time, providing means for failure detection. The process flow of an IMM is shown in <xref ref-type="fig" rid="F6">Figure&#xa0;6</xref>.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>The Interactive Multiple Model (IMM) filter.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g006.tif"/>
</fig>
<p>In general, the bank of filters in an IMM can be realized by a variety of estimation approaches, i.e., Kalman Filters (KF), Extended Kalman Filters (EKF), Unscented Kalman Filters (UKF), Particle Filters (PF), et cetera. In this study, we use an EKF formulation in which the error dynamics are approximated by a first order Taylor series expansion about the estimated state, <inline-formula id="inf14">
<mml:math id="m19">
<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:math>
</inline-formula>, i.e.<disp-formula id="e6">
<mml:math id="m20">
<mml:mi>F</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">u</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:mi>H</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:math>
<label>(6)</label>
</disp-formula>Here, <italic>F</italic>
<sub>6 &#xd7; 6</sub> is determined numerically by a complex step derivative approximation and <italic>H</italic>
<sub>3 &#xd7; 6</sub> is simlpy given by <inline-formula id="inf15">
<mml:math id="m21">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, since we directly measure the end-effector&#x2019;s position. In this study, the EKF is applied in the discrete time domain; hence, the Euler-Maruyama discretization of the motion model yields.<disp-formula id="e7">
<mml:math id="m22">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:munder accentunder="false">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo>&#x23df;</mml:mo>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msqrt>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msqrt>
</mml:math>
<label>(7)</label>
</disp-formula>
<disp-formula id="e8">
<mml:math id="m23">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(8)</label>
</disp-formula>where <inline-formula id="inf16">
<mml:math id="m24">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</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:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the measurement vector, <inline-formula id="inf17">
<mml:math id="m25">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x223c;</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> denotes the process noise with covariance <inline-formula id="inf18">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</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:mi>n</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, and <inline-formula id="inf19">
<mml:math id="m27">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x223c;</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is the measurement noise with covariance <inline-formula id="inf20">
<mml:math id="m28">
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</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:mi>m</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. The sampling time is denoted by &#x394;<italic>t</italic>, and <italic>k</italic> is the current time step.</p>
<p>Let <inline-formula id="inf21">
<mml:math id="m29">
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula> be the number of all working modes in a CDPR at the <italic>k</italic>th time step. Then, the input to the filter is the current measurement and mixed state estimate <inline-formula id="inf22">
<mml:math id="m30">
<mml:msup>
<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:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. The algorithm broadly consists of four stages (<xref ref-type="bibr" rid="B13">Gill (2019)</xref>).<list list-type="simple">
<list-item>
<p>1. <italic>Interaction and Mixing:</italic> The weights and the estimates from the last cycle are mixed as per their associated Markov transition probabilities given by the Markov transition matrix, <italic>A</italic> (also sometimes called the Markov switching matrix). The predicted probability for the filter to end up in mode <italic>j</italic> in each cycle, given that it was in the mode <italic>i</italic> during the previous cycle is given by</p>
</list-item>
</list>
<disp-formula id="e9">
<mml:math id="m31">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
</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:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(9)</label>
</disp-formula>with <inline-formula id="inf23">
<mml:math id="m32">
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> being the normalization factor, and where <italic>a</italic>
<sub>
<italic>ij</italic>
</sub> is the Markov transition probability from mode <italic>i</italic> to mode <italic>j</italic>. As the true transition probabilities are unknown, the matrix <italic>A</italic> is a symmetric positive definite matrix of scalars that are tuned experimentally. The selected values have a significant impact on the response time and sensitivity in responding to cable failures. High values at the diagonals may cause the IMM to be sluggish whereas evenly distributed values along the whole matrix may cause the system to be overly sensitive to change. The mixed initial state estimate at the start of the current time step is provided by<disp-formula id="e10">
<mml:math id="m33">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="[" close="">
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="2em"/>
<mml:mspace width="2em"/>
<mml:mspace width="1em"/>
<mml:mspace width="0.3333em"/>
<mml:mspace width="0.3333em"/>
<mml:mfenced open="" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(10)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>2. <italic>Model Specific Filtering:</italic> The mixed initial estimates are fed into the EKF and processed in two steps, i.e.</p>
</list-item>
</list>
</p>
<p>&#x2022; Propagation:<disp-formula id="e11">
<mml:math id="m34">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="bold">f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>I</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(11)</label>
</disp-formula>
</p>
<p>&#x2022; And update:<disp-formula id="e12">
<mml:math id="m35">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</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="right">
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="bold">h</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(12)</label>
</disp-formula>
</p>
<p>Here, &#x2018;&#x2b;&#x2019; denotes the <italic>a posteriori</italic> estimate whereas &#x2018;&#x2212;&#x2019; denotes the <italic>a priori</italic> quantity before the update. The likelihood of a measurement is then given by<disp-formula id="e13">
<mml:math id="m36">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>p</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</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:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>det</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>&#x3c0;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>/</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mspace width="2em"/>
<mml:mspace width="1em"/>
<mml:mo>&#x22c5;</mml:mo>
<mml:mi>exp</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mtext>with</mml:mtext>
<mml:mspace width="1em"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>E</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(13)</label>
</disp-formula>and where <inline-formula id="inf24">
<mml:math id="m37">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is the estimation error.<list list-type="simple">
<list-item>
<p>3. <italic>Model Probability Update:</italic> Now, the model probabilities are updated via the likelihood with subsequent normalization, i.e.</p>
</list-item>
</list>
<disp-formula id="e14">
<mml:math id="m38">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi>p</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">y</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x2190;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(14)</label>
</disp-formula>
<list list-type="simple">
<list-item>
<p>4. <italic>Combination:</italic> Finally, the updated estimate is given by</p>
</list-item>
</list>
<disp-formula id="e15">
<mml:math id="m39">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msubsup>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<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:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(15)</label>
</disp-formula>
</p>
<p>The weight vector, <bold>w</bold>
<sub>
<italic>k</italic>
</sub>, displays the importance associated with each model in the bank. For example, if there are no cable failures, the IMM will determine the first model (mode 1) to have the largest weight. This vector also informs the balance of joint inputs to the controller as described in the next section.</p>
</sec>
</sec>
<sec id="s5">
<title>5 Control framework</title>
<p>The objectives of the control framework are to not only stably manipulate the end-effector for trajectory tracking, but to do so with constant velocity and reliability of trajectory recovery upon cable failure. An earlier effort <xref ref-type="bibr" rid="B29">Raman&#xa0;et&#xa0;al. (2022)</xref> deployed a feedforward PD based control law for task space trajectory error minimization, but this was considered insufficient for addressing some finer requirements. For example, in 3D printing tasks the end-effector is required to (i) return to the point of failure before continuing, (ii) maintain constant velocity during trajectory tracking and, (iii) minimize dynamic oscillations at the end-effector after cable failure.</p>
<p>While designing a path following controller for a CDPR, the end-effector can generally be modelled as a holonomic robot. However, in most CDPRs, the ability to control the orientations of the end-effector is severely limited by geometric constraints. Reconfigurability can be an advantage here, but since our system model limits the motion of this attachment point to a straight line with finite dimensions, the orientations are only moderately more controllable than a traditional CDPR. Thus, we drop these from consideration for control and seek to only align the desired 2-D end-effector velocity vector with the tangent of the required trajectory.</p>
<p>In this section we present waypoint following algorithm integrated with a velocity level path following controller to recover the trajectory from the break-point (i.e. the precise location on the trajectory where the cable fails). This framework allows the recovery algorithm to be completely reliable even in the event of false positives by the estimator. In addition, this section also details the challenges of cascaded control and redundancy resolution in both the static space and task space while manipulating a kinematically- and actuation-redundant parallel manipulator.</p>
<sec id="s5-1">
<title>5.1 Path following</title>
<p>We first discretize and parameterize the reference trajectory into a set of constant arc-length waypoints <inline-formula id="inf25">
<mml:math id="m40">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.<disp-formula id="e16">
<mml:math id="m41">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mtext mathvariant="italic">N</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(16)</label>
</disp-formula>
</p>
<p>where <italic>N</italic>
<sub>
<italic>i</italic>
</sub> is the total number of waypoints. The constant arc-length waypoints are numerically determined from the path equation. This re-parameterization ensures that regardless of the chosen trajectory equation the distance between any two waypoints is never too large. Waypoints function as an ordered set of markers without time parameterization that can be dropped from the waypoint map as the robot traverses within a threshold of it. The robot always moves toward the next waypoint in the map regardless of cable failure or any other unpredictable disturbance at the end-effector that may temporarily navigate the robot away from the desired trajectory.</p>
<p>Next, we use a constant-velocity carrot following controller to traverse straight line intersections between any given pair of waypoints.</p>
<p>The shortest distance from the current position of the robot end-effector origin, shown in <xref ref-type="fig" rid="F7">Figure 7</xref> by frame {<italic>O</italic>}, intersects with the line segment at the point <italic>p</italic>
<sub>
<italic>n</italic>
</sub> and forms a normal vector <bold>e</bold> whose magnitude forms the cross-track error. If the projection of the robot frame origin {<italic>O</italic>} lies outside of the line segment, the shortest distance is simply the distance to the closest end-point. Therefore, the cross-track error vector is determined by first projecting the robot origin on the line segment <bold>p</bold> through a dot product and capping the magnitude of the projection <inline-formula id="inf26">
<mml:math id="m42">
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> where <inline-formula id="inf27">
<mml:math id="m43">
<mml:msub>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the length of the current line segment. If <inline-formula id="inf28">
<mml:math id="m44">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">o</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the vector between frame {<italic>O</italic>} and <inline-formula id="inf29">
<mml:math id="m45">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, then the cross-track error vector is always given by <inline-formula id="inf30">
<mml:math id="m46">
<mml:mi mathvariant="bold">e</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">o</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mi mathvariant="bold">p</mml:mi>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. The reference velocity is a constant and is given by <italic>v</italic>
<sub>
<italic>ref</italic>
</sub>. Thus the reference velocity vector which lies along the current line segment is <inline-formula id="inf31">
<mml:math id="m47">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. The desired direction of the velocity vector is given by <bold>v</bold>
<sub>
<bold>d</bold>
</sub> &#x3d; <bold>e</bold> &#x2b; <bold>v</bold>
<sub>
<italic>ref</italic>
</sub>. The final desired velocity vector has its velocity always capped at <italic>v</italic>
<sub>
<italic>ref</italic>
</sub> and is therefore given by <inline-formula id="inf32">
<mml:math id="m48">
<mml:mi mathvariant="bold">v</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>Constant velocity carrot-follower.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g007.tif"/>
</fig>
<p>As the cross-track error approaches zero, the desired velocity vector and the reference velocity vector are more closely aligned. The joint states required to achieve this velocity are computed through redundancy resolution-based inverse kinematics. When the end-effector reaches within a certain threshold of the next waypoint, the waypoint map <inline-formula id="inf33">
<mml:math id="m49">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> updates by dropping the first value from the list. This strategy allows the robot to always move towards the second waypoint in <inline-formula id="inf34">
<mml:math id="m50">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, while the first waypoint serves as a marker for the connecting line segment to be tracked. If the robot snaps or moves off track, it still moves towards the second waypoint ensuring that the trajectory we want to track is traversed approximately from where it deviates. The choice of arc length chosen above determines the maximum size of the missed line segment.</p>
</sec>
<sec id="s5-2">
<title>5.2 Inverse kinematics and redundancy resolution</title>
<p>For a given end-effector pose, there are infinitely many solutions in the joint space of kinematically redundant CDPR. Considering that this system has two kinds of redundancies, actuation and kinematic redundancy, the solutions for determining the optimal joint states can be quite complex. In this study, a feedforward kinematic controller was applied and as a result, the redundancy resolution schemes and joint determination use kinematic models.</p>
<sec id="s5-2-1">
<title>5.2.1 Infeasibility avoidance</title>
<p>Singularity avoidance is an important part of the kinematic redundancy resolution control that determines the joint states. With CDPRs, it is additionally of importance to avoid infeasibilities in the wrench space. i.e., the configurations of the robot should always maintain positive cable tensions. Recent approaches use maximization of the volume of the wrench polytope <xref ref-type="bibr" rid="B5">Bosscher&#xa0;et&#xa0;al. (2006)</xref> (or the Available Wrench Set, AWS) as the cost function for ensuring this feasibility <xref ref-type="bibr" rid="B30">Rasheed (2019)</xref>; <xref ref-type="bibr" rid="B37">Xiong&#xa0;et&#xa0;al. (2022)</xref>. The available wrench polytope is a description of the wrench or manipulability ellipse that, unlike Yoshikawa&#x2019;s measure of manipulability <xref ref-type="bibr" rid="B38">Yoshikawa (1985)</xref>, provides a more accurate and scaled representation of the true wrench space. This is especially useful for CDPRs, where negative joint forces cannot be realized. However, the calculation of the AWS is computationally expensive and can still result in solutions that settle within local minima. For this reason, we choose to look at the traditional manipulability and wrench feasibility indices together by selecting the pareto-optimal solution maximizing both.</p>
<p>Yoshikawa&#x2019;s measure of manipulability quantifies the twist and wrench capabilities of the end-effector. In 3 dimensions, the manipulability for translational and rotational motion is considered independently, and this holds true for 2 dimensions as well. Since we do not wish to control the yaw motion of the end-effector, we only consider the eigenvalues <italic>&#x3c3;</italic> &#x2208; {<italic>&#x3c3;</italic>
<sub>
<italic>x</italic>
</sub>, <italic>&#x3c3;</italic>
<sub>
<italic>y</italic>
</sub>} of the twist Jacobian <inline-formula id="inf35">
<mml:math id="m51">
<mml:msup>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> corresponding to <italic>x</italic> and <italic>y</italic>. The measure of manipulability is then given by<disp-formula id="e17">
<mml:math id="m52">
<mml:mi>&#x3bb;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">max</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:mn>0</mml:mn>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>&#x3bb;</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
<label>(17)</label>
</disp-formula>
</p>
<p>For an <italic>n</italic>-DOF CDPR with <italic>m</italic> cables, the wrench quality index <italic>&#x3ba;</italic> indicates the quality of wrench feasibility of the system. For a fully constrained cable robot it is simply the ratio of the smallest and largest tensions required to maintain a pose <xref ref-type="bibr" rid="B26">Pott and Bruckmann (2013)</xref>. For a redundantly constrained CDPR, it is the largest value that this ratio can take. In simple terms, the more evenly distributed the tensions in the CDPR are to maintain the pose, the better its wrench quality index will be. This index is calculated as follows.<list list-type="simple">
<list-item>
<p>&#x2022; Let <italic>J</italic>
<sub>
<italic>w</italic>
</sub> be the wrench Jacobian for an <italic>n</italic> &#x2212; <italic>DOF</italic> CDPR with the dimensions <italic>n</italic> &#xd7; <italic>m</italic> where the number of cables, <italic>m</italic> &#x2265; <italic>n</italic> &#x2b; 2. Most poses in this workspace can be achieved with only <italic>n</italic> &#x2b; 1 cables, so many feasible solutions of tensions may involve setting tensions in <italic>m</italic> &#x2212; <italic>n</italic> &#x2212; 1 cables to zero and lead to a wrench quality index of zero. However, a better tension set can be determined for the same pose.</p>
</list-item>
<list-item>
<p>&#x2022; Assume a matrix <inline-formula id="inf36">
<mml:math id="m53">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> whose columns are a subset of the columns of <italic>J</italic>
<sub>
<italic>w</italic>
</sub> such that <inline-formula id="inf37">
<mml:math id="m54">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is <italic>J</italic>
<sub>
<italic>w</italic>
</sub> with a set of <italic>m</italic> &#x2212; <italic>n</italic> &#x2212; 1 columns dropped. Thus for <italic>m</italic> columns in <italic>J</italic>
<sub>
<italic>w</italic>
</sub> there will be <sup>
<italic>m</italic>
</sup>
<italic>C</italic>
<sub>
<italic>n</italic>&#x2b;1</sub> combinations of <inline-formula id="inf38">
<mml:math id="m55">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
</list-item>
<list-item>
<p>&#x2022; Let <inline-formula id="inf39">
<mml:math id="m56">
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mtext>null</mml:mtext>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. If every element in <italic>n</italic>
<sub>
<italic>i</italic>
</sub> has the same sign, then this vector contains the minimum set of cables that must be tensioned in order to maintain a pose (the tension in the remaining cables is zero). Expand the vector <italic>n</italic>
<sub>
<italic>i</italic>
</sub> such that zeros are inserted into the vector for every dropped column. For example, if <italic>n</italic> &#x3d; 2 and <italic>m</italic> &#x3d; 4, and <inline-formula id="inf40">
<mml:math id="m57">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is a reduced matrix of <italic>J</italic>
<sub>
<italic>w</italic>
</sub> with the first column dropped. Then <inline-formula id="inf41">
<mml:math id="m58">
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<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:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1,1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1,2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1,3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>
</p>
</list-item>
<list-item>
<p>&#x2022; Assemble all such vectors <italic>n</italic>
<sub>
<italic>i</italic>
</sub> whose elements contain the same sign&#xa0;and eliminate the negative signs <italic>n</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; &#x2212;<italic>n</italic>
<sub>
<italic>i</italic>
</sub>&#xa0;iff&#xa0;<italic>n</italic>
<sub>
<italic>i</italic>,<italic>j</italic>
</sub> &#x3c; 0 <italic>&#x2200;&#xa0;j</italic>.</p>
</list-item>
<list-item>
<p>&#x2022; Sum all the assembled <italic>n</italic>
<sub>
<italic>i</italic>
</sub> that meet these criteria into a single vector <bold>z</bold> of the dimensions <italic>m</italic> &#xd7; 1.</p>
</list-item>
<list-item>
<p>&#x2022; Drop all the elements in <bold>z</bold> that are zero. If the number of remaining elements are less than <italic>n</italic> &#x2b; 1 then the wrench quality index, <italic>&#x3ba;</italic> &#x3d; 0. If <italic>&#x3ba;</italic> is 0, then the system is not wrench feasible.</p>
</list-item>
<list-item>
<p>&#x2022; If the number of elements is greater than or equal to <italic>n</italic> &#x2b; 1, then</p>
</list-item>
</list>
<disp-formula id="e18">
<mml:math id="m59">
<mml:mi>&#x3ba;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>min</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="bold">z</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>max</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi mathvariant="bold">z</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:math>
<label>(18)</label>
</disp-formula>For a fully constrained CDPR, the null space of the wrench Jacobian in one dimensional, so Eq.&#xa0;<xref ref-type="disp-formula" rid="e18">18</xref> is directly applied on the null vector (if the elements all contain the same sign. Otherwise <italic>&#x3ba;</italic> &#x3d; 0).</p>
<p>Cable failure can cause a sudden change in the instantaneous static workspace of the robot. The following waypoint on the desired trajectory can often lie outside of this new workspace. The sliders form the kinematically redundant joints that drive the robot away from singularities where necessary, but sometimes if the desired velocities at the end-effector are large enough or at an unusual angle, the sliders may be unable to move fast enough to compensate and the controller inadvertently pushes the robot into a singularity. To prevent this, we constrain the magnitude of the maximum allowable velocity with dependency on <italic>&#x3ba;</italic>,<disp-formula id="e19">
<mml:math id="m60">
<mml:mi mathvariant="bold">v</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">max</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:msqrt>
<mml:mrow>
<mml:mi>&#x3ba;</mml:mi>
</mml:mrow>
</mml:msqrt>
<mml:mspace width="0.3333em"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
<label>(19)</label>
</disp-formula>where <inline-formula id="inf42">
<mml:math id="m61">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="bold">v</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is the unit velocity direction vector. This is only utilized when the robot kinematics have placed the robot away from the trajectory, such as during the initialization. In normal operation for trajectory tracking the tracking velocities are slow enough that this is not a major concern.</p>
</sec>
<sec id="s5-2-2">
<title>5.2.2 Redundancy resolution</title>
<p>This redundancy resolution scheme is applied on kinematic equations to determine an optimal position level joint solution, <inline-formula id="inf43">
<mml:math id="m62">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. These inputs may not be dynamically feasible, nor is the feedback being actively measured, so they are instead locally thresholded to a velocity-limited value <inline-formula id="inf44">
<mml:math id="m63">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</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:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. The optimal joint slider positions <inline-formula id="inf45">
<mml:math id="m64">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> are determined from an objective function that seeks to maximize the manipulability and wrench quality at the end-effector. This aids in avoiding singularities as the sliders travel. The joint sliders are velocity-limited through a velocity thresholding function (Eq.&#xa0;<xref ref-type="disp-formula" rid="e20">20</xref>). For the <italic>i</italic>th model (subscript <italic>i</italic> is dropped),<disp-formula id="e20">
<mml:math id="m65">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mi>max</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:munder>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3ba;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>min</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>max</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">max</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(20)</label>
</disp-formula>where <italic>&#x3ba;</italic> and <italic>&#x3bb;</italic> are the wrench quality index and manipulability measure respectively. The slider velocity is given by <italic>v</italic>
<sub>
<italic>s</italic>
</sub>. Feasible slider positions are required to calculate optimal cable winch positions for a given time-step. Ideally, slider positions and cable winching should be controlled in alternate timesteps in order to utilize slider measurements to calculate the desired cable winch position. However, by thresholding the slider velocities to &#x7c;<italic>v</italic>
<sub>
<italic>s</italic>,&#x2009;<italic>min</italic>
</sub>&#x7c; &#x3d; &#x7c;<italic>v</italic>
<sub>
<italic>s</italic>,&#x2009;<italic>max</italic>
</sub>&#x7c; such that the control actions <italic>l</italic>
<sub>
<italic>s</italic>,0</sub> lie within the linear region of the slider dynamics allows us to approximate control actions for sliders and cable winches within the same time-step. Any inaccuracies can be subsumed within model disturbances. The LQR feedback controller allows for enough leeway to compensate for these inaccuracies.</p>
<p>For the final motion model, the DOF at the end-effector reduces to one and the manipulability ellipse reduces to a line, making singularity avoidance a non-issue. Wrench feasibility in a single dimension is also trivially maintained. For this case, the objective function for the cables manipulates the end-effector along the single axis in the body frame, while the slider position depends on minimizing the error in a skewed axis (which is parallel to the direction of slider motion in the robot frame). Even for CDPRs with higher DOFs, <italic>l</italic>
<sub>
<italic>s</italic>
</sub> can be made to depend on a multi-objective function that simultaneously manipulates previously-uncontrollable DOFs while maximizing workspace and pose quality.</p>
<p>Cable failure can sometimes lead to slack in the remaining cables. While this property is not explicitly modeled in the system kinematics, its destabilizing effect can clearly be identified if the true winch position <italic>l</italic>
<sub>
<italic>c</italic>
</sub> is larger than the true cable length. This can be prevented by setting a minimum pretension <bold>
<italic>&#x3c4;</italic>
</bold>
<sub>
<italic>min</italic>
</sub> and utilizing the static redundancy to extract the desired tension in the cables. Given the desired end-effector position and <inline-formula id="inf46">
<mml:math id="m66">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, we determine the minimum positive tensions required to maintain this pose.<disp-formula id="e21">
<mml:math id="m67">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x220b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(21)</label>
</disp-formula>The optimal winch positions, <inline-formula id="inf47">
<mml:math id="m68">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, are then determined in a straightforward fashion by considering the cable stiffness model,<disp-formula id="e22">
<mml:math id="m69">
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn mathvariant="bold">1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="bold-italic">&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:math>
<label>(22)</label>
</disp-formula>where <bold>l</bold>
<sub>
<italic>p</italic>
</sub> is the prismatic length or true (steady-state) length of the cables, determined from inverse kinematics. The joint angle velocities are not thresholded, so <inline-formula id="inf48">
<mml:math id="m70">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn mathvariant="bold">0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>.</p>
</sec>
</sec>
<sec id="s5-3">
<title>5.3 Forward kinematics</title>
<p>Given the desired joint state <bold>q</bold>
<sub>0,<italic>n</italic>
</sub> of the <italic>n</italic>th working mode, the desired steady state end-effector pose <bold>x</bold>
<sub>0,<italic>n</italic>
</sub> can be determined through forward kinematics which is implemented by minimizing the potential energy of the system.<disp-formula id="e23">
<mml:math id="m71">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>arg</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mi>U</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(23)</label>
</disp-formula>
<disp-formula id="e24">
<mml:math id="m72">
<mml:mtext>s.t.</mml:mtext>
<mml:mspace width="0.3333em"/>
<mml:mspace width="0.3333em"/>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(24)</label>
</disp-formula>where <bold>l</bold>
<sub>
<bold>p</bold>
</sub> is true cable length calculated for each value of <bold>x</bold>
<sub>0,<italic>n</italic>
</sub>. The cable tensions given by <inline-formula id="inf49">
<mml:math id="m73">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="bold">p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> must always be positive. If this condition is not met, it indicates that the initial joint state provided was not feasible which is generally a result of one or more cables being slack. Fortunately, in the feedforward control setting considered in this work, the desired winch position <inline-formula id="inf50">
<mml:math id="m74">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">l</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> employed in the calculation of the forward kinematics is always less than the prismatic cable length <bold>l</bold>
<sub>
<bold>p</bold>
</sub>. This calculation is not influenced by the true input <bold>l</bold>
<sub>
<bold>c</bold>
</sub> that is sent to the plant. Thus, although cable slackness can exist in the plant model, it is not encountered during the calculation of the forward kinematics.</p>
<p>The task recovery algorithm has a parallel bank of trajectory tracking controllers, each corresponding to a working mode. Each working mode, <italic>n</italic>, runs an independent kinematic controller that propagates the desired joint inputs in time such that it is the only working mode. The controllers use simple kinematic models for the different redundant CDPR motion models.</p>
<p>The control loop accepts the current joint inputs, <bold>q</bold> to the plant and determines the steady-state robot pose through forward kinematics for the <italic>n</italic>th model (<xref ref-type="fig" rid="F8">Figure&#xa0;8</xref>). The way point tracking algorithm accepts the current state estimate, <inline-formula id="inf51">
<mml:math id="m75">
<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:math>
</inline-formula> to update the waypoint and reference trajectory information if necessary. Through the carrot following algorithm, the desired task space state is determined and the redundancy resolution scheme is applied to determine the desired joint state, <bold>q</bold>
<sub>0,<italic>n</italic>
</sub>. This is propagated through forward kinematics again to determine the steady-state end-effector pose, <bold>x</bold>
<sub>0,<italic>n</italic>
</sub>.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Feed-forward kinematic controller.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g008.tif"/>
</fig>
</sec>
<sec id="s5-4">
<title>5.4 LQR stabilization</title>
<p>Although the full system is highly non-linear, local stabilization (vibration dampening) is performed utilizing a Linear Quadratic Regulator. The LQR assumes the system model in Eq.&#xa0;<xref ref-type="disp-formula" rid="e5">5</xref> and ignores the actuator dynamics. This does not cause unwelcome destabilizing effects as the update frequency of the LQR is low compared to the dynamic joint controllers. The system model is linearized around the desired steady-state operating point (<bold>x</bold>
<sub>0,<italic>n</italic>
</sub>, <bold>q</bold>
<sub>0,<italic>n</italic>
</sub>) that results from a combination of forward and inverse kinematics in the feedforward controller described in <xref ref-type="sec" rid="s5-2">Section&#xa0;5.2</xref>. The local system dynamics then arise as<disp-formula id="e25">
<mml:math id="m76">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msub>
<mml:mrow>
<mml:mi>A</mml:mi>
</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:msub>
<mml:mrow>
<mml:mfenced open="" close="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<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>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mfenced open="" close="|">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
</mml:mfenced>
</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:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(25)</label>
</disp-formula>where <italic>k</italic> is the time-step index within the LQR feedback control loop. Please note that the desired steady-state operation point (<bold>x</bold>
<sub>0,<italic>n</italic>
</sub>, <bold>q</bold>
<sub>0,<italic>n</italic>
</sub>) is also time-varying, but at a much slower update rate than the LQR loop. The slow update rate of the feedforward controller that provides the desired steady-state operating point is useful here as the redundancy resolution algorithm is the most computationally expensive piece of the framework. Therefore, a zero-order hold assumption without loss of generality is implied in Eq.&#xa0;<xref ref-type="disp-formula" rid="e25">25</xref>. The dynamic correction <italic>&#x3b4;</italic>
<bold>q</bold>
<sub>
<italic>n</italic>,<italic>k</italic>
</sub> for the kinematically optimal joint input <bold>q</bold>
<sub>
<italic>n</italic>,<italic>k</italic>
</sub> is now determined via a quadratic cost function, i.e.<disp-formula id="e26">
<mml:math id="m77">
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>arg</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:mi>&#x3b4;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="script">Q</mml:mi>
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi mathvariant="script">R</mml:mi>
<mml:mi>&#x3b4;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(26)</label>
</disp-formula>subject to the dynamics in Eq.&#xa0;<xref ref-type="disp-formula" rid="e25">25</xref> and where <inline-formula id="inf52">
<mml:math id="m78">
<mml:mi mathvariant="script">Q</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf53">
<mml:math id="m79">
<mml:mi mathvariant="script">R</mml:mi>
</mml:math>
</inline-formula> are positive semi-definite and positive definite weighting matrices, respectively. The tuning of these terms depends on the desired overall impact of the corresponding states on the cost function as well as limits on the control effort. Here, the structure for <inline-formula id="inf54">
<mml:math id="m80">
<mml:mi mathvariant="script">Q</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf55">
<mml:math id="m81">
<mml:mi mathvariant="script">R</mml:mi>
</mml:math>
</inline-formula> has been chosen as diagonal. Furthermore, the diagonal terms for the joint inputs <inline-formula id="inf56">
<mml:math id="m82">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="script">R</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> are weighted equally. For <inline-formula id="inf57">
<mml:math id="m83">
<mml:mi mathvariant="script">Q</mml:mi>
</mml:math>
</inline-formula>, the entries corresponding to the velocities in <italic>x</italic> and <italic>y</italic> outweigh the other values, as it is desired to minimize velocity offsets dominantly. The resulting controller is then given by<disp-formula id="e27">
<mml:math id="m84">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3b4;</mml:mi>
<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:mi>n</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="bold">q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<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:mi>k</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>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(27)</label>
</disp-formula>where <inline-formula id="inf58">
<mml:math id="m85">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the LQR gain resulting for the <italic>n</italic>th model while the estimated state <inline-formula id="inf59">
<mml:math id="m86">
<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:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> from the IMM framework has been employed as the feedback variable for the controller. When tuned well, the LQR stabilization not only mitigates dynamic disturbances due to the elasticity of the cables during normal operation, but also dampens significant oscillations from cable breakage quickly. An additional beneficial effect from the LQR inclusion is observed, as even slackness after failure is more efficiently eliminated. Here, the kinematic solution provides a new equilibrium point, and the LQR inherently rushes the system to arrive at this new stable kinematic solution, thus significantly aiding in maintaining positive cable tensions. For the over-constrained (4-cable) and fully constrained (3-cable) rCDPR models, only <bold>
<italic>&#x3b8;</italic>
</bold>
<sub>0,<italic>n</italic>
</sub> is subject to LQR stabilization as this is enough to dampen perturbations in both <italic>x</italic>- and <italic>y</italic>-directions. For the under-constrained (2-cable) model, the redundant joints <bold>l</bold>
<sub>0,<italic>n</italic>
</sub> are also utilized to dampen disturbance components orthogonal to the cable direction.</p>
</sec>
<sec id="s5-5">
<title>5.5 Input mixing</title>
<p>The bank of controllers independently determine the next steady-state input for each failure mode. The bank of LQRs generate optimal joint inputs that are mixed with the weighting matrix to the plant model. The final mixed input gives precedence to the dominant working mode identified by the IMM. Due to this mixing, the final mixed input from this stage will always be subject to some perturbation. However, this perturbation is considered a reasonable trade-off to accommodate a solution that is robust and reliable during cable failure conditions.</p>
<p>The mixed joint input is applied to the dynamic model (plant) and the measurements of the end-effector state inform the state estimation and weight vector through the IMM. The complete algorithmic framework is described in <xref ref-type="fig" rid="F9">Figure&#xa0;9</xref>.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>LQR stabilization and input mixing.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g009.tif"/>
</fig>
</sec>
</sec>
<sec id="s6">
<title>6 Implementation and results</title>
<sec id="s6-1">
<title>6.1 Simulation framework</title>
<p>The plant model described in <xref ref-type="sec" rid="s3">Section&#xa0;3</xref> is perturbed with a process and measurement noise to mimic unmodeled dynamics. The cables are modeled as linear springs (where stiffness is a function of free cable length) with no mass and no sag, while all other model parameters are constants. Cable failure is modeled as a drop in cable stiffness to zero over a finite time. If the stiffness is zero, the cable can have no tension and thus has no impact on the platform dynamics. In addition, if the dynamic input to the system causes a situation where <italic>l</italic>
<sub>
<italic>c</italic>
</sub> &#x3e; <italic>l</italic>
<sub>
<italic>p</italic>
</sub>, the tension in the dynamic equation is set to zero to mimic cable sag. The plant dynamics and estimation run at a frequency of 1,000&#xa0;Hz while the closed loop LQR feedback is run at 50&#xa0;Hz. The feedforward kinematic model, which is the most computationally-intensive system, is run at 2&#xa0;Hz. The entire framework is modeled in MATLAB. The model parameters are given in <xref ref-type="table" rid="T1">Table&#xa0;1</xref>.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Dynamic Model Parameters.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Parameters</th>
<th align="left">Notation</th>
<th align="left">Value</th>
<th align="left">Units</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">End-effector dimensions</td>
<td align="left">
<italic>b</italic> &#xd7; <italic>h</italic>
</td>
<td align="left">0.16 &#xd7; 0.08</td>
<td align="left">
<italic>m</italic> &#xd7; <italic>m</italic>
</td>
</tr>
<tr>
<td align="left">Base Span</td>
<td align="left">
<italic>l</italic>
<sub>
<italic>b</italic>
</sub>
</td>
<td align="left">0.56</td>
<td align="left">
<italic>m</italic>
</td>
</tr>
<tr>
<td align="left">Mass</td>
<td align="left">
<italic>m</italic>
</td>
<td align="left">0.5</td>
<td align="left">
<italic>kg</italic>
</td>
</tr>
<tr>
<td align="left">Cable Stiffness Proportionality Constant</td>
<td align="left">
<italic>k</italic>
<sub>0</sub>
</td>
<td align="left">5</td>
<td align="left">
<italic>N</italic>
</td>
</tr>
<tr>
<td align="left">Surface friction coefficient</td>
<td align="left">
<italic>&#x3bc;</italic>
</td>
<td align="left">0.1</td>
<td align="left">-</td>
</tr>
<tr>
<td align="left">Gravitational constant</td>
<td align="left">
<italic>g</italic>
</td>
<td align="left">9.81</td>
<td align="left">
<italic>m</italic>/<italic>s</italic>
<sup>2</sup>
</td>
</tr>
<tr>
<td align="left">Minimum Cable Tension</td>
<td align="left">
<italic>&#x3c4;</italic>
<sub>
<italic>i</italic>
</sub>
</td>
<td align="left">0.5</td>
<td align="left">
<italic>N</italic>
</td>
</tr>
<tr>
<td align="left">Time period for cable failure</td>
<td align="left">&#x394;<italic>t</italic>
<sub>
<italic>f</italic>
</sub>
</td>
<td align="left">0.1</td>
<td align="left">
<italic>s</italic>
</td>
</tr>
<tr>
<td align="left">Process noise covariance</td>
<td align="left">
<italic>Q</italic>
</td>
<td align="left">
<inline-formula id="inf60">
<mml:math id="m87">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>10</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>
</td>
<td align="left">{<italic>m</italic>, <italic>rad</italic>, <italic>s</italic>}</td>
</tr>
<tr>
<td align="left">Measurement noise covariance</td>
<td align="left">
<italic>R</italic>
</td>
<td align="left">10<sup>&#x2212;5</sup>
<italic>I</italic>
<sub>3&#xd7;3</sub>
</td>
<td align="left">{<italic>m</italic>, <italic>rad</italic>}</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s6-2">
<title>6.2 Task recovery</title>
<p>
<xref ref-type="fig" rid="F10">Figure&#xa0;10</xref> demonstrates the application of the complete task recovery algorithm. The red trajectory shows the true path of the center of the end-effector while the green trajectory shows the desired path. The blue dots are the predefined waypoints. The failure of the first cable causes the end-effector to jump away from its current path, but the algorithm immediately responds by rearranging the remaining three winches and pulling the end-effector back. This breakaway from the trajectory and subsequent recovery with three cables is shown by the first kink in the red line part way through the trajectory in <xref ref-type="fig" rid="F10">Figure&#xa0;10B</xref>. The failure of the second cable and subsequent task recovery is seen further down the trajectory in <xref ref-type="fig" rid="F10">Figure&#xa0;10C</xref>.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Trajectory tracking and recovery after cable failure <bold>(A)</bold> No failures yet <bold>(B)</bold> After 1 cable fails <bold>(C)</bold> After 2 cables fail.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g010.tif"/>
</fig>
<p>The IMM correctly identifies the failure, mixing and switching the inputs as needed to automatically recover the trajectory tracking. In <xref ref-type="fig" rid="F11">Figure&#xa0;11</xref>, the weights vector correctly assigns the largest values to the current working mode. At the forty second mark, we can see that the weight vector has correctly identified the cable A failure, followed by the correct identification of the cable C failure at the 10&#xa0;s mark. The estimation error plots are in <xref ref-type="fig" rid="F12">Figure&#xa0;12</xref>.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>The weights denote the dominance of the corresponding cable failure case.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g011.tif"/>
</fig>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Estimation error over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g012.tif"/>
</fig>
<p>The robot is maintained at constant velocity throughout its trajectory (<xref ref-type="fig" rid="F13">Figure&#xa0;13</xref>). The desired velocity during trajectory tracking is 0.005&#xa0;m/s or 5&#xa0;mm/s which is a reasonable speed for the dimensions of the workspace. During recovery, the end-effector velocity is not a constraint, so the controller, mainly through the efforts of the LQR, attempts to move the end-effector as fast as dynamically feasible.</p>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>Desired and actual velocities at the end-effector.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g013.tif"/>
</fig>
<p>The trajectory error is minimized by the combined efforts of feedforward controller and the LQR. The banded regions in <xref ref-type="fig" rid="F14">Figure&#xa0;14</xref> represent sections where the robot is in recovery mode, attempting to minimize the trajectory error while compensating for the changes in slider and winch position.</p>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>Trajectory error over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g014.tif"/>
</fig>
<p>The robot does not enter singularities in the feedforward controller. <xref ref-type="fig" rid="F15">Figure&#xa0;15</xref> shows the plots of a single slider position (slider C) for the second motion model. In the example trajectory shown in <xref ref-type="fig" rid="F10">Figure&#xa0;10</xref> this model is weighted highest between the 40&#xa0;s and 80&#xa0;s timestamps. Thus the mixed output from the LQR, <bold>l</bold> begins to weight heavily in the favour of the control input <bold>l</bold>
<sub>0,2</sub> from model 2, while the true slider position <bold>l</bold>&#x2032; begins to catch up. When cable C breaks at the 80th second, this model begins to fall out of favor and the slider position deviates from this value.</p>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>Desired, true and measured slider positions over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g015.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F16">Figures&#xa0;16</xref>, <xref ref-type="fig" rid="F17">17</xref> depict the change in slider position and position angle of winch respectively. The shaded regions represent the failed state of the respective cable. The values of the slider and winch positions in these regions are perturbed by the combined attempts of the optimization to continue modulating this actuator and the weighted input mixing but has no effect on the end-effector as the corresponding cable is broken. This is seen clearly in the plots observing the true tension in the cables in <xref ref-type="fig" rid="F18">Figure&#xa0;18</xref>. The position values are not automatically settled to zero to account for cases where the cable failure may have been misidentified by the estimator.</p>
<fig id="F16" position="float">
<label>FIGURE 16</label>
<caption>
<p>Slider positions (<italic>l</italic>
<sub>
<italic>s</italic>
</sub>) over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g016.tif"/>
</fig>
<fig id="F17" position="float">
<label>FIGURE 17</label>
<caption>
<p>Winch positions (<italic>l</italic>
<sub>
<italic>c</italic>
</sub>) over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g017.tif"/>
</fig>
<fig id="F18" position="float">
<label>FIGURE 18</label>
<caption>
<p>True cable tensions (<italic>&#x3c4;</italic>) over time.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g018.tif"/>
</fig>
<p>A minimum value of pre-tension in the cables is maintained at 0.5&#xa0;N as a good practice to eliminate the chances of encountering cable slackness. This tension is seen to be maintained throughout the run with the minimum required tensions in the remaining cables to propagate the end-effector along the trajectory. This demonstrates that the tension minimization scheme is working well. When a cable snaps, there are brief moments of cable slackness while the tensions re-distribute as the sliders reposition themselves and the winches wind within their designed dynamics. These dynamics do not affect the steady-state input from the feedforward controller and thus the LQR bears the burden of recovery.</p>
<p>The redundancy resolution optimization for the slider positions maximizes the manipulability and wrench quality. In <xref ref-type="fig" rid="F19">Figure&#xa0;19</xref> we see these properties hold high values in the first two-thirds of the plot. These are the regions where the optimization-determined slider positions are actively applied. This optimization is no longer relevant for the two cable cases, where the slider position instead functions to replace the lost degree of freedom.</p>
<fig id="F19" position="float">
<label>FIGURE 19</label>
<caption>
<p>Maximizing workspace quality and manipulability.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g019.tif"/>
</fig>
</sec>
<sec id="s6-3">
<title>6.3 Comparison study</title>
<p>For completeness, this section compares the results of the previous section with a feedforward controller applied directly on the system without the LQR. The update rate of the feedforward controller is 50&#xa0;Hz and all other parameters are kept the same. The trajectory results are presented in <xref ref-type="fig" rid="F20">Figure&#xa0;20</xref>.</p>
<fig id="F20" position="float">
<label>FIGURE 20</label>
<caption>
<p>Trajectory tracking and recovery without LQR for oscillation damping.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g020.tif"/>
</fig>
<p>The trajectory error plot in <xref ref-type="fig" rid="F21">Figure&#xa0;21</xref> indicates that the oscillations do eventually dampen and the kinematic controller is generally successful after this due to the slow velocities at the end-effector.</p>
<fig id="F21" position="float">
<label>FIGURE 21</label>
<caption>
<p>Trajectory error for the case without LQR for oscillation damping.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g021.tif"/>
</fig>
<p>The cable breakage causes the end-effector to swing causing periodic slackness in the cable tensions (<xref ref-type="fig" rid="F22">Figure&#xa0;22</xref>).</p>
<fig id="F22" position="float">
<label>FIGURE 22</label>
<caption>
<p>Cable tension for the case without LQR for oscillation damping.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g022.tif"/>
</fig>
<p>The estimation depends solely on the end-effector measurements, so it is unaffected by the controller dynamics as seen in <xref ref-type="fig" rid="F23">Figure&#xa0;23</xref>.</p>
<fig id="F23" position="float">
<label>FIGURE 23</label>
<caption>
<p>Model identification is unaffected.</p>
</caption>
<graphic xlink:href="frobt-10-1070627-g023.tif"/>
</fig>
</sec>
</sec>
<sec sec-type="discussion" id="s7">
<title>7 Discussions</title>
<p>In this work we create an end-to-end control and estimation framework to simultaneously accomplish cable failure diagnosis and detection and cable failure tolerant control through the utilization of an interactive multi-model adaptive estimation algorithm and a bank of controllers to provide the mixed inputs. This framework is applied on a planar reconfigurable cable driven parallel robot (rCDPR); a CDPR with the ability to geometrically reconfigure its cable winch attachment points through the utilization of linear sliders. We are able to create a system that is (i) automatic: it does not require the faulty actuators to register a fault during the event of a cable failure; (ii) robust; although it requires only measurement data from the end-effector to estimate the correct failure state, this data can be quite noisy and the models utilized in the filters do not need to be perfect (iii) reliable; when the correct failure state is weighed higher, the corresponding inputs associated with this state have a higher impact on the inputs to the system which improves the overall estimate. However, if an incorrect state is weighed high, the corresponding inputs will create dynamics that do not match the expected system profile which allows the correct state to eventually be identified. In addition, the inclusion of the waypoint following algorithm ensures that the robot always reconnects with the trajectory at the approximate location where it deviated. The utilization of a feedforward controller over a dynamic feedback control helps improve the overall stability of the system. In addition, since the feedforward framework does not require the current state of the system, it can also be designed to be an offline controller that can help improve computation times and realize a real-time control system. The LQR feedback controller ensures not only that the robot dynamics due to elasticity during normal operation are minimized but also attempts to reconfigure the system as quickly as possible when a failure mode is estimated. Although the input mixing at this stage can cause some perturbation at the end-effector, this effect is considered a reasonable trade-off for the overall advantages of dynamic stabilization that the controller offers.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s8">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/Supplementary Material, further inquiries can be directed to the corresponding author.</p>
</sec>
<sec id="s9">
<title>Author contributions</title>
<p>MS provided the conceptualization and the theoretical framework for the research presented in this work and supervised its development. AR modelled the system, performed the coding, analyses and development of the complete control framework. VK and IW served as advisors to AR, supervised the alignment of the presented work with the larger context of the underlying NSF project and contributed equally towards the funding of this research. All authors provided frequent intellectual feedback and approved the paper for publication.</p>
</sec>
<sec id="s10">
<title>Funding</title>
<p>This work is supported in part by the U.S. National Science Foundation under NRI grant 1924721.</p>
</sec>
<sec sec-type="COI-statement" id="s11">
<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="s12">
<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>
<sec id="s13">
<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.2023.1070627/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/frobt.2023.1070627/full&#x23;supplementary-material</ext-link>
</p>
<supplementary-material xlink:href="Video1.MP4" id="SM1" mimetype="application/MP4" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Baklouti</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Courteille</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Lemoine</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Caro</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Input shaping for feed-forward control of cable-driven parallel robots</article-title>. <source>J. Dyn. Syst. Meas. Control</source> <volume>143</volume>. <pub-id pub-id-type="doi">10.1115/1.4048354</pub-id>
</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Begey</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Cuvillon</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Lesellier</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Gouttefarde</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Gangloff</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Dynamic control of parallel robots driven by flexible cables and actuated by position-controlled winches</article-title>. <source>IEEE Trans. Robotics</source> <volume>35</volume>, <fpage>286</fpage>&#x2013;<lpage>293</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2018.2875415</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Blom</surname>
<given-names>H. A.</given-names>
</name>
<name>
<surname>Bar-Shalom</surname>
<given-names>Y.</given-names>
</name>
</person-group> (<year>1988</year>). <article-title>The interacting multiple model algorithm for systems with markovian switching coefficients</article-title>. <source>IEEE Trans. Automatic Control</source> <volume>33</volume>, <fpage>780</fpage>&#x2013;<lpage>783</lpage>. <pub-id pub-id-type="doi">10.1109/9.1299</pub-id>
</citation>
</ref>
<ref id="B4">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Bosscher</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Ebert-Uphoff</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2004</year>). <article-title>Wrench-based analysis of cable-driven robots</article-title>. In <source>IEEE international conference on robotics and automation, 2004. Proceedings. ICRA&#x2019;04. 2004</source> (<publisher-name>IEEE</publisher-name>), <volume>5</volume>, <fpage>4950</fpage>&#x2013;<lpage>4955</lpage>.</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bosscher</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Riechel</surname>
<given-names>A. T.</given-names>
</name>
<name>
<surname>Ebert-Uphoff</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Wrench-feasible workspace generation for cable-driven robots</article-title>. <source>IEEE Trans. Robotics</source> <volume>22</volume>, <fpage>890</fpage>&#x2013;<lpage>902</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2006.878967</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Bouchard</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Gosselin</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Moore</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2010</year>). <source>On the ability of a cable-driven robot to generate a prescribed set of wrenches</source>.</citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Boumann</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Bruckmann</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>Simulation and model-based verification of an emergency strategy for cable failure in cable robots</article-title>. <source>
<italic>Actuators</italic> (MDPI)</source> <volume>11</volume>, <fpage>56</fpage>. <pub-id pub-id-type="doi">10.3390/act11020056</pub-id>
</citation>
</ref>
<ref id="B8">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Caro</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Merlet</surname>
<given-names>J.-P.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Failure analysis of a collaborative 4-1 cable-driven parallel robot</article-title>,&#x201d; in <source>European conference on mechanism science</source> (<publisher-name>Springer</publisher-name>), <fpage>440</fpage>&#x2013;<lpage>447</lpage>.</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Caverly</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Forbes</surname>
<given-names>J. R.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>State estimator design for a single degree of freedom cable-actuated system</article-title>. <source>J. Frankl. Inst.</source> <volume>353</volume>, <fpage>4845</fpage>&#x2013;<lpage>4869</lpage>. <pub-id pub-id-type="doi">10.1016/j.jfranklin.2016.08.015</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Chen</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Hutchinson</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Dellaert</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2022</year>). <source>Locally optimal estimation and control of cable driven parallel robots using time varying linear quadratic Gaussian control</source>. <comment>
<italic>arXiv preprint arXiv:2208.00916</italic>
</comment>.</citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gagliardini</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Caro</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Gouttefarde</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Girin</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Discrete reconfiguration planning for cable-driven parallel robots</article-title>. <source>Mech. Mach. Theory</source> <volume>100</volume>, <fpage>313</fpage>&#x2013;<lpage>337</lpage>. <pub-id pub-id-type="doi">10.1016/j.mechmachtheory.2016.02.014</pub-id>
</citation>
</ref>
<ref id="B12">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Gill</surname>
<given-names>J. S.</given-names>
</name>
<name>
<surname>Pisu</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V. N.</given-names>
</name>
<name>
<surname>Schmid</surname>
<given-names>M. J.</given-names>
</name>
</person-group> (<year>2019</year>)., <volume>59155</volume>. <publisher-name>American Society of Mechanical Engineers (ASME)</publisher-name>, <fpage>V002T25A004</fpage>.<article-title>Behavior identification and prediction for a probabilistic risk framework</article-title>
<source>Dyn. Syst. Control Conf.</source>
</citation>
</ref>
<ref id="B13">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Gill</surname>
<given-names>J. S.</given-names>
</name>
</person-group> (<year>2019</year>). <source>Probabilistic framework for behavior characterization of traffic participants enabling long term prediction</source>. <publisher-name>Ph.D. thesis</publisher-name>, <publisher-name>Clemson University</publisher-name>.</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hill</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Gadsden</surname>
<given-names>S. A.</given-names>
</name>
<name>
<surname>Biglarbegian</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Explicit nonlinear mpc for fault tolerance using interacting multiple models</article-title>. <source>IEEE Trans. Aerosp. Electron. Syst.</source> <volume>57</volume>, <fpage>2784</fpage>&#x2013;<lpage>2794</lpage>. <pub-id pub-id-type="doi">10.1109/taes.2021.3065089</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Id&#xe0;</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Briot</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Carricato</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Natural oscillations of underactuated cable-driven parallel robots</article-title>. <source>IEEE Access</source> <volume>9</volume>, <fpage>71660</fpage>&#x2013;<lpage>71672</lpage>. <pub-id pub-id-type="doi">10.1109/access.2021.3071014</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Korayem</surname>
<given-names>M. H.</given-names>
</name>
<name>
<surname>Yousefzadeh</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Beyranvand</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Dynamics and control of a 6-dof&#xa0;cable-driven parallel robot with visco-elastic cables in presence of measurement noise</article-title>. <source>J. Intelligent Robotic Syst.</source> <volume>88</volume>, <fpage>73</fpage>&#x2013;<lpage>95</lpage>. <pub-id pub-id-type="doi">10.1007/s10846-017-0546-1</pub-id>
</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Korayem</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Yousefzadeh</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Kian</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Precise end-effector pose estimation in spatial cable-driven parallel robots with elastic cables using a data fusion method</article-title>. <source>Measurement</source> <volume>130</volume>, <fpage>177</fpage>&#x2013;<lpage>190</lpage>. <pub-id pub-id-type="doi">10.1016/j.measurement.2018.08.009</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kosari</surname>
<given-names>S. N.</given-names>
</name>
<name>
<surname>Ramadurai</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Chizeck</surname>
<given-names>H. J.</given-names>
</name>
<name>
<surname>Hannaford</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2013</year>)., <volume>55935</volume>. <publisher-name>American Society of Mechanical Engineers (ASME)</publisher-name>, <fpage>V06AT07A077</fpage>.<article-title>Control and tension estimation of a cable driven mechanism under different tensions</article-title>
<source>Int. Des. Eng. Tech. Conf. Comput. Inf. Eng. Conf.</source>
</citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Le Nguyen</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Caverly</surname>
<given-names>R. J.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Cable-driven parallel robot pose estimation using extended kalman filtering with inertial payload measurements</article-title>. <source>IEEE Robotics Automation Lett.</source> <volume>6</volume>, <fpage>3615</fpage>&#x2013;<lpage>3622</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2021.3064502</pub-id>
</citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Maciejewski</surname>
<given-names>A. A.</given-names>
</name>
</person-group> (<year>1990</year>). <article-title>Fault tolerant properties of kinematically redundant manipulators</article-title>. <source>IEEE Int. Conf. Robotics Automation</source>, <fpage>638</fpage>&#x2013;<lpage>642</lpage>.</citation>
</ref>
<ref id="B21">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mazor</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Averbuch</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Bar-Shalom</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Dayan</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1998</year>). <article-title>Interacting multiple model methods in target tracking: A survey</article-title>. <source>IEEE Trans. Aerosp. Electron. Syst.</source> <volume>34</volume>, <fpage>103</fpage>&#x2013;<lpage>123</lpage>. <pub-id pub-id-type="doi">10.1109/7.640267</pub-id>
</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Notash</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Failure recovery for wrench capability of wire-actuated parallel manipulators</article-title>. <source>Robotica</source> <volume>30</volume>, <fpage>941</fpage>&#x2013;<lpage>950</lpage>. <pub-id pub-id-type="doi">10.1017/s0263574711001160</pub-id>
</citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Notash</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>Motion recovery after joint failure in parallel manipulators</article-title>. <source>Trans. Can. Soc. Mech. Eng.</source> <volume>35</volume>, <fpage>559</fpage>&#x2013;<lpage>571</lpage>. <pub-id pub-id-type="doi">10.1139/tcsme-2011-0034</pub-id>
</citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Passarini</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Zanotto</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Boschetti</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Dynamic trajectory planning for failure recovery in cable-suspended camera systems</article-title>. <source>J. Mech. Robotics</source> <volume>11</volume>. <pub-id pub-id-type="doi">10.1115/1.4041942</pub-id>
</citation>
</ref>
<ref id="B25">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Picard</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Tahoumi</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Plestan</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Caro</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Claveau</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>A new control scheme of cable-driven parallel robot balancing between sliding mode and linear feedback</article-title>. <source>IFAC-PapersOnLine</source> <volume>53</volume>, <fpage>9936</fpage>&#x2013;<lpage>9943</lpage>. <pub-id pub-id-type="doi">10.1016/j.ifacol.2020.12.2708</pub-id>
</citation>
</ref>
<ref id="B26">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Pott</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Bruckmann</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2013</year>). <source>Cable-driven parallel robots</source>. <publisher-name>Springer</publisher-name>.</citation>
</ref>
<ref id="B27">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Raman</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Schmid</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V. N.</given-names>
</name>
</person-group> (<year>2021</year>). &#x201c;<article-title>Wrench analysis of kinematically redundant planar cdprs</article-title>,&#x201d; in <source>International conference on cable-driven parallel robots</source> (<publisher-name>Springer</publisher-name>), <fpage>90</fpage>&#x2013;<lpage>104</lpage>.</citation>
</ref>
<ref id="B28">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Raman</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Schmid</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V.</given-names>
</name>
</person-group> (<year>2020</year>)., <volume>83990</volume>. <publisher-name>American Society of Mechanical Engineers (ASME)</publisher-name>, <fpage>V010T10A054</fpage>.<article-title>Stiffness modulation for a planar mobile cable-driven parallel manipulators via structural reconfiguration</article-title>
<source>Int. Des. Eng. Tech. Conf. Comput. Inf. Eng. Conf.</source>
</citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Raman</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Walker</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Schmid</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2022</year>). <article-title>A failure identification and recovery framework for a planar reconfigurable cable driven parallel robot</article-title>. <source>IFAC-PapersOnLine</source> <volume>55</volume>, <fpage>369</fpage>&#x2013;<lpage>375</lpage>. <pub-id pub-id-type="doi">10.1016/j.ifacol.2022.11.211</pub-id>
</citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rasheed</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>
<italic>Collaborative mobile cable-driven parallel robots</italic>. Ph.D. Thesis, &#xe9;cole centrale de Nantes</article-title>
</citation>
</ref>
<ref id="B31">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Roberts</surname>
<given-names>R. G.</given-names>
</name>
<name>
<surname>Graham</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Lippitt</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>1998</year>). <article-title>On the inverse kinematics, statics, and fault tolerance of cable-suspended robots</article-title>. <source>J. Robotic Syst.</source> <volume>15</volume>, <fpage>581</fpage>&#x2013;<lpage>597</lpage>. <pub-id pub-id-type="doi">10.1002/(sici)1097-4563(199810)15:10&#x3c;581::aid-rob4&#x3e;3.0.co;2-p</pub-id>
</citation>
</ref>
<ref id="B32">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Srivastava</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ammons</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Peerzada</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Rangaraju</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Walker</surname>
<given-names>I. D.</given-names>
</name>
</person-group> (<year>2022</year>). &#x201c;<article-title>3d printing of concrete with a continuum robot hose using variable curvature kinematics</article-title>,&#x201d; in <source>
<italic>IEEE international Conference on Robotics and automation (ICRA)</italic> (IEEE)</source>.</citation>
</ref>
<ref id="B33">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Tudoroiu</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Khorasani</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2005</year>). &#x201c;<article-title>Fault detection and diagnosis for satellite&#x2019;s attitude control system (acs) using an interactive multiple model (imm) approach</article-title>,&#x201d; in <source>Proceedings of 2005 IEEE conference on control applications, 2005. CCA 2005</source> (<publisher-name>IEEE</publisher-name>), <fpage>1287</fpage>&#x2013;<lpage>1292</lpage>.</citation>
</ref>
<ref id="B34">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Verhoeven</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2006</year>). <source>Analysis of the workspace of tendon based Stewart platforms</source>. <comment>Ph.D. thesis, Duisburg, Essen</comment>. <publisher-name>University of Druisburg-Essen</publisher-name>.</citation>
</ref>
<ref id="B35">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Visinsky</surname>
<given-names>M. L.</given-names>
</name>
<name>
<surname>Cavallaro</surname>
<given-names>J. R.</given-names>
</name>
<name>
<surname>Walker</surname>
<given-names>I. D.</given-names>
</name>
</person-group> (<year>1994</year>). <article-title>Robotic fault detection and fault tolerance: A survey</article-title>. <source>Reliab. Eng. Syst. Saf.</source> <volume>46</volume>, <fpage>139</fpage>&#x2013;<lpage>158</lpage>. <pub-id pub-id-type="doi">10.1016/0951-8320(94)90132-5</pub-id>
</citation>
</ref>
<ref id="B36">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Walker</surname>
<given-names>I. D.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V. N.</given-names>
</name>
<name>
<surname>Peerzada</surname>
<given-names>A. B.</given-names>
</name>
<name>
<surname>Raman</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Rangaraju</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Schmid</surname>
<given-names>M. J.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>3d concrete printing with macro-micro robots</article-title>. In <source>Proceedings of the future technologies conference (FTC) 2022</source>, <volume>3</volume> (<publisher-name>Springer</publisher-name>), <fpage>493</fpage>&#x2013;<lpage>498</lpage>.</citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xiong</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Cao</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Zeng</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Huang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Diao</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Lu</surname>
<given-names>W.</given-names>
</name>
<etal/>
</person-group> (<year>2022</year>). <article-title>Real-time reconfiguration planning for the dynamic control of reconfigurable cable-driven parallel robots</article-title>. <source>J. Mech. Robotics</source> <volume>14</volume>, <fpage>061008</fpage>. <pub-id pub-id-type="doi">10.1115/1.4055255</pub-id>
</citation>
</ref>
<ref id="B38">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Yoshikawa</surname>
<given-names>T.</given-names>
</name>
</person-group> (<year>1985</year>). <article-title>Manipulability of robotic mechanisms</article-title>. <source>Int. J. Robotics Res.</source> <volume>4</volume>, <fpage>3</fpage>&#x2013;<lpage>9</lpage>. <pub-id pub-id-type="doi">10.1177/027836498500400201</pub-id>
</citation>
</ref>
<ref id="B39">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Zhou</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Jun</surname>
<given-names>S.-k.</given-names>
</name>
<name>
<surname>Krovi</surname>
<given-names>V.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Stiffness modulation exploiting configuration redundancy in mobile cable robots</article-title>,&#x201d; in <source>2014 IEEE international conference on robotics and automation (ICRA)</source> (<publisher-name>IEEE</publisher-name>), <fpage>5934</fpage>&#x2013;<lpage>5939</lpage>.</citation>
</ref>
</ref-list>
</back>
</article>