<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<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="doi">10.3389/frobt.2015.00006</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>iCub Whole-Body Control through Force Regulation on Rigid Non-Coplanar Contacts</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Nori</surname> <given-names>Francesco</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="corresp" rid="cor1">&#x0002A;</xref>
<uri xlink:href="http://frontiersin.org/people/u/22296"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Traversaro</surname> <given-names>Silvio</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://frontiersin.org/people/u/189595"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Eljaik</surname> <given-names>Jorhabib</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://frontiersin.org/people/u/189645"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Romano</surname> <given-names>Francesco</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://frontiersin.org/people/u/209283"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Del Prete</surname> <given-names>Andrea</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://frontiersin.org/people/u/185431"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Pucci</surname> <given-names>Daniele</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://frontiersin.org/people/u/189591"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Cognitive Humanoids Laboratory, Department of Robotics Brain and Cognitive Sciences, Fondazione Istituto Italiano di Tecnologia</institution>, <addr-line>Genoa</addr-line>, <country>Italy</country></aff>
<aff id="aff2"><sup>2</sup><institution>CNRS, LAAS, University of Toulouse</institution>, <addr-line>Toulouse</addr-line>, <country>France</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Alexandre Bernardino, Universidade de Lisboa, Portugal</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Arnaud Blanchard, University of Cergy Pontoise, France; Oscar Efrain Ramos Ponce, Duke University, USA</p></fn>
<corresp content-type="corresp" id="cor1">&#x0002A;Correspondence: Francesco Nori, Cognitive Humanoids Laboratory, Department of Robotics Brain and Cognitive Sciences, Fondazione Istituto Italiano di Tecnologia, Via Morego 30, Genova 16163, Italy e-mail: <email>francesco.nori&#x00040;iit.it</email></corresp>
<fn fn-type="other" id="fn001"><p>This article was submitted to Humanoid Robotics, a section of the journal Frontiers in Robotics and AI.</p></fn>
</author-notes>
<pub-date pub-type="epub">
<day>16</day>
<month>03</month>
<year>2015</year>
</pub-date>
<pub-date pub-type="collection">
<year>2015</year>
</pub-date><volume>2</volume>
<elocation-id>6</elocation-id>
<history>
<date date-type="received">
<day>16</day>
<month>10</month>
<year>2014</year>
</date>
<date date-type="accepted">
<day>25</day>
<month>02</month>
<year>2015</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2015 Nori, Traversaro, Eljaik, Romano, Del Prete and Pucci.</copyright-statement>
<copyright-year>2015</copyright-year>
<license license-type="open-access" 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) or licensor are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract>
<p>This paper details the implementation of state-of-the-art whole-body control algorithms on the humanoid robot iCub. We regulate the forces between the robot and its surrounding environment to stabilize a desired posture. We assume that the forces and torques are exerted on rigid contacts. The validity of this assumption is guaranteed by constraining the contact forces and torques, e.g., the contact forces must belong to the associated friction cones. The implementation of this control strategy requires the estimation of both joint torques and external forces acting on the robot. We then detail algorithms to obtain these estimates when using a robot with an iCub-like sensor set, i.e., distributed six-axis force-torque sensors and whole-body tactile sensors. A general theory for identifying the robot inertial parameters is also presented. From an actuation standpoint, we show how to implement a joint-torque control in the case of DC brushless motors. In addition, the coupling mechanism of the iCub torso is investigated. The soundness of the entire control architecture is validated in a real scenario involving the robot iCub balancing and making contact with both arms.</p>
</abstract>
<kwd-group>
<kwd>whole-body control</kwd>
<kwd>floating-base robots</kwd>
<kwd>rigid contacts</kwd>
<kwd>non-coplanar contact</kwd>
<kwd>tactile sensors</kwd>
<kwd>force sensors</kwd>
</kwd-group>
<contract-num rid="cn001">600716 ICT 2011.2.1</contract-num>
<contract-num rid="cn001">611909 ICT-2013.2.1</contract-num>
<contract-sponsor id="cn001">FP7 EU projects CoDyCo</contract-sponsor>
<contract-sponsor id="cn002">Koroibot</contract-sponsor>
<counts>
<fig-count count="11"/>
<table-count count="0"/>
<equation-count count="50"/>
<ref-count count="36"/>
<page-count count="18"/>
<word-count count="15286"/>
</counts>
</article-meta>
</front>
<body>
<sec id="S1" sec-type="introduction">
<label>1</label> <title>Introduction</title>
<p>Classical industrial applications employ robots with limited mobility. Consequently, assuming that the robot is firmly attached to the ground, interaction control (e.g., manipulation) is usually achieved separately from whole-body posture control (e.g., balancing). Foreseen applications involve robots with augmented autonomy and physical mobility. Within this novel context, physical interaction influences stability and balance. To allow robots to overcome barriers between interaction and posture control, forthcoming robotics research needs to investigate the principles governing <italic>whole-body coordination</italic> with <italic>contact dynamics</italic>, as these represent important challenges toward achieving robot physical autonomy and will therefore be the focus of the present paper.</p>
<p>It is worth recalling that the aforementioned industrial robots have been extensively studied since the early seventies. Robot physical autonomy asks for switching from conventional fixed-base to free-floating robots, whose control has been addressed only during recent years. Free-floating mechanical systems are under actuated and therefore cannot be fully feedback linearized (Spong, <xref ref-type="bibr" rid="B32">1994</xref>). The problem becomes even more complex when these systems are constrained that is their dynamics are subject to a set of (possibly time-varying) non-linear constraints. This is the typical case for legged robots, for which motion is constrained by rigid contacts with the ground.</p>
<p>The major contribution of this work is the implementation and integration of all the building blocks composing a system for balance and motion control of a humanoid robot. The system includes the low-level joint-torque control, the task-space inverse-dynamics control, the task planner and the estimation of contact forces and joint torques. Even though in recent years, other similar systems have been presented (Ott et al., <xref ref-type="bibr" rid="B25">2011</xref>; Herzog et al., <xref ref-type="bibr" rid="B13">2014</xref>), the originality of our contribution lies (i) in the specificities of our test platform and (ii) in a number of design choices that traded off simplicity of implementation for performances of the control system. In particular:
<list list-type="bullet">
<list-item><p>differently from the other robots, iCub can localize and estimate contact forces on its whole-body thanks to its distributed tactile sensors</p></list-item>
<list-item><p>similarly to the <italic>DLR-Biped</italic> (Ott et al., <xref ref-type="bibr" rid="B25">2011</xref>), iCub is actuated with DC motors and harmonic drives, but we chose to neglect the gear-box flexibility, which simplified the motor-identification procedure and the low-level torque controller</p></list-item>
<list-item><p>differently from the above-mentioned platforms, iCub is not equipped with joint-torque sensors, but we designed a method that exploits its internal 6-axis force/torque sensors to estimate the joint torques</p></list-item>
<list-item><p>all our control loops run at 100&#x02009;Hz, which is (at least) 10 times slower with respect to Ott et al. (<xref ref-type="bibr" rid="B25">2011</xref>) and Herzog et al. (<xref ref-type="bibr" rid="B13">2014</xref>).</p></list-item>
</list></p>
<p>We believe that further investigation will be necessary to thoroughly understand all the consequences of our hardware/software design choices. Nonetheless, these peculiarities make the presented system unique, and for this reason we think it is important to share our results with the robotics community.</p>
<p>The paper is organized as follows: Section <xref ref-type="sec" rid="S2">2</xref> reviews the state of the art and motivates our specific choices, with a focus on why we defined postural stability by means of the center of pressure at individual contacts. A counterexample discussed in Section <xref ref-type="sec" rid="S2-3-8">2.3.3</xref> shows that the commonly used global center of pressure is not suitable for the scope of our application. Section <xref ref-type="sec" rid="S3-5">3.1</xref> describes the whole-body distributed force and tactile sensors on iCub. These sensors are used to estimate contact forces (Section <xref ref-type="sec" rid="S3-6-9">3.2.1</xref>), internal torques (Section <xref ref-type="sec" rid="S3-6-10">3.2.2</xref>), and to improve the accuracy of the robot&#x02019;s inertial parameters (Section <xref ref-type="sec" rid="S3-7">3.3</xref>), while Section <xref ref-type="sec" rid="S3-8">3.4</xref> presents the prioritized contact-force controller. Section <xref ref-type="sec" rid="S4">4</xref> discusses the implementation scenario, consisting in controlling the iCub posture and contact forces at both arms and feet. Remarkably, iCub can establish and break contacts at the arms using tactile sensing for both contact detection and localization. Finally, Section <xref ref-type="sec" rid="S5">5</xref> draws the conclusions.</p>
</sec>
<sec id="S2">
<label>2</label> <title>Background</title>
<p>This section reviews previous literature on rigid contacts and their role in whole-body stability. Then we conclude that for the scope of the current paper we need to consider local contact stability as opposed to global stability criteria proposed in previous literature. Section <xref ref-type="sec" rid="S2-1">2.1</xref> makes some general considerations about contacts and Section <xref ref-type="sec" rid="S2-1-1">2.1.1</xref> gives a characterization of contacts by means of the center of pressure, a point in space that summarizes the effects of distributed forces acting on a rigid body. Section <xref ref-type="sec" rid="S2-2">2.2</xref> focuses on planar unilateral contacts and their stability (Section <xref ref-type="sec" rid="S2-2-3">2.2.1</xref>). This specific type of contacts is associated with a center of pressure that lies on the contact plane (Section <xref ref-type="sec" rid="S2-2-4">2.2.2</xref>). This property is exploited to give necessary and sufficient conditions for the stability of a planar unilateral contact (Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>). Section <xref ref-type="sec" rid="S2-3">2.3</xref> reviews previous literature on multiple contacts. In particular, Section <xref ref-type="sec" rid="S2-3-6">2.3.1</xref> considers the coplanar case, whereas Section <xref ref-type="sec" rid="S2-3-7">2.3.2</xref> the non-coplanar one. Section <xref ref-type="sec" rid="S2-3-8">2.3.3</xref> discusses a counterexample to justify our choice of addressing the multiple-contact case without resorting to a global stability criterion as proposed in most of previous approaches. Finally, Section <xref ref-type="sec" rid="S2-4">2.4</xref> briefly reviews the state of the art of prioritized task-space inverse dynamics.</p>
<sec id="S2-1">
<label>2.1</label> <title>Contacts</title>
<p>We consider articulated rigid-body systems under the effects of multiple rigid contacts. In general, a contact can be seen as a continuum of infinitesimal forces acting on the surface of a rigid body. The effect of contact forces will be represented with an equivalent wrench <italic>w<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic>), composed by a three-dimensional force and a three-dimensional torque, denoted <italic>f<sub>c</sub></italic> and <italic>&#x003BC;<sub>c</sub></italic>, respectively. Considering that a contact exerts infinitesimal forces distributed over a surface, <italic>f<sub>c</sub></italic> is computed as the integral of infinitesimal forces over the surface. Similarly, <italic>&#x003BC;<sub>c</sub></italic> is computed as the integral of the infinitesimal torques due to infinitesimal forces over the surface. The effect of other (non-contact) forces and torques acting on the rigid body will be denoted as <italic>w<sub>o</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>o</sub></italic>, <italic>&#x003BC;<sub>o</sub></italic>), being <italic>f<sub>o</sub></italic> and <italic>&#x003BC;<sub>o</sub></italic> the equivalent force and torque (respectively) resulting from all non-contact forces.</p>
<sec id="S2-1-1">
<label>2.1.1</label> <title>Definition of center of pressure (CoP)</title>
<p>Given a rigid body subject to contact forces, we associate a field of pressure to the contact itself. For each contact point, the pressure is defined as the amount of normal force acting per unit area. The center of pressure (CoP) is defined as an application point where the force obtained by the integration of the field of pressures causes an effect that is equivalent to that of the field of pressures itself. <italic>Remark 1:</italic> by definition, pressure accounts only for the normal component of the contact forces acting on the surface of a rigid body. Therefore, the CoP comes handy especially when the tangential forces (shear stress) are negligible or does not play a role in the rigid body dynamics (e.g., the effect of tangential forces is compensated by the static friction). Otherwise, the CoP does not represent <italic>per se</italic> a full characterization of the forces acting on the system and the effect of tangential forces should be also taken into account. <italic>Remark 2:</italic> at any point in space, the effect of a field of pressures can be represented by an equivalent force and an equivalent torque (the integral of infinitesimal forces and torques, respectively). Given the above definition, the CoP is an application point where the equivalent torque is null.</p>
</sec>
<sec id="S2-1-2">
<label>2.1.2</label> <title>Existence of the center of pressure (CoP)</title>
<p>Given the above definition, we can infer that the CoP sometimes might not exist. As a trivial example, the CoP does not exist when a field of pressure generates a zero net force but a non-zero net torque. Excluding this trivial case, by resorting to the Poinsot theorem it can be shown (see Appendix <xref ref-type="sec" rid="S7">A</xref>) that the CoP is defined if and only if the resulting net torque is orthogonal to the resulting net force. Two relevant cases that satisfy this condition can be identified: field of pressures due to forces lying on a plane (torques orthogonal to the plane) and field of pressures due to forces orthogonal to a plane (torques lying on the plane). The first is a typical example used in aerodynamics (profile of a wing) and the latter is a typical example in the field of humanoid walking (contact with planar surfaces). In any case, the CoP is never uniquely defined and the set of valid CoPs corresponds to the Poinsot axis (see Appendix <xref ref-type="sec" rid="S7-2">A.2</xref>). In the case of planar contacts, we will uniquely identify the CoP with the intersection between the axis and the planar contact surface as proposed by Sardain and Bessonnet (<xref ref-type="bibr" rid="B30">2004</xref>).</p>
</sec>
</sec>
<sec id="S2-2">
<label>2.2</label> <title>Planar unilateral contact</title>
<p>A particular type of contacts, nominally planar unilateral contacts, has been widely studied to characterize the stability of an articulated rigid-body system while walking on flat terrain. The typical case-study considers a single link (foot) in contact with a flat surface (ground). Proposed stability criteria take into account the fact that while the foot has to be constantly in contact with the ground, the rest of the body is moving and therefore transfers inertial and gravitational forces to the foot. The foot is therefore subject to two sets of wrenches: those due to the contact with the ground (<italic>w<sub>c</sub></italic>) and those due to the movements of the rest of the body (<italic>w<sub>o</sub></italic>). For the contact to be stable, these forces should balance (see Section <xref ref-type="sec" rid="S2-2-3">2.2.1</xref>). Force balance might not always hold since planar unilateral contacts exert a limited range of forces and torques. Original stability properties were proposed by Vukobratovic and Juricic (<xref ref-type="bibr" rid="B35">1969</xref>), who introduced the <italic>zero moment point</italic> (ZMP) concept. The ZMP coincides with the unique point on the ground where <italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic> produce zero tangential moments (see Section <xref ref-type="sec" rid="S2-2-4">2.2.2</xref>). As it was pointed out by Sardain and Bessonnet (<xref ref-type="bibr" rid="B30">2004</xref>), in the case of planar contacts, the ZMP coincides with the intersection of the Poinsot axis with the contact plane as defined in Section <xref ref-type="sec" rid="S2-1-1">2.1.1</xref>; the ZMP is therefore a valid CoP. Other stability criteria for planar unilateral contacts have been proposed by Goswami (<xref ref-type="bibr" rid="B11">1999</xref>) and reviewed in Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>.</p>
<sec id="S2-2-3">
<label>2.2.1</label> <title>Definition of stable planar unilateral contact</title>
<p>So far, we have only discussed about forces generated by contacts. In general, contacts also introduce motion constraints and there is always a duality between contact forces and constrained motion. In the case of rigid contacts, the directions in which motion is constrained are precisely those in which (contact) forces can be exerted as observed by Murray et al. (<xref ref-type="bibr" rid="B23">1994</xref>). In other words, contact forces and possible motions are always orthogonal. From a control point of view, it is often desirable that the set of motion constraints does not change over time, since if it does, the control problem becomes harder to solve (see, for example, literature on hybrid and switching systems). This is the reason why <italic>we say that a contact is stable when the motion constraints induced by it do not change over time</italic>. Interestingly, motion constraints are effective on the system only if certain conditions are satisfied. If these conditions are not met (e.g., contact forces violate unilateral constraints or exceed friction cones) contacts are broken and motion constraints are no longer active on the system. It is therefore important to find a set of necessary and sufficient conditions for a contact to constrain always the same motion.</p>
<p>In the case of planar unilateral contacts, these conditions assume an elegant form that will be presented in Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>. The analysis is simplified by observing that planar unilateral contacts impose constraints on all linear and angular motions<xref ref-type="fn" rid="fn1"><sup>1</sup></xref>. Therefore, a planar unilateral contact imposes null linear and angular accelerations. By means of the Newton&#x02013;Euler equations on the contact link, motion constraints are therefore guaranteed if and only if <italic>f<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;&#x02212;&#x02009;<italic>f<sub>o</sub></italic> and &#x003BC;<italic><sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;&#x02212;&#x02009;&#x003BC;<italic><sub>o</sub></italic>. In a sense, deciding whether or not a planar unilateral contact is stable (with the above terminology) corresponds to understanding if a given wrench <italic>f<sub>o</sub></italic>, <italic>&#x003BC;<sub>o</sub></italic> can be compensated by the forces <italic>f<sub>c</sub></italic> and torques &#x003BC;<italic><sub>c</sub></italic> generated by the given type of contact. If &#x02212;<italic>f<sub>o</sub></italic>, &#x02212;&#x003BC;<italic><sub>o</sub></italic> lie outside the space of wrenches that a planar unilateral contact can generate, then non-zero accelerations are generated and the contact is broken. The following section shows how to characterize the set of wrenches generated by a planar unilateral contact.</p>
</sec>
<sec id="S2-2-4">
<label>2.2.2</label> <title>Characterization of the CoP for planar unilateral contacts</title>
<p>Given a planar unilateral contact, the set of forces induced by the contact are such that it is always possible to find a point on the plane where the equivalent moment has null tangential components. This point has been named zero moment point (ZMP) by Vukobratovic and Juricic (<xref ref-type="bibr" rid="B35">1969</xref>). The name is sometimes considered misleading [see, for example, Sardain and Bessonnet (<xref ref-type="bibr" rid="B30">2004</xref>)] since at the ZMP the &#x0201C;tipping&#x0201D; (or tangential) moment and not the &#x0201C;total&#x0201D; moment is zeroed. The computation of the zero tipping moment point is relatively straightforward and reformulated in Section &#x0201C;Appendix <xref ref-type="sec" rid="S8-1">B.1</xref>.&#x0201D; In the case of unilateral contacts, the ZMP coincides with the CoP [see Sardain and Bessonnet (<xref ref-type="bibr" rid="B30">2004</xref>)] and always lies in the convex hull of the contact points as shown by Wieber (<xref ref-type="bibr" rid="B36">2002</xref>) and in Section &#x0201C;Appendix <xref ref-type="sec" rid="S8-1">B.1</xref>.&#x0201D; It is worth noticing that (in the ZMP context) restricting to tangential moments corresponds (in the CoP context) to neglecting tangential forces (see the first remark in Section <xref ref-type="sec" rid="S2-1-1">2.1.1</xref>).</p>
</sec>
<sec id="S2-2-5">
<label>2.2.3</label> <title>Characterization of stable planar unilateral contact</title>
<p>Goswami (<xref ref-type="bibr" rid="B11">1999</xref>) pointed out that the ZMP lying within the contact convex hull is not a proper stability measure. He therefore formulated some different statements for the characterization of the stability of planar unilateral contacts. These statements make use of the foot rotation indicator (FRI), which corresponds to the unique zero tipping moment point associated to <italic>f<sub>o</sub></italic>, <italic>&#x003BC;<sub>o</sub></italic> and belonging to the contact plane. The name FRI is misleading since this physical quantity can be associated to any rigid body in contact with a planar surface, regardless of the fact that the body itself is a foot or not. Remarkably, the FRI (differently form the CoP) is not constrained in the contact convex hull because <italic>f<sub>o</sub></italic> and <italic>&#x003BC;<sub>o</sub></italic> are not the result of unilateral contact forces. Other names used in literature for the FRI are fictitious ZMP (FZMP) and computed ZMP (CZMP) used by Vukobratovic and Borovac (<xref ref-type="bibr" rid="B34">2004</xref>) and Kajita and Espiau (<xref ref-type="bibr" rid="B18">2008</xref>), respectively. If the FRI is not within the contact convex hull, Goswami (<xref ref-type="bibr" rid="B11">1999</xref>) has shown that a rotation of the rigid link is occurring (i.e., angular acceleration is not identically zero). Vice versa, if the FRI is within the contact convex hull and if frictional constraints are satisfied<xref ref-type="fn" rid="fn2"><sup>2</sup></xref>, then the unilateral contact is stable (i.e., the contact link has null accelerations). The complete proof of the latter statement requires some additional considerations, which are outside the scope of the present paper. The interested reader should refer to chapter 11 of Featherstone (<xref ref-type="bibr" rid="B9">2008</xref>).</p>
<p>Both the ZMP and the FRI concept have been used by several authors to define a suitable stability margin for balancing an articulated rigid body system. Hirai et al. (<xref ref-type="bibr" rid="B14">1998</xref>) used the ZMP concept to balance one of the earliest versions of the Honda walking humanoids. Huang et al. (<xref ref-type="bibr" rid="B16">2001</xref>) adopted a similar concept to define a stability margin tunable by modifying the robot hip motion. Li et al. (<xref ref-type="bibr" rid="B20">1993</xref>) used the error between a desired and the computed ZMP to learn stable walking. A good reason to prefer the FRI has been pointed out by Goswami (<xref ref-type="bibr" rid="B11">1999</xref>): given that &#x0201C;the ZMP cannot distinguish between the marginal state of static equilibrium and a complete loss of equilibrium of the foot (in both cases, the ZMP is situated at the support boundary), its utility in gait planning is limited. FRI point, on the other hand, may exit the physical boundary of the support polygon and it does so whenever the foot is subjected to a net rotational moment.&#x0201D;</p>
</sec>
</sec>
<sec id="S2-3">
<label>2.3</label> <title>Multiple contacts</title>
<p>So far, we discussed the stability of an articulated rigid body system subject to a single planar unidirectional contact. The stability characterization given by Goswami (<xref ref-type="bibr" rid="B11">1999</xref>) guarantees contacts stability by requiring the FRI to stay inside the support convex hull. In this section, we review extensions of this criterium to the case of multiple contacts. Proposed extensions search for some global stability criteria to condense the local stability criteria on individual contacts. Section <xref ref-type="sec" rid="S2-3-6">2.3.1</xref> considers the simple case of multiple coplanar contacts and the associated global stability criteria, known as global CoP. Section <xref ref-type="sec" rid="S2-3-7">2.3.2</xref> reviews previous literature on global criteria with multiple non-coplanar contacts. The present section concludes by observing that, for the scope of the present paper, it is mandatory to abandon global criteria and stick to local ones. The conclusion follows from a counterexample, provided in Section &#x0201C;Appendix <xref ref-type="sec" rid="S7-2">A.2</xref>&#x0201D; and discussed in Section <xref ref-type="sec" rid="S2-3-8">2.3.3</xref>.</p>
<sec id="S2-3-6">
<label>2.3.1</label> <title>Multiple coplanar contacts</title>
<p>In this section, we consider the case of articulated rigid body systems in contact with a flat surface (typically the ground). Differently from the previous sections, we assume that more than one single rigid body is in contact with the flat ground and therefore we consider a multiple coplanar contacts scenario. Within this context, we distinguish between local CoP (one per each rigid body in contact with the ground) and global CoP (the center of pressure resulting from all rigid bodies in contact). The local CoP of a rigid body has been defined and characterized in Sections <xref ref-type="sec" rid="S2-1-1">2.1.1</xref>, <xref ref-type="sec" rid="S2-2-4">2.2.2</xref>, and <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>. These definitions and characterizations refer to a single rigid body (e.g., the foot) but can be extended to any rigid body of the articulated system. Computations in this case account only for the contact forces acting on the rigid body itself. Global CoP (GCoP) is instead a quantity associated with the whole articulated system and corresponds to the center of pressure obtained by integrating all contact forces acting on the articulated system. Most of the previous literature does not distinguish between local and global center of pressure but often refer to the latter when characterizing stability during the double-support phase of flat terrain walking. Remarkably, the property of the GCoP lying inside the contacts convex hull still holds. This stability criterion has been used by several authors (Huang et al., <xref ref-type="bibr" rid="B16">2001</xref>; Wieber, <xref ref-type="bibr" rid="B36">2002</xref>; Stonier and Kim, <xref ref-type="bibr" rid="B33">2006</xref>) to infer stability in flat terrain walking. In particular, Wieber (<xref ref-type="bibr" rid="B36">2002</xref>) defined a motion to be realizable if and only if the GCoP lies inside the convex hull of contact points. Even though Popovic and Herr (<xref ref-type="bibr" rid="B27">2005</xref>) questioned the use of the GCoP as a way to guarantee postural stability, associated criteria are at present the most adopted for planning walking trajectories. In Section <xref ref-type="sec" rid="S2-3-8">2.3.3</xref>, we further question the GCoP as a stability criterion, focusing in particular on the scope of the current paper.</p>
</sec>
<sec id="S2-3-7">
<label>2.3.2</label> <title>Mutiple non-coplanar contacts</title>
<p>Harada et al. (<xref ref-type="bibr" rid="B12">2003</xref>) defined a generalized ZMP (GZMP) and a projected convex hull to formulate stability conditions for a limited class of arm/leg coordination tasks. Sardain and Bessonnet (<xref ref-type="bibr" rid="B30">2004</xref>) proposed a concept of virtual surface and virtual CoP-ZMP limited to the case of two non-coplanar contacts. In spite of the adopted simplification, authors themselves admit their failure in finding an associated pseudo support polygon onto which the pseudo-ZMP stays. Hyon et al. (<xref ref-type="bibr" rid="B17">2007</xref>) presented a framework for computing joint torques that optimally distributes forces across multiple contacts; conditions for the CoP to lie within the supporting convex hull are formulated but stability conditions are not formulated with sufficient level of details.</p>
</sec>
<sec id="S2-3-8">
<label>2.3.3</label> <title>Global versus local CoP</title>
<p>In the present paper, we formulate a whole-body postural control, which assumes stable contacts. Stability, as defined in Section <xref ref-type="sec" rid="S2-2-3">2.2.1</xref> guarantees time invariance of motion constraints and avoids the complications of controlling hybrid systems. Necessary and sufficient conditions for stability of individual contacts can be obtained by resorting to the FRI of each contact. Most of previous literature on flat terrain walking postulates the GCoP to lie in the contacts convex hull as a stability criterium. This criterium is a necessary and sufficient condition for a whole-body motion to be realizable as pointed out by Wieber (<xref ref-type="bibr" rid="B36">2002</xref>) (see, in particular, Section <xref ref-type="sec" rid="S3-6">3.2</xref> of his paper). However, it is not a sufficient condition to guarantee stability of all contacts. Section &#x0201C;Appendix <xref ref-type="sec" rid="S8">B</xref>&#x0201D; provides a counterexample in the simple case of two coplanar contacts: the GCoP is shown to lie in the contacts convex hull but individual contacts are proven to be unstable. We therefore decide in this paper to stick to local contact stability criteria since no previous global criteria guarantee the stability of all local contacts.</p>
</sec>
</sec>
<sec id="S2-4">
<label>2.4</label> <title>Task-space inverse dynamics</title>
<p>We now briefly review the vast literature on prioritized task-space inverse-dynamics control and we motivate our choices in this regard. Sentis (<xref ref-type="bibr" rid="B31">2007</xref>) and Park (<xref ref-type="bibr" rid="B26">2006</xref>) have been pioneers in the control of articulated free-floating rigid bodies exploiting the operational-space framework (Khatib, <xref ref-type="bibr" rid="B19">1987</xref>). More recent approaches have explored the idea of simplifying the system dynamic equations by performing suitable projections onto the null space of the contact forces as proposed by Righetti et al. (<xref ref-type="bibr" rid="B29">2011</xref>) and Aghili (<xref ref-type="bibr" rid="B1">2005</xref>). While being computationally efficient (i.e., a total computation time below 1&#x02009;ms), all these approaches share a common drawback: contact forces cannot be controlled. As a consequence, stability of the contacts cannot be guaranteed, which may lead the robot to tip over and fall.</p>
<p>As opposed to these analytical solutions to the control problem, an alternative numerical approach proposed by de Lasa et al. (<xref ref-type="bibr" rid="B4">2010</xref>) is to use a Quadratic Programing solver. This allows to include inequality constraints into the problem formulation, which can model control tasks and physical constraints (e.g., joint limits, motor-torque bounds, force friction cones). Even if this technique can guarantee contact stability, solving a cascade of Quadratic Programs with inequality constraints can be critical from a computational standpoint.</p>
<p>We decided to take an in-between approach: our framework of choice [see Section <xref ref-type="sec" rid="S3-8">3.4</xref> or Del Prete et al. (<xref ref-type="bibr" rid="B7">2014</xref>) for details] allows to control the contact forces, but with a computational complexity of the same order of inverse-dynamics-based methods. Compared to optimization-based methods, our implementation does not allow for inequality constraints. To the best of our knowledge, the only real-time implementation of a cascade of Quadratic Programs with inequalities has been tested with a 14-DoF robot on a fast 3.8&#x02009;GHz CPU (Herzog et al., <xref ref-type="bibr" rid="B13">2014</xref>). We cannot be sure that this method will be fast enough for 26 DoFs and/or a slower CPU. For this reason, while we think that using inequalities could be useful, we postponed it to the (near) future because we know that it demands for an efficient and careful software implementation.</p>
</sec>
</sec>
<sec id="S3" sec-type="materials|methods">
<label>3</label> <title>Materials and Methods</title>
<p>In this section, we present our approach to solve the problem of controlling whole-body posture on multiple rigid planar contacts. We suppose each contact to be planar, but contact planes to be in general non-coplanar. Within this context, the considerations presented in the previous sections justify our choice to abandon the idea of defining a global stability criterion (such as the GCoP). In case of non-coplanar contacts, a global CoP is not even properly defined given that the resulting force and torque might not in general be orthogonal (see Sections <xref ref-type="sec" rid="S2-1-2">2.1.2</xref> and Appendix <xref ref-type="sec" rid="S7-2">A.2</xref>). In any case, the counterexample in Section &#x0201C;Appendix <xref ref-type="sec" rid="S8-1">B.1</xref>&#x0201D; suggests to consider multiple local stability criteria instead of a single global one. Local contact stability has been defined in Section <xref ref-type="sec" rid="S2-2-3">2.2.1</xref> and it has been characterized as a condition for motion constraints to be time invariant. At present, necessary and sufficient conditions for contact stability have been formulated only in the case of planar rigid unilateral contacts (see Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>). This is the reason why the scope of the current paper is limited to multiple planar contacts on rigid non-coplanar surfaces. Future extensions of the present work are foreseen in the direction of characterizing contact stability in more general situations.</p>
<p>In the rigid and planar contact case, contact stability has been characterized by means of the contact FRI and CoP. Both quantities depend on the wrench (i.e., both force and torque) at the contact point. Assuming that contacts might occur at any point on the robot body, an estimate of the contact wrench might be difficult to obtain if not impossible. Conventional manipulators measure wrenches at the end-effector, where force and torque sensors are placed. Joint-torque sensing gives only an incomplete characterization of contact wrenches. The problem can be solved adopting whole-body distributed force/torque (F/T) and tactile sensors as those integrated in the iCub humanoid (Section <xref ref-type="sec" rid="S3-5">3.1</xref>). This specific design choice calls for custom algorithms for contact-wrench estimation (Section <xref ref-type="sec" rid="S3-6-9">3.2.1</xref>), internal torques measurement (Section <xref ref-type="sec" rid="S3-6-10">3.2.2</xref>), and dynamic model identification (Section <xref ref-type="sec" rid="S3-7">3.3</xref>). Whole-body control with multiple non-coplanar contacts is discussed in Section <xref ref-type="sec" rid="S3-8">3.4</xref> and requires all the above custom components for its implementation (Section <xref ref-type="sec" rid="S4">4</xref>).</p>
<sec id="S3-5">
<label>3.1</label> <title>Whole-body distributed wrench and contact sensing</title>
<p>The platform used to perform experimental tests is the iCub humanoid robot, which is extensively described in Metta et al. (<xref ref-type="bibr" rid="B22">2010</xref>). One of the main features of this system is represented by the large variety of sensors, which include whole-body distributed F/T sensors, accelerometers, gyroscopes (see Figure <xref ref-type="fig" rid="F2">2</xref>), and pressure sensitive skin. Furthermore the robot possesses two digital cameras and two microphones. From a mechanical standpoint, iCub is 104&#x02009;cm tall and has 53 degrees of freedom: 6 in the head, 16 in each arm, 3 in the torso, and 6 in each leg. All joints but the hands and head are controlled by brushless electric motors coupled with harmonic drive gears. During experimental tests, we mainly exploit two kinds of sensors: the F/T sensors and the distributed sensorized skin. The F/T sensor described in Fumagalli et al. (<xref ref-type="bibr" rid="B10">2012</xref>) is a 6-axis custom-made sensor that is mounted in both iCub&#x02019;s arms between the shoulders and elbows and in both legs between the knees and hip and between the ankles and feet. This solution allows to measure internal reaction forces, which in turn can be exploited to estimate both the internal dynamics and external forces exerted on its limbs. The robot skin (Cannata et al., <xref ref-type="bibr" rid="B3">2008</xref>; Maiolino et al., <xref ref-type="bibr" rid="B21">2013</xref>) is a compliant distributed pressure sensor composed by a flexible printed circuit board (PCB) covered by a layer of three dimensionally structured elastic fabric further enveloped by a thin conductive layer. The PCB is composed by triangular modules of 10 taxels, which act as capacitance gages plus two temperature sensors for drift compensation. In our experiments, iCub&#x02019;s upper body was wrapped with approximately 2000 sensors, each foot sole is covered with 250 taxels, while 1080 further sensors are at the last design and integration stage on the lower body. Each single taxel has 8 bits of resolution, and measurements can be provided as raw data or as thermal drift compensated.</p>
<fig position="float" id="F1">
<label>Figure 1</label>
<caption><p><bold>See the video showing the control performances of the control architecture <uri xlink:href="https://www.youtube.com/watch?v=jaTEbCsFp_M">https://www.youtube.com/watch?v&#x0003D;jaTEbCsFp_M</uri></bold>.</p></caption>
<graphic xlink:href="frobt-02-00006-g001.tif"/>
</fig>
<fig position="float" id="F2">
<label>Figure 2</label>
<caption><p><bold>Mechanical schemes of the humanoid robot iCub with force/torque sensors, gyroscopes, and accelerometers highlighted in green</bold>. <italic>Left</italic>: locations of the six proximal six-axis F/T sensors (legs and arms). <italic>Center</italic>: locations of the skin microcontrollers, which have a 3D accelerometer embedded. <italic>Right</italic>: locations of the motor microcontrollers and the commercial inertial sensor, with the latter having a 3D gyroscope and a 3D accelerometer embedded.</p></caption>
<graphic xlink:href="frobt-02-00006-g002.tif"/>
</fig>
</sec>
<sec id="S3-6">
<label>3.2</label> <title>Internal and external (contact) wrench estimation</title>
<p>Fumagalli et al. (<xref ref-type="bibr" rid="B10">2012</xref>) proposed a theoretical framework that exploits embedded F/T sensors to estimate internal/external forces acting on floating-base kinematic trees with multiple-branches. From a theoretical point of view, the proposed framework allows to virtually relocate the available F/T sensors anywhere along the kinematic tree. The algorithm consists in performing classical recursive Newton&#x02013;Euler algorithm (RNEA) steps with modified boundary conditions, determined by the contact and F/T sensor location. It can be shown that relocation relies solely on inertial parameters, velocities, and accelerations of the rigid links in between the real and virtual sensors [see, in particular, the experimental analysis conducted by Randazzo et al. (<xref ref-type="bibr" rid="B28">2011</xref>)]. The proposed algorithm consists in cutting the floating-base tree at the level of the (embedded) F/T sensors obtaining multiple subtrees as in Figure <xref ref-type="fig" rid="F3">3</xref>. Then, each subtree is an independent articulated floating-base structure governed by the Newton&#x02013;Euler dynamic equations. The F/T sensor, gives a direct measurement of one specific external wrench acting on the structure (green arrows in Figure <xref ref-type="fig" rid="F3">3</xref>). Other external wrenches (red arrows in Figures <xref ref-type="fig" rid="F3">3</xref> and <xref ref-type="fig" rid="F4">4</xref>) can be estimated with the procedure hereafter described.</p>
<fig position="float" id="F3">
<label>Figure 3</label>
<caption><p><bold>The left picture shows the location of four (out of six) F/T sensors on the iCub humanoid (sensors at the feet are omitted in this picture)</bold>. The right picture shows the induced iCub kinematic tree partitioning. Each obtained subpart can be considered an independent floating-base structure subject to an external wrench, which coincides with the one measured by the F/T sensor (green arrow). Red arrows represent possible location for the unknown external wrenches.</p></caption>
<graphic xlink:href="frobt-02-00006-g003.tif"/>
</fig>
<fig position="float" id="F4">
<label>Figure 4</label>
<caption><p><bold>Sketch of a kinematic chain with an embedded F/T sensor</bold>. Although the sketch refers to a serial chain, the theoretical framework holds also in the case of multiple-branches articulated chains (see, for example, the torso sub-chain in Figure <xref ref-type="fig" rid="F3">3</xref>).</p></caption>
<graphic xlink:href="frobt-02-00006-g004.tif"/>
</fig>
<sec id="S3-6-9">
<label>3.2.1</label> <title>Method for estimating external wrenches</title>
<p>We now describe a method for the estimation of contact wrenches; more details can be found in Del Prete et al. (<xref ref-type="bibr" rid="B8">2012</xref>). Let us consider a kinematic chain composed by <italic>N</italic> links, having a F/T sensor at the base (see Figure <xref ref-type="fig" rid="F4">4</xref>), where <italic>w<sub>i</sub></italic> is the wrench (i.e., force and moment) exerted from link <italic>i</italic> to link <italic>i</italic>&#x02009;&#x0002B;&#x02009;1, <inline-formula><mml:math id="M1"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></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> is the acceleration of the center of mass of link <italic>i</italic> and <italic>m<sub>i</sub></italic> is the mass of link <italic>i</italic>. We know <italic>w</italic><sub>0</sub> (i.e., the F/T sensor measurement), the <italic>K</italic> contact locations <italic>r</italic><sub>0,<italic>ei</italic></sub>,&#x02009;&#x02026;&#x02009;,&#x02009;<italic>r</italic><sub>0,<italic>eK</italic></sub> (i.e., the locations where the skin senses contacts), and we want to estimate the <italic>K</italic> contact wrenches <italic>w</italic><sub><italic>e</italic>1</sub>, &#x02026;&#x02009;, <italic>w<sub>eK</sub></italic>. Writing Newton&#x02019;s and Euler&#x02019;s equations for each rigid link and summing up all the <italic>N</italic> resulting equations we obtain:
<disp-formula id="E1"><label>(1)</label><mml:math id="M2"><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mn>0</mml:mn></mml:msub><mml:mo>+</mml:mo><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover><mml:mrow><mml:msub><mml:mi>f</mml:mi><mml:mrow><mml:mi>e</mml:mi><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mstyle><mml:mo>=</mml:mo><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover><mml:mrow><mml:msub><mml:mi>m</mml:mi><mml:mi>i</mml:mi></mml:msub><mml:msub><mml:mover accent='true'><mml:mi>p</mml:mi><mml:mo>&#x000A8;</mml:mo></mml:mover><mml:mrow><mml:msub><mml:mi>c</mml:mi><mml:mi>i</mml:mi></mml:msub></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mrow></mml:mstyle></mml:mrow></mml:math></disp-formula>
<disp-formula id="E2"><label>(2)</label><mml:math id="M3"><mml:msub><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>K</mml:mi></mml:munderover></mml:mstyle></mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ei</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:mi mathvariant="italic">ei</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ei</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mrow><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover></mml:mstyle></mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></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 class="MathClass-bin">&#x0002B;</mml:mo><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <inline-formula><mml:math id="M4"><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> is the inertia of link <italic>i</italic>, <italic>&#x003C9;<sub>i</sub></italic> and <inline-formula><mml:math id="M5"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> are the angular velocity and acceleration of link <italic>i</italic>, respectively, and <inline-formula><mml:math id="M6"><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math></inline-formula> is the vector connecting the chain base to the center of mass of link <italic>i</italic>. Noting that in equations (<xref ref-type="disp-formula" rid="E1">1</xref>) and (<xref ref-type="disp-formula" rid="E2">2</xref>) the only unknowns are the contact wrenches, the estimation problem may be solved rewriting these equations in matrix form <italic>Ax</italic>&#x02009;&#x0003D;&#x02009;<italic>b</italic>, where <italic>x</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>u</sup></italic> contains all the <italic>u</italic> contact unknowns, whereas <italic>A</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>6&#x000D7;</sup><italic><sup>u</sup></italic> and <italic>b</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>6</sup> are completely determined. The equations are constructed taking into account the type of possible contacts among the following three: pure wrench (<italic>w<sub>e</sub></italic>, 6-dimensional vector corresponding to force and torque); pure force (<italic>f<sub>e</sub></italic>, 3-dimensional vector corresponding to a pure force and no torque); force norm (&#x02225;<italic>f<sub>e</sub></italic>&#x02225;, one-dimensional unknown assuming the force to be orthogonal to the contact surface). In the simplest case, only a single contact acts on the sub-chain and the associated pure wrench can be uniquely determined (system of six equations and six unknowns). In other cases, a solution can be obtained with the following least squares procedure. The matrix <italic>A</italic> is built by attaching columns for each contact according to its type. The columns associated to pure wrenches (<italic>A<sub>w</sub></italic>), pure forces (<italic>A<sub>f</sub></italic>), and force norm (<italic>A<sub>n</sub></italic>) are the following:
<disp-formula id="E3"><mml:math id="M7"><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mi>I</mml:mi></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mi>S</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:mi mathvariant="italic">en</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mi>I</mml:mi></mml:mtd><mml:mtd class="array" columnalign="center"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2.56804pt" class="tmspace"/><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mi>I</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mi>S</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:mi mathvariant="italic">en</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2.56804pt" class="tmspace"/><mml:mspace width="2.56804pt" class="tmspace"/><mml:msub><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mrow><mml:msub><mml:mover accent='true'><mml:mi>u</mml:mi><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:mi mathvariant="italic">en</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:mrow><mml:msub><mml:mover accent='true'><mml:mi>u</mml:mi><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula>
where <italic>S</italic>(<italic>v</italic>)&#x02009;&#x02208;&#x02009;&#x0211D;<sup>3&#x000D7;3</sup> is the skew-symmetric matrix such that <italic>S</italic>(<italic>v</italic>)<italic>z</italic>&#x02009;&#x0003D;&#x02009;<italic>v</italic>&#x02009;&#x000D7;&#x02009;<italic>z</italic>, with &#x000D7; denoting the cross product operator, and <inline-formula><mml:math id="M8"><mml:mrow><mml:msub><mml:mover accent='true'><mml:mi>u</mml:mi><mml:mo>&#x0005E;</mml:mo></mml:mover><mml:mi>n</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula> is the versor of the contact force <italic>f<sub>en</sub></italic>. The matrix <italic>A</italic> mainly depends on the skin spatial calibration, which can be obtained and refined with the procedure described by Del Prete et al. (<xref ref-type="bibr" rid="B6">2011</xref>). The 6-dimensional vector <italic>b</italic> is defined as:
<disp-formula id="E4"><mml:math id="M9"><mml:mi>b</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msub><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mrow><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover></mml:mstyle></mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></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 class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mrow><mml:mstyle displaystyle='true'><mml:munderover><mml:mo>&#x02211;</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mi>N</mml:mi></mml:munderover></mml:mstyle></mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></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 class="MathClass-bin">&#x0002B;</mml:mo><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msubsup><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mn>&#x003C9;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:math></disp-formula></p>
<p>The vector <italic>b</italic> depends on kinematic quantities, which can be derived for the whole-body distributed gyros, accelerometers, and encoders. Details on how to estimate these quantities have been detailed by Fumagalli et al. (<xref ref-type="bibr" rid="B10">2012</xref>). Once <italic>A</italic> and <italic>b</italic> have been computed, we can use the equation <italic>Ax</italic>&#x02009;&#x0003D;&#x02009;<italic>b</italic> for estimating external wrenches. The equation defines a unique solution if there is exactly one unknown wrench on the considered sub-chain. In the case of interest for the present paper, an exact characterization of the interaction wrenches can be obtained if there exists exactly one contact wrench per each of the sub-chains obtained by the body structure partition induced by the F/T sensor positions (see Figure <xref ref-type="fig" rid="F3">3</xref>). In all other situations, an exact estimate cannot be obtained but from a procedural point of view it is preferable to give a reasonable estimate of all the contact wrenches. The solution we adopted consists in computing the minimum norm <italic>x</italic>&#x0002A; that minimizes the square error residual:
<disp-formula id="E5"><mml:math id="M10"><mml:msup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mi>A</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow></mml:msup><mml:mi>b</mml:mi></mml:math></disp-formula>
where <italic>A</italic><sup>&#x02020;</sup> is the Moore&#x02013;Penrose pseudo-inverse of <italic>A</italic>. The method has been implemented as an extension of the iDyn library<xref ref-type="fn" rid="fn3"><sup>3</sup></xref> and it has been integrated with other software modules to create an efficient software system able to estimate internal and external wrenches of the whole iCub robot.</p>
</sec>
<sec id="S3-6-10">
<label>3.2.2</label> <title>Method for estimating internal torques</title>
<p>Once an estimate of external forces is obtained with the method described in Section <xref ref-type="sec" rid="S3-6-9">3.2.1</xref>, internal wrenches can also be estimated with a standard Newton&#x02013;Euler force propagation recursion. Projection of the internal wrenches on the joint axes provides an estimate of the joint torques <italic>&#x003C4;</italic>. A torque controller with joint friction compensation guarantees that each motor provides the desired amount of torque to the joints. In order to improve the torque tracking performance, a suitable identification procedure was adopted to estimate the voltage to torque transfer function for each motor. Details are given in the following section together with some details on the dynamic model identification.</p>
</sec>
</sec>
<sec id="S3-7">
<label>3.3</label> <title>Dynamic model estimation</title>
<p>As it was previously pointed out, the technology available in the iCub (nominally, whole-body distributed tactile and F/T sensing) and the estimation algorithm presented in the previous sections allows to simultaneously estimate internal (i.e., joint torques) and external (i.e., contact) forces. The accuracy of the estimates is decisive for the efficacy of the control algorithm that will be described in Section <xref ref-type="sec" rid="S3-8">3.4</xref>. A key element to improve the estimation and control accuracy is the availability of a reliable dynamic model [masses, inertias, and center of mass positions in equations (<xref ref-type="disp-formula" rid="E1">1</xref>) and (<xref ref-type="disp-formula" rid="E2">2</xref>)]. Standard identification procedures do not apply directly and a customization to iCub specific sensor modalities and distributions is necessary. In the following two subsections, we describe the solution that we implemented in order to improve dynamic model accuracy (Section <xref ref-type="sec" rid="S3-7-11">3.3.1</xref>) and torque tracking performances (Section <xref ref-type="sec" rid="S3-7-12">3.3.2</xref>).</p>
<sec id="S3-7-11">
<label>3.3.1</label> <title>Dynamic model identification</title>
<p>The accuracy of the system dynamics equation (7) is crucial in the proposed control framework since it affects the controller equation (8) and the internal/external torque estimation procedure described in Section <xref ref-type="sec" rid="S3-6">3.2</xref>. Individual dynamic parameters (mass, inertia, and center of mass position) of the rigid bodies constituting an articulated chain can be directly obtained from CAD drawings. These parameters are often not sufficiently accurate and standard identification procedures such as those proposed in the handbook of robotics by Hollerbach et al. (<xref ref-type="bibr" rid="B15">2008</xref>) can be applied in order to improve modeling accuracy. Remarkably, these procedures do not give an estimate of individual parameters but some linear combination of them, known in literature as the <italic>base parameters</italic>. It remains therefore to be clarified if the base parameters suffice to implement the procedure described in Section <xref ref-type="sec" rid="S3-6-9">3.2.1</xref> to estimate external wrenches. This procedure, written as it is, requires the knowledge of individual dynamic parameters as evident from equations (<xref ref-type="disp-formula" rid="E1">1</xref>) and (<xref ref-type="disp-formula" rid="E2">2</xref>). Additionally, it needs to be verified that also the procedure for estimating internal torques presented in Section <xref ref-type="sec" rid="S3-6-10">3.2.2</xref> can be reformulated in terms of the base parameters only. Interestingly, it can be shown, resorting to the work by Ayusawa et al. (<xref ref-type="bibr" rid="B2">2014</xref>) that the base parameters are a subset of those used for both the estimation procedures in Section <xref ref-type="sec" rid="S3-6">3.2</xref>.</p>
</sec>
<sec id="S3-7-12">
<label>3.3.2</label> <title>Modeling and representation of the motor transfer function</title>
<p>Another important component in implementing the control strategy detailed in Section <xref ref-type="sec" rid="S3-8">3.4</xref> is torque control. For the scope of the present paper, it was necessary to implement a model-based controller tuned for each motor. The model assumes that the <italic>i</italic>-th joint&#x02019;s torque &#x003C4;<sub><italic>i</italic></sub> is proportional (<italic>k<sub>t</sub></italic>) to the voltage <italic>V<sub>i</sub></italic> applied to the associated motor, with the additional contribution of some viscous (<italic>k<sub>v</sub></italic>) and Coulomb (<italic>k<sub>c</sub></italic>) friction:
<disp-formula id="E6"><label>(3)</label><mml:math id="M11"><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">vp</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">vn</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cp</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cn</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mstyle class="mbox"><mml:mtext>sign</mml:mtext></mml:mstyle><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <inline-formula><mml:math id="M12"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is the motor velocity, <italic>s</italic>(<italic>x</italic>) is the step function (1 for <italic>x</italic>&#x02009;&#x0003E;&#x02009;0, 0 otherwise) and sign(<italic>x</italic>) is the sign function (1 for <italic>x</italic>&#x02009;&#x0003E;&#x02009;0, &#x02212;1 for <italic>x</italic>&#x02009;&#x0003C;&#x02009;0, 0 for <italic>x</italic>&#x02009;&#x0003D;&#x02009;0). Operationally, it was observed quite relevant to distinguish between positive and negative rotations as represented in the model above. We identified the coefficients <italic>k<sub>t</sub></italic>, <italic>k<sub>vp</sub></italic>, <italic>k<sub>vn</sub></italic>, <italic>k<sub>cp</sub></italic>, <italic>k<sub>cn</sub></italic> for each joint with an automatic procedure implemented in an open-source software module<xref ref-type="fn" rid="fn4"><sup>4</sup></xref>. The motor controller exploits the transmission model and implements the following control strategy:
<disp-formula id="E7"><label>(4)</label><mml:math id="M13"><mml:msub><mml:mrow><mml:mi>V</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi></mml:mrow></mml:msub><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msubsup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x02212;</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:mover accent="true"><mml:mrow><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-op">&#x002DC;</mml:mo></mml:mover><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-op">&#x0222B;</mml:mo><mml:mover accent="true"><mml:mrow><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-op">&#x002DC;</mml:mo></mml:mover><mml:mstyle class="mbox"><mml:mtext>dt</mml:mtext></mml:mstyle></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mo class="MathClass-open">[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">vp</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">vn</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mo class="MathClass-close">]</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mo class="MathClass-open">[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cp</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cn</mml:mi></mml:mrow></mml:msub><mml:mi>s</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mo class="MathClass-close">]</mml:mo></mml:mrow><mml:mi mathvariant="normal">tanh</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mi mathvariant="normal">&#x002D9;</mml:mi></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <inline-formula><mml:math id="M14"><mml:mi mathvariant="normal">tanh</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>s</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mi mathvariant="normal">&#x002D9;</mml:mi></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> is used to smooth out the sign function, <italic>k<sub>s</sub></italic> is a user-specified parameter that regulates the smoothing action, and <inline-formula><mml:math id="M15"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002DC;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> is the <italic>i</italic>-th torque tracking error, and <italic>k<sub>p</sub></italic>,<italic>k<sub>i</sub></italic>&#x02009;&#x0003E;&#x02009;0 are the low-level control gains. The control objective for the torque controller consists in obtaining <inline-formula><mml:math id="M16"><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-rel">&#x02243;</mml:mo><mml:msup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> and therefore the controller will make the assumption that the commanded value <inline-formula><mml:math id="M17"><mml:msubsup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> is perfectly tracked by the torque controller. Also, observe that there is no derivative term in the parenthesis on the right hand side of equation (<xref ref-type="disp-formula" rid="E4">4</xref>). In fact, the measurement of <inline-formula><mml:math id="M18"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002DC;</mml:mo></mml:mover></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> is noisy and unreliable at the current state of the iCub&#x02019;s measuring devices.</p>
</sec>
<sec id="S3-7-13">
<label>3.3.3</label> <title>Differential joint torque and motion coupling</title>
<p>Specific care was posed in controlling the torques at joints actuated with a differential mechanism. As an example, we consider here the torso roll, pitch, and yaw joint represented in Figure <xref ref-type="fig" rid="F5">5</xref>. In particular, define <italic>q</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>3</sup> the vector of the joint angles corresponding to the torso yaw, the torso roll, and torso pitch degree of freedom. Also, by abusing notation, define <italic>&#x003B8;</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>3</sup> as the angles between the stator and the rotor of the motors 0B4M0, 0B3M0, and 0B3M1. Then, a simple analysis leads to the following relationship:
<disp-formula id="E8"><label>(5)</label><mml:math id="M19"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mi>T</mml:mi><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:mi>T</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-punc">:</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mfrac><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>R</mml:mi></mml:mrow></mml:mfrac></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mfrac><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>R</mml:mi></mml:mrow></mml:mfrac></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mfrac><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mi>R</mml:mi></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">.</mml:mo><mml:mn>5</mml:mn></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">.</mml:mo><mml:mn>5</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">.</mml:mo><mml:mn>5</mml:mn></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">.</mml:mo><mml:mn>5</mml:mn></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <italic>r</italic> and <italic>R</italic> are the radius of the pulleys sketched in Figure <xref ref-type="fig" rid="F5">5</xref>. The above matrix <italic>T</italic> is obtained by combining a classical differential coupling between pitch and yaw (first two rows) with a more complicated coupling with the roll motion (third row, see Figure <xref ref-type="fig" rid="F6">6</xref>). Defining &#x003C4;<sub><italic>q</italic></sub> to be the link torques and <italic>&#x003C4;<sub>&#x003B8;</sub></italic> the motor torques, the coupling induced on torques can be easily obtained by imposing the equality between link and motor powers:
<disp-formula id="E9"><label>(6)</label><mml:math id="M20"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow></mml:msub><mml:mspace width="1em" class="quad"/><mml:mo class="MathClass-rel">&#x02200;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-punc">,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mspace width="1em" class="quad"/><mml:mo class="MathClass-rel">&#x021D2;</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:msup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow></mml:msub><mml:mspace width="1em" class="quad"/><mml:mstyle class="mbox"><mml:mtext>&#x02009;with&#x02009;</mml:mtext></mml:mstyle><mml:mspace width="1em" class="quad"/><mml:msup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-punc">:</mml:mo><mml:mo class="MathClass-rel">&#x0003D;</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable><mml:mtr><mml:mtd class="array"><mml:mfrac><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:mfrac></mml:mtd><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mtd><mml:mtd class="array"><mml:mn>1</mml:mn></mml:mtd><mml:mtd class="array"><mml:mn>1</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd><mml:mtd class="array"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mtd><mml:mtd class="array"><mml:mn>1</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<fig position="float" id="F5">
<label>Figure 5</label>
<caption><p><bold>The sketch represents the differential joint of the iCub torso</bold>. The pitch, yaw, and roll joints are actuated with three motors 0B4M0, 0B3M0, and 0B3M1 in differential configuration. Motor (<italic>&#x003B8;</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>3</sup>) and joint (<italic>q</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>3</sup>) positions are coupled as described in Figure <xref ref-type="fig" rid="F6">6</xref>.</p></caption>
<graphic xlink:href="frobt-02-00006-g005.tif"/>
</fig>
<fig position="float" id="F6">
<label>Figure 6</label>
<caption><p><bold>The sketch is used to represent the kinematic coupling between the yaw and roll movements</bold>. A roll movement of an angle <italic>q</italic><sub>2</sub> implies an equal and opposite movement of the rotor of the motor 0B4M0. This rotor moves, modulo the transmission ratio, also when a yaw movement of an angle <italic>q</italic><sub>1</sub> occurs.</p></caption>
<graphic xlink:href="frobt-02-00006-g006.tif"/>
</fig>
<p>In the case of coupled joints, the transformation matrix <italic>T</italic> is used in both equations (<xref ref-type="disp-formula" rid="E3">3</xref>) and (<xref ref-type="disp-formula" rid="E4">4</xref>), which hold at the motor level. Since position (<inline-formula><mml:math id="M21"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:math></inline-formula>) and torque (<italic>&#x003C4;</italic>) feedback is available at the joint level, suitable transformations need to be applied. In the case of coupled joints, our current software<xref ref-type="fn" rid="fn5"><sup>5</sup></xref> implements joint per joint equations (<xref ref-type="disp-formula" rid="E3">3</xref>) and (<xref ref-type="disp-formula" rid="E4">4</xref>) with substitutions <italic>&#x003C4;</italic>&#x02009;&#x02194;&#x02009;<italic>&#x003C4;<sub>&#x003B8;</sub></italic> and <inline-formula><mml:math id="M22"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-rel">&#x02194;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:math></inline-formula> where motor velocity (<inline-formula><mml:math id="M23"><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:math></inline-formula>) and motor torques <italic>&#x003C4;<sub>&#x003B8;</sub></italic> are obtained from joint velocity (<inline-formula><mml:math id="M24"><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:math></inline-formula>) and joint torques (&#x003C4;<sub><italic>q</italic></sub>) as follows:
<disp-formula id="E10"><mml:math id="M25"><mml:mover accent="true"><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003B8;</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
</sec>
</sec>
<sec id="S3-8">
<label>3.4</label> <title>Complete force control</title>
<p>In this section, we describe the control algorithm for controlling an articulated rigid body subject to multiple rigid constraints. The system dynamics are described by the following constrained differential equations:
<disp-formula id="E11"><label>(7a)</label><mml:math id="M26"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:munder class="msub"><mml:mrow><mml:munder accentunder="false"><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">bj</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">bj</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup></mml:mtd><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mrow><mml:mrow><mml:mi>M</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:munder><mml:munder class="msub"><mml:mrow><mml:munder accentunder="false"><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow></mml:munder><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:munder class="msub"><mml:mrow><mml:munder accentunder="false"><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mrow><mml:mrow><mml:mi>h</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>q</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:munder><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:munder class="msub"><mml:mrow><mml:munder accentunder="false"><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array"><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cb</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cj</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:munder><mml:mi>f</mml:mi></mml:mtd><mml:mtd class="align-even"><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:munder class="msub"><mml:mrow><mml:munder accentunder="false"><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mn>6</mml:mn><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>I</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:mi>n</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mo>&#x0FE38;</mml:mo></mml:munder></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:munder><mml:mn>&#x003C4;</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<disp-formula id="E12"><label>(7b)</label><mml:math id="M27"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>q</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mi>v</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <italic>q</italic>&#x02009;&#x02208;&#x02009;<italic>SE</italic>(3)&#x02009;&#x000D7;&#x02009;&#x0211D;<italic><sup>n</sup></italic>, with <italic>SE</italic>(3) the special Euclidian group, represents the configuration of the floating-base system, which is given by the pose of a base-frame [belonging to <italic>SE</italic>(3)] and <italic>n</italic> generalized coordinates (<italic>q<sub>j</sub></italic>) characterizing the joint angles. Then, <italic>v</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>n</sup></italic><sup>&#x0002B;6</sup> represents the robot velocity (it includes both <inline-formula><mml:math id="M28"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mtext>&#x02009;</mml:mtext><mml:mo class="MathClass-rel">&#x02208;</mml:mo><mml:mtext>&#x02009;</mml:mtext><mml:msup><mml:mrow><mml:mi mathvariant="double-struck">R</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:math></inline-formula> and the floating-base linear and angular velocity <italic>v<sub>b</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>6</sup>), <inline-formula><mml:math id="M29"><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:math></inline-formula> is the derivative of <italic>v</italic>, the control input <italic>&#x003C4;</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>n</sup></italic> is the vector of joint torques, <italic>M</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>(</sup><italic><sup>n</sup></italic><sup>&#x0002B;6)&#x000D7;(</sup><italic><sup>n</sup></italic><sup>&#x0002B;6)</sup> is the mass matrix, <italic>h</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>n</sup></italic><sup>&#x0002B;6</sup> contains both gravitational and Coriolis terms, <italic>S</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>n</sup></italic><sup>&#x000D7;(</sup><italic><sup>n</sup></italic><sup>&#x0002B;6)</sup> is the matrix selecting the actuated degrees of freedom, <italic>f</italic> &#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>k</sup></italic> is the vector obtained by stacking all contact wrenches, which implies that <italic>k</italic>&#x02009;&#x0003D;&#x02009;6<italic>N<sub>c</sub></italic> and <italic>N<sub>c</sub></italic> the number of (rigid) contacts, <italic>J<sub>c</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>k</sup></italic><sup>&#x000D7;(</sup><italic><sup>n</sup></italic><sup>&#x0002B;6)</sup> is the contact Jacobian. Let us first recall how the force-control problem is solved in the task space inverse dynamics (TSID) framework proposed by Del Prete (<xref ref-type="bibr" rid="B5">2013</xref>) in the context of floating-base robots. The framework computes the joint torques to match as close as possible a desired vector of forces at the contacts [equation (<xref ref-type="disp-formula" rid="E12">8a</xref>)] while being compatible with the system dynamics [equation (<xref ref-type="disp-formula" rid="E13">8b</xref>)] and contact constraints [equation (<xref ref-type="disp-formula" rid="E14">8c</xref>)]:
<disp-formula id="E13"><label>(8a)</label><mml:math id="M30"><mml:msup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mstyle class="mbox"><mml:mtext>arg&#x02009;</mml:mtext></mml:mstyle><mml:munder class="msub"><mml:mrow><mml:mi mathvariant="normal">min</mml:mi></mml:mrow><mml:mrow><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-rel">&#x02208;</mml:mo><mml:msup><mml:mrow><mml:mi mathvariant="double-struck">R</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msup></mml:mrow></mml:munder><mml:mtext>&#x02009;</mml:mtext><mml:mrow><mml:msup><mml:mrow><mml:mrow><mml:mo>&#x02016;</mml:mo> <mml:mrow><mml:mi>f</mml:mi><mml:mo>&#x02212;</mml:mo><mml:msup><mml:mi>f</mml:mi><mml:mo>*</mml:mo></mml:msup></mml:mrow> <mml:mo>&#x02016;</mml:mo></mml:mrow></mml:mrow><mml:mn>2</mml:mn></mml:msup></mml:mrow></mml:math></disp-formula>
<disp-formula id="E14"><label>(8b)</label><mml:math id="M31"><mml:mi>s</mml:mi><mml:mo class="MathClass-punc">.</mml:mo><mml:mi>t</mml:mi><mml:mo class="MathClass-punc">.</mml:mo><mml:mspace width="1em" class="quad"/><mml:mi>M</mml:mi><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mi>h</mml:mi><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup><mml:mi>f</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:mn>&#x003C4;</mml:mn></mml:math></disp-formula>
<disp-formula id="E15"><label>(8c)</label><mml:math id="M32"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mi>v</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mn>0</mml:mn></mml:math></disp-formula>
where <italic>f</italic>&#x02009;&#x0002A;&#x02009;&#x02208;&#x02009;&#x0211D;<italic><sup>k</sup></italic> is the desired value for the contact forces. Then we can exploit the null space of the force task to perform <italic>N</italic>&#x02009;&#x02212;&#x02009;1 motion tasks at lower priorities. These tasks (indexed with <italic>i</italic>&#x02009;&#x0003D;&#x02009;1,&#x02009;&#x02026;,&#x02009;<italic>N</italic>&#x02009;&#x02212;&#x02009;1) are all represented as the problem of tracking a given reference acceleration <inline-formula><mml:math id="M33"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> for a variable <italic>x<sub>i</sub></italic> differentially linked to <italic>q</italic> by the Jacobian <italic>J<sub>i</sub></italic> as follows:
<disp-formula id="E16"><label>(9)</label><mml:math id="M34"><mml:msub><mml:mrow><mml:mi>&#x01E8B;</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mi>v</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>&#x01E8D;</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mi>v</mml:mi><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
<p>Assuming that the force task has maximum priority the solution is:
<disp-formula id="E17"><label>(10)</label><mml:math id="M35"><mml:msup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:mi>n</mml:mi><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <inline-formula><mml:math id="M36"><mml:msubsup><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">bj</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">bj</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula>, <inline-formula><mml:math id="M37"><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">bj</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup></mml:mtd><mml:mtd class="array" columnalign="center"><mml:mi>I</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula> and the term <inline-formula><mml:math id="M38"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> is computed solving the following recursion for <italic>i</italic>&#x02009;&#x0003D;&#x02009;<italic>N</italic>, &#x02026;, 1:
<disp-formula id="E18"><label>(11)</label><mml:math id="M39"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mtd><mml:mtd class="align-even"><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>&#x01E8D;</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mi>v</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mi>U</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msup><mml:msubsup><mml:mrow><mml:mi>M</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">cb</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup><mml:mi>f</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:mtd><mml:mtd class="align-even"><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mover accent="true"><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000AF;</mml:mo></mml:mover><mml:msub><mml:mrow><mml:mi>N</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>i</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo class="MathClass-punc">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
where <italic>U</italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>6&#x000D7;(</sup><italic><sup>n</sup></italic><sup>&#x0002B;6)</sup> is the matrix selecting the floating-base variables, and the algorithm is initialized setting <inline-formula><mml:math id="M40"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>v</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>N</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, <italic>N<sub>p</sub></italic><sub>(</sub><italic><sub>N</sub></italic><sub>)</sub>&#x02009;&#x0003D;&#x02009;<italic>I</italic>, <italic>J<sub>N</sub></italic>&#x02009;&#x0003D;&#x02009;<italic>J<sub>c</sub></italic>&#x02009;and <inline-formula><mml:math id="M41"><mml:msub><mml:mrow><mml:mi>&#x01E8D;</mml:mi></mml:mrow><mml:mrow><mml:mi>N</mml:mi></mml:mrow></mml:msub><mml:mtext>&#x02009;</mml:mtext><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mtext>&#x02009;</mml:mtext><mml:mn>0</mml:mn><mml:mo class="MathClass-punc">.</mml:mo></mml:math></inline-formula> The implementation of this controller exploits the fact that we can compute equation (<xref ref-type="disp-formula" rid="E10">10</xref>) with an efficient hybrid-dynamics algorithm.</p>
</sec>
</sec>
<sec id="S4">
<label>4</label> <title>Results</title>
<sec id="S4-9">
<label>4.1</label> <title>Set of admissible tasks</title>
<p>The final validation of the proposed control framework requires the definition of a suitable set of position (<inline-formula><mml:math id="M42"><mml:msubsup><mml:mrow><mml:mi>&#x01E8D;</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula>) and wrences (<italic>w</italic>&#x0002A;) tasks and their relative priority. The set of admissible tasks is quite flexible also considering the flexibility of the underlying software libraries. Nevertheless, we list here a set of possible tasks, which we will use as a reference in the following sections. Quantities are defined with a notation similar to the one used by Featherstone (<xref ref-type="bibr" rid="B9">2008</xref>): <italic>H</italic> denotes the total spatial momentum of an articulated rigid body (including linear and angular), <italic>w</italic> indicates a wrench (a single vector for forces and torques), the index <italic>i</italic>&#x02009;&#x0003D;&#x02009;0, 1, &#x02026;, <italic>N<sub>B</sub></italic>&#x02009;&#x02212;&#x02009;1 is used to reference the <italic>N<sub>B</sub></italic> rigid bodies representing the iCub body chain (0 being defined as the pelvis rigid link), the index <italic>W</italic> is used to represent the world reference frame, the superscripts and subscripts <italic>la</italic>, <italic>ra</italic>, <italic>lf</italic>, and <italic>rf</italic> indicate reference frames rigidly attached to the left arm, right arm, left foot, and right foot, respectively, the superscript <italic>i</italic> indicates the reference frame attached to the <italic>i</italic>-th rigid body, <italic><sup>k</sup>X<sub>i</sub></italic> represents the rigid motion vector transformation from the reference frame <italic>i</italic> to the reference frame <italic>j</italic>, <inline-formula><mml:math id="M43"><mml:msup><mml:mrow><mml:mtext>&#x02009;</mml:mtext></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mrow><mml:mi>X</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> represents the force vector transformation from the reference frame <italic>i</italic> to the reference frame <italic>j</italic>, <italic>q<sub>j</sub></italic> represents the angular position of iCub joints. Tasks will be thrown out of the following set of admissible tasks. For each task <italic>T<sub>i</sub></italic>, we specify the reference values (<inline-formula><mml:math id="M44"><mml:msub><mml:mrow><mml:mi>&#x01E8D;</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> or <italic>w</italic>&#x0002A;) and associated Jacobians (<italic>J<sub>i</sub></italic>).</p>
<list list-type="bullet">
<list-item><p><inline-formula><mml:math id="M45"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>: right foot wrench task. Regulate the right foot interaction wrench to a predefined value:
<disp-formula id="E19"><mml:math id="M46"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p></list-item>
<list-item><p><inline-formula><mml:math id="M47"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>: left foot wrench task. Regulates the left foot interaction wrench to a predefined value:
<disp-formula id="E20"><mml:math id="M48"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p></list-item>
<list-item><p><inline-formula><mml:math id="M49"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>: right arm wrench task. Regulate the right arm interaction wrench to a predefined value:
<disp-formula id="E21"><mml:math id="M50"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p></list-item>
<list-item><p><inline-formula><mml:math id="M51"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>: left arm wrench task. Regulates the left arm interaction wrench to a predefined value:
<disp-formula id="E22"><mml:math id="M52"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p></list-item>
<list-item><p><italic>T&#x02009;<sup>q</sup></italic>: postural task. Maintains the robot joints <italic>q<sub>j</sub></italic> close to certain reference posture <inline-formula><mml:math id="M53"><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula>:
<disp-formula id="E23"><mml:math id="M54"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">;</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>J</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:mi>I</mml:mi><mml:mo class="MathClass-punc">.</mml:mo><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd><mml:mtd class="align-label"><mml:mspace width="2em"/></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p></list-item></list>
</sec>
<sec id="S4-10">
<label>4.2</label> <title>Sequencing of tasks</title>
<p>The set of tasks active at a certain instant of time is regulated by a finite state machine. In particular, there are five different states <italic>S</italic><sub>1</sub>, &#x02026;, <italic>S</italic><sub>5</sub> each characterized by a different set of active tasks <italic>S</italic><sub>1</sub>, &#x02026;, <italic>S</italic><sub>5</sub>.</p>
<list list-type="bullet">
<list-item><p><italic>S</italic><sub>1</sub> has the following set of active tasks <italic>S</italic><sub>1</sub>&#x02009;&#x0003D;&#x02009;{<italic>T&#x02009;<sup>q</sup></italic>}.</p></list-item>
<list-item><p><italic>S</italic><sub>2</sub> has the following set of active tasks <inline-formula><mml:math id="M55"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="{" close="}"><mml:mrow><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0222A;</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p></list-item>
<list-item><p><italic>S</italic><sub>3</sub> has the following set of active tasks <inline-formula><mml:math id="M56"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="{" close="}"><mml:mrow><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0222A;</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p></list-item>
<list-item><p><italic>S</italic><sub>4</sub> has the following set of active tasks <inline-formula><mml:math id="M57"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="{" close="}"><mml:mrow><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0222A;</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p></list-item>
<list-item><p><italic>S</italic><sub>5</sub> has the following set of active tasks <inline-formula><mml:math id="M58"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="{" close="}"><mml:mrow><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0222A;</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p></list-item>
</list>
<p>Transition between states is regulated by the following finite state machine where the sets <italic>C<sub>ra</sub></italic> and <italic>C<sub>la</sub></italic> contain the taxels (tactile elements) activated at time <italic>t</italic>.</p>
<p><inline-graphic xlink:href="frobt-02-00006-i001.tif"/></p>
<p>In practice, at start (<italic>t</italic>&#x02009;&#x0003D;&#x02009;<italic>t<sub>0</sub></italic>) the robot is in state <italic>S</italic><sub>1</sub> in order to maintain a configuration, which is as close as possible to the initial configuration with a postural task (<italic>T&#x02009;<sup>q</sup></italic>) that guarantees that the system is not drifting. After a predefined amount of time (<italic>t</italic>&#x02009;&#x0003D;&#x02009;<italic>t<sub>1</sub></italic>), the system switches to state <italic>S</italic><sub>2</sub> by adding two tasks to the set of active tasks: a control of the forces exchanged by the left and right foot (<inline-formula><mml:math id="M59"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>, <inline-formula><mml:math id="M60"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>, respectively). The control of these forces allows for a direct control over the rate of change of the momentum as will be explained in Section <xref ref-type="sec" rid="S4-11">4.3</xref>. Successive transitions are triggered by the tactile sensors. If no contact is detected on the right and left arm (<italic>C<sub>ra</sub></italic>&#x02009;&#x0003D;&#x02009;&#x02205; and <italic>C<sub>ra</sub></italic>&#x02009;&#x0003D;&#x02009;&#x02205;, respectively) the system remains in <italic>S</italic><sub>2</sub>. A transition from <italic>S</italic><sub>2</sub> to <italic>S</italic><sub>3</sub> is performed when the system detects a contact on the right arm (<italic>C<sub>ra</sub></italic>&#x02009;&#x02260;&#x02009;&#x02205;): in this state, the active tasks are the same active in <italic>S</italic><sub>2</sub> with the addition of the task responsible for controlling the force at the right arm contact location (<inline-formula><mml:math id="M61"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>). Similarly, a transition from <italic>S</italic><sub>2</sub> to <italic>S</italic><sub>4</sub> is performed when the system detects a contact on the left arm (<italic>C<sub>la</sub></italic>&#x02009;&#x02260;&#x02009;&#x02205;): in this state, the active tasks are the same active in <italic>S</italic><sub>2</sub> with the addition of a task responsible for controlling the force at the left arm contact location (<inline-formula><mml:math id="M62"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>). Finally, a transition from either <italic>S</italic><sub>3</sub> or <italic>S</italic><sub>4</sub> to <italic>S</italic><sub>5</sub> is performed whenever the robot perceives a contact so that in this new situation both arms are in contact (<italic>C<sub>ra</sub></italic>&#x02009;&#x02260;&#x02009;&#x02205; and <italic>C<sub>la</sub></italic>&#x02009;&#x02260;&#x02009;&#x02205;, respectively). In S<sub>5</sub>, both arms are used to control the interaction forces by activating the tasks <inline-formula><mml:math id="M63"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> and <inline-formula><mml:math id="M64"><mml:msubsup><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>.</p>
</sec>
<sec id="S4-11">
<label>4.3</label> <title>Task references</title>
<p>In this section, we discuss how to compute the task references:
<disp-formula id="E24"><mml:math id="M65"><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula>
to be used in the controller equation (<xref ref-type="disp-formula" rid="E8">8</xref>). Instantaneous values for forces are computed so as to follow a desired trajectory of the center of mass (<inline-formula><mml:math id="M66"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>) and to reduce the system&#x02019;s angular momentum. Instantaneous values for <inline-formula><mml:math id="M67"><mml:msubsup><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> are chosen so as to follow a desired reference posture <inline-formula><mml:math id="M68"><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>. The latter is obtained by choosing:
<disp-formula id="E25"><label>(12)</label><mml:math id="M69"><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msubsup><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x002D9;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x02212;</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:mi>q</mml:mi></mml:mrow></mml:msubsup><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msup><mml:mrow><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:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <inline-formula><mml:math id="M70"><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> and <inline-formula><mml:math id="M71"><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> are arbitrary positive-definite matrices that take into account that in the presence of modeling errors, the acceleration imposed on the system <inline-formula><mml:math id="M72"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> might differ from the ideal one <inline-formula><mml:math id="M73"><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula>. Instantaneous values for interaction forces are instead computed to follow a prescribed center-of-mass trajectory (<inline-formula><mml:math id="M74"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>) and to reduce angular momentum. In order to do so, a reference value <inline-formula><mml:math id="M75"><mml:msubsup><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> for the total rate of change of spatial momentum (expressed at the center of mass) is computed with a strategy similar to equation (<xref ref-type="disp-formula" rid="E12">12</xref>).
<disp-formula id="E26"><label>(13)</label><mml:math id="M76"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mtd><mml:mtd class="align-even"><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>h</mml:mi></mml:mrow></mml:msubsup><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msub><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msubsup><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:mrow></mml:mfenced></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2.56804pt" class="tmspace"/><mml:mspace width="2.56804pt" class="tmspace"/><mml:msubsup><mml:mrow><mml:mi>H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mi>m</mml:mi><mml:msubsup><mml:mrow><mml:mi>&#x01E8B;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mn>3</mml:mn><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mtd><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
where <inline-formula><mml:math id="M77"><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>h</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula>, <inline-formula><mml:math id="M78"><mml:msubsup><mml:mrow><mml:mi>K</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> are suitably defined gain matrices, <italic>H<sub>com</sub></italic> is the spatial momentum around the center of mass, <italic>x<sub>com</sub></italic> is the center-of-mass Cartesian position, <inline-formula><mml:math id="M79"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> its desired value and <italic>m</italic> is the total mass of the robot. Finally, values for <inline-formula><mml:math id="M80"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mtext>&#x02009;</mml:mtext><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mtext>&#x02009;</mml:mtext><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mtext>&#x02009;</mml:mtext><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> can be computed from <inline-formula><mml:math id="M81"><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula> considering that the time derivative of the momentum equals the resultant of forces and torques if all quantities are computed with respect to the center of mass. The notation is slightly complicated due to the fact that in the different scenario states <italic>S</italic><sub>1</sub>, &#x02026;, <italic>S</italic><sub>5</sub> the meaning of <italic>f</italic> (and consequently <italic>f</italic>&#x0002A;) in equation (<xref ref-type="disp-formula" rid="E8">8</xref>) changes. In particular we have:
<disp-formula id="E27"><label>(14)</label><mml:math id="M82"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo><mml:mi>f</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/></mml:mtd><mml:mtd class="align-even"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo><mml:mi>f</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo><mml:mi>f</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo><mml:mi>f</mml:mi><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">ra</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">la</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">rf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>w</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">lf</mml:mi></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>In the different states, the following equations on <italic>f</italic> and <inline-formula><mml:math id="M83"><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> always hold:
<disp-formula id="E28"><label>(15)</label><mml:math id="M84"><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">:</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mi>f</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where <italic>f<sub>g</sub></italic> is the gravitational force and where we defined <inline-formula><mml:math id="M85"><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:math></inline-formula> to be the matrix that expresses the spatial forces with respect to the center of mass:
<disp-formula id="E29"><mml:math id="M86"><mml:mtable columnalign='left'><mml:mtr><mml:mtd><mml:msub><mml:mi>C</mml:mi><mml:mrow><mml:msub><mml:mi>S</mml:mi><mml:mn>2</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo> <mml:mrow><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup></mml:mrow> <mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mi>C</mml:mi><mml:mrow><mml:msub><mml:mi>S</mml:mi><mml:mn>3</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo> <mml:mrow><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>a</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup></mml:mrow> <mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mi>C</mml:mi><mml:mrow><mml:msub><mml:mi>S</mml:mi><mml:mn>4</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo> <mml:mrow><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>a</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup></mml:mrow> <mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mi>C</mml:mi><mml:mrow><mml:msub><mml:mi>S</mml:mi><mml:mn>5</mml:mn></mml:msub></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo> <mml:mrow><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>a</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>a</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>r</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup><mml:msup><mml:mtext>&#x02003;</mml:mtext><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi></mml:mrow></mml:msup><mml:msubsup><mml:mi>X</mml:mi><mml:mrow><mml:mi>l</mml:mi><mml:mi>f</mml:mi></mml:mrow><mml:mo>*</mml:mo></mml:msubsup></mml:mrow> <mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>In literature, these equations (derived from the Newton&#x02013;Euler equations) have been presented in detail by Orin et al. (<xref ref-type="bibr" rid="B24">2013</xref>) under the name of <italic>centroidal dynamics</italic>. The constraints (15) on <italic>f</italic> given <inline-formula><mml:math id="M87"><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> are not sufficient to identify a unique solution. Additional constraints or requirements need to be imposed in order to properly define <italic>f</italic>&#x02009;&#x0002A; to achieve the desired momentum derivative. In order to get rid of this ambiguity, the following problem can be solved when at state <italic>S</italic><sub><italic>i</italic></sub>:
<disp-formula id="E30"><label>(16)</label><mml:math id="M88"><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mstyle class="mbox"><mml:mtext>arg&#x02009;</mml:mtext></mml:mstyle><mml:munder class="msub"><mml:mrow><mml:mi mathvariant="normal">min</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:munder><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mi>f</mml:mi><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo></mml:mrow><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup><mml:mspace width="1em" class="quad"/><mml:mstyle class="mbox"><mml:mtext>s.t.</mml:mtext></mml:mstyle><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:mi>f</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where &#x02225;&#x02009;&#x022C5;&#x02009;&#x02225;<italic><sub>W</sub></italic> denotes a norm weighted with the matrix <italic>W</italic>&#x02009;&#x0003D;&#x02009;<italic>W<sup>&#x022A4;</sup></italic>&#x02009;&#x0003E;&#x02009;0. The solution of this optimization is given by:
<disp-formula id="E31"><label>(17)</label><mml:math id="M89"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup></mml:mtd><mml:mtd class="align-even"><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow><mml:mrow><mml:mi>W</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>g</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfenced><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>I</mml:mi><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow><mml:mrow><mml:mi>W</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mo class="MathClass-bin">&#x02020;</mml:mo></mml:mrow><mml:mrow><mml:mi>W</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msup><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup><mml:msup><mml:mrow><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:msub><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msub><mml:msup><mml:mrow><mml:mi>W</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:msubsup><mml:mrow><mml:mi>C</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x022A4;</mml:mo></mml:mrow></mml:msubsup></mml:mrow></mml:mfenced></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>This solution gives a set of desired forces <italic>f</italic> &#x02009;&#x0002A;, which generate the desired momentum derivative <inline-formula><mml:math id="M90"><mml:msup><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x01E22;</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mo class="MathClass-bin">&#x02217;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula>.&#x02009;It is worth noting here that additional constraints should be imposed on the contact forces to guarantee contact stability.&#x02009;In particular, planar unilateral contacts should have an associated FRI lying in the contact support polygon (see Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>) and forces should be maintained within the contact friction cones. Considering that these constraints can be approximated with a set of linear inequalities, adding them into equation (<xref ref-type="disp-formula" rid="E16">16</xref>) corresponds to transforming the problem into a quadratic program, as proposed by de Lasa et al. (<xref ref-type="bibr" rid="B4">2010</xref>). In the present implementation, we follow a different strategy where stability constraints are enforced by solving equation (<xref ref-type="disp-formula" rid="E16">16</xref>) with a suitable choice for the reference value <italic>f</italic> <sub>0</sub> and weight matrix <italic>W</italic>. To ensure that reference contact forces are stable in the sense of Section <xref ref-type="sec" rid="S2-2-5">2.2.3</xref>, we express <italic>f</italic> in a reference frame whose origin coincides with the center of the maximum circle inscribed in the contact polygon. Choosing <italic>f</italic> <sub>0</sub> to have a null torque component penalizes solutions whose FRI is closer to the polygon borders and this penalty monotonically increases with the distance from the center of the maximum circle. Similarly, friction cones constraints are enforced by choosing the components of <italic>f</italic> <sub>0</sub> to be sufficiently far from the cone borders. Assuming contact plane normals to coincide with the <italic>z</italic>-axis, cone borders distance is maximized with null <italic>x</italic> and <italic>y</italic> components. If a good choice for the <italic>z</italic>-axis force components is available, it can be used in <italic>f</italic> <sub>0</sub>. Otherwise a viable choice is also to choose <italic>f</italic> <sub>0</sub>&#x02009;&#x0003D;&#x02009;0 since in most realistic situations the solution <italic>f</italic>&#x02009;&#x0002A; is dominated by the component <italic>f<sub>g</sub></italic>, which is always non-zero.</p>
</sec>
<sec id="S4-12">
<label>4.4</label> <title>Experimental results</title>
<p>We implemented the proposed control strategy on the iCub humanoid. In a first phase, the iCub was balancing with both feet on the ground plane (coplanar flat contacts, see Figure <xref ref-type="fig" rid="F1">1</xref>). The desired center of mass position was moved left to right with a sinusoidal overimposed on its initial position <italic>x<sub>com</sub></italic>(<italic>t</italic><sub>0</sub>) along the robot transverse axis (<italic>n</italic>):
<disp-formula id="E32"><label>(18)</label><mml:math id="M91"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mi>n</mml:mi><mml:mo class="MathClass-bin">&#x022C5;</mml:mo><mml:mi>A</mml:mi><mml:mtext>&#x02009;</mml:mtext><mml:mi mathvariant="normal">sin</mml:mi><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mn>2&#x003C0;</mml:mn><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></disp-formula>
with <italic>f<sub>r</sub></italic>&#x02009;&#x0003D;&#x02009;0.15<italic>Hz</italic> and <italic>A</italic>&#x02009;&#x0003D;&#x02009;0.02<italic>m</italic> (see Figure <xref ref-type="fig" rid="F7">7</xref>). The reference posture <inline-formula><mml:math id="M92"><mml:msup><mml:mrow><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:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> was maintained at its initial configuration <inline-formula><mml:math id="M93"><mml:msup><mml:mrow><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:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula>. As previously described the desired center-of-mass acceleration was obtained by suitably choosing the forces at the contact points (in this case at the feet) as represented in Figure <xref ref-type="fig" rid="F8">8</xref>. A video of the first phase of the experiment<xref ref-type="fn" rid="fn6"><sup>6</sup></xref> is available for the interested reader.</p>
<fig position="float" id="F7">
<label>Figure 7</label>
<caption><p><bold>Results of the double-support experiment on planar contacts (left and right feet)</bold>. The picture shows the time behavior of forces (top) and center of mass position (bottom) on the sagittal (blue) and transverse (green) axis. It is worth noting that forces should be proportional to center of mass accelerations and this is visible in the plot considering that accelerations are sinusoidal in counter phase with positions. Rapid variations of the contact forces at the time <italic>t</italic>&#x02009;&#x02248;&#x02009;2[s], i.e., starting time, are due to the activation of the torque control.</p></caption>
<graphic xlink:href="frobt-02-00006-g007.tif"/>
</fig>
<fig position="float" id="F8">
<label>Figure 8</label>
<caption><p><bold>Results of the double-support experiment on planar contacts (left and right feet)</bold>. The left picture shows in three dimensions the feet contacts, the feet center of pressures, the forces at the feet and at the center of mass during three instants: at two extrema of the sinusoid (red and blue) and in the middle of the sinusoid (green). Remarkably forces are maximum at the extrema when also accelerations are maximal. The right picture shows a close-up of the feet with the trajectory of the center of pressure, an ellipse representing a Gaussian fit of the data points and three points corresponding to the position of the centers of pressure when at the two extrema of the sinusoid (red and blue) and in the middle of the sinusoid (green).</p></caption>
<graphic xlink:href="frobt-02-00006-g008.tif"/>
</fig>
<p>In a second phase, the iCub was maintaining its center of mass at its initial position <inline-formula><mml:math id="M94"><mml:msubsup><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow><mml:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msubsup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mo class="MathClass-rel">&#x02261;</mml:mo><mml:msub><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">com</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> and the joint reference posture <inline-formula><mml:math id="M95"><mml:msup><mml:mrow><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:mrow><mml:mi>d</mml:mi></mml:mrow></mml:msup><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:mi>t</mml:mi></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> was chosen so as to move the arms toward a table in front of the robot. The controller equation (<xref ref-type="disp-formula" rid="E8">8</xref>) was regulated by the finite state machine described in Section <xref ref-type="sec" rid="S4-10">4.2</xref>. At the occurrence of contacts, forces at the arms were regulated to a predefined value <italic>f<sub>d</sub></italic>, which was obtained by imposing two additional constraints in solving equation (<xref ref-type="disp-formula" rid="E16">16</xref>): <italic>w<sub>ra</sub></italic>&#x02009;&#x0003D;&#x02009;<italic>w<sub>d</sub></italic> and <italic>w<sub>la</sub></italic>&#x02009;&#x0003D;&#x02009;<italic>w<sub>d</sub></italic>. The force-regulation task at the arms is shown in Figures <xref ref-type="fig" rid="F9">9</xref> and <xref ref-type="fig" rid="F10">10</xref>, which also shows that the generation of forces at the arms does not affect the center of pressure at the feet.</p>
<fig position="float" id="F9">
<label>Figure 9</label>
<caption><p><bold>Results of the double-support experiment on four non-coplanar contacts (both feet and arms)</bold>. The plots represent the evolution of the contact forces at the left (top) and right (bottom) arms when contact is established.</p></caption>
<graphic xlink:href="frobt-02-00006-g009.tif"/>
</fig>
<fig position="float" id="F10">
<label>Figure 10</label>
<caption><p><bold>Results of the double-support experiment on four non-coplanar contacts (both feet and arms)</bold>. The left picture gives a three-dimensional view of the foot center-of-pressure positions together with the arm contact forces. Forces are represented in a color scale that goes from black (contact establishment) to blue (steady state). The right picture gives a close-up on the foot center-of-pressure positions with an ellipse that represents the Gaussian approximation of its distribution.</p></caption>
<graphic xlink:href="frobt-02-00006-g010.tif"/>
</fig>
</sec>
</sec>
<sec id="S5">
<label>5</label> <title>Conclusion</title>
<p>The present paper addressed the problem of whole-body motion control in the presence of multiple non-coplanar and rigid contacts. The proposed solution defines a stability criterion based on the FRI of individual contacts as opposed to global stability criteria. It is argued that the FRI lying on the contact support polygon is a necessary and sufficient condition for the contacts to impose always the same motion constraints on the whole-body dynamics. These stability conditions are therefore the ones adopted in this paper in order to avoid the complications of hybrid and switching systems control. The chosen stability conditions require the capability of simultaneously measuring forces and torques (i.e., wrenches) at any possible contact location. This is not possible with conventional torque-controlled manipulators and requires whole-body distributed force and tactile sensing. These sensing capabilities are available in the iCub humanoid exploiting its whole-body distributed artificial skin and force/torque sensors. In consideration of this specific hardware, in the present paper, we discussed our approach to obtain: contact-wrench estimates, internal-torque measurement and dynamic model identification. All these components are functional to the implementation of the proposed whole-body controller with multiple non-coplanar contacts.</p>
</sec>
<sec id="S6">
<title>Conflict of Interest Statement</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>
</body>
<back>
<app-group>
<app id="A1">
<title>Appendix</title>
<sec id="S7">
<label>A</label> <title>CoP Existence Conditions</title>
<p>The Poinsot theorem [see p. 65 in Murray et al. (<xref ref-type="bibr" rid="B23">1994</xref>)] states that every wrench applied to a rigid body is equivalent to a force applied along a fixed axis plus a torque about the same axis. In particular, let us define a wrench <inline-formula><mml:math id="M96"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> applied at the point <italic>A</italic>. This wrench is equivalent to another wrench <inline-formula><mml:math id="M97"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> applied at any point <italic>L</italic> on an axis <italic>l</italic>&#x02009;&#x0003D;&#x02009;{<italic>q</italic>&#x02032; : <italic>q</italic>&#x02032;&#x02009;&#x0003D;&#x02009;<italic>q</italic>&#x02009;&#x0002B;&#x02009;<italic>&#x003BB;&#x003C9;</italic>, &#x02200;<italic>&#x003BB;&#x02009;&#x02208;</italic>&#x02009;&#x0211D;} and whose components <inline-formula><mml:math id="M98"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> and <inline-formula><mml:math id="M99"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> are parallel to <italic>l</italic>, i.e., <inline-formula><mml:math id="M100"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn></mml:math></inline-formula> and <inline-formula><mml:math id="M101"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn></mml:math></inline-formula>. Assuming <inline-formula><mml:math id="M102"><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-rel">&#x02260;</mml:mo><mml:mn>0</mml:mn></mml:math></inline-formula>, quantities are defined as follows:
<disp-formula id="E33"><label>(A1)</label><mml:math id="M103"><mml:mn>&#x003C9;</mml:mn> <mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow> <mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mi>q</mml:mi> <mml:mo class="MathClass-rel">&#x0003D;</mml:mo> <mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup> <mml:mo class="MathClass-bin">&#x000D7;</mml:mo> <mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow> <mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow> <mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msup><mml:msup><mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mfrac> <mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub> <mml:mo class="MathClass-rel">&#x0003D;</mml:mo> <mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mrow><mml:msub><mml:mi>&#x003BB;</mml:mi><mml:mi>&#x003BC;</mml:mi></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mi>f</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:msup><mml:mi>A</mml:mi><mml:mrow><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mo>&#x0252C;</mml:mo></mml:msup></mml:mrow></mml:msup></mml:mrow></mml:msubsup><mml:mtext>&#x02009;</mml:mtext><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mi>A</mml:mi></mml:msubsup></mml:mrow><mml:mrow><mml:mo>&#x02225;</mml:mo><mml:msubsup><mml:mi>f</mml:mi><mml:mi>c</mml:mi><mml:mi>A</mml:mi></mml:msubsup><mml:mo>&#x2225;</mml:mo></mml:mrow></mml:mfrac><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
<p>The proof of the equivalence between <inline-formula><mml:math id="M104"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M105"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> is reported by Murray et al. (<xref ref-type="bibr" rid="B23">1994</xref>) and therefore here omitted. In the next subsection, we prove instead that all equivalent wrenches on the Poinsot axis have minimum norm torque.</p>
<sec id="S7-1">
<label>A.1</label> <title>Poinsot axis as the geometric locus of minimum torques</title>
<p>Besides being an equivalent wrench, the Poinsot wrench <inline-formula><mml:math id="M106"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow></mml:math></inline-formula> has an associated minimum norm torque <inline-formula><mml:math id="M107"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> among all equivalent wrenches. In order to prove this optimality principle, let us consider the equivalent torque <inline-formula><mml:math id="M108"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>Q</mml:mi></mml:mrow></mml:msubsup></mml:math></inline-formula> at an arbitrary point <italic>Q</italic>:
<disp-formula id="E34"><label>(A2)</label><mml:math id="M109"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>Q</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">QL</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">QL</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
being <italic>r<sub>QL</sub></italic> the vector connecting <italic>L</italic> to <italic>Q</italic>. Applying the norm to the above equation and observing that the sum is an orthogonal decomposition, we obtain:
<disp-formula id="E35"><label>(A3)</label><mml:math id="M110"><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>Q</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">QL</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-rel">&#x02265;</mml:mo><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BB;</mml:mn></mml:mrow><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C9;</mml:mn><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>L</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
<p>Therefore, <inline-formula><mml:math id="M111"><mml:mrow><mml:mrow><mml:mo>&#x02016;</mml:mo> <mml:mrow><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mi>Q</mml:mi></mml:msubsup></mml:mrow> <mml:mo>&#x02016;</mml:mo></mml:mrow><mml:mo>&#x02265;</mml:mo><mml:mrow><mml:mo>&#x02016;</mml:mo> <mml:mrow><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mi>L</mml:mi></mml:msubsup></mml:mrow><mml:mo>&#x02016;</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula> and the equality holds if and only if <italic>r<sub>QL</sub></italic> is parallel to <italic>&#x003C9;</italic>, i.e., when <italic>Q</italic> lies on the Poinsot axis defined as:
<disp-formula id="E36"><label>(A4)</label><mml:math id="M112"><mml:mfenced separators="" open="{" close="}"><mml:mrow><mml:mi>q</mml:mi><mml:mo class="MathClass-rel">&#x02032;</mml:mo><mml:mo class="MathClass-punc">:</mml:mo><mml:mi>q</mml:mi><mml:mo class="MathClass-rel">&#x02032;</mml:mo><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mi mathvariant="italic">fA</mml:mi><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mn>&#x003BB;</mml:mn><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02225;</mml:mo><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>A</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x02225;</mml:mo></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mo class="MathClass-rel">&#x02200;</mml:mo><mml:mn>&#x003BB;</mml:mn><mml:mo class="MathClass-rel">&#x02208;</mml:mo><mml:mi mathvariant="double-struck">R</mml:mi></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
<p>On the Poinsot axis, the torque norm is minimal and equals:
<disp-formula id="E37"><label>(A5)</label><mml:math id="M113"><mml:mrow><mml:mrow><mml:mo>&#x02016;</mml:mo> <mml:mrow><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msubsup></mml:mrow> <mml:mo>&#x02016;</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mi>f</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mi>A</mml:mi><mml:msup><mml:mtext>&#x02009;</mml:mtext><mml:mo>&#x0252C;</mml:mo></mml:msup></mml:mrow></mml:msubsup><mml:mtext>&#x02009;</mml:mtext><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mi>A</mml:mi></mml:msubsup></mml:mrow><mml:mrow><mml:mrow><mml:mo>&#x02016;</mml:mo><mml:mrow><mml:msubsup><mml:mi>f</mml:mi><mml:mi>c</mml:mi><mml:mi>A</mml:mi></mml:msubsup></mml:mrow><mml:mo>&#x02016;</mml:mo></mml:mrow></mml:mrow></mml:mfrac><mml:mo>.</mml:mo></mml:mrow></mml:math></disp-formula></p>
</sec>
<sec id="S7-2">
<label>A.2</label> <title>CoP existence and poinsot axis</title>
<p>Given a rigid body subject to a field of pressures, the center of pressure (CoP) is an application point where the equivalent torque (due to the field of pressure) is null. Being the Poinsot axis, the geometric locus of minimum torques, it is evident that a CoP can be defined if and only if <inline-formula><mml:math id="M114"><mml:mrow><mml:mrow><mml:mo>&#x02016;</mml:mo> <mml:mrow><mml:msubsup><mml:mi>&#x003BC;</mml:mi><mml:mi>c</mml:mi><mml:mrow><mml:mi>m</mml:mi><mml:mi>i</mml:mi><mml:mi>n</mml:mi></mml:mrow></mml:msubsup></mml:mrow> <mml:mo>&#x02016;</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:math></inline-formula>, or equivalently if and only if <italic>f<sub>c</sub></italic> and &#x003BC;<italic><sub>c</sub></italic> are orthogonal. When this is the case, the CoP is not uniquely defined and the geometric locus of valid CoP corresponds to the Poinsot axis (22).</p>
</sec>
</sec>
<sec id="S8">
<label>B</label> <title>Counterexample on the Global CoP as a Contact Stability Criteria</title>
<p>In this section, we provide a counterexample to show that the condition on GCoP (global center of pressure) to lie in the contacts convex hull is not sufficient to guarantee the stability of individual contacts. Consider the simple system represented in Figure <xref ref-type="fig" rid="FA1">A1</xref>. For certain values of the torques at the joints the global stability criteria are met (i.e., the GCoP lies in the convex hull of contacts) but individual contacts are unstable (i.e., the FRI of each contact lies outside the contact area). Given the unilateral nature of the contacts acting on the system, its solution is non-trivial and requires to make hypotheses on whether or contacts break or persist as clearly explained by Featherstone (<xref ref-type="bibr" rid="B9">2008</xref>) in chapter eleven of his book. In the specific case of Figure <xref ref-type="fig" rid="FA1">A1</xref>, however, it would be sufficient to just provide that particular situation in which torques at the joints force contacts to break while maintaining the GCoP within the contact support polygon. This specific situation is presented in B.3. For sake of clarity, we start with discussing the case in which contacts persist. This case just helps in understanding the proposed counterexample.</p>
<fig position="float" id="FA1">
<label>Figure A1</label>
<caption><p><bold>The image shows the example of an articulated rigid body with two links in contact with the ground</bold>. <italic>Left figure</italic>. The system is composed of four rigid bodies. The centers of mass associated to the rigid bodies are indicated with a check board circle. Three rotational joints have associated torques <italic>&#x003C4;</italic><sub>1</sub>, <italic>&#x003C4;</italic><sub>2</sub>, and <italic>&#x003C4;</italic><sub>3</sub>. <italic>Central figure</italic>. The sketch shows the convention and the geometric dimension used in the computations. The contact interaction forces are indicated with <italic>f<sub>r</sub></italic>, <italic>f<sub>l</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>2</sup>, <italic>&#x003C4;<sub>r</sub></italic>, <italic>&#x003C4;<sub>l</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;; the internal constraint forces are indicated with <italic>f</italic> <sub>1</sub>, <italic>f</italic> <sub>2</sub>, <italic>f</italic> <sub>3</sub>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>2</sup>. <italic>Right figure</italic>. The linkage that describes the system kinematic constraints when assuming that the left foot is pivoting around its right edge and the right foot around its left edge.</p></caption>
<graphic xlink:href="frobt-02-00006-a001.tif"/>
</fig>
<sec id="S8-1">
<label>B.1</label> <title>ZMP computation</title>
<p>In this section, we provide explicit computation for the zero tipping moment point associated to a wrench <italic>w<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic>) applied at a generic point <italic>P</italic>. It is worth stressing once more that the zero tipping moment point is by definition the ZMP, the latter name being misleading. For sake of simpler notation, let the contact plane coincide with the <italic>x</italic>-<italic>y</italic> plane. Given the contact wrench <italic>w<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic>) at a generic point <italic>P</italic>&#x02009;&#x0003D;&#x02009;[<italic>P<sub>x</sub></italic>, <italic>P<sub>y</sub></italic>, 0] of the contact plane, the equivalent torque <inline-formula><mml:math id="M115"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> at <inline-formula><mml:math id="M116"><mml:mi>P</mml:mi><mml:mo class="MathClass-rel">&#x02032;</mml:mo><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:msubsup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-punc">,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:mfenced></mml:math></inline-formula> is given by:
<disp-formula id="E38"><label>(A6)</label><mml:math id="M117"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msub><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x000D7;</mml:mo><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>P</mml:mi><mml:msup><mml:mrow><mml:mi>P</mml:mi></mml:mrow><mml:mrow><mml:mo class="MathClass-rel">&#x02032;</mml:mo></mml:mrow></mml:msup></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced></mml:math></disp-formula>
where <italic>r<sub>PP&#x02032;</sub></italic>&#x02009;&#x0003D;&#x02009;<italic>P</italic>&#x02032;&#x02009;&#x02212;&#x02009;<italic>P</italic>. At a particular point <italic>P</italic>&#x02032;the tipping moments along the <italic>x</italic> and <italic>y</italic> axes equal zero. This point corresponds to the zero tipping moment associated to <italic>w<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic>) and equals:
<disp-formula id="E39"><label>(A7)</label><mml:math id="M118"><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mstyle class="mbox"><mml:mtext>ZMP</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>y</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>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mstyle class="mbox"><mml:mtext>ZMP</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfrac><mml:mrow><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>x</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>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
<p>Assuming that the contact wrench <italic>w<sub>c</sub></italic>&#x02009;&#x0003D;&#x02009;(<italic>f<sub>c</sub></italic>, <italic>&#x003BC;<sub>c</sub></italic>) is the resultant of a field of pressures <italic>p<sub>c</sub></italic> on the surface <italic>S</italic>, we have:
<disp-formula id="E40"><label>(A8)</label><mml:math id="M119"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>z</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:mi>y</mml:mi><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mn>&#x003BC;</mml:mn></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi>x</mml:mi><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi><mml:mo class="MathClass-punc">.</mml:mo></mml:math></disp-formula></p>
<p>Therefore, we have:
<disp-formula id="E41"><label>(A9)</label><mml:math id="M120"><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mstyle class="mbox"><mml:mtext>ZMP</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>x</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:mi>x</mml:mi><mml:mn>&#x003B1;</mml:mn><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mstyle class="mbox"><mml:mtext>ZMP</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:mi>y</mml:mi><mml:mn>&#x003B1;</mml:mn><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mn>&#x003B1;</mml:mn><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mo class="MathClass-op">&#x0222B;</mml:mo></mml:mrow><mml:mrow><mml:mi>S</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mstyle class="mbox"><mml:mtext></mml:mtext></mml:mstyle><mml:mi mathvariant="italic">dS</mml:mi></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
where in case of unilateral contacts (<italic>p<sub>c</sub></italic>&#x02009;&#x02265;&#x02009;0) it results evident that the ZMP is the convex combination of points in <italic>S</italic> and as such it belongs to the convex hull of <italic>S</italic>.</p>
</sec>
<sec id="S8-2">
<label>B.2</label> <title>Equilibrium configurations</title>
<p>In the following paragraphs, we study equilibrium configurations for the system in Figure <xref ref-type="fig" rid="FA1">A1</xref>. Let us first consider the case in which both contacts are active. The idea is to find conditions on the applied torques to guarantee that the system is in dynamic equilibrium (i.e., null accelerations) and contacts persist. The planar Newton&#x02013;Euler equilibrium equations for each of the 4 rigid bodies composing the system give 12 equations. Interaction (<italic>f<sub>r</sub></italic>, <italic>f<sub>l</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>2</sup>, <italic>&#x003C4;<sub>r</sub></italic>, <italic>&#x003C4;<sub>l</sub></italic>&#x02009;&#x02208;&#x02009;&#x0211D;) and internal (<italic>f</italic> <sub>1</sub>, <italic>f</italic> <sub>2</sub>, <italic>f</italic> <sub>3</sub>&#x02009;&#x02208;&#x02009;&#x0211D;<sup>2</sup>) forces and torques give twelve unknowns that can be uniquely solved for any choice of the joint torques <italic>&#x003C4;</italic><sub>1</sub>, <italic>&#x003C4;</italic><sub>2</sub>, <italic>&#x003C4;</italic><sub>3</sub>. To simplify the notation and to obtain a symmetric solution we assume <italic>&#x003C4;</italic><sub>1</sub>&#x02009;&#x0003D;&#x02009;<italic>&#x003C4;</italic>, <italic>&#x003C4;</italic><sub>2</sub>&#x02009;&#x0003D;&#x02009;0, <italic>&#x003C4;</italic><sub>1</sub>&#x02009;&#x0003D;&#x02009;&#x02212;&#x02009;<italic>&#x003C4;</italic>. Solving the associated equations gives the following solution for the contact forces:
<disp-formula id="E42"><label>(A10a)</label><mml:math id="M121"><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mi>l</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mi>g</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2em" class="qquad"/><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mi>l</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array" columnalign="center"><mml:mrow><mml:mo class="MathClass-open">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo class="MathClass-close">)</mml:mo></mml:mrow><mml:mi>g</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
<disp-formula id="E43"><label>(A10b)</label><mml:math id="M122"><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:mn>1</mml:mn><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2em" class="qquad"/><mml:mspace width="1em" class="nbsp"/><mml:mspace width="1em" class="nbsp"/><mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:mn>1</mml:mn><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mi>h</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:mfrac></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:math></disp-formula>
and internal forces:
<disp-formula id="E44"><label>(11)</label><mml:math id="M123"><mml:mtable columnalign="left" class="align"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mi>l</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mi>g</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mi>l</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mi>l</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:msub><mml:mrow><mml:mi>m</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mi>g</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>Assuming for the sake of simpler notation <italic>m</italic><sub>1</sub>&#x02009;&#x0002B;&#x02009;<italic>m</italic><sub>2</sub>&#x02009;&#x0003D;&#x02009;<italic>m</italic><sub>3</sub>&#x02009;&#x0002B;&#x02009;<italic>m</italic><sub>4</sub>&#x02009;&#x0003D;&#x02009;<italic>m<sub>tot</sub></italic>/2, (28) gives the following expressions for the local right and left foot FRI<xref ref-type="fn" rid="fn7"><sup>1</sup></xref> (expressed in the associated reference frames &#x003A3;<italic><sub>r</sub></italic> and &#x003A3;<italic><sub>l</sub></italic>, respectively):
<disp-formula id="E45"><mml:math id="M124"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mstyle class="mbox"><mml:mtext>FRI</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mfrac><mml:mrow><mml:mi>h</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">mlg</mml:mi><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mstyle class="mbox"><mml:mtext>FRI</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mn>&#x003C4;</mml:mn><mml:mfrac><mml:mrow><mml:mi>h</mml:mi><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">mlg</mml:mi><mml:mo class="MathClass-bin">&#x02215;</mml:mo><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>The global center of pressure (GCoP) can be computed by representing <italic>f<sub>r</sub></italic>, <italic>f<sub>l</sub></italic>, <italic>&#x003C4;<sub>r</sub></italic>, and <italic>&#x003C4;<sub>l</sub></italic> in a common reference frame to obtain the total force and torque <italic>f<sub>tot</sub></italic>-<italic>&#x003C4;<sub>tot</sub></italic>. Using a reference frame in the middle of the two contacts we have:
<disp-formula id="E46"><mml:math id="M125"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msubsup><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="italic">tot</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo> <mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow> <mml:mi>r</mml:mi></mml:mrow></mml:msub> <mml:mo class="MathClass-bin">&#x0002B;</mml:mo> <mml:mi>l</mml:mi><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup> <mml:mo class="MathClass-bin">&#x0002B;</mml:mo> <mml:msub><mml:mrow><mml:mn>&#x003C4;</mml:mn></mml:mrow><mml:mrow> <mml:mi>l</mml:mi></mml:mrow></mml:msub> <mml:mo class="MathClass-bin">&#x02212;</mml:mo> <mml:mi>l</mml:mi><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup> <mml:mo class="MathClass-rel">&#x0003D;</mml:mo> <mml:mn>0</mml:mn><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">tot</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msubsup> <mml:mo class="MathClass-rel">&#x0003D;</mml:mo> <mml:mfenced separators="" open="[" close="]"><mml:mrow><mml:mtable equalcolumns="false" class="array"><mml:mtr><mml:mtd class="array"><mml:mn>0</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="array"><mml:mi mathvariant="italic">mg</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
and therefore <italic>GCoP</italic>&#x02009;&#x0003D;&#x02009;[0, 0]<sup>T</sup>. As expected by the system symmetry, the global center of pressure is always in the middle of the two contacts regardless of the value given to <italic>&#x003C4;</italic>. Instead, the local contacts rotation indicators <italic>FRI<sub>r</sub></italic> and <italic>FRI<sub>l</sub></italic> linearly depend on <italic>&#x003C4;</italic> and, for a given contact geometry, it is always possible to find a <italic>&#x003C4;</italic>, which brings them outside the contact areas. As an example, we can assume that the surfaces in contact have width <italic>2h</italic> (twice the foot height) and, for sake of simpler notation <italic>h</italic>&#x02009;&#x0003D;&#x02009;<italic>l</italic>/2. With this simplification the FRI is within the support polygon of each contact if and only if:
<disp-formula id="E47"><mml:math id="M126"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mfrac><mml:mrow><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow><mml:mrow><mml:mn>6</mml:mn></mml:mrow></mml:mfrac><mml:mo class="MathClass-rel">&#x02264;</mml:mo><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-rel">&#x02264;</mml:mo><mml:mfrac><mml:mrow><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow><mml:mrow><mml:mn>6</mml:mn></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>If <italic>&#x003C4;</italic>&#x02009;&#x02265;&#x02009;<italic>mgl</italic>/6, the left foot rotation indicator <italic>FRI<sub>l</sub></italic> is on the right of the left foot support polygon. Similarly, <italic>FRI<sub>r</sub></italic> is on the left of the right foot support polygon. In practice, recalling the results presented in Section <xref ref-type="sec" rid="S2-2">2.2</xref>, this fact implies that the computed <italic>f<sub>r</sub></italic>, <italic>&#x003C4;<sub>r</sub></italic>, <italic>f<sub>l</sub></italic>, <italic>&#x003C4;<sub>l</sub></italic> for the system equilibrium cannot be generated by a unilateral contact of the given geometry. In a sense, the equilibrium assumption is wrong and we need to redo computations with a different assumption. In the following, we assume that the left foot is rotating with respect to its right edge and that the right foot is rotating with respect to its left edge. We then check that the solution found is feasible in terms of contact forces.</p>
</sec>
<sec id="S8-3">
<label>B.3</label> <title>Inward feet rotation configurations</title>
<p>In this section, we make the hypothesis that contact constraints force the left foot to rotate around its right edge and the right foot around its left edge. In this specific case, the torques at the (point wise) contacts is identically null. With respect to the previous situation we therefore have two unknowns less. Additional unknowns come from the fact that we are no longer assuming accelerations to be identically null since the system is no longer assumed at equilibrium. These additional unknowns can be expressed as a function of only two unknowns (e.g., the left and right foot tipping accelerations). This results by taking into consideration the kinematic constraints in the system, as represented in the left hand side of Figure <xref ref-type="fig" rid="FA1">A1</xref>. Therefore, with respect to the equilibrium case we removed two unknowns (the torques at the contacts) and inserted other two (the foot angular acceleration at the tipping point). As a result, the Newton&#x02013;Euler system of equations is still solvable. Deriving the solution is out of the scope of the present paper and therefore omitted. The interested reader can have a look at the computations, which are available in Matlab<xref ref-type="fn" rid="fn8"><sup>2</sup></xref>. We report here the values of some important variables such as the right and left foot acceleration (denoted <inline-formula><mml:math id="M127"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> and <inline-formula><mml:math id="M128"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>):
<disp-formula id="E48"><mml:math id="M129"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mi>k</mml:mi><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:mn>6&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mo class="MathClass-op">&#x000A8;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi>k</mml:mi><mml:mfenced separators="" open="(" close=")"><mml:mrow><mml:mn>6&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow></mml:mfenced><mml:mo class="MathClass-punc">.</mml:mo></mml:mtd><mml:mtd class="align-even"><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
for some positive scalar <italic>k</italic>&#x02009;&#x0003E;&#x02009;0 which depends only on the system geometric and dynamic parameters. By convention positive accelerations correspond to counter clock wise rotations. As soon as the right foot FRI starts moving away from its left edge (<italic>&#x003C4;</italic>&#x02009;&#x0003E;&#x02009;<italic>mgl</italic>/6) the right foot starts counter clock wise rotating. Similarly, when the left foot FRI moves away from its right edge (again, <italic>&#x003C4;</italic>&#x02009;&#x0003E;&#x02009;<italic>mgl</italic>/6) the left foot starts clock wise rotating. The left foot FRI can be computed as well. Given that the foot is not in equilibrium, FRI<italic><sub>l</sub></italic> is computed using <italic>f</italic> <sub>1</sub> and <italic>&#x003C4;</italic><sub>1</sub> reprojected on the planar contact surface. Similar considerations hold for FRI<italic><sub>r</sub></italic>. The position of the left and right feet rotation indicators with respect to the pivoting point is given by:
<disp-formula id="E49"><mml:math id="M130"><mml:mtable columnalign="left" class="align-star"><mml:mtr><mml:mtd columnalign="right" class="align-odd"><mml:msub><mml:mrow><mml:mstyle class="mbox"><mml:mtext>FRI</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mfrac><mml:mrow><mml:mn>6&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C4;</mml:mn></mml:mrow></mml:mfrac><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="2em" class="qquad"/><mml:msub><mml:mrow><mml:mstyle class="mbox"><mml:mtext>FRI</mml:mtext></mml:mstyle></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow></mml:msub><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mfrac><mml:mrow><mml:mn>6&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x02212;</mml:mo><mml:mi mathvariant="italic">mgl</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C4;</mml:mn></mml:mrow></mml:mfrac></mml:mtd><mml:mtd class="align-even"><mml:mspace width="2em"/></mml:mtd><mml:mtd columnalign="right" class="align-label"></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
where <italic>k</italic><sub>1</sub> and <italic>k</italic><sub>2</sub> are positive scalars which again depend only on the system geometric and dynamic parameters. As expected FRI<italic><sub>r</sub></italic> and FRI<italic><sub>l</sub></italic> coincide with the pivoting point (the edge of the support polygon) when <italic>&#x003C4;</italic>&#x02009;&#x0003D;&#x02009;<italic>mgl</italic>/6 and move away from the support polygon when <italic>&#x003C4;</italic>&#x02009;&#x0003E;&#x02009;<italic>mgl</italic>/6. The vertical forces at the contact have the following expressions:
<disp-formula id="E50"><mml:math id="M131"><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>l</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub><mml:mo class="MathClass-punc">,</mml:mo><mml:mspace width="1em" class="quad"/><mml:mspace width="1em" class="quad"/><mml:msubsup><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>r</mml:mi></mml:mrow><mml:mrow><mml:mi>y</mml:mi></mml:mrow></mml:msubsup><mml:mo class="MathClass-rel">&#x0003D;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mn>&#x003C4;</mml:mn><mml:mo class="MathClass-bin">&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub></mml:math></disp-formula>
for positive constants <italic>k</italic><sub>3</sub> and <italic>k</italic><sub>4</sub>. Contact forces are therefore positive as expected given the unilaterally of the contact. Finally, given the symmetry of the problem, the GCoP is constantly at the center of symmetry of the system and therefore within the contact support polygon. Therefore, when <italic>&#x003C4;</italic>&#x02009;&#x0003E;&#x02009;<italic>mgl</italic>/6 the system starts rotating feet at their edges (contacts are broken) even if the global center of pressure is within the contact convex hull. This is therefore the counterexample we were looking for.</p>
</sec>
</sec>
<fn-group>
<fn id="fn7"><p><sup>1</sup>Using the FRI definition and assuming the contact plane to be <italic>y</italic> &#x0003D; 0, a force <italic>f</italic> and a torque &#x003C4; have an associated FRI with <italic>x</italic>-coordinate given by <italic>FRIx</italic> &#x0003D; &#x003C4;/<italic>f&#x02009;y</italic>.</p></fn>
<fn id="fn8"><p><sup>2</sup><uri xlink:href="https://github.com/iron76/wholeBodyCounterExample">https://github.com/iron76/wholeBodyCounterExample</uri></p></fn>
</fn-group>
</app>
</app-group>
<ack>
<p>The authors acknowledge Ali Paikan (Istituto Italiano di Tecnologia, iCub Facility) for his contribution on the Lua bindings, Daniele Domenichelli (Istituto Italiano di Tecnologia, iCub Facility) for the codyco-superbuild support, Lorenzo Natale (Istituto Italiano di Tecnologia, iCub Facility) for the support to the YARP framework, Marco Randazzo (Istituto Italiano di Tecnologia, iCub Facility) for the implementation of torque control on the iCub humanoid, Julien Jenvrin (Istituto Italiano di Tecnologia, iCub Facility) for the technical hardware support, and Giorgio Metta for the coordination of the iCub Facility activities. <italic>Funding</italic>: This paper was supported by the FP7 EU projects CoDyCo (No. 600716 ICT 2011.2.1 Cognitive Systems and Robotics), and Koroibot (No. 611909 ICT-2013.2.1 Cognitive Systems and Robotics).</p>
</ack>
<ref-list>
<title>References</title>
<ref id="B1"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Aghili</surname> <given-names>F.</given-names></name></person-group> (<year>2005</year>). <article-title>A unified approach for inverse and direct dynamics of constrained multibody systems based on linear projection operator: applications to control and simulation</article-title>. <source>IEEE Trans. Robot.</source> <volume>21</volume>, <fpage>834</fpage>&#x02013;<lpage>849</lpage>.<pub-id pub-id-type="doi">10.1109/TRO.2005.851380</pub-id></citation></ref>
<ref id="B2"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ayusawa</surname> <given-names>K.</given-names></name> <name><surname>Venture</surname> <given-names>G.</given-names></name> <name><surname>Nakamura</surname> <given-names>Y.</given-names></name></person-group> (<year>2014</year>). <article-title>Identifiability and identification of inertial parameters using the underactuated base-link dynamics for legged multibody systems</article-title>. <source>Int. J. Rob. Res.</source> <volume>33</volume>, <fpage>446</fpage>&#x02013;<lpage>468</lpage>.<pub-id pub-id-type="doi">10.1177/0278364913495932</pub-id></citation></ref>
<ref id="B3"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Cannata</surname> <given-names>G.</given-names></name> <name><surname>Maggiali</surname> <given-names>M.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Sandini</surname> <given-names>G.</given-names></name></person-group> (<year>2008</year>). &#x0201C;<article-title>An embedded artificial skin for humanoid robots</article-title>,&#x0201D; in <conf-name>2008 IEEE International Conference on Multisensor Fusion and Integration for Intelligent Systems</conf-name> (<conf-loc>Seoul</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), <fpage>434</fpage>&#x02013;<lpage>438</lpage>.</citation></ref>
<ref id="B4"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>de Lasa</surname> <given-names>M.</given-names></name> <name><surname>Mordatch</surname> <given-names>I.</given-names></name> <name><surname>Hertzmann</surname> <given-names>A.</given-names></name></person-group> (<year>2010</year>). <article-title>Feature-based locomotion controllers</article-title>. <source>ACM Trans. Graph.</source> <volume>29</volume>, <fpage>131:1</fpage>&#x02013;<lpage>131:10</lpage>.<pub-id pub-id-type="doi">10.1016/j.neunet.2013.04.005</pub-id><pub-id pub-id-type="pmid">23631905</pub-id></citation></ref>
<ref id="B5"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Del Prete</surname> <given-names>A.</given-names></name></person-group> (<year>2013</year>). <source>Control of Contact Forces using Whole-Body Force and Tactile Sensors: Theory and Implementation on the iCub Humanoid Robot</source>. PhD thesis, <publisher-name>Istituto Italiano di Tecnologia</publisher-name>, <publisher-loc>Genova</publisher-loc>.</citation></ref>
<ref id="B6"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Del Prete</surname> <given-names>A.</given-names></name> <name><surname>Denei</surname> <given-names>S.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name> <name><surname>Mastrogiovanni</surname> <given-names>F.</given-names></name> <name><surname>Nori</surname> <given-names>F.</given-names></name> <name><surname>Cannata</surname> <given-names>G.</given-names></name> <etal/></person-group> (<year>2011</year>). &#x0201C;<article-title>Skin spatial calibration using force/torque measurements</article-title>,&#x0201D; in <conf-name>International Conference on Intelligent Robots and Systems</conf-name> (<conf-loc>San Francisco, CA</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), <fpage>3694</fpage>&#x02013;<lpage>3700</lpage>.</citation></ref>
<ref id="B7"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Del Prete</surname> <given-names>A.</given-names></name> <name><surname>Mansard</surname> <given-names>N.</given-names></name> <name><surname>Nori</surname> <given-names>F.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name></person-group> (<year>2014</year>). &#x0201C;<article-title>Partial force control of constrained floating-base robots</article-title>,&#x0201D; in <conf-name>Proceedings of 2003 IEEE/RSJ International Conference on Intelligent Robots and Systems, 2014</conf-name>. <conf-loc>Chicago, IL</conf-loc>.</citation></ref>
<ref id="B8"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Del Prete</surname> <given-names>A.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name> <name><surname>Nori</surname> <given-names>F.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name></person-group> (<year>2012</year>). &#x0201C;<article-title>Contact force estimations using tactile sensors and force/torque sensors</article-title>,&#x0201D; in <source>Human-Robot Interaction (HRI), workshop on Advances in Tactile Sensing and Touch based Human-Robot Interaction</source> (<publisher-loc>Boston, MA</publisher-loc>: <publisher-name>ACM/IEEE</publisher-name>), <fpage>0</fpage>&#x02013;<lpage>2</lpage>.</citation></ref>
<ref id="B9"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Featherstone</surname> <given-names>R.</given-names></name></person-group> (<year>2008</year>). <source>Rigid Body Dynamics Algorithms</source>. <publisher-name>Springer</publisher-name>.</citation></ref>
<ref id="B10"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fumagalli</surname> <given-names>M.</given-names></name> <name><surname>Ivaldi</surname> <given-names>S.</given-names></name> <name><surname>Randazzo</surname> <given-names>M.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Sandini</surname> <given-names>G.</given-names></name> <etal/></person-group> (<year>2012</year>). <article-title>Force feedback exploiting tactile and proximal force/torque sensing. Theory and implementation on the humanoid robot iCub</article-title>. <source>Auton. Robots</source> <volume>33</volume>, <fpage>381</fpage>&#x02013;<lpage>398</lpage>.<pub-id pub-id-type="doi">10.1007/s10514-012-9291-2</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></person-group> (<year>1999</year>). <article-title>Postural stability of biped robots and the foot-rotation indicator (fri) point</article-title>. <source>Int. J. Rob. Res.</source> <volume>18</volume>, <fpage>523</fpage>&#x02013;<lpage>533</lpage>.<pub-id pub-id-type="doi">10.1177/02783649922066376</pub-id></citation></ref>
<ref id="B12"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Harada</surname> <given-names>K.</given-names></name> <name><surname>Kajita</surname> <given-names>S.</given-names></name> <name><surname>Kaneko</surname> <given-names>K.</given-names></name> <name><surname>Hirukawa</surname> <given-names>H.</given-names></name></person-group> (<year>2003</year>). &#x0201C;<article-title>Zmp analysis for arm/leg coordination</article-title>,&#x0201D; in <conf-name>Intelligent Robots and Systems, 2003. (IROS 2003). Proceedings. 2003 IEEE/RSJ International Conference on</conf-name> (<conf-loc>Las Vegas</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), Vol. <volume>1</volume>, <fpage>75</fpage>&#x02013;<lpage>81</lpage>.</citation></ref>
<ref id="B13"><citation citation-type="other"><person-group person-group-type="author"><name><surname>Herzog</surname> <given-names>A.</given-names></name> <name><surname>Righetti</surname> <given-names>L.</given-names></name> <name><surname>Grimminger</surname> <given-names>F.</given-names></name> <name><surname>Pastor</surname> <given-names>P.</given-names></name> <name><surname>Schaal</surname> <given-names>S.</given-names></name></person-group> (<year>2014</year>). <article-title>Balancing experiments on a torque-controlled humanoid with hierarchical inverse dynamics</article-title>.<pub-id pub-id-type="doi">10.1109/IROS.2014.6942678</pub-id></citation></ref>
<ref id="B14"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hirai</surname> <given-names>K.</given-names></name> <name><surname>Hirose</surname> <given-names>M.</given-names></name> <name><surname>Haikawa</surname> <given-names>Y.</given-names></name> <name><surname>Takenaka</surname> <given-names>T.</given-names></name></person-group> (<year>1998</year>). &#x0201C;<article-title>The development of honda humanoid robot</article-title>,&#x0201D; in <conf-name>Robotics and Automation, 1998. Proceedings. 1998 IEEE International Conference on</conf-name> (<conf-loc>Leuven</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), Vol. <volume>2</volume>, <fpage>1321</fpage>&#x02013;<lpage>1326</lpage>.</citation></ref>
<ref id="B15"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Hollerbach</surname> <given-names>J.</given-names></name> <name><surname>Khalil</surname> <given-names>W.</given-names></name> <name><surname>Gautier</surname> <given-names>M.</given-names></name></person-group> (<year>2008</year>). &#x0201C;<article-title>Model identification</article-title>,&#x0201D; in <source>Springer Handbook of Robotics</source>, eds <person-group person-group-type="editor"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Khatib</surname> <given-names>O.</given-names></name></person-group> (<publisher-loc>Berlin</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>321</fpage>&#x02013;<lpage>344</lpage>. Available at: <uri xlink:href="http://dx.doi.org/10.1007/978-3-540-30301-5_15">http://dx.doi.org/10.1007/978-3-540-30301-5_15</uri></citation></ref>
<ref id="B16"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Huang</surname> <given-names>Q.</given-names></name> <name><surname>Yokoi</surname> <given-names>K.</given-names></name> <name><surname>Kajita</surname> <given-names>S.</given-names></name> <name><surname>Kaneko</surname> <given-names>K.</given-names></name> <name><surname>Arai</surname> <given-names>H.</given-names></name> <name><surname>Koyachi</surname> <given-names>N.</given-names></name> <etal/></person-group> (<year>2001</year>). <article-title>Planning walking patterns for a biped robot</article-title>. <source>IEEE Trans. Rob. Autom.</source> <volume>17</volume>, <fpage>280</fpage>&#x02013;<lpage>289</lpage>.<pub-id pub-id-type="doi">10.1109/70.938385</pub-id></citation></ref>
<ref id="B17"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hyon</surname> <given-names>S.-H.</given-names></name> <name><surname>Hale</surname> <given-names>J.</given-names></name> <name><surname>Cheng</surname> <given-names>G.</given-names></name></person-group> (<year>2007</year>). <article-title>Full-body compliant human-humanoid interaction: balancing in the presence of unknown external forces</article-title>. <source>IEEE Trans. Robot.</source> <volume>23</volume>, <fpage>884</fpage>&#x02013;<lpage>898</lpage>.<pub-id pub-id-type="doi">10.1109/TRO.2007.904896</pub-id></citation></ref>
<ref id="B18"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Kajita</surname> <given-names>S.</given-names></name> <name><surname>Espiau</surname> <given-names>B.</given-names></name></person-group> (<year>2008</year>). &#x0201C;<article-title>Chapter 16 legged robots</article-title>,&#x0201D; in <source>Springer Handbook of Robotics</source>, Vol. <volume>C</volume>, eds <person-group person-group-type="editor"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Khatib</surname> <given-names>O.</given-names></name></person-group> (<publisher-loc>Berlin</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>361</fpage>&#x02013;<lpage>389</lpage>.</citation></ref>
<ref id="B19"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Khatib</surname> <given-names>O.</given-names></name></person-group> (<year>1987</year>). <article-title>A unified approach for motion and force control of robot manipulators: the operational space formulation</article-title>. <source>IEEE J. Rob. Autom.</source> <volume>3</volume>, <fpage>43</fpage>&#x02013;<lpage>53</lpage>.<pub-id pub-id-type="doi">10.1109/JRA.1987.1087068</pub-id></citation></ref>
<ref id="B20"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Li</surname> <given-names>Q.</given-names></name> <name><surname>Takanishi</surname> <given-names>A.</given-names></name> <name><surname>Kato</surname> <given-names>I.</given-names></name></person-group> (<year>1993</year>). &#x0201C;<article-title>Learning control for a biped walking robot with a trunk</article-title>,&#x0201D; in <conf-name>Intelligent Robots and Systems &#x02018;93, IROS &#x02018;93. Proceedings of the 1993 IEEE/RSJ International Conference on</conf-name> (<conf-loc>Yokohama</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), Vol. <volume>3</volume>, <fpage>1771</fpage>&#x02013;<lpage>1777</lpage>.</citation></ref>
<ref id="B21"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Maiolino</surname> <given-names>P.</given-names></name> <name><surname>Maggiali</surname> <given-names>M.</given-names></name> <name><surname>Cannata</surname> <given-names>G.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name></person-group> (<year>2013</year>). <article-title>A flexible and robust large scale capacitive tactile sensor for robots</article-title>. <source>IEEE Sens. J.</source> <volume>13</volume>, <fpage>3910</fpage>&#x02013;<lpage>3917</lpage>.<pub-id pub-id-type="doi">10.1109/JSEN.2013.2258149</pub-id></citation></ref>
<ref id="B22"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name> <name><surname>Nori</surname> <given-names>F.</given-names></name> <name><surname>Sandini</surname> <given-names>G.</given-names></name> <name><surname>Vernon</surname> <given-names>D.</given-names></name> <name><surname>Fadiga</surname> <given-names>L.</given-names></name> <etal/></person-group> (<year>2010</year>). <article-title>The iCub humanoid robot: an open-systems platform for research in cognitive development</article-title>. <source>Neural Netw.</source> <volume>23</volume>, <fpage>1125</fpage>&#x02013;<lpage>1134</lpage>.<pub-id pub-id-type="doi">10.1016/j.neunet.2010.08.010</pub-id><pub-id pub-id-type="pmid">20864311</pub-id></citation></ref>
<ref id="B23"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Murray</surname> <given-names>R. M.</given-names></name> <name><surname>Sastry</surname> <given-names>S. S.</given-names></name> <name><surname>Zexiang</surname> <given-names>L.</given-names></name></person-group> (<year>1994</year>). <source>A Mathematical Introduction to Robotic Manipulation</source>, <edition>1st Edn</edition>. <publisher-loc>Boca Raton, FL</publisher-loc>: <publisher-name>CRC Press, Inc.</publisher-name></citation></ref>
<ref id="B24"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Orin</surname> <given-names>D. E.</given-names></name> <name><surname>Goswami</surname> <given-names>A.</given-names></name> <name><surname>Lee</surname> <given-names>S.-H.</given-names></name></person-group> (<year>2013</year>). <article-title>Centroidal dynamics of a humanoid robot</article-title>. <source>Auton. Robots</source> <volume>35</volume>, <fpage>161</fpage>&#x02013;<lpage>176</lpage>.<pub-id pub-id-type="doi">10.1007/s10514-013-9341-4</pub-id></citation></ref>
<ref id="B25"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Ott</surname> <given-names>C.</given-names></name> <name><surname>Roa</surname> <given-names>M. A.</given-names></name> <name><surname>Hirzinger</surname> <given-names>G.</given-names></name></person-group> (<year>2011</year>). &#x0201C;<article-title>Posture and balance control for biped robots based on contact force optimization</article-title>,&#x0201D; in <conf-name>2011 11th IEEE-RAS International Conference on Humanoid Robots</conf-name> (<conf-loc>Bled</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), <fpage>26</fpage>&#x02013;<lpage>33</lpage>.</citation></ref>
<ref id="B26"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Park</surname> <given-names>J.</given-names></name></person-group> (<year>2006</year>). <source>Control Strategies for Robots in Contact</source>. PhD thesis, <publisher-name>Stanford University</publisher-name>, <publisher-loc>Stanford, CA</publisher-loc>.</citation></ref>
<ref id="B27"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Popovic</surname> <given-names>M. B.</given-names></name> <name><surname>Herr</surname> <given-names>H.</given-names></name></person-group> (<year>2005</year>). <article-title>Ground reference points in legged locomotion: definitions, biological trajectories and control implications</article-title>. <source>Int. J. Rob. Res.</source> <volume>24</volume>, <fpage>2005</fpage>.<pub-id pub-id-type="doi">10.1177/0278364905058363</pub-id></citation></ref>
<ref id="B28"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Randazzo</surname> <given-names>M.</given-names></name> <name><surname>Fumagalli</surname> <given-names>M.</given-names></name> <name><surname>Nori</surname> <given-names>F.</given-names></name> <name><surname>Natale</surname> <given-names>L.</given-names></name> <name><surname>Metta</surname> <given-names>G.</given-names></name> <name><surname>Sandini</surname> <given-names>G.</given-names></name></person-group> (<year>2011</year>). &#x0201C;<article-title>A comparison between joint level torque sensing and proximal F/T sensor torque estimation: implementation on the iCub</article-title>,&#x0201D; in <conf-name>Intelligent Robots and Systems (IROS), 2011 IEEE/RSJ International Conference on</conf-name> (<conf-sponsor>IEEE</conf-sponsor>), <fpage>4161</fpage>&#x02013;<lpage>4167</lpage>. Available at: <uri xlink:href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6048660">http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber&#x0003D;6048660</uri></citation></ref>
<ref id="B29"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Righetti</surname> <given-names>L.</given-names></name> <name><surname>Buchli</surname> <given-names>J.</given-names></name> <name><surname>Mistry</surname> <given-names>M.</given-names></name> <name><surname>Schaal</surname> <given-names>S.</given-names></name></person-group> (<year>2011</year>). &#x0201C;<article-title>Control of legged robots with optimal distribution of contact forces</article-title>,&#x0201D; in <conf-name>2011 11th IEEE-RAS International Conference on Humanoid Robots</conf-name> (<conf-loc>Bled</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), <fpage>318</fpage>&#x02013;<lpage>324</lpage>.</citation></ref>
<ref id="B30"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sardain</surname> <given-names>P.</given-names></name> <name><surname>Bessonnet</surname> <given-names>G.</given-names></name></person-group> (<year>2004</year>). <article-title>Forces acting on a biped robot. Center of pressure &#x02013; zero moment point</article-title>. <source>IEEE Trans. Syst. Man Cybern. A Syst. Hum.</source> <volume>34</volume>, <fpage>630</fpage>&#x02013;<lpage>637</lpage>.<pub-id pub-id-type="doi">10.1109/TSMCA.2004.832811</pub-id></citation></ref>
<ref id="B31"><citation citation-type="book"><person-group person-group-type="author"><name><surname>Sentis</surname> <given-names>L.</given-names></name></person-group> (<year>2007</year>). <source>Synthesis and Control of Whole-Body Behaviors in Humanoid Systems</source>. PhD thesis, <publisher-name>Stanford University</publisher-name>, <publisher-loc>Stanford, CA</publisher-loc>.</citation></ref>
<ref id="B32"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Spong</surname> <given-names>M. W.</given-names></name></person-group> (<year>1994</year>). &#x0201C;<article-title>The control of underactuated mechanical systems</article-title>,&#x0201D; in <conf-name>First International Conference on Mechatronics</conf-name>. <conf-loc>Mexico</conf-loc>.</citation></ref>
<ref id="B33"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Stonier</surname> <given-names>D.</given-names></name> <name><surname>Kim</surname> <given-names>J.-H.</given-names></name></person-group> (<year>2006</year>). &#x0201C;<article-title>Zmp analysis for realisation of humanoid motion on complex topologies</article-title>,&#x0201D; in <conf-name>Systems, Man and Cybernetics, 2006. SMC &#x02018;06. IEEE International Conference on</conf-name> (<conf-loc>Taipei</conf-loc>: <conf-sponsor>IEEE</conf-sponsor>), Vol. <volume>1</volume>, <fpage>247</fpage>&#x02013;<lpage>252</lpage>.</citation></ref>
<ref id="B34"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vukobratovic</surname> <given-names>M.</given-names></name> <name><surname>Borovac</surname> <given-names>B.</given-names></name></person-group> (<year>2004</year>). <article-title>Zero-moment point &#x02013; thirty five years of its life</article-title>. <source>Int. J. HR</source> <volume>1</volume>, <fpage>157</fpage>&#x02013;<lpage>173</lpage>.<pub-id pub-id-type="doi">10.1142/S0219843604000083</pub-id></citation></ref>
<ref id="B35"><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vukobratovic</surname> <given-names>M.</given-names></name> <name><surname>Juricic</surname> <given-names>D.</given-names></name></person-group> (<year>1969</year>). <article-title>Contribution to the synthesis of biped gait</article-title>. <source>IEEE Trans. Biomed. Eng.</source> <volume>16</volume>, <fpage>1</fpage>&#x02013;<lpage>6</lpage>.<pub-id pub-id-type="doi">10.1109/TBME.1969.4502596</pub-id></citation></ref>
<ref id="B36"><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Wieber</surname> <given-names>P.-B.</given-names></name></person-group> (<year>2002</year>). &#x0201C;<article-title>On the stability of walking systems</article-title>,&#x0201D; in <conf-name>Proceedings of the International Workshop on Humanoid and Human Friendly Robotics</conf-name>. <conf-loc>Tsukuba, Japan</conf-loc>.</citation></ref>
</ref-list>
<fn-group>
<fn id="fn1"><p><sup>1</sup>Normal linear motion and tangential angular motions are constrained by the unilateral contact forces; tangential linear motions and normal angular motion are constrained by friction.</p></fn>
<fn id="fn2"><p><sup>2</sup>The FRI and ZMP (as they have been defined) do not depend neither on the tangential forces nor on the normal moments. However, frictional constraints depend on these quantities. Therefore, no stability criteria can be formulated using only the FRI and the ZMP quantities. Within this context, it comes with no surprise that the sufficient condition for contact stability requires tangential forces and normal moments to be within the friction cones of the contact itself.</p></fn>
<fn id="fn3"><p><sup>3</sup>See the software library documentation <uri xlink:href="http://wiki.icub.org/iCub_documentation/idyn_introduction.html">http://wiki.icub.org/iCub_documentation/idyn_introduction.html</uri></p></fn>
<fn id="fn4"><p><sup>4</sup><uri xlink:href="https://github.com/robotology/codyco-modules/tree/master/src/modules/motorFrictionIdentification">https://github.com/robotology/codyco-modules/tree/master/src/modules/motorFrictionIdentification</uri></p></fn>
<fn id="fn5"><p><sup>5</sup>Both the identification equation (<xref ref-type="disp-formula" rid="E3">3</xref>) and control equation (<xref ref-type="disp-formula" rid="E4">4</xref>) are available with an open source license. See the documentation in <uri xlink:href="http://wiki.icub.org/wiki/CoDyCo_Software">http://wiki.icub.org/wiki/CoDyCo_Software</uri></p></fn>
<fn id="fn6"><p><sup>6</sup><uri xlink:href="https://www.youtube.com/watch?v=jaTEbCsFp_M">https://www.youtube.com/watch?v&#x0003D;jaTEbCsFp_M</uri></p></fn>
</fn-group>
</back>
</article>