<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article article-type="methods-article" dtd-version="2.3" xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Robot. AI</journal-id>
<journal-title>Frontiers in Robotics and AI</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Robot. AI</abbrev-journal-title>
<issn pub-type="epub">2296-9144</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">1211876</article-id>
<article-id pub-id-type="doi">10.3389/frobt.2023.1211876</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Robotics and AI</subject>
<subj-group>
<subject>Methods</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Navigation with minimal occupation volume for teleoperated snake-like surgical robots: MOVE</article-title>
<alt-title alt-title-type="left-running-head">Berthet-Rayne and Yang</alt-title>
<alt-title alt-title-type="right-running-head">
<ext-link ext-link-type="uri" xlink:href="https://doi.org/10.3389/frobt.2023.1211876">10.3389/frobt.2023.1211876</ext-link>
</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name>
<surname>Berthet-Rayne</surname>
<given-names>Pierre</given-names>
</name>
<xref ref-type="aff" rid="aff1">
<sup>1</sup>
</xref>
<xref ref-type="corresp" rid="c001">&#x2a;</xref>
<uri xlink:href="https://loop.frontiersin.org/people/1780766/overview"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Yang</surname>
<given-names>Guang-Zhong</given-names>
</name>
<xref ref-type="aff" rid="aff2">
<sup>2</sup>
</xref>
</contrib>
</contrib-group>
<aff id="aff1">
<sup>1</sup>
<institution>The Hamlyn Centre for Robotic Surgery</institution>, <institution>Imperial College London</institution>, <addr-line>London</addr-line>, <country>United Kingdom</country>
</aff>
<aff id="aff2">
<sup>2</sup>
<institution>Institute of Medical Robotics</institution>, <institution>Shanghai Jiao Tong University</institution>, <addr-line>Shanghai</addr-line>, <country>China</country>
</aff>
<author-notes>
<fn fn-type="edited-by">
<p>
<bold>Edited by:</bold>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/816111/overview">Luigi Manfredi</ext-link>, University of Dundee, United Kingdom</p>
</fn>
<fn fn-type="edited-by">
<p>
<bold>Reviewed by:</bold>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1114931/overview">Hunter Gilbert</ext-link>, Louisiana State University, United States</p>
<p>
<ext-link ext-link-type="uri" xlink:href="https://loop.frontiersin.org/people/1685341/overview">Gianni Borghesan</ext-link>, KU Leuven, Belgium</p>
</fn>
<corresp id="c001">&#x2a;Correspondence: Pierre Berthet-Rayne, <email>pbr.emploi@gmail.com</email>
</corresp>
</author-notes>
<pub-date pub-type="epub">
<day>12</day>
<month>06</month>
<year>2023</year>
</pub-date>
<pub-date pub-type="collection">
<year>2023</year>
</pub-date>
<volume>10</volume>
<elocation-id>1211876</elocation-id>
<history>
<date date-type="received">
<day>25</day>
<month>04</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>16</day>
<month>05</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#xa9; 2023 Berthet-Rayne and Yang.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Berthet-Rayne and Yang</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>Master-Slave control is a common mode of operation for surgical robots as it ensures that surgeons are always in control and responsible for the procedure. Most teleoperated surgical systems use low degree-of-freedom (DOF) instruments, thus facilitating direct mapping of manipulator position to the instrument pose and tip location (tip-to-tip mapping). However, with the introduction of continuum and snake-like robots with much higher DOF supported by their inherent redundant architecture for navigating through curved anatomical pathways, there is a need for developing effective kinematic methods that can actuate all the joints in a controlled fashion. This paper introduces the concept of navigation with Minimal Occupation VolumE (MOVE), a teleoperation method that extends the concept of follow-the-leader navigation. It defines the path taken by the head while using all the available space surrounding the robot constrained by individual joint limits. The method was developed for the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot and validated with detailed simulation and control experiments. The results validate key performance indices such as path following, body weights, path weights, fault tolerance and conservative motion. The MOVE solver can run in real-time on a standard computer at frequencies greater than 1&#xa0;kHz.</p>
</abstract>
<kwd-group>
<kwd>follow the leader navigation</kwd>
<kwd>surgical robotics</kwd>
<kwd>teleoperation</kwd>
<kwd>redundant robots</kwd>
<kwd>tendon/wire mechanism</kwd>
<kwd>motion control</kwd>
<kwd>flexible robots</kwd>
</kwd-group>
<custom-meta-wrap>
<custom-meta>
<meta-name>section-at-acceptance</meta-name>
<meta-value>Biomedical Robotics</meta-value>
</custom-meta>
</custom-meta-wrap>
</article-meta>
</front>
<body>
<sec id="s1">
<title>1 Introduction</title>
<p>Minimally Invasive Surgery (MIS) is a well-accepted surgical technique that typically uses long, rigid instruments and an endoscope to perform surgical procedures through small incisions (<xref ref-type="bibr" rid="B47">Wickham, 1987</xref>; <xref ref-type="bibr" rid="B44">Troccaz&#xa0;et&#xa0;al., 2019</xref>). Although this technique brings many advantages for patients such as reduced access trauma, less blood loss, rapid recovery time, it, however, demands unintuitive and ergonomically difficult control of the instruments. Other issues include the loss of direct vision and depth perception and complex instrument manipulation limited by the fulcrum effect.</p>
<p>Recent advances in surgical robotics are aimed at overcoming these difficulties with teleoperated master-slave systems combined with articulated instruments. Most current surgical robots consist of a master console operated by the surgeon and a slave robot for relaying and executing the motion commands. Features such as motion scaling and tremor removal can be incorporated. The teleoperation method typically maps the motion of the master manipulator to the instrument tip (tip-to-tip mapping) without explicitly controlling the resulting motion of the other joints. Although this approach is sufficient for rigid instruments with a direct line-of-sight access, this is problematic for more complex flexible systems such as hyper-redundant continuum robots.</p>
<p>Endoscopic surgery, either via intraluminal or transluminal routes, represents an advanced MIS technique that uses natural orifices rather than body incisions to access the target lesion (<xref ref-type="bibr" rid="B45">Vitiello&#xa0;et&#xa0;al., 2013</xref>). This is usually done with a flexible endoscope equipped with vision and light sources, pushed and manipulated by the operator. The main advantage of this technique is that it further reduces access trauma and is able to reach to deep seated lesions. However, maintaining flexibility usually contradicts with stability and the amount of force that can be exerted. Issues related to tissue manipulation, triangulation, and stable operation within tortuous small vessels are major challenges to overcome. Furthermore, effective control of flexible endoscopes is practically difficult; issues related to looping, risk of vessel perforation, and buckling are common. Despite these limitations, highly skilled endocopists can manage to perform complex procedures such as Endoscopic Submucosal Dissection (ESD) or Peroral Endoscopic Myotomy (POEM). The performance of these procedures is highly operator dependent, often involving multi-operator working together. There is therefore a need for introducing robotics to flexible endoscopic surgery, allowing easier control and more dexterous manipulation of the endoscopes.</p>
<p>Recently, there have been increased interests in the development of endoscopic or single port robotic systems (<xref ref-type="bibr" rid="B45">Vitiello&#xa0;et&#xa0;al., 2013</xref>; <xref ref-type="bibr" rid="B9">Burgner-Kahrs&#xa0;et&#xa0;al., 2015</xref>). For example, the STRAS system uses a commercially available endoscope and instruments augmented with robotic actuation (<xref ref-type="bibr" rid="B49">Zorn&#xa0;et&#xa0;al., 2017</xref>). However, insertion and navigation are still performed manually. The MASTER system uses a standard endoscope equipped with two robotic instruments (<xref ref-type="bibr" rid="B33">Low&#xa0;et&#xa0;al., 2006</xref>), but the significant outer diameter of 25&#xa0;mm limits its potential applications. The CYCLOPS system also uses a standard endoscope with a deployable scaffold allowing to actuate standard endoscopic instruments (<xref ref-type="bibr" rid="B35">Mylonas&#xa0;et&#xa0;al., 2014</xref>), but possible clinical applications are limited by the size of the scaffold. The K-FLEX developed by KAIST is a fully robotic endoscope with one passive proximal section, two active distal sections and two robotic instruments (<xref ref-type="bibr" rid="B25">Hwang&#xa0;et&#xa0;al., 2018</xref>), but the insertion is still performed manually. The LESS system uses a short robotic body and two manually controlled instruments (<xref ref-type="bibr" rid="B30">Li&#xa0;et&#xa0;al., 2017</xref>). This system was developed originally for single port applications and therefore is not applicable to natural orifice surgery. The HARP system uses two concentric structures with shape-locking capabilities, allowing the device to follow tortuous pathways (<xref ref-type="bibr" rid="B14">Degani&#xa0;et&#xa0;al., 2006</xref>). However, the system lacks space for inner channels which must be placed outside, thus increasing the overall outer diameter. The <italic>iSnake</italic> (<xref ref-type="bibr" rid="B40">Shang&#xa0;et&#xa0;al., 2011</xref>; <xref ref-type="bibr" rid="B41">Shang&#xa0;et&#xa0;al., 2012</xref>) and the latest version: the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> (<xref ref-type="bibr" rid="B4">Berthet-Rayne&#xa0;et&#xa0;al., 2018a</xref>) use a short, fully active body and two robotic instruments. Therefore, this system has the potential to provide fully controlled navigation together with dexterous instruments.</p>
<p>With all these different architectures, one common challenge is the navigation of such robots toward the surgical site of interest (<xref ref-type="bibr" rid="B11">Chikhaoui and Burgner-Kahrs, 2018</xref>). Whether for performing natural orifice or single port surgery, there is a common requirement to navigate inside tortuous pathways while avoiding obstacles such as arteries or organs that could potentially injure the patient. Therefore, traditional inverse kinematics approaches such as tip-to-tip mapping are no longer applicable, and there is a need for new teleoperation and control algorithms that can handle full-body shape control of these redundant snake-like robots while being intuitive to operate.</p>
<p>In MIS, typical types of navigation include single port with a virtual Remote Centre of Motion (RCM) (<xref ref-type="bibr" rid="B8">Boctor&#xa0;et&#xa0;al., 2004</xref>; <xref ref-type="bibr" rid="B48">Xu&#xa0;et&#xa0;al., 2009</xref>; <xref ref-type="bibr" rid="B13">Cianchetti&#xa0;et&#xa0;al., 2013</xref>), motion planning of pre-determined trajectories (<xref ref-type="bibr" rid="B1">Alterovitz and Goldberg, 2008</xref>; <xref ref-type="bibr" rid="B27">Kuntz&#xa0;et&#xa0;al., 2015</xref>; <xref ref-type="bibr" rid="B17">Fu&#xa0;et&#xa0;al., 2018</xref>) active constraints (<xref ref-type="bibr" rid="B28">Kwok&#xa0;et&#xa0;al., 2009</xref>; <xref ref-type="bibr" rid="B29">Kwok&#xa0;et&#xa0;al., 2013</xref>), Follow-The-Leader (FTL) (<xref ref-type="bibr" rid="B12">Choset and Henning, 1999</xref>; <xref ref-type="bibr" rid="B26">Kang&#xa0;et&#xa0;al., 2016</xref>; <xref ref-type="bibr" rid="B36">Neumann and Burgner-Kahrs, 2016</xref>) and more general shape control (<xref ref-type="bibr" rid="B34">Mochiyama&#xa0;et&#xa0;al., 1999</xref>; <xref ref-type="bibr" rid="B37">Roesthuis and Misra, 2016</xref>). RCM is mainly aimed for single port applications with rigid instruments as only the entry point is constrained. For snake robots, this can be considered as part of the overall constraint and requiring the robot to pass through a defined point and orientation. Motion planning is a method that typically relies on pre-operative images from CT or MRI scans to determine the path to follow. This requires several steps from the segmentation of the images, to the search of a feasible path either pre-operatively or online. Finally, the registration between the patient data and the robot limits the potential use for real-time endoscopic teleoperation and inspection. When tissue motion is taken into account, dynamic active constraints can be imposed (<xref ref-type="bibr" rid="B29">Kwok&#xa0;et&#xa0;al., 2013</xref>). Active constraint uses geometrical models and meshes to constrain the robot in a safe zone and therefore also requires pre-operative data, registration, and is difficult to adapt to soft tissue in real-time.</p>
<p>During endoluminal navigation, a snake-like robot should follow the path closest to the central line to avoid exerting excessive forces on the wall of the lumen. FTL navigation can ensure the robot body will follow the path taken by the head of the device. FTL is inspired from biology, more precisely by the way snakes navigates in their environment using serpentine locomotion, where the body follows the path taken by the head (<xref ref-type="bibr" rid="B22">Gray, 1946</xref>). However, FTL requires that the hardware can intrinsically follow the same path, which is not always feasible. Robots with complex architecture such as the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> (<xref ref-type="bibr" rid="B4">Berthet-Rayne&#xa0;et&#xa0;al., 2018a</xref>), hybrid flexible-articulated devices (<xref ref-type="bibr" rid="B24">Hu&#xa0;et&#xa0;al., 2019</xref>), and concentric tube robots (<xref ref-type="bibr" rid="B15">Dupont&#xa0;et&#xa0;al., 2010</xref>) do not have an implicit way of following the path determined by the head and require more complex control methods or task-based design to follow a desired path (<xref ref-type="bibr" rid="B19">Gilbert and Webster, 2013</xref>; <xref ref-type="bibr" rid="B18">Garriga-Casanovas and Rodriguez&#xa0;y&#xa0;Baena, 2017</xref>; <xref ref-type="bibr" rid="B5">Berthet-Rayne&#xa0;et&#xa0;al., 2018b</xref>). Moreover, the concept of FTL motion can be restrictive, especially if the robot is much smaller than the lumen in which it is traveling, as all the surrounding space available is not exploited. Another critical feature to have while navigating within natural, tortuous pathways is the ability to follow the exact same path while extracting the instruments. This is a critical feature which is often omitted or neglected.</p>
<p>In this paper, we introduce a novel navigation paradigm based on Minimal Occupation VolumE (MOVE). This method builds up on top of our previous work on teleoperation of highly redundant snake-like robots which highlighted the need for intuitive algorithms that would simplify the control from the user standpoint (<xref ref-type="bibr" rid="B5">Berthet-Rayne&#xa0;et&#xa0;al., 2018b</xref>). The basic concept of MOVE is illustrated in <xref ref-type="fig" rid="F1">Figure&#xa0;1</xref>. It is a generic method that can be used for different flexible robot designs or procedures. This includes endoscopic surgery (colonoscopy, gastroscopy), bronchoscopy, catheterisation, or non-medical applications such as pipe and jet engine inspection as well as search and rescue exploration. This navigation concept extends the FTL method in the sense that it uses the path taken by the head as a guide rather than a strict path to follow, giving some freedom for optimized use of all the available space surrounding the robot. The main difference and advantage of the MOVE navigation is that it allows robots with complex architecture to reach deep-seated lesions while navigating through curved lumens as all the available space around the robot can be used to compensate for the robot&#x2019;s kinematic limitations. This extra space can also be used to enhance the dexterity of the robot or reduce mechanical stress, which could help to perform safer and more complex surgeries. Finally, MOVE navigation can ensure safe retraction of the robot by following the exact same path as the one used to navigate inside.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption>
<p>
<bold>(A)</bold>: in a strict follow-the-leader navigation through an anatomical structure, the space that the robot occupies when reaching to the target will be equivalent to the volume of the body of the robot. <bold>(B)</bold>: Minimal Occupation VolumE navigation (MOVE) concept. In practice, due to joint limit and kinematic constraints, follow-the-leader is not always possible and the navigation space is larger than the volume of the robot. With MOVE, all the surrounding available space can be used.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g001.tif"/>
</fig>
<p>This paper is structured as follow: <xref ref-type="sec" rid="s2">Section&#xa0;2</xref> introduces the concept and method of MOVE in details. <xref ref-type="sec" rid="s3">Section&#xa0;3</xref> presents the validation and results on the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> simulator. <xref ref-type="sec" rid="s4">Section&#xa0;4</xref> outlines the implementation on the real <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot. This is followed by a discussion in <xref ref-type="sec" rid="s5">Section&#xa0;5</xref> and the conclusion and future work in Section VI.</p>
</sec>
<sec sec-type="methods" id="s2">
<title>2 Methods</title>
<p>The MOVE navigation combines teleoperation and navigation of redundant snake-like robots. The motivation is to allow snake-like robots with non-holonomic joints, <italic>i.e.</italic>, joints that can only move on a single plane, to follow an unknown-in-advance 3D path in serpentine-like locomotion by allowing the use of available surrounding space. The method relies on differential inverse kinematics with the capability to perform full-body shape control. The approach consists of four key phases: {navigation, path creation, virtual robot fitting, inverse kinematic}.</p>
<p>These can be summarized as follows. The head of the robot is controlled by the surgeon in a similar fashion as in traditional endoscopy. The operator can control the roll, pitch, yaw and forward/backward motion of the robot. The forward motion is determined by the head orientation as depicted in <xref ref-type="fig" rid="F2">Figure&#xa0;2</xref>. As the head is moving forward, the path taken by the base of the head is sampled with a fixed resolution. As the path grows, a virtual robot with the same kinematic structure (same amount of link and link length) than the real one, but with universal joints (3 DOFs) between each links instead, is fitted to the path by using back-propagation from the head to the base. This virtual robot is then used to generate target points along the path to solve the full-body inverse kinematics of the real robot. This allows the surgeon to intuitively navigate in real-time along the desired path without worrying about the complexity of the robot&#x2019;s kinematic structure. Each step and its corresponding equations are further described below.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption>
<p>Navigation and path creation. The operator can control the head (red segment) orientation by moving <inline-formula id="inf1">
<mml:math id="m1">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> around <inline-formula id="inf2">
<mml:math id="m2">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. During the insertion motion &#x394;<italic>a</italic>, the base of the head <inline-formula id="inf3">
<mml:math id="m3">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> will determine the new path points (in red) at a fixed sampling distance <italic>s</italic>.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g002.tif"/>
</fig>
<sec id="s2-1">
<title>2.1 <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> kinematics</title>
<p>To illustrate how the proposed method works in practice, we used the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot as an example to demonstrate the functionalities of the algorithm. As MOVE uses the Denavit-Hartenberg (DH) convention, this framework would also work on other types of articulated robots.</p>
<p>The detailed forward kinematics of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> was previously presented in (33). The <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is a tendon-driven articulated robot composed of 12 rolling-joints arranged orthogonally. The 12 joints are grouped into 3 sections named proximal, middle and distal and having 4 DOFs each, which are then mechanically coupled into 2 DOFs. The base of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> further provides 1 DOF roll motion. The <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is then attached to a robotic arm providing the insertion motion required to navigate inside the patient. All together, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> presented in (33) has 8 controllable DOFs. However, due to the type of joint used (rolling-joint) and its particular rolling motion, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> DH table requires 26 joint variables with intrinsic mechanical coupling. The reader can refer to (<xref ref-type="bibr" rid="B5">Berthet-Rayne&#xa0;et&#xa0;al., 2018b</xref>; <xref ref-type="bibr" rid="B6">Berthet-Rayne&#xa0;et&#xa0;al., 2018c</xref>; <xref ref-type="bibr" rid="B7">Berthet-Rayne&#xa0;et&#xa0;al., 2019</xref>) for further details on the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> design, kinematics and the joint coupling.</p>
<p>In the context of this paper, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> kinematics is further augmented with additional 4 DOFs to allow 6 DOFs operation at the base of the robot and fully exploit the robotic arm holder capabilities as shown in <xref ref-type="table" rid="T1">Table&#xa0;1</xref>, lines 1 to 6.</p>
<table-wrap id="T1" position="float">
<label>TABLE 1</label>
<caption>
<p>Extended DH table of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot.</p>
</caption>
<table>
<thead valign="top">
<tr>
<th align="center">
<bold>
<italic>i</italic>
</bold>
</th>
<th align="center">a</th>
<th align="center">
<bold>
<italic>&#x3b1;</italic>
</bold>
</th>
<th align="center">
<bold>
<italic>d</italic>
</bold>
</th>
<th align="center">
<bold>
<italic>&#x3b8;</italic>
</bold>
</th>
<th align="center">Type</th>
<th align="center">Coupling</th>
</tr>
</thead>
<tbody valign="top">
<tr>
<td align="center">&#xa0;1</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">
<italic>d</italic>
<sub>1</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">P</td>
<td align="center">0</td>
</tr>
<tr>
<td align="center">&#xa0;2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">
<italic>d</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">P</td>
<td align="center">1</td>
</tr>
<tr>
<td align="center">&#xa0;3</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">
<italic>d</italic>
<sub>3</sub>
</td>
<td align="center">0</td>
<td align="center">P</td>
<td align="center">2</td>
</tr>
<tr>
<td align="center">&#xa0;4</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>1</sub>
</td>
<td align="center">R</td>
<td align="center">3</td>
</tr>
<tr>
<td align="center">&#xa0;5</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>2</sub>
</td>
<td align="center">R</td>
<td align="center">4</td>
</tr>
<tr>
<td align="center">&#xa0;6</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">
<italic>a</italic>
<sub>0</sub>
</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>3</sub>
</td>
<td align="center">R</td>
<td align="center">5</td>
</tr>
<tr>
<td align="center">&#xa0;7</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>4</sub>
</td>
<td align="center">R</td>
<td align="center">6</td>
</tr>
<tr>
<td align="center">&#xa0;8</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>5</sub>
</td>
<td align="center">R</td>
<td align="center">6</td>
</tr>
<tr>
<td align="center">&#xa0;9</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>6</sub>
</td>
<td align="center">R</td>
<td align="center">7</td>
</tr>
<tr>
<td align="center">&#xa0;10</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>7</sub>
</td>
<td align="center">R</td>
<td align="center">7</td>
</tr>
<tr>
<td align="center">&#xa0;11</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">-<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>8</sub>
</td>
<td align="center">R</td>
<td align="center">6</td>
</tr>
<tr>
<td align="center">&#xa0;12</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>9</sub>
</td>
<td align="center">R</td>
<td align="center">6</td>
</tr>
<tr>
<td align="center">&#xa0;13</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>10</sub>
</td>
<td align="center">R</td>
<td align="center">7</td>
</tr>
<tr>
<td align="center">&#xa0;14</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>11</sub>
</td>
<td align="center">R</td>
<td align="center">7</td>
</tr>
<tr>
<td align="center">&#xa0;15</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">-<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>12</sub>
</td>
<td align="center">R</td>
<td align="center">8</td>
</tr>
<tr>
<td align="center">&#xa0;16</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>13</sub>
</td>
<td align="center">R</td>
<td align="center">8</td>
</tr>
<tr>
<td align="center">&#xa0;17</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>14</sub>
</td>
<td align="center">R</td>
<td align="center">9</td>
</tr>
<tr>
<td align="center">&#xa0;18</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>15</sub>
</td>
<td align="center">R</td>
<td align="center">9</td>
</tr>
<tr>
<td align="center">&#xa0;19</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">-<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>16</sub>
</td>
<td align="center">R</td>
<td align="center">8</td>
</tr>
<tr>
<td align="center">&#xa0;20</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>17</sub>
</td>
<td align="center">R</td>
<td align="center">8</td>
</tr>
<tr>
<td align="center">&#xa0;21</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>18</sub>
</td>
<td align="center">R</td>
<td align="center">9</td>
</tr>
<tr>
<td align="center">&#xa0;22</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>19</sub>
</td>
<td align="center">R</td>
<td align="center">9</td>
</tr>
<tr>
<td align="center">&#xa0;23</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">-<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>20</sub>
</td>
<td align="center">R</td>
<td align="center">10</td>
</tr>
<tr>
<td align="center">&#xa0;24</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>21</sub>
</td>
<td align="center">R</td>
<td align="center">10</td>
</tr>
<tr>
<td align="center">&#xa0;25</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>22</sub>
</td>
<td align="center">R</td>
<td align="center">11</td>
</tr>
<tr>
<td align="center">&#xa0;26</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>23</sub>
</td>
<td align="center">R</td>
<td align="center">11</td>
</tr>
<tr>
<td align="center">&#xa0;27</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">-<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>24</sub>
</td>
<td align="center">R</td>
<td align="center">10</td>
</tr>
<tr>
<td align="center">&#xa0;28</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>25</sub>
</td>
<td align="center">R</td>
<td align="center">10</td>
</tr>
<tr>
<td align="center">&#xa0;29</td>
<td align="center">
<italic>a</italic>
<sub>2</sub>
</td>
<td align="center">
<italic>&#x3c0;</italic>/2</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>26</sub>
</td>
<td align="center">R</td>
<td align="center">11</td>
</tr>
<tr>
<td align="center">&#xa0;30</td>
<td align="center">
<italic>a</italic>
<sub>1</sub>
</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">
<italic>&#x3b8;</italic>
<sub>27</sub>
</td>
<td align="center">R</td>
<td align="center">11</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="s2-2">
<title>2.2 Navigation</title>
<p>During endoscopic surgery, the tip of the endoscope is usually equipped with an imaging system such as a camera or an optic fibre bundle. In traditional endoscopy, 4 DOFs are available to the endoscopist: the roll, the pitch, the yaw, and the insertion, all controlled manually from the back of the endoscope and using the video. Therefore, the same 4 DOFs are also used on the proposed robotic approach. The head of the robot, where the camera is installed, is determined by two 3D points, one at the base <inline-formula id="inf4">
<mml:math id="m4">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> and one at the tip <inline-formula id="inf5">
<mml:math id="m5">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> forming a vector <inline-formula id="inf6">
<mml:math id="m6">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>. The orientation of the head is controlled by rotating <inline-formula id="inf7">
<mml:math id="m7">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> with the rotation matrix <italic>R</italic>
<sub>
<italic>head</italic>
</sub> (containing the roll, pitch and yaw angles) around the point <inline-formula id="inf8">
<mml:math id="m8">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> as follow:<disp-formula id="e1">
<mml:math id="m9">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>R</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.28em"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
<label>(1)</label>
</disp-formula>The insertion motion &#x394;<italic>a</italic> will induce a translation of <italic>v</italic>
<sub>
<italic>head</italic>
</sub> along itself:<disp-formula id="e2">
<mml:math id="m10">
<mml:msub>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mi>a</mml:mi>
<mml:mspace width="0.28em"/>
<mml:msub>
<mml:mrow>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(2)</label>
</disp-formula>where <inline-formula id="inf9">
<mml:math id="m11">
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> represents the normalized vector <inline-formula id="inf10">
<mml:math id="m12">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> at time <italic>t</italic>, and <inline-formula id="inf11">
<mml:math id="m13">
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> the translated vector <inline-formula id="inf12">
<mml:math id="m14">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">head</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> at time <italic>t</italic> &#x2b; 1. This process is represented geometrically in <xref ref-type="fig" rid="F2">Figure&#xa0;2</xref>. Once the position and orientation of the head known, the next step is the path creation.</p>
</sec>
<sec id="s2-3">
<title>2.3 Path creation</title>
<p>The head, more specifically the base of the robot head <inline-formula id="inf13">
<mml:math id="m15">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula>, is used to determine the path to be followed by the rest of the body. Every time the insertion is changed by the operator, the vector <inline-formula id="inf14">
<mml:math id="m16">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">ins</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> between <inline-formula id="inf15">
<mml:math id="m17">
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> and <inline-formula id="inf16">
<mml:math id="m18">
<mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>b</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is computed and its corresponding norm&#xa0;<italic>d</italic> is calculated. If <italic>d</italic> is equal or greater than the sampling resolution <italic>s</italic>, a new point is added to the <italic>path</italic> at index <italic>m</italic>. This process is depicted in <xref ref-type="fig" rid="F2">Figure&#xa0;2</xref> and summarized in the <xref ref-type="statement" rid="Algorithm1">Algorithm&#xa0;1</xref>.</p>
<p>
<statement content-type="algorithm" id="Algorithm1">
<label>Algorithm 1</label>
<p>Path Creation</p>
<p>
<inline-graphic xlink:href="frobt-10-1211876-fx1.tif"/>
</p>
</statement>
</p>
<p>Only points that correspond to a change in insertion are saved as the operator might explore the surroundings by changing the head orientation before moving forward toward the site of interest.</p>
</sec>
<sec id="s2-4">
<title>2.4 Virtual robot fitting</title>
<p>A virtual robot is used to identify target points for the real robot along the path. This virtual robot is a modified version of the real robot being controlled. It has the same amount of links and same link length. The only difference is that each revolute joint is modelled as a universal joint with 3 DOFs. This feature ensures that the virtual robot&#x2019;s link ends can be fitted exactly on the desired path as in typical FTL navigation.</p>
<p>The head link of the virtual robot is known from the previous navigation step. The rest of the link&#x2019;s position is determined using a backward fitting (from head to base) onto the path. In this section, the first link will refer to the head and the following links will be starting from the head, going towards the base of the robot. The fitting consists of mapping each extremity of each link onto the path. This is done in an iterative process for the <italic>n</italic> DOFs, with each link&#x2019;s end being the start of the next one, and is repeated until the base is reached. The head link extremities are already known, so the next step is to fit the remaining link&#x2019;s end onto the path. Two cases can arise while doing so.</p>
<sec id="s2-4-1">
<title>2.4.1 Fitting case 1</title>
<p>The first one is when the distance <italic>d</italic> between the link&#x2019;s end <inline-formula id="inf17">
<mml:math id="m19">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> and the current path point <italic>path</italic>&#xa0;[<italic>j</italic>] at index <italic>j</italic> is longer than the link length <italic>l</italic>. In this case, it is required to interpolate between the link&#x2019;s end and the path point, and to find the intersection coordinates <italic>x</italic> between a sphere of radius <italic>r</italic> &#x3d; <italic>l</italic> and the line formed by the previous path point <italic>path</italic>&#xa0;[<italic>j</italic> &#x2212; 1] and current path point <italic>path</italic>&#xa0;[<italic>j</italic>] using the following equations&#xa0;(<xref ref-type="bibr" rid="B21">Glassner, 1989</xref>):<disp-formula id="e3">
<mml:math id="m20">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="0.28em"/>
<mml:mo>&#x2022;</mml:mo>
<mml:mspace width="0.28em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x2b;</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mi mathvariant="normal">&#x394;</mml:mi>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
<label>(3)</label>
</disp-formula>with<disp-formula id="e4">
<mml:math id="m21">
<mml:mi mathvariant="normal">&#x394;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="0.28em"/>
<mml:mo>&#x2022;</mml:mo>
<mml:mspace width="0.28em"/>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2212;</mml:mo>
<mml:mo stretchy="false">&#x2016;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mo stretchy="false">&#x2016;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mo>&#x2b;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
<label>(4)</label>
</disp-formula>and<disp-formula id="e5">
<mml:math id="m22">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>u</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">&#x302;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfrac>
</mml:math>
<label>(5)</label>
</disp-formula>where <inline-formula id="inf18">
<mml:math id="m23">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>A</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is the previous path point <italic>path</italic>&#xa0;[<italic>j</italic> &#x2212; 1], <inline-formula id="inf19">
<mml:math id="m24">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>B</mml:mi>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> is the current path point <italic>path</italic>&#xa0;[<italic>j</italic>], and &#x2022; represents the dot product.</p>
</sec>
<sec id="s2-4-2">
<title>2.4.2 Fitting case 2</title>
<p>The second case is when the distance <italic>d</italic> between the link&#x2019;s end <inline-formula id="inf20">
<mml:math id="m25">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</inline-formula> and the current path point <italic>path</italic>&#xa0;[<italic>j</italic>] at index <italic>j</italic> is shorter than the link length <italic>l</italic>. In this case, the path index must be decremented until the fitting case 1 is valid. Then, the point on the path corresponds to the intersection between the sphere of radius <italic>r</italic> &#x3d; <italic>l</italic> and the line formed by the previous and current path point, similarly as in case 1. This algorithm is represented in <xref ref-type="fig" rid="F3">Figure&#xa0;3</xref> and is summarized in the <xref ref-type="statement" rid="Algorithm2">Algorithm&#xa0;2</xref>.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption>
<p>Virtual robot fitting by back-propagation onto the path. Sphere line intersection is used to find where each link with different lengths fits onto the path.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g003.tif"/>
</fig>
<p>
<statement content-type="algorithm" id="Algorithm2">
<label>Algorithm 2</label>
<p>Virtual Robot Fitting</p>
<p>
<inline-graphic xlink:href="frobt-10-1211876-fx2.tif"/>
</p>
</statement>
</p>
</sec>
</sec>
<sec id="s2-5">
<title>2.5 Inverse kinematics</title>
<p>Now that all the intermediary target points are known, the next step consists of finding an inverse kinematics solution for the robot to follow the desired path. Conventional inverse kinematics algorithms consider only the end effector of the robot. The Jacobian approach allows to iteratively find a solution to place the tip of the robot in a desired position and orientation without explicitly considering intermediary joints. The Jacobian is defined as follow (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>):<disp-formula id="e6">
<mml:math id="m26">
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3c9;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>J</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.3333em" class="nbsp"/>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
<label>(6)</label>
</disp-formula>where <italic>v</italic>
<sub>
<italic>e</italic>
</sub> is the end effector velocity, <italic>J</italic>&#xa0;(6 &#xd7; <italic>n</italic>) is the geometric Jacobian matrix of the robot defined in the base frame, <italic>n</italic> is the robot&#x2019;s DOFs, <inline-formula id="inf21">
<mml:math id="m27">
<mml:msub>
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is the linear velocity of the tip, and <italic>&#x3c9;</italic>
<sub>
<italic>e</italic>
</sub> the angular velocity with <italic>J</italic> defined as follow (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>):<disp-formula id="e7">
<mml:math id="m28">
<mml:mi>J</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(7)</label>
</disp-formula>where <inline-formula id="inf22">
<mml:math id="m29">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf23">
<mml:math id="m30">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> relate to linear velocities and angular velocities respectively. <inline-formula id="inf24">
<mml:math id="m31">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is calculated iteratively as follow (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>):<disp-formula id="e8">
<mml:math id="m32">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>for&#x2009;a&#x2009;prismatic&#x2009;joint</mml:mtext>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#xd7;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>for&#x2009;a&#x2009;revolute&#x2009;joint</mml:mtext>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(8)</label>
</disp-formula>and <inline-formula id="inf25">
<mml:math id="m33">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> is calculated iteratively as follow (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>):<disp-formula id="e9">
<mml:math id="m34">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>0</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>for&#x2009;a&#x2009;prismatic&#x2009;joint</mml:mtext>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>z</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>for&#x2009;a&#x2009;revolute&#x2009;joint</mml:mtext>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(9)</label>
</disp-formula>
</p>
<p>In order to follow a desired path in a serpentine motion, one must consider all the joints of the kinematic chain. To this end, we introduce herewith the concept of a full-body Jacobian matrix <italic>J</italic>
<sub>
<italic>F</italic>
</sub>. The concept of extending/augmenting the Jacobian of a manipulator to consider additional constraints such as joint limits or obstacles is known in the literature (<xref ref-type="bibr" rid="B39">Sciavicco and Siciliano, 1988</xref>; <xref ref-type="bibr" rid="B43">Slotine, 1991</xref>). In the context of this paper, the proposed full-body Jacobian is combined with a full-body inverse kinematic algorithm allowing to control all the joints individually and in a controlled way.The objective of the proposed algorithm is to minimize the error between each path point and each link&#x2019;s end of the robot. As the path points are defined in 3D space, only the Cartesian distance is needed for the intermediate body joints, so only the linear velocity need to be considered. The head of the robot however needs to be controlled in orientation as well, hence only the angular velocity of the robot&#x2019;s tip need to be computed. As a result, the extended Jacobian <italic>J</italic>
<sub>
<italic>F</italic>
</sub>&#xa0;((3<italic>n</italic> &#x2b; 3) &#xd7; <italic>n</italic>) stacks the Jacobians of each link as if it was an end effector and is defined as follow.<disp-formula id="e10">
<mml:math id="m35">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>11</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>21</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center"/>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(10)</label>
</disp-formula>where <inline-formula id="inf26">
<mml:math id="m36">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> and <inline-formula id="inf27">
<mml:math id="m37">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.3333em"/>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mn>3</mml:mn>
<mml:mo>&#xd7;</mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> relates to linear velocities of each link&#x2019;s end of the robot calculated as a traditional Jacobian (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>). Entries of the Jacobian which are not defined (first columns of first links) are set to 0 as shown in the <xref ref-type="statement" rid="Algorithm3">Algorithm&#xa0;3</xref>.</p>
<p>
<statement content-type="algorithm" id="Algorithm3">
<label>Algorithm 3</label>
<p>full-body Jacobian Computation</p>
<p>
<inline-graphic xlink:href="frobt-10-1211876-fx3.tif"/>
</p>
</statement>
</p>
<p>Finally, the full-body inverse kinematics equation can be expressed as follow:<disp-formula id="e11">
<mml:math id="m38">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo>&#x307;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mo>&#x3d;</mml:mo>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:mfenced>
<mml:msub>
<mml:mrow>
<mml:mi>v</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(11)</label>
</disp-formula>where <inline-formula id="inf28">
<mml:math id="m39">
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</inline-formula> is the Moore-Penrose pseudo-inverse of <italic>J</italic>
<sub>
<italic>F</italic>
</sub> computed using a singular value decomposition, and <italic>v</italic>
<sub>
<italic>f</italic>
</sub> is the full-body velocity vector. Eq.&#xa0;<xref ref-type="disp-formula" rid="e11">11</xref> can be used to solve for the full-body inverse kinematics by integrating the velocities over time iteratively (<xref ref-type="bibr" rid="B10">Buss, 2009</xref>):<disp-formula id="e12">
<mml:math id="m40">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mspace width="0.28em"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:math>
<label>(12)</label>
</disp-formula>with <italic>&#x3b1;</italic> a scalar that can be used to scale the convergence at each iteration, and <italic>e</italic>
<sub>
<italic>f</italic>
</sub>&#xa0;((3<italic>n</italic> &#x2b; 3) &#xd7; 1) is the full-body error between the current robot position and the desired path target points, defined as follow:<disp-formula id="e13">
<mml:math id="m41">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(13)</label>
</disp-formula>with <italic>e</italic>
<sub>
<italic>P</italic>
</sub>&#xa0;(3 <italic>n</italic> &#xd7; 1) the position error and <italic>e</italic>
<sub>
<italic>O</italic>
</sub>&#xa0;(3 &#xd7; 1) the orientation error of the snake&#x2019;s head. <italic>e</italic>
<sub>
<italic>P</italic>
</sub> is calculated as follow:<disp-formula id="e14">
<mml:math id="m42">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>P</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>d</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>p</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(14)</label>
</disp-formula>with <italic>p</italic>
<sub>
<italic>d</italic>
</sub>&#xa0;(3 <italic>n</italic> &#xd7; 1) the vector of desired target points, and <italic>p</italic>
<sub>
<italic>e</italic>
</sub>&#xa0;(3 <italic>n</italic> &#xd7; 1) the vector of the current state of each link. <italic>e</italic>
<sub>
<italic>O</italic>
</sub> is computed using the angle and axis approach (<xref ref-type="bibr" rid="B42">Siciliano&#xa0;et&#xa0;al., 2010</xref>):<disp-formula id="e15">
<mml:math id="m43">
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>O</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x3b2;</mml:mi>
<mml:mspace width="0.28em"/>
<mml:mi>s</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>&#x3d1;</mml:mi>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(15)</label>
</disp-formula>with <italic>&#x3b2;</italic> and <italic>&#x3d1;</italic> representing the angle and axis respectively of the rotation between the current robot orientation and the desired orientation. Eq.&#xa0;<xref ref-type="disp-formula" rid="e12">12</xref> is the main equation used to find a local optimal solution that will bring the joints as close as possible to the desired path. This iterative equation is used every time the head of the robot is moved. Therefore, using (12) in real-time would result in a FTL-like motion, where the robot follows the path in the best physically possible way.</p>
<p>However, the concept of MOVE consists of using all the available surrounding space which Eq.&#xa0;<xref ref-type="disp-formula" rid="e12">12</xref> cannot fulfill. To allow this extended feature, this paper proposes to add a weighting matrix to the iterative Eq&#xa0;<xref ref-type="disp-formula" rid="e12">12</xref>. The goal of the weighting matrix is to assign a weight to each link&#x2019;s end which will determine the degree of importance to bring this specific link close to the path. Higher weights mean that the point must be as close as possible to the path, while lower weights will result in the link&#x2019;s end being further away. As the robot moves inside the lumen, the weight can be altered <italic>in-situ</italic> to obtain different behaviours depending on the available space around the links of the robot. In the latter scenario, the weights can be set from various types of sensors, such as tactile, stereo-vision, infrared, ultrasonic, <italic>etc</italic>. The final weighted iterative equation is shown below:<disp-formula id="e16">
<mml:math id="m44">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mspace width="0.28em"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:mi>W</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:math>
<label>(16)</label>
</disp-formula>with <italic>W</italic>&#xa0;(<italic>e</italic>
<sub>
<italic>f</italic>
</sub>)&#xa0;((3 <italic>n</italic> &#x2b; 3) &#xd7; (3 <italic>n</italic> &#x2b; 3)) the diagonal weighting matrix calculated using the error vector. There is a vast variety of weighting scenario that can be used to calculate <italic>W</italic>&#xa0;(<italic>e</italic>
<sub>
<italic>f</italic>
</sub>) depending on the final application, the sensing method used and whether the signal is discrete or continuous.</p>
<p>One possible approach is to allow each link of the robot to be within a set distance of the target. If the robot is further from this threshold, the robot should converge toward the solution; as the link approach, they should continuously slow down the convergence until the desired threshold is reached. This can be done using the following equation to calculate <italic>W</italic>&#xa0;(<italic>e</italic>
<sub>
<italic>f</italic>
</sub>):<disp-formula id="e17">
<mml:math id="m45">
<mml:msub>
<mml:mrow>
<mml:mi>W</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mi>s</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>g</mml:mi>
<mml:mi>n</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>w</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:msup>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2212;</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>b</mml:mi>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>3</mml:mn>
</mml:mrow>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:msup>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>if&#x2009;</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2260;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mn>0</mml:mn>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mspace width="1em"/>
<mml:mtext>if&#x2009;</mml:mtext>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(17)</label>
</disp-formula>with <italic>w</italic>
<sub>
<italic>i</italic>
</sub> a scalar allowing to turn weighting on (<italic>w</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; 1) or off (<italic>w</italic>
<sub>
<italic>i</italic>
</sub> &#x3d; 0), <italic>a</italic> and <italic>b</italic> two scalars than can be used to set the desired threshold distance. An example of used values is plotted in <xref ref-type="fig" rid="F4">Figure&#xa0;4</xref>. The advantage of using Eq.&#xa0;<xref ref-type="disp-formula" rid="e17">17</xref> is that the error is almost unaffected while outside the threshold distance as the function will tend to 1 and results in a linear function, and it will quickly and continuously attenuate the error once within the desired threshold distance and as a result stop the convergence of Eq&#xa0;<xref ref-type="disp-formula" rid="e16">16</xref>. As some joints will be allowed to move more as they are less important to the solution, it is then possible to exploit the null-space of the robot to add a second constraint to the optimization (<xref ref-type="bibr" rid="B31">Liegeois, 1977</xref>) such as staying as close as possible to the joint centre position to reduce tendon stress due to excessive joint bending and resulting friction. This can be done as follow:<disp-formula id="e18">
<mml:math id="m46">
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>&#x2b;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2b;</mml:mo>
<mml:mi>&#x3b1;</mml:mi>
<mml:mspace width="0.28em"/>
<mml:msubsup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msubsup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:mi>W</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mspace width="0.28em"/>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>f</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">&#x7c;</mml:mo>
<mml:mo>&#x2b;</mml:mo>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>&#x2212;</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>&#x2020;</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
<mml:mi>J</mml:mi>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>q</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
</mml:mfenced>
<mml:mi>&#x3c6;</mml:mi>
</mml:math>
<label>(18)</label>
</disp-formula>with <italic>&#x3c6;</italic> the secondary objective function allowing to reduce the tendon stress by keeping the joints as close as possible to their centre position, and is defined as follow (<xref ref-type="bibr" rid="B20">Girard and Maciejewski, 1985</xref>):<disp-formula id="e19">
<mml:math id="m47">
<mml:mi>&#x3c6;</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mi>&#x2207;</mml:mi>
<mml:mi>H</mml:mi>
<mml:mtext>&#x2009;and&#x2009;</mml:mtext>
<mml:mi>H</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:munderover accentunder="false" accent="true">
<mml:mrow>
<mml:mo>&#x2211;</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x3d;</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munderover>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b7;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mfenced open="(" close=")">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2212;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfenced>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msup>
</mml:math>
<label>(19)</label>
</disp-formula>with <italic>&#x3b7;</italic>
<sub>
<italic>i</italic>
</sub> a scalar acting as a gain with values between [0,1], and <inline-formula id="inf29">
<mml:math id="m48">
<mml:msub>
<mml:mrow>
<mml:mi>&#x3b8;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>c</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:msub>
</mml:math>
</inline-formula> the centre value of joint <italic>i</italic>. It is important to note that Eq.&#xa0;<xref ref-type="disp-formula" rid="e18">18</xref> uses both the full-body Jacobian and the standard Jacobian as defined in Eq.&#xa0;<xref ref-type="disp-formula" rid="e7">7</xref>.</p>
<p>The final feature of MOVE is to allow conservative retraction motion by using the same path than the one used during the insertion and is discussed in the next Section.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption>
<p>Weighting function used for MOVE. When the error is large, it is not affected as the function is close to be linear. As the error decreases, it is continuously attenuated by a pre-determined threshold. Three different examples of attenuation are plotted here.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g004.tif"/>
</fig>
</sec>
<sec id="s2-6">
<title>2.6 Conservative motion</title>
<p>Conservative motion is a critical feature in endoscopic surgery. As the robot navigates inside the lumen, the surgeon uses the vision feedback combined with his/her situation awareness to find the safest path to follow. Therefore, the robot must follow the exact same path during the retraction phase which cannot be insured with traditional tip control. As the path is sampled and saved during the path creation phase, the proposed navigation framework has the intrinsic property of being conservative.</p>
</sec>
<sec id="s2-7">
<title>2.7 Mechanical fault tolerance</title>
<p>The proposed navigation approach, using all the available space, and trying to find the best fit to the path, can also be exploited to compensate for potential mechanical failures that can arise during surgery. Tendons are ideal for miniaturization and remote force transmission, but are also prone to failures if exposed to excessive forces or friction. Types of failure include, for example,: complete snapping, broken core, bird-caging, kinking, and it is safer to stop the actuation when any type of failure occurs. Typical tendon driven instruments on existing surgical robots are therefore restricted to a limited amount of use to avoid the risk of such scenarios from happening, but such failures are still known to occur (<xref ref-type="bibr" rid="B16">Freschi&#xa0;et&#xa0;al., 2013</xref>). Although rigid instruments can often be extracted and replaced quickly, in the case of flexible systems, the loss of one or multiple tendons could potentially prevent the safe extraction of the robot. In the case of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot, there is a considerable amount of tendons used as each pair of joint is connected to 2 tendons (26 tendons). Considering that a tendon failure can be detected by either monitoring the motor current, or by measuring the tendon tension with sensors, the proposed MOVE framework has the intrinsic capability to compensate for the loss of one or more DOFs. In (33), we introduced a method to handle joint-limits by modifying the corresponding Jacobian columns. This approach can be further extended to also handle mechanical failures and ensure a fail-safe mode allowing the operator to finish the procedure and safely extract the robot. The full-body Jacobian <italic>J</italic>
<sub>
<italic>F</italic>
</sub>((3<italic>n</italic> &#x2b; 3) &#xd7; <italic>n</italic>) presented earlier can be represented as an aggregate of column vectors (<xref ref-type="bibr" rid="B2">Ben-Gharbia&#xa0;et&#xa0;al., 2014</xref>):<disp-formula id="e20">
<mml:math id="m49">
<mml:msub>
<mml:mrow>
<mml:mi>J</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>F</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="[" close="]">
<mml:mrow>
<mml:mtable class="matrix">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:mo>&#x2026;</mml:mo>
</mml:mtd>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(20)</label>
</disp-formula>Where each column <italic>j</italic>
<sub>
<italic>i</italic>
</sub> represents the contribution of joint <italic>i</italic>&#x2019;s velocity toward the movement of the robot in Cartesian space. In the case where a tendon attached to joint <italic>i</italic> is found to be faulty, the corresponding column <italic>j</italic>
<sub>
<italic>i</italic>
</sub> will be set to the column vector zero as follow:<disp-formula id="e21">
<mml:math id="m50">
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>&#x3d;</mml:mo>
<mml:mfenced open="{" close="">
<mml:mrow>
<mml:mtable class="cases">
<mml:mtr>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mrow>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mo>&#x20d7;</mml:mo>
</mml:mover>
</mml:mrow>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mtext>if&#x2009;tendon&#x2009;</mml:mtext>
<mml:mi>i</mml:mi>
<mml:mtext>&#x2009;is&#x2009;faulty</mml:mtext>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="left">
<mml:msub>
<mml:mrow>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="1em"/>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mtext>otherwise</mml:mtext>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
</mml:mfenced>
</mml:math>
<label>(21)</label>
</disp-formula>
</p>
<p>Using Eq.&#xa0;<xref ref-type="disp-formula" rid="e21">21</xref> reflects the loss of one or multiple DOFs in the least square equations. As the column is set to zero, the contribution of that joint is voided and the corresponding joint value <italic>&#x3b8;</italic>
<sub>
<italic>i</italic>
</sub> will not be changed anymore. As the MOVE framework tries to minimize the distance from the path while allowing some free space around it, Eq.&#xa0;<xref ref-type="disp-formula" rid="e11">11</xref> now considers the lost DOF and finds the best fit to the desired path. As the robot is redundant, the remaining operational joints will therefore move to compensate for the faulty one(s).</p>
</sec>
</sec>
<sec id="s3">
<title>3 Implementation and results</title>
<p>As the implementation of the MOVE requires specific features such as the full-body Jacobian and real-time performance, a custom C&#x2b;&#x2b; library was developed: EndoRob (<xref ref-type="bibr" rid="B3">Berthet-Rayne, 2018</xref>). EndoRob is an open-source, cross-platform, multi-threaded robotics library allowing to do forward kinematics, iterative inverse kinematics (Jacobian transpose, pseudo-inverse, damped least square, null-space, full-body <italic>etc.</italic>) and can be found here: <ext-link ext-link-type="uri" xlink:href="http://takskal.free.fr/EndoRob/">http://takskal.free.fr/EndoRob/</ext-link>. The code depends only on the standard c&#x2b;&#x2b; library as well as Eigen for the linear algebra (<xref ref-type="bibr" rid="B23">Guennebaud and Jacob, 2010</xref>). The algorithm was running on a standard Desktop computer with an i7-4790 CPU (Intel, USA) and 16&#xa0;GB of RAM. The simulator presented in (33) was used to teleoperate the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> in a clinically relevant environment.</p>
<sec id="s3-1">
<title>3.1 Basic solver</title>
<p>The results of the implementation of Eq.&#xa0;<xref ref-type="disp-formula" rid="e12">12</xref>, which is a basic full-body inverse kinematics solver, are shown in <xref ref-type="fig" rid="F5">Figures&#xa0;5A</xref>, <xref ref-type="fig" rid="F5">5B</xref>, <xref ref-type="fig" rid="F6">6A</xref>. In this case, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is fitted to the path without weights or tendon-stress reduction. It can be seen in <xref ref-type="fig" rid="F5">Figures&#xa0;5A,&#xa0;B</xref> that the virtual fitting (pure FTL navigation) matches the head&#x2019;s path perfectly and that the robot&#x2019;s link are fitted as close as mechanically feasible to the path to minimize the overall error norm.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption>
<p>
<bold>(A,B)</bold> Examples of head control using a basic solver. As the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> joints are mechanically coupled and are not omni-directional, the robot cannot exactly follow the path, resulting in control inaccuracies. <bold>(C,D)</bold> Example of head control with a high weight on the head and on the base of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>. The resulting fitting is more accurate on the head position than without any weight.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g005.tif"/>
</fig>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption>
<p>This figures shows the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> during an insertion motion with the corresponding head path, virtual fitting (FTL motion) and robot fitting. <bold>(A)</bold> Basic solver without any navigation weight. <bold>(B)</bold> High weight on the head and a large error tolerance. <bold>(C)</bold> High weight on the head and a small error tolerance.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g006.tif"/>
</fig>
<p>As the robot&#x2019;s joints are mechanically constrained, and therefore are not free to move in all directions, it can be seen that several joints need to be actuated to match the desired <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>&#x2019;s head position and orientation. As a result, there is a significant difference between the expected and real head position, which is not a desired behaviour for surgical teleoperation as the robot&#x2019;s head should be exactly where the surgeon specified during teleoperation.</p>
<p>The basic solver still allows to follow complex 3D motion as depicted in <xref ref-type="fig" rid="F7">Figure&#xa0;7</xref> where the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is fitted onto a coil-like trajectory with limited error.</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption>
<p>
<bold>(A)</bold> Rendering of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> following a 3D coil like trajectory. <bold>(B)</bold> XZ plane projective view and characterization. <bold>(C)</bold> YZ plane projective view and characterization.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g007.tif"/>
</fig>
</sec>
<sec id="s3-2">
<title>3.2 Navigating toward the throat</title>
<p>Although the basic solver does not guarantee that the robot&#x2019;s head is exactly on target, its performance was also evaluated during a simulated navigation down the throat as shown in <xref ref-type="fig" rid="F6">Figure&#xa0;6A</xref>. It can be seen that the robot is able to navigate down the oesophagus in a FTL-like fashion. This basic-solver results show the potential of the MOVE framework as the features introduced in<xref ref-type="sec" rid="s2">Section&#xa0;2</xref> (body weights, error tolerance, path weights, stress reduction, and mechanical fault tolerance) will be added.</p>
</sec>
<sec id="s3-3">
<title>3.3 Weighted solver</title>
<p>The results of the weighted solver presented in Eq.&#xa0;<xref ref-type="disp-formula" rid="e16">16</xref> are shown in <xref ref-type="fig" rid="F5">Figures&#xa0;5C,&#xa0;D</xref>. In this example, the head and the base of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> were given the highest weight while all the other joints were assigned the lowest weight. This results in the control of the head being more accurate than without any weights. This can be seen in <xref ref-type="fig" rid="F5">Figures&#xa0;5C,&#xa0;D</xref> as the head follows the desired path exactly at the cost of the other joints moving to compensate for the desired configuration. This behaviour is still unsafe for clinical use as the joint motion of low-weighted joints is still not controlled and can result in undesired configuration.</p>
</sec>
<sec id="s3-4">
<title>3.4 Weighted solver with error tolerance</title>
<p>Introducing a controlled error tolerance is key to safe navigation inside a lumen. This can be done by implementing Eq.&#xa0;<xref ref-type="disp-formula" rid="e16">16</xref> into the solver. The results with different error tolerances are shown in <xref ref-type="fig" rid="F6">Figure&#xa0;6B</xref> (large tolerance) and in <xref ref-type="fig" rid="F6">Figure&#xa0;6C</xref> (small tolerance). In this case, the error tolerance is manually assigned to the individual <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>&#x2019;s joints, but in practice this information would be sensor dependent and would reflect the surrounding anatomy&#x2019;s shape.</p>
</sec>
<sec id="s3-5">
<title>3.5 Extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>
</title>
<p>In order to further demonstrate the key capabilities of the MOVE framework, in the rest of this paper, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot was extended by doubling its length and amount of joints. This can be done by adding the entries 7 to 30&#xa0;at the end of the DH <xref ref-type="table" rid="T1">Table&#xa0;1</xref>. This results in a new hyper-redundant extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot with 54 joint variables as shown in <xref ref-type="fig" rid="F8">Figure&#xa0;8</xref>. The longer <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot can reach further down to the stomach. <xref ref-type="fig" rid="F8">Figure&#xa0;8</xref> shows an example of insertion.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption>
<p>Example of navigation of the extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> going through the mouth. The user only controls the head, and the rest of the body will follow the head&#x2019;s path as much as mechanically feasible.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g008.tif"/>
</fig>
</sec>
<sec id="s3-6">
<title>3.6 Path weights</title>
<p>The concept of weights can be further extended so the weights are not assigned to the robot directly but rather to the path itself. As the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is navigating and the path is created, path weights can be assigned to the path points using sensor information. As the robot navigates, these path weights can be dynamically assigned to the joints passing the corresponding path points. This method has the advantage that it creates a map of large and narrow passageway and can be integrated with sensing modalities such a stereovision or tactile sensing. The result is shown in <xref ref-type="fig" rid="F9">Figure&#xa0;9</xref>, where both high path weights (right side) and no path weights (left side) are assigned to two-halves of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>&#x2019;s body during navigation. The advantage of using sensor information is that the weights would be continuous based on the sensor data and would result in smoother trajectory profiles.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption>
<p>Path weights implementation result. As the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is navigating, the path weights are dynamically assigned to the robot&#x2019;s joints. In this figure, the body of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> was divided in two parts. On the left: no path weights were assigned, and on the right: with path weights assigned.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g009.tif"/>
</fig>
</sec>
<sec id="s3-7">
<title>3.7 Tendon stress reduction</title>
<p>The results of the tendon stress reduction are depicted in <xref ref-type="fig" rid="F10">Figure&#xa0;10</xref>. The tendon stress reduction was evaluated during a retroflex motion with a large error tolerance. Having a large error tolerance allows for better tendon stress reduction as more space can be used to move the intermediary joints. <xref ref-type="fig" rid="F10">Figures&#xa0;10A,&#xa0;B</xref> have no tendon stress reduction, resulting in some joints having sharp bending angles. <xref ref-type="fig" rid="F10">Figures&#xa0;10C,&#xa0;D</xref> show the exact same trajectory but with tendon stress reduction. The resulting robot configuration spreads the joints angle more evenly and has less sharp bending angles. A rendering of the robot in the same two configuration is shown in <xref ref-type="fig" rid="F10">Figure&#xa0;10</xref> which shows that for the same trajectory, configuration a) reached joint limit, while configuration c) can still move further.</p>
<fig id="F10" position="float">
<label>FIGURE 10</label>
<caption>
<p>
<bold>(A,B)</bold> Retroflex motion without tendon stress reduction. <bold>(C,D)</bold> same motion with stress reduction. MOVE can use the available surrounding space to avoid sharp bending joint angles. For the same trajectory, it can be seen that more joints are moving but to a smaller amount. As configuration <bold>(A)</bold> reached joint limit, configuration <bold>(C)</bold> can still move further.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g010.tif"/>
</fig>
</sec>
<sec id="s3-8">
<title>3.8 Fault tolerance</title>
<p>The results of fault tolerance are shown in <xref ref-type="fig" rid="F11">Figure&#xa0;11</xref>. In this Figure, a) and g) depict a normal &#x2018;healthy&#x2019; robot that can follow the trajectory with a maximum error of 2&#xa0;mm. The detailed trajectory error is plotted in d) and shows that most links can be fitted with a sub-mm accuracy. b) Shows a faulty <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> with a damaged 4<sup>th</sup> section with the faulty joints in a close to neutral position. The corresponding positioning error keeps increasing passed the faulty joints as shown in e). c) Shows the same faulty <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> with the fault tolerance feature activated.</p>
<fig id="F11" position="float">
<label>FIGURE 11</label>
<caption>
<p>
<bold>(A,D)</bold> Healthy <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot that can follow the path and corresponding error plot. <bold>(B,E)</bold>
<italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot with a faulty 4<sup>
<italic>th</italic>
</sup> section and corresponding error plot, there is a significant difference between the real and desired robot position. <bold>(C,F)</bold> Same faulty 4<sup>
<italic>th</italic>
</sup> section but with fault tolerance activated and corresponding error plot. The solver now compensates the faulty joints with the healthy ones to stay as close to the path as possible. <bold>(G)</bold> Rendering of the healthy <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>. <bold>(H)</bold> Rendering of the faulty snake with the faulty section highlighted.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g011.tif"/>
</fig>
<p>It can be seen that the algorithm is able to find a solution to fit the faulty <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> as close as possible to the desired path which would not be possible with a simple approach such as stopping the actuation of the faulty tendon as shown in <xref ref-type="fig" rid="F11">Figure&#xa0;11</xref> b). f) Shows the positioning error that increases around the faulty joints. An important matter to consider while performing fault detection is that, although a faulty joint can be detected, knowing the faulty joint angle is important to accurately perform compensation. In <xref ref-type="fig" rid="F11">Figure&#xa0;11</xref>, it was assumed that all the joints would stay almost straight as the hardware running inside of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> (instrument channels, Bowden cables, camera&#x2019;s wires, sheath, <italic>etc</italic>.) would act as a spring keeping the joints almost straight as in traditional endoscopy.</p>
<p>An alternative would be to estimate the faulty joint angle by interpolating the angles between the adjacent healthy joints. This assumption was made only to show the potential of fault tolerance. Real-life applications would either require individual internal joint sensing, <italic>e.g.</italic>, optical sensing (<xref ref-type="bibr" rid="B38">Schmitz&#xa0;et&#xa0;al., 2017</xref>), FBG sensors (<xref ref-type="bibr" rid="B32">Liu&#xa0;et&#xa0;al., 2015</xref>) or external shape sensing with a sheath that can also sense external contacts (<xref ref-type="bibr" rid="B46">Wasylczyk&#xa0;et&#xa0;al., 2018</xref>). In any of these cases, MOVE would be able to perform the compensation as long as the faulty joint angles can be estimated.</p>
</sec>
<sec id="s3-9">
<title>3.9 Whole body solver performance</title>
<p>The performance of the solver was evaluated to assess its real-time capabilities. To evaluate the real-time performance, a trajectory was pre-recorded using the simulator. This trajectory recorded in the master &#x2018;space&#x2019; is then used to generate a trajectory in the &#x201c;slave&#x201d; space that can be fed to the solver (solver trajectories are robot dependent as they depend on the amount of joints). The &#x201c;slave&#x201d; trajectory is then fed to the solver at varying frequencies (from 1Hz to 2&#xa0;kHz) which means that the higher the frequency, the less time the solver has to converge to a solution. In the case of the extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>, the full-body Jacobian size is (165 &#xd7; 54), and reaches (381 &#xd7; 126) with <italic>n</italic> &#x3d; 126 in the most complex robot architecture tested.</p>
<p>
<xref ref-type="fig" rid="F12">Figure&#xa0;12</xref> illustrates the corresponding results. The evaluation was performed using several <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>-like robots architecture with increasing complexity with &#x2018;n&#x2019; being the amount of joint variables before mechanical coupling. The plots show the averaged RMS error between the link position and the path. The initial starting error is not zero as the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is not able to exactly follow the path. For the extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>, the error does not significantly change up to 700&#xa0;Hz and can run at more than 1&#xa0;kHz with sub-mm accuracy. The error of more complex robots is lower at low frequency as they have more joints and hence the average error per joint is decreased.</p>
<fig id="F12" position="float">
<label>FIGURE 12</label>
<caption>
<p>Performance evaluation of the proposed MOVE solver. A pre-recorded trajectory is fed to the solver at increasing frequency reducing the allowed time to converge to a good solution. The results show the averaged RMS error per joint. For the extended <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>(<italic>n</italic> &#x3d; 54) the solver can run at frequencies of up to 1&#xa0;kHz with sub-mm accuracy.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g012.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<title>4 Real robot implementation</title>
<p>The MOVE framework was implemented and tested on the real <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot presented in (13). The setup consists of an iiwa 7 robotic arm (KUKA, Germany) holding and providing the insertion motion to the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot as shown in <xref ref-type="fig" rid="F13">Figure&#xa0;13</xref>. During a clinical application, the patients would lie on their back or on the side and the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> would be inserted from the top of the head as depicted in <xref ref-type="fig" rid="F14">Figure&#xa0;14</xref>.</p>
<fig id="F13" position="float">
<label>FIGURE 13</label>
<caption>
<p>MOVE framework implementation on the real <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot. The system is composed of a KUKA robotic arm, the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> and a head phantom. The patient would lie on the back or eventually on the side during the procedure.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g013.tif"/>
</fig>
<fig id="F14" position="float">
<label>FIGURE 14</label>
<caption>
<p>Time lapse of MOVE implemented on the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot during a vertical motion <bold>(A)</bold> and a horizontal motion <bold>(B)</bold>. The insertion motion is provided by the Kuka robot.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g014.tif"/>
</fig>
<p>For the control, a laptop computer with an intel i7-8750H CPU and 16&#xa0;Gb of RAM was used to run the MOVE framework and to teleoperate the navigation using keyboard input. The control is done as described in <xref ref-type="sec" rid="s2">Section&#xa0;2</xref> using the following keyboard keys.<list list-type="simple">
<list-item>
<p>&#x2022; &#x2018;I&#x2019; uses the Kuka robot to do the insertion motion.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;O&#x2019; uses the Kuka robot to do the retraction motion.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;Up arrow&#x2019; moves the head of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> up.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;Down arrow&#x2019; moves the head of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> down.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;Left arrow&#x2019; moves the head of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> left.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;Right arrow&#x2019; moves the head of the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> right.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;7&#x2019; moves the head of the snake counter-clockwise.</p>
</list-item>
<list-item>
<p>&#x2022; &#x2018;9&#x2019; moves the head of the snake clockwise.</p>
</list-item>
</list>
</p>
<p>The purpose of this hardware implementation is to validate on a real robot the MOVE concept. During clinical applications, the control would be done with a different master interface such as a joystick or a custom made master manipulator. Two types of motion were tested: vertical and horizontal insertion as shown in <xref ref-type="fig" rid="F14">Figure&#xa0;14</xref> and in the attached video. It can be seen that the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> performs the MOVE smoothly as validated in <xref ref-type="sec" rid="s3">Section&#xa0;3</xref>. As the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> is inserted, the rest of the body follows the path taken by the head. No further characterizations were performed on the joint motion accuracy of the physical robot. The <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic>&#x2019;s joint motion characterization has been previously presented in (34) and further characterization is beyond the scope of this paper. The current <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> hardware is currently being further developed to improve the overall positioning accuracy.</p>
</sec>
<sec sec-type="discussion" id="s5">
<title>5 Discussion</title>
<sec id="s5-1">
<title>5.1 Parameter tuning</title>
<p>There are various parameters that can be tuned in the MOVE framework. The error tolerance function and parameters can be tuned to either match the size of the lumen or to define a soft limit, hence allowing to use the available space. This function was implemented to ensure a smooth transition between the forbidden and the allowed regions (rather than a &#x2018;bang-bang&#x2019; type of control), but other types of functions could also be used. While in the allowed region, the other parameters such as tendon-stress reduction will induce joint motion, but once in the forbidden region, the solver will always aim to converge to the minimal error and hence override these factors.</p>
<p>Regarding the path sampling resolution, it is defined in the workspace of the robot. It determines the level of precision of the path taken by the robot. Hence, it is task dependent rather than robot dependent. If the resolution is 1&#xa0;mm, additional control points will only be added if the robot motion is greater than 1&#xa0;mm. For navigation through the oesophagus, a sub-mm resolution is sufficient clinically. In the case of lung, endovascular, or brain application, this resolution should be smaller.</p>
</sec>
<sec id="s5-2">
<title>5.2 Sensor integration</title>
<p>The fact that the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> cannot always satisfy the desired path is an intrinsic design limitation which cannot be compensated by a simplistic FTL navigation. The <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> cannot intrinsically perform FTL motion since its joints can only move in one direction. The concept of MOVE is to allow the use of the surrounding space in a controlled way. In <xref ref-type="fig" rid="F6">Figure&#xa0;6A</xref>, we show the problem of pure FTL navigation with no controlled error. The resulting behaviour of the robot is unpredictable as it is dictated by the kinematics equations of the solver and different joint configurations will result in different behaviours. With the additional features of MOVE introduced such as error tolerance and weights, it is now possible to control the error between the robot and the path. This behaviour is much safer for surgical applications.</p>
<p>The use of sensors could further improve the safety by avoiding excessive pressure on the lumen. In practice, the surgeon must be aware of the limitations of the system (as in traditional surgery or robotic surgery; all instruments have limitations) but it should be handled by the robot and not the operator. The use of sensors could alert if an excessive pressure is detected. If the lumen is closing on each side, which is likely to happen during endoscopic application, the ideal approach would be to balance the pressure on each side to ensure a safe navigation. In all cases the system should have a maximum pressure allowed to avoid the tearing of the lumen.</p>
<p>During endoscopy, excessive forces against sharp bends such as in the colon can result in patient injury. In the context of MOVE, this risk is significantly reduced, as the robotic endoscope will actively follow the path without relying on anatomical structures as a guide. However, it is inevitable that the patient moves during the procedure, which could result in unexpected anatomical change and excessive contact force between the robot and the anatomy. This can be avoided if the robot is equipped with force or contact sensors. The sensor information can be used to alter the virtual robot fitting, so the new fitting point is away from the head&#x2019;s path and in a contact free area.</p>
<p>This process could consist of translating the head path segment where a contact was detected, and to translate this segment opposite to the contact and normal to the contact direction as illustrated in <xref ref-type="fig" rid="F15">Figure&#xa0;15</xref>. The new fitting point would be located at the intersection between the translated path segment and the link&#x2019;s sphere as in the normal fitting procedure. Once a safe point is found, the fitting could continue as normal.</p>
<fig id="F15" position="float">
<label>FIGURE 15</label>
<caption>
<p>Virtual robot adjustment. In case of unexpected contact detected by force or contact sensors (black point at <italic>t</italic> &#x3d; 0 and <italic>t</italic> &#x3d; 1), the virtual fitting can be adjusted to find a contact-free point (green point) away from the path. Once the point adjusted, the fitting continues as normal.</p>
</caption>
<graphic xlink:href="frobt-10-1211876-g015.tif"/>
</fig>
</sec>
</sec>
<sec sec-type="conclusion" id="s6">
<title>6 Conclusion</title>
<p>In conclusion, this paper presents the MOVE framework for full-body control of snake-like surgical robots. The proposed framework is not system specific as it uses the standardized DH convention, so it can be applied on many different types of articulated snake-like robots.</p>
<p>The key contributions of the paper include a novel FTL-like navigation concept relying on the notion of extended full-body Jacobian matrix where the available surrounding space can be used, and finally a set of navigation algorithms to follow a desired path while ensuring reduced tendon stress and fault tolerance.</p>
<p>All the introduced new features were validated in simulation and the proposed solver&#x2019;s performance was benchmarked for real-time performance. The results show that all the features of MOVE: path following, body weights, path weights, fault tolerance and conservative motion behave as expected. The solver can run in real-time on a standard computer at frequencies greater than 1&#xa0;kHz. The MOVE framework was then successfully implemented on the real <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot as shown in the attached video.</p>
<p>Future work will focus on the sensing part of the MOVE framework to provide the system with real-time information on the available surrounding space and contact forces with the environment. Further work will also be dedicated to the <italic>i</italic>
<sup>
<italic>2</italic>
</sup>
<italic>Snake</italic> robot hardware and instruments to improve the overall precision and reliability of the system for clinical applications.</p>
</sec>
</body>
<back>
<sec sec-type="data-availability" id="s7">
<title>Data availability statement</title>
<p>The original contributions presented in the study are included in the article/<ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/frobt.2023.1211876/full#supplementary-material">Supplementary Material</ext-link>, further inquiries can be directed to the corresponding author.</p>
</sec>
<sec id="s8">
<title>Author contributions</title>
<p>PB-R is the main author G-ZY is the supervisor of the PhD. All authors contributed to the article and approved the submitted version.</p>
</sec>
<sec id="s9">
<title>Funding</title>
<p>This work was supported by the EPSRC grant: EPSRC EP/P012779/1&#x2014;Micro-robotics for Surgery.</p>
</sec>
<sec sec-type="COI-statement" id="s10">
<title>Conflict of interest</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<sec sec-type="disclaimer" id="s11">
<title>Publisher&#x2019;s note</title>
<p>All claims expressed in this article are solely those of the authors and do not necessarily represent those of their affiliated organizations, or those of the publisher, the editors and the reviewers. Any product that may be evaluated in this article, or claim that may be made by its manufacturer, is not guaranteed or endorsed by the publisher.</p>
</sec>
<sec id="s12">
<title>Supplementary material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="https://www.frontiersin.org/articles/10.3389/frobt.2023.1211876/full#supplementary-material">https://www.frontiersin.org/articles/10.3389/frobt.2023.1211876/full&#x23;supplementary-material</ext-link>
</p>
<supplementary-material xlink:href="Video1.MP4" id="SM1" mimetype="application/MP4" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Alterovitz</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Goldberg</surname>
<given-names>K.</given-names>
</name>
</person-group> (<year>2008</year>). <source>Motion planning in medicine: Optimization and simulation algorithms for image-guided procedures</source>. <publisher-loc>Berlin, Germany</publisher-loc>: <publisher-name>Springer</publisher-name>.</citation>
</ref>
<ref id="B2">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Ben-Gharbia</surname>
<given-names>K. M.</given-names>
</name>
<name>
<surname>Maciejewski</surname>
<given-names>A. A.</given-names>
</name>
<name>
<surname>Roberts</surname>
<given-names>R. G.</given-names>
</name>
</person-group> (<year>2014</year>). <article-title>A kinematic analysis and evaluation of planar robots designed from optimally fault-tolerant jacobians</article-title>. <source>IEEE Trans. Rob.</source>
<volume>30</volume>, <fpage>516</fpage>&#x2013;<lpage>524</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2013.2291615</pub-id>
</citation>
</ref>
<ref id="B3">
<citation citation-type="web">
<person-group person-group-type="author">
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Endorob, a multi-thread cross-platform library for endoscopic robot control</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://takskal.free.fr/EndoRob/">http://takskal.free.fr/EndoRob/</ext-link>
</comment>.</citation>
</ref>
<ref id="B4">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Gras</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Leibrandt</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Wisanuvej</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Schmitz</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Seneci</surname>
<given-names>C. A.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). <article-title>The i<sup>2</sup>snake robotic platform for endoscopic surgery</article-title>. <source>Ann. Biomed. Eng.</source>
<volume>46</volume>, <fpage>1663</fpage>&#x2013;<lpage>1675</lpage>. <pub-id pub-id-type="doi">10.1007/s10439-018-2066-y</pub-id>
</citation>
</ref>
<ref id="B5">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Leibrandt</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Gras</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Fraisse</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Crosnier</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Inverse kinematics control methods for redundant snake-like robot teleoperation during minimally invasive surgery</article-title>. <source>IEEE Robot. Autom. Lett.</source>
<volume>3</volume>, <fpage>2501</fpage>&#x2013;<lpage>2508</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2018.2812907</pub-id>
</citation>
</ref>
<ref id="B6">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Leibrandt</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Kim</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Seneci</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Shang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Rolling-joint design optimization for tendon driven snake-like surgical robots</article-title>,&#x201d; in <conf-name>Int. Conf. on Intel. Rob. and Sys</conf-name>, <conf-loc>Madrid, Spain</conf-loc>, <conf-date>October, 1- 5, 2018</conf-date>.</citation>
</ref>
<ref id="B7">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Schmitz</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2019</year>). &#x201c;<article-title>Endoscopic bi-manual robotic instrument design using a genetic algorithm</article-title>,&#x201d; in <conf-name>IEEE/RSJ Int. Conf. on Intel. Rob. and Sys</conf-name>, <conf-loc>Madrid, Spain</conf-loc>.</citation>
</ref>
<ref id="B8">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Boctor</surname>
<given-names>E. M.</given-names>
</name>
<name>
<surname>Webster</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Mathieu</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Okamura</surname>
<given-names>A. M.</given-names>
</name>
<name>
<surname>Fichtinger</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2004</year>). <article-title>Virtual remote center of motion control for needle placement robots</article-title>. <source>Comput. Aided Surg.</source>
<volume>9</volume>, <fpage>175</fpage>&#x2013;<lpage>183</lpage>. <pub-id pub-id-type="doi">10.1080/10929080500097661</pub-id>
</citation>
</ref>
<ref id="B9">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Burgner-Kahrs</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Rucker</surname>
<given-names>D. C.</given-names>
</name>
<name>
<surname>Choset</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Continuum robots for medical applications: A survey</article-title>. <source>IEEE Trans. Rob.</source>
<volume>31</volume>, <fpage>1261</fpage>&#x2013;<lpage>1280</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2015.2489500</pub-id>
</citation>
</ref>
<ref id="B10">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Buss</surname>
<given-names>S. R.</given-names>
</name>
</person-group> (<year>2009</year>). <source>Introduction to inverse kinematics with jacobian transpose, pseudoinverse and damped least squares methods</source>. <publisher-loc>San Diego</publisher-loc>: <publisher-name>University of California</publisher-name>.</citation>
</ref>
<ref id="B11">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Chikhaoui</surname>
<given-names>M. T.</given-names>
</name>
<name>
<surname>Burgner-Kahrs</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Control of continuum robots for medical applications: State of the art</article-title>,&#x201d; in <conf-name>Int. Conf. on New Actuators</conf-name>, <conf-loc>Bremen, Germany</conf-loc>, <conf-date>25-27 June 2018</conf-date>, <fpage>1</fpage>&#x2013;<lpage>11</lpage>.</citation>
</ref>
<ref id="B12">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Choset</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Henning</surname>
<given-names>W.</given-names>
</name>
</person-group> (<year>1999</year>). <article-title>A follow-the-leader approach to serpentine robot motion planning</article-title>. <source>Jour. Aero. Eng.</source>
<volume>12</volume>, <fpage>65</fpage>&#x2013;<lpage>73</lpage>. <pub-id pub-id-type="doi">10.1061/(asce)0893-1321(1999)12:2(65)</pub-id>
</citation>
</ref>
<ref id="B13">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Cianchetti</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Ranzani</surname>
<given-names>T.</given-names>
</name>
<name>
<surname>Gerboni</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>De Falco</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Laschi</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Menciassi</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Stiff-flop surgical manipulator: Mechanical design and experimental characterization of the single module</article-title>,&#x201d; in <conf-name>Int. Conf. on Intel. Rob.and Sys. (IEEE/RSJ)</conf-name>, <conf-loc>Tokyo, Japan</conf-loc>, <conf-date>Held 3-7 November 2013</conf-date>, <fpage>3576</fpage>&#x2013;<lpage>3581</lpage>.</citation>
</ref>
<ref id="B14">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Degani</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Choset</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Wolf</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Zenati</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Highly articulated robotic probe for minimally invasive surgery</article-title>. <source>Int. Conf. Robot. Autom. (IEEE)</source>
<volume>2006</volume>, <fpage>4167</fpage>&#x2013;<lpage>4172</lpage>. <pub-id pub-id-type="doi">10.1109/ROBOT.2006.1642343</pub-id>
</citation>
</ref>
<ref id="B15">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Dupont</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Lock</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Itkowitz</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Butler</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Design and control of concentric-tube robots</article-title>. <source>IEEE Trans. Rob.</source>
<volume>26</volume>, <fpage>209</fpage>&#x2013;<lpage>225</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2009.2035740</pub-id>
</citation>
</ref>
<ref id="B16">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Freschi</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Ferrari</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Melfi</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Ferrari</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Mosca</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Cuschieri</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Technical review of the da vinci surgical telemanipulator</article-title>. <source>Int. Jour. Med. Robot. Comp. Assist. Surg.</source>
<volume>9</volume>, <fpage>396</fpage>&#x2013;<lpage>406</lpage>. <pub-id pub-id-type="doi">10.1002/rcs.1468</pub-id>
</citation>
</ref>
<ref id="B17">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Fu</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Kuntz</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Webster</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Alterovitz</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2018</year>). <article-title>Safe motion planning for steerable needles using cost maps automatically extracted from pulmonary images</article-title>. <source>IEEE/RSJ Int. Conf. Intel. Rob. Sys.</source>
<volume>2018</volume>, <fpage>4942</fpage>&#x2013;<lpage>4949</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2018.8593407</pub-id>
</citation>
</ref>
<ref id="B18">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Garriga-Casanovas</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Rodriguez y Baena</surname>
<given-names>F.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Complete follow-the-leader kinematics using concentric tube robots</article-title>. <source>Int. J. Robotics Res.</source>
<volume>37</volume>, <fpage>197</fpage>&#x2013;<lpage>222</lpage>. <pub-id pub-id-type="doi">10.1177/0278364917746222</pub-id>
</citation>
</ref>
<ref id="B19">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Gilbert</surname>
<given-names>H. B.</given-names>
</name>
<name>
<surname>Webster</surname>
<given-names>R. J.</given-names>
</name>
</person-group> (<year>2013</year>). &#x201c;<article-title>Can concentric tube robots follow the leader?</article-title>,&#x201d; in <conf-name>Int. Conf. on Robot. and Autom. (IEEE)</conf-name>, <conf-loc>Tokyo, Japan</conf-loc>, <conf-date>Held 3-6 March 2013</conf-date>, <fpage>4881</fpage>&#x2013;<lpage>4887</lpage>.</citation>
</ref>
<ref id="B20">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Girard</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Maciejewski</surname>
<given-names>A. A.</given-names>
</name>
</person-group> (<year>1985</year>). <article-title>Computational modeling for the computer animation of legged figures</article-title>. <source>
<italic>ACM</italic> SIGGRAPH Comput. Graph. (ACM)</source>
<volume>19</volume>, <fpage>263</fpage>&#x2013;<lpage>270</lpage>. <pub-id pub-id-type="doi">10.1145/325165.325244</pub-id>
</citation>
</ref>
<ref id="B21">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Glassner</surname>
<given-names>A. S.</given-names>
</name>
</person-group> (<year>1989</year>). <source>An introduction to ray tracing</source>. <publisher-loc>Amsterdam, Netherlands</publisher-loc>: <publisher-name>Elsevier</publisher-name>.</citation>
</ref>
<ref id="B22">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Gray</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1946</year>). <article-title>The mechanism of locomotion in snakes</article-title>. <source>Jour. experim. biol.</source>
<volume>23</volume>, <fpage>101</fpage>&#x2013;<lpage>120</lpage>. <pub-id pub-id-type="doi">10.1242/jeb.23.2.101</pub-id>
</citation>
</ref>
<ref id="B23">
<citation citation-type="web">
<person-group person-group-type="author">
<name>
<surname>Guennebaud</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Jacob</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>2010</year>). <article-title>Eigen v3</article-title>. <comment>Available at: <ext-link ext-link-type="uri" xlink:href="http://eigen.tuxfamily.org">http://eigen.tuxfamily.org</ext-link>
</comment>.</citation>
</ref>
<ref id="B24">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Hu</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Zhang</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>W.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Design and fabrication of a 3-d printed metallic flexible joint for snake-like surgical robot</article-title>. <source>IEEE Robot. Autom. Lett.</source>
<volume>4</volume>, <fpage>1557</fpage>&#x2013;<lpage>1563</lpage>. <pub-id pub-id-type="doi">10.1109/lra.2019.2896475</pub-id>
</citation>
</ref>
<ref id="B25">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Hwang</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>D. H.</given-names>
</name>
<name>
<surname>Ahn</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>You</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Baek</surname>
<given-names>D.</given-names>
</name>
<name>
<surname>Kim</surname>
<given-names>H.</given-names>
</name>
<etal/>
</person-group> (<year>2018</year>). &#x201c;<article-title>Flexible endoscopic surgery robot system, k-flex</article-title>,&#x201d; in <conf-name>Hamlyn Symp. on Med. Robot.</conf-name>, <conf-loc>the Royal Geographical Society</conf-loc>, <conf-date>26th &#x2013; 29th June 2023</conf-date>.</citation>
</ref>
<ref id="B26">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kang</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Kojcev</surname>
<given-names>R.</given-names>
</name>
<name>
<surname>Sinibaldi</surname>
<given-names>E.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>The first interlaced continuum robot, devised to intrinsically follow the leader</article-title>. <source>PLOS ONE</source>
<volume>11</volume>, <fpage>e0150278</fpage>. <pub-id pub-id-type="doi">10.1371/journal.pone.0150278</pub-id>
</citation>
</ref>
<ref id="B27">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kuntz</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Torres</surname>
<given-names>L. G.</given-names>
</name>
<name>
<surname>Feins</surname>
<given-names>R. H.</given-names>
</name>
<name>
<surname>Webster</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Alterovitz</surname>
<given-names>R.</given-names>
</name>
</person-group> (<year>2015</year>). <article-title>Motion planning for a three-stage multilumen transoral lung access system</article-title>. <source>IEEE/RSJ Int. Conf. Intel. Rob. Sys</source>
<volume>2015</volume>, <fpage>3255</fpage>&#x2013;<lpage>3261</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2015.7353829</pub-id>
</citation>
</ref>
<ref id="B28">
<citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname>Kwok</surname>
<given-names>K. W.</given-names>
</name>
<name>
<surname>Mylonas</surname>
<given-names>G. P.</given-names>
</name>
<name>
<surname>Sun</surname>
<given-names>L. W.</given-names>
</name>
<name>
<surname>Lerotic</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Clark</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Athanasiou</surname>
<given-names>T.</given-names>
</name>
<etal/>
</person-group> (<year>2009</year>). &#x201c;<article-title>Dynamic active constraints for hyper-redundant flexible robots</article-title>,&#x201d; in <source>Med. Image comp. And comp.-assis. Inter.</source> (<publisher-loc>Berlin, Heidelberg</publisher-loc>: <publisher-name>Springer</publisher-name>), <fpage>410</fpage>&#x2013;<lpage>417</lpage>.</citation>
</ref>
<ref id="B29">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Kwok</surname>
<given-names>K. W.</given-names>
</name>
<name>
<surname>Tsoi</surname>
<given-names>K. H.</given-names>
</name>
<name>
<surname>Vitiello</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Clark</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Chow</surname>
<given-names>G. C.</given-names>
</name>
<name>
<surname>Luk</surname>
<given-names>W.</given-names>
</name>
<etal/>
</person-group> (<year>2013</year>). <article-title>Dimensionality reduction in controlling articulated snake robot for endoscopy under dynamic active constraints</article-title>. <source>IEEE Trans. Rob.</source>
<volume>29</volume>, <fpage>15</fpage>&#x2013;<lpage>31</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2012.2226382</pub-id>
</citation>
</ref>
<ref id="B30">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Li</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Li</surname>
<given-names>X.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Xing</surname>
<given-names>Y.</given-names>
</name>
<name>
<surname>Wang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Ren</surname>
<given-names>X.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Design and evaluation of a variable stiffness manual operating platform for laparoendoscopic single site surgery (less)</article-title>. <source>Int. Jour. Med. Robot. Comp. Assist. Surg.</source>
<volume>13</volume>, <fpage>e1797</fpage>. <pub-id pub-id-type="doi">10.1002/rcs.1797</pub-id>
</citation>
</ref>
<ref id="B31">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Liegeois</surname>
<given-names>A.</given-names>
</name>
</person-group> (<year>1977</year>). <article-title>Automatic supervisory control of the configuration and behaviour of multibody mechanisms</article-title>. <source>IEEE Trans. sys., man cyber</source>
<volume>7</volume>, <fpage>868</fpage>&#x2013;<lpage>871</lpage>.</citation>
</ref>
<ref id="B32">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Liu</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Farvardin</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Pedram</surname>
<given-names>S. A.</given-names>
</name>
<name>
<surname>Iordachita</surname>
<given-names>I.</given-names>
</name>
<name>
<surname>Taylor</surname>
<given-names>R. H.</given-names>
</name>
<name>
<surname>Armand</surname>
<given-names>M.</given-names>
</name>
</person-group> (<year>2015</year>). &#x201c;<article-title>Large deflection shape sensing of a continuum manipulator for minimally-invasive surgery</article-title>,&#x201d; in <conf-name>IEEE Int. Conf. on Rob. and Auto. (IEEE)</conf-name>, <conf-loc>Seattle, Washington, USA</conf-loc>, <conf-date>26-30 May 2015</conf-date>, <fpage>201</fpage>&#x2013;<lpage>206</lpage>.</citation>
</ref>
<ref id="B33">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Low</surname>
<given-names>S. C.</given-names>
</name>
<name>
<surname>Tang</surname>
<given-names>S.</given-names>
</name>
<name>
<surname>Thant</surname>
<given-names>Z.</given-names>
</name>
<name>
<surname>Phee</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Ho</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Chung</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2006</year>). <article-title>Master-slave robotic system for therapeutic gastrointestinal endoscopic procedures</article-title>. <source>Int. Conf. IEEE Eng. Med. Bio. Soc. (IEEE)</source>
<volume>2006</volume>, <fpage>3850</fpage>&#x2013;<lpage>3853</lpage>. <pub-id pub-id-type="doi">10.1109/IEMBS.2006.259233</pub-id>
</citation>
</ref>
<ref id="B34">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Mochiyama</surname>
<given-names>H.</given-names>
</name>
<name>
<surname>Shimemura</surname>
<given-names>E.</given-names>
</name>
<name>
<surname>Kobayashi</surname>
<given-names>H.</given-names>
</name>
</person-group> (<year>1999</year>). <article-title>Shape control of manipulators with hyper degrees of freedom</article-title>. <source>Int. J. Robotics Res.</source>
<volume>18</volume>, <fpage>584</fpage>&#x2013;<lpage>600</lpage>. <pub-id pub-id-type="doi">10.1177/02783649922066411</pub-id>
</citation>
</ref>
<ref id="B35">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Mylonas</surname>
<given-names>G. P.</given-names>
</name>
<name>
<surname>Vitiello</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Cundy</surname>
<given-names>T. P.</given-names>
</name>
<name>
<surname>Darzi</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G.</given-names>
</name>
</person-group> (<year>2014</year>). &#x201c;<article-title>Cyclops: A versatile robotic tool for bimanual single-access and natural-orifice endoscopic surgery</article-title>,&#x201d; in <conf-name>Int. Conf. on Robot. and Autom. (IEEE)</conf-name>, <conf-loc>Espinho, Portugal</conf-loc>, <conf-date>May 14-15 2014</conf-date>, <fpage>2436</fpage>&#x2013;<lpage>2442</lpage>.</citation>
</ref>
<ref id="B36">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Neumann</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Burgner-Kahrs</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Considerations for follow-the-leader motion of extensible tendon-driven continuum robots</article-title>. <source>IEEE Int. Conf. Robot. Autom.</source>
<volume>2016</volume>, <fpage>917</fpage>&#x2013;<lpage>923</lpage>.</citation>
</ref>
<ref id="B37">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Roesthuis</surname>
<given-names>R. J.</given-names>
</name>
<name>
<surname>Misra</surname>
<given-names>S.</given-names>
</name>
</person-group> (<year>2016</year>). <article-title>Steering of multisegment continuum manipulators using rigid-link modeling and fbg-based shape sensing</article-title>. <source>IEEE Trans. Robot.</source>
<volume>32</volume>, <fpage>372</fpage>&#x2013;<lpage>382</lpage>. <pub-id pub-id-type="doi">10.1109/tro.2016.2527047</pub-id>
</citation>
</ref>
<ref id="B38">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Schmitz</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Thompson</surname>
<given-names>A. J.</given-names>
</name>
<name>
<surname>Berthet-Rayne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Seneci</surname>
<given-names>C. A.</given-names>
</name>
<name>
<surname>Wisanuvej</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2017</year>). <article-title>Shape sensing of miniature snake-like robots using optical fibers</article-title>. <source>IEEE/RSJ Int. Conf. Intel. Rob. Sys.</source>
<volume>2017</volume>.</citation>
</ref>
<ref id="B39">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Sciavicco</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Siciliano</surname>
<given-names>B.</given-names>
</name>
</person-group> (<year>1988</year>). <article-title>A solution algorithm to the inverse kinematic problem for redundant manipulators</article-title>. <source>IEEE J. Robotics Automation</source>
<volume>4</volume>, <fpage>403</fpage>&#x2013;<lpage>410</lpage>. <pub-id pub-id-type="doi">10.1109/56.804</pub-id>
</citation>
</ref>
<ref id="B40">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Shang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Noonan</surname>
<given-names>D. P.</given-names>
</name>
<name>
<surname>Payne</surname>
<given-names>C.</given-names>
</name>
<name>
<surname>Clark</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Sodergren</surname>
<given-names>M. H.</given-names>
</name>
<name>
<surname>Darzi</surname>
<given-names>A.</given-names>
</name>
<etal/>
</person-group> (<year>2011</year>). &#x201c;<article-title>An articulated universal joint based flexible access robot for minimally invasive surgery</article-title>.&#x201d; in <conf-name>IEEE Int. Conf. on Robot. and Autom.</conf-name>, <conf-loc>Shanghai, China</conf-loc>, <conf-date>9-13 May 2011</conf-date>, <fpage>1147</fpage>&#x2013;<lpage>1152</lpage>.</citation>
</ref>
<ref id="B41">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Shang</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Payne</surname>
<given-names>C. J.</given-names>
</name>
<name>
<surname>Clark</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Noonan</surname>
<given-names>D. P.</given-names>
</name>
<name>
<surname>Kwok</surname>
<given-names>K. W.</given-names>
</name>
<name>
<surname>Darzi</surname>
<given-names>A.</given-names>
</name>
<etal/>
</person-group> (<year>2012</year>). <article-title>Design of a multitasking robotic platform with flexible arms and articulated head for minimally invasive surgery</article-title>. <source>IEEE/RSJ Int. Conf. Intel. Rob. Sys.</source>
<volume>2012</volume>, <fpage>1988</fpage>&#x2013;<lpage>1993</lpage>. <pub-id pub-id-type="doi">10.1109/IROS.2012.6385567</pub-id>
</citation>
</ref>
<ref id="B42">
<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>Berlin, Germany</publisher-loc>: <publisher-name>Springer</publisher-name>.</citation>
</ref>
<ref id="B43">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Slotine</surname>
<given-names>S. B.</given-names>
</name>
</person-group> (<year>1991</year>). <article-title>A general framework for managing multiple tasks in highly redundant robotic systems</article-title>. <source>Int. Conf. Adv. Robotics</source>
<volume>2</volume>, <fpage>1211</fpage>&#x2013;<lpage>1216</lpage>.</citation>
</ref>
<ref id="B44">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Troccaz</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Dagnino</surname>
<given-names>G.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2019</year>). <article-title>Frontiers of medical robotics: From concept to systems to clinical translation</article-title>. <source>Annu. Rev. Biomed. Eng.</source>
<volume>21</volume>, <fpage>193</fpage>&#x2013;<lpage>218</lpage>. <comment>null</comment>. <pub-id pub-id-type="doi">10.1146/annurev-bioeng-060418-052502</pub-id>
</citation>
</ref>
<ref id="B45">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Vitiello</surname>
<given-names>V.</given-names>
</name>
<name>
<surname>Lee</surname>
<given-names>S. L.</given-names>
</name>
<name>
<surname>Cundy</surname>
<given-names>T. P.</given-names>
</name>
<name>
<surname>Yang</surname>
<given-names>G. Z.</given-names>
</name>
</person-group> (<year>2013</year>). <article-title>Emerging robotic platforms for minimally invasive surgery</article-title>. <source>IEEE Rev. Biomed. Eng.</source>
<volume>6</volume>, <fpage>111</fpage>&#x2013;<lpage>126</lpage>. <pub-id pub-id-type="doi">10.1109/rbme.2012.2236311</pub-id>
</citation>
</ref>
<ref id="B46">
<citation citation-type="confproc">
<person-group person-group-type="author">
<name>
<surname>Wasylczyk</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Ozimek</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Tiwari</surname>
<given-names>M.</given-names>
</name>
<name>
<surname>Cruz</surname>
<given-names>L. D.</given-names>
</name>
<name>
<surname>Bergeles</surname>
<given-names>C.</given-names>
</name>
</person-group> (<year>2018</year>). &#x201c;<article-title>Pressure-sensitive bio-compatible skin sleeve for millimetre-scale flexible instruments</article-title>,&#x201d; in <conf-name>Hamlyn Symp. on Med. Robot.</conf-name>, <conf-date>24th June 2018</conf-date>.</citation>
</ref>
<ref id="B47">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Wickham</surname>
<given-names>J.</given-names>
</name>
</person-group> (<year>1987</year>). <article-title>Minimally invasive surgery</article-title>. <source>Jour. Endourology</source>
<volume>1</volume>, <fpage>71</fpage>&#x2013;<lpage>74</lpage>. <pub-id pub-id-type="doi">10.1089/end.1987.1.71</pub-id>
</citation>
</ref>
<ref id="B48">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Xu</surname>
<given-names>K.</given-names>
</name>
<name>
<surname>Goldman</surname>
<given-names>R. E.</given-names>
</name>
<name>
<surname>Ding</surname>
<given-names>J.</given-names>
</name>
<name>
<surname>Allen</surname>
<given-names>P. K.</given-names>
</name>
<name>
<surname>Fowler</surname>
<given-names>D. L.</given-names>
</name>
<name>
<surname>Simaan</surname>
<given-names>N.</given-names>
</name>
</person-group> (<year>2009</year>). <article-title>System design of an insertable robotic effector platform for single port access (spa) surgery</article-title>. <source>Int. Conf. Intel. Rob. Sys</source>
<volume>2009</volume>, <fpage>5546</fpage>&#x2013;<lpage>5552</lpage>.</citation>
</ref>
<ref id="B49">
<citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname>Zorn</surname>
<given-names>L.</given-names>
</name>
<name>
<surname>Nageotte</surname>
<given-names>F.</given-names>
</name>
<name>
<surname>Zanne</surname>
<given-names>P.</given-names>
</name>
<name>
<surname>Legner</surname>
<given-names>A.</given-names>
</name>
<name>
<surname>Dallemagne</surname>
<given-names>B.</given-names>
</name>
<name>
<surname>Marescaux</surname>
<given-names>J.</given-names>
</name>
<etal/>
</person-group> (<year>2017</year>). <article-title>A novel telemanipulated robotic assistant for surgical endoscopy: Preclinical application to esd</article-title>. <source>IEEE Trans. Biomed. Engine</source>
<volume>2017</volume>, <fpage>1</fpage>.</citation>
</ref>
</ref-list>
</back>
</article>