<?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">770514</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2021.770514</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>Control of Thruster-Assisted, Bipedal Legged Locomotion of the Harpy Robot</article-title>
<alt-title alt-title-type="left-running-head">Dangol et&#x20;al.</alt-title>
<alt-title alt-title-type="right-running-head">Harpy&#x2019;s Thruster-Assisted Legged Locomotion</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Dangol</surname>
<given-names>Pravin</given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Sihite</surname>
<given-names>Eric</given-names>
</name>
<uri xlink:href="https://loop.frontiersin.org/people/1517830/overview"/>
</contrib>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Ramezani</surname>
<given-names>Alireza</given-names>
</name>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1266049/overview"/>
</contrib>
</contrib-group>
<aff>
<institution>Silicon Synapse Lab., Department of Electrical and Computer Engineering, Northeastern University</institution>, <addr-line>Boston</addr-line>, <addr-line>MA</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/134315/overview">Giuseppe Carbone</ext-link>, University of Calabria, Italy</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold> <ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1488760/overview">Ravi Mandava</ext-link>, Maulana Azad National Institute of Technology, India</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/821414/overview">Hass&#xe8;ne Gritli</ext-link>, University of Tunis, Tunisia</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Alireza Ramezani, <email>a.ramezani@northeastern.edu</email>
</corresp>
<fn fn-type="other">
<p>This article was submitted to Humanoid Robotics, a section of the journal Frontiers in Robotics and&#x20;AI</p>
</fn>
</author-notes>
<pub-date pub-type="epub">
<day>23</day>
<month>12</month>
<year>2021</year>
</pub-date>
<pub-date pub-type="collection">
<year>2021</year>
</pub-date>
<volume>8</volume>
<elocation-id>770514</elocation-id>
<history>
<date date-type="received">
<day>04</day>
<month>09</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>11</day>
<month>11</month>
<year>2021</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2021 Dangol, Sihite and Ramezani.</copyright-statement>
<copyright-year>2021</copyright-year>
<copyright-holder>Dangol, Sihite and Ramezani</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>Fast constraint satisfaction, frontal dynamics stabilization, and avoiding fallovers in dynamic, bipedal walkers can be pretty challenging. The challenges include underactuation, vulnerability to external perturbations, and high computational complexity that arise when accounting for the system full-dynamics and environmental interactions. In this work, we study the potential roles of thrusters in addressing some of these locomotion challenges in bipedal robotics. We will introduce a thruster-assisted bipedal robot called <italic>Harpy</italic>. We will capitalize on Harpy&#x2019;s unique design to propose an optimization-free approach to satisfy gait feasibility conditions. In this thruster-assisted legged locomotion, the reference trajectories can be manipulated to fulfill constraints brought on by ground contact and those prescribed for states and inputs. Unintended changes to the trajectories, especially those optimized to produce periodic orbits, can adversely affect gait stability and hybrid invariance. We will show our approach can still guarantee stability and hybrid invariance of the gaits by employing the thrusters in Harpy. We will also show that the thrusters can be leveraged to robustify the gaits by dodging fallovers or jumping over large obstacles.</p>
</abstract>
<kwd-group>
<kwd>legged robots</kwd>
<kwd>dynamics</kwd>
<kwd>modeling</kwd>
<kwd>control</kwd>
<kwd>mechatronics</kwd>
<kwd>automation</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Raibert&#x2019;s hopping robots <xref ref-type="bibr" rid="B34">Raibert et&#x20;al. (1984)</xref>, and Boston Dynamic&#x2019;s BigDog <xref ref-type="bibr" rid="B33">Raibert et&#x20;al. (2008)</xref> are amongst the most successful examples of legged robots, as they can hop or trot robustly even in the presence of significant unplanned disturbances. Other than these successful examples, many bipedal and anthropomorphic robots have also been introduced. Boston Dynamics&#x2019; dynamic humanoid, ATLAS, has pushed the limits of dynamic legged locomotion with its 28 hydraulically actuated joints. This robot has showcased impressive mobility feats, including jumping over obstacles and dynamic flip-turns. Unfortunately, there are no publications laying out the details of Boston Dynamics works. Therefore, little is known about the controllers used in ATLAS.</p>
<p>Another successful example is Cassie. Agility Robotics developed this bipedal robot based on an earlier prototype called ATRIAS led by Oregon State University <xref ref-type="bibr" rid="B2">Apgar et&#x20;al. (2018)</xref>. The biped can negotiate unstructured environments such as ramps and stairs inside buildings robustly and efficiently. With 20 Degrees of Freedom (DOF) and ten actuators, Cassie is a hard-to-control floating base possessing 6 Degrees of Under-actuation (DOU). With a smaller number of DOU than Cassie and ATRIAS and a restricted frontal dynamics, Michigan&#x2019;s MABEL possesses pogo-stick-style feet, compliant legs, and an anthropomorphic morphology. This robot has shown stable and natural running gaits similar to humans <xref ref-type="bibr" rid="B35">Sreenath et&#x20;al. (2011)</xref>. Completely blind and relied on no visual feedback, MABEL has showcased stable gaits, which involve traversing along rough terrains even when no information about the bumps&#x2019; whereabouts in its path is available <xref ref-type="bibr" rid="B27">Park et&#x20;al. (2012)</xref>.</p>
<p>Fully actuated systems such as Valkyrie, ASIMO, Mahru, and Yobotics-IHMC have shown impressive performance similar to the above examples. NASA&#x2019;s Johnson Space Center led a team of partners from academia and industry and developed NASA&#x2019;s first bipedal humanoid, Valkyrie <xref ref-type="bibr" rid="B25">Paine et&#x20;al. (2015)</xref>. Valkyrie has showcased the successful completion of sophisticated human-style tasks in the DARPA Robotic Challenge (DRC). Other examples such as Honda&#x2019;s ASIMO <xref ref-type="bibr" rid="B15">Hirose and Ogawa (2006)</xref> and Samsung&#x2019;s Mahru III <xref ref-type="bibr" rid="B21">Kwon et&#x20;al. (2007)</xref> have demonstrated capabilities such as quasi-static walking, running, dancing, and climbing stairs inside buildings. Or, Yobotics-IHMC lower body, humanoid biped has shown recovery from severe pushes <xref ref-type="bibr" rid="B31">Pratt et&#x20;al. (2009)</xref>.</p>
<p>Despite all of these accomplishments, state-of-the-art bipedal robots are prone to fall-over and cannot negotiate highly rough terrains. Even humans known for their natural, efficient, and robust locomotion feats cannot recover from unpredictable situations such as severe external pushes, scuffing, or slippage on icy surfaces.</p>
<p>Our main goal is to enhance bipedal systems&#x2019; robustness through distributed arrays of thrusters and nonlinear control. This paper will report our recent efforts in dynamic modeling and designing closed-loop feedback for the thruster-assisted locomotion of a legged robot called Harpy, which is shown in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>. Currently, Harpy&#x2019;s hardware is being developed at Northeastern University (NU). This bipedal robot is equipped with a total number of eight custom-made joint actuators, a pair of coaxial thrusters fixed to Harpy&#x2019;s torso, and a light body structure fabricated out of reinforced carbon fibers.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>Illustration of <italic>Harpy&#x2019;s</italic> CAD model. Harpy is a bipedal robot with a pair of thrusters and is being developed by the authors to study robust, efficient and agile thruster-assisted legged locomotion.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g001.tif"/>
</fig>
<p>The overarching goal is to integrate aerial and legged systems&#x2019; capabilities in a single platform. Aerial robots possess fast mobility mainly because they can fly over obstacles. This property of aerial systems can be highly suitable for applications such as automated package delivery or monitoring and inspection from vantage points. While legged robots may have difficulty negotiating extremely bumpy terrains, e.g., semi-collapsed buildings in the aftermath of an earthquake, these systems maintain a superior energetic efficiency of locomotion compared to aerial drones.</p>
<p>Unlike aerial robots, legged systems can safely operate near humans and animals and are very suitable for many applications such as search and rescue inside buildings, digital agriculture, monitoring livestock for disease symptoms, assisting workers in construction zones, etc. In all of these applications, the fast-rotating blades in rotary-wing robots can result in severe laceration injuries. As a result, there are strict rules on aerial systems&#x2019; operation near humans.</p>
<p>From a control design perspective, thruster-assisted legged locomotion has not been explored previously. In this work, we are particularly interested in the closed-loop feedback design implications of thrusters, and our objective is to apply thrusters to achieve two distinguished goals. We will briefly discuss these goals&#x20;below.</p>
<sec id="s1-1">
<title>1.1 Disturbance Rejection in the Sagittal and Frontal Planes of Locomotion</title>
<p>One objective is to use the thrusters and robustify the gaits. Bipedal platforms are incredibly vulnerable to disturbance and fall-over. Environment and model disturbances are common contributors to these systems&#x2019; tip-over instability (rotational and postural) <xref ref-type="bibr" rid="B11">Goswami and Kallem (2004)</xref>, which can lead to complete loss or severe damages to the system. Because of the inherent complexity of disturbance rejection, a handful of mainstream strategies have been successfully applied to solve such a vulnerability <xref ref-type="bibr" rid="B12">Gubina et&#x20;al. (1974)</xref>; <xref ref-type="bibr" rid="B32">Pratt and Tedrake (2006)</xref>; <xref ref-type="bibr" rid="B18">Kajita and Tani (1991)</xref>; <xref ref-type="bibr" rid="B44">Hill and Fahimi (2015)</xref>; <xref ref-type="bibr" rid="B45">Mandava and Vundavilli (2018)</xref>; <xref ref-type="bibr" rid="B43">Song et&#x20;al. (2018)</xref>; <xref ref-type="bibr" rid="B46">Arcos-Legarda et&#x20;al. (2019)</xref>. None of these strategies have been able to mitigate tip-over scenarios entirely.</p>
<p>Rotational stability can be achieved if the external forces and moments acting on the system yield zero centroidal moments, i.e.,&#x20;the system&#x2019;s overall angular momentum is conserved <xref ref-type="bibr" rid="B37">Vukobratovi&#x107; and Stepanenko (1972)</xref>. External forces and moments may arise from various sources, such as gravity, immature ground contacts, and unexpected external disturbances. To retain rotational stability the orientation of the Ground Reaction Force (GRF) should be regulated relative to the Center of Mass (COM).</p>
<p>Bipedal robots cannot directly control the magnitude and orientation of the GRF because of the unilaterality of the contact forces. However, they can modulate the GRF indirectly through the nonlinear couplings in these systems. The unilaterality of GRF yields a considerably limited tip-over recovering and disturbance rejection capability. For instance, when the extent of the disturbance force is moderately small, e.g., a gentle push, small body movements can be leveraged to retain the robot&#x2019;s rotational balance.</p>
<p>Upper body movements can be applied to induce restoring moments at the hips and ankles by transferring angular moments. Traditional forward and inverse kinematics frameworks that place virtual components such as dampers and springs in strategic locations in the robot have been successfully applied to describe these robot-environment interactions <xref ref-type="bibr" rid="B30">Pratt et&#x20;al. (2001)</xref>. Still, their use is limited to minor disturbances.</p>
<p>Other widely applied methods based on Center of Pressure (COP) control are limiting. Only limited to quasi-steady gaits, these frameworks locate and regulate the COP of a bipedal robot within the support polygon through various strategies, e.g., applying ankle torques, to oppose the tip-over moment. That said, the effectiveness of these methods is limited. The movement of the COP position along the feet, which is proportional to the torque generated at the ankle, can end to the boundaries of the support polygon, and tip-over can occur. As a result, the support polygon&#x2019;s size is often interpreted as the decision (stability) margin in the state space of the COM. The position of the COM relative to the support polygon is constantly monitored to decide whether the COP-based controller is enough to retain stability or not <xref ref-type="bibr" rid="B29">Pratt et&#x20;al. (2006)</xref>.</p>
<p>More aggressive disturbance rejection mechanisms such as a flywheel effect allow for additional momentum contribution required to retain a bipedal robot&#x2019;s stability against more prominent external disturbances, e.g., a hard impulsive push force applied to the system <xref ref-type="bibr" rid="B36">Stephens (2007)</xref>. However, the flywheel method&#x2019;s effectiveness can be limited mainly because significant resisting torques must be applied to the joints to terminate the flywheel effect after the disturbance is attenuated, which can yield other issues such as the violation of contact forces at leg-end points. Larger disturbances can be handled by taking a few compensating steps, just like humans retaining their balance under sudden pushes. While this approach is very promising, its effectiveness is highly affected by other limitations in the step kinematics and impact dynamics (the topology of terrain).</p>
</sec>
<sec id="s1-2">
<title>1.2 Dynamic Walking and Performance Satisfaction</title>
<p>Another objective is to explore performance satisfaction paradigms superior to existing methods. We will briefly explain this objective&#x20;here.</p>
<p>Dynamic bipedal walkers possess small support polygons. Small stability margin and underactuation at the contact points result in severe challenges to achieve energetically efficient and robust gaits. These two antagonistic properties are often achieved at the cost of sacrificing one another, and satisfying efficiency and robustness at the same time is still an open problem. Examples such as the robust locomotion feats of ATLAS robot achieved through the application of energy-hungry hydraulic actuators and the efficient gaits of Cornell&#x2019;s passive walker with a minimum number of electric actuators are two notable examples that fall on the two opposite ends of the performance spectrum.</p>
<p>The problem of simultaneously providing asymptotic stability, optimizing desired performance indices, and satisfying gait constraints in legged systems has been studied extensively <xref ref-type="bibr" rid="B38">Westervelt and Grizzle (2007)</xref>; <xref ref-type="bibr" rid="B9">Galloway et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B4">Dai and Tedrake (2016)</xref>; <xref ref-type="bibr" rid="B8">Feng et&#x20;al. (2014)</xref>. However, the challenges remain, and there are severe limits with existing methods. For instance, model-based methods such as Hybrid Zero Dynamics (HZD), which have offered rigorous ways to assign attributes such as a minimized total cost of transport and robustness in an off-line fashion, are restrictive for dynamic scenarios involving joint trajectory re-planning. Or, in work by, despite increased cost-of-transport optimization accuracy without additional computational time using a variable-time-interval trajectory optimization method, obtaining optimal solutions remain restricted to simple models and slow&#x20;gaits.</p>
<p>To better understand existing options, we categorize performance satisfaction in dynamic systems &#x2013; regardless of being a legged or non-legged robot (e.g., robot manipulators) &#x2013; into three broad categories. Namely: 1) trajectory optimization (TO), 2) optimization-based (nonlinear) controls, and 3) reference trajectory manipulation.</p>
<p>TO problems&#x2019; goal is to generate optimal trajectories that satisfies constraints on states, inputs, and GRF while ensuring that the trajectories lead to stable walking gaits. TO problems for the legged robot are challenging to solve due to their nonlinear dynamics, high degrees of freedom and the system&#x2019;s hybrid nature brought on by ground impact. Previous works such as <xref ref-type="bibr" rid="B28">Posa et&#x20;al. (2014)</xref>; <xref ref-type="bibr" rid="B13">Hereid et&#x20;al. (2016)</xref>; <xref ref-type="bibr" rid="B22">Medeiros et&#x20;al. (2020)</xref> have proposed methods to transcribe this as a Nonlinear Programming (NLP) problem through direct collocation methods where polynomial splines are used to approximate the continuous dynamics and thus reducing computational complexity without needing to account for the actual dynamics. Other works such as <xref ref-type="bibr" rid="B14">Hereid et&#x20;al. (2015)</xref> have instead proposed utilizing multiple shooting methods to break the original problem down into smaller steps without approximations.</p>
<p>In both cases, however, the system&#x2019;s dynamics need to be considered along with contact dynamics to generate the trajectories. These works <xref ref-type="bibr" rid="B26">Pardo et&#x20;al. (2017)</xref>; <xref ref-type="bibr" rid="B42">Xin et&#x20;al. (2020)</xref>, to dodge the need to define ground contact dynamics explicitly, have employed null space projection methods. Meaning, zero acceleration constraints are enforced on feet ends in <xref ref-type="bibr" rid="B13">Hereid et&#x20;al. (2016)</xref>. The issue remains, and these methods are extremely computationally expensive and cannot be implemented in real-time, taking a few minutes to solve the TO problem. For works that use reduced-order models such as the centroidal dynamics or utilize Zero Moment Point (ZMP) based methods as in <xref ref-type="bibr" rid="B29">Pratt et&#x20;al. (2006)</xref>; <xref ref-type="bibr" rid="B41">Winkler et&#x20;al. (2015)</xref>, experimental results of online optimization are available. These results are restricted to pseudo-static gaits rather than dynamic&#x20;ones.</p>
<p>In the second category (i.e.,&#x20;optimization-based control schemes), the goal is to compute constraint-aware feedback stabilizing control loops. This goal is most commonly achieved through a predictive framework, usually by creating a linearized model over a finite-time horizon. For instance, in <xref ref-type="bibr" rid="B3">Bledt et&#x20;al. (2018)</xref>; <xref ref-type="bibr" rid="B7">Fahmi et&#x20;al. (2019)</xref>; <xref ref-type="bibr" rid="B1">Angelini et&#x20;al. (2019)</xref>, in a hierarchical framework, reduced-order models around the COM are used to generate reference acceleration for the low-level tracking controller. The downfall of these options is the need to linearize and simplify the robot&#x2019;s underlying dynamics to make it feasible in real-time, and as a result, not all constraints can be considered. In <xref ref-type="bibr" rid="B17">Hutter et&#x20;al. (2014)</xref>; <xref ref-type="bibr" rid="B42">Xin et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B9">Galloway et&#x20;al. (2015)</xref>; <xref ref-type="bibr" rid="B23">Nguyen and Sreenath (2016)</xref>, the desired control inputs are computed taking into account the full-dynamics, and then optimization is carried out on a simplified least square or QP problem for tractability.</p>
<p>A different approach, which is the focus of the third category in our list, is to remove optimization from the control strategy and instead modify the reference trajectories to obey desired constraints. This idea was popularized through Reference Governors (RG) <xref ref-type="bibr" rid="B19">Kapasouris et&#x20;al. (1988)</xref>, where an efficient online optimization method is employed. The core to this idea is that the reference trajectory that the controller must follow can be manipulated while keeping it close to the original trajectory in the event that boundaries created by constraints are to be violated. Since its inception, this idea has spawned many variations <xref ref-type="bibr" rid="B20">Kolmanovsky et&#x20;al. (2012)</xref>; <xref ref-type="bibr" rid="B10">Garone et&#x20;al. (2017)</xref> including an optimization-free approach known as Explicit Reference Governor (ERG) <xref ref-type="bibr" rid="B24">Nicotra and Garone (2015)</xref>. Besides the possibility of utilizing an optimization-free form, the other major advantage with RG is that it acts as an add-on scheme to an existing controller without the need for any modification on the control scheme. However, these methods have only proven useful in relatively simple nonlinear systems as their applications to high-dimensional nonlinear problems are nearly impossible.</p>
<p>Other emerging paradigms such as Approximate Dynamic Programming (ADP), reinforcement learning, decoupled approaches to design control for nonlinear stochastic systems, etc., can potentially remedy the challenges in the future. For instance, employed a learning method to understand the stability and robustness of stability against the external disturbances of a passive biped walker. They used a multi-objective, multi-modal particle swarm optimization algorithm to find stable initial conditions for their biped walker model. These approaches are currently far from providing any practical solutions to the problem of performance satisfaction in dynamic bipedal walkers. They are shown to be only effective on simpler practical robots, mainly those that can only demonstrate quasi-static&#x20;gaits.</p>
</sec>
</sec>
<sec id="s2">
<title>2 Contributions and the Summary of the Proposed Framework</title>
<p>While gait design for complex, multi-DOF legged robots based on full or reduced-order models has been addressed extensively, optimization-free gait re-design in a reactive fashion and within gait strides are often considered only for quasi-static walkers. In dynamic walkers, such reactive gait adjustments take very complex forms involving optimization problems to ensure gait feasibility conditions.</p>
<p>One primary reason that within-strides gait adjustment in dynamic walkers involves optimization is that these bipeds possess small support polygons that leave small to no stability margins and make gait adjustment very intricate. With this observation and to combat the challenges associated with dynamic walking, our primary objective is to apply novel thrust-vectoring-based control actions in bipedal legged locomotion. Despite their potential merits, as we discussed above, the application of these thrusters has remained unexplored and existing studies, are limited to only flight control and not thruster-assisted legged locomotion.</p>
<p>Specifically speaking, the contribution of this work achieved due to thrusters&#x2019; presence in our robot is four-pronged.</p>
<p>&#x2022; The first contribution of this work is that it employs thruster actions during the gait cycles for several vital reasons. These objectives include securing frontal dynamics stability, avoiding sagittal plane fallovers, and making aggressive jumps over obstacles. Previously, to achieve these goals, bipedal-legged robots entirely relied on indirect methods such as posture control (at stance phase) and rules of conservation of angular momentum (at flight phase during running) to avoid these fallover scenarios.</p>
<p>&#x2022; This work introduces a decoupled view towards satisfying two antagonistic properties of efficiency and robustness. Meaning it shows that one can consider part of the gait cycle for performance satisfaction and the rest of the step period for gait robustification. The application of this decoupled view towards performance satisfaction is impossible in conventional bipeds. As a result, the decoupled idea remained unexplored. A major consequence of applying the decoupled view is that it allows the application of simpler computational algorithms for joint trajectory planning (or re-planning), control, and GRF constraint satisfaction, which constitute the next contribution of this&#x20;work.</p>
<p>&#x2022; Introducing an efficient controller, which secures the feasibility of the gaits and constraints, is the third contribution of this work. This work presents a systematic approach based on reference governors, which are relied on provable Lyapunov stability properties, to minimize computational overhead. This approach permits performing motion planning in the state-space of the Zero Dynamics (ZD) of our bipedal robot, yielding a significantly lower cost of computation than widely used optimization-based methods applied on full- or reduced-order dynamical models. To comprehensively describe this method, we will extend our previous works <xref ref-type="bibr" rid="B5">Dangol et&#x20;al. (2020)</xref>; <xref ref-type="bibr" rid="B6">Dangol and Ramezani (2020)</xref> by conjointly employing state-space motion planning tools and celebrated bipedal robot control design frameworks such as the HZD method.</p>
<p>We take a simulation-based approach to validate our method. We will use the simulators developed for our Harpy platform, capitalize on the thrusters&#x2019; action to resolve and re-design Harpy&#x2019;s gait parameters during its Single Support (SS) phase. The SS phase is the most extended phase in Harpy&#x2019;s gait cycle. Then, we will assume well-tuned supervisory controllers within our reference governor model and focus on fine-tuning Harpy&#x2019;s joints&#x2019; desired trajectories to satisfy gait feasibility constraints, including saturating controls and retaining feasible contact forces.</p>
<p>&#x2022; Finally, this work shows that achieving hybrid invariance in the face of significant external perturbations, in a finite-time fashion, using thrust vectoring is possible. Here, hybrid invariance is violated for an important reason. Since we devise intermediary filters based on RGs, there can be a mismatch between the robot&#x2019;s states at the gaits&#x2019; boundaries. Put differently, Harpy&#x2019;s gait modifications and impact events can lead to severe deviations from its nominal periodic orbits. In this work, we demonstrate that owing to Harpy&#x2019;s thrusters hybrid invariance will be achieved by either applying the thrusters throughout the whole gait cycle or employing them intermittently.</p>
<p>This work is organized as follows. In <xref ref-type="sec" rid="s3">Section 3</xref>, we will briefly introduce our platform, Harpy. We will avoid reporting hardware-related matters in this work as they are beyond the scope of this publication. Harpy&#x2019;s hardware will be reported in subsequent publications. In <xref ref-type="sec" rid="s4">Section 4</xref>, Harpy&#x2019;s planar dynamics, which consist of continuous and impact models, will be derived. The robot&#x2019;s SS phase will be modeled as a Reduced-Order Model (ROM) following standard conventions and assumptions found in textbooks <xref ref-type="bibr" rid="B38">Westervelt and Grizzle (2007)</xref>. Then, a two-point DS model followed by an impact map for a non-instantaneous phase will be obtained. Hybrid invariance will be achieved using a Nonlinear Model Predictive Control (NMPC) scheme during the DS phase. Gait design based on HZD method and satisfying performance constraints based on RG will be explained in detail. Last, our simulation results will be discussed in <xref ref-type="sec" rid="s6">Section 6</xref> as we will report the performance of the proposed approach.</p>
</sec>
<sec id="s3">
<title>3 Quick Overview of Harpy Platform</title>
<p>This section will discuss Harpy&#x2019;s physical properties and elaborate on our philosophy regarding the design. Also, we will briefly discuss the weight considerations and mass allocation and their impact on modeling.</p>
<sec id="s3-1">
<title>3.1 Physical Properties</title>
<p>The system, shown in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>, weighs roughly 4 lbs. It is 2.4&#xa0;ft tall. The legs are composed of a parallelogram mechanism. With a highly integrated and unified actuation and sensing applied in the design of Harpy, which will be explained below, minimum use of metal components, including fasteners, housings, support structures, etc., is achieved. Parts are designed for modularity, energy efficiency, and low weight. It is worth noting that high energy-to-weight ratios are critical characteristics of birds which are our design role models. Birds are capable of showcasing legged and aerial locomotion to perfection.</p>
</sec>
<sec id="s3-2">
<title>3.2 Upper Body Design</title>
<p>The torso, shown in <xref ref-type="fig" rid="F2">Figure&#x20;2</xref>, hosts two brush-less DC actuators with harmonic drives to increase the output torque. These actuators are used to move the legs in the frontal plane of motion. Two co-axial thrusters are attached to a separate actuator and can move relative to the torso in the sagittal plane of locomotion. We will use the thrusters for the following purposes: 1) to directly regulate the ground contact forces, 2) to recover the system when incidental tip-overs occur, 3) to generate the lift force required for jumping over obstacles, 4) to stabilize the frontal dynamics and 5) to secure hybrid invariance. Additionally, the torso encapsulates power electronics, including the amplifiers for actuators and thrusters, sensors, communication nodes, and a computer for online processing and closed-loop feedback.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>
<bold>(A)</bold> Illustrates the current status of the ongoing Harpy hardware developments at Northeastern University. <bold>(B,C)</bold> Show successful mono-pedal jumping tests with and without thrusters. A gantry supports the half-finished prototype in these&#x20;tests.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g002.tif"/>
</fig>
<p>The robot is underactuated when the thrusters are off and can be overactuated when active. Indeed, when Harpy is unconstrained, i.e.,&#x20;it is not in contact with the environment, it possesses 14 DOF. Six DOF are associated with the translation and orientation of the robot. There are two DOF at the locations where the hips are attached to the&#x20;torso.</p>
</sec>
<sec id="s3-3">
<title>3.3 Payload Reduction and Added Mass Challenge</title>
<p>The mechanical design and actuation approach applied in Harpy is different from existing platforms. Instead of the generous incorporation of metal components, it has been tried to rely on composite material, fiber-inlay additive manufacturing, and embedding methods. The design approach based on embedding all of the components within the composite structure of the robot has been applied to achieve an ultra-light robot. Gaining a minimized total weight is essential in Harpy&#x2019;s design. Harpy can be looked upon as a self-manipulating system therefore, large payloads can lead to the need for stronger actuators or thrusters. These actuators are often heavier, and consequently, extra mass can be introduced in the design.</p>
</sec>
<sec id="s3-4">
<title>3.4&#x20;Spring-Loaded Inverted Pendulum Model Design Considerations</title>
<p>The actuators and Harpy&#x2019;s structure are designed to deliver a large range of motion on all DOF. Low-inertia limbs are considered to capture Spring-Loaded Inverted Pendulum (SLIP) model characteristics. Each leg, shown in <xref ref-type="fig" rid="F1">Figure&#x20;1</xref>, possesses eight DOF and after considering the mechanical couplings three DOF remain. Back-driveable, harmonic drive actuators replace extra torque or force sensors or series compliance which can help reduce the overall mass of Harpy&#x2019;s&#x20;legs.</p>
<p>Low limb inertia and low reflected actuator inertia make the robot capable of extremely fast leg-swings. Besides, the hip and leg actuators are located so that their axes of rotation intersect at the hip joint. This design consideration helps reduce the moment of inertia in the frontal plane. The inherent compliance in the legs, particularly in the 4-bar linkage, can potentially reduce mechanical bandwidth in the legs. This property can affect foot placement performance. In a recently completed platform that uses a similar leg mechanism called Husky, fast and precise foot placement was achieved, supporting the feasibility of Harpy&#x2019;s leg design.</p>
</sec>
</sec>
<sec id="s4">
<title>4 Harpy Modeling</title>
<p>This section will briefly outline Harpy configuration space, underactuated and actuated coordinates, full-model, and ROMs. We will break down the gait cycle into two distinct phases: 1) an SS phase during which only one leg, called the stance leg, is in constant contact with the ground and 2) a DS phase during which both legs are fixated to the ground for a very short period. The transitions, including SS to DS and DS to SS, will be marked by the swing leg touch-down and lift-off, respectively as shown in <xref ref-type="fig" rid="F3">Figure&#x20;3</xref>.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Illustration of the SS and DS phases. Also, shows the thrusters utilized to regulate the GRF.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g003.tif"/>
</fig>
<p>Assuming point-foot walking, we will design predefined periodic gaits for the system following the well-established design framework of HZD as discussed in <xref ref-type="bibr" rid="B40">Westervelt et&#x20;al. (2003)</xref>. We will avoid discussing gait parameterization, design, and ZD derivations as the procedure has been exhaustively reported in the literature.</p>
<sec id="s4-1">
<title>4.1 Configuration Space and Control Inputs</title>
<p>We assume a body coordinate frame attached to the torso COM with the x- and <italic>z</italic>-axis pointing forwards and upwards, respectively. During the SS phase, Harpy&#x2019;s full-model possesses 14 DOF. The joint angles include roll (<italic>q</italic>
<sub>
<italic>r</italic>
</sub>), pitch (<italic>q</italic>
<sub>
<italic>p</italic>
</sub>), yaw (<italic>q</italic>
<sub>
<italic>y</italic>
</sub>), thigh (<italic>q</italic>
<sub>
<italic>iThigh</italic>
</sub>), knee (<italic>q</italic>
<sub>
<italic>iKnee</italic>
</sub>), hip (<italic>q</italic>
<sub>
<italic>iHip</italic>
</sub>), thruster (<italic>q</italic>
<sub>
<italic>iThrust</italic>
</sub>) angles for <inline-formula id="inf1">
<mml:math id="m1">
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>c</mml:mi>
<mml:mi>e</mml:mi>
<mml:mspace width="0.3333em"/>
<mml:mi>l</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>s</mml:mi>
<mml:mi>w</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>g</mml:mi>
<mml:mspace width="0.3333em"/>
<mml:mi>l</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> and stance leg-end positions <inline-formula id="inf2">
<mml:math id="m2">
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. All of these variables are stacked inside the vector <inline-formula id="inf3">
<mml:math id="m3">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>K</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>H</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>p</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> to form the states vector <inline-formula id="inf4">
<mml:math id="m4">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>.</p>
<p>For our planar models, the leg labels are switched at the moment of impact. The hip <italic>q</italic>
<sub>
<italic>iHip</italic>
</sub>, thigh <italic>q</italic>
<sub>
<italic>iThigh</italic>
</sub> and <italic>q</italic>
<sub>
<italic>iKnee</italic>
</sub> angles represent leg abduction-adduction, swing and flexion-extension motions, respectively. The thruster angle, <italic>q</italic>
<sub>
<italic>iThrust</italic>
</sub>, represents the rotation around the torso <italic>y</italic>-axis. By considering <italic>p</italic>
<sub>1</sub>, we permit the leg-end to bounce and slide on the contact surface.</p>
<p>Leg joints and thruster joints are actuated for a total of eight DOF, while attitude angles and stance leg-end positions constitute the underactuated coordinates, i.e.,&#x20;six DOF. The control vector <inline-formula id="inf5">
<mml:math id="m5">
<mml:mi>u</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> embodies the joint control actions <inline-formula id="inf6">
<mml:math id="m6">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>T</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>h</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>i</mml:mi>
<mml:mi>K</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<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>i</mml:mi>
<mml:mi>H</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>p</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>i</mml:mi>
<mml:mi>T</mml:mi>
<mml:mi>h</mml:mi>
<mml:mi>r</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, thruster wrench <italic>&#x3bb;</italic>
<sub>
<italic>i</italic>
</sub> and stance leg GRF&#x20;<italic>F</italic>
<sub>1</sub>.</p>
<p>Each co-axial thruster introduces two control actions, including a net thrust force and yaw moment in the thruster coordinate frame. These thruster wrench vectors are mapped (based on Harpy&#x2019;s geometry) to a net wrench vector in the body coordinate frame <inline-formula id="inf7">
<mml:math id="m7">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. This wrench vector consists of the net thruster force and moment on the body frame. This map is given by the adjoint transformation <inline-formula id="inf8">
<mml:math id="m8">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mo movablelimits="false" form="prefix">&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>A</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, which can be expanded as<disp-formula id="e1">
<mml:math id="m9">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:munderover>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(1)</label>
</disp-formula>where <italic>R</italic>
<sub>
<italic>i</italic>
</sub> is a rotation about <italic>q</italic>
<sub>
<italic>iThrust</italic>
</sub>, and <italic>S</italic> (<italic>d</italic>
<sub>
<italic>i</italic>
</sub>) is a skew-symmetric matrix that represents the distance component of the cross product <inline-formula id="inf9">
<mml:math id="m10">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mfenced open="(" close="">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is the distance from the torso to the thruster). This full-model will be used to validate the control design approach. Also, it will be employed to obtain&#x20;other low-order models, including five-link, three-link and VLIP models. All of these models can only move&#x20;in&#x20;the sagittal plane of locomotion and are shown in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Illustrates the stick diagram of the 3D and 2D models. The full 3D model is shown on the <bold>(A)</bold>. The equivalent five-, three-link and <italic>Variable-Length, Inverted Pendulum (VLIP)</italic> models are shown in <bold>(B&#x2013;D)</bold>, respectively.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g004.tif"/>
</fig>
<p>The planar five-link configuration vector embodies seven variables. Torso angle (<italic>q</italic>
<sub>
<italic>p</italic>
</sub>) is measured relative to the vertical line to the ground surface. The thigh and knee angles are defined similarly to the 3D model while the hip joint angles along with the yaw and roll angles about the world coordinate frame are ignored. As a result, only the thruster forces <italic>F</italic>
<sub>
<italic>xThrust</italic>
</sub> and <italic>F</italic>
<sub>
<italic>zThrust</italic>
</sub>, expressed in the torso coordinate frame, are considered part of the control input. Stance leg-end positions are parameterized with the normal (<italic>p</italic>
<sub>
<italic>n</italic>
</sub>) and tangent (<italic>p</italic>
<sub>
<italic>t</italic>
</sub>) terms to complete a 7-DOF configuration variable vector. The configuration variables for planar three-link and VLIP models are also constructed similarly as shown in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref>.</p>
</sec>
<sec id="s4-2">
<title>4.2 Restricting Frontal and Transversal Dynamics Using Thrusters</title>
<p>The thrusters are located at each side of the body and are aligned with the body COM about the sagittal axis. This design allows the use of the thruster net force and torque around the COM to stabilize the robot&#x2019;s roll and yaw angles. To restrict the motions of the 3D model to the sagittal plane of locomotion, we employ thruster actions and a simple closed-loop controller. The controller stabilizes the frontal and transversal dynamics. As a result, 2D gaits designed for the sagittal plan of locomotion can be easily applied to the 3D model. For instance, frontal dynamics stabilization is achieved by employing opposite thruster forces at the left and right thrusters.</p>
</sec>
<sec id="s4-3">
<title>4.3 Single Support Model</title>
<p>At single support, the system retains only a single point of contact with the ground. This contact point is not fixed. A simple static friction model describes the contact force. Regarding the mass allocation in the system, the torso is modeled as a single point mass with no moment of inertia. Since the hip and thigh actuators are located near each other, a single point mass is considered for both of them. Similarly, the knee actuator is modeled as a point mass with no moment of inertia. All of the connecting rods are assumed to be mass-less.</p>
<p>The mass allocation in the planar models is slightly different from the 3D model. For instance, in our five-link model, a single point mass is fixated to the hip joint and is equivalent to the overall mass at the hip in the 3D model. In the three-link model, each leg mass is equivalent to the knee actuator mass, which is fixated to the lower leg in the five-link model. The hip and thigh from the 3D model are summed up and fixated at the hip joint in the three-link model. Last, in the VLIP model, the system&#x2019;s total mass is considered a point&#x20;mass.</p>
<p>The governing equations of motion are derived using the methods of Lagrange by taking the kinetic <inline-formula id="inf10">
<mml:math id="m11">
<mml:mi mathvariant="script">K</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and potential <inline-formula id="inf11">
<mml:math id="m12">
<mml:mi mathvariant="script">V</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> energies of the system which leads to <inline-formula id="inf12">
<mml:math id="m13">
<mml:mi mathvariant="script">L</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="script">K</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mi mathvariant="script">V</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>. The resulting equations of motion are expressed in vector form as following<disp-formula id="e2">
<mml:math id="m14">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</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>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>u</mml:mi>
<mml:mo>,</mml:mo>
</mml:math>
<label>(2)</label>
</disp-formula>where <italic>D</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>s</italic>
</sub>) is the symmetric inertial matrix and is only dependent on <italic>q</italic>
<sub>
<italic>s</italic>
</sub>, the <inline-formula id="inf13">
<mml:math id="m15">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> matrix contains the Coriolis terms, <italic>G</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>s</italic>
</sub>) contains gravity terms, and the control matrix <italic>B</italic>
<sub>
<italic>s</italic>
</sub>(<italic>q</italic>
<sub>
<italic>s</italic>
</sub>) maps the inputs to the generalized coordinate accelerations <inline-formula id="inf14">
<mml:math id="m16">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. Consequently, the full-model can be written in a state-space form as<disp-formula id="e3">
<mml:math id="m17">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<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>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>u</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>u</mml:mi>
<mml:mo>,</mml:mo>
</mml:math>
<label>(3)</label>
</disp-formula>where the state vector is denoted by <inline-formula id="inf15">
<mml:math id="m18">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. Other&#x20;planar models are obtained similarly after considering the modeling assumptions explained above. Next, the derivation of the non-instantaneous double support model follows.</p>
</sec>
<sec id="s4-4">
<title>4.4&#x20;Non-Instantaneous Double Support Model</title>
<p>The end of the SS phase is marked by an impulsive impact event when the swing leg-end <inline-formula id="inf16">
<mml:math id="m19">
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> makes contact with the ground. Then two leg-ends (<italic>p</italic>
<sub>1</sub> and <italic>p</italic>
<sub>2</sub>) will be fixed to the ground during the DS phase until the new swing leg lifts off. We will assume fixed DS time intervals for all gait cycles. This switching from the SS to DS phase is captured by defining the switching conditions <italic>p</italic>
<sub>2<italic>n</italic>
</sub> &#x3d; 0 and <italic>p</italic>
<sub>2<italic>t</italic>
</sub> &#x3e; 0. Switching happens when the swing leg-end height, <italic>p</italic>
<sub>2<italic>n</italic>
</sub>, is zero and its tangential (horizontal) position <italic>p</italic>
<sub>2<italic>t</italic>
</sub> &#x3e; 0, i.e.,&#x20;the swing leg lands in front of the stance&#x20;leg.</p>
<p>The map to describe leg-end impact is modeled as in the literature <xref ref-type="bibr" rid="B16">Hurmuzlu and Marghitu (1994)</xref> which solves for the post-impact states <inline-formula id="inf17">
<mml:math id="m20">
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and GRF. The widely employed assumptions of rigid ground models such as instantaneous duration and inelasticity are considered to capture the system&#x2019;s behavior at the impact moment. As a result, there are no changes in the joints&#x2019; position (i.e.,&#x20;<inline-formula id="inf18">
<mml:math id="m21">
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>). Only angular velocity spikes occur at the impact moment. To cover every aspect of thruster-assisted legged locomotion and for the sake of completeness, we will briefly explain this process.</p>
<p>In order to formulate this impact map &#x394;(<italic>x</italic>
<sub>
<italic>s</italic>
</sub>), the model given by <xref ref-type="disp-formula" rid="e3">Eq. 3</xref> is considered. The vector <italic>q</italic>
<sub>
<italic>s</italic>
</sub> is augmented to include the new stance leg-end position <italic>p</italic>
<sub>2</sub>, <inline-formula id="inf19">
<mml:math id="m22">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. Then, it is assumed that the angular momentum is conserved about the previous stance leg-end <italic>p</italic>
<sub>1</sub> at the moment of impact. The equations of motion are re-formulated to include the impulsive GRF, <inline-formula id="inf20">
<mml:math id="m23">
<mml:mi>&#x3b4;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, at each leg-end <inline-formula id="inf21">
<mml:math id="m24">
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>
<disp-formula id="e4">
<mml:math id="m25">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</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>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b4;</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(4)</label>
</disp-formula>where <inline-formula id="inf22">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <inline-formula id="inf23">
<mml:math id="m27">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. In this equation, <inline-formula id="inf24">
<mml:math id="m28">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</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 Lagrange multiplier that assumes both legs are fixed to the ground at the moment of impact. Based on this assumption, we can then formulate this as a zero velocity constraint at the foot-ends, i.e.,&#x20;<inline-formula id="inf25">
<mml:math id="m29">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>. Combining this with the conservation of angular momentum, the post-impact states and GRF can be solved as follows<disp-formula id="e5">
<mml:math id="m30">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</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:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(5)</label>
</disp-formula>
</p>
<p>The inertial matrix <italic>D</italic>
<sub>
<italic>d</italic>
</sub> (<italic>q</italic>
<sub>
<italic>d</italic>
</sub>) is a square, symmetric and positive definite, and <inline-formula id="inf26">
<mml:math id="m31">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is full rank <xref ref-type="bibr" rid="B39">Westervelt et&#x20;al. (2018)</xref>. As a result, the matrix inversion shown above is possible, which yields the impact map &#x394;(&#x22c5;). After the impact event, both feet stay fixed to the ground. This fixation results in a non-instantaneous DS phase, which is assumed to last for a fixed time interval. This condition is enforced by considering appropriate constraints in the system and is skipped&#x20;here.</p>
</sec>
</sec>
<sec id="s5">
<title>5 Control</title>
<p>Here, we outline an overview of our approach to satisfy state, control and GRF constraints during gait cycles by <italic>deforming</italic> the ZD Manifolds whose restriction dynamics governes the gaits. The notion of directional derivatives <inline-formula id="inf27">
<mml:math id="m32">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>y</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mi>f</mml:mi>
</mml:math>
</inline-formula> and holonomic constraints <italic>y</italic>&#x20;&#x3d; <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) &#x3d; <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>s</italic>
</sub>) will be adopted in a similar way as mainstream publications in this&#x20;field.</p>
<p>The holonomic constraints (<italic>y</italic>) are widely known as Virtual Constraints (VCs) since they are enforced by closed-loop feedback <xref ref-type="bibr" rid="B39">Westervelt et&#x20;al. (2018)</xref>. Based on these constraints, celebrated control invariant sets of the form <inline-formula id="inf28">
<mml:math id="m33">
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mi>G</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> where <inline-formula id="inf29">
<mml:math id="m34">
<mml:mi>G</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and <inline-formula id="inf30">
<mml:math id="m35">
<mml:mi>r</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>k</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula> can be defined. The rank condition guarantees that &#x393;, i.e.,&#x20;<inline-formula id="inf31">
<mml:math id="m36">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, is 1-dimensional.</p>
<p>Since there is only one degree of underactuation in all of our planar models, therefore, <inline-formula id="inf32">
<mml:math id="m37">
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> takes the form of a closed curve. We can find a transformation for the configuration variable, <inline-formula id="inf33">
<mml:math id="m38">
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, such that the actuated coordinates are stacked on top the underactuated coordinate. With this in mind, we consider the following parametric descriptions <italic>q</italic>
<sub>1</sub> &#x3d; <italic>r</italic>
<sub>1</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>), <italic>&#x2026;</italic>, <italic>q</italic>
<sub>
<italic>n</italic>&#x2212;1</sub> &#x3d; <italic>r</italic>
<sub>
<italic>n</italic>&#x2212;1</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) where <italic>q</italic>
<sub>
<italic>n</italic>
</sub> in all of our planar models can be the last entry of <italic>q</italic>
<sub>
<italic>s</italic>
</sub>. As a result, the output function almost similarly takes the following form for all of the models<disp-formula id="e6">
<mml:math id="m39">
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(6)</label>
</disp-formula>
</p>
<p>Here <italic>q</italic>
<sub>
<italic>j</italic>
</sub> denotes the actuated joint variables, and <italic>H</italic>
<sub>2</sub> extracts <italic>q</italic>
<sub>
<italic>j</italic>
</sub> from <inline-formula id="inf34">
<mml:math id="m40">
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>. Note that <inline-formula id="inf35">
<mml:math id="m41">
<mml:mi>r</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and the matrix <inline-formula id="inf36">
<mml:math id="m42">
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</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:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> can take a trivial form if each joint independently is derived with a single actuator only. The classical problem of enforcing VCs considers fixed gait parameters or, at best, in event-based methods, permits dynamics-free updates of the gait parameters at the boundaries of the gait cycles. As such, by deforming the manifold &#x393; at the boundaries (i.e.,&#x20;after impact moments), gait characteristics, including average walking speed, step length, etc., are regulated.</p>
<p>However, these methods happen in a discrete-time fashion, and the resulting closed-loop system possesses a very small basin of attraction. Part of the reason the continuous deformation of &#x393; has never been considered before is that standard bipedal robots, with their small support polygon, cannot achieve stable periodic orbits when <inline-formula id="inf37">
<mml:math id="m43">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is deformed. With this observation, we aim to apply the thrusters in two different ways, as discussed earlier in <xref ref-type="sec" rid="s1">Section 1</xref>. In a nutshell, the idea is to continuously deform <inline-formula id="inf38">
<mml:math id="m44">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> such that the following conditions are satisfied. First, we want <inline-formula id="inf39">
<mml:math id="m45">
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> to remain continuous and form closed curves, i.e. <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>(<italic>t</italic>)) &#x3d; <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub> (<italic>t</italic>&#x20;&#x2b; <italic>T</italic>)), where <italic>T</italic> is the gait period.</p>
<p>Second, we want &#x393; to remain stabilized at all times; otherwise, enforcing VCs will be impossible. Last, we want gait feasibility conditions, including the equality <inline-formula id="inf40">
<mml:math id="m46">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> and inequality constraints <inline-formula id="inf41">
<mml:math id="m47">
<mml:mn>0</mml:mn>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, to be satisfied. This problem (we refer the readers to <xref ref-type="bibr" rid="B40">Westervelt et&#x20;al. (2003)</xref> for more details) can take the following constrained ordinary differential equation form:<disp-formula id="e7">
<mml:math id="m48">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>a</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:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>a</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:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">ff</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">c</mml:mi>
<mml:mi mathvariant="normal">t</mml:mi>
<mml:mi mathvariant="normal">s</mml:mi>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mi mathvariant="normal">g</mml:mi>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2260;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">f</mml:mi>
<mml:mi mathvariant="normal">o</mml:mi>
<mml:mi mathvariant="normal">r</mml:mi>
<mml:mi mathvariant="normal">m</mml:mi>
<mml:mi mathvariant="normal">e</mml:mi>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mtext>s</mml:mtext>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(7)</label>
</disp-formula>where the first line governs the restriction dynamics (<italic>a</italic>
<sub>
<italic>i</italic>
</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) are nonlinear terms) and the second line is the condition for the stabilizability of &#x393;. Widely considered gait feasibility constraints such as &#x7c;<italic>x</italic>
<sub>
<italic>s</italic>
</sub>&#x7c; &#x3c; <italic>x</italic>
<sub>
<italic>max</italic>
</sub>, &#x7c;<italic>u</italic>&#x7c; &#x3c; <italic>u</italic>
<sub>
<italic>max</italic>
</sub>, 0 &#x3c; <italic>F</italic>
<sub>
<italic>N</italic>
</sub> and <inline-formula id="inf42">
<mml:math id="m49">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x3c;</mml:mo>
<mml:mi>&#x3bc;</mml:mi>
</mml:math>
</inline-formula> can form the equality and inequality constraints, where <italic>F</italic>
<sub>
<italic>T</italic>
</sub>, <italic>F</italic>
<sub>
<italic>N</italic>
</sub> are the tangential and normal components of GRF and <italic>&#x3bc;</italic> is the coefficient of friction.</p>
<p>In our approach, the positive invariance property plays a key role and is closely dependent on how <inline-formula id="inf43">
<mml:math id="m50">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is deformed. Positive invariance allows finding the control input <italic>u</italic> such that when <italic>q</italic>
<sub>
<italic>s</italic>
</sub> (0) is on <inline-formula id="inf44">
<mml:math id="m51">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> the velocities <inline-formula id="inf45">
<mml:math id="m52">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> remains tangent to <inline-formula id="inf46">
<mml:math id="m53">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> yielding the solutions <italic>q</italic>
<sub>
<italic>s</italic>
</sub>(<italic>t</italic>) remain on the manifold &#x393; for all <italic>t</italic>&#x20;&#x3e;&#x20;0.</p>
<p>If this property is guaranteed, the constraint satisfaction problem can be transformed into a motion planning problem in the state space of the internal dynamics that can be conveniently tackled using simple path-planning tools. This particularly becomes important and handy when fast and reactive gait planning is needed in dynamic walkers. We will further elaborate on this concept with a simple example.</p>
<sec id="s5-1">
<title>5.1 Motivation Behind Valid Deformations of <inline-formula id="inf47">
<mml:math id="m54">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</title>
<p>To motivate our idea, we will consider <inline-formula id="inf48">
<mml:math id="m55">
<mml:mi mathvariant="normal">&#x3a3;</mml:mi>
<mml:mo>:</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> and part of <inline-formula id="inf49">
<mml:math id="m56">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> set &#x2013; unit circle in <inline-formula id="inf50">
<mml:math id="m57">
<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> &#x2013; which is <inline-formula id="inf51">
<mml:math id="m58">
<mml:mi mathvariant="normal">&#x393;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:mi>G</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. It is straightforward to show that <inline-formula id="inf52">
<mml:math id="m59">
<mml:mi>u</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> will stabilize the solutions of &#x3a3;, <inline-formula id="inf53">
<mml:math id="m60">
<mml:mi>x</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, on &#x393;. In this case, the restriction dynamics <italic>f</italic>&#x7c;<sub>&#x393;</sub>, which is prescribed by <italic>u</italic>, takes the following form <inline-formula id="inf54">
<mml:math id="m61">
<mml:mi>f</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>/</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. The reason that in our definition of &#x393; we considered part of <inline-formula id="inf55">
<mml:math id="m62">
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">S</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is evident here, i.e.,&#x20;<italic>x</italic>
<sub>2</sub> &#x2260;&#x20;0.</p>
<p>Now, assume that we have the means to deform &#x393; and that the goal is to satisfy the constraint given by <italic>x</italic>
<sub>1</sub> &#x2264; 1/2. The deformation shown in red in <xref ref-type="fig" rid="F4">Figure&#x20;4D</xref> cannot result in a stabilizable and consequently positive invariant &#x393; set. Notice that the control vector field in this example is <italic>g</italic>&#x20;&#x3d; [0,1]<sup>
<italic>&#x22a4;</italic>
</sup> which is shown in <xref ref-type="fig" rid="F4">Figure&#x20;4D</xref>. Please note that possible options where <inline-formula id="inf56">
<mml:math id="m63">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> and <italic>g</italic>(<italic>x</italic>) are not orthogonal &#x2013; or <italic>g</italic>(<italic>x</italic>) is transversal to the deformed manifold (&#x393;) &#x2013; are not unique.</p>
<p>With this simple example describing the challenge, our first step would be to identify the valid deformations of <inline-formula id="inf57">
<mml:math id="m64">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> that naturally do not violate the transversality condition (i.e.,&#x20;<inline-formula id="inf58">
<mml:math id="m65">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22a5;&#x338;</mml:mo>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>).</p>
</sec>
<sec id="s5-2">
<title>5.2 Choices and Options on How to Manipulate <inline-formula id="inf59">
<mml:math id="m66">
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>
</title>
<p>Consider the state-space representation of the system dynamics given by <xref ref-type="disp-formula" rid="e3">Eq. 3</xref>. Here, we will explore our options and choices in order to manipulate <xref ref-type="disp-formula" rid="e6">Eq. 6</xref>. While many options can be considered, we will focus on two general frameworks, as explained&#x20;below.</p>
<p>With this in mind that the control vector field is given by <inline-formula id="inf60">
<mml:math id="m67">
<mml:mi>g</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>, two possible options are considered: 1) scaling <italic>&#x3c9;</italic>
<sub>
<italic>i</italic>
</sub>
<italic>q</italic>
<sub>
<italic>n</italic>
</sub> and 2) shifting <italic>q</italic>
<sub>
<italic>n</italic>
</sub> &#x2b; <italic>&#x3c9;</italic>
<sub>
<italic>i</italic>
</sub>. We are interested in knowing how the stabilizability of <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> is affected if these two options are applied to manipulate the state-dependent equilibrium point of the actuated coordinates. In equilibrium shifting scenario (case ii), notice that the position and velocity priming can be trivially equivalent as is evidently seen below<disp-formula id="e8">
<mml:math id="m68">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x21d4;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>&#x222b;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi>&#x3bd;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>&#x3c4;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3bd;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(8)</label>
</disp-formula>where <inline-formula id="inf61">
<mml:math id="m69">
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula>, <italic>&#x3c9;</italic>(<italic>t</italic>) and <italic>&#x3bd;</italic>(<italic>t</italic>) are used for manipulating <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) and <inline-formula id="inf62">
<mml:math id="m70">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula>, respectively. Notice that in our approach the primer variables are time-varying. Constant priming terms yield a discrete collection of parameterized systems, i.e.,&#x20;<italic>x</italic>
<sub>
<italic>s</italic>
</sub> &#x3d; <italic>f</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) &#x2b; <italic>g</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>)<italic>u</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>, which is not desired here. To see this, it is enough to consider the numerical parameters <italic>&#x3c9;</italic>, which are used to parameterize <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>, <italic>&#x3c9;</italic>), as auxiliary control input in discrete Poincare maps. These auxiliary control inputs can only provide discontinuous means of priming <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> at its boundaries.</p>
<sec id="s5-2-1">
<title>5.2.1 Stabilizability Condition and First Scenario</title>
<p>We will show that by choosing (i), the continuous manipulation of the primer parameters can violate the transversality condition (<italic>g</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>)&#x22a5;&#x338;<italic>&#x2202;h</italic> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>)/<italic>&#x2202;x</italic>
<sub>
<italic>s</italic>
</sub>). To do this, consider <italic>y</italic>&#x20;&#x3d; <italic>q</italic>
<sub>
<italic>j</italic>
</sub> &#x2212; <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>, <italic>&#x3c9;</italic>). Then, consider the fact that the inertia matrix <italic>D</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) only depends on angles which are evaluated here on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>, i.e.,&#x20;<inline-formula id="inf63">
<mml:math id="m71">
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. For a fixed <italic>q</italic>
<sub>
<italic>n</italic>
</sub>, it is possible to show that<disp-formula id="e9">
<mml:math id="m72">
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
<label>(9)</label>
</disp-formula>where <italic>B</italic>&#x2a; &#x3d; [0<sup>1&#xd7;(<italic>n</italic>&#x2212;1)</sup>, 1] and <xref ref-type="disp-formula" rid="e9">Eq. 9</xref> can vanish on a point on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> which implies <italic>g</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) and <inline-formula id="inf64">
<mml:math id="m73">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula> can be orthogonal. While the orthogonality condition may get violated at only a finite number of points on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>, these violations are not acceptable in our proposed framework and we avoid that. Without loss of generality, consider <italic>M</italic>th order polynomials (e.g., Bezier forms with degree <italic>M</italic> as in ref. [40]) to define<disp-formula id="e10">
<mml:math id="m74">
<mml:mi>r</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>g</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>N</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(10)</label>
</disp-formula>where <inline-formula id="inf65">
<mml:math id="m75">
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is a matrix with <italic>&#x3c9;</italic>(<italic>t</italic>) as diagonal entries, <inline-formula id="inf66">
<mml:math id="m76">
<mml:mi>N</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is a matrix of constant coefficients and <inline-formula id="inf67">
<mml:math id="m77">
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. Then <xref ref-type="disp-formula" rid="e9">Eq. 9</xref> is re-written in the following simplified form<disp-formula id="e11">
<mml:math id="m78">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>g</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>N</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>4</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(11)</label>
</disp-formula>where <italic>D</italic>
<sub>
<italic>i</italic>
</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) are the block matrices of <italic>D</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>). This algebraic relationship can be easily solved for a fixed <italic>q</italic>
<sub>
<italic>n</italic>
</sub> and <italic>&#x3c9;</italic>(<italic>t</italic>) where <inline-formula id="inf68">
<mml:math id="m79">
<mml:msubsup>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mn>0,1,2</mml:mn>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mi>M</mml:mi>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>. Meaning, using this choice of VC priming, it is possible that for some values <italic>&#x3c9;</italic>(<italic>t</italic>) the transversality condition can be violated on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>.</p>
</sec>
<sec id="s5-2-2">
<title>5.2.2 Stabilizability Condition and Second Scenario</title>
<p>We will now consider the other option, i.e.,&#x20;scaling. It is straightforward to show that <inline-formula id="inf69">
<mml:math id="m80">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> yields relative degree <inline-formula id="inf70">
<mml:math id="m81">
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>,</mml:mo>
<mml:mo>&#x2026;</mml:mo>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> on every points on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. It is also noticeable that this choice of manipulating <italic>y</italic> has no effects on <inline-formula id="inf71">
<mml:math id="m82">
<mml:mi>n</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>l</mml:mi>
<mml:mi>l</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> which means that at least the primer has no influence over the transversality condition as long as <italic>y</italic>&#x20;&#x3d; <italic>q</italic>
<sub>
<italic>j</italic>
</sub> &#x2212; <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) is a valid VC. Notice that the role of the primer <italic>&#x3c9;</italic>(<italic>t</italic>) in this form is comparable to the role of a disturbance term in the system given below<disp-formula id="e12">
<mml:math id="m83">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mi>u</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>I</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(12)</label>
</disp-formula>where <inline-formula id="inf72">
<mml:math id="m84">
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>. As a result, the closed-loop system has to possess strong disturbance rejection properties.</p>
<p>The roles of this disturbance term will be beneficial for us, though, as it will adjust the equilibria of <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) and <inline-formula id="inf73">
<mml:math id="m85">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> under stabilizing controllers with adjustable (and measurable) basins of attraction to successfully satisfy state, control, and GRF constraints. To do this, we need to design an update law for the primer variable vector <italic>&#x3c9;</italic>(<italic>t</italic>) such that the finite-time convergence of the solutions to <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> in the closed-loop system is unaffected. In addition, while the evolution of the trajectories in the constraint-admissible subspace (this will be explained shortly) of the state space is secured, we want <italic>q</italic>
<sub>
<italic>j</italic>
</sub> closely track predefined <italic>r</italic> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>, <italic>&#x3c9;</italic>(<italic>t</italic>)) when possible. While stronger stability properties (e.g., global exponential stability) are desirable, our major concern will be the finite-time enforcement of the changed virtual constraints.</p>
<p>As far as the design of <italic>u</italic> is concerned, any nonlinear controller (or linear controllers if the nonlinear terms are bounded and the bounds are known) can satisfy the VCs. We will limit ourselves to the following modest feedback law <inline-formula id="inf74">
<mml:math id="m86">
<mml:mi>u</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>y</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> where <inline-formula id="inf75">
<mml:math id="m87">
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#xd7;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> are constant matrices and instead will remain focused on deforming <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> in order to satisfy our constraints. Hence, we will assume stabilizing supervisory controllers that guarantee the enforcement of the virtual constraints. However, their disturbance rejection properties have to be carefully considered.</p>
<p>The control law given above can generate Global Asymptotic Stability (GAS) at the equilibrium point of the system given by <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> when the primer variable vector is time-invariant, i.e.,&#x20;<italic>&#x3c9;</italic>(<italic>t</italic>) &#x3d; <italic>&#x3c9;</italic>. Subsequently, <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> takes the following form<disp-formula id="e13">
<mml:math id="m88">
<mml:msub>
<mml:mrow>
<mml:mi mathvariant="normal">&#x393;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>X</mml:mi>
<mml:mo stretchy="false">&#x2223;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3c9;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(13)</label>
</disp-formula>where the equilibrium points for <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) and <inline-formula id="inf76">
<mml:math id="m89">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> under <italic>&#x3c9;</italic> are obtained by solving<disp-formula id="e14">
<mml:math id="m90">
<mml:msub>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>L</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msubsup>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>I</mml:mi>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi>&#x3c9;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(14)</label>
</disp-formula>
</p>
<p>Of course, realizing GAS property under <italic>&#x3c9;</italic>(<italic>t</italic>), i.e.,&#x20;when the primer variable is time-varying, as we shall see later, will not be achieved trivially and requires a regulated rate of change in the primer variable vector. We will discuss this in the proof of GAS property of the closed-loop system later in <xref ref-type="sec" rid="s5-4">Section&#x20;5.4</xref>.</p>
<p>A traditional approach to deal with a time-varying disturbance is to synthesize a family of linear controllers at each equilibrium point of the system given by <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> and then synthesize the stabilizing controller based on interpolating between the linear controllers by gain scheduling. However, nonlinear update laws will produce better results. Using them, it would be possible to directly incorporate the constraints, particularly when gait re-planning has to happen quickly.</p>
<p>Next, with the role of the primer variable <italic>&#x3c9;</italic>(<italic>t</italic>) in our output function <italic>y</italic>&#x20;&#x3d; <italic>h</italic>
<sub>
<italic>s</italic>
</sub> (<italic>q</italic>
<sub>
<italic>s</italic>
</sub>, <italic>&#x3c9;</italic>(<italic>t</italic>)) set, we will show that states, joint torques and GRF can be expressed in terms of the primer variable.</p>
</sec>
</sec>
<sec id="s5-3">
<title>5.3 Constraints Derivation</title>
<p>Consider the configuration variable vector <inline-formula id="inf77">
<mml:math id="m91">
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> where <inline-formula id="inf78">
<mml:math id="m92">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> are actuated joint angles, <italic>m</italic> is the number of these joints in the planar models and <italic>p</italic>
<sub>1</sub> is stance leg contact point as defined previously. The control matrix in the Euler-Lagrange equations can take the following form<disp-formula id="e15">
<mml:math id="m93">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi>O</mml:mi>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi>O</mml:mi>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi>O</mml:mi>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(15)</label>
</disp-formula>where <italic>p</italic>
<sub>
<italic>T</italic>,<italic>COM</italic>
</sub> is the physical location of the thruster action <italic>F</italic>
<sup>
<italic>B</italic>
</sup>. Notice that based on how the thruster actions <italic>F</italic>
<sup>
<italic>B</italic>
</sup> are incorporated in the Euler-Lagrange equations (<xref ref-type="disp-formula" rid="e2">Eq. 2</xref>), the coordinate <italic>q</italic>
<sub>
<italic>n</italic>
</sub>, which was primarily assumed to be underactuated, will be actuated. While this is not a problem, to keep our desired normal form &#x2013; i.e.,&#x20;<italic>q</italic>
<sub>
<italic>n</italic>
</sub> remains underactuated &#x2013; and to allow the direct regulation of GRF, <italic>F</italic>
<sup>
<italic>B</italic>
</sup> is found such that <inline-formula id="inf79">
<mml:math id="m94">
<mml:msup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>l</mml:mi>
<mml:mi>l</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi>O</mml:mi>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. As result, the models shown in <xref ref-type="fig" rid="F4">Figure&#x20;4</xref> will be equivalent and the thruster forces <italic>F</italic>
<sup>
<italic>B</italic>
</sup> can be translated to the base of the VLIP model based on the law of translating forces and moments.</p>
<p>In other words, if it is assumed that <inline-formula id="inf80">
<mml:math id="m95">
<mml:mi>tan</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
</mml:math>
</inline-formula>, the GRF components <inline-formula id="inf81">
<mml:math id="m96">
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> and <inline-formula id="inf82">
<mml:math id="m97">
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> can be shifted to the leg-end point. This leaves us with an underactuated <italic>q</italic>
<sub>
<italic>n</italic>
</sub> angle as it was planned and the possibility of directly regulating GRF. Note that aligning <italic>&#x3bb;</italic>
<sub>
<italic>net</italic>
</sub> with the virtual leg in the model takes place by employing the thruster joint actuators <italic>F</italic>
<sup>
<italic>B</italic>
</sup> which are responsible to move the thrusters with respect to the&#x20;body.</p>
<p>One interesting interpretations of the orthogonality condition (i.e.,&#x20;<inline-formula id="inf83">
<mml:math id="m98">
<mml:msup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mi>u</mml:mi>
<mml:mi>l</mml:mi>
<mml:mi>l</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C</mml:mi>
<mml:mi>O</mml:mi>
<mml:mi>M</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>) is that thruster-assisted legged locomotion over any surface with friction coefficients as small as near zero values becomes feasible. However, the major challenge, when walking over a very slippery surface, i.e.,&#x20;<inline-formula id="inf84">
<mml:math id="m99">
<mml:mi>tan</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x3c;</mml:mo>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>1</mml:mn>
</mml:math>
</inline-formula>, is that smaller COM swing motions (i.e.,&#x20;&#x394;<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) are allowed which can be problematic given that in our design framework all joint motions are parameterized based on <italic>q</italic>
<sub>
<italic>n</italic>
</sub>. In other words, very small &#x394;<italic>q</italic>
<sub>
<italic>n</italic>
</sub> means no locomotion.</p>
<p>Based on the adjustment we made in the control matrix <italic>B</italic>
<sub>
<italic>s</italic>
</sub> and that <inline-formula id="inf85">
<mml:math id="m100">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is stabilizable, for the previously defined <inline-formula id="inf86">
<mml:math id="m101">
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> the following will hold <inline-formula id="inf87">
<mml:math id="m102">
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
</mml:math>
</inline-formula> where <italic>&#x3b1;</italic> &#x2260; 0. As a result, the following equation can be obtained at every point on <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> and it governs the dynamics of the <inline-formula id="inf88">
<mml:math id="m103">
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> curve<disp-formula id="e16">
<mml:math id="m104">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b1;</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>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(16)</label>
</disp-formula>
</p>
<p>In this equation <inline-formula id="inf89">
<mml:math id="m105">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <italic>&#x3b2;</italic>
<sub>1</sub> is given by<disp-formula id="e17">
<mml:math id="m106">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b2;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<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:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="normal">&#x3a3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(17)</label>
</disp-formula>where <italic>Q</italic>
<sub>
<italic>i</italic>
</sub> (<italic>q</italic>
<sub>
<italic>n</italic>
</sub>) are the Christoffel Symbols. A similar algebraic relationship for the constraints <inline-formula id="inf90">
<mml:math id="m107">
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is obtained. Following the relationships given by <xref ref-type="disp-formula" rid="e6">Eqs. 6</xref> and <xref ref-type="disp-formula" rid="e8">8</xref>, constraints equations can be written in terms of <italic>y</italic> and <inline-formula id="inf91">
<mml:math id="m108">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>, which is skipped here to avoid a cluttered notation.</p>
<p>Next, we will steer <italic>y</italic> and <inline-formula id="inf92">
<mml:math id="m109">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> using the primer variable <italic>&#x3c9;</italic>(<italic>t</italic>) in <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> in order to make sure the solutions of <xref ref-type="disp-formula" rid="e16">Eq. 16</xref> stay within the constraint-admissible space. To do this, consider <italic>y</italic>-<inline-formula id="inf93">
<mml:math id="m110">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> space. While a similar analysis is possible in the <italic>q</italic>
<sub>
<italic>n</italic>
</sub>-<inline-formula id="inf94">
<mml:math id="m111">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> space, the <italic>y</italic>-<inline-formula id="inf95">
<mml:math id="m112">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> space can offer some geometric tools that can help formulate the problem as a classical motion planning problem. Obviously, the result of such adjustments would be the deviation from the nominal gait trajectories, which can affect, e.g., hybrid invariance. We will use the thrusters&#x2019; actions to deal with these issues.</p>
<p>Since we assumed a pre-stabilized system &#x2013; in fact all of the above derivations only make sense if <inline-formula id="inf96">
<mml:math id="m113">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>&#x222b;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>&#x3c4;</mml:mi>
</mml:math>
</inline-formula> and <inline-formula id="inf97">
<mml:math id="m114">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> &#x2013; it is reasonable to evaluate the constraints <inline-formula id="inf98">
<mml:math id="m115">
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>l</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2264;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2264;</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> (<italic>c</italic>
<sub>
<italic>l</italic>
</sub> and <italic>c</italic>
<sub>
<italic>u</italic>
</sub> are constraint lower and upper bounds) based on the steady-state solutions, i.e.,&#x20;<italic>y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> and <inline-formula id="inf99">
<mml:math id="m116">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>, and ignore the transient solutions, i.e.,&#x20;<inline-formula id="inf100">
<mml:math id="m117">
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mo>&#x222b;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>w</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c4;</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>&#x3c4;</mml:mi>
</mml:math>
</inline-formula>, where <inline-formula id="inf101">
<mml:math id="m118">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the initial condition and<disp-formula id="e18">
<mml:math id="m119">
<mml:mi>A</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#xd7;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#xd7;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(18)</label>
</disp-formula>
</p>
<p>This assumption may cause the intermittent violation of the constraints, which is expected. However, because finite-time convergence to the constraint-admissible sub-spaces at the neighborhood of <italic>y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> and <inline-formula id="inf102">
<mml:math id="m120">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is guaranteed &#x2013; currently we assume that this holds true and later we ensure the GAS property is achieved &#x2013; by the GAS property of the controller, any transient constraint violations are quickly compensated.</p>
<p>Other than simplifying the nonlinear constraint satisfaction problem given in <xref ref-type="disp-formula" rid="e7">Eq. 7</xref>, considering <inline-formula id="inf103">
<mml:math id="m121">
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> has another interesting result which will be explained below. Consider the set<disp-formula id="e19">
<mml:math id="m122">
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="}">
<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:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>I</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#xd7;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>K</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>z</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(19)</label>
</disp-formula>which is the locus of all of the steady-state solutions of the system <xref ref-type="disp-formula" rid="e12">Eq. 12</xref>. We will show that it is possible to create positive invariant sets around any point <inline-formula id="inf104">
<mml:math id="m123">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> in the set defined by <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. Then, one can slide <inline-formula id="inf105">
<mml:math id="m124">
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> over the hyperplane defined by <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> using a suitable update policy to ensure the following objectives are achieved.</p>
<p>First objective is the realization of positive invariance property in a neighborhood around the steady-state solutions on <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. Second objective is to satisfy gait feasibility constraints as outlined before. Last, we want to maintain a minimal distance from the origin, i.e.,&#x20;<inline-formula id="inf106">
<mml:math id="m125">
<mml:mi mathvariant="normal">m</mml:mi>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:mi mathvariant="normal">n</mml:mi>
<mml:mfenced open="{" close="}">
<mml:mrow>
<mml:mfenced open="&#x2016;" close="&#x2016;">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>y</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula>. The last condition implies that the modified gaits should closely match the predefined gaits. The nominal (predefined) gait parameters are obtained off-line without taking into account the constraint equations given by <xref ref-type="disp-formula" rid="e7">Eq.&#x20;7</xref>.</p>
</sec>
<sec id="s5-4">
<title>5.4 Primer Variable Vector, <italic>&#x3c9;</italic>(<italic>t</italic>), Update Policy and Achieving Global Asymptotic Stability Property Over <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>
</title>
<p>Consider the support hyperplane given by<disp-formula id="e20">
<mml:math id="m126">
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
<label>(20)</label>
</disp-formula>at the point <inline-formula id="inf107">
<mml:math id="m127">
<mml:msubsup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2032;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> where the nonlinear constraint <italic>C</italic>
<sub>
<italic>i</italic>
</sub>(<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)) &#x2013; i.e.,&#x20;the <italic>i</italic>th entry in the constraint vector <italic>C</italic> (<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)) given by <xref ref-type="disp-formula" rid="e7">Eq. 7</xref> &#x2013; and <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> intersect (see <xref ref-type="fig" rid="F5">Figures 5</xref>, <xref ref-type="fig" rid="F6">6</xref>). Since there are multiple constraints, we consider the constraint with the shortest distance from <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> on <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. While there are many ways to simplify the geometric representation of the nonlinear constraints <italic>C</italic>
<sub>
<italic>i</italic>
</sub>(<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)) at the neighborhood of <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> on <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>, the approach adopted here is very efficient with a minimum computation overhead.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>Geometric interpretation of the level set {<italic>&#x3b6;</italic>
<sub>
<italic>w</italic>
</sub>&#x7c;<italic>V</italic>&#x20;&#x2264; <italic>V</italic>
<sub>
<italic>max</italic>
</sub>}. For a constant reference <italic>r</italic>, the update law <inline-formula id="inf108">
<mml:math id="m128">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> to the manipulated reference <italic>w</italic>, places the new value <italic>w</italic>&#x2a; at the edge of the level set <italic>V</italic>&#x20;&#x3d; <italic>V</italic>
<sub>
<italic>max</italic>
</sub> while trying to be as close to the actual reference as possible without violating the constrains <italic>C</italic>
<sub>
<italic>i</italic>
</sub>(<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)), which are depicted in&#x20;red.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g005.tif"/>
</fig>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>
<bold>(A&#x2013;C)</bold> Illustration of constraint satisfaction based on manifold deformation; Also, it shows the concept with various norm definitions. <bold>(D)</bold> Illustration of the relationship between the stabilizability of the manifold &#x393; (unit circle is used as an example) and the transversality condition, i.e.,&#x20;<inline-formula id="inf109">
<mml:math id="m129">
<mml:mfrac>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>G</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x2202;</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>&#x22a5;&#x338;</mml:mo>
<mml:mi>g</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> at any point on &#x393;; <italic>G</italic>(<italic>x</italic>) is the algebraic equation that defines &#x393; and <italic>g</italic>(<italic>x</italic>) is the control vector field used to stabilize the trajectories on &#x393;.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g006.tif"/>
</fig>
<p>Our approach is motivated by classical methods widely used in constraint optimization problems based on support hyperplanes. These methods are usually very conservative, but in our case their use is justified as the system is highly nonlinear, unpredictable. That said, the location and distance of these hyperplanes from <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> has to be carefully defined.</p>
<p>We will use Lyapunov functions with quadratic forms to define level sets around <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. The largest invariant set confined in the constraint-admissible space will define the maximum distance between <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> and <italic>c</italic>
<sub>
<italic>i</italic>
</sub> (<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)). These invariant sets, geometrically, can take various forms using non-quadratic energy functions. It is important to note that the geometry of the invariant set around <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> directly affects the performance of this approach, i.e.,&#x20;the convergence rate to <inline-formula id="inf110">
<mml:math id="m130">
<mml:msubsup>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> and constraint error margins (shown in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>).</p>
<p>Motivated by deepest gradient descent method which is a key mechanism of manipulating pre-compensated systems, we consider two search parameters including a step direction, <italic>&#x3c1;</italic> &#x3d; &#x2212; <italic>&#x3c9;</italic>(<italic>t</italic>)/&#x2016;<italic>&#x3c9;</italic>(<italic>t</italic>)&#x2016;<sub>2</sub>, &#x2016;<italic>&#x3c9;</italic>(<italic>t</italic>)&#x2016;<sub>2</sub> &#x2260; 0, and step length, <inline-formula id="inf111">
<mml:math id="m131">
<mml:mi>&#x3b4;</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>.</p>
<p>The step direction <italic>&#x3c1;</italic> is trivially obtained based on the observation that the primer variable <italic>&#x3c9;</italic>(<italic>t</italic>) and consequently the steady-state solutions <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> should remain possibly very close to the origin. The step length <italic>&#x3b4;</italic> is obtained based on the difference between the values of a candidate Lyapunov functions and the largest invariant sets around <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>. Based on these two search parameters, the following update law for the primer variable vector <italic>&#x3c9;</italic>(<italic>t</italic>) is considered:<disp-formula id="e21">
<mml:math id="m132">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>k</mml:mi>
<mml:mi>&#x3c1;</mml:mi>
<mml:mi>&#x3b4;</mml:mi>
</mml:math>
<label>(21)</label>
</disp-formula>where <inline-formula id="inf112">
<mml:math id="m133">
<mml:mi>k</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi mathvariant="double-struck">R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula> is the tuning parameter.</p>
<p>Consider <italic>&#x3b6;</italic> &#x3d; <italic>P</italic>
<sup>&#x2212;0.5</sup>
<italic>z</italic> and <italic>&#x3b6;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> &#x3d; <italic>P</italic>
<sup>&#x2212;0.5</sup>
<italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> where <italic>P</italic> is a positive definite matrix. The maximum level set value <italic>V</italic>
<sub>
<italic>max</italic>,<italic>i</italic>
</sub> (<italic>&#x3c9;</italic>(<italic>t</italic>)) for the quadratic Lyapunov function <inline-formula id="inf113">
<mml:math id="m134">
<mml:mi>V</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>V</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mi>P</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:math>
</inline-formula> is obtained by doing the change of variable given above. In this way, <italic>V</italic>
<sub>
<italic>max</italic>,<italic>i</italic>
</sub> (<italic>&#x3c9;</italic>(<italic>t</italic>)) can geometrically be interpreted with unit circles around <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> in <italic>z</italic>-space. The size of the largest level set <italic>V</italic>
<sub>
<italic>max</italic>,<italic>i</italic>
</sub> (<italic>&#x3c9;</italic>(<italic>t</italic>)) that is not violating the closest constraint <inline-formula id="inf114">
<mml:math id="m135">
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>z</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mi>z</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> to the point <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> can be better imagined when 2-norm &#x2016;.&#x2016;<sub>2</sub> is used, shown in <xref ref-type="fig" rid="F6">Figure&#x20;6</xref>. The unit vector <inline-formula id="inf115">
<mml:math id="m136">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> along the shortest distance between <italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> and the constraint hyperplane <italic>c</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; 0 is given by <inline-formula id="inf116">
<mml:math id="m137">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and the largest level set value is given by <inline-formula id="inf117">
<mml:math id="m138">
<mml:msub>
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>,</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msqrt>
</mml:math>
</inline-formula>.</p>
<p>Now consider the quadratic norm &#x2016;<italic>&#x3b6;</italic>&#x2016;<sub>
<italic>P</italic>
</sub>. Notice that using the change of variable <italic>&#x3b6;</italic> &#x3d; <italic>P</italic>
<sup>&#x2212;0.5</sup>
<italic>z</italic> in the constraint equation <italic>c</italic>
<sub>
<italic>i</italic>
</sub> (<italic>z</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)) &#x3d; 0, 2-norm and the quadratic norm become interchangeable. In this way, the maximum level set value for any candidate, quadratic Lyapunov function can be obtained. Therefore, the step length in <xref ref-type="disp-formula" rid="e21">Eq. 21</xref> is given by <italic>&#x3b4;</italic> &#x3d; <italic>V</italic>
<sub>
<italic>max</italic>,<italic>i</italic>
</sub> (<italic>&#x3c9;</italic>(<italic>t</italic>)) &#x2212; <italic>V</italic> (<italic>&#x3b6;</italic>, <italic>&#x3c9;</italic>(<italic>t</italic>)). After the change of variable, the unit vector <inline-formula id="inf118">
<mml:math id="m139">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> which now is the maximum distance traveled towards the constraint hyperplane from <italic>&#x3b6;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> in a unit ball of &#x2016;.&#x2016;<sub>
<italic>P</italic>
</sub> is given by<disp-formula id="e22">
<mml:math id="m140">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi>&#x3b3;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>0.5</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi>&#x3b3;</mml:mi>
</mml:math>
<label>(22)</label>
</disp-formula>where <inline-formula id="inf119">
<mml:math id="m141">
<mml:mi>&#x3b3;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2207;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>. To obtain the equation, we considered the dual norm of the quadratic norm &#x2016;<italic>&#x3b3;</italic>&#x2016;<sub>
<italic>p</italic>
</sub> which is &#x2016;<italic>&#x3b3;</italic>&#x2016;<sub>&#x2a;</sub> &#x3d; &#x2016;<italic>P</italic>
<sup>&#x2212;0.5</sup>
<italic>&#x3b3;</italic>&#x2016;<sub>2</sub> and this algebraic relationship <inline-formula id="inf120">
<mml:math id="m142">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mi>&#x3b3;</mml:mi>
<mml:mo>/</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mi>&#x3b3;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2a;</mml:mo>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.</p>
<p>Now, we make sure under the update law given by <xref ref-type="disp-formula" rid="e21">Eq. 21</xref> the constraint-admissible set defined at any point on <italic>Y</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> is a positive invariant set. Taking any Lyapunov function of the form given above and using Barbashin-Krasovskii-LaSalle principle, for a constant primer variable <italic>&#x3c9;</italic> the GAS property of the closed-loop system given by <xref ref-type="disp-formula" rid="e12">Eq. 12</xref> is readily achievable.</p>
<p>Take the time-varying primer variable <italic>&#x3c9;</italic>(<italic>t</italic>) governed by the update law given above, then <inline-formula id="inf121">
<mml:math id="m143">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is given by<disp-formula id="e23">
<mml:math id="m144">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mi>Q</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mi>P</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(23)</label>
</disp-formula>where <italic>Q</italic> is a positive definite matrix. For <inline-formula id="inf122">
<mml:math id="m145">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2260;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula>, there exists 0 &#x3c; <italic>&#x3ba;</italic> &#x226a; 1 such that<disp-formula id="e24">
<mml:math id="m146">
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mn>2</mml:mn>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>0.5</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msup>
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3ba;</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mo>&#x2264;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mi>&#x3b6;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
<label>(24)</label>
</disp-formula>
</p>
<p>As a result, the resulting inequality <inline-formula id="inf123">
<mml:math id="m147">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>u</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>&#x3c9;</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3c;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>&#x3ba;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3bb;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>Q</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mi>z</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x3c;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> holds because it is assumed <italic>&#x3ba;</italic> &#x226a; 1. This result shows that if the primer dynamics is very fast, i.e.,&#x20;1/<italic>&#x3ba;</italic> in <xref ref-type="disp-formula" rid="e21">Eq. 21</xref> is a very large value, then the closed-loop system given by <xref ref-type="disp-formula" rid="e23">Eq. 23</xref> is&#x20;GAS.</p>
<p>Next, we briefly show how the thruster can be used to achieve hybrid invariance.</p>
</sec>
<sec id="s5-5">
<title>5.5&#x20;Thruster-Assisted Impact Invariance</title>
<p>One critical aspect of HZD-based methods is selecting <italic>y</italic>&#x20;&#x3d; <italic>h</italic>
<sub>
<italic>S</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) that leads to a hybrid zero dynamics. In these methods, the assumption of underactuation at the contact points does not leave any options for control better than the deadbeat hybrid extension of these systems to achieve impact invariance. This section briefly discusses another use of the thruster actions to secure hybrid invariance, complementary to HZD-based methods.</p>
<p>At the transition from SS to DS phase, the two-point impact, as discussed in <xref ref-type="sec" rid="s4-4">Section 4.4</xref>, renders all of the body joints except the torso joint fixated to their pre-impact values. Hence, large&#x20;deviations in joint velocities from the reference trajectories and subsequently from the ZD manifold (<italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>) will be resulted.</p>
<p>Since the joint actuators are not able to make corrections needed to steer the states back to <italic>&#x393;</italic>
<sub>
<italic>&#x3c9;</italic>
</sub> the thrusters can be leveraged in the DS phase to achieve hybrid invariance. Here, impact invariance such that the initial DS phase state <italic>x</italic>
<sub>
<italic>d</italic>,0</sub> returns to the initial SS phase state <italic>x</italic>
<sub>
<italic>s</italic>,0</sub> is sought where <inline-formula id="inf124">
<mml:math id="m148">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mo>,</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x22a4;</mml:mo>
</mml:mrow>
</mml:msup>
</mml:math>
</inline-formula>.</p>
<p>As opposed to the SS phase, the constraints in the DS phase take a more complex form. Additionally, we have to ensure that the final state of the DS phase (<italic>x</italic>
<sub>
<italic>d</italic>,<italic>f</italic>
</sub>) matches the initial states at the SS phase (<italic>x</italic>
<sub>
<italic>s</italic>,0</sub>).</p>
<p>We apply a Nonlinear Model Predictive Control (NMPC) scheme to steer the post-DS states back to the ZD manifold. This scheme is known for being costly. However, the duration of the DS phase is significantly shorter than the SS phase. Note that a reference trajectory for each DS state <italic>r</italic>
<sub>
<italic>d</italic>
</sub> [<italic>k</italic>] is generated at&#x20;every <italic>k</italic>th sample over the duration of the DS phase. The&#x20;reference trajectory can be a simple linear trajectory between the post-impact states <italic>x</italic>
<sub>
<italic>d</italic>,0</sub> and the initial SS phase state&#x20;<italic>x</italic>
<sub>
<italic>s</italic>,0</sub>.</p>
<p>The continuous DS phase model as described in <xref ref-type="disp-formula" rid="e4">Eq. 4</xref>, along with the kinematic constraint <inline-formula id="inf125">
<mml:math id="m149">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:math>
</inline-formula> results in the following differential algebraic equation<disp-formula id="e25">
<mml:math id="m150">
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>D</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:mi>J</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msup>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>6</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>6</mml:mn>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:msup>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x308;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x3b7;</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>H</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(25)</label>
</disp-formula>where <italic>&#x3b7;</italic> &#x3d; [<italic>u</italic>
<sup>
<italic>&#x22a4;</italic>
</sup>, <italic>&#x3bb;</italic>
<sub>
<italic>net</italic>
</sub>] is an augmented input vector that consists of the control action from the SS phase along with the net thrust force along the torso, which can be expressed in the state-space form given by <inline-formula id="inf126">
<mml:math id="m151">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>g</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:math>
</inline-formula>. This model is discretized at each sample time. To cast this as an NMPC problem a cost function <italic>&#x3d5;</italic>(<italic>x</italic>
<sub>
<italic>d</italic>
</sub>, <italic>&#x3b7;</italic>) to be minimized is formulated resulting in the following optimization problem<disp-formula id="e26">
<mml:math id="m152">
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:munder>
<mml:mrow>
<mml:mi mathvariant="bold">m</mml:mi>
<mml:mi mathvariant="bold">i</mml:mi>
<mml:mi mathvariant="bold">n</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:munder>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mi>&#x3d5;</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="false">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msub>
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>&#x2016;</mml:mi>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mfenced open="|" close="">
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo>&#x2b;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mi>&#x3b4;</mml:mi>
<mml:mi>&#x3b7;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:msubsup>
<mml:mrow>
<mml:mfenced open="|" close="">
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mi mathvariant="bold">s</mml:mi>
<mml:mi mathvariant="bold">u</mml:mi>
<mml:mi mathvariant="bold">b</mml:mi>
<mml:mi mathvariant="bold">j</mml:mi>
<mml:mo>.</mml:mo>
<mml:mi mathvariant="bold">t</mml:mi>
<mml:mi mathvariant="bold">o</mml:mi>
<mml:mo>:</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
<label>(26)</label>
</disp-formula>
</p>
<p>In <xref ref-type="disp-formula" rid="e26">Eq. 26</xref>, <italic>W</italic>
<sub>
<italic>r</italic>
</sub> is the weighting term for the cost associated with tracking the reference trajectory <italic>r</italic>
<sub>
<italic>d</italic>
</sub> [<italic>k</italic>], <italic>W</italic>
<sub>
<italic>&#x3b7;</italic>
</sub> similarly contains the weight that penalizes rapid changes <italic>&#x3b4;</italic> in the input <italic>&#x3b7;</italic>, and <italic>N</italic> denotes the total simulation time steps. The constraints of the optimization problem are denoted by <italic>C</italic>
<sub>
<italic>eq</italic>
</sub> (<italic>x</italic>
<sub>
<italic>d</italic>
</sub>, <italic>&#x3b7;</italic>), <italic>C</italic>
<sub>
<italic>ineq</italic>
</sub> (<italic>x</italic>
<sub>
<italic>d</italic>
</sub>, <italic>&#x3b7;</italic>) which represent the equality and inequality constraints, respectively. The equality terms include the initial DS state, which is obtained from the post-impact SS state <inline-formula id="inf127">
<mml:math id="m153">
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula>, and the discretized dynamics <inline-formula id="inf128">
<mml:math id="m154">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>.<disp-formula id="e27">
<mml:math id="m155">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>:</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:msubsup>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2b;</mml:mo>
</mml:mrow>
</mml:msubsup>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3d;</mml:mo>
<mml:mi>f</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>g</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x3b7;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(27)</label>
</disp-formula>
</p>
<p>In <xref ref-type="disp-formula" rid="e27">Eq. 27</xref>, the matrix <inline-formula id="inf129">
<mml:math id="m156">
<mml:msubsup>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msubsup>
</mml:math>
</inline-formula> swaps the roles of the legs. The inequality equations include the difference between the final DS state and initial SS state, GRF constraints and the limits imposed on the state and input vectors.<disp-formula id="e28">
<mml:math id="m157">
<mml:msub>
<mml:mrow>
<mml:mi>C</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>:</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="array">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<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 stretchy="false">&#x7c;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x2264;</mml:mo>
<mml:mi>&#x3f5;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
<mml:msub>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
<mml:mfenced open="|" close="">
</mml:mfenced>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3c;</mml:mo>
<mml:mi>&#x3bc;</mml:mi>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>&#x007C;</mml:mi>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
<mml:mfenced open="|" close="">
</mml:mfenced>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mn>0</mml:mn>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x007C;</mml:mi>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>N</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>&#x007C;</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mspace width="0.3333em"/>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
<mml:mi>&#x3b7;</mml:mi>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="|" close="">
</mml:mfenced>
<mml:mi>&#x007C;</mml:mi>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mo>&#x3c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(28)</label>
</disp-formula>
</p>
<p>Here <italic>&#x3f5;</italic> is a relaxation term applied to the final state. With all constraints satisfied, the NMPC guides the DS states towards the initial condition of SS phase, resulting in impact invariance.</p>
</sec>
</sec>
<sec id="s6">
<title>6 Simulation Results</title>
<p>In this section, we will report the result of our simulation works. An overview of the control architecture explained previously is given in <xref ref-type="fig" rid="F7">Figure&#x20;7</xref>. We consider walking on flat ground when Harpy makes point contacts with the surface. Using the full-dynamics model explained above, we will apply the thruster actions and proposed framework to demonstrate the desired capabilities, including, frontal stabilization, trajectory manipulation to stay in constraint-admissible regions of the state space, hybrid invariance and high jumps over obstacles.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>An overview of Harpy&#x2019;s controller architecture.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g007.tif"/>
</fig>
<p>Since one of the motivations behind our approach is to reduce computation overhead, we will briefly demonstrate the results from integrating our ROMs (i.e.,&#x20;the VLIP, 3-link, etc., models explained previously) in this process. We will demonstrate that this integration can further reduce the&#x20;costs.</p>
<p>We note that the gaits are designed based on the HZD approach. In the SS phases, the desired trajectories <italic>h</italic>
<sub>
<italic>d</italic>
</sub> (<italic>x</italic>
<sub>
<italic>s</italic>
</sub>) are parameterized as Bezier polynomials with the coefficients tuned offline. All model parameters used in the simulation closely match Harpy&#x2019;s properties and are listed in <xref ref-type="table" rid="T1">Table&#x20;1</xref>.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Model parameters.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="left">Parameter</th>
<th align="center">Value</th>
<th align="center">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="left">
<italic>m</italic>
<sub>
<italic>T</italic>
</sub>
</td>
<td align="center">300&#xa0;<italic>g</italic>
</td>
<td align="left">Mass of torso</td>
</tr>
<tr>
<td align="left">
<italic>m</italic>
<sub>
<italic>h</italic>
</sub>
</td>
<td align="center">200&#xa0;<italic>g</italic>
</td>
<td align="left">Mass of hip</td>
</tr>
<tr>
<td align="left">
<italic>m</italic>
<sub>
<italic>k</italic>
</sub>
</td>
<td align="center">100&#xa0;<italic>g</italic>
</td>
<td align="left">Mass of each leg</td>
</tr>
<tr>
<td align="left">
<italic>l</italic>
<sub>
<italic>T</italic>
</sub>
</td>
<td align="center">30&#xa0;<italic>cm</italic>
</td>
<td align="left">Length from hip to torso</td>
</tr>
<tr>
<td align="left">
<italic>l</italic>
<sub>1/2<italic>Thigh</italic>
</sub>
</td>
<td align="center">18&#xa0;<italic>cm</italic>
</td>
<td align="left">Length from hip to knee</td>
</tr>
<tr>
<td align="left">
<italic>l</italic>
<sub>1/2<italic>Tibia</italic>
</sub>
</td>
<td align="center">32&#xa0;<italic>cm</italic>
</td>
<td align="left">Length of tibia</td>
</tr>
<tr>
<td align="left">
<italic>l</italic>
<sub>1/2<italic>Meta</italic>
</sub>
</td>
<td align="center">32&#xa0;<italic>cm</italic>
</td>
<td align="left">Length of metatarsus</td>
</tr>
<tr>
<td align="left">
<italic>l</italic>
<sub>1/2</sub>
</td>
<td align="center">63.25&#xa0;<italic>cm</italic>
</td>
<td align="left">Length of leg on three link ROM</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>The full-dynamics model can be constrained in its frontal plan of locomotion using the thrusters. We note that frontal dynamics stabilization due to underactuation can be very challenging. We ran the simulations using the full-dynamics model of Harpy where the legs are modeled with all DOF including the hip frontal, hip sagittal, and knee sagittal joints. <xref ref-type="fig" rid="F8">Figure&#x20;8</xref> shows the stick-diagram results from several key states during walking. The thrusters not only are used to stabilize the frontal dynamics, but also to jump over obstacles, and assist the robot to land stably.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Illustration of thruster-assisted locomotion over a rough terrain simulated on Harpy&#x2019;s full-dynamics. Blue and red arrows show the thruster actions and GRF, respectively.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g008.tif"/>
</fig>
<p>The simulation results such as the robot&#x2019;s states and GRF are shown in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>. In general, planar gaits are unstable in 3D systems. The simulation result demonstrate that the thruster-assisted robot is capable of tracking the target body trajectory and walk stably even when the 2D gait is used. The thrusters can assist the robot to walk with a stable and nearly zero roll and heading angles throughout the simulation and can be seen in <xref ref-type="fig" rid="F8">Figure&#x20;8</xref>.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Illustrates the state values and forces during walking and jumping feats simulated with Harpy&#x2019;s 3D full-dynamics. The reference joint trajectories (<italic>z</italic>
<sub>0</sub>) are manipulated (<italic>z</italic>
<sub>
<italic>&#x3c9;</italic>
</sub>) such that the applied constraint equations do not violate the constraint as shown at <italic>t</italic>&#x20;&#x3d; [9.5, 11.5]s.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g009.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="F9">Figures 9</xref>, <xref ref-type="fig" rid="F10">10</xref>, the thrusters are used to satisfy the constraints including saturating the control actions and enforcing no-slip conditions. First, a desired trajectory for the COM of the full-dynamics is considered and using the priming approach explained above it is manipulated during the walking phase to satisfy GRF feasibility constraints. The primer is disabled during the flight phase. As shown in <xref ref-type="fig" rid="F9">Figure&#x20;9</xref>, the GRF constraints are violated at around <italic>t</italic>&#x20;&#x3d; [9.5, 11.5]. <xref ref-type="fig" rid="F11">Figure&#x20;11</xref> depicts a close-up view of the priming performance at <italic>t</italic>&#x20;&#x3d; [9.5,&#x20;11.5].</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>Illustrates the effects of reducing the control thresholds on the control actions and their corresponding phase portraits.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g010.tif"/>
</fig>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>Illustrates the closeup view of the constraint violations during 3D walking and jumping at <italic>t</italic>&#x20;&#x3d; [9.5, 11.5]s. The reference trajectories violate the constraints and the controller manipulates the applied references to prevent the constraints from being violated.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g011.tif"/>
</fig>
<p>In addition, we considered constraining the control actions. To do this, the control inputs were saturated in the low-dimensional space of the ROMs and then were mapped to the full-dynamics. The priming problem to saturate control inputs in the three-link ROM is considered. <xref ref-type="fig" rid="F12">Figures 12</xref>, <xref ref-type="fig" rid="F13">13</xref> show the desired joint angles and velocities, respectively.</p>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Illustrates the reference joint angle trajectories in the 3-link ROM.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g012.tif"/>
</fig>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>Illustrates the reference joint velocity trajectories in the 3-link ROM.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g013.tif"/>
</fig>
<p>In <xref ref-type="fig" rid="F10">Figure&#x20;10</xref>, the results after applying the primer are shown. The first two figures from left show the effects of changing the limits on the control inputs during the SS phase. The limits are adjusted from high to low values resulting in the peak control to decrease below the desired thresholds. However, a large gap can be seen between the threshold and maximum control input. Note that the geometries of the positive invariant sets around steady-state responses in the output dynamics are not optimal in our work as explained before and shown in <xref ref-type="fig" rid="F5">Figure&#x20;5</xref>. The phase portraits <bold>(</bold>
<bold>
<italic>q</italic>
</bold>
<sub>
<bold>1</bold>
</sub>
<bold>-</bold>
<inline-formula id="inf130">
<mml:math id="m158">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula>
<bold>)</bold> corresponding to each control limits are shown in <xref ref-type="fig" rid="F10">Figure&#x20;10</xref>. It can be seen that <inline-formula id="inf131">
<mml:math id="m159">
<mml:msubsup>
<mml:mrow>
<mml:mi>h</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>s</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is deformed to satisfy the constraints which can affect hybrid invariance in the locomotion system.</p>
<p>Hybrid invariance can be achieved using the thruster actions. <xref ref-type="fig" rid="F14">Figure&#x20;14</xref> shows the feasibility conditions during the DS phase where NMPC is applied. The friction cone condition is feasible which indicates that both feet are fixated to the ground throughout the DS&#x20;phase.</p>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>Illustrates the friction constraints during the DS phase of leg 1 and 2. In this plot, the intermediate SS phases are omitted. Dashed blue lines are the thresholds.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g014.tif"/>
</fig>
<p>Note that the static friction coefficient is assumed to be <italic>&#x3bc;</italic> &#x3d; 0.3. Also note that the normal forces spike to 60&#xa0;N during&#x20;the DS phase. The total weight of the biped is only 0.8&#xa0;kg which suggests that the unusual behavior is only possible because of the thruster actions. <xref ref-type="fig" rid="F15">Figure&#x20;15</xref> shows the control actions for the thrusters during the DS&#x20;phase.</p>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>Illustrates the thruster actions during the DS phase. In this plot, the intermediate SS phases are omitted as the thrusters are inactive.</p>
</caption>
<graphic xlink:href="frobt-08-770514-g015.tif"/>
</fig>
</sec>
<sec id="s7">
<title>7 Concluding Remarks</title>
<p>In this work, we studied the roles of thrusters in addressing the prevailing challenges in bipedal robotics, potentially paving the way to see new designs with unexplored capabilities. Some of the common challenges faced by bipedal robots include constraint satisfaction, frontal dynamics stabilization, and avoiding fallovers. Combatting these issues can be pretty challenging in these systems due to underactuation and high vulnerability to external perturbations.</p>
<p>In this publication, we introduced a thruster-assisted bipedal robot called Harpy. Harpy platform possesses two legs and two coaxial thrusters attached to its torso. We capitalized on Harpy&#x2019;s unique design to propose an optimization-free approach to satisfy Harpy&#x2019;s gait feasibility conditions, including control and contact forces. The reference trajectories were manipulated based on deforming stabilizable zero-dynamics manifolds to fulfill constraints brought on by ground contacts and those prescribed by states and inputs without violating hybrid invariance.</p>
<p>In standard bipedal robots, unintended changes to the restriction dynamics over the zero dynamics manifold, especially those optimized to produce periodic orbits, can adversely affect gait stability. Not only we showed that the manipulation of the system trajectories is possible in Harpy full-dynamics, but also hybrid invariance can be realized by employing the thrusters, something that is often achieved in a limited fashion by event-based regulators.</p>
<p>In addition, we demonstrated that the thrusters can be utilized to robustify the gaits by dodging fallovers or even jumping over large obstacles.</p>
</sec>
</body>
<back>
<sec id="s8">
<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="s9">
<title>Author Contributions</title>
<p>PD produced the simulation results with major contributions from ES; AR wrote this paper, and the paper was reviewed by PD, ES, and AR together. The mathematical framework reported in this paper is developed by AR.</p>
</sec>
<sec sec-type="COI-statement" id="s10">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<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>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Angelini</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Xin</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Wolfslag</surname>
<given-names>W. J.</given-names>
</name>
<name>
<surname>Tiseo</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Mistry</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Garabini</surname>
<given-names>M.</given-names>
</name>
<etal/>
</person-group> (<year>2019</year>). &#x201c;<article-title>Online Optimal Impedance Planning for Legged Robots</article-title>,&#x201d; in <conf-name>2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name> (<publisher-loc>Macau, China</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>6028</fpage>&#x2013;<lpage>6035</lpage>. <pub-id pub-id-type="doi">10.1109/iros40897.2019.8967696</pub-id> </citation>
</ref>
<ref id="B46">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Arcos-Legarda</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Cortes-Romero</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Beltran-Pulido</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Tovar</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Hybrid Disturbance Rejection Control of Dynamic Bipedal Robots</article-title>. <source>Multibody Syst. Dyn.</source> <volume>46</volume> (<issue>3</issue>), <fpage>281</fpage>&#x2013;<lpage>306</lpage>. <pub-id pub-id-type="doi">10.1007/s11044-019-09667-3</pub-id> </citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Apgar</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Clary</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Green</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Fern</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Hurst</surname>
<given-names>J.&#x20;W.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Fast Online Trajectory Optimization for the Bipedal Robot Cassie</article-title>. <source>Robotics: Sci. Syst.</source> <volume>101</volume>, <fpage>14</fpage>. <pub-id pub-id-type="doi">10.15607/rss.2018.xiv.054</pub-id> </citation>
</ref>
<ref id="B3">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Bledt</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Powell</surname>
<given-names>M. J.</given-names>
</name>
<name>
<surname>Katz</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Di Carlo</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Wensing</surname>
<given-names>P. M.</given-names>
</name>
<name>
<surname>Kim</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Mit Cheetah 3: Design and Control of a Robust, Dynamic Quadruped Robot</article-title>,&#x201d; in <conf-name>2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</conf-name> (<publisher-loc>Madrid, Spain</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>2245</fpage>&#x2013;<lpage>2252</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2018.8593885</pub-id> </citation>
</ref>
<ref id="B4">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Dai</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Tedrake</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Planning Robust Walking Motion on Uneven Terrain via Convex Optimization</article-title>,&#x201d; in <conf-name>IEEE-RAS International Conference on Humanoid Robots (Humanoids)</conf-name> (<publisher-loc>Cancun, Mexico</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>579</fpage>&#x2013;<lpage>586</lpage>. <pub-id pub-id-type="doi">10.1109/humanoids.2016.7803333</pub-id> </citation>
</ref>
<ref id="B5">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Dangol</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Ramezani</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Jalili</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2020</year>). &#x201c;<article-title>Performance Satisfaction in Midget, a Thruster-Assisted Bipedal Robot</article-title>,&#x201d; in <conf-name>2020 American Control Conference (ACC)</conf-name> (<publisher-loc>Denver, CO, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>3217</fpage>&#x2013;<lpage>3223</lpage>. <pub-id pub-id-type="doi">10.23919/acc45564.2020.9147448</pub-id> </citation>
</ref>
<ref id="B6">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Dangol</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Ramezani</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Towards Thruster-Assisted Bipedal Locomotion for Enhanced Efficiency and Robustness</article-title>. <source>arXiv preprint arXiv:2005.00347</source>. <pub-id pub-id-type="doi">10.1016/j.ifacol.2020.12.2721</pub-id> </citation>
</ref>
<ref id="B7">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Fahmi</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Mastalli</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Focchi</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Semini</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Passive Whole-Body Control for Quadruped Robots: Experimental Validation over Challenging Terrain</article-title>. <source>IEEE Robot. Autom. Lett.</source> <volume>4</volume>, <fpage>2553</fpage>&#x2013;<lpage>2560</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2019.2908502</pub-id> </citation>
</ref>
<ref id="B8">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Feng</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Whitman</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Xinjilefu</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Atkeson</surname>
<given-names>C. G.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Optimization Based Full Body Control for the Atlas Robot</article-title>,&#x201d; in <conf-name>IEEE-RAS International Conference on Humanoid Robots</conf-name> (<publisher-loc>Madrid, Spain</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>120</fpage>&#x2013;<lpage>127</lpage>. <pub-id pub-id-type="doi">10.1109/humanoids.2014.7041347</pub-id> </citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Galloway</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Sreenath</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Ames</surname>
<given-names>A. D.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Torque Saturation in Bipedal Robotic Walking through Control Lyapunov Function-Based Quadratic Programs</article-title>. <source>IEEE Access</source> <volume>3</volume>, <fpage>323</fpage>&#x2013;<lpage>332</lpage>. <pub-id pub-id-type="doi">10.1109/access.2015.2419630</pub-id> </citation>
</ref>
<ref id="B10">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Garone</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Di Cairano</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Kolmanovsky</surname>
<given-names>I.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Reference and Command Governors for Systems with Constraints: A Survey on Theory and Applications</article-title>. <source>Automatica</source> <volume>75</volume>, <fpage>306</fpage>&#x2013;<lpage>328</lpage>. <pub-id pub-id-type="doi">10.1016/j.automatica.2016.08.013</pub-id> </citation>
</ref>
<ref id="B11">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Goswami</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Kallem</surname>
<given-names>V.</given-names>
</name>
</person-group> (<year>2004</year>). <article-title>Rate of Change of Angular Momentum and Balance Maintenance of Biped Robots</article-title>. <source>IEEE Xplore</source> <volume>4</volume>, <fpage>3785</fpage>&#x2013;<lpage>3790</lpage>. <pub-id pub-id-type="doi">10.1109/robot.2004.1308858</pub-id> </citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gubina</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Hemami</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>McGhee</surname>
<given-names>R. B.</given-names>
</name>
</person-group> (<year>1974</year>). <article-title>On the Dynamic Stability of Biped Locomotion</article-title>. <source>IEEE Trans. Biomed. Eng.</source> <volume>21</volume>, <fpage>102</fpage>&#x2013;<lpage>108</lpage>. <pub-id pub-id-type="doi">10.1109/tbme.1974.324294</pub-id> </citation>
</ref>
<ref id="B13">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Hereid</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Cousineau</surname>
<given-names>E. A.</given-names>
</name>
<name>
<surname>Hubicki</surname>
<given-names>C. M.</given-names>
</name>
<name>
<surname>Ames</surname>
<given-names>A. D.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>3d Dynamic Walking with Underactuated Humanoid Robots: A Direct Collocation Framework for Optimizing Hybrid Zero Dynamics</article-title>,&#x201d; in <conf-name>2016 IEEE International Conference on Robotics and Automation (ICRA)</conf-name> (<publisher-loc>Stockholm, Sweden</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>1447</fpage>&#x2013;<lpage>1454</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2016.7487279</pub-id> </citation>
</ref>
<ref id="B14">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Hereid</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Hubicki</surname>
<given-names>C. M.</given-names>
</name>
<name>
<surname>Cousineau</surname>
<given-names>E. A.</given-names>
</name>
<name>
<surname>Hurst</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>). &#x201c;<article-title>Hybrid Zero Dynamics Based Multiple Shooting Optimization with Applications to Robotic Walking</article-title>,&#x201d; in <conf-name>2015 IEEE International Conference on Robotics and Automation (ICRA)</conf-name> (<publisher-loc>Seattle, WA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>5734</fpage>&#x2013;<lpage>5740</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2015.7140002</pub-id> </citation>
</ref>
<ref id="B44">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hill</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Fahimi</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Active Disturbance Rejection for Walking Bipedal Robots Using the Acceleration of the Upper Limbs</article-title>. <source>Robotica.</source> <volume>33</volume> (<issue>2</issue>), <fpage>264</fpage>&#x2013;<lpage>281</lpage>. <pub-id pub-id-type="doi">10.1017/S0263574714000332</pub-id> </citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hirose</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ogawa</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Honda Humanoid Robots Development</article-title>. <source>Phil. Trans. R. Soc. A.</source> <volume>365</volume>, <fpage>11</fpage>&#x2013;<lpage>19</lpage>. <pub-id pub-id-type="doi">10.1098/rsta.2006.1917</pub-id> </citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hurmuzlu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Marghitu</surname>
<given-names>D. B.</given-names>
</name>
</person-group> (<year>1994</year>). <article-title>Rigid Body Collisions of Planar Kinematic Chains with Multiple Contact Points</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>13</volume>, <fpage>82</fpage>&#x2013;<lpage>92</lpage>. <pub-id pub-id-type="doi">10.1177/027836499401300106</pub-id> </citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hutter</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Sommer</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Gehring</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Hoepflinger</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Bloesch</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Siegwart</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>Quadrupedal Locomotion Using Hierarchical Operational Space Control</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>33</volume>, <fpage>1047</fpage>&#x2013;<lpage>1062</lpage>. <pub-id pub-id-type="doi">10.1177/0278364913519834</pub-id> </citation>
</ref>
<ref id="B18">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kajita</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Tani</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>1991</year>). &#x201c;<article-title>Study of Dynamic Biped Locomotion on Rugged Terrain-Derivation and Application of the Linear Inverted Pendulum Mode</article-title>,&#x201d; in <conf-name>Proceedings. 1991 IEEE International Conference on Robotics and Automation</conf-name> (<publisher-loc>Sacramento, CA, USA</publisher-loc>: <publisher-name>IEEE Computer Society</publisher-name>), <fpage>1405</fpage>&#x2013;<lpage>1406</lpage>. </citation>
</ref>
<ref id="B19">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kapasouris</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Athans</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Stein</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>1988</year>). &#x201c;<article-title>Design of Feedback Control Systems for Stable Plants with Saturating Actuators</article-title>,&#x201d; in <conf-name>Proceedings of the 27th IEEE Conference on Decision and Control</conf-name> (<publisher-loc>Austin, TX, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>). <pub-id pub-id-type="doi">10.1109/CDC.1988.194356</pub-id> </citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kolmanovsky</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Kalabi&#x107;</surname>
<given-names>U.</given-names>
</name>
<name>
<surname>Gilbert</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2012</year>). <article-title>Developments in Constrained Control Using Reference Governors</article-title>. <source>IFAC Proc. Volumes</source> <volume>45</volume>, <fpage>282</fpage>&#x2013;<lpage>290</lpage>. <pub-id pub-id-type="doi">10.3182/20120823-5-nl-3013.00042</pub-id> </citation>
</ref>
<ref id="B21">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Kwon</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Kim</surname>
<given-names>H. K.</given-names>
</name>
<name>
<surname>Park</surname>
<given-names>J.&#x20;K.</given-names>
</name>
<name>
<surname>Roh</surname>
<given-names>C. H.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Park</surname>
<given-names>J.</given-names>
</name>
<etal/>
</person-group> (<year>2007</year>). &#x201c;<article-title>Biped Humanoid Robot Mahru Iii</article-title>,&#x201d; in <conf-name>IEEE-RAS International Conference on Humanoid Robots</conf-name> (<publisher-loc>Pittsburgh, PA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>583</fpage>&#x2013;<lpage>588</lpage>. <pub-id pub-id-type="doi">10.1109/ichr.2007.4813930</pub-id> </citation>
</ref>
<ref id="B45">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mandava</surname>
<given-names>R. K.</given-names>
</name>
<name>
<surname>Vundavilli</surname>
<given-names>P. R.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Near Optimal PID Controllers for the Biped Robot While Walking on Uneven Terrains</article-title>. <source>Int. J. Autom. Comput.</source> <volume>15</volume> (<issue>6</issue>), <fpage>689</fpage>&#x2013;<lpage>706</lpage>. <pub-id pub-id-type="doi">10.1007/s11633-018-1121-3</pub-id> </citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Medeiros</surname>
<given-names>V. S.</given-names>
</name>
<name>
<surname>Jelavic</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Bjelonic</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Siegwart</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Meggiolaro</surname>
<given-names>M. A.</given-names>
</name>
<name>
<surname>Hutter</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>Trajectory Optimization for Wheeled-Legged Quadrupedal Robots Driving in Challenging Terrain</article-title>. <source>IEEE Robot. Autom. Lett.</source> <volume>5</volume>, <fpage>4172</fpage>&#x2013;<lpage>4179</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2020.2990720</pub-id> </citation>
</ref>
<ref id="B23">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Nguyen</surname>
<given-names>Q.</given-names>
</name>
<name>
<surname>Sreenath</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2016</year>). &#x201c;<article-title>Exponential Control Barrier Functions for Enforcing High Relative-Degree Safety-Critical Constraints</article-title>,&#x201d; in <conf-name>2016 American Control Conference (ACC)</conf-name> (<publisher-loc>Boston, MA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>322</fpage>&#x2013;<lpage>328</lpage>. <pub-id pub-id-type="doi">10.1109/acc.2016.7524935</pub-id> </citation>
</ref>
<ref id="B24">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Nicotra</surname>
<given-names>M. M.</given-names>
</name>
<name>
<surname>Garone</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Explicit Reference Governor for Continuous Time Nonlinear Systems Subject to Convex Constraints</article-title>,&#x201d; in <conf-name>2015 American Control Conference (ACC)</conf-name> (<publisher-loc>Boston, MA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>4561</fpage>&#x2013;<lpage>4566</lpage>. <pub-id pub-id-type="doi">10.1109/acc.2015.7172047</pub-id> </citation>
</ref>
<ref id="B25">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Paine</surname>
<given-names>N.</given-names>
</name>
<name>
<surname>Mehling</surname>
<given-names>J.&#x20;S.</given-names>
</name>
<name>
<surname>Holley</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Radford</surname>
<given-names>N. A.</given-names>
</name>
<name>
<surname>Johnson</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Fok</surname>
<given-names>C.-L.</given-names>
</name>
<etal/>
</person-group> (<year>2015</year>). <article-title>Actuator Control for the Nasa-Jsc Valkyrie Humanoid Robot: A Decoupled Dynamics Approach for Torque Control of Series Elastic Robots</article-title>. <source>J.&#x20;Field Robotics</source> <volume>32</volume>, <fpage>378</fpage>&#x2013;<lpage>396</lpage>. <pub-id pub-id-type="doi">10.1002/rob.21556</pub-id> </citation>
</ref>
<ref id="B26">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Pardo</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Neunert</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Winkler</surname>
<given-names>A. W.</given-names>
</name>
<name>
<surname>Grandia</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Buchli</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2017</year>). &#x201c;<article-title>Hybrid Direct Collocation and Control in the Constraint-Consistent Subspace for Dynamic Legged Robot Locomotion</article-title>,&#x201d; in <conf-name>Robotics: Science and Systems</conf-name>. <pub-id pub-id-type="doi">10.15607/rss.2017.xiii.042</pub-id> </citation>
</ref>
<ref id="B27">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Park</surname>
<given-names>H.-W.</given-names>
</name>
<name>
<surname>Sreenath</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Ramezani</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
</person-group> (<year>2012</year>). &#x201c;<article-title>Switching Control Design for Accommodating Large Step-Down Disturbances in Bipedal Robot Walking</article-title>,&#x201d; in <conf-name>2012 IEEE International Conference on Robotics and Automation</conf-name> (<publisher-loc>Saint Paul, MN, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>45</fpage>&#x2013;<lpage>50</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2012.6225056</pub-id> </citation>
</ref>
<ref id="B28">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Posa</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cantu</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Tedrake</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>A Direct Method for Trajectory Optimization of Rigid Bodies through Contact</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>33</volume>, <fpage>69</fpage>&#x2013;<lpage>81</lpage>. <pub-id pub-id-type="doi">10.1177/0278364913506757</pub-id> </citation>
</ref>
<ref id="B29">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Pratt</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Carff</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Drakunov</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Goswami</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2006</year>). &#x201c;<article-title>Capture point: A Step toward Humanoid Push Recovery</article-title>,&#x201d; in <conf-name>2006 6th IEEE-RAS international conference on humanoid robots</conf-name> (<publisher-loc>Genova, Italy</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>200</fpage>&#x2013;<lpage>207</lpage>. <pub-id pub-id-type="doi">10.1109/ichr.2006.321385</pub-id> </citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Pratt</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chew</surname>
<given-names>C.-M.</given-names>
</name>
<name>
<surname>Torres</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Dilworth</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Pratt</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2001</year>). <article-title>Virtual Model Control: An Intuitive Approach for Bipedal Locomotion</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>20</volume>, <fpage>129</fpage>&#x2013;<lpage>143</lpage>. <pub-id pub-id-type="doi">10.1177/02783640122067309</pub-id> </citation>
</ref>
<ref id="B31">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Pratt</surname>
<given-names>J.&#x20;E.</given-names>
</name>
<name>
<surname>Krupp</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Ragusila</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Rebula</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Koolen</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>van Nieuwenhuizen</surname>
<given-names>N.</given-names>
</name>
<etal/>
</person-group> (<year>2009</year>). &#x201c;<article-title>The Yobotics-Ihmc Lower Body Humanoid Robot</article-title>,&#x201d; in <conf-name>IEEE/RSJ International Conference on Intelligent Robots and Systems</conf-name> (<publisher-loc>St. Louis, MO, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>410</fpage>&#x2013;<lpage>411</lpage>. <pub-id pub-id-type="doi">10.1109/iros.2009.5354430</pub-id> </citation>
</ref>
<ref id="B32">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Pratt</surname>
<given-names>J.&#x20;E.</given-names>
</name>
<name>
<surname>Tedrake</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2006</year>). &#x201c;<article-title>Velocity-based Stability Margins for Fast Bipedal Walking</article-title>,&#x201d; in <conf-name>Fast Motions in Biomechanics and Robotics</conf-name> (<publisher-loc>Berlin, Germany</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>299</fpage>&#x2013;<lpage>324</lpage>. </citation>
</ref>
<ref id="B33">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Raibert</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Blankespoor</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Nelson</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Playter</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2008</year>). <article-title>Bigdog, the Rough-Terrain Quadruped Robot</article-title>. <source>IFAC Proc. Volumes</source> <volume>41</volume>, <fpage>10822</fpage>&#x2013;<lpage>10825</lpage>. <pub-id pub-id-type="doi">10.3182/20080706-5-kr-1001.01833</pub-id> </citation>
</ref>
<ref id="B34">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Raibert</surname>
<given-names>M. H.</given-names>
</name>
<name>
<surname>Brown</surname>
<given-names>H. B.</given-names>
<suffix>Jr</suffix>
</name>
<name>
<surname>Chepponis</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>1984</year>). <article-title>Experiments in Balance with a 3d One-Legged Hopping Machine</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>3</volume>, <fpage>75</fpage>&#x2013;<lpage>92</lpage>. <pub-id pub-id-type="doi">10.1177/027836498400300207</pub-id> </citation>
</ref>
<ref id="B43">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Song</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Tang</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Yan</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Active Disturbance Rejection Controller Design for Stable Walking of a Compass-like Biped</article-title>. <source>Trans. Inst. Meas.</source> <volume>40</volume> (<issue>14</issue>), <fpage>4063</fpage>&#x2013;<lpage>4077</lpage>. <pub-id pub-id-type="doi">10.1177/0142331217741957</pub-id> </citation>
</ref>
<ref id="B35">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sreenath</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Park</surname>
<given-names>H.-W.</given-names>
</name>
<name>
<surname>Poulakakis</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
</person-group> (<year>2011</year>). <article-title>A Compliant Hybrid Zero Dynamics Controller for Stable, Efficient and Fast Bipedal Walking on mabel</article-title>. <source>Int. J.&#x20;Robotics Res.</source> <volume>30</volume>, <fpage>1170</fpage>&#x2013;<lpage>1193</lpage>. <pub-id pub-id-type="doi">10.1177/0278364910379882</pub-id> </citation>
</ref>
<ref id="B36">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Stephens</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2007</year>). &#x201c;<article-title>Humanoid Push Recovery</article-title>,&#x201d; in <conf-name>2007 7th IEEE-RAS International Conference on Humanoid Robots</conf-name> (<publisher-loc>Pittsburgh, PA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>589</fpage>&#x2013;<lpage>595</lpage>. <pub-id pub-id-type="doi">10.1109/ichr.2007.4813931</pub-id> </citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vukobratovi&#x107;</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Stepanenko</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1972</year>). <article-title>On the Stability of Anthropomorphic Systems</article-title>. <source>Math. biosciences</source> <volume>15</volume>, <fpage>1</fpage>&#x2013;<lpage>37</lpage>. </citation>
</ref>
<ref id="B38">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Westervelt</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2007</year>). <source>Feedback Control of Dynamic Bipedal Robot Locomotion. Control and Automation Series</source>. <publisher-loc>Boca Raton, FL, USA</publisher-loc>: <publisher-name>CRC PressINC</publisher-name>. </citation>
</ref>
<ref id="B39">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Westervelt</surname>
<given-names>E. R.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
<name>
<surname>Chevallereau</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Choi</surname>
<given-names>J.&#x20;H.</given-names>
</name>
<name>
<surname>Morris</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2018</year>). <source>Feedback Control of Dynamic Bipedal Robot Locomotion</source>. <publisher-loc>Boca Raton, FL, USA</publisher-loc>: <publisher-name>CRC Press</publisher-name>. </citation>
</ref>
<ref id="B40">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Westervelt</surname>
<given-names>E. R.</given-names>
</name>
<name>
<surname>Grizzle</surname>
<given-names>J.&#x20;W.</given-names>
</name>
<name>
<surname>Koditschek</surname>
<given-names>D. E.</given-names>
</name>
</person-group> (<year>2003</year>). <article-title>Hybrid Zero Dynamics of Planar Biped Walkers</article-title>. <source>IEEE Trans. Automat. Contr.</source> <volume>48</volume>, <fpage>42</fpage>&#x2013;<lpage>56</lpage>. <pub-id pub-id-type="doi">10.1109/tac.2002.806653</pub-id> </citation>
</ref>
<ref id="B41">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Winkler</surname>
<given-names>A. W.</given-names>
</name>
<name>
<surname>Mastalli</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Havoutis</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Focchi</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Caldwell</surname>
<given-names>D. G.</given-names>
</name>
<name>
<surname>Semini</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Planning and Execution of Dynamic Whole-Body Locomotion for a Hydraulic Quadruped on Challenging Terrain</article-title>,&#x201d; in <conf-name>2015 IEEE International Conference on Robotics and Automation (ICRA)</conf-name> (<publisher-loc>Seattle, WA, USA</publisher-loc>: <publisher-name>IEEE</publisher-name>), <fpage>5148</fpage>&#x2013;<lpage>5154</lpage>. <pub-id pub-id-type="doi">10.1109/icra.2015.7139916</pub-id> </citation>
</ref>
<ref id="B42">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xin</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Wolfslag</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Lin</surname>
<given-names>H.-C.</given-names>
</name>
<name>
<surname>Tiseo</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Mistry</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2020</year>). <article-title>An Optimization-Based Locomotion Controller for Quadruped Robots Leveraging Cartesian Impedance Control</article-title>. <source>Front. Robot. AI</source> <volume>7</volume>, <fpage>48</fpage>. <pub-id pub-id-type="doi">10.3389/frobt.2020.00048</pub-id> </citation>
</ref>
</ref-list>
</back>
</article>