<?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">742986</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2021.742986</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>Encouraging Volitional Pedaling in Functional Electrical Stimulation-Assisted Cycling Using Barrier Functions</article-title>
<alt-title alt-title-type="left-running-head">Isaly et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Encouraging Pedaling with Barrier Functions</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Isaly</surname>
<given-names>Axton</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/1266045/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Allen</surname>
<given-names>Brendon C.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Sanfelice</surname>
<given-names>Ricardo G.</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Dixon</surname>
<given-names>Warren E.</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<uri xlink:href="https://loop.frontiersin.org/people/477195/overview"/>
</contrib>
</contrib-group>
<aff id="aff1">
<label>
<sup>1</sup>
</label>Department of Mechanical and Aerospace Engineering, University of Florida, <addr-line>Gainesville</addr-line>, <addr-line>FL</addr-line>, <country>United&#x20;States</country>
</aff>
<aff id="aff2">
<label>
<sup>2</sup>
</label>Department of Electrical and Computer Engineering, University of California, Santa Cruz, <addr-line>Santa Cruz</addr-line>, <addr-line>CA</addr-line>, <country>United&#x20;States</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/828554/overview">Zhen Kan</ext-link>, University of Science and Technology of China, China</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/191261/overview">Nitin Sharma</ext-link>, North Carolina State University, United&#x20;States</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1465707/overview">Chaozhe He</ext-link>, University of Michigan, United&#x20;States</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Axton Isaly, <email>axtonisaly1013@ufl.edu</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Robotic Control Systems, a section of the journal Frontiers in Robotics and&#x20;AI</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>24</day>
<month>11</month>
<year>2021</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>8</volume>
<elocation-id>742986</elocation-id>
<history>
<date date-type="received">
<day>17</day>
<month>07</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>27</day>
<month>09</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2021 Isaly, Allen, Sanfelice and Dixon.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Isaly, Allen, Sanfelice and Dixon</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these&#x20;terms.</p>
</license>
</permissions>
<abstract>
<p>Stationary motorized cycling assisted by functional electrical stimulation (FES) is a popular therapy for people with movement impairments. Maximizing volitional contributions from the rider of the cycle can lead to long-term benefits like increased muscular strength and cardiovascular endurance. This paper develops a combined motor and FES control system that tasks the rider with maintaining their cadence near a target point using their own volition, while assistance or resistance is applied gradually as their cadence approaches the lower or upper boundary, respectively, of a user-defined safe range. Safety-ensuring barrier functions are used to guarantee that the rider&#x2019;s cadence is constrained to the safe range, while minimal assistance is provided within the range to maximize effort by the rider. FES stimulation is applied before electric motor assistance to further increase power output from the rider. To account for uncertain dynamics, barrier function methods are combined with robust control tools from Lyapunov theory to develop controllers that guarantee safety in the worst-case. Because of the intermittent nature of FES stimulation, the closed-loop system is modeled as a hybrid system to certify that the set of states for which the cadence is in the safe range is asymptotically stable. The performance of the developed control method is demonstrated experimentally on five participants. The barrier function controller constrained the riders&#x2019; cadence in a range of 50&#x20;&#xb1; 5 RPM with an average cadence standard deviation of 1.4 RPM for a protocol where cadence with minimal variance was prioritized and used minimal assistance from the motor (4.1% of trial duration) in a separate protocol where power output from the rider was prioritized.</p>
</abstract>
<kwd-group>
<kwd>functional electrical stimulation (FES</kwd>
<kwd>) cycling</kwd>
<kwd>barrier function</kwd>
<kwd>safety-critical</kwd>
<kwd>euler-Lagrange</kwd>
<kwd>control design</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Stationary cycling assisted by functional electrical stimulation (FES) can lead to long-term benefits for people with movement impairments due to neurological conditions such as stroke, spinal cord injury, traumatic brain injury, cerebral palsy, multiple sclerosis, and others <xref ref-type="bibr" rid="B19">Johnston et&#x20;al. (2008)</xref>; <xref ref-type="bibr" rid="B10">Ferrante et&#x20;al. (2008)</xref>; <xref ref-type="bibr" rid="B15">Hooker et&#x20;al. (1992)</xref>; <xref ref-type="bibr" rid="B18">Janssen et&#x20;al. (2008)</xref>; <xref ref-type="bibr" rid="B30">Trevisi et&#x20;al. (2012)</xref>. Individuals with neurological conditions can exhibit varying degrees of muscle control. For people with little to no volitional control, the FES cycling therapy must be supported by an electric motor, which provides additional torque about the pedal crank to maintain a beneficial cadence, as in studies such as <xref ref-type="bibr" rid="B6">Cousin et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B15">Hooker et&#x20;al. (1992)</xref>; <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>; <xref ref-type="bibr" rid="B9">Duenas et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B30">Trevisi et&#x20;al. (2012)</xref>. When possible, electric motor support should be minimized in lieu of torque produced by the rider&#x2019;s muscles via either FES or their own volition, which leads to higher intensity training by increasing the rider&#x2019;s heart rate and oxygen uptake <xref ref-type="bibr" rid="B15">Hooker et&#x20;al. (1992)</xref>. Higher intensity training is a key factor in attaining long-term outcomes like increased muscular strength, cardiovascular endurance, bone mineral density, and caloric consumption <xref ref-type="bibr" rid="B25">Ouellette et&#x20;al. (2004)</xref>; <xref ref-type="bibr" rid="B22">MacKay-Lyons and Makrides (2002)</xref>; <xref ref-type="bibr" rid="B24">Mohr et&#x20;al. (1997)</xref>. In the rehabilitation literature outside of cycling, various assist-as-needed approaches such as <xref ref-type="bibr" rid="B3">Asl et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B7">Dao and Yamamoto (2018)</xref>; <xref ref-type="bibr" rid="B26">Pehlivan et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B8">Ding et&#x20;al. (2014)</xref> encourage volitional contributions from the user. Relatively few works have investigated FES- and motor-assisted cycling programs where the primary objective is to encourage volitional contributions <xref ref-type="bibr" rid="B14">Harrington et&#x20;al. (2012)</xref>; <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B20">Johnston and Wainwright (2011)</xref>. The objective of this work is to design controllers for both the electric motor and FES stimulation that facilitate volitional cycling by minimizing machine assistance while ensuring that the rider&#x2019;s cadence is constrained to a user-defined&#x20;range.</p>
<p>The kinematics of the rider&#x2019;s legs during stationary cycling are such that applying FES to their muscles produces non-negligible torque only in certain regions of the crank cycle. To maximize torque production, stimulation patterns often feature discontinuous jumps triggered as a function of the crank angle by discrete logic variables. The interaction of the resulting continuous-time and discrete dynamics results in a hybrid control system. Barrier functions, or control barrier functions (CBF), can be used to design controllers for hybrid systems that ensure safety by rendering sets of states either forward invariant or asymptotically stable <xref ref-type="bibr" rid="B1">Ames et&#x20;al. (2019)</xref>; <xref ref-type="bibr" rid="B23">Maghenem and Sanfelice (2021)</xref>; <xref ref-type="bibr" rid="B12">Glotfelter et&#x20;al. (2017)</xref>. This technique builds on ideas from the theory of control Lyapunov functions (CLF). CLFs are used to enforce particular constraints on the control input that result in a decrease in a Lyapunov function for states outside of the safe set <xref ref-type="bibr" rid="B11">Freeman and Kokotovic (1996)</xref>; <xref ref-type="bibr" rid="B29">Sanfelice (2013)</xref>. However, CLF-based approaches have typically not provided constructive methods for designing the control input at states in the safe set. Recent developments regarding CBFs have filled this gap by providing a systematic approach for extending the input constraints onto the safe set in a way that reduces the control effort on the interior of the set <xref ref-type="bibr" rid="B2">Ames et&#x20;al. (2016)</xref>. A popular approach for implementing CLF- or CBF-induced input constraints is with pointwise optimal control laws which, for certain classes of dynamics, take the form of quadratic programs (QP). Compared to past assist-as-needed control schemes, which have used methods such as deadzone functions <xref ref-type="bibr" rid="B3">Asl et&#x20;al. (2020)</xref> or impedance control <xref ref-type="bibr" rid="B8">Ding et&#x20;al. (2014)</xref>, barrier functions can constrain the state within a broader class of safe sets. Moreover, the cost function in the accompanying pointwise optimal control law is customizable, leading to a range of possible controllers. Our preliminary work in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> integrated zeroing CBFs with robust control tools from Lyapunov theory to synthesize a QP for an uncertain, continuous-time, motor-only cycling system. The controller in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> constrains the rider&#x2019;s cadence within a user-defined range while encouraging volitional pedaling by using minimal motor control effort. However, the more complex case where the rider is also stimulated by FES was not considered.</p>
<p>In this work, we extend the development of <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> to account for the hybrid dynamics introduced by adding FES stimulation. The resulting controller applies assistance based on the rider&#x2019;s performance. FES assistance is only applied when the cadence cannot be maintained at a target value through volitional effort alone. Similarly, assistance from the electric motor is applied only when the combined FES and volitional efforts are insufficient. The controller accommodates a broad range of functional impairments and volitional ability by featuring customizable parameters, including nominal control inputs and tunable width of the safe range. Moreover, the rider&#x2019;s safety is assured because the electric motor constrains the rider&#x2019;s cadence to a uniformly globally asymptotically stable set through a continuous feedback controller. The continuity of the motor control law is an improvement upon the breakthrough strategy in <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref> for encouraging volitional pedaling. In that work, no control effort was applied within a user-defined region, while the electric motor and FES were turned on discontinuously at the boundary of the region. Outside the region, assistive control effort switched discretely between FES and electric motor assistance to ensure that the electric motor did not prevent FES from inducing power output by the rider. In contrast, we decouple the motor and FES controllers and use more sophisticated design tools to develop a motor control law that is a continuous function of the cadence tracking error. The result is more comfortable training for the rider, while the staggered application of FES before motor effort still allows power output from the rider to be prioritized.</p>
<p>Experimental trials were performed on five able-bodied participants to demonstrate the effectiveness and versatility of the developed control system. The barrier function controller was shown to effectively constrain the cadence to a range of 50&#x20;&#xb1; 5 RPM for all but a negligible amount of time, and to outperform the controller in <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref> and uncontrolled volitional pedaling for a protocol where minimal cadence variation was prioritized. The barrier function controller had a lower cadence standard deviation (Avg. 1.4 RPM) and constrained the cadence to a smaller range relative to the comparison cases, but generally produced more assistive torque from the motor than the controller in <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref>. To show how motor assistance can be reduced to prioritize power output from the rider, an alternative protocol was designed where the customizable parameters were configured with a wider safe range and a nominal amount of resistance from the motor. In the alternative trial, the motor was producing assistive torque for only 4.1% of the entire trial duration.</p>
</sec>
<sec id="s2">
<title>2 Dynamic Model</title>
<sec id="s2-1">
<title>2.1 Hybrid Systems</title>
<p>The development in this work is based on the hybrid systems framework described in <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>. A hybrid system <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi mathvariant="script">H</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>F</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> with state <inline-formula id="inf2">
<mml:math id="m2">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>&#x2282;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is modeled by<disp-formula id="e1">
<mml:math id="m3">
<mml:mi mathvariant="script">H</mml:mi>
<mml:mo>:</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>F</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>C</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(1)</label>
</disp-formula>
</p>
<p>When the state is in the flow set <inline-formula id="inf3">
<mml:math id="m4">
<mml:mi>C</mml:mi>
<mml:mo>&#x2282;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, it is allowed to evolve continuously according to the set-valued flow map <inline-formula id="inf4">
<mml:math id="m5">
<mml:mi>F</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x21c9;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. When the state is in the jump set <inline-formula id="inf5">
<mml:math id="m6">
<mml:mi>D</mml:mi>
<mml:mo>&#x2282;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, it is allowed to change discretely according to the jump map <inline-formula id="inf6">
<mml:math id="m7">
<mml:mi>G</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x21c9;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. When x &#x2208; C &#x2229; D, either behavior is possible. The notion of a solution to <inline-formula id="inf7">
<mml:math id="m8">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is defined precisely in <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, Def. 2.6. Briefly, a solution to <inline-formula id="inf8">
<mml:math id="m9">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is a function <inline-formula id="inf9">
<mml:math id="m10">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x21a6;</mml:mo>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> defined on a hybrid time domain <inline-formula id="inf10">
<mml:math id="m11">
<mml:mtext>dom</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x2282;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="double-struck">N</mml:mi>
</mml:math>
</inline-formula> and is parameterized by the ordinary time variable <inline-formula id="inf11">
<mml:math id="m12">
<mml:mi>t</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and the discrete jump variable <inline-formula id="inf12">
<mml:math id="m13">
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">N</mml:mi>
</mml:math>
</inline-formula>. The set-valued mappings F and G map points in <inline-formula id="inf13">
<mml:math id="m14">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> to subsets of <inline-formula id="inf14">
<mml:math id="m15">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> so that, for example, the inclusion <inline-formula id="inf15">
<mml:math id="m16">
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> represents the fact that if a trajectory jumps from the state <inline-formula id="inf16">
<mml:math id="m17">
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, then its state <inline-formula id="inf17">
<mml:math id="m18">
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> at the next discrete time instant is a point in the set <inline-formula id="inf18">
<mml:math id="m19">
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>.</p>
<p>Remark 1. Previous results (cf. <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>; <xref ref-type="bibr" rid="B28">Rouse et&#x20;al. (2021)</xref>) have analyzed the dynamic model in the subsequent section using switched-systems tools. The decision to use a hybrid model here was motivated by the fact that forward invariance via barrier functions is not well characterized for switched systems, nor are many results available regarding the stability of noncompact sets. Hybrid systems can model broad classes of switched systems <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012</xref>, Section&#x20;2.4).</p>
</sec>
<sec id="s2-2">
<title>2.2&#x20;Open-Loop Dynamics</title>
<p>Analogous to <xref ref-type="disp-formula" rid="e1">Eq. 1</xref>, one can also consider hybrid systems with inputs <xref ref-type="bibr" rid="B29">Sanfelice (2013)</xref>. We use such a system to describe the control design but present our stability analysis in terms of a closed-loop system with the form in <xref ref-type="disp-formula" rid="e1">Eq. 1</xref>. The open-loop cycle-rider system is modeled as a continuous-time system <inline-formula id="inf19">
<mml:math id="m20">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Subsequently, discrete dynamics will be introduced due to the design of the controller. Adapting the model from our previous work in <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref> and <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref>, the cycle&#x2019;s Euler-Lagrange dynamics are modeled using the flow map<disp-formula id="e2">
<mml:math id="m21">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml: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:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(2)</label>
</disp-formula>and flow set <inline-formula id="inf20">
<mml:math id="m22">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x225c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
</mml:math>
</inline-formula>. In <xref ref-type="disp-formula" rid="e2">(2)</xref>, the state is <inline-formula id="inf21">
<mml:math id="m23">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where z<sub>1</sub> denotes the cycle&#x2019;s measurable crank angle, and z<sub>2</sub> is the calculable angular velocity (equivalently, the rider&#x2019;s cadence). The system has control inputs<xref ref-type="fn" rid="fn1">
<sup>1</sup>
</xref> <inline-formula id="inf22">
<mml:math id="m24">
<mml:mi>u</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where <inline-formula id="inf23">
<mml:math id="m25">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is the current input to the cycle&#x2019;s electric motor, and <inline-formula id="inf24">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is a vector of the electrical stimulation intensity inputs <inline-formula id="inf25">
<mml:math id="m27">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, for each muscle <inline-formula id="inf26">
<mml:math id="m28">
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>L</mml:mi>
<mml:mi>Q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>L</mml:mi>
<mml:mi>H</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>Q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>G</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>R</mml:mi>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. The elements of <inline-formula id="inf27">
<mml:math id="m29">
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula> indicate the quadriceps femoris (Q), gluteal (G), and hamstring (H) muscle groups for the left and right legs, respectively. The control inputs take values in the set <inline-formula id="inf28">
<mml:math id="m30">
<mml:mi mathvariant="script">U</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, where <inline-formula id="inf29">
<mml:math id="m31">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x225c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2282;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> indicates that the muscle control inputs are bounded by the constant <inline-formula id="inf30">
<mml:math id="m32">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> for the rider&#x2019;s safety and comfort. The continuously differentiable function <inline-formula id="inf31">
<mml:math id="m33">
<mml:mi>M</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> denotes the inertial forces from the cycle and rider&#x2019;s legs. The set-valued mapping <inline-formula id="inf32">
<mml:math id="m34">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> defines the dynamics of the system as<disp-formula id="e3">
<mml:math id="m35">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(3)</label>
</disp-formula>where <inline-formula id="inf33">
<mml:math id="m36">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> denotes the unknown torque due to viscous damping in the cycle, and <inline-formula id="inf34">
<mml:math id="m37">
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf35">
<mml:math id="m38">
<mml:mi>G</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf36">
<mml:math id="m39">
<mml:mi>P</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> are the unknown centripetal-Coriolis, gravitational, and passive viscoelastic tissue forces, respectively, applied by the combined human-cycle system. The aforementioned functions are continuous according to the dynamic models in <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref> and <xref ref-type="bibr" rid="B16">Ids&#xf8; (2002)</xref>. According to the model in <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>, the centripetal-Coriolis term is related to the mass and cadence by <inline-formula id="inf37">
<mml:math id="m40">
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<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:mo>&#x2207;</mml:mo>
<mml:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. In <xref ref-type="disp-formula" rid="e3">Eq. 3</xref>, <inline-formula id="inf38">
<mml:math id="m41">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2282;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf39">
<mml:math id="m42">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2282;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> are sets used to model all of the possible values of the rider&#x2019;s volitional effort and other unknown disturbances, respectively<xref ref-type="fn" rid="fn2">
<sup>2</sup>
</xref>. The continuous function <inline-formula id="inf40">
<mml:math id="m43">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> describes the torque produced by the control inputs and is defined as<disp-formula id="equ1">
<mml:math id="m44">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
</disp-formula>where c<sub>e</sub> &#x3e; 0 is the known electric motor control constant relating input current to output torque. The torque generated from FES inputs to the rider&#x2019;s muscles <inline-formula id="inf41">
<mml:math id="m45">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is given by<disp-formula id="e4">
<mml:math id="m46">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
</mml:mrow>
</mml:munder>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(4)</label>
</disp-formula>where the continuous functions <inline-formula id="inf42">
<mml:math id="m47">
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> denote the uncertain control effectiveness of each muscle. For each <inline-formula id="inf43">
<mml:math id="m48">
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula>, let the closed set <inline-formula id="inf44">
<mml:math id="m49">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2282;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> denote the portion of the crank cycle when a particular muscle m is stimulated, which is selected based on a minimum threshold for the torque transfer ratio of each muscle group. In particular, there exist kinematic deadzones in the crank cycle where no muscle is able to produce useful torque <xref ref-type="bibr" rid="B6">Cousin et&#x20;al. (2020)</xref>.</p>
<p>The following properties of the cycle-rider system in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref> are derived from a detailed dynamic model, as discussed in <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>.</p>
<p>Property 1. The inertial term is upper- and lower-bounded as <inline-formula id="inf45">
<mml:math id="m50">
<mml:msub>
<mml:mrow>
<mml:munder accentunder="false">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo accent="true">&#x332;</mml:mo>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<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>I</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for all <inline-formula id="inf46">
<mml:math id="m51">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, where <inline-formula id="inf47">
<mml:math id="m52">
<mml:msub>
<mml:mrow>
<mml:munder accentunder="false">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo accent="true">&#x332;</mml:mo>
</mml:munder>
</mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> are known constants.</p>
<p>Property 2. The centripetal-Coriolis parameter is upper-bounded as <inline-formula id="inf48">
<mml:math id="m53">
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf49">
<mml:math id="m54">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where c<sub>V</sub> &#x3e; 0 is a known constant.</p>
<p>Property 3. The torque generated by gravity is upper-bounded as <inline-formula id="inf50">
<mml:math id="m55">
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for all <inline-formula id="inf51">
<mml:math id="m56">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, where c<sub>G</sub> &#x3e; 0 is a known constant.</p>
<p>Property 4. The torque generated by the rider&#x2019;s viscoelastic tissues is upper-bounded as <inline-formula id="inf52">
<mml:math id="m57">
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf53">
<mml:math id="m58">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where c<sub>P1</sub>, c<sub>P2</sub> &#x3e; 0 are known constants.</p>
<p>Property 5. The torque due to viscous damping is upper-bounded as <inline-formula id="inf54">
<mml:math id="m59">
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf55">
<mml:math id="m60">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, where c<sub>b</sub> &#x3e; 0 is a known constant.</p>
<p>Property 6. The torques generated by system disturbances are bounded so that <inline-formula id="inf56">
<mml:math id="m61">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where c<sub>d</sub> &#x3e; 0 is a known constant.</p>
<p>Property 7. Due to physical limitations of the rider, the volitional muscle torque is bounded so that <inline-formula id="inf57">
<mml:math id="m62">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where c<sub>vol</sub> &#x3e; 0 is a known constant.</p>
<p>Property 8. For each <inline-formula id="inf58">
<mml:math id="m63">
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula>, the muscle control effectiveness is upper-bounded so that <inline-formula id="inf59">
<mml:math id="m64">
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<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>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for all <inline-formula id="inf60">
<mml:math id="m65">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, where <inline-formula id="inf61">
<mml:math id="m66">
<mml:msub>
<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>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> is a known constant.</p>
<p>Property 9. The set-valued mapping <inline-formula id="inf62">
<mml:math id="m67">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mo>&#x21c9;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is outer semicontinuous, locally bounded, and convex-valued. These properties follow from continuity of the defining functions and from Properties 6 and&#x20;7.</p>
</sec>
</sec>
<sec id="s3">
<title>3 Control Design</title>
<p>
<xref ref-type="fig" rid="F1">Figure&#x20;1</xref> shows a schematic of the staggered control regions for the developed system. The volitional range is a region near the setpoint z<sub>2d</sub> where the control inputs are zero, thereby forcing the rider to pedal on their own volition (optionally, a nominal amount of assistance or resistance can be provided based on the needs of the rider). When the cadence is slower than z<sub>2d</sub>, FES assistance is provided before assistance from the electric motor. When the cadence is faster than the setpoint, only the electric motor is used because creating resistive torque with FES by stimulating antagonistic muscles is undesirable. The rider or clinician can modify the amount of control effort provided and the size of the controlled regions using parameters adjusted for the specific individual.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Illustration of the regions of applied control effort as a function of cadence. No control effort is applied in the volitional range near the setpoint z<sub>2d</sub>. The electric motor control input increases when the cadence approaches the boundaries defined by e<sub>H</sub> and e<sub>L</sub>, and the FES control signal does the same near e<sub>FES</sub>. The size of each region is adjustable. The cadence range between e<sub>H</sub> and e<sub>L</sub> is rendered asymptotically stable by the developed control system.</p>
</caption>
<graphic xlink:href="frobt-08-742986-g001.tif"/>
</fig>
<sec id="s3-1">
<title>3.1 Control Objective</title>
<p>To formalize the control objective, we define the tracking error e as the deviation of the cadence state z<sub>2</sub> from a constant setpoint z<sub>2d</sub> &#x3e; 0,<xref ref-type="fn" rid="fn3">
<sup>3</sup>
</xref>
<disp-formula id="e5">
<mml:math id="m68">
<mml:mi>e</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>The primary control objective is to guarantee a safe and effective therapy by constraining the rider&#x2019;s cadence to the safe set <inline-formula id="inf63">
<mml:math id="m69">
<mml:mi mathvariant="script">S</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, where e<sub>L</sub> &#x3c; 0&#x20;&#x3c; e<sub>H</sub> are user-defined constants. The FES control inputs attempt to constrain the rider&#x2019;s cadence to the secondary set <inline-formula id="inf64">
<mml:math id="m70">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x225c;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>:</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. Because the FES inputs are only intermittently available and must be less than the comfort threshold <inline-formula id="inf65">
<mml:math id="m71">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>, the cadence may not remain within <inline-formula id="inf66">
<mml:math id="m72">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. However, this construction is useful for design purposes. To ensure that FES stimulation is active before torque is added by the electric motor, the design specifies that e<sub>L</sub> &#x3c; e<sub>FES</sub> &#x3c;&#x20;0.</p>
<p>The goal is to synthesize, in a systematic way, controllers that render a given set of states uniformly globally asymptotically stable (UGAS) while using the minimum required effort inside the set of interest.<xref ref-type="fn" rid="fn4">
<sup>4</sup>
</xref> Combining ideas from CLF theory with recent developments regarding CBFs, this task is accomplished by using a QP to enforce a constraint on the control input that is induced by a candidate barrier function. The following lemma, presented in a more generic form than in our preliminary work in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref>, gives conditions under which a QP-based control law with a single constraint is feasible and locally Lipschitz continuous. The closed-form solution of the QP in the absence of a nominal controller (but including the case of multiple control inputs) has also been presented in <xref ref-type="bibr" rid="B11">Freeman and Kokotovic (1996</xref>, Section 4.2.2) and was developed in detail in <xref ref-type="bibr" rid="B31">Xu et&#x20;al. (2015)</xref>, Thm. 8. In those works, the feasibility condition was guaranteed by assuming the existence of a CLF or CBF, respectively. Because the addition of a nominal controller is a minor extension of the available literature, we do not present a proof of the result. Lemma 1 applies to the control laws developed in the subsequent sections.</p>
<p>Lemma 1. Let the functions <inline-formula id="inf67">
<mml:math id="m73">
<mml:mi>a</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf68">
<mml:math id="m74">
<mml:mi>b</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf69">
<mml:math id="m75">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> be locally Lipschitz on <inline-formula id="inf70">
<mml:math id="m76">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and satisfy the following feasibility condition:<disp-formula id="e6">
<mml:math id="m77">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>&#x21d2;</mml:mo>
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
</mml:math>
<label>(6)</label>
</disp-formula>
</p>
<p>Then the set-valued mapping <inline-formula id="inf71">
<mml:math id="m78">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> defined by <inline-formula id="inf72">
<mml:math id="m79">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>u</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is non-empty for all <inline-formula id="inf73">
<mml:math id="m80">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and the controller<disp-formula id="e7">
<mml:math id="m81">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mtext>arg&#x2009;min</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mspace width="0.3333em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msup>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>u</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(7)</label>
</disp-formula>is locally Lipschitz on <inline-formula id="inf74">
<mml:math id="m82">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, and, for any point z<sup>&#x2217;</sup> such that <inline-formula id="inf75">
<mml:math id="m83">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, there exists a neighborhood <inline-formula id="inf76">
<mml:math id="m84">
<mml:mi mathvariant="script">N</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> such that <inline-formula id="inf77">
<mml:math id="m85">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf78">
<mml:math id="m86">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">N</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Furthermore, the controller in <xref ref-type="disp-formula" rid="e7">Eq. 7</xref> has a closed-form solution given by<disp-formula id="e8">
<mml:math id="m87">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>o</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>e</mml:mi>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(8)</label>
</disp-formula>
</p>
<p>Note that there is no division by zero in <xref ref-type="disp-formula" rid="e8">Eq. 8</xref> since <xref ref-type="disp-formula" rid="e6">Eq. 6</xref> implies that <inline-formula id="inf79">
<mml:math id="m88">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> when <inline-formula id="inf80">
<mml:math id="m89">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>. Also note that the claim regarding the neighborhood about points for which <inline-formula id="inf81">
<mml:math id="m90">
<mml:mi>a</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> does not hold in general if the inequality in <xref ref-type="disp-formula" rid="e6">Eq. 6</xref> is changed to <inline-formula id="inf82">
<mml:math id="m91">
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>.</p>
</sec>
<sec id="s3-2">
<title>3.2 Motor Control Design</title>
<p>In this section, the electric motor control input is designed to ensure that the safe set <inline-formula id="inf83">
<mml:math id="m92">
<mml:mi mathvariant="script">S</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is UGAS for a given z<sub>2d</sub> &#x3e; 0. Our development is based on the design procedure described in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> and the theoretical results for hybrid systems in <xref ref-type="bibr" rid="B23">Maghenem and Sanfelice (2021)</xref> and <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, where <xref ref-type="bibr" rid="B23">Maghenem and Sanfelice (2021)</xref> considers barrier functions specifically. The safe set <inline-formula id="inf84">
<mml:math id="m93">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> is encoded by the barrier function candidate <inline-formula id="inf85">
<mml:math id="m94">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> defined as<disp-formula id="e9">
<mml:math id="m95">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</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:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(9)</label>
</disp-formula>where<disp-formula id="equ2">
<mml:math id="m96">
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>e</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>e</mml:mi>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>
</p>
<p>Equivalent to the original definition, we have <inline-formula id="inf86">
<mml:math id="m97">
<mml:mi mathvariant="script">S</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The barrier function is designed to be continuously differentiable while encoding the potentially asymmetric (about e &#x3d; 0) boundary of the set&#x20;<inline-formula id="inf87">
<mml:math id="m98">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>.</p>
<p>While barrier functions are typically associated with forward invariance, they are naturally extensible to enforcing the stronger property of asymptotic stability. Asymptotic stability is beneficial for real-world applications since it guarantees robustness to perturbations from the safe set. For continuous-time systems, the stronger asymptotic stability condition is embodied in the definition of a zeroing CBF (ZCBF) <xref ref-type="bibr" rid="B31">Xu et&#x20;al. (2015)</xref>. Inspired by the ZCBF approach in our preliminary work in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> and the work regarding CLFs for hybrid systems in <xref ref-type="bibr" rid="B29">Sanfelice (2013)</xref>, we constrain the control input according to the so-called regulation map <inline-formula id="inf88">
<mml:math id="m99">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
</mml:math>
</inline-formula> defined as<disp-formula id="e10">
<mml:math id="m100">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">U</mml:mi>
<mml:mo>:</mml:mo>
<mml:mfenced open="&#x27e8;" close="&#x27e9;">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:mo>&#x2200;</mml:mo>
<mml:mi>f</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(10)</label>
</disp-formula>where<disp-formula id="e11">
<mml:math id="m101">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(11)</label>
</disp-formula>and k<sub>b1</sub> &#x3e; 0 is a control gain. In the stability analysis of <xref ref-type="sec" rid="s4">Section 4</xref>, we show that selecting a continuous controller from <inline-formula id="inf89">
<mml:math id="m102">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> ensures that B<sub>e</sub> acts as a Lyapunov function for the closed-loop dynamics outside the set <inline-formula id="inf90">
<mml:math id="m103">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>. In particular, the condition in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref> will be used to apply Proposition 3.27 of <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref> to conclude that <inline-formula id="inf91">
<mml:math id="m104">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>, redefined to include some additional states, is&#x20;UGAS.</p>
<p>Remark 2. The definition of a ZCBF requires that <inline-formula id="inf92">
<mml:math id="m105">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for an extended class <inline-formula id="inf93">
<mml:math id="m106">
<mml:mi mathvariant="script">K</mml:mi>
</mml:math>
</inline-formula> function <italic>a</italic> <xref ref-type="bibr" rid="B31">Xu et&#x20;al. (2015)</xref>. However, requiring dependence of &#x3b3;<sub>e</sub> on the barrier function candidate can be restrictive, and is not necessary to obtain theoretical guarantees. Because the value of the function M in B<sub>e</sub> is unknown and cannot be implemented in a control law, we use &#x3b3;<sub>e</sub> instead of the typical ZCBF-based selection when defining <inline-formula id="inf94">
<mml:math id="m107">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref>. For both ZCBFs and the choice of &#x3b3;<sub>e</sub> in <xref ref-type="disp-formula" rid="e11">Eq. 11</xref>, the mapping in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref> enforces asymptotically stabilizing conditions on the barrier function at states outside the safe&#x20;set.</p>
<p>The regulation map in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref> is not directly useful for design purposes because uncertainty in the dynamics prevents computation of the inequality (i.e.,&#x20;constraint) used to define <inline-formula id="inf95">
<mml:math id="m108">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. In the rest of this section, we develop a new regulation map based on a computable constraint that is implementable in a QP like <xref ref-type="disp-formula" rid="e7">Eq. 7</xref>. The resulting QP-based controller is a locally Lipschitz selection of <inline-formula id="inf96">
<mml:math id="m109">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. To compensate for the uncertainty introduced in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref> by F<sub>u</sub>, we employ Lyapunov-based robust control techniques to develop a worst-case upper bound of the inner product in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref>. For any <inline-formula id="inf97">
<mml:math id="m110">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula id="inf98">
<mml:math id="m111">
<mml:mi>f</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>,<disp-formula id="e12">
<mml:math id="m112">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="&#x27e8;" close="&#x27e9;">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x2208;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2207;</mml:mo>
<mml:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(12)</label>
</disp-formula>
</p>
<p>The product <inline-formula id="inf99">
<mml:math id="m113">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> contains the term <inline-formula id="inf100">
<mml:math id="m114">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>e</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, leading to a cancellation with the term <inline-formula id="inf101">
<mml:math id="m115">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2207;</mml:mo>
<mml:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> since <inline-formula id="inf102">
<mml:math id="m116">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2207;</mml:mo>
<mml:mi>M</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Using Properties 2-7, it can then be shown that the unknown terms in <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> are upper bounded, for some constants c<sub>1</sub> &#x2212; c<sub>3</sub>, as<disp-formula id="e13">
<mml:math id="m117">
<mml:mfenced open="&#x27e8;" close="&#x27e9;">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(13)</label>
</disp-formula>for each <inline-formula id="inf103">
<mml:math id="m118">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and each <inline-formula id="inf104">
<mml:math id="m119">
<mml:mi>f</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where<disp-formula id="equ3">
<mml:math id="m120">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>In <xref ref-type="disp-formula" rid="e13">Eq. 13</xref>, the function &#x3c4;<sub>u</sub> depends on the motor control input u<sub>e</sub> and the muscle control inputs u<sub>M</sub>. Because the value of the subsequently designed muscle control input will jump at discrete instances, it is desirable to decouple the motor input from the muscle input to ensure the continuity of the motor controller. A continuous motor controller will be more predictable and comfortable for the rider. Using Property 8, there exists a constant c<sub>M</sub> &#x3e; 0 such that<disp-formula id="e14">
<mml:math id="m121">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mo>&#x2264;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(14)</label>
</disp-formula>for all <inline-formula id="inf105">
<mml:math id="m122">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, <inline-formula id="inf106">
<mml:math id="m123">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf107">
<mml:math id="m124">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. Using the definition of <inline-formula id="inf108">
<mml:math id="m125">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> in <xref ref-type="sec" rid="s2">Section 2</xref>, <xref ref-type="disp-formula" rid="e14">Eq. 14</xref> applies to any muscle controller for which the inputs are bounded by the positive constant <inline-formula id="inf109">
<mml:math id="m126">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. One can then define<disp-formula id="e15">
<mml:math id="m127">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>.</mml:mo>
</mml:math>
<label>(15)</label>
</disp-formula>
</p>
<p>Selecting<xref ref-type="fn" rid="fn5">
<sup>5</sup>
</xref>
<disp-formula id="e16">
<mml:math id="m128">
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:math>
<label>(16)</label>
</disp-formula>implies that<disp-formula id="e17">
<mml:math id="m129">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(17)</label>
</disp-formula>for all <inline-formula id="inf110">
<mml:math id="m130">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, <inline-formula id="inf111">
<mml:math id="m131">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>, and <inline-formula id="inf112">
<mml:math id="m132">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. Since <xref ref-type="disp-formula" rid="e17">Eq. 17</xref> is an upper bound for <xref ref-type="disp-formula" rid="e13">Eq. 13</xref>, we define a new regulation map <inline-formula id="inf113">
<mml:math id="m133">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> as<disp-formula id="e18">
<mml:math id="m134">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
<label>(18)</label>
</disp-formula>
</p>
<p>The following result summarizes the preceding development and explains the utility of <inline-formula id="inf114">
<mml:math id="m135">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
<p>Proposition 1. Assume k<sub>1</sub>, k<sub>2</sub>, and k<sub>3</sub> satisfy the gain conditions in <xref ref-type="disp-formula" rid="e16">Eq. 16</xref> and z<sub>2d</sub> &#x3e; 0. Then, for any <inline-formula id="inf115">
<mml:math id="m136">
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <inline-formula id="inf116">
<mml:math id="m137">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, if <inline-formula id="inf117">
<mml:math id="m138">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, it follows that <inline-formula id="inf118">
<mml:math id="m139">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>.</p>
<p>The constraint used to define <inline-formula id="inf119">
<mml:math id="m140">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e18">Eq. 18</xref> can be written in the generic form of Lemma 1. Additionally, since the terms in <xref ref-type="disp-formula" rid="e18">Eq. 18</xref> are no longer uncertain, the constraint can be enforced with the following implementable QP:<disp-formula id="e19">
<mml:math id="m141">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x225c;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mi>arg min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mspace width="0.3333em"/>
<mml:msup>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(19)</label>
</disp-formula>where <inline-formula id="inf120">
<mml:math id="m142">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is any locally Lipschitz nominal controller. According to Lemma 1, with <inline-formula id="inf121">
<mml:math id="m143">
<mml:mi>b</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, the controller is feasible if e &#x3d; 0 implies that<disp-formula id="e20">
<mml:math id="m144">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
</mml:math>
<label>(20)</label>
</disp-formula>
</p>
<p>Since the parameters in <xref ref-type="disp-formula" rid="e20">Eq. 20</xref> are user-selected, they can be designed to ensure the inequality holds. Given this gain condition, the controller has the properties described in Lemma 1, in particular, it is continuous. The closed-form solution to <xref ref-type="disp-formula" rid="e19">Eq. 19</xref> can be developed from <xref ref-type="disp-formula" rid="e8">Eq. 8</xref>. The controller is implementable in either form but the closed-form solution is computationally faster and does not require an optimization package. Note that the piecewise linear function <inline-formula id="inf122">
<mml:math id="m145">
<mml:mi>e</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mo>&#x21a6;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>e</mml:mi>
</mml:math>
</inline-formula> is locally Lipschitz, from which we derive local Lipschitz continuity of the controller.</p>
<p>Remark 3. During the experiments in <xref ref-type="sec" rid="s5">Section 5</xref>, we investigated constant nominal controllers <inline-formula id="inf123">
<mml:math id="m146">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for some <inline-formula id="inf124">
<mml:math id="m147">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula>. When u<sub>0</sub> &#x3d; 0, the controller is a minimum norm controller and the motor is off whenever possible while still ensuring safety. When the rider requires additional assistance, selecting a positive u<sub>0</sub> leads to the motor being biased to assist, while a negative u<sub>0</sub> leads to additional resistance and a more challenging training program. However, there is no theoretical obstacle to using a more complex nominal controller (e.g., one that tracks power).</p>
</sec>
<sec id="s3-3">
<title>3.3 Functional Electrical Stimulation Design</title>
<p>To describe the FES control input, we define a concatenated state vector <inline-formula id="inf125">
<mml:math id="m148">
<mml:mi>x</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula>, where <inline-formula id="inf126">
<mml:math id="m149">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is a vector of switching signals <inline-formula id="inf127">
<mml:math id="m150">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> defined for each muscle <inline-formula id="inf128">
<mml:math id="m151">
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula>, <inline-formula id="inf129">
<mml:math id="m152">
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is a timer variable, and <inline-formula id="inf130">
<mml:math id="m153">
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#xd7;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is the state space. The stimulation input to the rider&#x2019;s muscle groups <inline-formula id="inf131">
<mml:math id="m154">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mo>&#x2192;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is defined for each muscle as<xref ref-type="fn" rid="fn6">
<sup>6</sup>
</xref>
<disp-formula id="e21">
<mml:math id="m155">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(21)</label>
</disp-formula>where <inline-formula id="inf132">
<mml:math id="m156">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> will be defined subsequently. The switching signals are updated at jumps according to the rule<disp-formula id="e22">
<mml:math id="m157">
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>1</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>0</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2209;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(22)</label>
</disp-formula>where <inline-formula id="inf133">
<mml:math id="m158">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> was defined in <xref ref-type="sec" rid="s2">Section 2</xref>. The update rule specifies that the rider&#x2019;s muscles are stimulated in regions where they are able to produce positive torque. The rule for &#x3c3;<sub>m</sub> and the timer variable &#x3c4; will be used to define a hybrid system in <xref ref-type="sec" rid="s4">Section&#x20;4</xref>.</p>
<p>As discussed in <xref ref-type="sec" rid="s3-1">Section 3.1</xref>, it is generally not possible to maintain the cadence in the set <inline-formula id="inf134">
<mml:math id="m159">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>:</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> because the stimulation input <inline-formula id="inf135">
<mml:math id="m160">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is limited in magnitude and only intermittently available. The function <inline-formula id="inf136">
<mml:math id="m161">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e21">Eq. 21</xref> represents a selection of the input that would render the set <inline-formula id="inf137">
<mml:math id="m162">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> asymptotically stable in the absence of these obstacles (and subject to some gain conditions). The development of <inline-formula id="inf138">
<mml:math id="m163">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> is very similar to the one in <xref ref-type="sec" rid="s3-2">Section 3.2</xref> and is therefore omitted to avoid redundancy. Moreover, we do not make claims in the forthcoming stability analysis regarding <inline-formula id="inf139">
<mml:math id="m164">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. The FES input is defined by the following QP:<disp-formula id="e23">
<mml:math id="m165">
<mml:mtable class="align" columnalign="left">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x225c;</mml:mo>
<mml:munder>
<mml:mrow>
<mml:mi>arg min</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mspace width="0.3333em"/>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right"/>
<mml:mtd columnalign="left">
<mml:mi>s</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo>
<mml:mspace width="0.3333em"/>
<mml:mspace width="0.3333em"/>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mi>e</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(23)</label>
</disp-formula>where <inline-formula id="inf140">
<mml:math id="m166">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>:</mml:mo>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is any locally Lipschitz nominal controller,<disp-formula id="equ4">
<mml:math id="m167">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>5</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
</mml:math>
</disp-formula>
<disp-formula id="equ5">
<mml:math id="m168">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
</disp-formula>and<disp-formula id="equ6">
<mml:math id="m169">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>e</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msubsup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mi>e</mml:mi>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
</disp-formula>When e &#x3d; 0, the feasibility condition (6) in Lemma 1 requires that<disp-formula id="e24">
<mml:math id="m170">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
</mml:math>
<label>(24)</label>
</disp-formula>under which the function <inline-formula id="inf141">
<mml:math id="m171">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> has the properties described in the lemma. Similar to the previous section, the parameters in <xref ref-type="disp-formula" rid="e24">Eq. 24</xref> are user-selected and can be designed to ensure the inequality&#x20;holds.</p>
<p>When the nominal controller in <xref ref-type="disp-formula" rid="e23">Eq. 23</xref> is set to <inline-formula id="inf142">
<mml:math id="m172">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x225c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, then from the closed-form solution in <xref ref-type="disp-formula" rid="e8">Eq. 8</xref> it can be determined that <inline-formula id="inf143">
<mml:math id="m173">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> for all e &#x2265; 0. In this case, because of the use of the saturation function in <xref ref-type="disp-formula" rid="e21">Eq. 21</xref>, it follows that <inline-formula id="inf144">
<mml:math id="m174">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> for all <inline-formula id="inf145">
<mml:math id="m175">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula> such that e &#x2265; 0. The inclusion of a nominal controller in the QP defining <inline-formula id="inf146">
<mml:math id="m176">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> gives the operator flexibility to provide stimulation at points where e &#x2265; 0. When using a nominal controller with <inline-formula id="inf147">
<mml:math id="m177">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> for e &#x2265; 0, FES stimulation produces torque to increase the cadence above the setpoint z<sub>2d</sub>. However, it is always the case that <inline-formula id="inf148">
<mml:math id="m178">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2192;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> as e &#x2192; e<sub>H</sub>. By combining nominal assistance from FES with nominal resistance from the electric motor, a more intense training program can be designed where the rider must work against resistive torque from the electric motor to stay near the setpoint. We provide experimental results for a higher intensity configuration of the control system in <xref ref-type="sec" rid="s5">Section&#x20;5</xref>.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Stability Analysis</title>
<p>We model the closed-loop system as a hybrid system <inline-formula id="inf149">
<mml:math id="m179">
<mml:mi mathvariant="script">H</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>F</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> with state <inline-formula id="inf150">
<mml:math id="m180">
<mml:mi>x</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula>, where the state space <inline-formula id="inf151">
<mml:math id="m181">
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula> was defined in <xref ref-type="sec" rid="s3-3">Section 3.3</xref>. The hybrid system will periodically update the muscle switching signals &#x3c3;<sub>m</sub> according to the rule in <xref ref-type="disp-formula" rid="e22">Eq. 22</xref>. The timer variable &#x3c4; increases at a constant rate until reaching a dwell-time &#x3c4;<sub>D</sub> &#x3e; 0, at which point a jump occurs and each signal in &#x3c3;<sub>M</sub> is updated. Governing jumps by a dwell-time prevents multiple jumps from occurring in the same time instant, and models a computational implementation of the switching signals, where the values of the logic variables would be updated periodically at a fixed sampling frequency. In practice, the dwell-time &#x3c4;<sub>D</sub> will be the sampling frequency.</p>
<p>The hybrid system <inline-formula id="inf152">
<mml:math id="m182">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is defined as follows. The flow map <inline-formula id="inf153">
<mml:math id="m183">
<mml:mi>F</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula> is<disp-formula id="equ8">
<mml:math id="m184">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mi>F</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
</disp-formula>where <inline-formula id="inf154">
<mml:math id="m185">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and F<sub>u</sub> is defined in <xref ref-type="disp-formula" rid="e2">Eq. 2</xref>. The flow set is<disp-formula id="equ9">
<mml:math id="m186">
<mml:mi>C</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>Jumps occur when the timer state &#x3c4; grows to &#x3c4;<sub>D</sub>,<disp-formula id="equ10">
<mml:math id="m187">
<mml:mi>D</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>The jump map <inline-formula id="inf155">
<mml:math id="m188">
<mml:mi>G</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>&#x21c9;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula> is defined component-wise as <inline-formula id="inf156">
<mml:math id="m189">
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, where the state z does not change at jumps (z<sup>&#x2b;</sup> &#x3d; z), the timer &#x3c4; resets to zero at jumps (&#x3c4;<sup>&#x2b;</sup> &#x3d; 0), and <inline-formula id="inf157">
<mml:math id="m190">
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>&#x21c9;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the outer semicontinuous Krasovskii regularization of the map in <xref ref-type="disp-formula" rid="e22">Eq. 22</xref> <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, Def. 4.13. For each <inline-formula id="inf158">
<mml:math id="m191">
<mml:mi>m</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">M</mml:mi>
</mml:math>
</inline-formula>, the corresponding component of G<sub>&#x3c3;</sub> is equal to<disp-formula id="e25">
<mml:math id="m192">
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>1</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>0,1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>0</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mtext>otherwise.</mml:mtext>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(25)</label>
</disp-formula>
</p>
<p>The set-valued case in <xref ref-type="disp-formula" rid="e25">Eq. 25</xref> indicates that if &#x3c4; reaches &#x3c4;<sub>D</sub> when the state z<sub>1</sub> is precisely on the boundary of <inline-formula id="inf159">
<mml:math id="m193">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, the signal &#x3c3;<sub>m</sub> may or may not jump. Performing such a regularization leads to some robustness properties due to the fact that <inline-formula id="inf160">
<mml:math id="m194">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is a well-posed hybrid system Goebel et&#x20;al. (2012, Ch.&#x20;6).</p>
<p>Remark 4. The gain conditions in <xref ref-type="disp-formula" rid="e20">Eqs. 20</xref>, <xref ref-type="disp-formula" rid="e24">24</xref> must be satisfied because they lead to the feasibility of the QP-based controllers. The conditions are restated here for emphasis:<disp-formula id="equ11">
<mml:math id="m195">
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mspace width="1em"/>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>.</mml:mo>
</mml:math>
</disp-formula>
</p>
<p>Theorem 1. Consider the closed-loop cycle-rider system <inline-formula id="inf161">
<mml:math id="m196">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>. Assume the control gains satisfy the conditions in <xref ref-type="disp-formula" rid="e16">Eqs. 16</xref>, <xref ref-type="disp-formula" rid="e20">20</xref>, <xref ref-type="disp-formula" rid="e24">24</xref>, and z<sub>2d</sub> &#x3e; 0. Then the safe set <inline-formula id="inf162">
<mml:math id="m197">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x222a;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is UGAS for <inline-formula id="inf163">
<mml:math id="m198">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>. Additionally, <inline-formula id="inf164">
<mml:math id="m199">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is a well-posed hybrid system.</p>
<p>Proof. Since B<sub>e</sub> in <xref ref-type="disp-formula" rid="e9">Eq. 9</xref> is such that <inline-formula id="inf165">
<mml:math id="m200">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x222a;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, the function B<sub>e</sub> is a valid barrier function candidate <xref ref-type="bibr" rid="B23">Maghenem and Sanfelice (2021)</xref>, Def. 3. Using Lemma 1, the gain conditions in <xref ref-type="disp-formula" rid="e20">Eqs. 20</xref>, <xref ref-type="disp-formula" rid="e24">24</xref> guarantee that the controllers in <xref ref-type="disp-formula" rid="e19">Eqs. 19</xref>, <xref ref-type="disp-formula" rid="e21">21</xref>, respectively, are feasible. By design, <inline-formula id="inf166">
<mml:math id="m201">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf167">
<mml:math id="m202">
<mml:mi>e</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf168">
<mml:math id="m203">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for all <inline-formula id="inf169">
<mml:math id="m204">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula>. Proposition 1 then shows that <inline-formula id="inf170">
<mml:math id="m205">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf171">
<mml:math id="m206">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
</mml:math>
</inline-formula>. It follows from the definition of <inline-formula id="inf172">
<mml:math id="m207">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">U</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e10">Eq. 10</xref> that<disp-formula id="e26">
<mml:math id="m208">
<mml:mfenced open="&#x27e8;" close="&#x27e9;">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(26)</label>
</disp-formula>for all x &#x2208; C and each <inline-formula id="inf173">
<mml:math id="m209">
<mml:mi>f</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>F</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Moreover, the jump map is such that<disp-formula id="e27">
<mml:math id="m210">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
</mml:math>
<label>(27)</label>
</disp-formula>for all x &#x2208; D and each <inline-formula id="inf174">
<mml:math id="m211">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3c3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. The barrier function does not decrease at jumps, but there is sufficient flow time to guarantee an overall decrease along solutions. More specifically, the dwell-time &#x3c4;<sub>D</sub> ensures that for any solution &#x3d5; to <inline-formula id="inf175">
<mml:math id="m212">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>, if <inline-formula id="inf176">
<mml:math id="m213">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mtext>dom</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:math>
</inline-formula>, then <inline-formula id="inf177">
<mml:math id="m214">
<mml:mi>t</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Thus, for any T &#x2265; 0 and <inline-formula id="inf178">
<mml:math id="m215">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mtext>dom</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:math>
</inline-formula>, if t &#x2b; j &#x2265; T then <inline-formula id="inf179">
<mml:math id="m216">
<mml:mi>t</mml:mi>
<mml:mo>&#x2265;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. We use this bound on the flow time to apply Proposition 3.27 of <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>.</p>
<p>The conditions in <xref ref-type="disp-formula" rid="e26">Eqs. 26</xref>, <xref ref-type="disp-formula" rid="e27">27</xref>, and the fact that <inline-formula id="inf180">
<mml:math id="m217">
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2282;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x222a;</mml:mo>
<mml:mi>D</mml:mi>
</mml:math>
</inline-formula> for all x &#x2208; D allow us to apply Theorem 1 of <xref ref-type="bibr" rid="B23">Maghenem and Sanfelice (2021)</xref> to conclude that the set <inline-formula id="inf181">
<mml:math id="m218">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is forward pre-invariant for <inline-formula id="inf182">
<mml:math id="m219">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>. Furthermore, the barrier function B<sub>e</sub> is a Lyapunov function for the restricted hybrid system <inline-formula id="inf183">
<mml:math id="m220">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>F</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>G</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> with <inline-formula id="inf184">
<mml:math id="m221">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x225c;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2229;</mml:mo>
<mml:mi mathvariant="script">I</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf185">
<mml:math id="m222">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x225c;</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>&#x2229;</mml:mo>
<mml:mi mathvariant="script">I</mml:mi>
</mml:math>
</inline-formula>, where <inline-formula id="inf186">
<mml:math id="m223">
<mml:mi mathvariant="script">I</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="script">X</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, which is the restriction of <inline-formula id="inf187">
<mml:math id="m224">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> to the zero superlevel set of B<sub>e</sub>. It can be shown that there exists<xref ref-type="fn" rid="fn7">
<sup>7</sup>
</xref> a continuous, positive definite function <inline-formula id="inf188">
<mml:math id="m225">
<mml:mi>&#x3c1;</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> such that <inline-formula id="inf189">
<mml:math id="m226">
<mml:mi>&#x3c1;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all x &#x2208; C<sub>r</sub>. Using Property 1, there are class <inline-formula id="inf190">
<mml:math id="m227">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> functions<xref ref-type="fn" rid="fn8">
<sup>8</sup>
</xref> &#x3b1;<sub>1</sub> and &#x3b1;<sub>2</sub> such that <inline-formula id="inf191">
<mml:math id="m228">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:mi>B</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b1;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> for all <inline-formula id="inf192">
<mml:math id="m229">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x222a;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x222a;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. Thus, Proposition 3.27 of <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref> can be applied to conclude that <inline-formula id="inf193">
<mml:math id="m230">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is uniformly globally pre-asymptotically stable (UGpAS) for <inline-formula id="inf194">
<mml:math id="m231">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, Def. 3.6. That <inline-formula id="inf195">
<mml:math id="m232">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is UGpAS for the unrestricted system <inline-formula id="inf196">
<mml:math id="m233">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> follows from forward pre-invariance of <inline-formula id="inf197">
<mml:math id="m234">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> for <inline-formula id="inf198">
<mml:math id="m235">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>, since for any solution &#x3d5; to <inline-formula id="inf199">
<mml:math id="m236">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>, if <inline-formula id="inf200">
<mml:math id="m237">
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> then <inline-formula id="inf201">
<mml:math id="m238">
<mml:msub>
<mml:mrow>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> for all <inline-formula id="inf202">
<mml:math id="m239">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mtext>dom</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:math>
</inline-formula> with t&#x2032; &#x2265; t, j&#x2032; &#x2265; j. Therefore, solutions to <inline-formula id="inf203">
<mml:math id="m240">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> that terminate on the boundary of <inline-formula id="inf204">
<mml:math id="m241">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> can be extended as solutions to <inline-formula id="inf205">
<mml:math id="m242">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> that remain in <inline-formula id="inf206">
<mml:math id="m243">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
<p>To conclude that <inline-formula id="inf207">
<mml:math id="m244">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is UGAS<xref ref-type="fn" rid="fn9">
<sup>9</sup>
</xref>, it remains to show that each maximal solution to <inline-formula id="inf208">
<mml:math id="m245">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is complete. Towards this end, we invoke Proposition 6.10 of <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>. We first note that the dynamics satisfy the hybrid basic conditions <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, Asm. 6.5 because C and D are closed; G is outer semicontinuous and locally bounded; and F is outer semicontinuous, locally bounded, and convex-valued by Property 9 and Lemma 3.2 in <xref ref-type="bibr" rid="B29">Sanfelice (2013)</xref>. It follows that <inline-formula id="inf209">
<mml:math id="m246">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is a well-posed hybrid system <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, Thm. 6.30. Next, every point x &#x2208; &#x2202;C\D has the component &#x3c4; &#x3d; 0. The fact that <inline-formula id="inf210">
<mml:math id="m247">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula> implies that <inline-formula id="inf211">
<mml:math id="m248">
<mml:mi>F</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2229;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2260;</mml:mo>
<mml:mi>&#x2205;</mml:mi>
</mml:math>
</inline-formula> at any x &#x2208; &#x2202;C\D, where <inline-formula id="inf212">
<mml:math id="m249">
<mml:msub>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is the tangent cone to C at x. It is then straightforward to conclude that the condition (VC) in Proposition 6.10 holds for all x &#x2208; C\D. Moreover, <inline-formula id="inf213">
<mml:math id="m250">
<mml:mi>G</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2282;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x222a;</mml:mo>
<mml:mi>D</mml:mi>
</mml:math>
</inline-formula>. Thus, Proposition 6.10 shows that a maximal solution is either complete or escapes in finite time by flowing.</p>
<p>To eliminate the possibility that maximal solutions escape in finite time by flowing, we first let &#x3d5; be a solution to <inline-formula id="inf214">
<mml:math id="m251">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>. From the definition of UGpAS in Definition 3.6 of <xref ref-type="bibr" rid="B13">Goebel et&#x20;al. (2012)</xref>, the distance of &#x3d5; from <inline-formula id="inf215">
<mml:math id="m252">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is bounded. From the definition of <inline-formula id="inf216">
<mml:math id="m253">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>, the component of &#x3d5; corresponding to the state e is bounded. Using this information, we conclude from continuity of <inline-formula id="inf217">
<mml:math id="m254">
<mml:mi>e</mml:mi>
<mml:mspace width="0.17em"/>
<mml:mspace width="0.17em"/>
<mml:mo>&#x21a6;</mml:mo>
<mml:mspace width="0.17em"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and the use of the saturation function in the definition of <inline-formula id="inf218">
<mml:math id="m255">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> in <xref ref-type="disp-formula" rid="e21">Eq. 21</xref> that for the concatenated controller u&#x2a;, the set <inline-formula id="inf219">
<mml:math id="m256">
<mml:msup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtext>rge</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is bounded, where <inline-formula id="inf220">
<mml:math id="m257">
<mml:mtext>rge</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>:</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2208;</mml:mo>
<mml:mtext>dom</mml:mtext>
<mml:mspace width="0.22em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. Then, from boundedness of the e component of &#x3d5; and Properties 2-7, it can be shown that the set <inline-formula id="inf221">
<mml:math id="m258">
<mml:mi>F</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mtext>rge</mml:mtext>
<mml:mspace width="0.17em"/>
<mml:mi>&#x3d5;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is bounded. It follows that solutions do not terminate in finite time by flowing (cf. <xref ref-type="bibr" rid="B21">Kamalapurkar et&#x20;al. (2020)</xref>). Thus, each maximal solution to <inline-formula id="inf222">
<mml:math id="m259">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> is complete, and <inline-formula id="inf223">
<mml:math id="m260">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi mathvariant="script">S</mml:mi>
</mml:mrow>
<mml:mo>&#x303;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is UGAS for <inline-formula id="inf224">
<mml:math id="m261">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula>. &#x25a0;</p>
</sec>
<sec id="s5">
<title>5 Experimental Results</title>
<p>The developed barrier function controller was tested on five participants and compared against uncontrolled volitional pedaling and the 3-Mode (3M) controller developed in <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref>, <xref ref-type="sec" rid="s3">Section 3</xref>. As described in <xref ref-type="sec" rid="s1">Section 1</xref>, the main idea behind the 3M controller is to create a region near the setpoint z<sub>2d</sub> where no assistance is provided, with discontinuous control effort being applied on the boundary of the region. In contrast to the barrier function controller, the electric motor controller for the 3M controller is coupled with FES stimulation via the angular position state z<sub>1</sub>, so that the motor is inactive whenever FES is active, and vice&#x20;versa.</p>
<p>The barrier function controller can be configured for various purposes based on the needs of the rider. Generally, there is a trade-off where smaller user-defined cadence ranges lead to greater applied control effort. Protocol A was designed to investigate whether the controller can reduce the variance in the rider&#x2019;s cadence by constraining their cadence within a small range. Such a trial provides a point of comparison with the 3M controller and uncontrolled volitional pedaling and generates data where the controller is more active. Protocol B was designed to show how assistance from the motor can be reduced by selecting a wider safe range, thereby encouraging more volitional contributions from the rider. In fact, Protocol B featured a nominal amount of resistance from the motor, making the program more challenging and requiring additional power output from the&#x20;rider.</p>
<p>Due to COVID-19 related difficulties in scheduling participants with neurological conditions, the trials for this demonstration were done with able-bodied subjects. Each participant gave written informed consent approved by the University of Florida Institutional Review Board (IRB201600881). Participants 1-3 were male, participants 4 and 5 were female, and all ranged in age from 21&#x2013;29&#xa0;years&#x20;old.</p>
<sec id="s5-1">
<title>5.1 Testbed</title>
<p>The experimental testbed consisted of a stationary recumbent tricycle (TerraTrike Rover) with a 250&#xa0;W, 24&#xa0;V motor (Unite Motor Co.) coupled to the drive chain as described in <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>, <xref ref-type="sec" rid="s5-1">Section 5.1</xref>. To measure position and cadence, an optical encoder with an angular resolution of 20,000 pulses per revolution (US Digital H1) was mounted to the crank using spur gears. The motor was actuated using an Advanced Motion Controls<xref ref-type="fn" rid="fn10">
<sup>10</sup>
</xref> motor driver and current-controlled power supply. Stimulation was delivered to the rider&#x2019;s quadricep, hamstring, and gluteal muscle groups via self-adhesive electrodes provided compliments of Axelgaard Manufacturing Co., Ltd. A current-controlled stimulator (Hasomed Rehastim) delivered symmetric, rectangular, and bi-phasic pulses at fixed amplitude (90&#xa0;mA, 80&#xa0;mA, and 70&#xa0;mA for the quadriceps, hamstrings, and gluteals, respectively) and frequency (60&#xa0;Hz), while the pulse width was used as the control input. A desktop computer running real-time control software (QUARC integrated with Simulink) was used to interface the controllers and hardware through a data acquisition board (Quanser QPIDe) with a sampling rate of 1,000&#xa0;Hz. For additional safety, an emergency stop switch was mounted on the cycle to allow the participant to end the experiment if required.</p>
</sec>
<sec id="s5-2">
<title>5.2 Procedure</title>
<p>The primary testing procedure (Protocol A) consisted of 180-s tests for each of the three configurations (barrier function, 3M, and volition-only) under consideration. The volitional pedaling trial was always first, followed by a random selection of either the barrier function or 3M controller. The riders were asked to track a setpoint of z<sub>2d</sub> &#x3d; 50 RPM. The safe set boundary for the barrier function controller was encoded by e<sub>L</sub> &#x3d; &#x2212; 5 RPM and e<sub>H</sub> &#x3d; 5 RPM, while e<sub>FES</sub> &#x3d; &#x2212; 3 RPM. The inactive region for the 3M controller was 48&#x2013;52 RPM, which is comparable to the range 50&#x2013;55 RPM that was used for the experiments in <xref ref-type="bibr" rid="B27">Rouse et&#x20;al. (2020)</xref>. The rider was shown a live plot of their cadence featuring a visible indication of the setpoint. Due to differences between the barrier function and 3M controllers, participants were not shown the boundaries of the safe set<xref ref-type="fn" rid="fn11">
<sup>11</sup>
</xref>.</p>
<p>The 180&#xa0;s tests started with a 20&#xa0;s ramp-up phase where the rider sat passively while the motor brought their cadence to the setpoint. To ensure that the presented data represented steady-state operation, the ramp-up and an additional 20&#xa0;s after it was excluded from each dataset in post-processing. For each configuration, there was a separate warm-up run before the recorded session so the rider could become accustomed to the controller.</p>
<p>Measurements of the position of the rider&#x2019;s legs with respect to the cycle were used to determine the regions of effective torque transfer <inline-formula id="inf225">
<mml:math id="m262">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> for each muscle (see <xref ref-type="bibr" rid="B4">Bellman et&#x20;al. (2017)</xref>, <xref ref-type="sec" rid="s5-2">Section 5.2</xref>) for more details). The cycle was initially operated at 50 RPM and open-loop stimulation was applied to one muscle group at a time to determine the comfort limit <inline-formula id="inf226">
<mml:math id="m263">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> for each muscle. The FES inputs are scaled by the comfort threshold in addition to being saturated<xref ref-type="fn" rid="fn12">
<sup>12</sup>
</xref>. The nominal controllers were <inline-formula id="inf227">
<mml:math id="m264">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>. The control gains were adjusted by plotting the control inputs as a function of the cadence error, which produced a visualization of the regions of applied control effort. Small adjustments to the gains were made for each participant based on their preferences during the warm-up run, which is a cause for variation in the data between participants. Some detailed discussion about the effect of the barrier function controller gains on performance is provided in <xref ref-type="bibr" rid="B17">Isaly et&#x20;al. (2020)</xref> (see Remark 1 and <xref ref-type="sec" rid="s5-4">Section&#x20;5.4</xref>).</p>
<p>Additional trials were conducted to highlight unique aspects of the barrier function controller, which were performed with only one participant. Protocol B was designed to prioritize power output from the rider over cadence tracking. For this alternative trial, the width of the safe range was larger, with e<sub>L</sub> &#x3d; &#x2212; 12 RPM, e<sub>H</sub> &#x3d; 10 RPM, and e<sub>FES</sub> &#x3d; &#x2212; 6 RPM. Because the rider (Participant &#x23;2) was able-bodied, we chose to make the program more challenging by adding nominal controllers with <inline-formula id="inf228">
<mml:math id="m265">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> and <inline-formula id="inf229">
<mml:math id="m266">
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
<mml:mi>E</mml:mi>
<mml:mi>S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>o</mml:mi>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3e;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, which means that near the setpoint the electric motor produced resistive torque while FES provided assistance. The boundaries e<sub>L</sub> and e<sub>H</sub> were displayed on-screen for this trial. In Protocol C, Participant &#x23;1 was asked to provide no volitional effort for both the 3M and barrier function controllers (<xref ref-type="fig" rid="F4">Figure&#x20;4</xref>). Because of problems with the 3M controller for this trial, we did not proceed with testing the no-volition configuration on other participants.</p>
</sec>
<sec id="s5-3">
<title>5.3 Results</title>
<p>
<xref ref-type="table" rid="T1">Table&#x20;1</xref> shows relevant statistics for the three configurations tested for Protocol A, including the average and standard deviation of the cadence, percentage of the trial duration for which FES was actively stimulating, and time spent outside of the safe set <inline-formula id="inf230">
<mml:math id="m267">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>. Two integrals of the electric motor input are given to distinguish resistive torque, for which the rider must pedal harder to compensate, and assistive torque, which implies work done by the motor and not the rider. The barrier function controller produced the lowest standard deviation in cadence for each participant and led to greater FES usage, but generally used more assistive torque from the motor than the 3M controller. The 3M controller produced less assistive torque because the electric motor was off in regions of the crank cycle where FES was active. The discrete switching between motor and FES, along with switching on the boundary of the inactive zone, caused numerous discontinuities in the 3M motor controller; <xref ref-type="table" rid="T1">Table&#x20;1</xref> shows an average of 493 switches per trial. For all participants, the riders&#x2019; cadence took values in the range 40.7&#x2013;56.1 RPM for the 3M controller, 45.4&#x2013;55.3 RPM for the barrier function controller, and 40.5&#x2013;59.2 RPM for uncontrolled pedaling. The barrier function controller constrained each rider&#x2019;s cadence to the user-defined range of 45&#x2013;55 RPM for all but a negligible amount of time; an average of six sampled data points or approximately 0.004% of the trial duration. Segments of the trials for three randomly selected participants are shown in <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>. A zoomed view featuring the FES stimulation input for a single participant is shown in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Protocol A: Cycling metrics during steady-state operation (140 second trial).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left"/>
<th align="left"/>
<th align="left"/>
<th colspan="5" align="center">Participant number</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Controller</td>
<td align="left">Metric</td>
<td align="center">Average</td>
<td align="center">1</td>
<td align="center">2</td>
<td align="center">3</td>
<td align="center">4</td>
<td align="center">5</td>
</tr>
<tr>
<td align="left">Barrier Function</td>
<td align="left">Avg. Cad. [RPM]</td>
<td align="center">49.97</td>
<td align="center">49.82</td>
<td align="center">49.59</td>
<td align="center">50.85</td>
<td align="center">49.31</td>
<td align="center">50.26</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Cad. SD [RPM]</td>
<td align="center">1.38</td>
<td align="center">1.37</td>
<td align="center">1.50</td>
<td align="center">1.54</td>
<td align="center">1.27</td>
<td align="center">1.25</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Min/Max Cad. [RPM]</td>
<td align="center">46.2/54.7</td>
<td align="center">46.6/54.2</td>
<td align="center">45.7/54.0</td>
<td align="center">46.5/55.3</td>
<td align="center">45.4/55.1</td>
<td align="center">46.9/54.2</td>
</tr>
<tr>
<td align="left"/>
<td align="left">
<inline-formula id="inf231">
<mml:math id="m268">
<mml:mo>&#x222b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Assistive Torque) [A&#x22c5;s]<xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">24.82</td>
<td align="center">18.64</td>
<td align="center">15.83</td>
<td align="center">2.79</td>
<td align="center">67.72</td>
<td align="center">19.12</td>
</tr>
<tr>
<td align="left"/>
<td align="left">
<inline-formula id="inf232">
<mml:math id="m269">
<mml:mo>&#x222b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Resistive Torque) [A&#x22c5;s]<xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">-20.84</td>
<td align="center">-10.25</td>
<td align="center">-3.93</td>
<td align="center">-33.39</td>
<td align="center">-13.63</td>
<td align="center">-42.99</td>
</tr>
<tr>
<td align="left"/>
<td align="left">FES Usage [% trial duration]<xref ref-type="table-fn" rid="Tfn2">
<sup>b</sup>
</xref>
</td>
<td align="center">27.33</td>
<td align="center">39.34</td>
<td align="center">33.61</td>
<td align="center">15.77</td>
<td align="center">31.77</td>
<td align="center">16.18</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Time Outside <inline-formula id="inf233">
<mml:math id="m270">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> [s]<xref ref-type="table-fn" rid="Tfn3">
<sup>c</sup>
</xref>
</td>
<td align="center">0.006</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">0.02</td>
<td align="center">0.01</td>
<td align="center">0</td>
</tr>
<tr>
<td align="left">3-Mode</td>
<td align="left">Avg. Cad. [RPM]</td>
<td align="center">49.66</td>
<td align="center">49.73</td>
<td align="center">48.87</td>
<td align="center">50.79</td>
<td align="center">48.94</td>
<td align="center">49.98</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Cad. SD [RPM]</td>
<td align="center">1.83</td>
<td align="center">1.57</td>
<td align="center">1.89</td>
<td align="center">1.62</td>
<td align="center">2.21</td>
<td align="center">1.87</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Min/Max Cad. [RPM]</td>
<td align="center">43.2/55.1</td>
<td align="center">44.6/55.5</td>
<td align="center">40.7/53.3</td>
<td align="center">46.3/55.1</td>
<td align="center">40.7/56.1</td>
<td align="center">43.9/55.6</td>
</tr>
<tr>
<td align="left"/>
<td align="left">
<inline-formula id="inf234">
<mml:math id="m271">
<mml:mo>&#x222b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Assistive Torque) [A&#x22c5;s]<xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">5.87</td>
<td align="center">1.73</td>
<td align="center">14.4</td>
<td align="center">0.22</td>
<td align="center">10.49</td>
<td align="center">2.52</td>
</tr>
<tr>
<td align="left"/>
<td align="left">
<inline-formula id="inf235">
<mml:math id="m272">
<mml:mo>&#x222b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Resistive Torque) [A&#x22c5;s]<xref ref-type="table-fn" rid="Tfn1">
<sup>a</sup>
</xref>
</td>
<td align="center">-20.32</td>
<td align="center">-8.72</td>
<td align="center">-3.41</td>
<td align="center">-47.39</td>
<td align="center">-16.98</td>
<td align="center">-25.13</td>
</tr>
<tr>
<td align="left"/>
<td align="left">FES Usage [% trial duration]<xref ref-type="table-fn" rid="Tfn2">
<sup>b</sup>
</xref>
</td>
<td align="center">17.04</td>
<td align="center">12.16</td>
<td align="center">23.42</td>
<td align="center">3.03</td>
<td align="center">31.56</td>
<td align="center">15.05</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Num. Motor Switches<xref ref-type="table-fn" rid="Tfn4">
<sup>d</sup>
</xref>
</td>
<td align="center">493</td>
<td align="center">335</td>
<td align="center">414</td>
<td align="center">530</td>
<td align="center">636</td>
<td align="center">549</td>
</tr>
<tr>
<td align="left">Volitional</td>
<td align="left">Avg. Cad. [RPM]</td>
<td align="center">49.91</td>
<td align="center">49.62</td>
<td align="center">49.13</td>
<td align="center">49.82</td>
<td align="center">50.87</td>
<td align="center">50.11</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Cad. SD [RPM]</td>
<td align="center">2.13</td>
<td align="center">2.13</td>
<td align="center">1.81</td>
<td align="center">1.76</td>
<td align="center">2.72</td>
<td align="center">2.21</td>
</tr>
<tr>
<td align="left"/>
<td align="left">Min/Max Cad. [RPM]</td>
<td align="center">42.0/56.0</td>
<td align="center">42.4/55.2</td>
<td align="center">40.5/54.8</td>
<td align="center">43.3/54.3</td>
<td align="center">42.0/59.2</td>
<td align="center">41.6/56.6</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="Tfn1">
<label>a</label>
<p>Indicates the postive or negative component of the integral, e.g., <inline-formula id="inf236">
<mml:math id="m273">
<mml:mo>&#x222b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>&#x222b;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msubsup>
<mml:mi>max</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula>.</p>
</fn>
<fn id="Tfn2">
<label>b</label>
<p>Quantifies the percentage of the trial duration that FES was active at non-negligible pulse-width values greater than 10&#xa0;&#x3bc;s.</p>
</fn>
<fn id="Tfn3">
<label>c</label>
<p>Computed as the number of recorded cadence values outside the set multiplied by the sampling time of 0.001&#xa0;s.</p>
</fn>
<fn id="Tfn4">
<label>d</label>
<p>Quantifies the number of discontinuities in the motor control signal as a function of&#x20;time.</p>
</fn>
</table-wrap-foot>
</table-wrap>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Cadence and motor control input for 30-s segments of the trials using Protocol A. Random selection was used to choose which participants and time periods were plotted. The time axis is offset to zero for readability. The dashed orange line in the barrier function cadence plot indicates the boundary of the safe set <inline-formula id="inf237">
<mml:math id="m274">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>, which was not meaningful for the other two configurations.</p>
</caption>
<graphic xlink:href="frobt-08-742986-g002.tif"/>
</fig>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Zoomed view of a 5-s time period during a trial using Protocol A showing the cadence, motor control input, and stimulation pulse-width (PW) for Participant 5. Random selection was used to choose which participant and time period were plotted. The time axis is offset to zero for readability. A pulse-width feedforward term of 10&#x20;&#x3bc;s was used to facilitate stimulation. The stimulation does not significantly affect the participant at or below 10&#x20;&#x3bc;s.</p>
</caption>
<graphic xlink:href="frobt-08-742986-g003.tif"/>
</fig>
<p>
<xref ref-type="fig" rid="F4">Figure&#x20;4</xref> shows the trials using Protocol C, where Participant &#x23;1 provided no volitional effort. The barrier function controller was still able to keep the rider&#x2019;s cadence within the safe set, while the 3M controller caused large oscillations; the mean &#xb1; SD cadence for the 3M controller was 43.74&#x20;&#xb1; 4.94 RPM. The cadence dropped as low as 31.54 RPM during the 3M trial because the electric motor was inactive in the shaded regions of <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>. When the motor was next switched on, it compensated using control action with a maximum magnitude of 17.74 A, which was relatively large compared to a maximum of 8.13 A for the 3M controller during the Protocol A trials.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Cadence from a trial using Protocol C, where Participant &#x23;1 was asked to provide no volitional effort. The 3M controller was problematic in this scenario due to switching between FES and motor control. The shaded red regions in the 3-Mode plot correspond to times when the electric motor was switched&#x20;off.</p>
</caption>
<graphic xlink:href="frobt-08-742986-g004.tif"/>
</fig>
<p>The results for Protocol B, where there were nonzero nominal controllers and a wider safe range, are displayed in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref> and <xref ref-type="table" rid="T2">Table&#x20;2</xref>. There was high utilization of the electric motor to produce resistive torque, but low assistive torque production. The assistive torque was smaller than the Protocol A average and, in particular, was smaller than Participant &#x23;2&#x2019;s results. The resistive torque was large and FES was more active for Protocol B due to the design of the nominal controllers. The electric motor deviated from its nominal value for only 7.7% of the trial duration and was providing assistance for 4.1% of the trial. The cadence standard deviation was higher than uncontrolled volitional pedaling, which was most likely because the control inputs were actively pushing the rider away from the setpoint. The assistive torque from the barrier function controller in Protocol B was comparable to the 3M controller in the Protocol A trials.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Segment of a trial using Protocol B, where alternative parameters for the barrier function controller were used. The safe set was much wider for this run, leading to less deviation of control inputs from the nominal value. Nonzero nominal inputs were used to intensify the training. The data was collected with Participant &#x23;2.</p>
</caption>
<graphic xlink:href="frobt-08-742986-g005.tif"/>
</fig>
<table-wrap id="T2" position="float">
<label>TABLE 2</label>
<caption>
<p>Protocol B&#x2013;barrier function controller: Cycling metrics during steady-state operation (140 second trial).</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Metric<xref ref-type="table-fn" rid="Tfn5">
<sup>a</sup>
</xref>
</th>
<th align="center">Par. &#x23;2</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">Avg. Cad. [RPM]</td>
<td align="center">49.87</td>
</tr>
<tr>
<td align="left">Cad. SD [RPM]</td>
<td align="center">2.80</td>
</tr>
<tr>
<td align="left">Min/Max Cad. [RPM]</td>
<td align="center">43.0/57.6</td>
</tr>
<tr>
<td align="left">
<inline-formula id="inf238">
<mml:math id="m275">
<mml:mo>&#x222b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Assistive Torque) [A&#x22c5;s]</td>
<td align="center">4.76</td>
</tr>
<tr>
<td align="left">
<inline-formula id="inf239">
<mml:math id="m276">
<mml:mo>&#x222b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2217;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.17em"/>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:math>
</inline-formula> (Resistive Torque) [A&#x22c5;s]</td>
<td align="center">-119.01</td>
</tr>
<tr>
<td align="left">FES on-time [%]</td>
<td align="center">47.67</td>
</tr>
<tr>
<td align="left">Time Outside <inline-formula id="inf240">
<mml:math id="m277">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> [s]</td>
<td align="center">0</td>
</tr>
</tbody>
</table>
<table-wrap-foot>
<fn id="Tfn5">
<label>a</label>
<p>See <xref ref-type="table" rid="T1">Table&#x20;1</xref> for further descriptions of metrics.</p>
</fn>
</table-wrap-foot>
</table-wrap>
</sec>
<sec id="s5-4">
<title>5.4 Discussion</title>
<p>The results for Protocol A demonstrate that the barrier function controller can assist a rider in tracking the cadence setpoint while constraining their cadence within a user-defined range. <xref ref-type="fig" rid="F3">Figure&#x20;3</xref> shows that the control inputs ramp up before the cadence reaches the boundaries defined by e<sub>H</sub>, e<sub>L</sub>, and e<sub>FES</sub>, yet are inactive when the cadence is near the setpoint. Such a ramp-up is demonstrative of how barrier function methods can ensure a gradual transition from a nominal controller, which should be active on the interior of the safe set, to an invariance-ensuring controller on the boundary of the safe set. For Protocol A, the width of the nominal control range was fairly small, while the width was increased for Protocol&#x20;B.</p>
<p>In some situations, increasing the training intensity for the rider will be preferred over improved cadence tracking. The relevant statistics are the assistive and resistive torques produced by the electric motor. Higher assistive torque indicates that less power is being produced by the rider. The barrier function controller is versatile and can be tuned to provide more or less interference from the control inputs. <xref ref-type="fig" rid="F5">Figure&#x20;5</xref> shows a trial using Protocol B where power output from the rider was prioritized by allowing larger cadence errors. The system&#x2019;s operator can allow larger cadence errors by selecting a wider safe range, which also facilitates the design of a wider nominal control range. The use of nominal controllers for Protocol B intensified the training by providing more FES stimulation and resistance from the motor. The control inputs were at their nominal values for a significant portion of the experiment, validating that a wider safe range leads to less modification of the nominal inputs. The nominal inputs can alternatively be designed so there is less resistance from the motor or less control input overall. The fact that the assistive torque from the barrier function controller was comparable to the 3M controller suggests that staggering FES assistance before motor assistance, as in the barrier function controller, is a viable alternative to discrete switching between FES and motor control, as in the 3M controller.</p>
<p>A continuous motor controller is more comfortable for the rider. Continuity is the primary difference between the barrier function and 3M controller. The 3M controller is discontinuous whenever the cadence crosses the boundary of the inactive zone, or the angular position crosses the boundary of the FES stimulation regions <inline-formula id="inf241">
<mml:math id="m278">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. The resulting large number of switches for the 3M motor controller is quantified in <xref ref-type="table" rid="T1">Table&#x20;1</xref>. A particular advantage of the motor being active in the <inline-formula id="inf242">
<mml:math id="m279">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> regions is that the barrier function controller is effective even when the rider produces little or no volitional effort, as shown in the trials using Protocol C (<xref ref-type="fig" rid="F4">Figure&#x20;4</xref>). The 3M controller caused large oscillations in the rider&#x2019;s cadence during Protocol C due to the discrete switching between FES and motor control. Since FES cannot always produce enough torque on its own, the cadence dropped in the FES stimulation regions, which was then met with large control effort from the motor upon exiting the region.</p>
<p>There were some small deviations from the safe set because the asymptotic stability of <inline-formula id="inf243">
<mml:math id="m280">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> is contingent on the selection of control gains, which must be large enough to compensate for the rider&#x2019;s volitional effort and other dynamic effects. In practice, designing the gains to account for large volitional contributions from the rider leads to overly constraining the rider during normal operation. Designing controllers for asymptotic stability, rather than the weaker property of forward invariance, helps mitigate these effects. A property known as input-to-state stability, which is a consequence of the UGAS result in Theorem 1, can be interpreted as guaranteeing that some nearby set is asymptotically stable despite unaccounted-for disturbances of bounded magnitude <xref ref-type="bibr" rid="B31">Xu et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B5">Cai and Teel (2009)</xref>. Thus, the control gains can be relaxed to favor comfortable and effective therapy while still ensuring that the cadence remains nearby the safe&#x20;set.</p>
</sec>
</sec>
<sec id="s6">
<title>6 Conclusion</title>
<p>This paper developed new FES and motor controllers that encourage the rider of a stationary cycle to provide volitional effort while constraining their cadence within a user-defined range. Using theoretical advances for barrier functions, the controllers are minimally invasive while transitioning gradually to a safety-ensuring controller on the boundary of the safe set. The control inputs are selected from regulation maps with sufficient regularity to ensure that optimal selections are locally Lipschitz functions of the cadence error. Robust control tools were used to develop the regulation maps, which are subsets of an original, uncertain map. The uniform global asymptotic stability of the user-defined safe set was certified with a hybrid system analysis. In the future, the performance of the controller can be improved by extending the development to a more complete dynamic model which accounts for muscle activation effects such as electromechanical delay in the rider&#x2019;s muscles.</p>
<p>Experimental results showed that the control system improved the rider&#x2019;s cadence tracking and effectively constrained their cadence within the safe set. The versatility of the controller was demonstrated with trials featuring two different objectives: improved cadence tracking or more power output from the rider. A significant next step is to perform more rigorous experiments on a set of participants with neurological conditions. These riders have a reduced ability to provide volitional contributions, so the results are expected to be significantly different from those of able-bodied riders, and would be of interest in more clinically focused literature.</p>
</sec>
</body>
<back>
<sec id="s7">
<title>Data Availability Statement</title>
<p>The raw data supporting the conclusions of this article will be made available by the authors, without undue reservation.</p>
</sec>
<sec id="s8">
<title>Ethics Statement</title>
<p>The studies involving human participants were reviewed and approved by University of Florida Institutional Review Board (IRB201600881). The patients/participants provided their written informed consent to participate in this study.</p>
</sec>
<sec id="s9">
<title>Author Contributions</title>
<p>AI designed the controller and experiment, wrote the manuscript, and processed experimental results. BA provided multiple reviews of the manuscript and conducted the experiments. WD and RS provided technical guidance and edited the article. All authors contributed to manuscript revision, read, and approved the submitted version.</p>
</sec>
<sec id="s10">
<title>Funding</title>
<p>This research is supported in part by AFOSR award no. FA9550-19-1-0169, award no. FA9550-19-1-0053, and award no. FA9550-20-1-0238; by NSF award no. ECS-1710621, award no. CNS-1544396, award no. CNS-2039054, and award no. 1762829; and by the Army Research Office under Grant no. W911NF-20-1-0253. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the sponsoring agency.</p>
</sec>
<sec sec-type="COI-statement" id="s11">
<title>Conflict of Interest</title>
<p>The handling Editor declared a past co-authorship with one of the authors&#x20;WD.</p>
<p>The remaining 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>
<fn-group>
<fn id="fn1">
<label>1</label>
<p>For vectors <inline-formula id="inf244">
<mml:math id="m281">
<mml:mi>x</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, <inline-formula id="inf245">
<mml:math id="m282">
<mml:mi>y</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, <inline-formula id="inf246">
<mml:math id="m283">
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>.</p>
</fn>
<fn id="fn2">
<label>2</label>
<p>The addition of a point <inline-formula id="inf247">
<mml:math id="m284">
<mml:mi>a</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> and a set <inline-formula id="inf248">
<mml:math id="m285">
<mml:mi>B</mml:mi>
<mml:mo>&#x2282;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is defined as <inline-formula id="inf249">
<mml:math id="m286">
<mml:mi>a</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>&#x225c;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>b</mml:mi>
<mml:mo>:</mml:mo>
<mml:mi>b</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>.</p>
</fn>
<fn id="fn3">
<label>3</label>
<p>Using the transformation in <xref ref-type="disp-formula" rid="e5">Eq. 5</xref>, we frequently use e in place of the cadence state&#x20;z<sub>2</sub>.</p>
</fn>
<fn id="fn4">
<label>4</label>
<p>A set that is UGAS is also forward invariant, meaning that trajectories starting inside the set remain in the set for all of&#x20;time.</p>
</fn>
<fn id="fn5">
<label>5</label>
<p>While the gain conditions in <xref ref-type="disp-formula" rid="e16">Eq. 16</xref> will be needed to guarantee that the cadence is constrained to the set <inline-formula id="inf250">
<mml:math id="m287">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula>, uniform global asymptotic stability ensures that the cadence remains nearby <inline-formula id="inf251">
<mml:math id="m288">
<mml:mi mathvariant="script">S</mml:mi>
</mml:math>
</inline-formula> even if the conditions do not hold (see <xref ref-type="sec" rid="s5-4">Section&#x20;5.4</xref>).</p>
</fn>
<fn id="fn6">
<label>6</label>
<p>The positive saturation function <inline-formula id="inf252">
<mml:math id="m289">
<mml:msubsup>
<mml:mrow>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>:</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
<mml:mo>&#x2192;</mml:mo>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:math>
</inline-formula> is defined as <inline-formula id="inf253">
<mml:math id="m290">
<mml:msubsup>
<mml:mrow>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> if u &#x3c; 0, <inline-formula id="inf254">
<mml:math id="m291">
<mml:msubsup>
<mml:mrow>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>u</mml:mi>
</mml:math>
</inline-formula> if <inline-formula id="inf255">
<mml:math id="m292">
<mml:mi>u</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>, and <inline-formula id="inf256">
<mml:math id="m293">
<mml:msubsup>
<mml:mrow>
<mml:mtext>sat</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> if <inline-formula id="inf257">
<mml:math id="m294">
<mml:mi>u</mml:mi>
<mml:mo>&#x3e;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo>&#x304;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>.</p>
</fn>
<fn id="fn7">
<label>7</label>
<p>While more general techniques can be developed, it is sufficient here to define <inline-formula id="inf258">
<mml:math id="m295">
<mml:mi>&#x3c1;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> if <inline-formula id="inf259">
<mml:math id="m296">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2265;</mml:mo>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> or <inline-formula id="inf260">
<mml:math id="m297">
<mml:mi>&#x3c1;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x225c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> if <inline-formula id="inf261">
<mml:math id="m298">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:mfenced open="|" close="|">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>.</p>
</fn>
<fn id="fn8">
<label>8</label>
<p>A function <inline-formula id="inf262">
<mml:math id="m299">
<mml:mi>&#x3b1;</mml:mi>
<mml:mo>:</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2192;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2265;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is a class <inline-formula id="inf263">
<mml:math id="m300">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="script">K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x221e;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> function if <italic>a</italic> is zero at zero, continuous, strictly increasing, and unbounded.</p>
</fn>
<fn id="fn9">
<label>9</label>
<p>A set <inline-formula id="inf264">
<mml:math id="m301">
<mml:mi mathvariant="script">A</mml:mi>
</mml:math>
</inline-formula> is UGAS for a hybrid system <inline-formula id="inf265">
<mml:math id="m302">
<mml:mi mathvariant="script">H</mml:mi>
</mml:math>
</inline-formula> if it is UGpAS and every maximal solution to the system is complete, meaning the solution is defined on an unbounded hybrid time domain.</p>
</fn>
<fn id="fn10">
<label>10</label>
<p>Advanced Motion Controls supported the development of the testbed by providing discounts on their branded&#x20;items.</p>
</fn>
<fn id="fn11">
<label>11</label>
<p>In the 3M controller, the user defines a region where no control is applied. An asymptotically stable region will be induced by the selection of the control gains, but it is not possible to compute this region explicitly. In the barrier function controller, the user defines the safe set boundary, while a computable region of no-control is induced by the selection of the control gains, and guaranteed to exist by Lemma&#x20;1.</p>
</fn>
<fn id="fn12">
<label>12</label>
<p>Practical improvements like muscle-dependent control gains are not included in the theoretical development for simplicity.</p>
</fn>
</fn-group>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ames</surname>
<given-names>A. D.</given-names>
</name>
<name>
<surname>Coogan</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Egerstedt</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Notomista</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Sreenath</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Tabuada</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Control Barrier Functions: Theory and Applications</article-title>,&#x201d; in <conf-name>Proc. Eur. Control Conf.</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>3420</fpage>&#x2013;<lpage>3431</lpage>. <pub-id pub-id-type="doi">10.23919/ecc.2019.8796030</pub-id> </citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ames</surname>
<given-names>A. D.</given-names>
</name>
<name>
<surname>Xu</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
<name>
<surname>Tabuada</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Control Barrier Function Based Quadratic Programs for Safety Critical Systems</article-title>. <source>IEEE Trans. Autom Control.</source> <volume>62</volume>, <fpage>3861</fpage>&#x2013;<lpage>3876</lpage>. </citation>
</ref>
<ref id="B3">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Asl</surname>
<given-names>H. J.</given-names>
</name>
<name>
<surname>Yamashita</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Narikiyo</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Kawanishi</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Field-based Assist-As-Needed Control Schemes for Rehabilitation Robots</article-title>. <source>Ieee/asme Trans. Mechatron.</source> <volume>25</volume>, <fpage>2100</fpage>&#x2013;<lpage>2111</lpage>. <pub-id pub-id-type="doi">10.1109/tmech.2020.2992090</pub-id> </citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Bellman</surname>
<given-names>M. J.</given-names>
</name>
<name>
<surname>Downey</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Parikh</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Automatic Control of Cycling Induced by Functional Electrical Stimulation with Electric Motor Assistance</article-title>. <source>IEEE Trans. Automat. Sci. Eng.</source> <volume>14</volume>, <fpage>1225</fpage>&#x2013;<lpage>1234</lpage>. <pub-id pub-id-type="doi">10.1109/TASE.2016.2527716</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cai</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Teel</surname>
<given-names>A. R.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>Characterizations of Input-To-State Stability for Hybrid Systems</article-title>. <source>Syst. Control. Lett.</source> <volume>58</volume>, <fpage>47</fpage>&#x2013;<lpage>53</lpage>. <pub-id pub-id-type="doi">10.1016/j.sysconle.2008.07.009</pub-id> </citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Cousin</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Duenas</surname>
<given-names>V. H.</given-names>
</name>
<name>
<surname>Rouse</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Bellman</surname>
<given-names>M. J.</given-names>
</name>
<name>
<surname>Freeborn</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Fox</surname>
<given-names>E. J.</given-names>
</name>
<etal/>
</person-group> (<year>2020</year>). <article-title>Closed-loop Cadence and Instantaneous Power Control on a Motorized Functional Electrical Stimulation Cycle</article-title>. <source>IEEE Trans. Contr. Syst. Technol.</source> <volume>28</volume>, <fpage>2276</fpage>&#x2013;<lpage>2291</lpage>. <pub-id pub-id-type="doi">10.1109/tcst.2019.2937725</pub-id> </citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Dao</surname>
<given-names>Q.-T.</given-names>
</name>
<name>
<surname>Yamamoto</surname>
<given-names>S.-i.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Assist-as-needed Control of a Robotic Orthosis Actuated by Pneumatic Artificial Muscle for Gait Rehabilitation</article-title>. <source>Appl. Sci.</source> <volume>8</volume>, <fpage>499</fpage>. <pub-id pub-id-type="doi">10.3390/app8040499</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ding</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Ai</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Liu</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Meng</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Path Control of a Rehabilitation Robot Using Virtual Tunnel and Adaptive Impedance Controller</article-title>,&#x201d; in <conf-name>2014 Seventh International Symposium on Computational Intelligence and Design</conf-name> (<publisher-name>IEEE</publisher-name>), <fpage>158</fpage>&#x2013;<lpage>161</lpage>. <pub-id pub-id-type="doi">10.1109/iscid.2014.204</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Duenas</surname>
<given-names>V. H.</given-names>
</name>
<name>
<surname>Cousin</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Rouse</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Fox</surname>
<given-names>E. J.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Distributed Repetitive Learning Control for Cooperative Cadence Tracking in Functional Electrical Stimulation Cycling</article-title>. <source>IEEE Trans. Cybern.</source> <volume>50</volume>, <fpage>1084</fpage>&#x2013;<lpage>1095</lpage>. <pub-id pub-id-type="doi">10.1109/tcyb.2018.2882755</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ferrante</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Pedrocchi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Ferrigno</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Molteni</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2008</year>). <article-title>Cycling Induced by Functional Electrical Stimulation Improves the Muscular Strength and the Motor Control of Individuals with post-acute Stroke. Europa Medicophysica-SIMFER 2007 Award Winner</article-title>. <source>Eur. J.&#x20;Phys. Rehabil. Med.</source> <volume>44</volume>, <fpage>159</fpage>&#x2013;<lpage>167</lpage>. </citation>
</ref>
<ref id="B11">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Freeman</surname>
<given-names>R. A.</given-names>
</name>
<name>
<surname>Kokotovic</surname>
<given-names>P. V.</given-names>
</name>
</person-group> (<year>1996</year>). <source>Robust Nonlinear Control Design: State-Space and Lyapunov Techniques</source>. <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Birkh&#xe4;user</publisher-name>. </citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Glotfelter</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Cort&#xe9;s</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Egerstedt</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Nonsmooth Barrier Functions with Applications to Multi-Robot Systems</article-title>. <source>IEEE Control. Syst. Lett.</source> <volume>1</volume>, <fpage>310</fpage>&#x2013;<lpage>315</lpage>. <pub-id pub-id-type="doi">10.1109/lcsys.2017.2710943</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Goebel</surname>
<given-names>R. G.</given-names>
</name>
<name>
<surname>Sanfelice</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Teel</surname>
<given-names>A. R.</given-names>
</name>
</person-group> (<year>2012</year>). <source>Hybrid Dynamical Systems</source>. <publisher-name>Princeton University Press</publisher-name>. </citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Harrington</surname>
<given-names>A. T.</given-names>
</name>
<name>
<surname>McRae</surname>
<given-names>C. G. A.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>S. C. K.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Evaluation of Functional Electrical Stimulation to Assist Cycling in Four Adolescents with Spastic Cerebral Palsy</article-title>. <source>Int. J.&#x20;Pediatr.</source> <volume>2012</volume>, <fpage>1</fpage>&#x2013;<lpage>11</lpage>. <pub-id pub-id-type="doi">10.1155/2012/504387</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hooker</surname>
<given-names>S. P.</given-names>
</name>
<name>
<surname>Figoni</surname>
<given-names>S. F.</given-names>
</name>
<name>
<surname>Rodgers</surname>
<given-names>M. M.</given-names>
</name>
<name>
<surname>Glaser</surname>
<given-names>R. M.</given-names>
</name>
<name>
<surname>Mathews</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Suryaprasad</surname>
<given-names>A. G.</given-names>
</name>
<etal/>
</person-group> (<year>1992</year>). <article-title>Physiologic Effects of Electrical Stimulation Leg Cycle Exercise Training in Spinal Cord Injured Persons</article-title>. <source>Arch. Phys. Med. Rehabil.</source> <volume>73</volume>, <fpage>470</fpage>&#x2013;<lpage>476</lpage>. </citation>
</ref>
<ref id="B16">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Ids&#xf8;</surname>
<given-names>E. S.</given-names>
</name>
</person-group> (<year>2002</year>). <source>Development of a Mathematical Model of a Rider-Tricycle System</source>. <publisher-loc>Trondheim</publisher-loc>: <publisher-name>Norwegian University of Science and Technology</publisher-name>. </citation>
</ref>
<ref id="B17">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Isaly</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Allen</surname>
<given-names>B. C.</given-names>
</name>
<name>
<surname>Sanfelice</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Zeroing Control Barrier Functions for Safe Volitional Pedaling in a Motorized Cycle</article-title>,&#x201d; in <conf-name>IFAC Conf. Cyber-Phys. Hum.-Syst.</conf-name> (<publisher-name>IEEE</publisher-name>). <pub-id pub-id-type="doi">10.1016/j.ifacol.2021.04.100</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Janssen</surname>
<given-names>T. W.</given-names>
</name>
<name>
<surname>Beltman</surname>
<given-names>J.&#x20;M.</given-names>
</name>
<name>
<surname>Elich</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Koppe</surname>
<given-names>P. A.</given-names>
</name>
<name>
<surname>Konijnenbelt</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>de Haan</surname>
<given-names>A.</given-names>
</name>
<etal/>
</person-group> (<year>2008</year>). <article-title>Effects of Electric Stimulation&#x2212;Assisted Cycling Training in People with Chronic Stroke</article-title>. <source>Arch. Phys. Med. Rehabil.</source> <volume>89</volume>, <fpage>463</fpage>&#x2013;<lpage>469</lpage>. <pub-id pub-id-type="doi">10.1016/j.apmr.2007.09.028</pub-id> </citation>
</ref>
<ref id="B19">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Johnston</surname>
<given-names>T. E.</given-names>
</name>
<name>
<surname>Smith</surname>
<given-names>B. T.</given-names>
</name>
<name>
<surname>Oladeji</surname>
<given-names>O.</given-names>
</name>
<name>
<surname>Betz</surname>
<given-names>R. R.</given-names>
</name>
<name>
<surname>Lauer</surname>
<given-names>R. T.</given-names>
</name>
</person-group> (<year>2008</year>). <article-title>Outcomes of a home Cycling Program Using Functional Electrical Stimulation or Passive Motion for Children with Spinal Cord Injury: a Case Series</article-title>. <source>J.&#x20;Spinal Cord Med.</source> <volume>31</volume>, <fpage>215</fpage>&#x2013;<lpage>221</lpage>. <pub-id pub-id-type="doi">10.1080/10790268.2008.11760715</pub-id> </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Johnston</surname>
<given-names>T. E.</given-names>
</name>
<name>
<surname>Wainwright</surname>
<given-names>S. F.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>Cycling with Functional Electrical Stimulation in an Adult with Spastic Diplegic Cerebral Palsy</article-title>. <source>Phys. Ther.</source> <volume>91</volume>, <fpage>970</fpage>&#x2013;<lpage>982</lpage>. <pub-id pub-id-type="doi">10.2522/ptj.20100286</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kamalapurkar</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
<name>
<surname>Teel</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>On Reduction of Differential Inclusions and Lyapunov Stability</article-title>. <source>Esaim: Control Optim. Calc.</source> <volume>26</volume>, <fpage>1</fpage>&#x2013;<lpage>16</lpage>. <pub-id pub-id-type="doi">10.1051/cocv/2019074</pub-id> </citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>MacKay-Lyons</surname>
<given-names>M. J.</given-names>
</name>
<name>
<surname>Makrides</surname>
<given-names>L.</given-names>
</name>
</person-group> (<year>2002</year>). <article-title>Cardiovascular Stress during a Contemporary Stroke Rehabilitation Program: Is the Intensity Adequate to Induce a Training Effect?</article-title> <source>Arch. Phys. Med. Rehabil.</source> <volume>83</volume>, <fpage>1378</fpage>&#x2013;<lpage>1383</lpage>. <pub-id pub-id-type="doi">10.1053/apmr.2002.35089</pub-id> </citation>
</ref>
<ref id="B23">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Maghenem</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Sanfelice</surname>
<given-names>R. G.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Sufficient Conditions for Forward Invariance and Contractivity in Hybrid Inclusions Using Barrier Functions</article-title>. <source>Automatica</source> <volume>124</volume>, <fpage>109328</fpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2020.109328</pub-id> </citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mohr</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>P&#xf8;denphant</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Biering&#x2013;S&#xf8;rensen</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Galbo</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Thamsborg</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Kj&#xe6;r</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>1997</year>). <article-title>Increased Bone mineral Density after Prolonged Electrically Induced Cycle Training of Paralyzed Limbs in Spinal Cord Injured Man</article-title>. <source>Calcif. Tissue Int.</source> <volume>61</volume>, <fpage>22</fpage>&#x2013;<lpage>25</lpage>. <pub-id pub-id-type="doi">10.1007/s002239900286</pub-id> </citation>
</ref>
<ref id="B25">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ouellette</surname>
<given-names>M. M.</given-names>
</name>
<name>
<surname>LeBrasseur</surname>
<given-names>N. K.</given-names>
</name>
<name>
<surname>Bean</surname>
<given-names>J.&#x20;F.</given-names>
</name>
<name>
<surname>Phillips</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Stein</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Frontera</surname>
<given-names>W. R.</given-names>
</name>
<etal/>
</person-group> (<year>2004</year>). <article-title>High-intensity Resistance Training Improves Muscle Strength, Self-Reported Function, and Disability in Long-Term Stroke Survivors</article-title>. <source>Stroke</source> <volume>35</volume>, <fpage>1404</fpage>&#x2013;<lpage>1409</lpage>. <pub-id pub-id-type="doi">10.1161/01.str.0000127785.73065.34</pub-id> </citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pehlivan</surname>
<given-names>A. U.</given-names>
</name>
<name>
<surname>Losey</surname>
<given-names>D. P.</given-names>
</name>
<name>
<surname>O&#x2019;Malley</surname>
<given-names>M. K.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Minimal Assist-As-Needed Controller for Upper Limb Robotic Rehabilitation</article-title>. <source>IEEE Trans. Robot.</source> <volume>32</volume>, <fpage>113</fpage>&#x2013;<lpage>124</lpage>. </citation>
</ref>
<ref id="B27">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rouse</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Downey</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Gregory</surname>
<given-names>C. M.</given-names>
</name>
<name>
<surname>Cousin</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Duenas</surname>
<given-names>V. H.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>FES Cycling in Stroke: Novel Closed-Loop Algorithm Accommodates Differences in Functional Impairments</article-title>. <source>IEEE Trans. Biomed. Eng.</source> <volume>67</volume>, <fpage>738</fpage>&#x2013;<lpage>749</lpage>. <pub-id pub-id-type="doi">10.1109/tbme.2019.2920346</pub-id> </citation>
</ref>
<ref id="B28">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Rouse</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Cousin</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Allen</surname>
<given-names>B. C.</given-names>
</name>
<name>
<surname>Dixon</surname>
<given-names>W. E.</given-names>
</name>
</person-group> (<year>2021</year>). <article-title>Shared Control for Switched Motorized FES-Cycling on a Split-Crank Cycle Accounting for Muscle Control Input Saturation</article-title>. <source>Automatica</source> <volume>123</volume>, <fpage>1</fpage>&#x2013;<lpage>11</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2020.109294</pub-id> </citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sanfelice</surname>
<given-names>R. G.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>On the Existence of Control Lyapunov Functions and State-Feedback Laws for Hybrid Systems</article-title>. <source>IEEE Trans. Automat. Contr.</source> <volume>58</volume>, <fpage>3242</fpage>&#x2013;<lpage>3248</lpage>. <pub-id pub-id-type="doi">10.1109/tac.2013.2264851</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Trevisi</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Gualdi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>De Conti</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Salghetti</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Martinuzzi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pedrocchi</surname>
<given-names>A.</given-names>
</name>
<etal/>
</person-group> (<year>2012</year>). <article-title>Cycling Induced by Functional Electrical Stimulation in Children Affected by Cerebral Palsy: Case Report</article-title>. <source>Eur. J.&#x20;Phys. Rehabil. Med.</source> <volume>48</volume>, <fpage>135</fpage>&#x2013;<lpage>145</lpage>. </citation>
</ref>
<ref id="B31">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xu</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Tabuada</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
<name>
<surname>Ames</surname>
<given-names>A. D.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Robustness of Control Barrier Functions for Safety Critical Control&#x2a;&#x2a;This Work Is Partially Supported by the National Science Foundation Grants 1239055, 1239037 and 1239085</article-title>. <source>IFAC-PapersOnLine</source> <volume>48</volume>, <fpage>54</fpage>&#x2013;<lpage>61</lpage>. <pub-id pub-id-type="doi">10.1016/j.ifacol.2015.11.152</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>