<?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.2020.00087</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Robotics and AI</subject>
<subj-group>
<subject>Original Research</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>A Gait Pattern Generator for Closed-Loop Position Control of a Soft Walking Robot</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Schiller</surname> <given-names>Lars</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<xref ref-type="corresp" rid="c001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/718147/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Seibel</surname> <given-names>Arthur</given-names></name>
<xref ref-type="aff" rid="aff2"><sup>2</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/620122/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>Schlattmann</surname> <given-names>Josef</given-names></name>
<xref ref-type="aff" rid="aff1"><sup>1</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/867139/overview"/>
</contrib>
</contrib-group>
<aff id="aff1"><sup>1</sup><institution>Workgroup on System Technologies and Engineering Design Methodology, Hamburg University of Technology</institution>, <addr-line>Hamburg</addr-line>, <country>Germany</country></aff>
<aff id="aff2"><sup>2</sup><institution>Fraunhofer Research Institution for Additive Manufacturing Technologies IAPT</institution>, <addr-line>Hamburg</addr-line>, <country>Germany</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Concepci&#x000F3;n A. Monje, Universidad Carlos III de Madrid, Spain</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Cosimo Della Santina, Massachusetts Institute of Technology, United States; Chaoyang Song, Southern University of Science and Technology, China</p></fn>
<corresp id="c001">&#x0002A;Correspondence: Lars Schiller <email>lars.schiller&#x00040;tuhh.de</email></corresp>
<fn fn-type="other" id="fn001"><p>This article was submitted to Soft Robotics, a section of the journal Frontiers in Robotics and AI</p></fn></author-notes>
<pub-date pub-type="epub">
<day>02</day>
<month>07</month>
<year>2020</year>
</pub-date>
<pub-date pub-type="collection">
<year>2020</year>
</pub-date>
<volume>7</volume>
<elocation-id>87</elocation-id>
<history>
<date date-type="received">
<day>18</day>
<month>02</month>
<year>2020</year>
</date>
<date date-type="accepted">
<day>02</day>
<month>06</month>
<year>2020</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2020 Schiller, Seibel and Schlattmann.</copyright-statement>
<copyright-year>2020</copyright-year>
<copyright-holder>Schiller, Seibel and Schlattmann</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract><p>This paper presents an approach to control the position of a gecko-inspired soft robot in Cartesian space. By formulating constraints under the assumption of constant curvature, the joint space of the robot is reduced in its dimension from nine to two. The remaining two generalized coordinates describe respectively the walking speed and the rotational speed of the robot and define the so-called velocity space. By means of simulations and experimental validation, the direct kinematics of the entire velocity space (mapping in Cartesian task space) is approximated by a bivariate polynomial. Based on this, an optimization problem is formulated that recursively generates the optimal references to reach a given target position in task space. Finally, we show in simulation and experiment that the robot can master arbitrary obstacle courses by making use of this gait pattern generator.</p></abstract>
<kwd-group>
<kwd>mobile robotics</kwd>
<kwd>gait pattern generator</kwd>
<kwd>closed-loop position control</kwd>
<kwd>gecko-inspired soft robot</kwd>
<kwd>locomotion controller</kwd>
</kwd-group>
<counts>
<fig-count count="12"/>
<table-count count="3"/>
<equation-count count="23"/>
<ref-count count="27"/>
<page-count count="13"/>
<word-count count="8127"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>1. Introduction</title>
<p>Soft robotics is an emerging field in the robotics sciences and enjoys increasing attention in the scientific community (Bao et al., <xref ref-type="bibr" rid="B1">2018</xref>). An important part of this field is mobile soft robotics, which allows locomotion in unknown and unstructured (Katzschmann et al., <xref ref-type="bibr" rid="B11">2018</xref>) as well as potentially dangerous environments (Tolley et al., <xref ref-type="bibr" rid="B25">2014</xref>). In order to navigate a robot through any environment, some sort of feedback is needed. As discussed in Santina et al. (<xref ref-type="bibr" rid="B18">2017</xref>), high gain feedback control results in good tracking performance, but imposes a reduction in the compliance of the controlled system. Therefore, it takes away the essential characteristic and greatest advantage of a soft robot&#x02014;its softness (Rus and Tolley, <xref ref-type="bibr" rid="B17">2015</xref>). When it comes to soft robots, usually the dynamics of inputs are indirectly coupled with the dynamics of outputs and the coupling is time-delayed (PneuNets: pressure&#x02014;angle, SMA: heat&#x02014;contraction, refer to Lee et al., <xref ref-type="bibr" rid="B12">2013</xref>). In order to take this into account, a cascaded control architecture has been established (see, e.g., Marchese et al., <xref ref-type="bibr" rid="B13">2014</xref>; Hofer and D&#x00027;Andrea, <xref ref-type="bibr" rid="B6">2018</xref>). In the case of pneumatically operated robots, the inner loop controls the pressure and the outer loop controls the pressure reference (see also <bold>Figure 11B</bold>). In order to preserve softness, the feedback gain of the outer control loop needs to be low. Most of the pressure reference should therefore be generated by a feed forward term (Santina et al., <xref ref-type="bibr" rid="B18">2017</xref>). There is a trend to implement the feed forward term by using Iterative Learning Control (Bristow et al., <xref ref-type="bibr" rid="B3">2006</xref>; see, e.g., Santina et al., <xref ref-type="bibr" rid="B18">2017</xref>; Zhang and Polygerinos, <xref ref-type="bibr" rid="B27">2018</xref>; Hofer et al., <xref ref-type="bibr" rid="B7">2019</xref>). As shown in Santina et al. (<xref ref-type="bibr" rid="B19">2020</xref>), the typical soft properties of a soft robot can also be preserved with a model-based feed forward term when doing position control.</p>
<p>All the soft robots discussed so far are stationary. Thus, position control refers to the position of the end effector and not to the position of the entire robot. However, the same principles are also valid for mobile soft robots. Most mobile soft robots, such as in Shepherd et al. (<xref ref-type="bibr" rid="B23">2011</xref>), Godage et al. (<xref ref-type="bibr" rid="B5">2012</xref>), Tolley et al. (<xref ref-type="bibr" rid="B25">2014</xref>), Qin et al. (<xref ref-type="bibr" rid="B16">2019</xref>), and Schiller et al. (<xref ref-type="bibr" rid="B20">2019</xref>), are feed forward-controlled with predefined gait patterns. In order to enable such robots to move autonomously even in unknown terrain, a locomotion controller is needed that can generate any gait path. For solving this task, different methods have been employed, such as sine generators, central pattern generators (CPG), predefined trajectories, finite state machines, or heuristic control laws (Pratt et al., <xref ref-type="bibr" rid="B15">2001</xref>). An example for sine generator-based locomotion control is presented in Horvat et al. (<xref ref-type="bibr" rid="B8">2015</xref>, <xref ref-type="bibr" rid="B9">2017</xref>) for a salamander-like robot. The method enables to operate the robot by only two drive signals, i.e., forward and rotational speed. The main contribution here is the skilful synchronization of spine and legs motion, which is very robot-specific. In Ijspeert (<xref ref-type="bibr" rid="B10">2008</xref>), the suitability of central pattern generators, i.e., biologically inspired neural circuits capable of producing coordinated patterns for robot&#x00027;s locomotion, are discussed. It is concluded that CPGs are well-suited in general and especially for distributed implementations (e.g., for snake-like or reconfigurable robots). However, there is neither a sound design methodology to solve a specific locomotor problem nor a solid theoretical foundation. In order to implement CPGs in a meaningful way, the basic gait pattern must therefore be known from the outset, which again is robot-specific. An example for the automatic generation of optimal joint-trajectories is given in Bern et al. (<xref ref-type="bibr" rid="B2">2019</xref>). By using a forward shooting method and an FEM-based direct kinematics simulation, high-level goals, such as forward speed or direction of movement of various soft walking robots can be met. This method does not require a priori knowledge of a motion pattern, but can not be used online without restrictions (computation time, stability, .). However, it can be well used to find robot-specific gait patterns.</p>
<p>Hence, for locomotion control of a robotic platform, a robot-specific motion strategy must be known. This paper analytically derives a robot-specific mapping of desired motion (forward and rotational speed) to joint coordinates for the gecko-inspired robot from Schiller et al. (<xref ref-type="bibr" rid="B20">2019</xref>), which is briefly described in section 2. The mapping function is referred to as &#x0201C;gait law&#x0201D; and is presented in section 3. In section 4, the direct kinematics of the robot are approximated by a polynomial by means of simulation and experiments to allow a fast evaluation. This is necessary to implement a control strategy in section 5 that maintains the softness of the robot and allows it to approach arbitrary references in the task space. The control strategy is referred to as Gait Pattern Generator. <xref ref-type="fig" rid="F1">Figure 1</xref> shows the systematic procedure of this paper. To summarize, the paper contributes in two ways: (i) it derives the robot-specific motion strategy for the gecko-inspired robot and (ii), for a given robot-specific motion strategy, it provides a method to control the robot&#x00027;s position. However, the underlying assumptions of the former can also be transferred to other soft robots, since the ability to adapt to the environment is exploited herein.</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p>Overview of spaces: in order to approximate the inverse kinematics, the joint space of the robot is reduced by formulating constraints referred to as gait law <inline-formula><mml:math id="M1"><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula>. The remaining two generalized coordinates <bold><italic>q</italic></bold> define the so-called velocity space. The direct kinematics of the entire velocity space (mapping in Cartesian task space) is approximated by a bivariate polynomial &#x00394;<bold><italic>x</italic></bold>. By formulating an optimization problem <inline-formula><mml:math id="M2"><mml:mo class="qopname">min</mml:mo><mml:mi>d</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo class="qopname">&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> that recursively generates the reference minimizing the distance to a given target position <inline-formula><mml:math id="M3"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula>, the robot can be operated in task space.</p></caption>
<graphic xlink:href="frobt-07-00087-g0001.tif"/>
</fig>
</sec>
<sec id="s2">
<title>2. Robot and Experimental Setup</title>
<p>The soft robot this paper deals with has five limbs (four legs and a torso) and four feet that can be operated independently. Therefore, its joint space has nine dimensions: the five bending angles of the limbs <bold>&#x003B1;</bold> &#x0003D; [&#x003B1;<sub>0</sub>, &#x003B1;<sub>1</sub>, &#x003B1;<sub>2</sub>, &#x003B1;<sub>3</sub>, &#x003B1;<sub>4</sub>] and the four states of fixation actuators <bold><italic>f</italic></bold> &#x0003D; [<italic>f</italic><sub>0</sub>, <italic>f</italic><sub>1</sub>, <italic>f</italic><sub>2</sub>, <italic>f</italic><sub>3</sub>]. Since its locomotion is only possible within two dimensions, its description in task space needs only three coordinates: the <italic>x</italic> and <italic>y</italic> position of the robot <sup><italic>O</italic></sup><italic>x</italic> and its orientation <sup><italic>O</italic></sup>&#x003B5;, described in the global (Cartesian) coordinate system {<italic>O</italic>}. Thus, the task space has three dimensions. A photograph of the prototype of this robot is depicted in <xref ref-type="fig" rid="F2">Figure 2A</xref> and <xref ref-type="table" rid="T1">Table 1</xref> summarizes its specifications. In order to evaluate the performance of the robot, the test bench shown in <xref ref-type="fig" rid="F2">Figure 2B</xref> was built with an embedded camera system. To measure the bending angles &#x003B1;, the robot orientation &#x003B5;, and the robot position <italic>x</italic>, apriltags (Wang and Olson, <xref ref-type="bibr" rid="B26">2016</xref>) were fixed on its body. For a more detailed description of the experimental setup, refer to the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p>Experimental setup. <bold>(A)</bold> Prototype of the gecko-inspired soft robot with attached visual markers. <bold>(B)</bold> Test bench with embedded camera system for measuring the robot&#x00027;s position and evaluating the walking performance.</p></caption>
<graphic xlink:href="frobt-07-00087-g0002.tif"/>
</fig>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p>Specifications of the soft robot.</p></caption>
<table frame="hsides" rules="groups">
<tbody><tr>
<td valign="top" align="left">Total weight</td>
<td valign="top" align="center">150 g</td>
</tr>
<tr>
<td valign="top" align="left">Max. speed</td>
<td valign="top" align="center">6 cm/s</td>
</tr>
<tr>
<td valign="top" align="left">Body length</td>
<td valign="top" align="center">12 cm</td>
</tr>
<tr>
<td valign="top" align="left">Body span</td>
<td valign="top" align="center">17 cm</td>
</tr>
<tr>
<td valign="top" align="left">Average applied pressure</td>
<td valign="top" align="center">0.76 bar</td>
</tr>
<tr>
<td valign="top" align="left">Pull-off force of suction cups</td>
<td valign="top" align="center">47 N</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s3">
<title>3. Gait Law</title>
<p>The straight gait of the robot can be described by a single variable&#x02014;the reference bending angle of the torso <inline-formula><mml:math id="M4"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>. All other variables of the joint space can then be described as a function of <inline-formula><mml:math id="M5"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> by means of the gait law for the straight gait, which was derived in Seibel and Schiller (<xref ref-type="bibr" rid="B22">2018</xref>):</p>
<disp-formula id="E1"><label>(1)</label><mml:math id="M6"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mtext>straight</mml:mtext></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mi>f</mml:mi><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mtext>&#x000A0;if&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mn>0</mml:mn><mml:mtext>&#x000A0;else&#x000A0;</mml:mtext><mml:mn>1</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn>1</mml:mn><mml:mtext>&#x000A0;if&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mn>0</mml:mn><mml:mtext>&#x000A0;else&#x000A0;</mml:mtext><mml:mn>0</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn>1</mml:mn><mml:mtext>&#x000A0;if&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mn>0</mml:mn><mml:mtext>&#x000A0;else&#x000A0;</mml:mtext><mml:mn>0</mml:mn></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mtext>&#x000A0;if&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mn>0</mml:mn><mml:mtext>&#x000A0;else&#x000A0;</mml:mtext><mml:mn>1</mml:mn></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>For a constant cycle time, the torso&#x00027;s bending angle is the essential measure for the forward velocity. Therefore, <italic>q</italic><sub>1</sub> as the signal driving the forward velocity is introduced, and for straight gait, <inline-formula><mml:math id="M7"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> is set. In order to operate the robot with different velocities, the angle reference <inline-formula><mml:math id="M8"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> for a given step size <italic>q</italic><sub>1</sub> is inverted after a certain time interval <italic>t</italic><sub>move</sub>. Hence, it jumps from <inline-formula><mml:math id="M9"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M10"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. The corresponding fixation reference <italic>f</italic> must also be inverted.</p>
<sec>
<title>3.1. Derivation for General Case</title>
<p>The above gait law can only generate gait patterns for straight motion. It is based on the idea that the orientations of the feet always remain constant. Now, we will loosen this restriction and demand only constant orientations for the fixed feet, while the unfixed feet are allowed to rotate. This implies two cases to be considered:</p>
<list list-type="order">
<list-item><p>What should be the rule for a fixed foot so that its orientation remains constant regardless of the rotation of the body?</p></list-item>
<list-item><p>What should be the rule for a free foot so that its change of orientation matches that of the body and enables a suitable initial pose for the next cycle?</p></list-item>
</list>
<p>For both cases, the rules are based on the change of orientations of the feet. The orientations of feet <inline-formula><mml:math id="M11"><mml:mi>&#x003C6;</mml:mi><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>5</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo>]</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>&#x022A4;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula> described in the global coordinate system&#x02014;and consequently their change during the change of pose&#x02014;can be calculated assuming constant curvature as follows:</p>
<disp-formula id="E2"><label>(2)</label><mml:math id="M12"><mml:mtable class="eqnarray" columnalign="right center left"><mml:mtr><mml:mtd><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003C6;</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle><mml:mo>,</mml:mo><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mi>&#x003B5;</mml:mi><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi>&#x003B5;</mml:mi><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi>&#x003B5;</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>&#x003C0;</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi>&#x003B5;</mml:mi><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mi>&#x003C0;</mml:mi></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Since the feet&#x00027;s orientations depend on the robot&#x00027;s orientation &#x003B5; and the bending angles <bold>&#x003B1;</bold>, a description for the latter two is required. First, it will be discussed how to describe and how to change the walking direction of the robot &#x003B5;, i.e., its orientation. From Schiller et al. (<xref ref-type="bibr" rid="B21">2020</xref>), it is known that the asymmetrical actuation of the torso leads to a rotation of the body. In order to describe an asymmetrical actuation, the steering factor <italic>q</italic><sub>2</sub> is introduced. The reference angle for the torso <inline-formula><mml:math id="M13"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> is then described as follows:</p>
<disp-formula id="E3"><label>(3)</label><mml:math id="M14"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>q</italic><sub>2</sub> &#x02208; [&#x02212;0.5, 0.5] is dimensionless and shifts the reference angle of the torso <inline-formula><mml:math id="M15"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> in the direction of <italic>q</italic><sub>2</sub> (compare <xref ref-type="fig" rid="F3">Figure 3</xref>). In this way, the left side of the torso is actuated by |<italic>q</italic><sub>1</sub>|<italic>q</italic><sub>2</sub> more in the first half of a cycle and the right side by the same amount less in the second half of the cycle. It should be noted that Equation (3) describes only one possible model for asymmetric actuation. Several models have been tested and this one has been established. Clearly, the change of orientation per cycle &#x00394;&#x003B5; is related to the steering factor <italic>q</italic><sub>2</sub> and the step length <italic>q</italic><sub>1</sub>. Simulation and experiment show that, for asymmetric actuation with positive <italic>q</italic><sub>2</sub>, a negative change of orientation occurs, and vice versa. The change in orientation per cycle is therefore negatively proportional to the steering factor and the step length:</p>
<disp-formula id="E4"><mml:math id="M17"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi><mml:mo>&#x0007E;</mml:mo><mml:mo>-</mml:mo><mml:mo stretchy="false">|</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where |&#x00394;<italic>q</italic><sub>1</sub>| is the amount of change in torso actuation from initial pose to subsequent pose. This results in a model for orientation change per cycle <inline-formula><mml:math id="M18"><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula> of the body:</p>
<disp-formula id="E5"><label>(4)</label><mml:math id="M19"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mo>&#x0007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where the robot-specific constant <inline-formula><mml:math id="M20"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mo>&#x0007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> describes the ability of the robot to rotate. Here, it is assumed that the robot rotates consistently within the cycle. Therefore, the change in orientation after a pose change (half cycle) is exactly half as much as after the entire cycle; compare to <xref ref-type="fig" rid="F4">Figure 4</xref> where <inline-formula><mml:math id="M21"><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p>Illustration of how the steering <italic>q</italic><sub>2</sub> influences the reference angle of the torso <inline-formula><mml:math id="M16"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>.</p></caption>
<graphic xlink:href="frobt-07-00087-g0003.tif"/>
</fig>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p>Problem statement: which bending angles must be applied in order to turn the robot while keeping the orientation of its fixed feet? During the first change of pose, the orientation of the front left foot (&#x003C6;<sub>0</sub>) and the rear right foot (&#x003C6;<sub>5</sub>) should be kept constant. During the second change of pose, the front right foot (&#x003C6;<sub>2</sub>) and the rear left foot (&#x003C6;<sub>3</sub>) should not rotate.</p></caption>
<graphic xlink:href="frobt-07-00087-g0004.tif"/>
</fig>
<p>The second parameter for calculating the feet&#x00027;s orientations Equation (2) is the bending angles of the legs. Hence, a specification for the legs is needed. The structure of the straight gait law from Equation (1) was adopted for this purpose, whereby the reference angles of the legs are extended with a yet unknown term <italic>g</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>). In the following, the procedure is shown for the front left leg only (&#x003B1;<sub>0</sub>). However, it can be transferred to all other legs. With this extension, the reference angle for the front left leg results in:</p>
<disp-formula id="E6"><label>(5)</label><mml:math id="M22"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Now, the change of foot orientation when changing the pose &#x00394;&#x003C6; can be derived from Equations (2)&#x02013;(5) by treating the references of the bending angles as the actual bending angles and assuming the body rotates according to the model from Equation (4):</p>
<disp-formula id="E7"><label>(6)</label><mml:math id="M23"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>=</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>=</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>=</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="true">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>-</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="true">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>=</mml:mo><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>g</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>q</italic><sub>1, 0</sub> describes the step length of the initial pose and <italic>q</italic><sub>1, 1</sub> that of the subsequent pose. When changing poses, the robot always jumps from <inline-formula><mml:math id="M24"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> to <inline-formula><mml:math id="M25"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>. Therefore, <italic>q</italic><sub>1, 1</sub> &#x0003D; &#x02212;<italic>q</italic><sub>1, 0</sub> and <italic>g</italic>(<italic>q</italic><sub>1, 1</sub>, <italic>q</italic><sub>2</sub>) &#x02212; <italic>g</italic>(<italic>q</italic><sub>1, 0</sub>, <italic>q</italic><sub>2</sub>) can be combined to &#x00394;<italic>g</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>). Furthermore, it is assumed that the steering factor <italic>q</italic><sub>2</sub> remains unchanged when changing poses. Next, a specification for the additional term <italic>g</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) is derived for the two cases under consideration (fixed and unfixed leg).</p>
<sec>
<title>3.1.1. Fixed Leg</title>
<p><xref ref-type="fig" rid="F4">Figure 4</xref> shows one cycle of trotting gait. Within the transition from the initial pose (black) to the middle pose (gray), the front left foot is fixed and thus its orientation should remain constant. The bending angle must be determined in such a way that the foot&#x00027;s orientation is kept constant, i.e., independent of <italic>q</italic><sub>1</sub> or <italic>q</italic><sub>2</sub>:</p>
<disp-formula id="E8"><label>(7)</label><mml:math id="M26"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mn>0</mml:mn><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>&#x02200;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where the index <italic>f</italic> denotes a fixed foot/leg. This means that the robot can change from any pose described by the general gait law to a subsequent pose without changing the orientation of its fixed feet, with the limitation that the steering factor <italic>q</italic><sub>2</sub> remains constant with this change. From Equations (7) and (4), the additional term for the fixed leg results in:</p>
<disp-formula id="E9"><label>(8)</label><mml:math id="M27"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mo>&#x0007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Since the sign of <italic>q</italic><sub>1</sub> is always swapped when changing poses, the change of the torso actuation always results in |&#x00394;<italic>q</italic><sub>1</sub>| &#x0003D; 2|<italic>q</italic><sub>1</sub>|, and thus, the additional term becomes (with <inline-formula><mml:math id="M28"><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:mn>4</mml:mn><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mo>&#x0007E;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula>):</p>
<disp-formula id="E10"><label>(9)</label><mml:math id="M29"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>Inserted in Equation (5), the reference for a fixed leg results in:</p>
<disp-formula id="E11"><label>(10)</label><mml:math id="M30"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
</sec>
<sec>
<title>3.1.2. Free Leg</title>
<p>As the foot was previously fixed, the rotation of the body must affect its orientation in the non-fixed phase. The free foot should therefore rotate in the unfixed phase exactly as much as the body does during the entire cycle. This is illustrated in <xref ref-type="fig" rid="F4">Figure 4</xref> where the change in orientation of the front left foot between the final pose (lightgray) and the middle pose (gray) matches exactly the rotation of the body <inline-formula><mml:math id="M31"><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover></mml:math></inline-formula>. With the model for the change of foot orientation from Equation (6), it must hold:</p>
<disp-formula id="E12"><label>(11)</label><mml:math id="M32"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>&#x003C6;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mo>-</mml:mo><mml:mo>&#x00394;</mml:mo><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo>^</mml:mo></mml:mover><mml:mtext>&#x000A0;&#x000A0;&#x000A0;&#x000A0;</mml:mtext><mml:mo>&#x02200;</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M33"><mml:mover accent="true"><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> indicates an unfixed foot. Clearly, this only applies if the same additional term is added again, but with swapped sign:</p>
<disp-formula id="E13"><label>(12)</label><mml:math id="M34"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>g</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>According to Equation (5), the reference for a free leg results in:</p>
<disp-formula id="E14"><label>(13)</label><mml:math id="M35"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn><mml:mo>,</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>If a foot is fixed, we add the term <italic>g</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) &#x0003D; <italic>c</italic><sub>1</sub>|<italic>q</italic><sub>1</sub>|<italic>q</italic><sub>2</sub> to the reference angle of the corresponding leg. If the leg is free, the additional term <italic>g</italic> is subtracted. Whether a leg is fixed or not is determined by the sign of the torso reference (see Equation 1): <italic>q</italic><sub>1</sub> positive &#x02192; foot fixed, <italic>q</italic><sub>1</sub> negative &#x02192; foot free. Thus, the distinction between free and fixed leg can be avoided by dropping the amount operation of <italic>q</italic><sub>1</sub> in the additional term <italic>g</italic>. The sign of <italic>q</italic><sub>1</sub> then automatically controls the corrective direction of the additional term <italic>g</italic>. This procedure can be performed for all legs and results in the general gait law, which is formally described as follows:</p>
<disp-formula id="E15"><label>(14)</label><mml:math id="M36"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>-</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mfrac><mml:mrow><mml:mi>&#x003C0;</mml:mi></mml:mrow><mml:mrow><mml:mn>4</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo>&#x0002B;</mml:mo><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:mfrac><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo stretchy="false">|</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>c</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant="bold-italic"><mml:mi>f</mml:mi></mml:mstyle><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>The value of additional leg bending <italic>c</italic><sub>1</sub> is to be determined via simulations or experiments. This is demonstrated in the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref> and results in <italic>c</italic><sub>1</sub> &#x0003D; 1. The visualization of this law is shown in <xref ref-type="fig" rid="F5">Figure 5</xref>. Note that the middle layer shows the special case for straight motion from Equation (1). By introducing the index <italic>k</italic> specifying the extreme poses, references for a gait can be generated recursively by</p>
<disp-formula id="E16"><label>(15)</label><mml:math id="M37"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>f</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo>&#x000AC;</mml:mo><mml:msub><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>f</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where &#x000AC;<bold><italic>f</italic></bold> is the logical negation of <bold><italic>f</italic></bold>.</p>
<p>The gait law generates reference angles for the robot, depending on step length (forward velocity) <italic>q</italic><sub>1</sub> and steering factor (rotational velocity) <italic>q</italic><sub>2</sub>. These two generalized coordinates define the so-called velocity space of trotting gaits, since each pair (<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) describes another trotting gait. If <italic>q</italic><sub>1</sub> and <italic>q</italic><sub>2</sub> remain constant during gait, theoretically, the orientation of the fixed feet does not change. However, the derivation of this law did not examine whether the fixed feet also remain in position when switching poses. Also, the robot should have the ability to change its gait over time and should not always run the same circle with the same velocity. Therefore, <italic>q</italic><sub>1</sub> and <italic>q</italic><sub>2</sub> must vary. The next section examines whether this law provides useful references, despite neglecting the feet positions.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p>Visualization of the velocity space defined the by general gait law from Equation (14) for <italic>q</italic><sub>2</sub> &#x02208; {&#x02212;0.5, &#x02212;0.25, 0, 0.25, 0.5}.</p></caption>
<graphic xlink:href="frobt-07-00087-g0005.tif"/>
</fig>
</sec>
</sec>
<sec>
<title>3.2. Experimental Validation</title>
<p>Within an experiment, it shall be analyzed whether the orientations of fixed feet actually remain constant during a cycle or ignoring the feet positions leads to significant discrepancies. The gait was slowed down (<italic>t</italic><sub>move</sub> &#x0003D; 10 s) as highly dynamic changes smear the camera images and the tags can no longer be detected by image processing. <xref ref-type="fig" rid="F6">Figure 6</xref> shows an exemplary cycle of a gait for <inline-formula><mml:math id="M38"><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>8</mml:mn><mml:msup><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x02218;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula> and <italic>q</italic><sub>2</sub> &#x0003D; &#x02212;0.5. The figure shows the mean values and standard deviations of five experiments in total. For the detailed processing steps in the evaluation, refer to the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>. The upper graph shows the progression of the bending angles &#x003B1; and the lower graph shows the progression of the orientations &#x003C6; and &#x003B5; during a cycle. Initially, all feet are fixed (pose 1a). The bending angle of the front left (red line) and the rear right leg (dark blue line) differs significantly from the reference at this point in time because the robot is forced into this pose by the fixation of its feet. After about five percent of the cycle time, the front left and rear right foot are released (pose 1b). At this point, a jump in the bending angle of the two corresponding legs can be observed&#x02014;the angles jump to their reference. The same effect can be observed when changing the feet fixation in the middle of the cycle (pose 2a &#x02192; 2b). From this observation, it can be deduced that the robot cannot match the reference generated by the gait law because the closed kinematic chain of its parallel structure prevents it from adopting the specified bending angles. The &#x003C6; graph shows that the orientations of the fixed feet remain nearly constant as assumed when deriving the gait law. An exception is the rear left foot (blue line): its orientation changes significantly during the fixed phase. As already seen in Schiller et al. (<xref ref-type="bibr" rid="B21">2020</xref>), the suction cups of the robot have a certain margin of rotation. This must now be utilized; otherwise, the feet would have to move (which is not possible because of the fixation). In summary, it can be concluded from the experiment in <xref ref-type="fig" rid="F6">Figure 6</xref> that the gait law provides references which cannot be fully realized due to the closed kinematic chain, but nevertheless lead to the desired behavior.</p>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p>Simulation and experiment of one gait cycle for <italic>q</italic> &#x0003D; [80&#x000B0; &#x02212; 0.5] and <italic>c</italic><sub>1</sub> &#x0003D; 1. Theoretical values (according to the gait law) are illustrated with light dotted lines. Simulated values are illustrated with light solid lines. Experimental values are illustrated as solid lines together with an area indicating the standard deviation. In the orientation plot and the poses shown above, lines representing unfixed feet/legs are illustrated as dashed lines. The switch of fixation happens at half cycle time. Color code as follows: front left leg (red), front right leg (dark red), torso (orange), rear left leg (blue), rear right leg (dark blue), robot orientation (green).</p></caption>
<graphic xlink:href="frobt-07-00087-g0006.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<title>4. Approximating the Direct Kinematics</title>
<p>The next step is to determine how the robot behaves in the task space for each point (<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) in the velocity space&#x02014;that is, how it moves per cycle and by how much it rotates. Thus, the bivariate polynomial &#x00394;<italic>x</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) is searched for which approximates the transformation of the velocity space into the task space (compare <xref ref-type="fig" rid="F1">Figure 1</xref>). The form of the polynomial is defined as follows:</p>
<disp-formula id="E17"><label>(16)</label><mml:math id="M39"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>x</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>x</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>y</mml:mi></mml:mtd></mml:mtr><mml:mtr></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>x</mml:mi><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>y</mml:mi><mml:mo>:</mml:mo><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:munder class="msub"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:munder></mml:mstyle><mml:msub><mml:mrow><mml:mi>a</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>,</mml:mo><mml:mi>j</mml:mi></mml:mrow></mml:msub><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mi>i</mml:mi></mml:mrow></mml:msubsup><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow><mml:mrow><mml:mi>j</mml:mi></mml:mrow></mml:msubsup><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>In order to identify the coefficients, the velocity space is gridded and for each set of values the motion of the robot is measured. This can either be done experimentally or the simulation model is used and the movement is simulated. The result of both approaches depends on the way they are implemented. Therefore, the influencing factors must be identified and their value must be meaningfully determined. <xref ref-type="table" rid="T2">Table 2</xref> summarizes the conditions under which the following experiments or simulation were carried out. A detailed discussion of the experimental conditions can be found in the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>.</p>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p>Influencing factors on simulation and experiment.</p></caption>
<table frame="hsides" rules="groups">
<tbody><tr>
<td valign="top" align="left">Initial pose</td>
<td valign="top" align="left"><inline-formula><mml:math id="M40"><mml:msub><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, <italic>f</italic><sub>0</sub> &#x0003D; [1, 0, 0, 1]</td>
</tr>
<tr>
<td valign="top" align="left">Number of cycles</td>
<td valign="top" align="left">min. <italic>n</italic><sub>cyc</sub> &#x0003D; 2, drop initial cycle</td>
</tr>
<tr>
<td valign="top" align="left">Dimensions of robot</td>
<td valign="top" align="left">&#x02113;<sub>leg</sub> &#x0003D; 9.1 cm, &#x02113;<sub>torso</sub> &#x0003D; 10.3 cm</td>
</tr>
<tr>
<td valign="top" align="left">Weighting parameters (only simulation)</td>
<td valign="top" align="left"><italic>f</italic><sub><italic>l</italic></sub>, <italic>f</italic><sub><italic>o</italic></sub>, <italic>f</italic><sub><italic>a</italic></sub> &#x0003D; 89, 10, 5.9</td>
</tr>
<tr>
<td valign="top" align="left">Model order of <italic>&#x00394;x</italic>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>)</td>
<td valign="top" align="left">order = 2</td>
</tr>
</tbody>
</table>
</table-wrap>
<p><xref ref-type="fig" rid="F7">Figure 7</xref> shows the results of simulation (<xref ref-type="fig" rid="F7">Figure 7A</xref>) and experiment (<xref ref-type="fig" rid="F7">Figure 7B</xref>). In both cases, the velocity space was gridded with <italic>q</italic><sub>1</sub> &#x02208; {50, 60, &#x022EF;&#x02009;, 90} and <italic>q</italic><sub>2</sub> &#x02208; {&#x02212;0.5, &#x02212;0.3, &#x022EF;0.5} and a measurement was performed for each grid point. A simplified representation of the extreme poses of the resulting gait illustrates the movement. The tip of the torso of the initial pose is always at the position (<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) and the orientation of the robot faces upwards. The resulting translation [&#x00394;<italic>x</italic>&#x00394;<italic>y</italic>]<sup>&#x022A4;</sup> per cycle is indicated by a red arrow. Besides, the orientation of the robot after a cycle is represented by a green line. The heat map in the background shows the resulting rotation &#x00394;&#x003B5;(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) per cycle. The numerical value of this function is noted in a green box below the individual measurements. In the figure of the experiment (<xref ref-type="fig" rid="F7">Figure 7B</xref>), the standard deviation of the translation is shown as a red ellipse with the corresponding semi axes. The standard deviation of the rotation is visualized as a light green triangle with an opening angle of 2std(&#x003B4;&#x003B5;). The blue arrow shows the polynomial fit of the translation and the blue line the polynomial fit of the rotation at the corresponding grid point. A detailed view of a single experiment is shown in <xref ref-type="fig" rid="F8">Figure 8</xref>.</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p>Resulting experimental gaits according to the gait law in Equation (14) for a variation of step length and steering factor. The rows each have a constant step length <italic>q</italic><sub>1</sub> and the columns a constant steering factor <italic>q</italic><sub>2</sub>. Each frame shows the resulting motion of one cycle with the pattern corresponding to (<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>). Below each frame, the rotation per cycle in degrees &#x00394;&#x003B5; is stated. The heat map in the background shows the polynomial fit of &#x00394;&#x003B5;. The bold red vector pointing from the initial position of each individual gait to its end position is called [&#x00394;<italic>x</italic>&#x00394;<italic>y</italic>]<sup>&#x022A4;</sup>. <bold>(A)</bold> Simulation (89, 10, 5.9) and <bold>(B)</bold> experiment.</p></caption>
<graphic xlink:href="frobt-07-00087-g0007.tif"/>
</fig>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p>Detailed view of resulting experimental gait according to the gait law for <inline-formula><mml:math id="M43"><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>9</mml:mn><mml:msup><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x02218;</mml:mo></mml:mrow></mml:msup><mml:mo>,</mml:mo><mml:mn>0</mml:mn><mml:mo>.</mml:mo><mml:mn>3</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>.</p></caption>
<graphic xlink:href="frobt-07-00087-g0008.tif"/>
</fig>
<p>In contrast to the experiment in section 3.2, in <xref ref-type="fig" rid="F7">Figure 7</xref>, a clear deviation between simulated and experimental results can be observed. The resulting rotation and the shift in transverse direction are noticeably higher for all grid points. The simulation model does not reproduce friction effects or external disturbances, such as the influence of the supply tubes. In the previous experiment (from section 3.2), these effects played a subordinate role because of the reduced speed and the relatively short distance traveled. This experiment was executed at full speed (<italic>t</italic><sub>move</sub> &#x0003D; 1 s); thus, friction has a significantly larger influence. Furthermore, we can observe that the experiment is not symmetrical, meaning that swapping the sign of <italic>q</italic><sub>2</sub> does not yield to mirrored behavior [&#x00394;<bold><italic>x</italic></bold>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>)&#x02241;&#x02212;&#x00394;<bold><italic>x</italic></bold>(<italic>q</italic><sub>1</sub>, &#x02212;<italic>q</italic><sub>2</sub>)]. This can be attributed to manufacturing inaccuracies of the robot and an optimizable pressure-bending angle calibration. The calibration procedure and associated difficulties are also discussed in the <xref ref-type="supplementary-material" rid="SM1">Supplementary Material</xref>. A final observation is that, in the experiment, the resulting rotation decreases for a large step length <italic>q</italic><sub>1</sub>. This is different to the simulation, where the resulting rotation increases steadily with increasing step length. For large values of <italic>q</italic><sub>1</sub> and <italic>q</italic><sub>2</sub>, the gait law prescribes relatively large reference angles. If these are out of range of calibration of the respective actuator, the reference pressure is saturated to prevent damage to the robot. Exactly this effect occurs in the upper part (<inline-formula><mml:math id="M41"><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x02265;</mml:mo><mml:mn>8</mml:mn><mml:msup><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x02218;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula>) of <xref ref-type="fig" rid="F7">Figure 7B</xref>. Therefore, the poses here deviate much more from their simulated counterparts in <xref ref-type="fig" rid="F7">Figure 7A</xref> than in the lower part of the figure (<inline-formula><mml:math id="M42"><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>&#x0003C;</mml:mo><mml:mn>8</mml:mn><mml:msup><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x02218;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula>). Apart from the &#x0201C;over-simulation&#x0201D; and the missing saturation effect, the simulation reproduces the behavior very well. It can be seen as the behavior of a robot that has been perfectly manufactured and calibrated, consisting of actuators as robust as saturation is no longer necessary, whose feet have the optimum torsional stiffness, and where all friction effects have been reduced to a minimum. For the implementation of the Gait Pattern Generator, however, the actual interest focuses on the polynomial fit of the motion. In most cases, the second-order fit shown in blue matches the measurement or is at least within the standard deviation. The coefficients for the polynomial &#x00394;<bold><italic>x</italic></bold>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>) for Equation (16) are listed in <xref ref-type="table" rid="T3">Table 3</xref>.</p>
<table-wrap position="float" id="T3">
<label>Table 3</label>
<caption><p>Coefficients of the bivariate polynomial fit of the motion per cycle &#x00394;<italic>x</italic> for the experiment.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold><italic>f</italic></bold><bold>(<italic>q</italic><sub>1</sub>, <italic>q</italic><sub>2</sub>)</bold> <bold>&#x0003D; </bold></th>
<th valign="top" align="center"><bold><italic>a</italic></bold><bold><sub>0, 0</sub></bold></th>
<th valign="top" align="center"><bold><italic>a</italic></bold><sub>1, 0</sub>&#x000B7;<italic>q</italic><sub>1</sub></th>
<th valign="top" align="center"><bold><italic>a</italic></bold><bold><sub>0, 1</sub>&#x000B7;<italic>q</italic><sub>2</sub></bold></th>
<th valign="top" align="center"><bold><inline-formula><mml:math id="M52"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>.</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msubsup></mml:mrow></mml:math></inline-formula></bold></th>
<th valign="top" align="center"><bold><inline-formula><mml:math id="M53"><mml:mrow><mml:msub><mml:mi>a</mml:mi><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>.</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msubsup><mml:mi>q</mml:mi><mml:mn>2</mml:mn><mml:mn>2</mml:mn></mml:msubsup></mml:mrow></mml:math></inline-formula></bold></th>
<th valign="top" align="center"><bold><italic>a</italic></bold><sub>1, 1</sub>&#x000B7;<italic>q</italic><sub>1</sub><italic>q</italic><bold><sub>2</sub></bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">&#x00394;&#x003B5; (&#x000B0;)</td>
<td valign="top" align="center">5.4154</td>
<td valign="top" align="center">&#x02212;0.0457</td>
<td valign="top" align="center">&#x02212;44.1944</td>
<td valign="top" align="center">&#x02212;0.0006</td>
<td valign="top" align="center">0.778</td>
<td valign="top" align="center">&#x02212;0.0832</td>
</tr>
<tr>
<td valign="top" align="left">&#x00394;<italic>x</italic> (cm)</td>
<td valign="top" align="center">0.1106</td>
<td valign="top" align="center">0.2225</td>
<td valign="top" align="center">11.4146</td>
<td valign="top" align="center">&#x02212;0.0008</td>
<td valign="top" align="center">&#x02212;17.5133</td>
<td valign="top" align="center">&#x02212;0.1213</td>
</tr>
<tr>
<td valign="top" align="left">&#x00394;<italic>y</italic> (cm)</td>
<td valign="top" align="center">1.9498</td>
<td valign="top" align="center">&#x02212;0.0682</td>
<td valign="top" align="center">&#x02212;3.6997</td>
<td valign="top" align="center">0.0004</td>
<td valign="top" align="center">&#x02212;0.0333</td>
<td valign="top" align="center">&#x02212;0.0580</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s5">
<title>5. Gait Pattern Generator</title>
<p>The last step to control the robot&#x00027;s position is the calculation of the optimal tuple <bold><italic>q</italic></bold><sup>&#x0002A;</sup> to move from the current position <bold><italic>x</italic></bold> closer to a given target position <inline-formula><mml:math id="M44"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> (compare <xref ref-type="fig" rid="F1">Figure 1</xref>).</p>
<sec>
<title>5.1. Derivation</title>
<p>As derived in section 4, the robot turns around &#x00394;&#x003B5; and moves by [&#x00394;<italic>x</italic>&#x00394;<italic>y</italic>]<sup>&#x022A4;</sup> with each cycle. Therefore, the position of the (<italic>n</italic>&#x0002B;1)th pose given in the coordinate system of the <italic>n</italic>th pose can be described by</p>
<disp-formula id="E18"><label>(17)</label><mml:math id="M45"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mi>x</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mrow><mml:mo>[</mml:mo> <mml:mrow><mml:mtable><mml:mtr><mml:mtd><mml:mrow><mml:mo>&#x00394;</mml:mo><mml:mi>x</mml:mi><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mrow><mml:mo>&#x00394;</mml:mo><mml:mi>y</mml:mi><mml:mo stretchy='false'>(</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:mrow> <mml:mo>]</mml:mo></mml:mrow><mml:mtext>&#x02009;</mml:mtext><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where the index <italic>n</italic> starts from 0 indicating the initial pose and accordingly the subsequent poses. If step length <italic>q</italic><sub>1</sub> and steering factor <italic>q</italic><sub>2</sub> do not change during gait (<bold><italic>q</italic></bold> &#x0003D; const.), the translation and rotation per cycle will remain the same. Let us assume that it would be possible to reach the target position in a finite number of cycles without changing the gait. Accordingly, the vector <inline-formula><mml:math id="M46"><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub></mml:math></inline-formula> pointing from the <italic>n</italic>th pose to the target, can be described in the coordinate system of the <italic>n</italic>th pose as a function of the target vector of the (<italic>n</italic> &#x02212; 1)th pose:</p>
<disp-formula id="E19"><label>(18)</label><mml:math id="M47"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:mmultiscripts><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mprescripts/><mml:none/><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:mmultiscripts><mml:msub><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant='bold-italic'><mml:mi>R</mml:mi></mml:mstyle><mml:mo stretchy='false'>(</mml:mo><mml:mo>&#x02212;</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msub><mml:mo>&#x02212;</mml:mo><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x02212;</mml:mo><mml:mn>1</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mi>x</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msub></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <italic>R</italic> &#x02208; &#x0211D;<sup>2 &#x000D7; 2</sup> is the rotation matrix. Since for multiple rotations around the same axis <bold><italic>R</italic></bold><sup><italic>k</italic></sup>(<italic>x</italic>) &#x0003D; <bold><italic>R</italic></bold>(<italic>kx</italic>) applies, this can be formulated explicitly:</p>
<disp-formula id="E20"><label>(19)</label><mml:math id="M48"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mi>n</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>R</mml:mi></mml:mstyle><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mi>n</mml:mi><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>-</mml:mo><mml:mstyle displaystyle="true"><mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mo>&#x02211;</mml:mo></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:munderover></mml:mstyle><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mi>i</mml:mi><mml:mo>&#x00394;</mml:mo><mml:mi>&#x003B5;</mml:mi></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mo>[</mml:mo><mml:mrow><mml:mtable style="text-align:axis;" equalrows="false" columnlines="none none none none none none none none none" equalcolumns="false" class="array"><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mo>&#x00394;</mml:mo><mml:mi>y</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow><mml:mo>]</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p><xref ref-type="fig" rid="F9">Figure 9</xref> visualizes these formulas, whereby the opacity of poses that lie further in the future decreases. Now, the distance <italic>d</italic><sub><italic>n</italic></sub> to the target position <inline-formula><mml:math id="M49"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> after <italic>n</italic> cycles of trotting with the pattern corresponding to the gait law <inline-formula><mml:math id="M50"><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>&#x003B1;</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> can be calculated with</p>
<disp-formula id="E21"><label>(20)</label><mml:math id="M51"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:msub><mml:mi>d</mml:mi><mml:mi>n</mml:mi></mml:msub><mml:msup><mml:mo stretchy='false'>(</mml:mo><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mn>0</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant='bold-italic'><mml:mi>x</mml:mi></mml:mstyle><mml:mo stretchy='false'>)</mml:mo><mml:mo>=</mml:mo><mml:mo>&#x0007C;</mml:mo><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mi>n</mml:mi><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msub><mml:msub><mml:mo>&#x0007C;</mml:mo><mml:mn>2</mml:mn></mml:msub><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>For a given target, the optimal tuple for <italic>n</italic> cycles can then be calculated as the minimum of the distance function</p>
<disp-formula id="E22"><label>(21)</label><mml:math id="M54"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:msubsup><mml:mi>q</mml:mi><mml:mn>1</mml:mn><mml:mo>&#x02217;</mml:mo></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mi>q</mml:mi><mml:mn>2</mml:mn><mml:mo>&#x02217;</mml:mo></mml:msubsup><mml:mo>=</mml:mo><mml:munder><mml:mrow><mml:mi>min</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mi>q</mml:mi><mml:mn>1</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:msub><mml:mi>q</mml:mi><mml:mn>2</mml:mn></mml:msub><mml:mo>&#x02208;</mml:mo><mml:mi mathvariant='script'>Q</mml:mi></mml:mrow></mml:munder><mml:msubsup><mml:mi>d</mml:mi><mml:mi>n</mml:mi><mml:mn>2</mml:mn></mml:msubsup><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mn>0</mml:mn></mml:msub><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant='bold-italic'><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>,</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>where <inline-formula><mml:math id="M100"><mml:mrow><mml:mstyle mathvariant="-tex-caligraphic"><mml:mi>Q</mml:mi></mml:mstyle></mml:mrow></mml:math></inline-formula> describes the set of feasible values for <italic>q</italic><sub>1</sub> and <italic>q</italic><sub>2</sub>, respectively. Note that the vector <inline-formula><mml:math id="M55"><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi>R</mml:mi></mml:mrow><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub></mml:math></inline-formula> describes the target position in the coordinate system of the initial pose. In the test bed with an external camera measurement system, this vector must be calculated from the measurements of the current pose <sup><italic>O</italic></sup><italic>x</italic> and the target position <inline-formula><mml:math id="M56"><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:mi>O</mml:mi></mml:mrow></mml:msup><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula>:</p>
<disp-formula id="E23"><label>(22)</label><mml:math id="M57"><mml:mtable class="eqnarray" columnalign="left"><mml:mtr><mml:mtd><mml:mrow><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mrow><mml:msup><mml:mi>R</mml:mi><mml:mrow><mml:mo stretchy='false'>(</mml:mo><mml:mn>0</mml:mn><mml:mo stretchy='false'>)</mml:mo></mml:mrow></mml:msup></mml:mrow></mml:msup><mml:msub><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:mn>0</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:mstyle mathvariant='bold-italic'><mml:mi>R</mml:mi></mml:mstyle><mml:mo stretchy='false'>(</mml:mo><mml:msup><mml:mo>&#x02212;</mml:mo><mml:mi>O</mml:mi></mml:msup><mml:mi>&#x003B5;</mml:mi><mml:mo stretchy='false'>)</mml:mo><mml:mrow><mml:mo>(</mml:mo><mml:mrow><mml:msup><mml:mrow><mml:mtext>&#x000A0;</mml:mtext></mml:mrow><mml:mi>O</mml:mi></mml:msup><mml:mstyle mathvariant='bold-italic'><mml:mover accent='true'><mml:mi>x</mml:mi><mml:mo>&#x000AF;</mml:mo></mml:mover></mml:mstyle><mml:msup><mml:mo>&#x02212;</mml:mo><mml:mi>O</mml:mi></mml:msup><mml:mstyle mathvariant='bold-italic'><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo>)</mml:mo></mml:mrow><mml:mtext>&#x000A0;</mml:mtext><mml:mo>.</mml:mo></mml:mrow></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula>
<p>However, the target measurement could also happen with a camera directly mounted on the robot without having to reformulate the equations, as the Gait Pattern Generator demands the target position in the robot coordinate system.</p>
<fig id="F9" position="float">
<label>Figure 9</label>
<caption><p>Visualization of Equations (17)&#x02013;(22). By using the approximation of the direct kinematics &#x00394;<italic>x</italic>, the approximated position in Cartesian space after <italic>n</italic> cycles can be easily calculated. In the figure, the opacity decreases with increasing cycle number.</p></caption>
<graphic xlink:href="frobt-07-00087-g0009.tif"/>
</fig>
<p><xref ref-type="fig" rid="F10">Figure 10</xref> shows a visualization of the distance function <italic>d</italic><sub><italic>n</italic></sub> for different target points and the patterns corresponding to its minimum. In <xref ref-type="fig" rid="F10">Figure 10A</xref>, the target is located slanted right in front of the robot and a planning horizon of <italic>n</italic> &#x0003D; 1 is considered. The minimum of the distance function is at full step length <inline-formula><mml:math id="M58"><mml:msub><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mn>9</mml:mn><mml:msup><mml:mrow><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mo>&#x02218;</mml:mo></mml:mrow></mml:msup></mml:math></inline-formula> and a medium steering factor <italic>q</italic><sub>2</sub> &#x0003D; 0.3. The resulting reference allows the robot to move precisely to the front right. In <xref ref-type="fig" rid="F10">Figure 10B</xref>, the target is located behind the robot. With a planning horizon of <italic>n</italic> &#x0003D; 1, the minimum distance results in the smallest allowed step length and steering. However, this solution does not bring the robot closer to the target, but it is the solution that minimizes the increase in distance. There is simply no gait pattern that can bring the robot closer to the target within only one cycle. For this reason, the planning horizon in <xref ref-type="fig" rid="F10">Figure 10C</xref> was increased to <italic>n</italic> &#x0003D; 4. The minimum of <italic>d</italic><sub><italic>n</italic> &#x0003D; 4</sub> is now at maximum step length and maximum steering factor for the same target position. The resulting reference leads to the desired behavior: the tightest possible right turn.</p>
<fig id="F10" position="float">
<label>Figure 10</label>
<caption><p>Evaluation of the distance function <italic>d</italic><sub><italic>n</italic></sub> for different target positions <inline-formula><mml:math id="M59"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> and planning horizons <italic>n</italic>. The lowest values are represented by green and the highest values by red color. The lower image always shows the resulting simulated gait for <italic>n</italic> cycles, corresponding to the minimum distance (marked by a purple circle). Simulations were initialized with: <sup><italic>O</italic></sup><italic>x</italic> &#x0003D; (0, 0), <sup><italic>O</italic></sup>&#x003B5; &#x0003D; 0&#x000B0;, &#x003B1;<sub>0</sub> &#x0003D; [90 0&#x02212;90 90 0], <italic>f</italic><sub>0</sub> &#x0003D; [1 0 0 1]. <bold>(A)</bold> Planning horizon <italic>n</italic> &#x0003D; 1 for target at <inline-formula><mml:math id="M60"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mn>35</mml:mn><mml:mo>,</mml:mo><mml:mo>-</mml:mo><mml:mn>20</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, <bold>(B)</bold> <italic>n</italic> &#x0003D; 1 for target at <inline-formula><mml:math id="M61"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>35</mml:mn><mml:mo>,</mml:mo><mml:mo>-</mml:mo><mml:mn>20</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>, and <bold>(C)</bold> <italic>n</italic> &#x0003D; 4 for target at <inline-formula><mml:math id="M62"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mo>=</mml:mo><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>-</mml:mo><mml:mn>35</mml:mn><mml:mo>,</mml:mo><mml:mo>-</mml:mo><mml:mn>20</mml:mn></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula>.</p></caption>
<graphic xlink:href="frobt-07-00087-g0010.tif"/>
</fig>
</sec>
<sec>
<title>5.2. Implementation</title>
<p>As seen in the previous section, the distance to the target cannot always be reduced in just one cycle. The simplest strategy to solve this problem is to incrementally increase the planning horizon as long as the minimum possible distance to the target within the next <italic>n</italic> cycles <italic>d</italic><sub><italic>n</italic>, min</sub> is larger than the current distance <italic>d</italic><sub>0</sub>. Furthermore, a strategy for transitioning between different gait patterns is required. So far, all simulations and experiments have only studied the motion of consistent gaits (<bold><italic>q</italic></bold> &#x0003D; const.). However, the pattern generator should be able to dynamically change both step length and steering factor. The easiest way to make this possible is to assume that the robot is able to switch between any gait pattern, which means to allow all possible references regardless of the current pose. Here, it is questionable whether the output <bold><italic>q</italic></bold><sup>&#x0002A;</sup> actually minimizes the distance to the target or whether another solution might be more suitable, since the calculation in most cases will be based on a different initial pose. Thus, it can be assumed that a different <bold><italic>q</italic></bold><sup>&#x0002A;</sup> would be calculated when considering the current pose of the robot. But by feeding back the current position after each step and a recalculation of the reference, reaching the target position can still be ensured. Algorithm 1 implements exactly this strategy. <xref ref-type="fig" rid="F11">Figure 11A</xref> shows the procedure as a block diagram. The sampling rate of this control loop depends on the length of half a cycle and is slightly less than 1 Hz. The Gait Pattern Generator is paused as soon as the actual distance to the target is less than a defined value &#x003F5; &#x0003D; 5 cm. For better comprehension, <xref ref-type="fig" rid="F11">Figure 11B</xref> shows the low-level control architecture of the robotic system for a single actuator. Note that the simulation model mimics the coupled behavior of six of these blocks.</p>
<table-wrap position="float">
<label>Algorithm 1</label>
<caption><p><bold>Gait Pattern Generator</bold>.</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr><td align="left" valign="top"> 1: &#x000A0;<bold>procedure</bold> <sc>Generate reference </sc>(<inline-formula><mml:math id="M67"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula>) </td></tr>
<tr><td align="left" valign="top"> 2: &#x000A0; <italic>n</italic> &#x02190; 1 &#x022B3; start with planning horizon of 1 cycle </td></tr>
<tr><td align="left" valign="top"> 3: &#x000A0; <inline-formula><mml:math id="M68"><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mtext>min</mml:mtext></mml:mrow></mml:msub><mml:mo>&#x02190;</mml:mo><mml:munder class="msub"><mml:mrow><mml:mo class="qopname">min</mml:mo></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:munder><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo class="qopname">&#x00304;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> &#x022B3; minimal distance to goal after 1 cycle </td></tr>
<tr><td align="left" valign="top"> 4: &#x000A0; <bold>while</bold> <italic>d</italic><sub>0</sub> &#x0003E; <italic>d</italic><sub><italic>n</italic>, min</sub> <bold>do</bold> &#x022B3; stop if we get closer to goal </td></tr>
<tr><td align="left" valign="top"> 5: &#x000A0;&#x000A0;&#x000A0; <italic>n</italic> &#x02190; <italic>n</italic> &#x0002B; 1 &#x022B3; increase planning horizon </td></tr>
<tr><td align="left" valign="top"> 6: &#x000A0;&#x000A0;&#x000A0; <inline-formula><mml:math id="M69"><mml:msubsup><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi><mml:mo>,</mml:mo><mml:mtext>min</mml:mtext></mml:mrow></mml:msub><mml:mo>&#x02190;</mml:mo><mml:munder class="msub"><mml:mrow><mml:mo class="qopname">min</mml:mo></mml:mrow><mml:mrow><mml:mi>q</mml:mi></mml:mrow></mml:munder><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>n</mml:mi></mml:mrow></mml:msub><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle></mml:mrow><mml:mo class="qopname">&#x00304;</mml:mo></mml:mover><mml:mo>,</mml:mo><mml:mo>&#x00394;</mml:mo><mml:mstyle mathvariant="bold-italic"><mml:mi>x</mml:mi></mml:mstyle><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mstyle mathvariant="bold-italic"><mml:mi>q</mml:mi></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> &#x022B3; minimal distance to goal after <italic>n</italic> cycles </td></tr>
<tr><td align="left" valign="top"> 7: &#x000A0; <bold>end</bold> <bold>while</bold> </td></tr>
<tr><td align="left" valign="top"> 8: &#x000A0; <inline-formula><mml:math id="M70"><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup><mml:mo>&#x02190;</mml:mo><mml:mo>-</mml:mo><mml:mtext>sign</mml:mtext><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup></mml:math></inline-formula> &#x022B3; switch sign of step length </td></tr>
<tr><td align="left" valign="top"> 9: &#x000A0; <inline-formula><mml:math id="M71"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>&#x02190;</mml:mo><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mo>(</mml:mo><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup><mml:mo>,</mml:mo><mml:msubsup><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn><mml:mo>,</mml:mo><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mo>*</mml:mo></mml:mrow></mml:msubsup><mml:mo>)</mml:mo></mml:math></inline-formula> &#x022B3; reference according to Eq. (14) </td></tr>
<tr><td align="left" valign="top"> 10: &#x000A0; <italic>f</italic><sub><italic>k</italic></sub> &#x02190; &#x000AC; <italic>f</italic><sub><italic>k</italic> &#x02212; 1</sub> &#x022B3; switch fixation </td></tr>
<tr><td align="left" valign="top"> 11: &#x000A0; <bold>return</bold> <inline-formula><mml:math id="M72"><mml:msub><mml:mrow><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub><mml:mo>,</mml:mo><mml:mtext>&#x000A0;</mml:mtext><mml:msub><mml:mrow><mml:mi>f</mml:mi></mml:mrow><mml:mrow><mml:mi>k</mml:mi></mml:mrow></mml:msub></mml:math></inline-formula> &#x022B3; next reference </td></tr>
<tr><td align="left" valign="top"> 12: &#x000A0;<bold>end procedure</bold></td></tr> 
</tbody>
</table>
</table-wrap>
<fig id="F11" position="float">
<label>Figure 11</label>
<caption><p>Control architecture of the Gait Pattern Generator. <bold>(A)</bold> For a given target position <inline-formula><mml:math id="M63"><mml:mover accent="true"><mml:mrow><mml:mi>x</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> and the position of the robot <italic>x</italic>, the optimal step length <italic>q</italic><sub>1</sub> and steering factor <italic>q</italic><sub>2</sub> are calculated and then mapped into reference bending angles <inline-formula><mml:math id="M64"><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x000B7;</mml:mo></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:math></inline-formula> by the gait law, which are then fed into the robotic system. In <bold>(B)</bold>, the block diagram of a single actuator is shown. The reference bending angle <inline-formula><mml:math id="M65"><mml:mover accent="true"><mml:mrow><mml:mi>&#x003B1;</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> is mapped by a calibration function <italic>p</italic>(&#x003B1;) into a reference pressure <inline-formula><mml:math id="M66"><mml:mover accent="true"><mml:mrow><mml:mi>p</mml:mi></mml:mrow><mml:mo>&#x00304;</mml:mo></mml:mover></mml:math></inline-formula> (feed forward term), which in turn is corrected by a saturated PI controller (feedback term). The reference pressure is then fed into the inner loop, where a PID controller generates the control input <italic>u</italic> for a proportional valve, which causes the pressure <italic>p</italic> to be applied to the actuator.</p></caption>
<graphic xlink:href="frobt-07-00087-g0011.tif"/>
</fig>
</sec>
<sec>
<title>5.3. Experiments</title>
<p>In <xref ref-type="fig" rid="F12">Figure 12A</xref>, the simulation for a list of four different target positions is shown. The next target position becomes active when <italic>d</italic><sub>0</sub> &#x0003C; &#x003F5; applies, i.e., the robot has almost reached the current target. In <xref ref-type="fig" rid="F12">Figure 12B</xref>, the corresponding course of <bold><italic>q</italic></bold> is shown. It is clear to see that both values change over time. This proves that the robot can transition between different gait patterns, at least in the simulation. The same situation is now studied in the experiment shown in <xref ref-type="fig" rid="F12">Figure 12C</xref> where the tracks of the tags of five independent experiments are overlaid. The difference between the right and left curves is significant. While the right-hand curves have a relatively small radius, the radii of the left-hand curves are much larger. This difference has already been noticed in the experiment from <xref ref-type="fig" rid="F7">Figure 7</xref>; here, it is especially pronounced. The difference is due to manufacturing inaccuracies and pressure angle calibration, as discussed in section 4. The lacking ability to control the exact time of fixation of the feet also plays a role: since the strong actuation of a leg also deforms the suction cup, it may no longer be able to suck, despite negative pressure is applied. This effect is most prominent in the rear right foot. All other feet usually fix according to plan. However, the delayed fixation of the rear right leg supports a fast execution of the right turn (see <xref ref-type="supplementary-material" rid="SM2">Supplementary Video</xref>). <xref ref-type="fig" rid="F12">Figure 12D</xref> shows the mean values and standard deviations of the step size <italic>q</italic><sub>1</sub> (blue) and the steering factor <italic>q</italic><sub>2</sub> (red). Here, the mean value was calculated over the number of steps. The different number of steps required results in a high standard deviation in the region of the four target positions. In order to reach the final target position, 45 steps were required in the fastest run and 51 steps in the worst run. The course of the mean value is similar to the simulation in <xref ref-type="fig" rid="F12">Figure 12B</xref> and is not constant. Nevertheless, in all cases, the robot reaches the final goal and always follows a similar path. This proves that also the physical robot can transition between different gait patterns and the reproducibility of the experiments to a certain extent. <xref ref-type="fig" rid="F12">Figures 12E,F</xref> show the results of the same experiment now performed with the robot from Seibel and Schiller (<xref ref-type="bibr" rid="B22">2018</xref>). The robot is basically the same, but is a little bigger (body length/span: 15/25). For the experiment, the same approximation of the direct kinematics was used (see <xref ref-type="table" rid="T3">Table 3</xref>), and still the robot shows the desired behavior. This shows that &#x00394;<italic>x</italic> only needs to reflect the qualitative trend. The exact values are not particularly important because as <xref ref-type="fig" rid="F12">Figures 12B,D,F</xref> show, the step length is most of the time at the maximum and therefore the goal cannot be reached within one cycle anyway.</p>
<fig id="F12" position="float">
<label>Figure 12</label>
<caption><p>Simulation and experiment with the Gait Pattern Generator in action. In <bold>(A)</bold>, the simulation of gait for a list of four target positions is shown. In <bold>(B)</bold>, the course of <italic>q</italic><sub>1</sub> and <italic>q</italic><sub>2</sub> is plotted over the number of steps. In <bold>(C,D)</bold>, the corresponding plots are shown for the experiment with the small prototype. <bold>(E,F)</bold> Show the experiment with the large prototype. For the experiments, the color code is as follows: front left foot (red), front right foot (dark red), tip of the torso (orange), torso&#x00027;s end (dark orange), rear left foot (blue), and rear right foot (dark blue).</p></caption>
<graphic xlink:href="frobt-07-00087-g0012.tif"/>
</fig>
</sec>
</sec>
<sec sec-type="conclusions" id="s6">
<title>6. Conclusion</title>
<p>The aim of this work was position control of the gecko-inspired soft robot from Schiller et al. (<xref ref-type="bibr" rid="B20">2019</xref>) in Cartesian space. The solution to this complex task is based on two major simplifications: (i) the formulation of a gait law to reduce the state space of the robot from nine to two dimensions and (ii) the approximation of the direct kinematics to allow a fast evaluation. The gait law restricts the choice of possible references extremely; e.g., only specific trotting gaits are allowed. In this work, it was successfully examined whether a position control system can function with this limitations. However, it has not been investigated whether a larger permitted choice of references leads to better results. In fact, it is possible that the introduction of additional generalized coordinates or a different gait law may lead to a better performance of the robot. Furthermore, neither frictional effects nor any dynamics were considered. Also, by approximating the direct kinematics in the polynomial &#x00394;<italic>x</italic>, an assumption is made which is fulfilled only in very few cases (compare section 5.2). Instead of using the approximation, the simulation model could also be employed to find the best possible reference for the current situation. But the simulation of one step takes an average of 0.1 s on an <italic>AM335x 1GHz ARM</italic>&#x024C7; <italic>Cortex-A8</italic> processor, which is used for control. With an average of 10 evaluations of the direct kinematics required to find the reference leading to the minimum distance, this adds up to 1 s. In contrast to a polynomial approximation where the Jacobi matrix can be easily formed to find the minimum efficiently, no analytical Jacobi matrix has been formulated for the simulation model so far. This means that when the simulation model is used, calculation would require most of the time of the cycle. However, the experiments show that the robot always reaches the target, even if the assumptions made in the derivation of the Gait Pattern Generator are not fulfilled and the approximation of the direct kinematics was done for a robot of different dimensions.</p>
<p>The path planning algorithm implemented is very basic, as it minimizes the Euclidean norm of the target vector, i.e., it dictates the direct path from the current position to the target. The gait law provides an intuitive way (forward and rotational speed) to control a quite complex robot and the approximation of the direct kinematics provides the resulting quantitative motion. This opens an interface to a wide variety of more dedicated path planning algorithms, as the robot can now be treated as a unicycle. For example, the path could be planned using Cartesian polynomials (Siciliano et al., <xref ref-type="bibr" rid="B24">2010</xref>) and thus the robot orientation could also be controlled. Although the softness of the robot is very complex to model, it also allows the formulation of very drastic references, even if these cannot be fulfilled at all, as hindered by the closed kinematic chain. How these contradictory demands are solved is then &#x0201C;computed&#x0201D; by the body itself. Conventional parallel kinematic robots, such as the Stewart-Gough platform, would be damaged in this case. The gecko-inspired soft robot is therefore a good example of Embodied Intelligence (Cangelosi et al., <xref ref-type="bibr" rid="B4">2015</xref>) or Morphological Computation (Pfeifer and G&#x000F3;mez, <xref ref-type="bibr" rid="B14">2009</xref>) since it does the right thing &#x0201C;intuitively.&#x0201D; This is in agreement with the principle of controlling soft robots mainly in a feed forward way in order to maintain and make use of their softness (Santina et al., <xref ref-type="bibr" rid="B18">2017</xref>). The cascaded controller structure, as discussed in the introduction, can therefore also be applied to position control of mobile robots. The method of deriving a basic locomotion strategy like the presented gait law by very simple (feet rotate only in swing phase), but mathematically (with the constant curvature model) unfulfillable assumptions, can be transferred to any other soft mobile robot. Although this needs to be done individually for each robotic platform, this work can serve as a reference for future and/or existing robots.</p>
</sec>
<sec sec-type="data-availability-statement" id="s7">
<title>Data Availability Statement</title>
<p>The raw data generated for this study are available on request.</p>
</sec>
<sec id="s8">
<title>Author Contributions</title>
<p>LS derived the Gait Pattern Generator, performed the experiments, and discussed the results. LS and AS wrote and revised the manuscript. AS and JS supervised the project. All authors contributed to the article and approved the submitted version.</p>
</sec>
<sec id="s9">
<title>Conflict of Interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
</body>
<back>
<ack><p>We thank Rohat Yildiz, Duraikannan Maruthavanan, and Jakob Muchynski for the inspiration and preliminary work.</p>
</ack>
<sec sec-type="supplementary-material" id="s10">
<title>Supplementary Material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/frobt.2020.00087/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/frobt.2020.00087/full#supplementary-material</ext-link></p>
<supplementary-material xlink:href="Data_Sheet_1.pdf" id="SM1" mimetype="application/pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
<supplementary-material xlink:href="Video_1.MP4" id="SM2" mimetype="video/mp4" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bao</surname> <given-names>G.</given-names></name> <name><surname>Fang</surname> <given-names>H.</given-names></name> <name><surname>Chen</surname> <given-names>L.</given-names></name> <name><surname>Wan</surname> <given-names>Y.</given-names></name> <name><surname>Xu</surname> <given-names>F.</given-names></name> <name><surname>Yang</surname> <given-names>Q.</given-names></name> <etal/></person-group>. (<year>2018</year>). <article-title>Soft robotics: academic insights and perspectives through bibliometric analysis</article-title>. <source>Soft Robot</source>. <volume>5</volume>, <fpage>229</fpage>&#x02013;<lpage>241</lpage>. <pub-id pub-id-type="doi">10.1089/soro.2017.0135</pub-id><pub-id pub-id-type="pmid">29782219</pub-id></citation></ref>
<ref id="B2">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Bern</surname> <given-names>J.</given-names></name> <name><surname>Banzet</surname> <given-names>P.</given-names></name> <name><surname>Poranne</surname> <given-names>R.</given-names></name> <name><surname>Coros</surname> <given-names>S.</given-names></name></person-group> (<year>2019</year>). <article-title>Trajectory optimization for cable-driven soft robot locomotion</article-title>, in <source>Proceedings of Robotics: Science and Systems</source> (<publisher-loc>Freiburg im Breisgau</publisher-loc>). <pub-id pub-id-type="doi">10.15607/RSS.2019.XV.052</pub-id></citation></ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bristow</surname> <given-names>D. A.</given-names></name> <name><surname>Tharayil</surname> <given-names>M.</given-names></name> <name><surname>Alleyne</surname> <given-names>A. G.</given-names></name></person-group> (<year>2006</year>). <article-title>A survey of iterative learning control</article-title>. <source>IEEE Control Syst. Mag</source>. <volume>26</volume>, <fpage>96</fpage>&#x02013;<lpage>114</lpage>. <pub-id pub-id-type="doi">10.1109/MCS.2006.1636313</pub-id></citation></ref>
<ref id="B4">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Cangelosi</surname> <given-names>A.</given-names></name> <name><surname>Bongard</surname> <given-names>J.</given-names></name> <name><surname>Fischer</surname> <given-names>M.</given-names></name> <name><surname>Nolfi</surname> <given-names>S.</given-names></name></person-group> (<year>2015</year>). <source>Embodied Intelligence</source>. <publisher-loc>Berlin; Heidelberg: Springer</publisher-loc>. <pub-id pub-id-type="doi">10.1007/978-3-662-43505-2_37</pub-id><pub-id pub-id-type="pmid">24934294</pub-id></citation></ref>
<ref id="B5">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Godage</surname> <given-names>I. S.</given-names></name> <name><surname>Nanayakkara</surname> <given-names>T.</given-names></name> <name><surname>Caldwell</surname> <given-names>D. G.</given-names></name></person-group> (<year>2012</year>). <article-title>Locomotion with continuum limbs</article-title>, in <source>2012 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source> (<publisher-loc>Vilamoure</publisher-loc>), <fpage>293</fpage>&#x02013;<lpage>298</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2012.6385810</pub-id></citation></ref>
<ref id="B6">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hofer</surname> <given-names>M.</given-names></name> <name><surname>D&#x00027;Andrea</surname> <given-names>R.</given-names></name></person-group> (<year>2018</year>). <article-title>Design, modeling and control of a soft robotic arm</article-title>, in <source>2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source> (<publisher-loc>Madrid</publisher-loc>), <fpage>1456</fpage>&#x02013;<lpage>1463</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2018.8594221</pub-id></citation></ref>
<ref id="B7">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Hofer</surname> <given-names>M.</given-names></name> <name><surname>Spannagl</surname> <given-names>L.</given-names></name> <name><surname>D&#x00027;Andrea</surname> <given-names>R.</given-names></name></person-group> (<year>2019</year>). <article-title>Iterative learning control for fast and accurate position tracking with an articulated soft robotic arm</article-title>, in <source>2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source> (<publisher-loc>Macau</publisher-loc>), <fpage>6602</fpage>&#x02013;<lpage>6607</lpage>. <pub-id pub-id-type="doi">10.1109/IROS40897.2019.8967636</pub-id></citation></ref>
<ref id="B8">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Horvat</surname> <given-names>T.</given-names></name> <name><surname>Karakasiliotis</surname> <given-names>K.</given-names></name> <name><surname>Melo</surname> <given-names>K.</given-names></name> <name><surname>Fleury</surname> <given-names>L.</given-names></name> <name><surname>Thandiackal</surname> <given-names>R.</given-names></name> <name><surname>Ijspeert</surname> <given-names>A. J.</given-names></name></person-group> (<year>2015</year>). <article-title>Inverse kinematics and reflex based controller for body-limb coordination of a salamander-like robot walking on uneven terrain</article-title>, in <source>2015 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source> (<publisher-loc>Hamburg</publisher-loc>), <fpage>195</fpage>&#x02013;<lpage>201</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2015.7353374</pub-id></citation></ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Horvat</surname> <given-names>T.</given-names></name> <name><surname>Melo</surname> <given-names>K.</given-names></name> <name><surname>Ijspeert</surname> <given-names>A. J.</given-names></name></person-group> (<year>2017</year>). <article-title>Spine controller for a sprawling posture robot</article-title>. <source>IEEE Robot. Autom. Lett</source>. <volume>2</volume>, <fpage>1195</fpage>&#x02013;<lpage>1202</lpage>. <pub-id pub-id-type="doi">10.1109/LRA.2017.2664898</pub-id></citation></ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ijspeert</surname> <given-names>A. J.</given-names></name></person-group> (<year>2008</year>). <article-title>Central pattern generators for locomotion control in animals and robots: a review</article-title>. <source>Neural Netw</source>. <volume>21</volume>, <fpage>642</fpage>&#x02013;<lpage>653</lpage>. <pub-id pub-id-type="doi">10.1016/j.neunet.2008.03.014</pub-id><pub-id pub-id-type="pmid">18555958</pub-id></citation></ref>
<ref id="B11">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Katzschmann</surname> <given-names>R. K.</given-names></name> <name><surname>DelPreto</surname> <given-names>J.</given-names></name> <name><surname>MacCurdy</surname> <given-names>R.</given-names></name> <name><surname>Rus</surname> <given-names>D.</given-names></name></person-group> (<year>2018</year>). <article-title>Exploration of underwater life with an acoustically controlled soft robotic fish</article-title>. <source>Sci. Robot</source>. <volume>3</volume>:<fpage>eaar3449</fpage>. <pub-id pub-id-type="doi">10.1126/scirobotics.aar3449</pub-id></citation></ref>
<ref id="B12">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname> <given-names>J.</given-names></name> <name><surname>Jin</surname> <given-names>M.</given-names></name> <name><surname>Ahn</surname> <given-names>K. K.</given-names></name></person-group> (<year>2013</year>). <article-title>Precise tracking control of shape memory alloy actuator systems using hyperbolic tangential sliding mode control with time delay estimation</article-title>. <source>Mechatronics</source> <volume>23</volume>, <fpage>310</fpage>&#x02013;<lpage>317</lpage>. <pub-id pub-id-type="doi">10.1016/j.mechatronics.2013.01.005</pub-id></citation></ref>
<ref id="B13">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Marchese</surname> <given-names>A. D.</given-names></name> <name><surname>Komorowski</surname> <given-names>K.</given-names></name> <name><surname>Onal</surname> <given-names>C. D.</given-names></name> <name><surname>Rus</surname> <given-names>D.</given-names></name></person-group> (<year>2014</year>). <article-title>Design and control of a soft and continuously deformable 2D robotic manipulation system</article-title>, in <source>2014 IEEE International Conference on Robotics and Automation (ICRA)</source> (<publisher-loc>Hong Kong</publisher-loc>), <fpage>2189</fpage>&#x02013;<lpage>2196</lpage>. <pub-id pub-id-type="doi">10.1109/ICRA.2014.6907161</pub-id></citation></ref>
<ref id="B14">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Pfeifer</surname> <given-names>R.</given-names></name> <name><surname>G&#x000F3;mez</surname> <given-names>G.</given-names></name></person-group> (<year>2009</year>). <article-title>Morphological computation-connecting brain, body, and environment</article-title>, in <source>Creating Brain-Like Intelligence</source>, eds B. Sendhoff, E. K&#x000F6;rner, O. Sporns, H. Ritter and K. Doya (<publisher-loc>Berlin, Heidelberg: Springer</publisher-loc>), <fpage>66</fpage>&#x02013;<lpage>83</lpage>. <pub-id pub-id-type="doi">10.1007/978-3-642-00616-6_5</pub-id></citation></ref>
<ref id="B15">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Pratt</surname> <given-names>J.</given-names></name> <name><surname>Chew</surname> <given-names>C.-M.</given-names></name> <name><surname>Torres</surname> <given-names>A.</given-names></name> <name><surname>Dilworth</surname> <given-names>P.</given-names></name> <name><surname>Pratt</surname> <given-names>G.</given-names></name></person-group> (<year>2001</year>). <article-title>Virtual model control: an intuitive approach for bipedal locomotion</article-title>. <source>Int. J. Robot. Res</source>. <volume>20</volume>, <fpage>129</fpage>&#x02013;<lpage>143</lpage>. <pub-id pub-id-type="doi">10.1177/02783640122067309</pub-id></citation></ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Qin</surname> <given-names>L.</given-names></name> <name><surname>Liang</surname> <given-names>X.</given-names></name> <name><surname>Huang</surname> <given-names>H.</given-names></name> <name><surname>Chui</surname> <given-names>C. K.</given-names></name> <name><surname>Yeow</surname> <given-names>R. C.-H.</given-names></name> <name><surname>Zhu</surname> <given-names>J.</given-names></name></person-group> (<year>2019</year>). <article-title>A versatile soft crawling robot with rapid locomotion</article-title>. <source>Soft Robot</source>. <volume>6</volume>, <fpage>455</fpage>&#x02013;<lpage>467</lpage>. <pub-id pub-id-type="doi">10.1089/soro.2018.0124</pub-id><pub-id pub-id-type="pmid">30883283</pub-id></citation></ref>
<ref id="B17">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rus</surname> <given-names>D.</given-names></name> <name><surname>Tolley</surname> <given-names>M. T.</given-names></name></person-group> (<year>2015</year>). <article-title>Design, fabrication and control of soft robots</article-title>. <source>Nature</source> <volume>521</volume>, <fpage>467</fpage>&#x02013;<lpage>475</lpage>. <pub-id pub-id-type="doi">10.1038/nature14543</pub-id><pub-id pub-id-type="pmid">26017446</pub-id></citation></ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Santina</surname> <given-names>C. D.</given-names></name> <name><surname>Bianchi</surname> <given-names>M.</given-names></name> <name><surname>Grioli</surname> <given-names>G.</given-names></name> <name><surname>Angelini</surname> <given-names>F.</given-names></name> <name><surname>Catalano</surname> <given-names>M.</given-names></name> <name><surname>Garabini</surname> <given-names>M.</given-names></name> <etal/></person-group>. (<year>2017</year>). <article-title>Controlling soft robots: balancing feedback and feedforward elements</article-title>. <source>IEEE Robot. Autom. Mag</source>. <volume>24</volume>, <fpage>75</fpage>&#x02013;<lpage>83</lpage>. <pub-id pub-id-type="doi">10.1109/MRA.2016.2636360</pub-id></citation></ref>
<ref id="B19">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Santina</surname> <given-names>C. D.</given-names></name> <name><surname>Katzschmann</surname> <given-names>R. K.</given-names></name> <name><surname>Bicchi</surname> <given-names>A.</given-names></name> <name><surname>Rus</surname> <given-names>D.</given-names></name></person-group> (<year>2020</year>). <article-title>Model-based dynamic feedback control of a planar soft robot: trajectory tracking and interaction with the environment</article-title>. <source>Int. J. Robot. Res</source>. <volume>39</volume>, <fpage>490</fpage>&#x02013;<lpage>513</lpage>. <pub-id pub-id-type="doi">10.1177/0278364919897292</pub-id></citation></ref>
<ref id="B20">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schiller</surname> <given-names>L.</given-names></name> <name><surname>Seibel</surname> <given-names>A.</given-names></name> <name><surname>Schlattmann</surname> <given-names>J.</given-names></name></person-group> (<year>2019</year>). <article-title>Toward a gecko-inspired, climbing soft robot</article-title>. <source>Front. Neurorobot</source>. <volume>13</volume>:<fpage>106</fpage>. <pub-id pub-id-type="doi">10.3389/fnbot.2019.00106</pub-id><pub-id pub-id-type="pmid">31956304</pub-id></citation></ref>
<ref id="B21">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Schiller</surname> <given-names>L.</given-names></name> <name><surname>Seibel</surname> <given-names>A.</given-names></name> <name><surname>Schlattmann</surname> <given-names>J.</given-names></name></person-group> (<year>2020</year>). <article-title>A lightweight simulation model for soft robot&#x00027;s locomotion and its application to trajectory optimization</article-title>. <source>IEEE Robot. Autom. Lett</source>. <volume>5</volume>, <fpage>1199</fpage>&#x02013;<lpage>1206</lpage>. <pub-id pub-id-type="doi">10.1109/LRA.2020.2966396</pub-id></citation></ref>
<ref id="B22">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Seibel</surname> <given-names>A.</given-names></name> <name><surname>Schiller</surname> <given-names>L.</given-names></name></person-group> (<year>2018</year>). <article-title>Systematic engineering design helps creating new soft machines</article-title>. <source>Robot. Biomimet</source>. 5. <pub-id pub-id-type="doi">10.1186/s40638-018-0088-4</pub-id><pub-id pub-id-type="pmid">30416935</pub-id></citation></ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Shepherd</surname> <given-names>R. F.</given-names></name> <name><surname>Ilievski</surname> <given-names>F.</given-names></name> <name><surname>Choi</surname> <given-names>W.</given-names></name> <name><surname>Morin</surname> <given-names>S. A.</given-names></name> <name><surname>Stokes</surname> <given-names>A. A.</given-names></name> <name><surname>Mazzeo</surname> <given-names>A. D.</given-names></name> <etal/></person-group>. (<year>2011</year>). <article-title>Multigait soft robot</article-title>. <source>Proc. Natl. Acad. Sci. U.S.A</source>. <volume>108</volume>, <fpage>20400</fpage>&#x02013;<lpage>20403</lpage>. <pub-id pub-id-type="doi">10.1073/pnas.1116564108</pub-id><pub-id pub-id-type="pmid">22123978</pub-id></citation></ref>
<ref id="B24">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Siciliano</surname> <given-names>B.</given-names></name> <name><surname>Sciavicco</surname> <given-names>L.</given-names></name> <name><surname>Villani</surname> <given-names>L.</given-names></name> <name><surname>Oriolo</surname> <given-names>G.</given-names></name></person-group> (<year>2010</year>). <source>Robotics: Modelling, Planning and Control</source>. <publisher-loc>London: Springer</publisher-loc>. <pub-id pub-id-type="doi">10.1007/978-1-84628-642-1</pub-id></citation></ref>
<ref id="B25">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Tolley</surname> <given-names>M. T.</given-names></name> <name><surname>Shepherd</surname> <given-names>R. F.</given-names></name> <name><surname>Mosadegh</surname> <given-names>B.</given-names></name> <name><surname>Galloway</surname> <given-names>K. C.</given-names></name> <name><surname>Wehner</surname> <given-names>M.</given-names></name> <name><surname>Karpelson</surname> <given-names>M.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>A resilient, untethered soft robot</article-title>. <source>Soft Robot</source>. <volume>1</volume>, <fpage>213</fpage>&#x02013;<lpage>223</lpage>. <pub-id pub-id-type="doi">10.1089/soro.2014.0008</pub-id><pub-id pub-id-type="pmid">29251563</pub-id></citation></ref>
<ref id="B26">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>J.</given-names></name> <name><surname>Olson</surname> <given-names>E.</given-names></name></person-group> (<year>2016</year>). <article-title>Apriltag 2: Efficient and robust fiducial detection</article-title>, in <source>2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)</source> (<publisher-loc>Daejeon</publisher-loc>), <fpage>4193</fpage>&#x02013;<lpage>4198</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2016.7759617</pub-id></citation></ref>
<ref id="B27">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Zhang</surname> <given-names>W.</given-names></name> <name><surname>Polygerinos</surname> <given-names>P.</given-names></name></person-group> (<year>2018</year>). <article-title>Distributed planning of multi-segment soft robotic arms</article-title>, in <source>2018 Annual American Control Conference (ACC)</source> (<publisher-loc>Milwaukee, WI</publisher-loc>), <fpage>2096</fpage>&#x02013;<lpage>2101</lpage>. <pub-id pub-id-type="doi">10.23919/ACC.2018.8430682</pub-id></citation></ref>
</ref-list>
<fn-group>
<fn fn-type="financial-disclosure"><p><bold>Funding.</bold> The publication of this work was supported by the German Research Foundation (DFG) and Hamburg University of Technology (TUHH) in the funding programme &#x0201C;Open Access Publishing.&#x0201D;</p>
</fn>
</fn-group>
</back>
</article> 