<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="methods-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Bohr. Iam.</journal-id>
<journal-title>BOHR International Journal of Internet of things, Artificial Intelligence and Machine Learning</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Bohr. Iam.</abbrev-journal-title>
<issn pub-type="epub">2583-5521</issn>
<publisher>
<publisher-name>BOHR</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.54646/bijiam.2022.01</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Methods</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Robotic mushroom harvesting by employing probabilistic road map and inverse kinematics</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Mohanan</surname> <given-names>M. G.</given-names></name>
<xref ref-type="corresp" rid="c001"><sup>&#x002A;</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Salgaonkar</surname> <given-names>Ambuja</given-names></name>
</contrib>
</contrib-group>
<aff><institution>Department of Computer Science, University of Mumbai</institution>, <addr-line>Mumbai</addr-line>, <country>India</country></aff>
<author-notes>
<corresp id="c001">&#x002A;Correspondence: M. G. Mohanan, <email>mgmohanam@gmail.com</email>, <email>mohanan@udcs.mu.ac.in</email></corresp>
</author-notes>
<pub-date pub-type="epub">
<day>08</day>
<month>02</month>
<year>2022</year>
</pub-date>
<volume>1</volume>
<issue>1</issue>
<fpage>1</fpage>
<lpage>11</lpage>
<history>
<date date-type="received">
<day>04</day>
<month>02</month>
<year>2021</year>
</date>
<date date-type="accepted">
<day>06</day>
<month>01</month>
<year>2022</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x00A9; 2022 Mohanan and Salgaonkar.</copyright-statement>
<copyright-year>2022</copyright-year>
<copyright-holder>Mohanan and Salgaonkar</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by-nc-nd/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>A collision-free path to a destination position in a random farm is determined using a probabilistic roadmap that can manage static and dynamic obstacles. The position of ripening mushrooms is a result of picture processing. A mushroom harvesting robot is explored that uses inverse kinematics at the target position to compute the state of a robotic hand for grasping a ripening mushroom and plucking it. The Denavit&#x2013;Hartenberg approach was used to create a kinematic model of a two-finger dexterous hand with three degrees of freedom for mushroom picking. Unlike prior experiments in mushroom harvesting, mushrooms are not planted in a grid or design but are randomly scattered. At any point throughout the harvesting process, no human interaction is necessary.</p>
</abstract>
<kwd-group>
<kwd>mushroom harvesting</kwd>
<kwd>probabilistic road map</kwd>
<kwd>motion planning</kwd>
<kwd>inverse kinematics</kwd>
</kwd-group>
<counts>
<fig-count count="9"/>
<table-count count="2"/>
<equation-count count="32"/>
<ref-count count="43"/>
<page-count count="11"/>
<word-count count="7190"/>
</counts>
</article-meta>
</front>
<body>
<sec id="S1" sec-type="intro">
<title>Introduction</title>
<p>This provides pointers to contemporary research on employing robotics in agriculture. The emphasis is on automation of the process of mushroom plucking. The method is applicable for the plucking of mushrooms if they are cultivated in a bed or even otherwise, if they are cultivated randomly on a farm. Many times, mushrooms are ready but there is little skilled labor available to pluck them; this situation causes a significant loss to mushroom farmers because the mushrooms perish immediately. A dexterous robotic hand model proposed in this paper is a solution to overcome these losses. We employ the probabilistic roadmap planning algorithm for a robot to reach the ripped mushrooms by avoiding the static and dynamic obstacles in its path. Inverse kinematics (IK) has been employed for letting the hand reach the exact location of a ripped bud and letting the fingers decide a configuration that holds the mushroom. The hand holding the mushroom is then moved vertically up. The action results in mushroom-plucking. First of all, the mushroom cultivation considered here is as an intercrop and is considered to be carried out in discrete clusters on a big farm. To the best of our knowledge, this situation hasn&#x2019;t been considered by any contemporary researchers in their studies.</p>
<p>The requirement for a dynamic environment is for the same. There is no one best algorithm for handling the dynamic environment. So, based upon the parameter values, the probabilistic motion planning has been recommended. IK is not a new idea. However, we didn&#x2019;t find people using it for harvesting. So the combination is a novelty. The objective of this research is to theoretically analyze several possibilities and suggest a feasible framework for a problem of commercial importance. Unlike the other contemporary works in this domain, our proposal doesn&#x2019;t call for any human intervention; the analytical treatment explained in this paper is self-explanatory; it doesn&#x2019;t call for proof by implementation.</p>
<p>The use of a probability road map (PRM) for farm navigation is proposed for robotic mushroom harvesting in a random field. (PRM is a sampling-based 2-step method that includes roadmap construction and querying.) IK is employed for plucking the ripened mushrooms.</p>
<p>In this paper, we briefly sketch the steps of the procedure for farming mushrooms, followed by a concise literature survey of the automation of robotic mushroom harvesting. Extending the earlier work stated in the survey, we discuss PRM for the planning of robotic motion within the mushroom maze or random plantation, with static obstacles. The method is extended to find the roadmap in environments with dynamic obstacles. It checks whether or not a robot is in an obstacle-free configuration and proceeds accordingly. The method is capable of dealing with robots with many degrees of freedom and having diverse constraints, and it has been shown to be probabilistically complete, i.e., the probability of failure for a planner to find a solution trajectory, if one exists, converges rapidly to zero as the number of collision-free samplings of the workspace increases (<xref ref-type="bibr" rid="B1">1</xref>&#x2013;<xref ref-type="bibr" rid="B5">5</xref>). The core of our mushroom harvesting robot is an algorithm for encountering static obstacles by a path-finding robot (<xref ref-type="bibr" rid="B6">6</xref>&#x2013;<xref ref-type="bibr" rid="B8">8</xref>). The PRM computes a collision-free path between two ripened mushrooms with a <italic>local planner</italic>.</p>
<p>The basic idea is to check if the roadmap constructed to avoid static obstacles also works with dynamic obstacles, i.e., obstacles moving at a given instant. If it works, then the path is built; if not, the edges that meet the moving obstacles are marked as blocked and construction of an alternative path is attempted (<xref ref-type="bibr" rid="B1">1</xref>, <xref ref-type="bibr" rid="B2">2</xref>). A five-step procedure for the PRM in such an environment has been described later.</p>
<p>The design of a dexterous robot hand is driven by the task of plucking the targeted mushroom assigned to it. We propose a two-step process: first, an assembly of two fingers that is analogous to a thumb and a pointing finger of a human hand to get a grip on the stem of the mushroom bud that is to be plucked; in the next step, the stem is uprooted. The joint angles of fingers are calculated by employing IK.</p>
<p>The advantages of the proposed methods are as follows:</p>
<list list-type="simple">
<list-item>
<label>(i)</label>
<p>Identification of ripened mushrooms by employing image processing</p>
</list-item>
<list-item>
<label>(ii)</label>
<p>The path with the least possible collision possibilities by using dynamic PRM gives a more realistic perspective of the environment.</p>
</list-item>
<list-item>
<label>(iii)</label>
<p>Minimizing mushroom damage while plucking</p>
</list-item>
<list-item>
<label>(iv)</label>
<p>Cost optimization in terms of labor, resources, and plucking cycles</p>
</list-item>
<list-item>
<label>(v)</label>
<p>Minimizing the mushroom wastage due to environmental factors like humidity and temperature</p>
</list-item>
</list>
<p>The six steps involved in mushroom farming are spawn production, compost preparation, spawning, spawn running, casing, and fruiting. Since these steps are not relevant for motion planning, we will not consider them here.</p>
<p>A mushroom harvesting robot (<xref ref-type="fig" rid="F1">Figure 1</xref>) is made up of three components: (i) a recognition system that recognizes mature mushrooms and confirms their positions; (ii) a wheeled moving system that goes along the routes to reach the mature mushrooms; and (iii) a picking system that grasps and plucks the mushrooms at the specified place (<xref ref-type="bibr" rid="B9">9</xref>, <xref ref-type="bibr" rid="B10">10</xref>). This study introduces and builds a unique robotic model to conduct moving and selecting actions effectively using input from a recognition system.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption><p>Schematic of a harvesting robot.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g001.tif"/>
</fig>
<p>After the literature survey, the third section describes the PRM algorithm and the IK model. The details of our proposed robotic hand are provided in the fourth and fifth sections, followed by a discussion in the sixth section of the results of this research, and the conclusion in the seventh section.</p>
</sec>
<sec id="S2">
<title>Brief literature survey</title>
<p>A maze-like structure is conceived for a robot to move through the field to carry out harvesting activities. Given suitable image specifications, e.g., cap size, proximity to other mushrooms, etc., a typical mushroom harvesting system must be able to identify and pick target mushrooms at suitable times (<xref ref-type="bibr" rid="B11">11</xref>). Even mild damage to the mushrooms affects the shelf life and selling price. It is a challenge to design a robotic system with the required precision in terms of size and location of the mushrooms, so as to facilitate picking them and carefully placing them into a container, without causing any damage or contamination to them or their neighbors (<xref ref-type="bibr" rid="B12">12</xref>).</p>
<p>A computer model of a mushroom farm suitable for a conceived robot was constructed to test the robot&#x2019;s efficiency. An implementation of the robot was successful in plucking 80% of the mushrooms on a real farm of the same specifications (<xref ref-type="bibr" rid="B11">11</xref>). A camera-captured image of a mushroom farm is processed to identify if some of the mushrooms in a group or block are ripe and hence ready for plucking. These mushrooms are picked while keeping the damage to the others at a minimum (<xref ref-type="bibr" rid="B13">13</xref>).</p>
<sec id="S2.SS1">
<title>Probabilistic road map for motion planning of a robot within a random field</title>
<p>First, we discuss the PRM method for the planning of robotic motion with static obstacles. Then the logic is extended to find a roadmap with dynamic obstacles.</p>
<p>The PRM is a sampling-based 2-step iterative method that includes roadmap construction and querying (see algorithm and <xref ref-type="fig" rid="F2">Figures 2</xref>, <xref ref-type="fig" rid="F3">3</xref> later). It determines whether a robot is in an obstacle-free configuration space Q<sub><italic>free</italic></sub> (for more information, see <xref ref-type="fig" rid="F2">Figures 2</xref>, <xref ref-type="fig" rid="F3">3</xref>).</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption><p>Example of a roadmap for a point robot in two-dimensional Euclidean space. Shaded areas are obstacles. The small circles are nodes of a graph, and the edges represent obstacle-free paths between adjacent nodes.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g002.tif"/>
</fig>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption><p>Example of a query with the roadmap. Nodes q<sub>init</sub> and q<sub>goal</sub> are first connected to the existing roadmap through nodes a&#x2032; and a&#x2033;. The search algorithm returns the shortest path, denoted by a thick dark line.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g003.tif"/>
</fig>
<p>The core of our mushroom harvesting robot is a PRM algorithm for encountering static obstacles (<xref ref-type="bibr" rid="B2">2</xref>, <xref ref-type="bibr" rid="B7">7</xref>, <xref ref-type="bibr" rid="B8">8</xref>). The following algorithm for the navigation of a robot through a mushroom farm is an implementation of Refs. (<xref ref-type="bibr" rid="B14">14</xref>&#x2013;<xref ref-type="bibr" rid="B19">19</xref>).</p>
</sec>
<sec id="S2.SS2">
<title>Algorithm for static obstacles</title>
<sec id="S2.SS2.SSS1">
<title>Definitions</title>
<p>1. A roadmap is an undirected graph G = (V, E), where the nodes in V represent a set of ripened mushrooms, and each edge in E is a collision-free path between two nodes computed by a <italic>local planner</italic>. See <xref ref-type="fig" rid="F2">Figure 2</xref>.</p>
<p>2. Nodes q<sub>init</sub> and q<sub>goal</sub> are user-provided inputs. They are, respectively, the initial and final nodes in a path to be discovered by the algorithm.</p>
<p>3. Querying: Let Connect Qinit be a list of neighboring nodes in the roadmap in the order of their distances from q<sub>init</sub>, and similarly, let Connect Q goal be a list of neighboring nodes in the same roadmap in the order of their distances from q<sub>goal</sub>. Try connecting q<sub>init</sub> to each of its neighboring nodes, and q<sub>goal</sub> to its neighboring nodes; call the nodes a&#x2032; and a&#x2033;, respectively. Search the graph G for a sequence of edges in E connecting a&#x2032; to a&#x2033;. Convert this sequence into a feasible path for the robot by computing the corresponding local paths and concatenating them. The local paths can be stored in the roadmap. The whole sequence, q<sub>int</sub>-a&#x2032;-&#x2026;-a&#x2033;&#x2013;q<sub>goal</sub> is a feasible path for a robot. Among the feasible paths, find the shortest path on the roadmap between q<sub>init</sub> and q<sub>goal</sub> by employing an appropriate algorithm&#x2014;one of the A&#x002A;, D, or D&#x002A;Lite algorithms (<xref ref-type="bibr" rid="B20">20</xref>&#x2013;<xref ref-type="bibr" rid="B24">24</xref>).</p>
<sec id="S2.SS2.SSS1.Px1">
<title>Algorithm for static obstacles</title>
<p>Repeat steps S1 and S2 below, until all mushrooms in the node set G are covered</p>
<p>S1 (construction). For a given workspace, construct a roadmap in a probabilistic manner, i.e., randomly select a configuration of nodes (provided by image processing), using some sampling distribution.</p>
<p>S2 (querying). Given an initial configuration q<sub>init</sub> and goal configuration q<sub>goal</sub>, find the shortest path connecting q<sub>init</sub> and q<sub>goal</sub>.</p>
<p>Remark: The robot is supposed to move and pluck all the mushrooms along this path, removing them from the graph. Then, the two steps of the algorithm are to be repeated.</p>
<p><xref ref-type="fig" rid="F2">Figures 2</xref>, <xref ref-type="fig" rid="F3">3</xref> illustrate the two phases of the iterative path finding algorithm. In <xref ref-type="fig" rid="F3">Figure 3</xref>, the shortest path from q<sub>init</sub> to q<sub>goal</sub> is marked with thick lines.</p>
</sec>
</sec>
</sec>
<sec id="S2.SS3">
<title>Algorithm for dynamic obstacles</title>
<p>The basic idea is to check if the roadmap constructed to avoid static obstacles also works despite dynamically moving obstacles at a given instant. If it works, then the path is built. Otherwise, the edges that meet the moving obstacles are marked as blocked and construction of an alternative path is attempted (<xref ref-type="bibr" rid="B25">25</xref>). The two ends of the blocked edges are joined locally using a rapidly exploring random tree (RRT) technique. RRT is an algorithm that searches non-convex, high-dimensional spaces quickly by randomly constructing a space-filling tree. The tree is built progressively from random samples selected from the search space and is intrinsically inclined to expand toward huge unexplored sections of the issue. It is commonly used in dynamic robotic motion planning (<xref ref-type="bibr" rid="B19">19</xref>, <xref ref-type="bibr" rid="B26">26</xref>&#x2013;<xref ref-type="bibr" rid="B28">28</xref>). In a dynamic environment, the initial and goal configurations are also moving entities, and therefore the new path has to be constructed by considering their new positions.</p>
<p>We now describe a five-step procedure for the PRM in dynamic environments.</p>
<p>1. Roadmap labeling and solution path search</p>
<p>After receiving the dynamic updates, the planner iteratively performs the following two operations alternately until a valid path is found or all connections are attempted:</p>
<p>(a) connection of a query node (q<sub>init</sub> or q<sub>goal</sub>) to the nodes of the roadmap, and (b) search for a valid path inside the roadmap.</p>
<p>Given that the obstacles are moving, a solution is achieved when all edges stay collision-free. The collision-causing edges are blocked, and the result is used to recreate that specific segment of the roadmap&#x2019;s dynamic connectivity. The modified connectivity is then used in the following iteration to choose the best candidate nodes in the roadmap to locate further probable connections between the query nodes.</p>
<p>2. Query node connections</p>
<p>At each iteration, the candidate nodes are selected by decomposing each statically connected component into three subcomponents: (i) nodes potentially reachable from q<sub>init</sub> (i.e., there exists a path with no blocked edges); (ii) nodes potentially reachable from q<sub>goal</sub>; and (iii) nodes that are currently not reachable from the query nodes q<sub>init</sub> and q<sub>goal</sub>. This method avoids many costly updates of edges that are not required to answer the connectivity query.</p>
<p>3. Local reconnections</p>
<p>The details of connectivity trails in the roadmap from the q<sub>init</sub> and q<sub>goal</sub> are maintained in a rapidly exploring random tree (RRT) structure (<xref ref-type="bibr" rid="B27">27</xref>), using which the alternate paths are constructed to connect the end vertices of the blocked edges. A new connection from the query nodes to the static roadmap is attempted when the blocked edge reconnection fails.</p>
<p>4. Node insertion and cycle creation (<xref ref-type="bibr" rid="B28">28</xref>)</p>
<p>If the roadmap is unable to provide collision-free connectivity between q<sub>init</sub> and q<sub>goal</sub>, a few nodes are added to it and the necessary labeling is performed. The disjoint components in the static roadmap are linked through the connectivity between the new nodes. This technique achieves efficiency by avoiding the creation of unnecessary edges and nodes inside the roadmap.</p>
<p>The four steps discussed earlier are illustrated in <xref ref-type="fig" rid="F4">Figure 4</xref>.</p>
<fig id="F4" position="float">
<label>FIGURE 4</label>
<caption><p><bold>(A)</bold> A static roadmap is completed in the configuration space, <bold>(B)</bold> During queries, it is found that a link in a solution path is broken due to a dynamic obstacle, <bold>(C)</bold> An RRT technique is used to reconnect edges broken by dynamic obstacles, and <bold>(D)</bold> if the existing roadmap does not yield a solution, new nodes and edges (dotted lines) are inserted, and thus an obstacle-free path from q<sub>init</sub> to q<sub>goal</sub> is found. (Observe that the query nodes q<sub>init</sub> and q<sub>goal</sub> are themselves changing dynamically).</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g004.tif"/>
</fig>
<p>5. Edge labeling</p>
<p>The current positions of all the moving obstacles are checked against the edges. An edge is blocked if one or many obstacles are found colliding with it. The label employs the dynamic programming approach. The location information and the results of collision tests are simultaneously stored in an edge-tree structure (<xref ref-type="fig" rid="F5">Figure 5</xref>). During the next call to the edge labeling, if the location M<sub><italic>i</italic></sub> of a moving object matches a stored location, further computation is not necessary: the results of the previous collision tests are retrieved and further collision tests are cancelled. Otherwise, the new location M<sub><italic>i</italic></sub> is inserted into the edge-tree structure while maintaining the details of the last-checked positions. Older positions are removed from the data structure to reduce the size of the roadmap. When an obstacle stops moving, it is treated as a static one.</p>
<fig id="F5" position="float">
<label>FIGURE 5</label>
<caption><p>Edge-tree structure.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g005.tif"/>
</fig>
<p>(Indices for edge, moving obstacle, and key position are for the storage structure).</p>
</sec>
</sec>
<sec id="S3">
<title>Kinematics for robotic hand motion</title>
<p>Getting a roadmap ready is a task that enables a robot to reach the ripened mushrooms at the nearest possible place from its current location. The next task is to model the motion of the robot hand (the end effector) to reach a ripened mushroom.</p>
<p>The design of a dexterous robot hand is driven by the task assigned to it. Different models have been discussed (<xref ref-type="bibr" rid="B29">29</xref>, <xref ref-type="bibr" rid="B30">30</xref>). We discuss an assembly of two fingers (analogous to a thumb and a pointing finger of a human hand) that gets a grip on the stem of the mushroom bud to be plucked, and next, the process of uprooting the stem. (A five-finger hand, like that of a human, would be too heavy and complicated for the current purpose, taking up more space and potentially harming neighboring buds).</p>
<p>A diagram of this proposed mushroom plucking robot hand is shown in <xref ref-type="fig" rid="F6">Figure 6</xref>. The first finger link in the structure is known as the <italic>base</italic>, and the end link is known as the <italic>end effector</italic>.</p>
<fig id="F6" position="float">
<label>FIGURE 6</label>
<caption><p>Model of a two-finger robot hand.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g006.tif"/>
</fig>
<p>The required angular displacements in the finger links through the motions at the finger joints are computed by employing kinematics, i.e., the study of the motion of bodies without consideration of the forces that cause the motion.</p>
<p>Kinematics is of two types: forward and inverse. In the case of the robotic hand, forward kinematics generates the location of the end effector given the angular displacement at each joint. On the contrary, if the location of an end effector is known, IK computes the required angular displacement at each finger joint (<xref ref-type="bibr" rid="B31">31</xref>&#x2013;<xref ref-type="bibr" rid="B35">35</xref>).</p>
<p>In the following paragraphs we discuss the design of a robotic hand for automatic mushroom plucking.</p>
<p>The IK computations for the finger simulating the pointing finger are shown later. The coordinates of a mushroom to be plucked are the driving parameters. The computation of the thumb follows the same logic. The thumb differs from the index finger in that it has one fewer joint.</p>
<p>The links have an ordered structure in which each link has its own coordinate system and is positioned relative to the coordinate system of the previous link. The position of the link i in the coordinate system of its ancestor is obtained by computing the joint angle (<xref ref-type="bibr" rid="B34">34</xref>, <xref ref-type="bibr" rid="B36">36</xref>&#x2013;<xref ref-type="bibr" rid="B43">43</xref>).</p>
<p>The transformation matrix between two adjacent connecting joints is calculated using the DH parameters in Formula (1) and <xref ref-type="table" rid="T1">Table 1</xref>, where s<sub><italic>i</italic></sub> indicates sin &#x03B8;<sub><italic>i</italic></sub>, <italic>c</italic><sub><italic>i</italic></sub> indicates cos &#x03B8;<sub><italic>i</italic></sub> (<italic>i</italic> = 1, 2, 3), &#x03B1;<sub><italic>i</italic></sub><italic><sub>&#x2013;</sub></italic><sub>1</sub> is the twist angle, <italic>a</italic><sub><italic>i&#x2013;1</italic></sub> is the length of linkages, and <italic>d</italic><sub><italic>i</italic></sub> is the offset of the linkages. The transformation matrix of the manipulator finger is obtained by multiplying the transformation matrix of each connecting link <inline-formula><mml:math id="INEQ9"><mml:mrow><mml:msubsup><mml:mi/><mml:mi>i</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x2062;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> (<italic>i</italic> = 1, 2, 3, 4), which is a function of the three joint variables (&#x03B8;<sub>1</sub>, &#x03B8;<sub>2</sub>, &#x03B8;<sub>3</sub>, &#x03B8;<sub>4</sub>). Where &#x03B8;<sub>4</sub> = 0.</p>
<table-wrap position="float" id="T1">
<label>TABLE 1</label>
<caption><p>D&#x2013;H parameters of pointing finger [from Ref. (<xref ref-type="bibr" rid="B35">35</xref>)].</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left"># Joint <italic>i</italic></td>
<td valign="top" align="center">d<sub>i</sub>(joint distance)</td>
<td valign="top" align="center">a<sub>i&#x2212;1</sub>(link length)</td>
<td valign="top" align="center">&#x03B1;<sub>i&#x2212;1</sub>(link twist)</td>
<td valign="top" align="center">&#x03B8;<sub>i</sub>(joint angle)</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x03B8;<sub>1</sub></td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center"><italic>l<sub>1</sub></italic></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x03B8;<sub>2</sub></td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center"><italic>l<sub>2</sub></italic></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">&#x03B8;<sub>3</sub></td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center"><italic>l<sub>3</sub></italic></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
</tr>
</tbody>
</table></table-wrap>
<p>Step 1: Holding a mushroom stem</p>
<p>(X<sub><italic>i</italic></sub>, Y<sub><italic>i</italic></sub>, Z<sub><italic>i</italic></sub>) represents an axial frame of reference. For <italic>i</italic> = 0, it represents the coordinates of the base; the value of <italic>i</italic> increases by one to denote the coordinates of the next joint. The link after the last joint is the tip, i.e., the end effector. Hence, (X<sub>3,</sub>Y<sub>3,</sub> Z<sub>3</sub>) is the frame of reference for the end effector of a pointing finger (<xref ref-type="fig" rid="F7">Figure 7</xref>), while for the thumb it is (X<sub>2,</sub> Y<sub>2,</sub> Z<sub>2</sub>).</p>
<fig id="F7" position="float">
<label>FIGURE 7</label>
<caption><p>Model of pointing finger.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g007.tif"/>
</fig>
<p>Step 1.1: Compute the D&#x2013;H parameters of the pointing finger, as in <xref ref-type="fig" rid="F8">Figure 8</xref>.</p>
<fig id="F8" position="float">
<label>FIGURE 8</label>
<caption><p>Denavit&#x2013;Hartenberg (DH) frame for joints.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g008.tif"/>
</fig>
<p>Explanation: The transformation matrix between two adjacent connecting joints can be calculated by the D&#x2013;H parameters in Formula (1) and <xref ref-type="table" rid="T1">Table 1</xref>. where s<sub><italic>i</italic></sub> indicates sin &#x03B8;<sub><italic>i</italic></sub>, <italic>c</italic><sub><italic>i</italic></sub> indicates cos &#x03B8;<sub><italic>i</italic></sub> (<italic>i</italic> = 1, 2, 3), &#x03B1;<sub><italic>i</italic></sub><italic><sub>&#x2013;</sub></italic><sub>1</sub> is the twist angle, <italic>a</italic><sub><italic>i&#x2013;1</italic></sub> is the length of linkages, and <italic>d</italic><sub><italic>i</italic></sub> is the offset of linkages The transformation matrix of the manipulator finger can be obtained by multiplying continuously the transformation matrix of each connecting link <inline-formula><mml:math id="INEQ10"><mml:mrow><mml:msubsup><mml:mi/><mml:mi>i</mml:mi><mml:mrow><mml:mi>i</mml:mi><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msubsup><mml:mo>&#x2062;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula>(<italic>i</italic> = 1, 2, 3, 4), which is a function of the three joint variables (&#x03B8;1, &#x03B8;2, &#x03B8;3, &#x03B8;4), where &#x03B8;<sup>4</sup> = 0.</p>
<p>Step 1.2: Given the D&#x2013;H values and the base coordinates of a rigid body, we compute the coordinates of its tip by generating the D&#x2013;H matrices at all joints [matrices (2), (3), (4), and (5) below] and taking their product (<inline-formula><mml:math id="INEQ11"><mml:mrow><mml:mrow><mml:msubsup><mml:mi/><mml:mn>4</mml:mn><mml:mn>0</mml:mn></mml:msubsup><mml:mo>&#x2062;</mml:mo><mml:mpadded width="+3.3pt"><mml:mi>T</mml:mi></mml:mpadded></mml:mrow><mml:mo rspace="5.8pt">=</mml:mo><mml:mrow><mml:mmultiscripts><mml:mi>T</mml:mi><mml:mprescripts/><mml:mn>1</mml:mn><mml:mn>0</mml:mn></mml:mmultiscripts><mml:mo>&#x2062;</mml:mo><mml:mmultiscripts><mml:mi>T</mml:mi><mml:mprescripts/><mml:mn>2</mml:mn><mml:mn>1</mml:mn></mml:mmultiscripts><mml:mo>&#x2062;</mml:mo><mml:mmultiscripts><mml:mi>T</mml:mi><mml:mprescripts/><mml:mn>3</mml:mn><mml:mn>2</mml:mn></mml:mmultiscripts><mml:mo>&#x2062;</mml:mo><mml:mmultiscripts><mml:mi>T</mml:mi><mml:mprescripts/><mml:mn>4</mml:mn><mml:mn>3</mml:mn></mml:mmultiscripts></mml:mrow></mml:mrow></mml:math></inline-formula>). Note that <italic>i</italic> &#x2013; 1 is the base of the link and <italic>i</italic> is the successor link.</p>
<disp-formula id="S3.E1">
<label>(1)</label>
<mml:math id="M1">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mi>i</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mpadded lspace="5pt" width="+5pt">
<mml:mi>C</mml:mi>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo lspace="7.5pt">-</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>a</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo lspace="7.5pt">-</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>I</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mpadded lspace="5pt" width="+5pt">
<mml:mi>C</mml:mi>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B1;</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>where S and C represent the sine and cosine functions. Hence, we have</p>
<disp-formula id="S3.E2">
<label>(2)</label>
<mml:math id="M2">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mn>1</mml:mn>
<mml:mn>0</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo lspace="7.5pt">-</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E3">
<label>(3)</label>
<mml:math id="M3">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mn>2</mml:mn>
<mml:mn>1</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo lspace="7.5pt">-</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E4">
<label>(4)</label>
<mml:math id="M4">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo lspace="7.5pt">-</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E5">
<label>(5)</label>
<mml:math id="M5">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mn>4</mml:mn>
<mml:mn>3</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo rspace="7.5pt">[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E6">
<label>(6)</label>
<mml:math id="M7">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mn>4</mml:mn>
<mml:mn>0</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo> <mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
<mml:mo>&#x2013;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
<mml:mo>&#x00A0;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>&#x00A0;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mi>C</mml:mi>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mi>C</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow> <mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Inverse kinematics has multiple solutions for a specific position and orientation of the fingertip.</p>
<p>We solve the matrix for a given position p<sub><italic>x</italic></sub>, p<sub><italic>y</italic></sub> by assuming the following orientation:</p>
<disp-formula id="S3.E7">
<label>(7)</label>
<mml:math id="M8">
<mml:mrow>
<mml:mmultiscripts>
<mml:mpadded width="+3.3pt">
<mml:mi>T</mml:mi>
</mml:mpadded>
<mml:mprescripts/>
<mml:mi>i</mml:mi>
<mml:mi>n</mml:mi>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mpadded lspace="5pt" width="+5pt">
<mml:mi>C</mml:mi>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>&#x2005;0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>&#x2062;</mml:mo>
<mml:mtable displaystyle="true" rowspacing="0pt">
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mpadded lspace="5pt" width="+5pt">
<mml:mi>p</mml:mi>
</mml:mpadded>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="center">
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p><underline>Step 1.3</underline>: Compute &#x03B8;</p>
<p>We want to compute &#x03B8;<sub>1</sub>,&#x03B8;<sub>2,</sub> and &#x03B8;<sub>3</sub> only; we do not need to compute <inline-formula><mml:math id="INEQ14"><mml:mrow><mml:msubsup><mml:mi/><mml:mn>0</mml:mn><mml:mn>4</mml:mn></mml:msubsup><mml:mo>&#x2062;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula>. We can work with <inline-formula><mml:math id="INEQ15"><mml:mrow><mml:msubsup><mml:mi/><mml:mn>0</mml:mn><mml:mn>3</mml:mn></mml:msubsup><mml:mo>&#x2062;</mml:mo><mml:mi>T</mml:mi></mml:mrow></mml:math></inline-formula> as follows:</p>
<disp-formula id="S3.E8">
<label>(8)</label>
<mml:math id="M10">
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>T</mml:mi>
<mml:mprescripts/>
<mml:mi>O</mml:mi>
<mml:mn>3</mml:mn>
</mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mmultiscripts>
<mml:mi>T</mml:mi>
<mml:mprescripts/>
<mml:mn>1</mml:mn>
<mml:mn>0</mml:mn>
</mml:mmultiscripts>
<mml:mmultiscripts>
<mml:mi>T</mml:mi>
<mml:mprescripts/>
<mml:mn>2</mml:mn>
<mml:mn>1</mml:mn>
</mml:mmultiscripts>
<mml:mmultiscripts>
<mml:mi>T</mml:mi>
<mml:mprescripts/>
<mml:mn>3</mml:mn>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mrow>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
<mml:mo>&#x2013;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
<mml:mo>&#x00A0;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo stretchy='false'>(</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>&#x00A0;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mi>C</mml:mi>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>&#x00A0;</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mi>S</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>0</mml:mn>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:mn>1</mml:mn>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:mrow> <mml:mo>]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Comparing (7) and (8), we obtain values for <italic>p</italic><sub><italic>x</italic></sub> and <italic>p</italic><sub><italic>y</italic></sub></p>
<disp-formula id="S3.E9">
<label>(9)</label>
<mml:math id="M11">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E10">
<label>(10)</label>
<mml:math id="M12">
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>y</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mi/>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Square both sides of the equations (9) and (10), add them and set <inline-formula><mml:math id="INEQ16"><mml:mrow><mml:mi>C</mml:mi><mml:mo>&#x2062;</mml:mo><mml:mmultiscripts><mml:mi mathvariant="normal">&#x03B8;</mml:mi><mml:mn>1</mml:mn><mml:none/><mml:none/><mml:mn>2</mml:mn></mml:mmultiscripts></mml:mrow></mml:math></inline-formula> + <inline-formula><mml:math id="INEQ17"><mml:mrow><mml:mi>S</mml:mi><mml:mo>&#x2062;</mml:mo><mml:mpadded width="+3.3pt"><mml:mmultiscripts><mml:mi mathvariant="normal">&#x03B8;</mml:mi><mml:mn>1</mml:mn><mml:none/><mml:none/><mml:mn>2</mml:mn></mml:mmultiscripts></mml:mpadded></mml:mrow></mml:math></inline-formula> =1</p>
<disp-formula id="S3.Ex3">
<mml:math id="M13">
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+5pt">
<mml:mmultiscripts>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mpadded>
<mml:mo>+</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:mmultiscripts>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mmultiscripts>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:mmultiscripts>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E11">
<label>(11)</label>
<mml:math id="M14">
<mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mmultiscripts>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mpadded>
<mml:mo rspace="5.8pt">+</mml:mo>
<mml:mmultiscripts>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mrow>
<mml:mo rspace="5.8pt">-</mml:mo>
<mml:mmultiscripts>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
<mml:mo rspace="5.8pt">-</mml:mo>
<mml:mmultiscripts>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi>l</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E12">
<label>(12)</label>
<mml:math id="M15">
<mml:mrow>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:msqrt>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mmultiscripts>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
<mml:none/>
<mml:none/>
<mml:mn>2</mml:mn>
</mml:mmultiscripts>
</mml:mrow>
</mml:mrow>
</mml:msqrt>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex4">
<mml:math id="M16">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mtext>tan</mml:mtext>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Writing equations (9) and (10) in the form</p>
<disp-formula id="S3.E13">
<label>(13)</label>
<mml:math id="M17">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+5pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E14">
<label>(14)</label>
<mml:math id="M18">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>where <italic>k</italic><sub>1</sub> = <italic>l</italic><sub>1</sub> + <italic>l</italic><sub>2</sub><italic>C</italic>&#x03B8;<sub>2</sub> and <italic>k</italic><sub>2</sub> = <italic>l</italic><sub>2</sub><italic>S</italic>&#x03B8;<sub>2</sub>, and assuming <italic>r</italic> = <inline-formula><mml:math id="INEQ21"><mml:msqrt><mml:mrow><mml:mmultiscripts><mml:mi>k</mml:mi><mml:mn>1</mml:mn><mml:none/><mml:none/><mml:mn>2</mml:mn></mml:mmultiscripts><mml:mo>+</mml:mo><mml:mmultiscripts><mml:mi>k</mml:mi><mml:mn>2</mml:mn><mml:none/><mml:none/><mml:mn>2</mml:mn></mml:mmultiscripts></mml:mrow></mml:msqrt></mml:math></inline-formula>, &#x03B3;=atan(<italic>k</italic><sub>2</sub>,<italic>k</italic><sub>1</sub>), <italic>k</italic><sub>1</sub> = <italic>rC</italic>&#x03B3;and<italic>k</italic><sub>2</sub> = <italic>r</italic>S&#x03B3;</p>
<p>We substitute these values in (13) and (14), to obtain</p>
<disp-formula id="S3.Ex5">
<mml:math id="M19">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mfrac>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mi>r</mml:mi>
</mml:mfrac>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex6">
<mml:math id="M20">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mfrac>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mi>r</mml:mi>
</mml:mfrac>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex7">
<mml:math id="M21">
<mml:mrow>
<mml:mrow>
<mml:mi mathvariant="normal">&#x03B3;</mml:mi>
<mml:mo>+</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>/</mml:mo>
<mml:mi>r</mml:mi>
</mml:mrow>
<mml:mo rspace="5.8pt" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex8">
<mml:math id="M22">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>&#x03B8;<sub>3</sub> can be obtained by using <italic>C</italic>(&#x03B8;<sub>1</sub> + &#x03B8;<sub>2</sub> + &#x03B8;<sub>3</sub>)&#x2004; and <italic>S</italic>(&#x03B8;<sub>1</sub> + &#x03B8;<sub>2</sub> + &#x03B8;<sub>3</sub>)</p>
<p>Let (&#x03B8;<sub>1</sub> + &#x03B8;<sub>2</sub> + &#x03B8;<sub>3</sub>) = atan (<italic>S</italic><sub>&#x03C9;</sub>,<italic>C</italic><sub>&#x03C9;</sub> ) = &#x03C9;</p>
<disp-formula id="S3.Ex9">
<mml:math id="M23">
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="10.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex10">
<mml:math id="M25">
<mml:mrow>
<mml:mrow>
<mml:mi>w</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>h</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>e</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>r</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+2.8pt">
<mml:mi>e</mml:mi>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo rspace="5.3pt" stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+2.8pt">
<mml:mtext>and</mml:mtext>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Hence, the joint angles are</p>
<disp-formula id="S3.E15">
<label>(15)</label>
<mml:math id="M27">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>k</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E16">
<label>(16)</label>
<mml:math id="M28">
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mn>2</mml:mn>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mi/>
</mml:mrow>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>tan</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.E17">
<label>(17)</label>
<mml:math id="M29">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>3</mml:mn>
</mml:msub>
</mml:mpadded>
<mml:mo rspace="10.8pt">=</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mi>S</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:msub>
<mml:mi>C</mml:mi>
<mml:mi mathvariant="normal">&#x03C9;</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>1</mml:mn>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi mathvariant="normal">&#x03B8;</mml:mi>
<mml:mn>2</mml:mn>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Step 2: Uprooting the stem of a mushroom</p>
<p>Let the upward force to realize the plucking/uprooting be provided by means of an upward movement of the hand, causing &#x03B4; change in its y-coordinate; there will be no change in the x-coordinate of the end effector&#x2019;s position nor in the angles at the finger assembly.</p>
<p>Initially, the angle &#x03C6; at the joint that connects the assembly of two fingers to the wrist-like structure will have some value. The elevation in the end effector&#x2019;s position modifies this angle to the one shown in <xref ref-type="fig" rid="F9">Figure 9</xref>.</p>
<fig id="F9" position="float">
<label>FIGURE 9</label>
<caption><p>Wrist movement for uprooting mushroom.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijiam-2022-01-g009.tif"/>
</fig>
<p>The following are the inverse kinematic computations that allow the robot-hand to reach its new position ():</p>
<p><italic>sin</italic>&#x2061;&#x03C6;=<inline-formula><mml:math id="INEQ37"><mml:mfrac><mml:mrow><mml:msub><mml:mi>p</mml:mi><mml:mi>y</mml:mi></mml:msub><mml:mo>+</mml:mo><mml:mi mathvariant="normal">&#x03B4;</mml:mi></mml:mrow><mml:msub><mml:mi>l</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mfrac></mml:math></inline-formula>, <inline-formula><mml:math id="INEQ38"><mml:mrow><mml:mrow><mml:mi>cos</mml:mi><mml:mo>&#x2061;</mml:mo><mml:mpadded width="+3.3pt"><mml:mi mathvariant="normal">&#x03C6;</mml:mi></mml:mpadded></mml:mrow><mml:mo rspace="5.8pt">=</mml:mo><mml:mfrac><mml:msub><mml:mi>p</mml:mi><mml:mi>x</mml:mi></mml:msub><mml:msub><mml:mi>l</mml:mi><mml:mn>0</mml:mn></mml:msub></mml:mfrac></mml:mrow></mml:math></inline-formula> where <italic>l<sub>0</sub></italic> is the length of the joint.</p>
<disp-formula id="S3.Ex11">
<mml:math id="M30">
<mml:mrow>
<mml:mrow>
<mml:mi>tan</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:mi mathvariant="normal">&#x03C6;</mml:mi>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:mfrac>
<mml:mrow>
<mml:mi>sin</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mi mathvariant="normal">&#x03C6;</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>cos</mml:mi>
<mml:mo>&#x2061;</mml:mo>
<mml:mi mathvariant="normal">&#x03C6;</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">&#x03B4;</mml:mi>
</mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mfrac>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex12">
<mml:math id="M31">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi mathvariant="normal">&#x03C6;</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>a</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>y</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:mi mathvariant="normal">&#x03B4;</mml:mi>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>p</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Observe that steps i and i+1 are carried out at time instances i and i+1, respectively. These activities on the time axis facilitate the preservation of the states of the subassemblies while planning the movements at the joints connecting them. In this case, the position of the fingers holding the stem remains unchanged in the next step while the stem is uprooted.</p>
<p>Algorithm: Formalization of automatic mushroom harvesting robot</p>
<p>Construction of a collision-free path in a farm of ripened mushrooms at some time instant</p>
<list list-type="simple">
<list-item>
<label>1.</label>
<p>//Data:</p>
</list-item>
<list-item>
<label>2.</label>
<p>A = &#x2113;&#x00D7; d /&#x002A; the dimension of a rectangular maze formed by random cultivation of mushrooms that provides a specific path for a robot to navigate for plucking mushrooms.</p>
</list-item>
<list-item>
<label>3.</label>
<p>&#x002A;/</p>
</list-item>
<list-item>
<label>4.</label>
<p>Let c<sub>1</sub>, c<sub>2</sub>, c<sub>3</sub>, &#x2026;, c<sub><italic>n</italic></sub> cameras in the maze at time instant t<sub><italic>k</italic></sub></p>
</list-item>
<list-item>
<label>5.</label>
<p>{c<sub>i</sub>}, 1 &#x2264; i &#x2264; n, /&#x002A; images captured by camera ci, 1 &#x2264; i &#x2264; n, &#x002A;/</p>
</list-item>
<list-item>
<label>6.</label>
<p>V = <inline-formula><mml:math id="INEQ41"><mml:mrow><mml:msubsup><mml:mo largeop="true" mathsize="160%" stretchy="false" symmetric="true">&#x22C3;</mml:mo><mml:mrow><mml:mpadded width="+3.3pt"><mml:mrow><mml:mtext>i</mml:mtext></mml:mrow></mml:mpadded><mml:mo rspace="5.8pt">=</mml:mo><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:mtext>n</mml:mtext></mml:mrow></mml:msubsup><mml:mrow><mml:mo>{</mml:mo><mml:msub><mml:mtext>c</mml:mtext><mml:mrow><mml:mtext>i</mml:mtext></mml:mrow></mml:msub><mml:mo>}</mml:mo></mml:mrow></mml:mrow></mml:math></inline-formula>/&#x002A; the vertex set V for a mushroom plucker to work with.&#x002A;/</p>
</list-item>
<list-item>
<label>7.</label>
<p>//Results:</p>
</list-item>
<list-item>
<label>8.</label>
<p>// The average cost of mushroom plucking in this method</p>
</list-item>
<list-item>
<label>9.</label>
<p>//Begin</p>
</list-item>
<list-item>
<label>10.</label>
<p>G = resultant subgraph from V</p>
</list-item>
<list-item>
<label>11.</label>
<p>/&#x002A; Employ the construction phase of the PRM to find out vertex clusters within radius u of the robot such that there exists a collision free navigation path connecting any two vertices of a cluster. The inter-cluster connectivity is taken care of by a local planner. Let G be the resultant subgraph &#x002A;/</p>
</list-item>
<list-item>
<label>12.</label>
<p>W = cost matrix</p>
</list-item>
<list-item>
<label>13.</label>
<p>wi j = cost of traversal /&#x002A; the cost of traversal from the i-th pluckable</p>
</list-item>
<list-item>
<label>14.</label>
<p>Mushroom to the j-th pluckable mushroom &#x002A;/</p>
</list-item>
<list-item>
<label>15.</label>
<p>Let P<sub>goal</sub> = { } /&#x002A; initially. &#x002A;/</p>
</list-item>
<list-item>
<label>16.</label>
<p>Let v<sub><italic>s</italic></sub> and v<sub><italic>t</italic></sub> be two randomly selected vertices of G</p>
</list-item>
<list-item>
<label>17.</label>
<p>Employ PRM querying with v<sub><italic>s</italic></sub> and v<sub><italic>t</italic></sub> on G and get a path P connecting the two. Let V<sub><italic>p</italic></sub> be the set of vertices that comprise P.</p>
</list-item>
<list-item>
<label>18.</label>
<p>if P is the spanning path:</p>
</list-item>
<list-item>
<label>19.</label>
<p>then append P to P<sub>goal</sub> and stop</p>
</list-item>
<list-item>
<label>20.</label>
<p>else:</p>
</list-item>
<list-item>
<label>21.</label>
<p>G = G\V<sub><italic>p</italic></sub> &#x003C; G is obtained by deleting the vertices of V<sub><italic>p</italic></sub> from the original G &#x003E;</p>
</list-item>
<list-item>
<label>22.</label>
<p>Select v<sub>1</sub> and v<sub>2</sub> randomly from the vertex set of G</p>
</list-item>
<list-item>
<label>23.</label>
<p>if <italic>w</italic><sub><italic>t1</italic></sub> &#x003E; <italic>w</italic><sub><italic>t2</italic></sub> :</p>
</list-item>
<list-item>
<label>24.</label>
<p>then v<sub><italic>s</italic></sub> = v<sub>2</sub> and v<sub><italic>t</italic></sub> = v<sub>1</sub></p>
</list-item>
<list-item>
<label>25.</label>
<p>else:</p>
</list-item>
<list-item>
<label>26.</label>
<p>v<sub><italic>s</italic></sub> = v<sub>1</sub> and v<sub><italic>t</italic></sub> = v<sub>2</sub></p>
</list-item>
<list-item>
<label>27.</label>
<p>append vs. to Pgoal</p>
</list-item>
<list-item>
<label>28.</label>
<p>Go to step 17</p>
</list-item>
<list-item>
<label>29.</label>
<p>Compute the total cost of P<sub>goal</sub>, i.e., the summation of the costs of traversal from i-th vertex to i+1-th in P<sub>goal</sub>, where i = 1 to k &#x003C; k+1 is the length of the path P<sub>goal</sub> &#x003E;</p>
</list-item>
<list-item>
<label>30.</label>
<p>/&#x002A; Reaching, gripping and plucking the mushrooms on a given path &#x002A;/</p>
</list-item>
<list-item>
<label>31.</label>
<p>/&#x002A; Let v<sub>1</sub>, v<sub>2, &#x2026;</sub>,v<sub><italic>N</italic></sub> be the vertices (of the pluckable mushrooms) on P<sub>goal</sub>. &#x002A;/</p>
</list-item>
<list-item><p>for i = 1 to N:</p>
</list-item>
<list-item><p>Traverse v<sub><italic>i</italic></sub></p>
</list-item>
<list-item><p>Read the elevation of the pluckable mushroom so that we get its</p>
</list-item>
<list-item><p>coordinates in a three-dimensional frame</p>
</list-item>
<list-item><p>Employ IK to compute the angles at each joint of the robot-hand such that the robot-fingers will reach and hold the pluckable mushroom</p>
</list-item>
<list-item><p>Employ a suitable mechanical process to realize the gripping of the mushroom</p>
</list-item>
<list-item><p>Compute the change in elevation of the mushroom holding hand such that the mushroom will be uprooted</p>
</list-item>
<list-item><p>Employ a suitable process to move the robotic hand and pluck the mushroom.</p>
</list-item>
</list>
<p>The average cost of mushroom plucking in this method = Average cost of traversal of a node in path P goal + cost of gripping a mushroom + cost of uprooting the mushroom.</p>
<list list-type="simple">
<list-item>
<label>32.</label>
<p>//End.</p>
</list-item>
</list>
</sec>
<sec id="S4" sec-type="discussion">
<title>Discussion</title>
<p>Below we have presented algorithms for the automation of mushroom harvesting, with a focus on the following areas:</p>
<list list-type="simple">
<list-item>
<label>(i)</label>
<p>Identification of ripened mushroom by employing image processing</p>
</list-item>
<list-item>
<label>(ii)</label>
<p>Using dynamic PRM to obtain a collision-free path (this is a novel feature not found in the literature)</p>
</list-item>
<list-item>
<label>(iii)</label>
<p>No human intervention is required for obstacle avoidance, as this is done by the PRM algorithm itself</p>
</list-item>
<list-item>
<label>(iv)</label>
<p>Application of IK to compute the coordinates of a mushroom plucking robot</p>
</list-item>
<list-item>
<label>(v)</label>
<p>Minimizing damage to mushrooms while plucking</p>
</list-item>
<list-item>
<label>(vi)</label>
<p>Cost optimization in terms of labor, resources, and plucking cycles</p>
</list-item>
<list-item>
<label>(vi)</label>
<p>Minimizing mushroom wastage due to environmental factors like humidity and temperature</p>
</list-item>
</list>
<sec id="S4.SS1">
<title>Brief cost details</title>
<p>Mechanization of operations has arisen in practically every area of the farming sector. This is a side effect of the reduction in the population that engages in farm labor as industrial development takes place. In other words, machines step in whenever and wherever human labor becomes unavailable, inefficient, or expensive.</p>
<p>The all-too-real problem faced by farmers generally&#x2014;mushroom farmers in the present case&#x2014;is the non-availability of labor for the timely harvesting of crops. Due to this, mushrooms get over-ripe or damaged, resulting in losses to farmers.</p>
<p>It is stipulated that the problem can be solved by robotic automation. The speed of harvesting is greater, so the duration of harvesting is less. Additionally, machines mitigate human factors like fatigue and lack of diligence. As a result, large-scale and low-cost farming becomes feasible with such automation.</p>
<p>The costs in mushroom farming are listed in <xref ref-type="table" rid="T2">Table 2</xref>.</p>
<table-wrap position="float" id="T2">
<label>TABLE 2</label>
<caption><p>Approximate costs of manual mushroom harvesting on a 1 acre farm.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left" colspan="2">Recurring costs per harvesting cycle</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><bold>Items</bold></td>
<td valign="top" align="center"><bold>Cost (Rs)</bold></td>
</tr>
<tr>
<td valign="top" align="left">Labor</td>
<td valign="top" align="center">50,000</td>
</tr>
<tr>
<td valign="top" align="left">Fertilizer and spores</td>
<td valign="top" align="center">20,000</td>
</tr>
<tr>
<td valign="top" align="left">Electricity and water</td>
<td valign="top" align="center">30,000</td>
</tr>
<tr>
<td valign="top" align="left">Transportation</td>
<td valign="top" align="center">20,000</td>
</tr>
<tr>
<td valign="top" align="left">Miscellaneous expenses</td>
<td valign="top" align="center">5,000</td>
</tr>
<tr>
<td valign="top" align="left">Total per harvesting cycle</td>
<td valign="top" align="center">1,25,000</td>
</tr>
</tbody>
</table></table-wrap>
<p>These figures can vary depending on the circumstances, but the order of magnitude is correct. If three crops can be obtained yearly, the annual profit will be in the range of Rs. 6,00,000.</p>
<p>Note: It is important to account for the one-time capital expense of Rs. 3,00,000 toward the raw material for constructing the sunshade and the additional fabrication cost. In addition, there is a periodic maintenance cost. But we have not done so, for it would take us far away from our research. It is suffice to note that these costs can be amortized over time and covered by the substantial profits.</p>
<p>It is altogether another matter to estimate the cost of designing and fabricating a robotic hand, mounted on a chassis that can travel on a farm. This too falls well outside the scope of this research. We assume that as international products reach our country and as indigenous R&#x0026;D activities take place, such a robot will become available in the future.</p>
</sec>
</sec>
<sec id="S5">
<title>Summary and conclusion</title>
<p>Diverse technologies have been employed in the automation of agricultural activities. Mushroom harvesting is a step-by-step procedure, so it is possible to design a harvesting robot made out of three major parts: a recognition system, a moving system, and a plucking system.</p>
<p>The recognition system gets photographs of the mushrooms from several cameras mounted in the field. Image processing algorithms are employed to identify ripened mushrooms. This software converts the field into a graph, with individual ripened mushrooms as vertices, and with edges joining vertices corresponding to neighboring mushrooms. (Details of the image processing algorithms are outside the scope of the present study.) This graph will be altered and traversed by the PRM algorithms so as to avoid static or dynamic obstacles. The moving system is a wheeled chassis controlled by the PRM algorithm. The plucking system is a robotic hand. Angles at the different joints of the dexterous robotic fingers are computed by employing IK such that first the fingertips reach the ripened mushroom bud and hold it; next the fingers move upward so that the mushroom is plucked; and third, the robotic hand places the mushroom in a container without damaging it.</p>
<p>The novelty of our research is as follows:</p>
<list list-type="simple">
<list-item>
<label>(i)</label>
<p>This is the first time that PRM algorithms are being proposed for navigation inside mushroom farms.</p>
</list-item>
<list-item>
<label>(ii)</label>
<p>Unlike previous research in mushroom harvesting, mushrooms are not planted in a grid or some pattern but are randomly distributed.</p>
</list-item>
<list-item>
<label>(iii)</label>
<p>No human intervention is required at any stage of harvesting.</p>
</list-item>
<list-item>
<label>(iv)</label>
<p>Robotic automation reduces crop wastage due to unavailability of labor and untimely harvesting of mushrooms.</p>
</list-item>
<list-item>
<label>(v)</label>
<p>Harvesting and other expenses are reduced, compared to those with human labor.</p>
</list-item>
<list-item>
<label>(vi)</label>
<p>A kinematic model of a two-finger dexterous hand with three degrees of freedom for plucking mushrooms was developed using the Denavit&#x2013;Hartenberg method.</p>
</list-item>
<list-item>
<label>(vii)</label>
<p>IK techniques of reaching the ripened mushroom give more precision in plucking.</p>
</list-item>
<list-item>
<label>(viii)</label>
<p>There will be no limitation or restriction on large scale cultivation and harvesting, and this will provide economies of scale.</p>
</list-item>
</list>
</sec>
</body>
<back>
<ref-list>
<title>References</title>
<ref id="B1"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Svestka</surname> <given-names>P.</given-names></name></person-group> <source><italic>Robot Motion Planning Using Probabilistic Roadmaps</italic></source>, <comment>PhD thesis</comment>. <publisher-loc>Utrecht</publisher-loc>: <publisher-name>Utrecht University</publisher-name> (<year>1997</year>).</citation></ref>
<ref id="B2"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Thrun</surname> <given-names>S</given-names></name> <name><surname>Burgard</surname> <given-names>W</given-names></name> <name><surname>Fox</surname> <given-names>D.</given-names></name></person-group> <source><italic>Probabilistic Robotics.</italic></source> <publisher-loc>Freiburg</publisher-loc>: <publisher-name>University of Freiburg</publisher-name> (<year>2005</year>).</citation></ref>
<ref id="B3"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Svestka</surname> <given-names>P</given-names></name> <name><surname>Overmars</surname> <given-names>MH</given-names></name></person-group>. <article-title>Motion Planning for Car-like Robots, a Probabilistic Learning Approach.</article-title> <source><italic>Int J Robot Res.</italic></source> (<year>1997</year>) <volume>16</volume>:<fpage>119</fpage>&#x2013;<lpage>43</lpage>.</citation></ref>
<ref id="B4"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Svestka</surname> <given-names>P</given-names></name> <name><surname>Overmars</surname> <given-names>MH</given-names></name></person-group>. <article-title>Coordinated Path Planning for Multiple Robots.</article-title> <source><italic>Robot Autonom Syst.</italic></source> (<year>1998</year>) <volume>23</volume>:<fpage>125</fpage>&#x2013;<lpage>52</lpage>.</citation></ref>
<ref id="B5"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wilmarth</surname> <given-names>SA</given-names></name> <name><surname>Amato</surname> <given-names>NM</given-names></name> <name><surname>Stiller</surname> <given-names>PF</given-names></name></person-group>. <article-title>MAPRM: A probabilistic Roadmap Planner with Sampling on the Medial Axis of the Free Space.</article-title> <source><italic>Proceedings of the 1999 IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>Detroit, MI</publisher-loc> (<year>1999</year>).</citation></ref>
<ref id="B6"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dale</surname> <given-names>L.</given-names></name></person-group> <source><italic>Optimization Techniques for Probabilistic Roadmaps</italic></source>, <comment>PhD thesis</comment>. <publisher-loc>College Station, TX</publisher-loc>: <publisher-name>Texas A&#x0026;M University</publisher-name> (<year>2000</year>).</citation></ref>
<ref id="B7"><label>7.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Cortes</surname> <given-names>J</given-names></name> <name><surname>Simeon</surname> <given-names>T</given-names></name> <name><surname>Laumond</surname> <given-names>JP</given-names></name></person-group>. <article-title>A Random Loop Generator for Planning the Motions of Closed Kinematic Chains Using PRM Methods.</article-title> <source><italic>Proceedings of the 2002 IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>Washington, DC</publisher-loc> (<year>2002</year>).</citation></ref>
<ref id="B8"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dale</surname> <given-names>L</given-names></name> <name><surname>Amato</surname> <given-names>N</given-names></name></person-group>. <article-title>Probabilistic Roadmaps-Putting it All Together.</article-title> <source><italic>Proc IEEE Int. Conf. Robot Automat.</italic></source> (<year>2001</year>) <volume>2001</volume>:<fpage>1940</fpage>&#x2013;<lpage>7</lpage>.</citation></ref>
<ref id="B9"><label>9.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bachche</surname> <given-names>S</given-names></name></person-group>. <article-title>Deliberation on Design Strategies of Automatic Harvesting Systems: A Survey.</article-title> <source><italic>Robotics</italic></source> (<year>2015</year>) <volume>4</volume>:<fpage>194</fpage>&#x2013;<lpage>222</lpage>. <pub-id pub-id-type="doi">10.3390/robotics4020194</pub-id></citation></ref>
<ref id="B10"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Baur</surname> <given-names>J</given-names></name> <name><surname>Sch&#x00FC;tz</surname> <given-names>C</given-names></name> <name><surname>Pfaff</surname> <given-names>J</given-names></name> <name><surname>Buschmann</surname> <given-names>T</given-names></name> <name><surname>Ulbrich</surname> <given-names>H</given-names></name></person-group>. <article-title>Path Planning for a Fruit Picking Manipulator.</article-title> <source><italic>Proceedings International Conference of Agricultural Engineering.</italic></source> <publisher-loc>Zurich</publisher-loc>: (<year>2014</year>).</citation></ref>
<ref id="B11"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Reed</surname> <given-names>N</given-names></name> <name><surname>Miles</surname> <given-names>SJ</given-names></name> <name><surname>Butler</surname> <given-names>J</given-names></name> <name><surname>Baldwin</surname> <given-names>M</given-names></name> <name><surname>Noble</surname> <given-names>R</given-names></name></person-group>. <article-title>Automatic Mushroom Harvester Development.</article-title> <source><italic>J Agric Engng Res.</italic></source> (<year>2001</year>) <volume>78</volume>:<fpage>15</fpage>&#x2013;<lpage>23</lpage>.</citation></ref>
<ref id="B12"><label>12.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jayaselan</surname> <given-names>H</given-names></name> <name><surname>Ismail</surname> <given-names>W</given-names></name> <name><surname>Ahmad</surname> <given-names>D</given-names></name></person-group>. <article-title>Manipulator Automation for Fresh Fruit Bunch (FFB) Harvester.</article-title> <source><italic>Int J Agric Biol Eng.</italic></source> (<year>2012</year>) <volume>5</volume>:<issue>7</issue>.</citation></ref>
<ref id="B13"><label>13.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rowley</surname> <given-names>J.</given-names></name></person-group> <source><italic>Developing Flexible Automation for Mushroom Harvesting (Agaricus bisporus)</italic></source>, <comment>Ph.D Thesis</comment>. <publisher-loc>Warwick</publisher-loc>: <publisher-name>The University of Warwick</publisher-name> (<year>2009</year>).</citation></ref>
<ref id="B14"><label>14.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ulbrich</surname> <given-names>H</given-names></name> <name><surname>Baur</surname> <given-names>J</given-names></name> <name><surname>Pfaff</surname> <given-names>J</given-names></name> <name><surname>Schuetz</surname> <given-names>C</given-names></name></person-group>. <article-title>Design and Realization of a Redundant Modular Multipurpose Agricultural Robot, DINAME 2015.</article-title> <source><italic>Proceedings of the XVII International Symposium on Dynamic Problems of Mechanics.</italic></source> <publisher-loc>Brazil</publisher-loc> (<year>2015</year>).</citation></ref>
<ref id="B15"><label>15.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Correll</surname> <given-names>N</given-names></name> <name><surname>Arechiga</surname> <given-names>N</given-names></name> <name><surname>Bolger</surname> <given-names>A</given-names></name> <name><surname>Bollini</surname> <given-names>M</given-names></name> <name><surname>Charrow</surname> <given-names>B</given-names></name> <name><surname>Clayton</surname> <given-names>A</given-names></name><etal/></person-group> <article-title>Building a Distributed Robot Garden.</article-title> <source><italic>Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems.</italic></source> <publisher-loc>St. Louis</publisher-loc> (<year>2009</year>).</citation></ref>
<ref id="B16"><label>16.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Han</surname> <given-names>L</given-names></name> <name><surname>Amato</surname> <given-names>N</given-names></name></person-group>. <article-title>A Kinematics-Based Probabilistic Roadmap Method for Closed Chain Systems.</article-title> <source><italic>Proceedings of the Workshop on Algorithmic Foundations of Robotics (WAFR&#x2019;00).</italic></source> <publisher-loc>Berlin</publisher-loc> (<year>2000</year>).</citation></ref>
<ref id="B17"><label>17.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hofstra</surname> <given-names>O</given-names></name> <name><surname>Nieuwenhuisen</surname> <given-names>D</given-names></name> <name><surname>Overmars</surname> <given-names>MH.</given-names></name></person-group> <source><italic>Improving the Path Quality for Probabilistic Roadmap Planners, to appear.</italic></source> <publisher-loc>Northfield, MN</publisher-loc>: <publisher-name>PRM</publisher-name> (<year>2002</year>).</citation></ref>
<ref id="B18"><label>18.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Barraquand</surname> <given-names>J</given-names></name> <name><surname>Kavraki</surname> <given-names>L</given-names></name> <name><surname>Latombe</surname> <given-names>J-C</given-names></name> <name><surname>Li</surname> <given-names>T-Y</given-names></name> <name><surname>Motwani</surname> <given-names>R</given-names></name> <name><surname>Raghavan</surname> <given-names>PA</given-names></name></person-group>. <article-title>Random Sampling Scheme for Path Planning.</article-title> <source><italic>Int J Robot Res.</italic></source> (<year>1997</year>) <volume>16</volume>:<fpage>759</fpage>&#x2013;<lpage>74</lpage>.</citation></ref>
<ref id="B19"><label>19.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Van Den Bergen</surname> <given-names>G.</given-names></name></person-group> <source><italic>Collision Detection in Interactive 3D Computer Animation</italic></source>, <comment>PhD thesis</comment>. <publisher-loc>Eindhoven</publisher-loc>: <publisher-name>Eindhoven University</publisher-name> (<year>1999</year>).</citation></ref>
<ref id="B20"><label>20.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bohlin</surname> <given-names>R</given-names></name> <name><surname>Kavraki</surname> <given-names>LE</given-names></name></person-group>. <article-title>Path Planning Using Lazy PRM.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>St Paul, MN</publisher-loc> (<year>2000</year>).</citation></ref>
<ref id="B21"><label>21.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Boor</surname> <given-names>V</given-names></name> <name><surname>Overmars</surname> <given-names>MH</given-names></name> <name><surname>Van Der Stappen</surname> <given-names>AF</given-names></name></person-group>. <article-title>The Gaussian Sampling Strategy for Probabilistic Roadmap Planners.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>St Paul, MN</publisher-loc> (<year>1999</year>).</citation></ref>
<ref id="B22"><label>22.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>van den Berg</surname> <given-names>J.</given-names></name></person-group> <source><italic>Path Planning in Dynamic Environments</italic></source>, <comment>Ph D thesis</comment>. <publisher-loc>Utrecht</publisher-loc>: <publisher-name>Utrecht University</publisher-name> (<year>2007</year>).</citation></ref>
<ref id="B23"><label>23.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Koenig</surname> <given-names>S</given-names></name> <name><surname>Likhachev</surname> <given-names>M</given-names></name></person-group>. <article-title>D&#x002A;lite.</article-title> <source><italic>Proceedings of the IEEE International Conference on Artificial Intelligence.</italic></source> <publisher-loc>Edmonton</publisher-loc> (<year>2002</year>).</citation></ref>
<ref id="B24"><label>24.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Stentz</surname> <given-names>A</given-names></name></person-group>. <article-title>The Focussed D&#x002A; Algorithm for Real-Time Replanning.</article-title> <source><italic>Proceedings of the International Joint Conference on Artificial Intelligence (IJCAI).</italic></source> <publisher-loc>Macao</publisher-loc> (<year>1995</year>).</citation></ref>
<ref id="B25"><label>25.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Choset</surname> <given-names>H</given-names></name> <name><surname>Lynch</surname> <given-names>KM</given-names></name> <name><surname>Hutchinson</surname> <given-names>S</given-names></name> <name><surname>Kantor</surname> <given-names>GA</given-names></name> <name><surname>Burgard</surname> <given-names>W</given-names></name> <name><surname>Kavraki</surname> <given-names>LE</given-names></name><etal/></person-group> <source><italic>Principles of Robot Motion: Theory, Algorithms, and Implementations.</italic></source> <publisher-loc>Cambridge, MA</publisher-loc>: <publisher-name>MIT Press</publisher-name> (<year>2005</year>).</citation></ref>
<ref id="B26"><label>26.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mohanan</surname> <given-names>MG</given-names></name> <name><surname>Salgoankar</surname> <given-names>A</given-names></name></person-group>. <article-title>A Survey of Robotic Motion Planning in Dynamic Environments.</article-title> <source><italic>Robot Autonom Syst</italic></source> (<year>2018</year>) <volume>100</volume>:<fpage>171</fpage>&#x2013;<lpage>85</lpage>.</citation></ref>
<ref id="B27"><label>27.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Van Den Berg</surname> <given-names>JP</given-names></name> <name><surname>Overmars</surname> <given-names>MH</given-names></name></person-group>. <article-title>Roadmap-Based Motion Planning in Dynamic Environments.</article-title> <source><italic>IEEE Trans Robot.</italic></source> (<year>2005</year>) <volume>21</volume>:<fpage>885</fpage>&#x2013;<lpage>97</lpage>.</citation></ref>
<ref id="B28"><label>28.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>LaValle</surname> <given-names>SM</given-names></name></person-group>. <article-title>Rapidly-exploring random trees: A new tool for path planning.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robots and Systems.</italic></source> <publisher-loc>Ames, IA</publisher-loc> (<year>2000</year>).</citation></ref>
<ref id="B29"><label>29.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kuffner</surname> <given-names>J</given-names></name> <name><surname>LaValle</surname> <given-names>S</given-names></name></person-group>. <article-title>RRT-Connect: An efficient Approach toSingle Query Path Planning.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>Sendai</publisher-loc>: (<year>2000</year>).</citation></ref>
<ref id="B30"><label>30.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Jaillet</surname> <given-names>L</given-names></name> <name><surname>Sim&#x00E9;on</surname> <given-names>T</given-names></name></person-group>. <article-title>A PRM-Based Motion Planner for Dynamically Changing Environments.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robots &#x0026; Systems.</italic></source> <publisher-loc>Sendai</publisher-loc> (<year>2004</year>).</citation></ref>
<ref id="B31"><label>31.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kucuk</surname> <given-names>S</given-names></name> <name><surname>Bingul</surname> <given-names>Z.</given-names></name></person-group> <source><italic>Robot Kinematics: Forward and Inverse Kinematics, Industrial Robotics: Theory, Modelling and Control.</italic></source> <publisher-loc>Jakarta Selatan</publisher-loc>: <publisher-name>InTech</publisher-name> (<year>2006</year>).</citation></ref>
<ref id="B32"><label>32.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Guo</surname> <given-names>J</given-names></name> <name><surname>Jiangnan</surname> <given-names>N</given-names></name></person-group>. <article-title>Analysis and Simulation on the Kinematics of Robot Dexterous Hand.</article-title> <source><italic>Proceedings of the International Conference on Electronics, Network and Computer Engineering (ICENCE 2016).</italic></source> <publisher-loc>Yinchuan</publisher-loc> (<year>2006</year>).</citation></ref>
<ref id="B33"><label>33.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Bertram</surname> <given-names>D</given-names></name> <name><surname>Kuffner</surname> <given-names>J</given-names></name> <name><surname>Dillmann</surname> <given-names>R</given-names></name> <name><surname>Asfour</surname> <given-names>T</given-names></name></person-group>. <article-title>An Integrated Approach to Inverse Kinematics and Path Planning for Redundant Manipulators.</article-title> <source><italic>Proceedings of the 2006 IEEE International Conference on Robotics and Automation.</italic></source> <publisher-loc>Orlando, FL</publisher-loc> (<year>2006</year>).</citation></ref>
<ref id="B34"><label>34.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Chan</surname> <given-names>KW.</given-names></name></person-group> <source><italic>Closed- form and Generalised Inverse Kinematic Solutions for Animating the Human Articulated Structure.</italic></source> <publisher-loc>Perth</publisher-loc>: <publisher-name>Curtin University of Technology</publisher-name> (<year>1996</year>).</citation></ref>
<ref id="B35"><label>35.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Craig</surname> <given-names>JJ.</given-names></name></person-group> <source><italic>Introduction to Robotics: Mechanics and Control.</italic></source> <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Addison- Wesley</publisher-name> (<year>1994</year>).</citation></ref>
<ref id="B36"><label>36.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Novakovic</surname> <given-names>ZR</given-names></name> <name><surname>Nemee</surname> <given-names>B</given-names></name></person-group>. <article-title>A Solution of the Inverse Kinematics Problem Using the Sliding Mode.</article-title> <source><italic>Proceedings of the IEEE Transactions on Robotics and Automation.</italic></source> <publisher-loc>New Orleans, LA</publisher-loc> (<year>1990</year>). <pub-id pub-id-type="doi">10.1109/70.54740</pub-id></citation></ref>
<ref id="B37"><label>37.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kuffner</surname> <given-names>J</given-names></name></person-group>. <article-title>Effective Sampling and Distance Metrics for 3D Rigid Body Path Planning.</article-title> <source><italic>Proceedings of the IEEE International Conference on Robotics and Automation (ICRA 2004).</italic></source> <publisher-loc>New Orleans, LA</publisher-loc> (<year>2004</year>). <pub-id pub-id-type="doi">10.1109/ROBOT.2004.1308895</pub-id></citation></ref>
<ref id="B38"><label>38.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Welman</surname> <given-names>C.</given-names></name></person-group> <source><italic>Inverse Kinematics and Geometric Constraints for Articulated Figure Manipulation.</italic></source> <publisher-loc>Burnaby, BC</publisher-loc>: <publisher-name>Simon Fraser University</publisher-name> (<year>1993</year>).</citation></ref>
<ref id="B39"><label>39.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Paul</surname> <given-names>RP.</given-names></name></person-group> <source><italic>Robot Manipulators: Mathematics, Programming and Control.</italic></source> <publisher-loc>Cambridge, MA</publisher-loc>: <publisher-name>MITPress</publisher-name> (<year>1981</year>).</citation></ref>
<ref id="B40"><label>40.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Watt</surname> <given-names>A</given-names></name> <name><surname>Watt</surname> <given-names>M.</given-names></name></person-group> <source><italic>Advanced Animation and Rendering Techniques.</italic></source> <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Addison- Wesley</publisher-name> (<year>1992</year>).</citation></ref>
<ref id="B41"><label>41.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Barinka</surname> <given-names>L</given-names></name> <name><surname>Berka</surname> <given-names>I.</given-names></name></person-group> <source><italic>Inverse Kinematics- Basic Methods.</italic></source> <publisher-loc>Prague</publisher-loc>: <publisher-name>Czech Technical University</publisher-name> (<year>2002</year>).</citation></ref>
<ref id="B42"><label>42.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mohanan</surname> <given-names>MG</given-names></name> <name><surname>Salgaonkar</surname> <given-names>A</given-names></name></person-group>. <article-title>Probabilistic Approach to robot motion planning in dynamic environments.</article-title> <source><italic>SN Comput Sci.</italic></source> (<year>2020</year>) <volume>1</volume>:<issue>181</issue>.</citation></ref>
<ref id="B43"><label>43.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Mohanan</surname> <given-names>MG</given-names></name> <name><surname>Salgaonkar</surname> <given-names>A.</given-names></name></person-group> <source><italic>Ant colony optimization and Firefly Algorithms for robotic motion planning in dynamic environments. Engineering reports.</italic></source> <publisher-loc>Hoboken, NJ</publisher-loc>: <publisher-name>Wiley Publications</publisher-name> (<year>2020</year>).</citation></ref>
</ref-list>
</back>
</article>