Serveur d'exploration sur les dispositifs haptiques

Attention, ce site est en cours de développement !
Attention, site généré par des moyens informatiques à partir de corpus bruts.
Les informations ne sont donc pas validées.

Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments

Identifieur interne : 000430 ( Pmc/Checkpoint ); précédent : 000429; suivant : 000431

Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments

Auteurs : Alex M. C. Smith [Royaume-Uni] ; Chenguang Yang [Royaume-Uni, République populaire de Chine] ; Hongbin Ma [République populaire de Chine] ; Phil Culverhouse [Royaume-Uni] ; Angelo Cangelosi [Royaume-Uni] ; Etienne Burdet [Royaume-Uni]

Source :

RBID : PMC:4452518

Abstract

In this paper we present a hybrid control scheme, combining the advantages of task-space and joint-space control. The controller is based on a human-like adaptive design, which minimises both control effort and tracking error. Our novel hybrid adaptive controller has been tested in extensive simulations, in a scenario where a Baxter robot manipulator is affected by external disturbances in the form of interaction with the environment and tool-like end-effector perturbations. The results demonstrated improved performance in the hybrid controller over both of its component parts. In addition, we introduce a novel method for online adaptation of learning parameters, using the fuzzy control formalism to utilise expert knowledge from the experimenter. This mechanism of meta-learning induces further improvement in performance and avoids the need for tuning through trial testing.


Url:
DOI: 10.1371/journal.pone.0129281
PubMed: 26029916
PubMed Central: 4452518


Affiliations:


Links toward previous steps (curation, corpus...)


Links to Exploration step

PMC:4452518

Le document en format XML

<record>
<TEI>
<teiHeader>
<fileDesc>
<titleStmt>
<title xml:lang="en">Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments</title>
<author>
<name sortKey="Smith, Alex M C" sort="Smith, Alex M C" uniqKey="Smith A" first="Alex M. C." last="Smith">Alex M. C. Smith</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Yang, Chenguang" sort="Yang, Chenguang" uniqKey="Yang C" first="Chenguang" last="Yang">Chenguang Yang</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
<affiliation wicri:level="3">
<nlm:aff id="aff002">
<addr-line>College of Automation Science and Engineering, South China University of Technology, Guangzhou, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>College of Automation Science and Engineering, South China University of Technology, Guangzhou</wicri:regionArea>
<placeName>
<settlement type="city">Jiangmen</settlement>
<region type="province">Guangdong</region>
</placeName>
</affiliation>
</author>
<author>
<name sortKey="Ma, Hongbin" sort="Ma, Hongbin" uniqKey="Ma H" first="Hongbin" last="Ma">Hongbin Ma</name>
<affiliation wicri:level="3">
<nlm:aff id="aff003">
<addr-line>State Key Laboratory of Intelligent Control and Decision of Complex Systems, Beijing Institute of Technology, Beijing, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>State Key Laboratory of Intelligent Control and Decision of Complex Systems, Beijing Institute of Technology, Beijing</wicri:regionArea>
<placeName>
<settlement type="city">Pékin</settlement>
</placeName>
</affiliation>
<affiliation wicri:level="3">
<nlm:aff id="aff004">
<addr-line>School of Automation, Beijing Institute of Technology, Beijing, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>School of Automation, Beijing Institute of Technology, Beijing</wicri:regionArea>
<placeName>
<settlement type="city">Pékin</settlement>
</placeName>
</affiliation>
</author>
<author>
<name sortKey="Culverhouse, Phil" sort="Culverhouse, Phil" uniqKey="Culverhouse P" first="Phil" last="Culverhouse">Phil Culverhouse</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Cangelosi, Angelo" sort="Cangelosi, Angelo" uniqKey="Cangelosi A" first="Angelo" last="Cangelosi">Angelo Cangelosi</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Burdet, Etienne" sort="Burdet, Etienne" uniqKey="Burdet E" first="Etienne" last="Burdet">Etienne Burdet</name>
<affiliation wicri:level="3">
<nlm:aff id="aff005">
<addr-line>Department of Bioengineering, Imperial College London, London, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Department of Bioengineering, Imperial College London, London</wicri:regionArea>
<placeName>
<settlement type="city">Londres</settlement>
<region type="country">Angleterre</region>
<region type="région" nuts="1">Grand Londres</region>
</placeName>
</affiliation>
</author>
</titleStmt>
<publicationStmt>
<idno type="wicri:source">PMC</idno>
<idno type="pmid">26029916</idno>
<idno type="pmc">4452518</idno>
<idno type="url">http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4452518</idno>
<idno type="RBID">PMC:4452518</idno>
<idno type="doi">10.1371/journal.pone.0129281</idno>
<date when="2015">2015</date>
<idno type="wicri:Area/Pmc/Corpus">000296</idno>
<idno type="wicri:Area/Pmc/Curation">000296</idno>
<idno type="wicri:Area/Pmc/Checkpoint">000430</idno>
</publicationStmt>
<sourceDesc>
<biblStruct>
<analytic>
<title xml:lang="en" level="a" type="main">Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments</title>
<author>
<name sortKey="Smith, Alex M C" sort="Smith, Alex M C" uniqKey="Smith A" first="Alex M. C." last="Smith">Alex M. C. Smith</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Yang, Chenguang" sort="Yang, Chenguang" uniqKey="Yang C" first="Chenguang" last="Yang">Chenguang Yang</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
<affiliation wicri:level="3">
<nlm:aff id="aff002">
<addr-line>College of Automation Science and Engineering, South China University of Technology, Guangzhou, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>College of Automation Science and Engineering, South China University of Technology, Guangzhou</wicri:regionArea>
<placeName>
<settlement type="city">Jiangmen</settlement>
<region type="province">Guangdong</region>
</placeName>
</affiliation>
</author>
<author>
<name sortKey="Ma, Hongbin" sort="Ma, Hongbin" uniqKey="Ma H" first="Hongbin" last="Ma">Hongbin Ma</name>
<affiliation wicri:level="3">
<nlm:aff id="aff003">
<addr-line>State Key Laboratory of Intelligent Control and Decision of Complex Systems, Beijing Institute of Technology, Beijing, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>State Key Laboratory of Intelligent Control and Decision of Complex Systems, Beijing Institute of Technology, Beijing</wicri:regionArea>
<placeName>
<settlement type="city">Pékin</settlement>
</placeName>
</affiliation>
<affiliation wicri:level="3">
<nlm:aff id="aff004">
<addr-line>School of Automation, Beijing Institute of Technology, Beijing, China</addr-line>
</nlm:aff>
<country xml:lang="fr">République populaire de Chine</country>
<wicri:regionArea>School of Automation, Beijing Institute of Technology, Beijing</wicri:regionArea>
<placeName>
<settlement type="city">Pékin</settlement>
</placeName>
</affiliation>
</author>
<author>
<name sortKey="Culverhouse, Phil" sort="Culverhouse, Phil" uniqKey="Culverhouse P" first="Phil" last="Culverhouse">Phil Culverhouse</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Cangelosi, Angelo" sort="Cangelosi, Angelo" uniqKey="Cangelosi A" first="Angelo" last="Cangelosi">Angelo Cangelosi</name>
<affiliation wicri:level="1">
<nlm:aff id="aff001">
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Centre for Robotics and Neural Systems, Plymouth University, Plymouth</wicri:regionArea>
<wicri:noRegion>Plymouth</wicri:noRegion>
</affiliation>
</author>
<author>
<name sortKey="Burdet, Etienne" sort="Burdet, Etienne" uniqKey="Burdet E" first="Etienne" last="Burdet">Etienne Burdet</name>
<affiliation wicri:level="3">
<nlm:aff id="aff005">
<addr-line>Department of Bioengineering, Imperial College London, London, UK</addr-line>
</nlm:aff>
<country xml:lang="fr">Royaume-Uni</country>
<wicri:regionArea>Department of Bioengineering, Imperial College London, London</wicri:regionArea>
<placeName>
<settlement type="city">Londres</settlement>
<region type="country">Angleterre</region>
<region type="région" nuts="1">Grand Londres</region>
</placeName>
</affiliation>
</author>
</analytic>
<series>
<title level="j">PLoS ONE</title>
<idno type="eISSN">1932-6203</idno>
<imprint>
<date when="2015">2015</date>
</imprint>
</series>
</biblStruct>
</sourceDesc>
</fileDesc>
<profileDesc>
<textClass></textClass>
</profileDesc>
</teiHeader>
<front>
<div type="abstract" xml:lang="en">
<p>In this paper we present a hybrid control scheme, combining the advantages of task-space and joint-space control. The controller is based on a human-like adaptive design, which minimises both control effort and tracking error. Our novel hybrid adaptive controller has been tested in extensive simulations, in a scenario where a Baxter robot manipulator is affected by external disturbances in the form of interaction with the environment and tool-like end-effector perturbations. The results demonstrated improved performance in the hybrid controller over both of its component parts. In addition, we introduce a novel method for online adaptation of learning parameters, using the fuzzy control formalism to utilise expert knowledge from the experimenter. This mechanism of meta-learning induces further improvement in performance and avoids the need for tuning through trial testing.</p>
</div>
</front>
<back>
<div1 type="bibliography">
<listBibl>
<biblStruct>
<analytic>
<author>
<name sortKey="Peshkin, Ma" uniqKey="Peshkin M">MA Peshkin</name>
</author>
<author>
<name sortKey="Colgate, Je" uniqKey="Colgate J">JE Colgate</name>
</author>
<author>
<name sortKey="Wannasuphoprasit, W" uniqKey="Wannasuphoprasit W">W Wannasuphoprasit</name>
</author>
<author>
<name sortKey="Moore, Ca" uniqKey="Moore C">CA Moore</name>
</author>
<author>
<name sortKey="Gillespie, Rb" uniqKey="Gillespie R">RB Gillespie</name>
</author>
<author>
<name sortKey="Akella, P" uniqKey="Akella P">P Akella</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Lambercy, O" uniqKey="Lambercy O">O Lambercy</name>
</author>
<author>
<name sortKey="Dovat, L" uniqKey="Dovat L">L Dovat</name>
</author>
<author>
<name sortKey="Gassert, R" uniqKey="Gassert R">R Gassert</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
<author>
<name sortKey="Teo, Cl" uniqKey="Teo C">CL Teo</name>
</author>
<author>
<name sortKey="Milner, T" uniqKey="Milner T">T Milner</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cheng, L" uniqKey="Cheng L">L Cheng</name>
</author>
<author>
<name sortKey="Lin, Y" uniqKey="Lin Y">Y Lin</name>
</author>
<author>
<name sortKey="Hou, Zg" uniqKey="Hou Z">ZG Hou</name>
</author>
<author>
<name sortKey="Tan, M" uniqKey="Tan M">M Tan</name>
</author>
<author>
<name sortKey="Huang, J" uniqKey="Huang J">J Huang</name>
</author>
<author>
<name sortKey="Zhang, W" uniqKey="Zhang W">W Zhang</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Li, Z" uniqKey="Li Z">Z Li</name>
</author>
<author>
<name sortKey="Yang, C" uniqKey="Yang C">C Yang</name>
</author>
<author>
<name sortKey="Ding, N" uniqKey="Ding N">N Ding</name>
</author>
<author>
<name sortKey="Bogdan, S" uniqKey="Bogdan S">S Bogdan</name>
</author>
<author>
<name sortKey="Ge, T" uniqKey="Ge T">T Ge</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Li, Z" uniqKey="Li Z">Z Li</name>
</author>
<author>
<name sortKey="Yang, C" uniqKey="Yang C">C Yang</name>
</author>
<author>
<name sortKey="Tang, Y" uniqKey="Tang Y">Y Tang</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Colbaugh, R" uniqKey="Colbaugh R">R Colbaugh</name>
</author>
<author>
<name sortKey="Seraji, H" uniqKey="Seraji H">H Seraji</name>
</author>
<author>
<name sortKey="Glass, K" uniqKey="Glass K">K Glass</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Yang, C" uniqKey="Yang C">C Yang</name>
</author>
<author>
<name sortKey="Ganesh, G" uniqKey="Ganesh G">G Ganesh</name>
</author>
<author>
<name sortKey="Haddadin, S" uniqKey="Haddadin S">S Haddadin</name>
</author>
<author>
<name sortKey="Parusel, S" uniqKey="Parusel S">S Parusel</name>
</author>
<author>
<name sortKey="Albu Sch Effer, A" uniqKey="Albu Sch Effer A">A Albu-Schäeffer</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
<author>
<name sortKey="Osu, R" uniqKey="Osu R">R Osu</name>
</author>
<author>
<name sortKey="Franklin, Dw" uniqKey="Franklin D">DW Franklin</name>
</author>
<author>
<name sortKey="Milner, Te" uniqKey="Milner T">TE Milner</name>
</author>
<author>
<name sortKey="Kawato, M" uniqKey="Kawato M">M Kawato</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Franklin, Dw" uniqKey="Franklin D">DW Franklin</name>
</author>
<author>
<name sortKey="Osu, R" uniqKey="Osu R">R Osu</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
<author>
<name sortKey="Kawato, M" uniqKey="Kawato M">M Kawato</name>
</author>
<author>
<name sortKey="Milner, Te" uniqKey="Milner T">TE Milner</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Franklin, Dw" uniqKey="Franklin D">DW Franklin</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
<author>
<name sortKey="Tee, Kp" uniqKey="Tee K">KP Tee</name>
</author>
<author>
<name sortKey="Osu, R" uniqKey="Osu R">R Osu</name>
</author>
<author>
<name sortKey="Chew, Cm" uniqKey="Chew C">CM Chew</name>
</author>
<author>
<name sortKey="Milner, Te" uniqKey="Milner T">TE Milner</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Tee, Kp" uniqKey="Tee K">KP Tee</name>
</author>
<author>
<name sortKey="Franklin, Dw" uniqKey="Franklin D">DW Franklin</name>
</author>
<author>
<name sortKey="Kawato, M" uniqKey="Kawato M">M Kawato</name>
</author>
<author>
<name sortKey="Milner, Te" uniqKey="Milner T">TE Milner</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mahyuddin, Mn" uniqKey="Mahyuddin M">MN Mahyuddin</name>
</author>
<author>
<name sortKey="Khan, Sg" uniqKey="Khan S">SG Khan</name>
</author>
<author>
<name sortKey="Herrmann, G" uniqKey="Herrmann G">G Herrmann</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Khan, Sg" uniqKey="Khan S">SG Khan</name>
</author>
<author>
<name sortKey="Herrmann, G" uniqKey="Herrmann G">G Herrmann</name>
</author>
<author>
<name sortKey="Lenz, A" uniqKey="Lenz A">A Lenz</name>
</author>
<author>
<name sortKey="Al Grafi, M" uniqKey="Al Grafi M">M Al Grafi</name>
</author>
<author>
<name sortKey="Pipe, T" uniqKey="Pipe T">T Pipe</name>
</author>
<author>
<name sortKey="Melhuish, C" uniqKey="Melhuish C">C Melhuish</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Wang, W" uniqKey="Wang W">W Wang</name>
</author>
<author>
<name sortKey="Loh, Rn" uniqKey="Loh R">RN Loh</name>
</author>
<author>
<name sortKey="Gu, Ey" uniqKey="Gu E">EY Gu</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Ganesh, G" uniqKey="Ganesh G">G Ganesh</name>
</author>
<author>
<name sortKey="Haruno, M" uniqKey="Haruno M">M Haruno</name>
</author>
<author>
<name sortKey="Kawato, M" uniqKey="Kawato M">M Kawato</name>
</author>
<author>
<name sortKey="Burdet, E" uniqKey="Burdet E">E Burdet</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
<biblStruct></biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cheng, L" uniqKey="Cheng L">L Cheng</name>
</author>
<author>
<name sortKey="Hou, Zg" uniqKey="Hou Z">ZG Hou</name>
</author>
<author>
<name sortKey="Tan, M" uniqKey="Tan M">M Tan</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Cheng, L" uniqKey="Cheng L">L Cheng</name>
</author>
<author>
<name sortKey="Hou, Zg" uniqKey="Hou Z">ZG Hou</name>
</author>
<author>
<name sortKey="Tan, M" uniqKey="Tan M">M Tan</name>
</author>
<author>
<name sortKey="Zhang, Wj" uniqKey="Zhang W">WJ Zhang</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Zadeh, La" uniqKey="Zadeh L">LA Zadeh</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mamdani, Eh" uniqKey="Mamdani E">EH Mamdani</name>
</author>
<author>
<name sortKey="Assilian, S" uniqKey="Assilian S">S Assilian</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Tanaka, K" uniqKey="Tanaka K">K Tanaka</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mamdani, Eh" uniqKey="Mamdani E">EH Mamdani</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Li, H" uniqKey="Li H">H Li</name>
</author>
<author>
<name sortKey="Yu, J" uniqKey="Yu J">J Yu</name>
</author>
<author>
<name sortKey="Hilton, C" uniqKey="Hilton C">C Hilton</name>
</author>
<author>
<name sortKey="Liu, H" uniqKey="Liu H">H Liu</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Tan, J" uniqKey="Tan J">J Tan</name>
</author>
<author>
<name sortKey="Ju, Z" uniqKey="Ju Z">Z Ju</name>
</author>
<author>
<name sortKey="Hand, S" uniqKey="Hand S">S Hand</name>
</author>
<author>
<name sortKey="Liu, H" uniqKey="Liu H">H Liu</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Woodson, We" uniqKey="Woodson W">WE Woodson</name>
</author>
<author>
<name sortKey="Tillman, B" uniqKey="Tillman B">B Tillman</name>
</author>
<author>
<name sortKey="Tillman, P" uniqKey="Tillman P">P Tillman</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Zadeh, La" uniqKey="Zadeh L">LA Zadeh</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Bouchon Meunier, B" uniqKey="Bouchon Meunier B">B Bouchon-Meunier</name>
</author>
<author>
<name sortKey="Dotoli, M" uniqKey="Dotoli M">M Dotoli</name>
</author>
<author>
<name sortKey="Maione, B" uniqKey="Maione B">B Maione</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Mizumoto, M" uniqKey="Mizumoto M">M Mizumoto</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Ross, Tj" uniqKey="Ross T">TJ Ross</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Takagi, T" uniqKey="Takagi T">T Takagi</name>
</author>
<author>
<name sortKey="Sugeno, M" uniqKey="Sugeno M">M Sugeno</name>
</author>
</analytic>
</biblStruct>
<biblStruct>
<analytic>
<author>
<name sortKey="Corke, Pi" uniqKey="Corke P">PI Corke</name>
</author>
</analytic>
</biblStruct>
<biblStruct></biblStruct>
</listBibl>
</div1>
</back>
</TEI>
<pmc article-type="research-article">
<pmc-dir>properties open_access</pmc-dir>
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">PLoS One</journal-id>
<journal-id journal-id-type="iso-abbrev">PLoS ONE</journal-id>
<journal-id journal-id-type="publisher-id">plos</journal-id>
<journal-id journal-id-type="pmc">plosone</journal-id>
<journal-title-group>
<journal-title>PLoS ONE</journal-title>
</journal-title-group>
<issn pub-type="epub">1932-6203</issn>
<publisher>
<publisher-name>Public Library of Science</publisher-name>
<publisher-loc>San Francisco, CA USA</publisher-loc>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="pmid">26029916</article-id>
<article-id pub-id-type="pmc">4452518</article-id>
<article-id pub-id-type="publisher-id">PONE-D-14-50040</article-id>
<article-id pub-id-type="doi">10.1371/journal.pone.0129281</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Research Article</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments</article-title>
<alt-title alt-title-type="running-head">Hybrid Adaptive Control</alt-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname>Smith</surname>
<given-names>Alex M. C.</given-names>
</name>
<xref ref-type="aff" rid="aff001">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Yang</surname>
<given-names>Chenguang</given-names>
</name>
<xref ref-type="aff" rid="aff001">
<sup>1</sup>
</xref>
<xref ref-type="aff" rid="aff002">
<sup>2</sup>
</xref>
<xref ref-type="corresp" rid="cor001">*</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Ma</surname>
<given-names>Hongbin</given-names>
</name>
<xref ref-type="aff" rid="aff003">
<sup>3</sup>
</xref>
<xref ref-type="aff" rid="aff004">
<sup>4</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Culverhouse</surname>
<given-names>Phil</given-names>
</name>
<xref ref-type="aff" rid="aff001">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Cangelosi</surname>
<given-names>Angelo</given-names>
</name>
<xref ref-type="aff" rid="aff001">
<sup>1</sup>
</xref>
</contrib>
<contrib contrib-type="author">
<name>
<surname>Burdet</surname>
<given-names>Etienne</given-names>
</name>
<xref ref-type="aff" rid="aff005">
<sup>5</sup>
</xref>
</contrib>
</contrib-group>
<aff id="aff001">
<label>1</label>
<addr-line>Centre for Robotics and Neural Systems, Plymouth University, Plymouth, UK</addr-line>
</aff>
<aff id="aff002">
<label>2</label>
<addr-line>College of Automation Science and Engineering, South China University of Technology, Guangzhou, China</addr-line>
</aff>
<aff id="aff003">
<label>3</label>
<addr-line>State Key Laboratory of Intelligent Control and Decision of Complex Systems, Beijing Institute of Technology, Beijing, China</addr-line>
</aff>
<aff id="aff004">
<label>4</label>
<addr-line>School of Automation, Beijing Institute of Technology, Beijing, China</addr-line>
</aff>
<aff id="aff005">
<label>5</label>
<addr-line>Department of Bioengineering, Imperial College London, London, UK</addr-line>
</aff>
<contrib-group>
<contrib contrib-type="editor">
<name>
<surname>Bongard</surname>
<given-names>Josh</given-names>
</name>
<role>Academic Editor</role>
<xref ref-type="aff" rid="edit1"></xref>
</contrib>
</contrib-group>
<aff id="edit1">
<addr-line>University of Vermont, UNITED STATES</addr-line>
</aff>
<author-notes>
<fn fn-type="conflict" id="coi001">
<p>
<bold>Competing Interests: </bold>
The authors have declared that no competing interests exist.</p>
</fn>
<fn fn-type="con" id="contrib001">
<p>Conceived and designed the experiments: AS CY EB. Performed the experiments: AS CY. Analyzed the data: AS CY HM EB. Contributed reagents/materials/analysis tools: CY AC PC. Wrote the paper: AS CY HM PC AC EB.</p>
</fn>
<corresp id="cor001">* E-mail:
<email>cyang@ieee.org</email>
</corresp>
</author-notes>
<pub-date pub-type="collection">
<year>2015</year>
</pub-date>
<pub-date pub-type="epub">
<day>1</day>
<month>6</month>
<year>2015</year>
</pub-date>
<volume>10</volume>
<issue>6</issue>
<elocation-id>e0129281</elocation-id>
<history>
<date date-type="received">
<day>6</day>
<month>11</month>
<year>2014</year>
</date>
<date date-type="accepted">
<day>6</day>
<month>5</month>
<year>2015</year>
</date>
</history>
<permissions>
<copyright-year>2015</copyright-year>
<copyright-holder>Smith et al</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>This is an open access article distributed under the terms of the
<ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution License</ext-link>
, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited</license-p>
</license>
</permissions>
<self-uri content-type="pdf" xlink:type="simple" xlink:href="pone.0129281.pdf"></self-uri>
<abstract>
<p>In this paper we present a hybrid control scheme, combining the advantages of task-space and joint-space control. The controller is based on a human-like adaptive design, which minimises both control effort and tracking error. Our novel hybrid adaptive controller has been tested in extensive simulations, in a scenario where a Baxter robot manipulator is affected by external disturbances in the form of interaction with the environment and tool-like end-effector perturbations. The results demonstrated improved performance in the hybrid controller over both of its component parts. In addition, we introduce a novel method for online adaptation of learning parameters, using the fuzzy control formalism to utilise expert knowledge from the experimenter. This mechanism of meta-learning induces further improvement in performance and avoids the need for tuning through trial testing.</p>
</abstract>
<funding-group>
<funding-statement>The authors would like to acknowledge support from Engineering and Physical Sciences Research Council (EPSRC) grants EP/L026856/1 and EP/J004561/1 BABEL, National Natural Science Foundation of China (NSFC) grants 61473120 and 61473038, Guangdong Provincial Natural Science Foundation of China grant 2014A030313266, and European Commission grant FP7-ICT-601003 BALANCE. The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript.</funding-statement>
</funding-group>
<counts>
<fig-count count="8"></fig-count>
<table-count count="3"></table-count>
<page-count count="19"></page-count>
</counts>
<custom-meta-group>
<custom-meta id="data-availability">
<meta-name>Data Availability</meta-name>
<meta-value>All relevant data are within the paper.</meta-value>
</custom-meta>
</custom-meta-group>
</article-meta>
<notes>
<title>Data Availability</title>
<p>All relevant data are within the paper.</p>
</notes>
</front>
<body>
<sec sec-type="intro" id="sec001">
<title>Introduction</title>
<p>Modern robots are expected to interact extensively with the environment and with humans [
<xref rid="pone.0129281.ref001" ref-type="bibr">1</xref>
,
<xref rid="pone.0129281.ref002" ref-type="bibr">2</xref>
]. This interaction with dynamic and unknown environments requires a control method that maintains stability and task effectiveness despite disturbances. One of the first schemes proposed to control interaction with an unknown environment is impedance control [
<xref rid="pone.0129281.ref003" ref-type="bibr">3</xref>
]. The environment is modeled as an admittance and the manipulator as an impedance, so that interactive control is achieved through the exchange of energy. Impedance control can be designed on top of adaptive control, which compensates parametric uncertainties [
<xref rid="pone.0129281.ref004" ref-type="bibr">4</xref>
<xref rid="pone.0129281.ref006" ref-type="bibr">6</xref>
]. Adaptive impedance control methods, developed in [
<xref rid="pone.0129281.ref007" ref-type="bibr">7</xref>
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
], have improved the operational performance of a traditional impedance controller. In particular, the work in [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
] shows how stability and successful performance can be gradually acquired despite the initial interaction instability typical of tool use such as drilling or carving [
<xref rid="pone.0129281.ref010" ref-type="bibr">10</xref>
].</p>
<p>Parallel to these developments, studies have shown that the human nervous system can adapt mechanical impedance (e.g. the resistance to perturbations) to succeed in performing tasks in stable and unstable environments [
<xref rid="pone.0129281.ref011" ref-type="bibr">11</xref>
,
<xref rid="pone.0129281.ref012" ref-type="bibr">12</xref>
]. This is achieved through co-contraction of agonist/antagonist muscle groups, as demonstrated in
<xref ref-type="fig" rid="pone.0129281.g001">Fig 1(a)</xref>
. The nervous system adapts motor commands to stabilise interactions through independent control of impedance and exerted force; the adaptation automatically selects suitable muscle activations to compensate for the interaction force and instability. At the same time, metabolic cost is minimised through the natural relaxation of muscle groups when error is sufficiently small. A model for this learning was introduced in [
<xref rid="pone.0129281.ref013" ref-type="bibr">13</xref>
,
<xref rid="pone.0129281.ref014" ref-type="bibr">14</xref>
], which gave rise to a novel kind of non-linear adaptive controller that has been successfully demonstrated on robots [
<xref rid="pone.0129281.ref015" ref-type="bibr">15</xref>
]. The adaptation of impedance in this biomimetic controller follows a “v-shaped” algorithm, as shown in
<xref ref-type="fig" rid="pone.0129281.g001">Fig 1(b)</xref>
. Conventionally designed adaptive control designs are typically focussed on the estimation of uncertain parameters under stable motion [
<xref rid="pone.0129281.ref016" ref-type="bibr">16</xref>
]; in comparison, the biomimetic control design is able to acquire stability in unstable dynamics as well as minimise control effort, through adaptation of force and impedance [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
]. Similar to muscle relaxation, under stable interaction the controller also demonstrates compliance, which has received much attention in recent research on robotic manipulation [
<xref rid="pone.0129281.ref017" ref-type="bibr">17</xref>
] [
<xref rid="pone.0129281.ref018" ref-type="bibr">18</xref>
].</p>
<fig id="pone.0129281.g001" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g001</object-id>
<label>Fig 1</label>
<caption>
<title>How co-contraction affects muscle impedance.</title>
<p>(a): By contracting at the same time with different forces, the flexor and extensor muscles work together to maintain effector torque, but with increased impedance. (b): the “v-shape” of the adaptive law. Impedance increases irrespective of error direction, and decreases when error is below a threshold; this mechanism ensures minimisation of metabolic cost (i.e. control effort).</p>
</caption>
<graphic xlink:href="pone.0129281.g001"></graphic>
</fig>
<p>The present paper extends this novel adaptive controller in two aspects: the first contribution is
<italic>hybrid task-space/joint-space control</italic>
. Controllers are typically implemented in either joint space (corresponding to the actuators) or in Cartesian space (in which case the inverse kinematics must be solved). Both of these control methods have advantages and disadvantages:
<list list-type="bullet">
<list-item>
<p>In contrast to joint space controllers, Cartesian controllers allows for intuitive trajectories in the world space. Objects placed in the workspace typically have a Cartesian representation, e.g. a box placed 0.1 metres in front of the robot.</p>
</list-item>
<list-item>
<p>On the other hand, robots typically require inputs in joint-space, i.e. torques rather than forces and moments. Therefore, joint space control is less computationally expensive than Cartesian space control, as it avoids the inverse kinematic problem. This is especially true for under-actuated or redundant robots like the Baxter manipulator.</p>
</list-item>
<list-item>
<p>Telepresence tasks may be more intuitive in joint space, when an anthropomorphic robot is imitating a human operator.</p>
</list-item>
</list>
More specifically to this work,
<list list-type="bullet">
<list-item>
<p>Joint control can make the manipulator robust against disturbances along any part of the arm by monitoring joint-space errors.</p>
</list-item>
<list-item>
<p>Cartesian control is sensitive to task-specific disturbances occurring at the end-effector.</p>
</list-item>
</list>
</p>
<p>Therefore, a
<italic>hybrid joint-Cartesian space control scheme</italic>
is developed and investigated in this paper to take advantages of these two control approaches. The Cartesian task we study is that of carrying an object along a given trajectory while disturbances are applied either on the endpoint or along the arm (or both), similar to noise rejection when holding a glass of champagne in a crowded room [
<xref rid="pone.0129281.ref019" ref-type="bibr">19</xref>
]. This extends developments found in [
<xref rid="pone.0129281.ref020" ref-type="bibr">20</xref>
] and [
<xref rid="pone.0129281.ref021" ref-type="bibr">21</xref>
].</p>
<p>Another aspect of adaptive control that has received little attention is
<italic>the setting of learning parameters</italic>
. These parameters are typically tuned by the user, in order to complete the task and improve performance, e.g. by minimising the tracking error. Automating the selection of learning parameters is not an easy task. Real-world manipulator systems have complex and unknown dynamics due to interaction with the environment, which is difficult—or in some cases, impossible—to model. The neural network-based approach of [
<xref rid="pone.0129281.ref022" ref-type="bibr">22</xref>
,
<xref rid="pone.0129281.ref023" ref-type="bibr">23</xref>
] may be used to estimate uncertainties in order to avoid some of these problems. However, fuzzy logic can be used to transfer expertise from a human operator in order to make rational decisions in the face of imprecise data [
<xref rid="pone.0129281.ref024" ref-type="bibr">24</xref>
<xref rid="pone.0129281.ref026" ref-type="bibr">26</xref>
]. Fuzzy logic has been successfully introduced into control systems to improve performance [
<xref rid="pone.0129281.ref027" ref-type="bibr">27</xref>
], and recently has been used in non-linear control systems [
<xref rid="pone.0129281.ref028" ref-type="bibr">28</xref>
] and robot manipulation [
<xref rid="pone.0129281.ref029" ref-type="bibr">29</xref>
]. This paper thus develops a method based on fuzzy logic to set the learning parameters.</p>
<p>The concepts of this paper will be simulated and tested on one arm of the Baxter robot (
<xref ref-type="fig" rid="pone.0129281.g002">Fig 2</xref>
). Baxter is a bimanual, low cost robot, designed for introductory industrial applications from Rethink Robotics©, which has recently become available in a research version for use in academia.</p>
<fig id="pone.0129281.g002" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g002</object-id>
<label>Fig 2</label>
<caption>
<title>Baxter arm, and disturbance forces acting on it.</title>
<p>
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
acts at the end-effector and
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
is applied further up the arm as described in Eqs (
<xref ref-type="disp-formula" rid="pone.0129281.e008">2</xref>
) and (
<xref ref-type="disp-formula" rid="pone.0129281.e011">4</xref>
). The model generated using MATLAB and Peter Corke’s Robotics Toolbox is shown on the right [
<xref rid="pone.0129281.ref037" ref-type="bibr">37</xref>
].</p>
</caption>
<graphic xlink:href="pone.0129281.g002"></graphic>
</fig>
</sec>
<sec id="sec002">
<title>Control problem</title>
<p>Baxter is required to move along a given trajectory under the influence of a high frequency, low amplitude vibration at the end-effector, simulating the type of disturbance a tool might produce. In addition, a high amplitude and low frequency perturbation is applied to a point on the arm away from the end-effector, to simulate collision with an operator or with the environment. For reference, nomenclature is provided in
<xref ref-type="table" rid="pone.0129281.t001">Table 1</xref>
.</p>
<table-wrap id="pone.0129281.t001" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.t001</object-id>
<label>Table 1</label>
<caption>
<title>Nomenclature.</title>
</caption>
<alternatives>
<graphic id="pone.0129281.t001g" xlink:href="pone.0129281.t001"></graphic>
<table frame="box" rules="all" border="0">
<colgroup span="1">
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead>
<tr>
<th align="left" rowspan="1" colspan="1">Symbol</th>
<th align="left" rowspan="1" colspan="1">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>n</italic>
</td>
<td align="left" rowspan="1" colspan="1">Number of joints, i.e. degrees of freedom</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>q</italic>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Joint angle</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e001">
<alternatives>
<graphic id="pone.0129281.e001g" xlink:href="pone.0129281.e001"></graphic>
<mml:math id="M1">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">Joint angular velocity</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e002">
<alternatives>
<graphic id="pone.0129281.e002g" xlink:href="pone.0129281.e002"></graphic>
<mml:math id="M2">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>..</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">Joint angular acceleration</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>X</italic>
∈ ℜ
<sup>6</sup>
</td>
<td align="left" rowspan="1" colspan="1">Cartesian/task-space position</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e003">
<alternatives>
<graphic id="pone.0129281.e003g" xlink:href="pone.0129281.e003"></graphic>
<mml:math id="M3">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mn>6</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">Cartesian/task-space velocity</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e004">
<alternatives>
<graphic id="pone.0129281.e004g" xlink:href="pone.0129281.e004"></graphic>
<mml:math id="M4">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>..</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mn>6</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">Cartesian/task-space acceleration</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>q</italic>
*,
<italic>X</italic>
*</td>
<td align="left" rowspan="1" colspan="1">Desired joint position, Cartesian position</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
,
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
∈ ℜ
<sup>6</sup>
</td>
<td align="left" rowspan="1" colspan="1">Internal, external force respectively</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>M</italic>
∈ ℜ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Inertia matrix</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>C</italic>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Coriolis and Centrifugal force</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>G</italic>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Force due to gravity</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Input torque</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>τ</italic>
<sub>
<italic>dist</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Torque due to disturbances</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>τ</italic>
<sub>
<italic>r</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Reference torque</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>τ</italic>
<sub>
<italic>j</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Joint-space control torque</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>τ</italic>
<sub>
<italic>x</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Task-space control torque</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>L</italic>
∈ ℜ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Stability margin</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>J</italic>
∈ ℜ
<sup>
<italic>n</italic>
</sup>
</td>
<td align="left" rowspan="1" colspan="1">Manipulator Jacobian matrix</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>J</italic>
<sup></sup>
∈ ℜ
<sup>
<italic>n</italic>
×6</sup>
</td>
<td align="left" rowspan="1" colspan="1">Pseudo-inverse Jacobian</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>Z</italic>
∈ ℜ
<sup>6×6</sup>
</td>
<td align="left" rowspan="1" colspan="1">Reduction matrix</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>e</italic>
,
<italic>e</italic>
<sub>
<italic>x</italic>
</sub>
</td>
<td align="left" rowspan="1" colspan="1">Joint, task-space position error, respectively</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e005">
<alternatives>
<graphic id="pone.0129281.e005g" xlink:href="pone.0129281.e005"></graphic>
<mml:math id="M5">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">Joint, task-space velocity error</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>ɛ</italic>
<sub>
<italic>j</italic>
</sub>
,
<italic>ɛ</italic>
<sub>
<italic>x</italic>
</sub>
</td>
<td align="left" rowspan="1" colspan="1">Joint, task-space tracking error</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">|⋅|</td>
<td align="left" rowspan="1" colspan="1">Absolute value</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">‖⋅‖</td>
<td align="left" rowspan="1" colspan="1">Euclidian vector norm</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">0
<sub>[
<italic>i</italic>
×
<italic>j</italic>
]</sub>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>i</italic>
×
<italic>j</italic>
—dimensional zero matrix</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<sec id="sec003">
<title>Robot Dynamics</title>
<p>The robot arm dynamics are given as:
<disp-formula id="pone.0129281.e006">
<alternatives>
<graphic xlink:href="pone.0129281.e006.jpg" id="pone.0129281.e006g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M6">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>¨</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi>G</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(1)</label>
</disp-formula>
where
<italic>q</italic>
denotes the vector of joint angles,
<italic>M</italic>
(
<italic>q</italic>
) ∈ ℝ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
is the symmetric, bounded, positive definite inertia matrix, and
<italic>n</italic>
is the degree of freedom (DoF) of the robot arm;
<inline-formula id="pone.0129281.e007">
<alternatives>
<graphic xlink:href="pone.0129281.e007.jpg" id="pone.0129281.e007g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M7">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo stretchy="false">)</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
denotes the Coriolis and Centrifugal force;
<italic>G</italic>
(
<italic>q</italic>
) ∈ ℝ
<sup>
<italic>n</italic>
</sup>
is the gravitational force;
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
∈ ℝ
<sup>
<italic>n</italic>
</sup>
is the vector of control input torque; and
<italic>τ</italic>
<sub>
<italic>dist</italic>
</sub>
∈ ℝ
<sup>
<italic>n</italic>
</sup>
is the disturbance torque caused by friction, environmental disturbances or loads as described in the next section. The control torques
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
are generated by the designed controllers in order to achieve desired performance in terms of motion tracking and disturbance rejection.</p>
</sec>
<sec id="sec004">
<title>Disturbances</title>
<p>We assume that the disturbance torque
<italic>τ</italic>
<sub>
<italic>dist</italic>
</sub>
can be broken down to two components to simulate both a task disturbance at the end effector, described here as
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
, and an environmental disturbance
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
applied on the arm, as shown in
<xref ref-type="fig" rid="pone.0129281.g002">Fig 2</xref>
:
<disp-formula id="pone.0129281.e008">
<alternatives>
<graphic xlink:href="pone.0129281.e008.jpg" id="pone.0129281.e008g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M8">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mi>p</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mi>p</mml:mi>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
<mml:mo form="prefix">sin</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>π</mml:mi>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>p</mml:mi>
</mml:msub>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(2)</label>
</disp-formula>
is applied on the endpoint, where 0 <
<italic>A</italic>
<sub>
<italic>p</italic>
</sub>
≤ 20 is the amplitude and 100 <
<italic>ω</italic>
<sub>
<italic>p</italic>
</sub>
≤ 1000 the frequency of oscillation in Hertz. In joint space, the torque applied is then
<disp-formula id="pone.0129281.e009">
<alternatives>
<graphic xlink:href="pone.0129281.e009.jpg" id="pone.0129281.e009g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M9">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>J</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>k</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(3)</label>
</disp-formula>
where the Jacobian
<italic>J</italic>
(
<italic>q</italic>
) is defined through
<inline-formula id="pone.0129281.e010">
<alternatives>
<graphic xlink:href="pone.0129281.e010.jpg" id="pone.0129281.e010g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M10">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>x</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:mi>J</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
. The environmental disturbance is given by
<disp-formula id="pone.0129281.e011">
<alternatives>
<graphic xlink:href="pone.0129281.e011.jpg" id="pone.0129281.e011g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M11">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>v</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mi>r</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mi>r</mml:mi>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>A</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mo form="prefix">sin</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>2</mml:mn>
<mml:mi>π</mml:mi>
<mml:msub>
<mml:mi>ω</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(4)</label>
</disp-formula>
where 20
<italic>N</italic>
<
<italic>A</italic>
<sub>
<italic>r</italic>
</sub>
≤ 100
<italic>N</italic>
is the perturbation amplitude, similar to average limits of human push/pull strength [
<xref rid="pone.0129281.ref030" ref-type="bibr">30</xref>
], and 0.1 <
<italic>ω</italic>
<sub>
<italic>r</italic>
</sub>
≤ 1 the frequency in Hertz, which provides a slowly changing disturbance. To simulate the environmental force
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
being applied at a point on the arm, e.g. at the elbow, the Jacobian matrix
<italic>J</italic>
is reduced by a matrix
<italic>Z</italic>
, defined as
<disp-formula id="pone.0129281.e012">
<alternatives>
<graphic xlink:href="pone.0129281.e012.jpg" id="pone.0129281.e012g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M12">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>Z</mml:mi>
<mml:mo></mml:mo>
<mml:mo>[</mml:mo>
<mml:mtable>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mi mathvariant="normal">I</mml:mi>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd>
<mml:msub>
<mml:mn>0</mml:mn>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mo>(</mml:mo>
<mml:mi>n</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo>×</mml:mo>
<mml:mi>z</mml:mi>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:msub>
</mml:mtd>
</mml:mtr>
</mml:mtable>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(5)</label>
</disp-formula>
where
<italic>z</italic>
is the number of joints from the base to the contact point; e.g. if the force is applied on the elbow,
<italic>z</italic>
= 4. The torque can then be derived as
<disp-formula id="pone.0129281.e013">
<alternatives>
<graphic xlink:href="pone.0129281.e013.jpg" id="pone.0129281.e013g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M13">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>v</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>J</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi>Z</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mi>T</mml:mi>
</mml:mrow>
</mml:msup>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mi>n</mml:mi>
<mml:mi>v</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(6)</label>
</disp-formula>
The disturbance torque
<italic>τ</italic>
<sub>
<italic>dist</italic>
</sub>
in
<xref ref-type="disp-formula" rid="pone.0129281.e006">Eq (1)</xref>
is comprised of a combination of terms in Eqs (
<xref ref-type="disp-formula" rid="pone.0129281.e013">6</xref>
) and (
<xref ref-type="disp-formula" rid="pone.0129281.e009">3</xref>
).</p>
</sec>
</sec>
<sec id="sec005">
<title>Adaptive Control</title>
<sec id="sec006">
<title>Feedforward controller</title>
<p>Given the dynamics of a manipulator in
<xref ref-type="disp-formula" rid="pone.0129281.e006">Eq (1)</xref>
, we employ the following controller as the initial torque input
<disp-formula id="pone.0129281.e014">
<alternatives>
<graphic xlink:href="pone.0129281.e014.jpg" id="pone.0129281.e014g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M14">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>M</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>¨</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mi>G</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>L</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>ε</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(7)</label>
</disp-formula>
where
<italic>L</italic>
(
<italic>t</italic>
)
<italic>ɛ</italic>
(
<italic>t</italic>
) corresponds to a desired
<italic>stability margin</italic>
[
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
] which produces minimal feedback (similar to the passive impedance effect of muscles and tendons), and the first three terms are feed-forward compensation for the manipulator’s dynamics. As in sliding mode control, we use the
<italic>tracking error</italic>
<disp-formula id="pone.0129281.e015">
<alternatives>
<graphic xlink:href="pone.0129281.e015.jpg" id="pone.0129281.e015g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M15">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>ε</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mi>κ</mml:mi>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(8)</label>
</disp-formula>
where
<disp-formula id="pone.0129281.e016">
<alternatives>
<graphic xlink:href="pone.0129281.e016.jpg" id="pone.0129281.e016g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M16">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mi>q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi>q</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(9)</label>
</disp-formula>
are joint angle and angular velocity errors, respectively. In addition to the above control input
<italic>τ</italic>
<sub>
<italic>r</italic>
</sub>
(
<italic>t</italic>
), we develop two adaptive controllers in joint space and task space as follows.</p>
<sec id="sec007">
<title>Joint space adaptive control</title>
<p>The human-like adaptive law for tuning the feed-forward and feedback components of the control torque
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
from [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
] is applied both in joint and task spaces. The adaptation here is continuous during movement, rather than trial after trial on repeated movements, so that tracking error and effort are continuously minimised. Let us define
<disp-formula id="pone.0129281.e017">
<alternatives>
<graphic xlink:href="pone.0129281.e017.jpg" id="pone.0129281.e017g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M17">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mo>-</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(10)</label>
</disp-formula>
where −
<italic>τ</italic>
(
<italic>t</italic>
) is the learned
<italic>feed-forward</italic>
torque, and −
<italic>K</italic>
(
<italic>t</italic>
)
<italic>e</italic>
(
<italic>t</italic>
) and
<inline-formula id="pone.0129281.e018">
<alternatives>
<graphic xlink:href="pone.0129281.e018.jpg" id="pone.0129281.e018g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M18">
<mml:mrow>
<mml:mo></mml:mo>
<mml:mi>D</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>.</mml:mo>
</mml:mover>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
are
<italic>feedback</italic>
torque terms due to stiffness and damping, respectively. The adaptive laws introduced in [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
] for a trajectory of period
<italic>T</italic>
are given as:
<disp-formula id="pone.0129281.e019">
<alternatives>
<graphic xlink:href="pone.0129281.e019.jpg" id="pone.0129281.e019g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M19">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>τ</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:mo>(</mml:mo>
<mml:mi>ε</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo>-</mml:mo>
<mml:mi>γ</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>K</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>K</mml:mi>
</mml:msub>
<mml:mo>(</mml:mo>
<mml:mi>ε</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mi>e</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>γ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>D</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mo>(</mml:mo>
<mml:mi>ε</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>γ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(11)</label>
</disp-formula>
In the present paper we decouple the forgetting factor
<italic>γ</italic>
(
<italic>t</italic>
) from the gain matrices
<italic>Q</italic>
<sub>(⋅)</sub>
in order to avoid high frequency oscillation, which can occur when both
<italic>γ</italic>
and
<italic>Q</italic>
<sub>(⋅)</sub>
are large. As mentioned above, we consider the adaptation in continuous time, rather than by iteration over consecutive trials, yielding the
<italic>joint space adaptation laws</italic>
:
<disp-formula id="pone.0129281.e020">
<alternatives>
<graphic xlink:href="pone.0129281.e020.jpg" id="pone.0129281.e020g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M20">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>τ</mml:mi>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(12)</label>
</disp-formula>
where
<italic>δt</italic>
is the sampling time,
<italic>K</italic>
<sub>
<italic>j</italic>
</sub>
(0) = 0
<sub>[
<italic>n</italic>
×
<italic>n</italic>
]</sub>
and
<italic>D</italic>
<sub>
<italic>j</italic>
</sub>
(0) = 0
<sub>[
<italic>n</italic>
×
<italic>n</italic>
]</sub>
.
<italic>Q</italic>
<sub>
<italic>τ</italic>
</sub>
,
<italic>Q</italic>
<sub>
<italic>Kj</italic>
</sub>
,
<italic>Q</italic>
<sub>
<italic>Dj</italic>
</sub>
∈ ℜ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
are diagonal positive-definite gain matrices. Furthermore, in [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
],
<italic>γ</italic>
(
<italic>t</italic>
) ∈ ℜ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
was diagonal with
<disp-formula id="pone.0129281.e021">
<alternatives>
<graphic xlink:href="pone.0129281.e021.jpg" id="pone.0129281.e021g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M21">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mi>a</mml:mi>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo>+</mml:mo>
<mml:mi>b</mml:mi>
<mml:msup>
<mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(13)</label>
</disp-formula>
which requires two tuning variables,
<italic>a</italic>
and
<italic>b</italic>
. To simplify parameter selection,
<italic>γ</italic>
is redefined as
<disp-formula id="pone.0129281.e022">
<alternatives>
<graphic xlink:href="pone.0129281.e022.jpg" id="pone.0129281.e022g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M22">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo form="prefix">exp</mml:mo>
<mml:mo>(</mml:mo>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>ε</mml:mi>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>1</mml:mn>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msubsup>
<mml:mi>α</mml:mi>
<mml:mrow>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(14)</label>
</disp-formula>
which requires only one variable,
<italic>α</italic>
<sub>
<italic>j</italic>
</sub>
, to describe the shape (as shown in
<xref ref-type="fig" rid="pone.0129281.g003">Fig 3</xref>
) but maintaining the same functionality. This also presents the advantage of simple application of a fuzzy inference engine, as described in a later section.</p>
<fig id="pone.0129281.g003" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g003</object-id>
<label>Fig 3</label>
<caption>
<title>How the magnitude of
<italic>α</italic>
affects the forgetting factor
<italic>γ</italic>
.</title>
<p>Higher values of
<italic>α</italic>
have a high narrow shape, so that when tracking performance is good the control effort is reduced maximally. When tracking performance is poor, the forgetting factor is small, increasing applied feedback torque.</p>
</caption>
<graphic xlink:href="pone.0129281.g003"></graphic>
</fig>
</sec>
<sec id="sec008">
<title>Task space adaptive control</title>
<p>
<italic>Task-space control</italic>
is designed in a similar manner to joint space. First, we define the error term in Cartesian space:
<disp-formula id="pone.0129281.e023">
<alternatives>
<graphic xlink:href="pone.0129281.e023.jpg" id="pone.0129281.e023g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M23">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mi>X</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi>X</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>X</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mi>κ</mml:mi>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(15)</label>
</disp-formula>
This leads to a change in the
<italic>feed-forward</italic>
and
<italic>feedback</italic>
terms described in
<xref ref-type="disp-formula" rid="pone.0129281.e020">Eq (12)</xref>
to
<disp-formula id="pone.0129281.e024">
<alternatives>
<graphic xlink:href="pone.0129281.e024.jpg" id="pone.0129281.e024g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M24">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>F</mml:mi>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msubsup>
<mml:mi>e</mml:mi>
<mml:mi>x</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo></mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:msub>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msubsup>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(16)</label>
</disp-formula>
so that
<disp-formula id="pone.0129281.e025">
<alternatives>
<graphic xlink:href="pone.0129281.e025.jpg" id="pone.0129281.e025g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M25">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>J</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>K</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mi>e</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>D</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:msub>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(17)</label>
</disp-formula>
and the task-space forgetting factor is defined similarly to
<xref ref-type="disp-formula" rid="pone.0129281.e022">Eq (14)</xref>
, below:
<disp-formula id="pone.0129281.e026">
<alternatives>
<graphic xlink:href="pone.0129281.e026.jpg" id="pone.0129281.e026g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M26">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>γ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo form="prefix">exp</mml:mo>
<mml:mo>(</mml:mo>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:msubsup>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>.</mml:mo>
<mml:mn>1</mml:mn>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msubsup>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi>
<mml:mn>2</mml:mn>
</mml:msubsup>
</mml:mrow>
</mml:mfrac>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mn>0</mml:mn>
<mml:mo><</mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(18)</label>
</disp-formula>
</p>
</sec>
<sec id="sec009">
<title>Hybrid Controller</title>
<p>The combination of the basic controller of
<xref ref-type="disp-formula" rid="pone.0129281.e014">Eq (7)</xref>
, the joint space controller of
<xref ref-type="disp-formula" rid="pone.0129281.e017">Eq (10)</xref>
and the task space controller of
<xref ref-type="disp-formula" rid="pone.0129281.e025">Eq (17)</xref>
yields the
<italic>hybrid controller</italic>
, and therefore the input torque
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
<disp-formula id="pone.0129281.e027">
<alternatives>
<graphic xlink:href="pone.0129281.e027.jpg" id="pone.0129281.e027g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M27">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>r</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mo>Ω</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(19)</label>
</disp-formula>
where Ω ∈ ℜ
<sup>
<italic>n</italic>
×
<italic>n</italic>
</sup>
is a weighting matrix, designed such that the joint torque feedback is limited to certain joints, dependent on the required task. Assuming an accurate dynamic model of the robot is available, the torques due to disturbance
<italic>τ</italic>
<sub>
<italic>dist</italic>
</sub>
are given as
<disp-formula id="pone.0129281.e028">
<alternatives>
<graphic xlink:href="pone.0129281.e028.jpg" id="pone.0129281.e028g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M28">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mi>M</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>¨</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi>C</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>,</mml:mo>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:mi>G</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(20)</label>
</disp-formula>
i.e. the modeled system torques
<italic>minus</italic>
the input torque. By normalising this vector of torques to the maximum element, the weighting matrix Ω can be formed:
<disp-formula id="pone.0129281.e029">
<alternatives>
<graphic xlink:href="pone.0129281.e029.jpg" id="pone.0129281.e029g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M29">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mo>Ω</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>s</mml:mi>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:munder>
<mml:mo movablelimits="false" form="prefix">max</mml:mo>
<mml:mrow>
<mml:mn>1</mml:mn>
<mml:mo></mml:mo>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:munder>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>i</mml:mi>
<mml:mi>s</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mfrac>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mo>Ω</mml:mo>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo></mml:mo>
<mml:mi>j</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(21)</label>
</disp-formula>
which is then applied to
<xref ref-type="disp-formula" rid="pone.0129281.e027">Eq (19)</xref>
, so that joint-space control torque is applied primarily to those joints which are under the influence of large disturbance forces, and less to those which are not; this limits the control effort being applied unnecessarily, reducing the overall control effort that would otherwise be applied.</p>
</sec>
</sec>
<sec id="sec010">
<title>Fuzzy Inference of Control Gains</title>
<p>Traditionally, the user sets the learning parameters
<italic>Q</italic>
<sub>(⋅)</sub>
and
<italic>α</italic>
<sub>(⋅)</sub>
based on experience of how the system responds at run-time, in order to ensure good control performance. Here, expert knowledge of the system is distilled into a fuzzy inference engine to tune the gains online, so that no prior user experience is required. An improvement in performance is also expected, as the system will pick appropriate gain values depending on the system response to unpredictable disturbances. Inferences are made according to the magnitudes of the tracking error and control effort, which we want to minimise, and also give a good indication of overall performance of the controller.</p>
<p>There are several steps required for fuzzy inference of an output
<italic>Y</italic>
. First,
<italic>fuzzification</italic>
maps a real scalar value (for example, temperature) into fuzzy space; this is achieved using
<italic>membership functions</italic>
. Let
<italic>X</italic>
be a space of points, with elements
<italic>x</italic>
<italic>X</italic>
[
<xref rid="pone.0129281.ref031" ref-type="bibr">31</xref>
]. A fuzzy set
<italic>A</italic>
in
<italic>X</italic>
is described by a membership function
<italic>μ</italic>
<sub>
<italic>A</italic>
</sub>
(
<italic>x</italic>
) associating a grade of membership
<italic>μ</italic>
<sub>
<italic>A</italic>
</sub>
(
<italic>x</italic>
<sub>
<italic>i</italic>
</sub>
) in the interval [0, 1] to each point
<italic>x</italic>
in
<italic>A</italic>
.</p>
<p>In this paper we use simple triangular membership functions, which have low sensitivity to change in input and are computationally inexpensive [
<xref rid="pone.0129281.ref032" ref-type="bibr">32</xref>
]. Additionally, from [
<xref rid="pone.0129281.ref032" ref-type="bibr">32</xref>
], all membership functions are set so that the
<italic>completeness</italic>
<italic>ϵ</italic>
of all fuzzy sets is 0.5; this reduces uncertainty by eliminating areas in the universe of discourse with low degrees of truth, and also ensures reasonable overshoot, as described in [
<xref rid="pone.0129281.ref033" ref-type="bibr">33</xref>
].</p>
<p>Several definitions are required. A
<italic>union</italic>
, which corresponds to the connective OR, of two sets
<italic>A</italic>
and
<italic>B</italic>
is a fuzzy set
<italic>C</italic>
<disp-formula id="pone.0129281.e030">
<alternatives>
<graphic xlink:href="pone.0129281.e030.jpg" id="pone.0129281.e030g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M30">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>A</mml:mi>
<mml:mo></mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>;</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext>max</mml:mtext>
<mml:mo>[</mml:mo>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>A</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>B</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mi>x</mml:mi>
<mml:mo></mml:mo>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(22)</label>
</disp-formula>
An
<italic>intersection</italic>
, which corresponds to connective AND, can similarly be described:
<disp-formula id="pone.0129281.e031">
<alternatives>
<graphic xlink:href="pone.0129281.e031.jpg" id="pone.0129281.e031g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M31">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>C</mml:mi>
<mml:mo>=</mml:mo>
<mml:mi>A</mml:mi>
<mml:mo></mml:mo>
<mml:mi>B</mml:mi>
<mml:mo>;</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>C</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo>[</mml:mo>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>A</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>B</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>]</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="0.222222em"></mml:mspace>
<mml:mi>x</mml:mi>
<mml:mo></mml:mo>
<mml:mi>X</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(23)</label>
</disp-formula>
The Cartesian product can be used to describe a relation between two or more fuzzy sets; let
<italic>A</italic>
be a set in universe
<italic>X</italic>
and
<italic>B</italic>
a set in universe
<italic>Y</italic>
[
<xref rid="pone.0129281.ref034" ref-type="bibr">34</xref>
]. The
<italic>Cartesian product</italic>
of
<italic>A</italic>
and
<italic>B</italic>
will result in a relation
<disp-formula id="pone.0129281.e032">
<alternatives>
<graphic xlink:href="pone.0129281.e032.jpg" id="pone.0129281.e032g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M32">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>R</mml:mi>
<mml:mo></mml:mo>
<mml:mi>A</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi>B</mml:mi>
<mml:mo></mml:mo>
<mml:mi>X</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi>Y</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(24)</label>
</disp-formula>
where the fuzzy relation
<italic>R</italic>
has a membership function
<disp-formula id="pone.0129281.e033">
<alternatives>
<graphic xlink:href="pone.0129281.e033.jpg" id="pone.0129281.e033g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M33">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>R</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mrow>
<mml:mi>A</mml:mi>
<mml:mo>×</mml:mo>
<mml:mi>B</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mtext>min</mml:mtext>
<mml:mo>[</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>A</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>A</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>]</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(25)</label>
</disp-formula>
This is used in the Mamdani min-implication, to relate an input set to an output set, i.e. IF
<italic>x</italic>
is
<italic>A</italic>
THEN
<italic>y</italic>
is
<italic>B</italic>
. A rule set is then used to implicate the output, which is max-aggregated for all rules [
<xref rid="pone.0129281.ref025" ref-type="bibr">25</xref>
]. Defuzzification is then performed, using the common centroid method [
<xref rid="pone.0129281.ref035" ref-type="bibr">35</xref>
]. The defuzzified value
<italic>y</italic>
* is calculated using
<disp-formula id="pone.0129281.e034">
<alternatives>
<graphic xlink:href="pone.0129281.e034.jpg" id="pone.0129281.e034g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M34">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>B</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mi>y</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>μ</mml:mi>
<mml:mi>B</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>y</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(26)</label>
</disp-formula>
which computes the centre of mass of the aggregated output membership function, and relates the
<italic>μ</italic>
value back to a crisp output.</p>
<p>The raw inputs to our fuzzy systems are the joint-space tracking error and effort,
<italic>ɛ</italic>
<sub>
<italic>j</italic>
</sub>
,
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
and similarly, in task-space,
<italic>ɛ</italic>
<sub>
<italic>x</italic>
</sub>
,
<italic>F</italic>
<sub>
<italic>u</italic>
</sub>
. Before fuzzification can be performed, the inputs must be normalised so that the same inference engine is generic and is not dependent on the input magnitude. A baseline average of tracking errors
<inline-formula id="pone.0129281.e035">
<alternatives>
<graphic xlink:href="pone.0129281.e035.jpg" id="pone.0129281.e035g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M35">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e036">
<alternatives>
<graphic xlink:href="pone.0129281.e036.jpg" id="pone.0129281.e036g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M36">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mn>6</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
, input torque
<inline-formula id="pone.0129281.e037">
<alternatives>
<graphic xlink:href="pone.0129281.e037.jpg" id="pone.0129281.e037g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M37">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mi>n</mml:mi>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
and input force
<inline-formula id="pone.0129281.e038">
<alternatives>
<graphic xlink:href="pone.0129281.e038.jpg" id="pone.0129281.e038g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M38">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo></mml:mo>
<mml:mn>6</mml:mn>
</mml:msup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
are calculated for each degree of freedom over the total simulation time per time step
<inline-formula id="pone.0129281.e039">
<alternatives>
<graphic xlink:href="pone.0129281.e039.jpg" id="pone.0129281.e039g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M39">
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
:
<disp-formula id="pone.0129281.e040">
<alternatives>
<graphic xlink:href="pone.0129281.e040.jpg" id="pone.0129281.e040g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M40">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mfrac>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
</mml:mrow>
</mml:mfrac>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(27)</label>
</disp-formula>
These are then used to calculate the inputs to the fuzzy system, i.e. values which give an indication of performance compared to the previous iteration:
<disp-formula id="pone.0129281.e041">
<alternatives>
<graphic xlink:href="pone.0129281.e041.jpg" id="pone.0129281.e041g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M41">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mi>σ</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mi>σ</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ε</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mi>σ</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>τ</mml:mi>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mfrac>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mrow>
<mml:mi>σ</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo>|</mml:mo>
</mml:mrow>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mrow>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>|</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo>^</mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mfrac>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(28)</label>
</disp-formula>
For all inputs to our fuzzy systems, a value less than
<italic>σ</italic>
indicates an improvement and values greater than
<italic>σ</italic>
indicate that performance is worse. Here we set
<italic>σ</italic>
= 0.5, so that the input range is roughly between 0 and 1. There is no upper limit to the variables generated in
<xref ref-type="disp-formula" rid="pone.0129281.e041">Eq (28)</xref>
, so any input above unity returns a maximum truth value in the ‘high’ classification. This allows a generic set of input membership functions to be applied to all systems.</p>
<p>These normalised variables are then used in the adaptive laws Eqs (
<xref ref-type="disp-formula" rid="pone.0129281.e020">12</xref>
), (
<xref ref-type="disp-formula" rid="pone.0129281.e022">14</xref>
), (
<xref ref-type="disp-formula" rid="pone.0129281.e024">16</xref>
) and (
<xref ref-type="disp-formula" rid="pone.0129281.e026">18</xref>
) as
<inline-formula id="pone.0129281.e042">
<alternatives>
<graphic xlink:href="pone.0129281.e042.jpg" id="pone.0129281.e042g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M42">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e043">
<alternatives>
<graphic xlink:href="pone.0129281.e043.jpg" id="pone.0129281.e043g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M43">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e044">
<alternatives>
<graphic xlink:href="pone.0129281.e044.jpg" id="pone.0129281.e044g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M44">
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>D</mml:mi>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e045">
<alternatives>
<graphic xlink:href="pone.0129281.e045.jpg" id="pone.0129281.e045g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M45">
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
for the joint-space controller, and correspondingly for the task-space controller.</p>
<p>The rules for fuzzy inference of the control gains are set using expert knowledge. In general: IF control effort is too high THEN gain is set low; IF tracking error is poor THEN gain is set high, as shown in
<xref ref-type="table" rid="pone.0129281.t002">Table 2</xref>
for
<italic>Q</italic>
<sub>(⋅)</sub>
. The truth table for the forgetting factor gain (
<xref ref-type="table" rid="pone.0129281.t003">Table 3</xref>
) is slightly different, in that
<italic>α</italic>
is required to be
<italic>larger</italic>
when tracking error is improved. Note that
<italic>Q</italic>
<sub>(⋅)</sub>
and
<italic>α</italic>
, the outputs of the fuzzy inference system, are bounded:
<disp-formula id="pone.0129281.e046">
<alternatives>
<graphic xlink:href="pone.0129281.e046.jpg" id="pone.0129281.e046g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M46">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mn>0</mml:mn>
<mml:mo><</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo>)</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mo>·</mml:mo>
<mml:mo>)</mml:mo>
<mml:mi>i</mml:mi>
<mml:mi>i</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mn>0</mml:mn>
<mml:mo><</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>α</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(29)</label>
</disp-formula>
where the maximum values are set according to previous trials performed without application of the fuzzy system.</p>
<table-wrap id="pone.0129281.t002" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.t002</object-id>
<label>Table 2</label>
<caption>
<title>Truth table for inference of output
<italic>Q</italic>
<sub>(⋅)</sub>
based on fuzzy memberships of
<inline-formula id="pone.0129281.e047">
<alternatives>
<graphic id="pone.0129281.e047g" xlink:href="pone.0129281.e047"></graphic>
<mml:math id="M47">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e048">
<alternatives>
<graphic id="pone.0129281.e048g" xlink:href="pone.0129281.e048"></graphic>
<mml:math id="M48">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
.</title>
</caption>
<alternatives>
<graphic id="pone.0129281.t002g" xlink:href="pone.0129281.t002"></graphic>
<table frame="box" rules="all" border="0">
<colgroup span="1">
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead>
<tr>
<th align="center" colspan="5" rowspan="1">
<bold>Input</bold>
</th>
<th align="center" colspan="2" rowspan="1">
<bold>Output</bold>
</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>1</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e049">
<alternatives>
<graphic id="pone.0129281.e049g" xlink:href="pone.0129281.e049"></graphic>
<mml:math id="M49">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo><</mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>Q</italic>
<sub>(⋅)</sub>
<italic>low</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>2</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e050">
<alternatives>
<graphic id="pone.0129281.e050g" xlink:href="pone.0129281.e050"></graphic>
<mml:math id="M50">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e051">
<alternatives>
<graphic id="pone.0129281.e051g" xlink:href="pone.0129281.e051"></graphic>
<mml:math id="M51">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo><</mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>Q</italic>
<sub>(⋅)</sub>
<italic>low</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>3</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e052">
<alternatives>
<graphic id="pone.0129281.e052g" xlink:href="pone.0129281.e052"></graphic>
<mml:math id="M52">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>Q</italic>
<sub>(⋅)</sub>
<italic>medium</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>4</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e053">
<alternatives>
<graphic id="pone.0129281.e053g" xlink:href="pone.0129281.e053"></graphic>
<mml:math id="M53">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e054">
<alternatives>
<graphic id="pone.0129281.e054g" xlink:href="pone.0129281.e054"></graphic>
<mml:math id="M54">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>Q</italic>
<sub>(⋅)</sub>
<italic>high</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>5</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e055">
<alternatives>
<graphic id="pone.0129281.e055g" xlink:href="pone.0129281.e055"></graphic>
<mml:math id="M55">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>Q</italic>
<sub>(⋅)</sub>
<italic>medium</italic>
</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<table-wrap id="pone.0129281.t003" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.t003</object-id>
<label>Table 3</label>
<caption>
<title>Truth tables for inference of output
<italic>α</italic>
<sub>(⋅)</sub>
based on fuzzy memberships of
<inline-formula id="pone.0129281.e056">
<alternatives>
<graphic id="pone.0129281.e056g" xlink:href="pone.0129281.e056"></graphic>
<mml:math id="M56">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>j</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>x</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e057">
<alternatives>
<graphic id="pone.0129281.e057g" xlink:href="pone.0129281.e057"></graphic>
<mml:math id="M57">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:msub>
<mml:mi>u</mml:mi>
<mml:mi>i</mml:mi>
</mml:msub>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
.</title>
</caption>
<alternatives>
<graphic id="pone.0129281.t003g" xlink:href="pone.0129281.t003"></graphic>
<table frame="box" rules="all" border="0">
<colgroup span="1">
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
<col align="left" valign="top" span="1"></col>
</colgroup>
<thead>
<tr>
<th align="center" colspan="5" rowspan="1">
<bold>Input</bold>
</th>
<th align="center" colspan="2" rowspan="1">
<bold>Output</bold>
</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>1</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e058">
<alternatives>
<graphic id="pone.0129281.e058g" xlink:href="pone.0129281.e058"></graphic>
<mml:math id="M58">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo><</mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e059">
<alternatives>
<graphic id="pone.0129281.e059g" xlink:href="pone.0129281.e059"></graphic>
<mml:math id="M59">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo><</mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>medium</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>2</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e060">
<alternatives>
<graphic id="pone.0129281.e060g" xlink:href="pone.0129281.e060"></graphic>
<mml:math id="M60">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>high</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>3</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e061">
<alternatives>
<graphic id="pone.0129281.e061g" xlink:href="pone.0129281.e061"></graphic>
<mml:math id="M61">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e062">
<alternatives>
<graphic id="pone.0129281.e062g" xlink:href="pone.0129281.e062"></graphic>
<mml:math id="M62">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>medium</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>4</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e063">
<alternatives>
<graphic id="pone.0129281.e063g" xlink:href="pone.0129281.e063"></graphic>
<mml:math id="M63">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>high</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>5</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e064">
<alternatives>
<graphic id="pone.0129281.e064g" xlink:href="pone.0129281.e064"></graphic>
<mml:math id="M64">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mo>></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e065">
<alternatives>
<graphic id="pone.0129281.e065g" xlink:href="pone.0129281.e065"></graphic>
<mml:math id="M65">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>low</italic>
</td>
</tr>
<tr>
<td align="left" rowspan="1" colspan="1">
<italic>R</italic>
<sub>6</sub>
:</td>
<td align="left" rowspan="1" colspan="1">
<bold>IF</bold>
</td>
<td align="left" rowspan="1" colspan="1"></td>
<td align="left" rowspan="1" colspan="1">and</td>
<td align="left" rowspan="1" colspan="1">
<inline-formula id="pone.0129281.e066">
<alternatives>
<graphic id="pone.0129281.e066g" xlink:href="pone.0129281.e066"></graphic>
<mml:math id="M66">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mo>></mml:mo>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
</td>
<td align="left" rowspan="1" colspan="1">
<bold>THEN</bold>
</td>
<td align="left" rowspan="1" colspan="1">
<italic>α</italic>
<italic>medium</italic>
</td>
</tr>
</tbody>
</table>
</alternatives>
</table-wrap>
<p>How changes in control effort and tracking error affect the
<italic>Q</italic>
<sub>(⋅)</sub>
gains is shown in
<xref ref-type="fig" rid="pone.0129281.g004">Fig 4(a)</xref>
. It can be seen that in general: gain increases when tracking error is high and control effort is low, and minimal gain occurs when tracking error is low and control effort is high. The surface of fuzzy inference of
<italic>α</italic>
is shown in
<xref ref-type="fig" rid="pone.0129281.g004">Fig 4(b)</xref>
where it can be seen that the forgetting factor will be at its greatest when tracking error is low and control effort is high.</p>
<fig id="pone.0129281.g004" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g004</object-id>
<label>Fig 4</label>
<caption>
<title>Surface plots showing rule surfaces.</title>
<p>(a): adaptation gain
<italic>Q</italic>
<sub>
<italic>Dx</italic>
</sub>
, and (b): value of
<italic>α</italic>
<sub>
<italic>x</italic>
</sub>
, based on inputs
<inline-formula id="pone.0129281.e067">
<alternatives>
<graphic id="pone.0129281.e067g" xlink:href="pone.0129281.e067"></graphic>
<mml:math id="M67">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>ɛ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>x</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
and
<inline-formula id="pone.0129281.e068">
<alternatives>
<graphic id="pone.0129281.e068g" xlink:href="pone.0129281.e068"></graphic>
<mml:math id="M68">
<mml:mrow>
<mml:msub>
<mml:mover accent="true">
<mml:mi>F</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mi>u</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
described in
<xref ref-type="disp-formula" rid="pone.0129281.e041">Eq (28)</xref>
. Task-space gains are characterised by a similar surface.</p>
</caption>
<graphic xlink:href="pone.0129281.g004"></graphic>
</fig>
</sec>
<sec id="sec011">
<title>Stability</title>
<p>The stability of the controller in joint space and convergence to a small bounded set were shown in [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
], and the proof for the Cartesian space controller is similar. However, here the diagonal adaptation gain matrices
<italic>Q</italic>
<sub>(⋅)</sub>
are time varying, which must be taken into account. From [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
] Appendix C, the difference in energy of the system
<italic>δV</italic>
(
<italic>k</italic>
) =
<italic>δV</italic>
<sub>
<italic>p</italic>
</sub>
(
<italic>t</italic>
)+
<italic>δV</italic>
<sub>
<italic>c</italic>
</sub>
(
<italic>t</italic>
) is shown to converge to zero. No change to the derivation of the first part
<italic>δV</italic>
<sub>
<italic>p</italic>
</sub>
(
<italic>t</italic>
) is needed here, so that section of the proof still holds. A change is made in comparison to [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
], equations (39–41) where
<inline-formula id="pone.0129281.e069">
<alternatives>
<graphic xlink:href="pone.0129281.e069.jpg" id="pone.0129281.e069g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M69">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo></mml:mo>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
is replaced with
<inline-formula id="pone.0129281.e070">
<alternatives>
<graphic xlink:href="pone.0129281.e070.jpg" id="pone.0129281.e070g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M70">
<mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mo></mml:mo>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
so that
<disp-formula id="pone.0129281.e071">
<alternatives>
<graphic xlink:href="pone.0129281.e071.jpg" id="pone.0129281.e071g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M71">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>V</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn>
</mml:mfrac>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>{</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mtext>tr</mml:mtext>
<mml:mo>(</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
<mml:mtd>
<mml:mo>+</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mtext>tr</mml:mtext>
<mml:mo>(</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
<mml:mtd>
<mml:mo>+</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>τ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msubsup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mi>τ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>}</mml:mo>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(30)</label>
</disp-formula>
Defining a new variable
<italic>δQ</italic>
≡ diag[I ⊗
<italic>δQ</italic>
<sub>
<italic>K</italic>
</sub>
, I ⊗
<italic>δQ</italic>
<sub>
<italic>D</italic>
</sub>
, I ⊗
<italic>δQ</italic>
<sub>
<italic>τ</italic>
</sub>
] (where ⊗ is the Kronecker product) allows us to add another term to the end of [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
](44), producing
<disp-formula id="pone.0129281.e072">
<alternatives>
<graphic xlink:href="pone.0129281.e072.jpg" id="pone.0129281.e072g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M72">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msub>
<mml:mi>V</mml:mi>
<mml:mi>c</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
<mml:mtd>
<mml:mo>=</mml:mo>
</mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mn>2</mml:mn>
</mml:mfrac>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:mi>δ</mml:mi>
<mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>σ</mml:mi>
<mml:mo>-</mml:mo>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:mi>γ</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>Φ</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
<mml:mtd></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>+</mml:mo>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mi>ε</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>e</mml:mi>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mi>ε</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>e</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msup>
<mml:mi>ε</mml:mi>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>σ</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
<mml:mtr>
<mml:mtd></mml:mtd>
<mml:mtd></mml:mtd>
<mml:mtd columnalign="left">
<mml:mrow>
<mml:mo>+</mml:mo>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:mi>t</mml:mi>
<mml:mo>-</mml:mo>
<mml:mi>δ</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>δ</mml:mi>
<mml:msup>
<mml:mi>Q</mml:mi>
<mml:mrow>
<mml:mo>-</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>σ</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>σ</mml:mi>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(31)</label>
</disp-formula>
The term inside the last integrand can be described by
<inline-formula id="pone.0129281.e073">
<alternatives>
<graphic xlink:href="pone.0129281.e073.jpg" id="pone.0129281.e073g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M73">
<mml:mrow>
<mml:msub>
<mml:mi>ɛ</mml:mi>
<mml:mi>Q</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
where
<disp-formula id="pone.0129281.e074">
<alternatives>
<graphic xlink:href="pone.0129281.e074.jpg" id="pone.0129281.e074g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M74">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>Q</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:mtext>tr</mml:mtext>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>K</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo>)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>Q</mml:mi>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mo movablelimits="true" form="prefix">max</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>K</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:mo>,</mml:mo>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(32)</label>
</disp-formula>
given that
<inline-formula id="pone.0129281.e075">
<alternatives>
<graphic xlink:href="pone.0129281.e075.jpg" id="pone.0129281.e075g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M75">
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msubsup>
<mml:mo>Φ</mml:mo>
<mml:mi>K</mml:mi>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>ɛ</mml:mi>
<mml:mi>K</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>K</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
,
<inline-formula id="pone.0129281.e076">
<alternatives>
<graphic xlink:href="pone.0129281.e076.jpg" id="pone.0129281.e076g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M76">
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msubsup>
<mml:mo>Φ</mml:mo>
<mml:mi>D</mml:mi>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>ɛ</mml:mi>
<mml:mi>D</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>D</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
and
<inline-formula id="pone.0129281.e077">
<alternatives>
<graphic xlink:href="pone.0129281.e077.jpg" id="pone.0129281.e077g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M77">
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:msubsup>
<mml:mo>Φ</mml:mo>
<mml:mi>τ</mml:mi>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:msub>
<mml:mi>ɛ</mml:mi>
<mml:mi>τ</mml:mi>
</mml:msub>
<mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mover accent="true">
<mml:mi>τ</mml:mi>
<mml:mo>˜</mml:mo>
</mml:mover>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
, where
<italic>ɛ</italic>
<sub>
<italic>K</italic>
,
<italic>D</italic>
,
<italic>τ</italic>
</sub>
are defined as the minimum eigenvalues of
<inline-formula id="pone.0129281.e078">
<alternatives>
<graphic xlink:href="pone.0129281.e078.jpg" id="pone.0129281.e078g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M78">
<mml:mrow>
<mml:msubsup>
<mml:mo>Φ</mml:mo>
<mml:mrow>
<mml:mi>K</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>D</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>τ</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
</mml:msubsup>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
. This can then be added to the condition in [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
](46) which gives the inequality
<disp-formula id="pone.0129281.e079">
<alternatives>
<graphic xlink:href="pone.0129281.e079.jpg" id="pone.0129281.e079g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M79">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>δ</mml:mi>
<mml:mi>V</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo></mml:mo>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>λ</mml:mi>
<mml:mi>L</mml:mi>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mi>ε</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mover accent="true">
<mml:mi>γ</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:mrow>
<mml:mi>m</mml:mi>
<mml:mi>a</mml:mi>
<mml:mi>x</mml:mi>
</mml:mrow>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi>γ</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo>Φ</mml:mo>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo></mml:mo>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>λ</mml:mi>
<mml:mi>L</mml:mi>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mi>ε</mml:mi>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mover accent="true">
<mml:mi>γ</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mn>2</mml:mn>
</mml:msup>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi>γ</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo></mml:mo>
<mml:mover accent="true">
<mml:mo>Φ</mml:mo>
<mml:mo>˜</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mrow>
<mml:mo></mml:mo>
<mml:msup>
<mml:mo>Φ</mml:mo>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo></mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mo></mml:mo>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mn>0</mml:mn>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(33)</label>
</disp-formula>
where
<italic>γ</italic>
′ =
<italic>Q</italic>
<sup>−1</sup>
<italic>γ</italic>
, and
<inline-formula id="pone.0129281.e080">
<alternatives>
<graphic xlink:href="pone.0129281.e080.jpg" id="pone.0129281.e080g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M80">
<mml:mrow>
<mml:mover accent="true">
<mml:mi>γ</mml:mi>
<mml:mo></mml:mo>
</mml:mover>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>γ</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>ɛ</mml:mi>
<mml:mi>Q</mml:mi>
</mml:msub>
</mml:mrow>
</mml:math>
</alternatives>
</inline-formula>
. This is a sufficient condition to prove stability, following the details in appendix C of [
<xref rid="pone.0129281.ref009" ref-type="bibr">9</xref>
], and given that
<italic>Q</italic>
(
<italic>t</italic>
) is bounded by the output of fuzzy inference stipulated in
<xref ref-type="disp-formula" rid="pone.0129281.e046">Eq (29)</xref>
.</p>
</sec>
</sec>
<sec id="sec012">
<title>Simulations</title>
<p>The task consisted of tracking a smooth minimal jerk trajectory along the
<italic>y</italic>
coordinate defined as:
<disp-formula id="pone.0129281.e081">
<alternatives>
<graphic xlink:href="pone.0129281.e081.jpg" id="pone.0129281.e081g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M81">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:mo stretchy="false">(</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>T</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>-</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mn>10</mml:mn>
<mml:msup>
<mml:mover accent="true">
<mml:mi>t</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:mn>3</mml:mn>
</mml:msup>
<mml:mo>-</mml:mo>
<mml:mn>15</mml:mn>
<mml:msup>
<mml:mover accent="true">
<mml:mi>t</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:mn>4</mml:mn>
</mml:msup>
<mml:mo>+</mml:mo>
<mml:mn>6</mml:mn>
<mml:msup>
<mml:mover accent="true">
<mml:mi>t</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:mn>5</mml:mn>
</mml:msup>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:mover accent="true">
<mml:mi>t</mml:mi>
<mml:mo>¯</mml:mo>
</mml:mover>
<mml:mo></mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mn>2</mml:mn>
<mml:mi>t</mml:mi>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:mfrac>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(34)</label>
</disp-formula>
where
<italic>T</italic>
is the movement duration. Joint-space angular velocity is computed using the pseudo inverse
<italic>J</italic>
<sup></sup>
(
<italic>q</italic>
) ≡
<italic>J</italic>
<sup>
<italic>T</italic>
</sup>
(
<italic>JJ</italic>
<sup>
<italic>T</italic>
</sup>
)
<sup>−1</sup>
of the Jacobian, through
<disp-formula id="pone.0129281.e082">
<alternatives>
<graphic xlink:href="pone.0129281.e082.jpg" id="pone.0129281.e082g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M82">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>=</mml:mo>
<mml:msup>
<mml:mi>J</mml:mi>
<mml:mo></mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>q</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msup>
<mml:mrow>
<mml:mo>[</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:msup>
<mml:mi>y</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>]</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mo>,</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(35)</label>
</disp-formula>
from which the position and acceleration can be found respectively using
<disp-formula id="pone.0129281.e083">
<alternatives>
<graphic xlink:href="pone.0129281.e083.jpg" id="pone.0129281.e083g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M83">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:msup>
<mml:mi>q</mml:mi>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo></mml:mo>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mn>0</mml:mn>
<mml:mi>t</mml:mi>
</mml:msubsup>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>t</mml:mi>
<mml:mspace width="0.166667em"></mml:mspace>
<mml:mo>,</mml:mo>
<mml:mspace width="1.em"></mml:mspace>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>¨</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mo></mml:mo>
<mml:mfrac>
<mml:mi>d</mml:mi>
<mml:mrow>
<mml:mi>d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mfrac>
<mml:mo>(</mml:mo>
<mml:msup>
<mml:mover accent="true">
<mml:mi>q</mml:mi>
<mml:mo>˙</mml:mo>
</mml:mover>
<mml:mo>*</mml:mo>
</mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>)</mml:mo>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(36)</label>
</disp-formula>
Simulations of the proposed task and controller were performed using MATLAB with a kinematic and dynamic Baxter robot rigid joint model, implemented using Peter Corke’s Robotics Toolbox [
<xref rid="pone.0129281.ref036" ref-type="bibr">36</xref>
,
<xref rid="pone.0129281.ref037" ref-type="bibr">37</xref>
]. To test the controller under continuous different conditions, the two disturbance forces
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
and
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
were introduced in different phases:
<list list-type="bullet">
<list-item>
<p>Phase I: No disturbance;</p>
</list-item>
<list-item>
<p>Phase II:
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
only;</p>
</list-item>
<list-item>
<p>Phase III:
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
only;</p>
</list-item>
<list-item>
<p>Phase IV:
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
and
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
.</p>
</list-item>
</list>
</p>
<p>Performance was analysed in each phase, to observe the controller’s reaction to different perturbations. It was expected that joint-space control would improve rejection of
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
, and task-space control to reject disturbance caused by
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
; the order of phases was set so that the adaptation progress would be easier for readers to understand. A performance index,
<italic>η</italic>
, was calculated from the integral of the product of input force
<italic>F</italic>
<sub>
<italic>u</italic>
</sub>
and task-space tracking error
<italic>ɛ</italic>
<sub>
<italic>x</italic>
</sub>
:
<disp-formula id="pone.0129281.e084">
<alternatives>
<graphic xlink:href="pone.0129281.e084.jpg" id="pone.0129281.e084g" mimetype="image" position="anchor" orientation="portrait"></graphic>
<mml:math id="M84">
<mml:mtable displaystyle="true">
<mml:mtr>
<mml:mtd columnalign="right">
<mml:mrow>
<mml:mi>η</mml:mi>
<mml:mo>=</mml:mo>
<mml:msubsup>
<mml:mo></mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>s</mml:mi>
</mml:msub>
</mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mi>f</mml:mi>
</mml:msub>
</mml:msubsup>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:msup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>T</mml:mi>
</mml:msup>
<mml:mi>Q</mml:mi>
<mml:msub>
<mml:mi>F</mml:mi>
<mml:mi>u</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mo>+</mml:mo>
<mml:msubsup>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
<mml:mi>T</mml:mi>
</mml:msubsup>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mi>R</mml:mi>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:msub>
<mml:mi>ε</mml:mi>
<mml:mi>x</mml:mi>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mi>t</mml:mi>
<mml:mo>)</mml:mo>
</mml:mrow>
<mml:mspace width="0.277778em"></mml:mspace>
<mml:mi mathvariant="normal">d</mml:mi>
<mml:mi>t</mml:mi>
</mml:mrow>
</mml:mtd>
</mml:mtr>
</mml:mtable>
</mml:math>
</alternatives>
<label>(37)</label>
</disp-formula>
where
<italic>Q</italic>
,
<italic>R</italic>
∈ ℜ
<sup>6×6</sup>
are positive diagonal scaling matrices, and
<italic>t</italic>
<sub>
<italic>s</italic>
</sub>
and
<italic>t</italic>
<sub>
<italic>f</italic>
</sub>
were set to obtain
<italic>η</italic>
for each phase of the simulation. A small performance index
<italic>η</italic>
corresponds to small tracking error and control effort, and thus indicates good performance.</p>
</sec>
<sec sec-type="results" id="sec013">
<title>Results</title>
<sec id="sec014">
<title>Hybrid Control</title>
<p>Performance of the hybrid controller
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
(
<italic>t</italic>
) =
<italic>τ</italic>
<sub>
<italic>r</italic>
</sub>
(
<italic>t</italic>
)+
<italic>τ</italic>
<sub>
<italic>x</italic>
</sub>
(
<italic>t</italic>
)+Ω
<italic>τ</italic>
<sub>
<italic>j</italic>
</sub>
(
<italic>t</italic>
) was compared against the controller in joint-space only, when
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
(
<italic>t</italic>
) =
<italic>τ</italic>
<sub>
<italic>r</italic>
</sub>
(
<italic>t</italic>
)+
<italic>τ</italic>
<sub>
<italic>j</italic>
</sub>
(
<italic>t</italic>
), and in task-space only, where
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
(
<italic>t</italic>
) =
<italic>τ</italic>
<sub>
<italic>r</italic>
</sub>
(
<italic>t</italic>
)+
<italic>τ</italic>
<sub>
<italic>x</italic>
</sub>
(
<italic>t</italic>
). Disturbance parameters remain the same in each case; for
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
(
<italic>t</italic>
) defined in
<xref ref-type="disp-formula" rid="pone.0129281.e008">Eq (2)</xref>
,
<italic>p</italic>
= 20 sin(2
<italic>π</italic>
50
<italic>t</italic>
), and for
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
(
<italic>t</italic>
) from
<xref ref-type="disp-formula" rid="pone.0129281.e011">Eq (4)</xref>
the parameters are
<italic>r</italic>
= 100 sin(2
<italic>π</italic>
0.1042
<italic>t</italic>
). The trajectory period and travel distance were set to 4.8s and 0.2m respectively. Each simulation phase corresponds to one completion of the trajectory of
<xref ref-type="disp-formula" rid="pone.0129281.e081">Eq (34)</xref>
.</p>
<p>The Cartesian tracking error
<italic>ɛ</italic>
<sub>
<italic>x</italic>
</sub>
in
<xref ref-type="fig" rid="pone.0129281.g005">Fig 5(a)</xref>
for all three control schemes shows how task-space performs better when a tool-type disturbance is applied, but suffers when a large disturbance is applied away from the end-effector. In this case, joint-space control was able to more effectively reduce tracking error. When combined in the hybrid controller, tracking error was reduced further. From
<xref ref-type="fig" rid="pone.0129281.g005">Fig 5(b)</xref>
it can be noted that there was little difference in the overall amount of control effort being applied between the three methods. The measures of tracking error and control effort were combined to form the performance index
<italic>η</italic>
for each phase, shown in
<xref ref-type="fig" rid="pone.0129281.g005">Fig 5(c)</xref>
. A clear difference could be seen in the performances of the task-space and joint-space controllers between phases II and III, where the disturbance type was switched from
<italic>F</italic>
<sub>
<italic>task</italic>
</sub>
to
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
; task-space control was better at handling the former, and joint-space the latter. The hybrid controller showed a slight improvement over joint-space in phase II but exhibited an improvement over its component parts in phases III and IV. Considering ||
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
|| was similar for all three, as seen in
<xref ref-type="fig" rid="pone.0129281.g005">Fig 5(b)</xref>
, this suggests that the hybrid control was applying control in a more targeted fashion, i.e. only applying additional feedback to the joints which require it.</p>
<fig id="pone.0129281.g005" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g005</object-id>
<label>Fig 5</label>
<caption>
<title>Comparison of controllers performance.</title>
<p>(a): In the first phase (0 <
<italic>t</italic>
< 4.8) little difference can be observed in tracking error for the three controllers. In phase II task-space has the lowest error, and joint space the highest, with the hybrid control in between, as expected due to the disturbance type. In the next two phases (9.6 <
<italic>t</italic>
< 19.2) task-space control produces the highest error, while the hybrid controller shows a much lower tracking error than its component parts. (b): Examining the input torques
<italic>τ</italic>
<sub>
<italic>u</italic>
</sub>
little difference can be seen between the three control schemes. (c): The performance index
<italic>η</italic>
in each phase demonstrates the limitations of each control type under different disturbance conditions. In particular task-space control performance is degraded in phases III, IV where joint-space is superior. Hybrid control shows improved performance over both.</p>
</caption>
<graphic xlink:href="pone.0129281.g005"></graphic>
</fig>
<p>By examining the evolution of feed-forward torque in
<xref ref-type="fig" rid="pone.0129281.g006">Fig 6(a)</xref>
we see how in phases III and IV large increases were made to compensate for the low frequency
<italic>F</italic>
<sub>
<italic>envt</italic>
</sub>
disturbance, predominantly in the first joint (the rotation of which is aligned with the x-y plane). Comparing the magnitude of feed-forward torque between controllers it is clear that joint-space control generated much higher torques, while hybrid control torques were much lower and less weighted towards joint 1.</p>
<fig id="pone.0129281.g006" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g006</object-id>
<label>Fig 6</label>
<caption>
<title>Learned feed-forward torque and stiffness.</title>
<p>In (a) we can see how the feedforward torque increases in the last two phases to compensate for the low frequency disturbance. (b) Comparison of stiffness geometry represented by ellipses in the
<italic>x</italic>
and
<italic>y</italic>
planes, of midpoint of phases I—II, for each controller. Note for task-space and hybrid control the ellipse is elongated primarily in the
<italic>x</italic>
-axis corresponding to the perturbation direction.</p>
</caption>
<graphic xlink:href="pone.0129281.g006"></graphic>
</fig>
<p>Cartesian stiffness ellipses are shown in
<xref ref-type="fig" rid="pone.0129281.g006">Fig 6(b)</xref>
; In task-space and hybrid control, it can be observed how the stiffness changed from a slight orientation in the
<italic>y</italic>
-direction (due to the trajectory moving along this axis) to a much larger ellipse predominantly in the
<italic>x</italic>
-axis: aligned with the direction of disturbance. Joint-space control, however, produced ellipses less-aligned with the direction of disturbance. This shows that feedback torque is being applied inefficiently in this case.</p>
</sec>
<sec id="sec015">
<title>Fuzzy Inference of Control Gains</title>
<p>The effectiveness of the fuzzy inference of control gains
<italic>Q</italic>
<sub>(⋅)</sub>
and
<italic>α</italic>
was tested through implementation on the hybrid controller, and compared against results obtained in the previous section (where control gains are fixed). Base-line averages described in
<xref ref-type="disp-formula" rid="pone.0129281.e041">Eq (28)</xref>
and upper limits of adaptation gains were calculated from data collected running the hybrid controller in the previous experiment, which were then used as the input to the fuzzy engines affecting the adaptive laws.</p>
<p>By examining
<xref ref-type="fig" rid="pone.0129281.g007">Fig 7(a)</xref>
we can see that there was an improvement in tracking error in phase II, but not so much in other phases, where it is similar to previous results. However, by comparing the results with
<xref ref-type="fig" rid="pone.0129281.g007">Fig 7(b)</xref>
we can see that although control torque was not reduced in the first two phases, there was a significant reduction in the last two; this demonstrates not only that the online tuning is able to reduce tracking error when control effort is already minimal, but also reduces the control effort required to maintain good tracking. This is reflected in
<xref ref-type="fig" rid="pone.0129281.g007">Fig 7(c)</xref>
which shows in all disturbance phases that the aggregate performance index score was improved by tuning the learning parameters online.</p>
<fig id="pone.0129281.g007" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g007</object-id>
<label>Fig 7</label>
<caption>
<title>Performance from fuzzy tuning of learning parameters.</title>
<p>In (a), tracking error for the hybrid controller (green) is compared to the same controller with fuzzy tuning of adaptive parameters (purple). (b): Comparison of input control torques for the two control schemes. (c): Performance indices calculated for each phase, showing an improvement for all phases where disturbance is present.</p>
</caption>
<graphic xlink:href="pone.0129281.g007"></graphic>
</fig>
<p>In Fig
<xref ref-type="fig" rid="pone.0129281.g008">8(a)</xref>
and
<xref ref-type="fig" rid="pone.0129281.g008">8(b)</xref>
the feed-forward torques of the proximal joints are compared. We can see that the fuzzy tuning had a much higher response amplitude, although the shape has remained the same. Compared with Fig
<xref ref-type="fig" rid="pone.0129281.g008">8(c)</xref>
and
<xref ref-type="fig" rid="pone.0129281.g008">8(d)</xref>
the stiffness ellipse displays a reduced magnitude with fuzzy tuning. This suggests that the online-tuned controller increased feed-forward torque while sacrificing stiffness to reduce the control effort observed in
<xref ref-type="fig" rid="pone.0129281.g005">Fig 5(b)</xref>
, although the geometry of the ellipse was maintained in the direction of disturbance.</p>
<fig id="pone.0129281.g008" orientation="portrait" position="float">
<object-id pub-id-type="doi">10.1371/journal.pone.0129281.g008</object-id>
<label>Fig 8</label>
<caption>
<title>Force and impedance with and without fuzzy inference.</title>
<p>(a), (b): The shape of evolution through time is similar between the two controllers; however, the fuzzy hybrid controller applies a larger feed-forward torque. (c), (d): Ellipses are for the hybrid controller have a higher magnitude than the same controller with fuzzy parameter tuning; note that scaling in the fuzzy tuning case is ×0.02 scaled. Ellipses in the second phase are elongated in the direction of disturbance.</p>
</caption>
<graphic xlink:href="pone.0129281.g008"></graphic>
</fig>
</sec>
</sec>
<sec sec-type="conclusions" id="sec016">
<title>Conclusions</title>
<p>This paper investigated the ideas of combining joint-space and task-space feedback control to create a hybrid controller, and of online fuzzy tuning of learning parameters.</p>
<p>The controller was based on a bio-inspired design, which has been shown to acquire stable and successful performance with minimal effort. The controller was implemented on a dynamic model of the redundant Baxter robot arm. The results show that the hybrid controller displays reductions in tracking error of around 26% and 16% on average for the task and joint-space controllers respectively, with only a 6% maximum increase in control effort. Thus, demonstrating the hybrid controller is able to benefit from both joint-space and Cartesian-based control, providing robustness against disturbances occurring at the end-effector or any point along the arm.</p>
<p>The results further show how fuzzy inference can be used to set the learning parameters automatically, instead of the normal practice of setting them manually. The simulation results demonstrate an average 24% reduction in control effort and 15% improvement in overall performance with this fuzzy meta-learning than with fixed learning parameters, as well as avoiding the need for trial testing to select optimum values for adaptation gains. We also note that the method used to normalise inputs to the fuzzy system may enable iterative performance improvement, as the performance of the current iteration is compared against the previous, and the fuzzy system seeks to reduce tracking error and control effort as much as possible.</p>
</sec>
</body>
<back>
<ref-list>
<title>References</title>
<ref id="pone.0129281.ref001">
<label>1</label>
<mixed-citation publication-type="journal">
<name>
<surname>Peshkin</surname>
<given-names>MA</given-names>
</name>
,
<name>
<surname>Colgate</surname>
<given-names>JE</given-names>
</name>
,
<name>
<surname>Wannasuphoprasit</surname>
<given-names>W</given-names>
</name>
,
<name>
<surname>Moore</surname>
<given-names>CA</given-names>
</name>
,
<name>
<surname>Gillespie</surname>
<given-names>RB</given-names>
</name>
,
<name>
<surname>Akella</surname>
<given-names>P</given-names>
</name>
.
<article-title>Cobot architecture</article-title>
.
<source>Robotics and Automation, IEEE Transactions on</source>
.
<year>2001</year>
;
<volume>17</volume>
(
<issue>4</issue>
):
<fpage>377</fpage>
<lpage>390</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/70.954751">10.1109/70.954751</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref002">
<label>2</label>
<mixed-citation publication-type="journal">
<name>
<surname>Lambercy</surname>
<given-names>O</given-names>
</name>
,
<name>
<surname>Dovat</surname>
<given-names>L</given-names>
</name>
,
<name>
<surname>Gassert</surname>
<given-names>R</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
,
<name>
<surname>Teo</surname>
<given-names>CL</given-names>
</name>
,
<name>
<surname>Milner</surname>
<given-names>T</given-names>
</name>
.
<article-title>A haptic knob for rehabilitation of hand function</article-title>
.
<source>Neural Systems and Rehabilitation Engineering, IEEE Transactions on</source>
.
<year>2007</year>
;
<volume>15</volume>
(
<issue>3</issue>
):
<fpage>356</fpage>
<lpage>366</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TNSRE.2007.903913">10.1109/TNSRE.2007.903913</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref003">
<label>3</label>
<mixed-citation publication-type="other">Hogan N. Impedance control: An approach to manipulation. In: American Control Conference, 1984. IEEE; 1984. p. 304–313.</mixed-citation>
</ref>
<ref id="pone.0129281.ref004">
<label>4</label>
<mixed-citation publication-type="journal">
<name>
<surname>Cheng</surname>
<given-names>L</given-names>
</name>
,
<name>
<surname>Lin</surname>
<given-names>Y</given-names>
</name>
,
<name>
<surname>Hou</surname>
<given-names>ZG</given-names>
</name>
,
<name>
<surname>Tan</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Huang</surname>
<given-names>J</given-names>
</name>
,
<name>
<surname>Zhang</surname>
<given-names>W</given-names>
</name>
.
<article-title>Adaptive tracking control of hybrid machines: a closed-chain five-bar mechanism case</article-title>
.
<source>Mechatronics, IEEE/ASME Transactions on</source>
.
<year>2011</year>
;
<volume>16</volume>
(
<issue>6</issue>
):
<fpage>1155</fpage>
<lpage>1163</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TMECH.2010.2083680">10.1109/TMECH.2010.2083680</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref005">
<label>5</label>
<mixed-citation publication-type="journal">
<name>
<surname>Li</surname>
<given-names>Z</given-names>
</name>
,
<name>
<surname>Yang</surname>
<given-names>C</given-names>
</name>
,
<name>
<surname>Ding</surname>
<given-names>N</given-names>
</name>
,
<name>
<surname>Bogdan</surname>
<given-names>S</given-names>
</name>
,
<name>
<surname>Ge</surname>
<given-names>T</given-names>
</name>
.
<article-title>Robust adaptive motion control for underwater remotely operated vehicles with velocity constraints</article-title>
.
<source>International Journal of Control, Automation and Systems</source>
.
<year>2012</year>
;
<volume>10</volume>
(
<issue>2</issue>
):
<fpage>421</fpage>
<lpage>429</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1007/s12555-012-0222-y">10.1007/s12555-012-0222-y</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref006">
<label>6</label>
<mixed-citation publication-type="journal">
<name>
<surname>Li</surname>
<given-names>Z</given-names>
</name>
,
<name>
<surname>Yang</surname>
<given-names>C</given-names>
</name>
,
<name>
<surname>Tang</surname>
<given-names>Y</given-names>
</name>
.
<article-title>Decentralised adaptive fuzzy control of coordinated multiple mobile manipulators interacting with non-rigid environments</article-title>
.
<source>IET Control Theory & Applications</source>
.
<year>2013</year>
;
<volume>7</volume>
(
<issue>3</issue>
):
<fpage>397</fpage>
<lpage>410</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1049/iet-cta.2011.0334">10.1049/iet-cta.2011.0334</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref007">
<label>7</label>
<mixed-citation publication-type="other">Kelly R, Carelli R, Amestegui M, Ortega R. On adaptive impedance control of robot manipulators. In: Robotics and Automation, 1989. Proceedings., 1989 IEEE International Conference on. IEEE; 1989. p. 572–577.</mixed-citation>
</ref>
<ref id="pone.0129281.ref008">
<label>8</label>
<mixed-citation publication-type="journal">
<name>
<surname>Colbaugh</surname>
<given-names>R</given-names>
</name>
,
<name>
<surname>Seraji</surname>
<given-names>H</given-names>
</name>
,
<name>
<surname>Glass</surname>
<given-names>K</given-names>
</name>
.
<article-title>Direct adaptive impedance control of robot manipulators</article-title>
.
<source>Journal of Robotic Systems</source>
.
<year>1993</year>
;
<volume>10</volume>
(
<issue>2</issue>
):
<fpage>217</fpage>
<lpage>248</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1002/rob.4620100205">10.1002/rob.4620100205</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref009">
<label>9</label>
<mixed-citation publication-type="journal">
<name>
<surname>Yang</surname>
<given-names>C</given-names>
</name>
,
<name>
<surname>Ganesh</surname>
<given-names>G</given-names>
</name>
,
<name>
<surname>Haddadin</surname>
<given-names>S</given-names>
</name>
,
<name>
<surname>Parusel</surname>
<given-names>S</given-names>
</name>
,
<name>
<surname>Albu-Schäeffer</surname>
<given-names>A</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
.
<article-title>Human-Like Adaptation of Force and Impedance in Stable and Unstable Interactions</article-title>
.
<source>IEEE Transactions on Robotics</source>
.
<year>2011</year>
;
<volume>27</volume>
(
<issue>5</issue>
):
<fpage>918</fpage>
<lpage>930</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TRO.2011.2158251">10.1109/TRO.2011.2158251</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref010">
<label>10</label>
<mixed-citation publication-type="other">Ganesh G, Jarrassé N, Haddadin S, Albu-Schaeffer A, Burdet E. A versatile biomimetic controller for contact tooling and haptic exploration. In: Robotics and Automation (ICRA), 2012 IEEE International Conference on. IEEE; 2012. p. 3329–3334.</mixed-citation>
</ref>
<ref id="pone.0129281.ref011">
<label>11</label>
<mixed-citation publication-type="journal">
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
,
<name>
<surname>Osu</surname>
<given-names>R</given-names>
</name>
,
<name>
<surname>Franklin</surname>
<given-names>DW</given-names>
</name>
,
<name>
<surname>Milner</surname>
<given-names>TE</given-names>
</name>
,
<name>
<surname>Kawato</surname>
<given-names>M</given-names>
</name>
.
<article-title>The central nervous system stabilizes unstable dynamics by learning optimal impedance</article-title>
.
<source>Nature</source>
.
<year>2001</year>
;
<volume>414</volume>
(
<issue>6862</issue>
):
<fpage>446</fpage>
<lpage>449</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1038/35106566">10.1038/35106566</ext-link>
</comment>
<pub-id pub-id-type="pmid">11719805</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref012">
<label>12</label>
<mixed-citation publication-type="journal">
<name>
<surname>Franklin</surname>
<given-names>DW</given-names>
</name>
,
<name>
<surname>Osu</surname>
<given-names>R</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
,
<name>
<surname>Kawato</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Milner</surname>
<given-names>TE</given-names>
</name>
.
<article-title>Adaptation to stable and unstable dynamics achieved by combined impedance control and inverse dynamics model</article-title>
.
<source>Journal of Neurophysiology</source>
.
<year>2003</year>
;
<volume>90</volume>
(
<issue>5</issue>
):
<fpage>3270</fpage>
<lpage>3282</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1152/jn.01112.2002">10.1152/jn.01112.2002</ext-link>
</comment>
<pub-id pub-id-type="pmid">14615432</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref013">
<label>13</label>
<mixed-citation publication-type="journal">
<name>
<surname>Franklin</surname>
<given-names>DW</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
,
<name>
<surname>Tee</surname>
<given-names>KP</given-names>
</name>
,
<name>
<surname>Osu</surname>
<given-names>R</given-names>
</name>
,
<name>
<surname>Chew</surname>
<given-names>CM</given-names>
</name>
,
<name>
<surname>Milner</surname>
<given-names>TE</given-names>
</name>
,
<etal>et al</etal>
<article-title>CNS learns stable, accurate, and efficient movements using a simple algorithm</article-title>
.
<source>The Journal of Neuroscience</source>
.
<year>2008</year>
;
<volume>28</volume>
(
<issue>44</issue>
):
<fpage>11165</fpage>
<lpage>11173</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1523/JNEUROSCI.3099-08.2008">10.1523/JNEUROSCI.3099-08.2008</ext-link>
</comment>
<pub-id pub-id-type="pmid">18971459</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref014">
<label>14</label>
<mixed-citation publication-type="journal">
<name>
<surname>Tee</surname>
<given-names>KP</given-names>
</name>
,
<name>
<surname>Franklin</surname>
<given-names>DW</given-names>
</name>
,
<name>
<surname>Kawato</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Milner</surname>
<given-names>TE</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
.
<article-title>Concurrent adaptation of force and impedance in the redundant muscle system</article-title>
.
<source>Biological cybernetics</source>
.
<year>2010</year>
;
<volume>102</volume>
(
<issue>1</issue>
):
<fpage>31</fpage>
<lpage>44</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1007/s00422-009-0348-z">10.1007/s00422-009-0348-z</ext-link>
</comment>
<pub-id pub-id-type="pmid">19936778</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref015">
<label>15</label>
<mixed-citation publication-type="other">Ganesh G, Albu-Schaffer A, Haruno M, Kawato M, Burdet E. Biomimetic motor behavior for simultaneous adaptation of force, impedance and trajectory in interaction tasks. In: Robotics and Automation (ICRA), 2010 IEEE International Conference on. IEEE; 2010. p. 2705–2711.</mixed-citation>
</ref>
<ref id="pone.0129281.ref016">
<label>16</label>
<mixed-citation publication-type="journal">
<name>
<surname>Mahyuddin</surname>
<given-names>MN</given-names>
</name>
,
<name>
<surname>Khan</surname>
<given-names>SG</given-names>
</name>
,
<name>
<surname>Herrmann</surname>
<given-names>G</given-names>
</name>
.
<article-title>A novel robust adaptive control algorithm with finite-time online parameter estimation of a humanoid robot arm</article-title>
.
<source>Robotics and Autonomous Systems</source>
.
<year>2014</year>
;
<volume>62</volume>
(
<issue>3</issue>
):
<fpage>294</fpage>
<lpage>305</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1016/j.robot.2013.09.013">10.1016/j.robot.2013.09.013</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref017">
<label>17</label>
<mixed-citation publication-type="journal">
<name>
<surname>Khan</surname>
<given-names>SG</given-names>
</name>
,
<name>
<surname>Herrmann</surname>
<given-names>G</given-names>
</name>
,
<name>
<surname>Lenz</surname>
<given-names>A</given-names>
</name>
,
<name>
<surname>Al Grafi</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Pipe</surname>
<given-names>T</given-names>
</name>
,
<name>
<surname>Melhuish</surname>
<given-names>C</given-names>
</name>
.
<article-title>Compliance Control and Human–Robot Interaction: Part IIExperimental Examples</article-title>
.
<source>International Journal of Humanoid Robotics</source>
.
<year>2014</year>
;
<volume>11</volume>
(
<issue>03</issue>
).
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1142/S0219843614300025">10.1142/S0219843614300025</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref018">
<label>18</label>
<mixed-citation publication-type="journal">
<name>
<surname>Wang</surname>
<given-names>W</given-names>
</name>
,
<name>
<surname>Loh</surname>
<given-names>RN</given-names>
</name>
,
<name>
<surname>Gu</surname>
<given-names>EY</given-names>
</name>
.
<article-title>Passive compliance versus active compliance in robot-based automated assembly systems</article-title>
.
<source>Industrial Robot: An International Journal</source>
.
<year>1998</year>
;
<volume>25</volume>
(
<issue>1</issue>
):
<fpage>48</fpage>
<lpage>57</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1108/01439919810196964">10.1108/01439919810196964</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref019">
<label>19</label>
<mixed-citation publication-type="journal">
<name>
<surname>Ganesh</surname>
<given-names>G</given-names>
</name>
,
<name>
<surname>Haruno</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Kawato</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Burdet</surname>
<given-names>E</given-names>
</name>
.
<article-title>Motor memory and local minimization of error and effort, not global optimization, determine motor behavior</article-title>
.
<source>Journal of Neurophysiology</source>
.
<year>2010</year>
;
<volume>104</volume>
(
<issue>1</issue>
):
<fpage>382</fpage>
<lpage>390</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1152/jn.01058.2009">10.1152/jn.01058.2009</ext-link>
</comment>
<pub-id pub-id-type="pmid">20484533</pub-id>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref020">
<label>20</label>
<mixed-citation publication-type="other">Smith A, Yang C, Ma H, Culverhouse P, Cangelosi A, Burdet E. Biomimetic joint/task space hybrid adaptive control for bimanual robotic manipulation. In: Control & Automation (ICCA), 11th IEEE International Conference on. IEEE; 2014. p. 1013–1018.</mixed-citation>
</ref>
<ref id="pone.0129281.ref021">
<label>21</label>
<mixed-citation publication-type="other">Smith A, Yang C, Ma H, Culverhouse P, Cangelosi A, Burdet E. Dual adaptive control of bimanual manipulation with online fuzzy parameter tuning. In: Intelligent Control (ISIC), 2014 IEEE International Symposium on. IEEE; 2014. p. 560–565.</mixed-citation>
</ref>
<ref id="pone.0129281.ref022">
<label>22</label>
<mixed-citation publication-type="journal">
<name>
<surname>Cheng</surname>
<given-names>L</given-names>
</name>
,
<name>
<surname>Hou</surname>
<given-names>ZG</given-names>
</name>
,
<name>
<surname>Tan</surname>
<given-names>M</given-names>
</name>
.
<article-title>Adaptive neural network tracking control for manipulators with uncertain kinematics, dynamics and actuator model</article-title>
.
<source>Automatica</source>
.
<year>2009</year>
;
<volume>45</volume>
(
<issue>10</issue>
):
<fpage>2312</fpage>
<lpage>2318</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1016/j.automatica.2009.06.007">10.1016/j.automatica.2009.06.007</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref023">
<label>23</label>
<mixed-citation publication-type="journal">
<name>
<surname>Cheng</surname>
<given-names>L</given-names>
</name>
,
<name>
<surname>Hou</surname>
<given-names>ZG</given-names>
</name>
,
<name>
<surname>Tan</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Zhang</surname>
<given-names>WJ</given-names>
</name>
.
<article-title>Tracking control of a closed-chain five-bar robot with two degrees of freedom by integration of an approximation-based approach and mechanical design</article-title>
.
<source>Systems, Man, and Cybernetics, Part B: Cybernetics, IEEE Transactions on</source>
.
<year>2012</year>
;
<volume>42</volume>
(
<issue>5</issue>
):
<fpage>1470</fpage>
<lpage>1479</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TSMCB.2012.2192270">10.1109/TSMCB.2012.2192270</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref024">
<label>24</label>
<mixed-citation publication-type="journal">
<name>
<surname>Zadeh</surname>
<given-names>LA</given-names>
</name>
.
<article-title>Fuzzy Logic</article-title>
.
<source>Computer</source>
.
<year>1988</year>
;
<volume>21</volume>
(
<issue>4</issue>
):
<fpage>83</fpage>
<lpage>93</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/2.53">10.1109/2.53</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref025">
<label>25</label>
<mixed-citation publication-type="journal">
<name>
<surname>Mamdani</surname>
<given-names>EH</given-names>
</name>
,
<name>
<surname>Assilian</surname>
<given-names>S</given-names>
</name>
.
<article-title>An experiment in linguistic synthesis with a fuzzy logic controller</article-title>
.
<source>International journal of man-machine studies</source>
.
<year>1975</year>
;
<volume>7</volume>
(
<issue>1</issue>
):
<fpage>1</fpage>
<lpage>13</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1016/S0020-7373(75)80002-2">10.1016/S0020-7373(75)80002-2</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref026">
<label>26</label>
<mixed-citation publication-type="book">
<name>
<surname>Tanaka</surname>
<given-names>K</given-names>
</name>
.
<source>An introduction to fuzzy logic for practical applications</source>
.
<publisher-name>Springer</publisher-name>
;
<year>1997</year>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref027">
<label>27</label>
<mixed-citation publication-type="book">
<name>
<surname>Mamdani</surname>
<given-names>EH</given-names>
</name>
.
<chapter-title>Application of fuzzy algorithms for control of simple dynamic plant</chapter-title>
In:
<source>Proceedings of the Institution of Electrical Engineers</source>
.
<volume>vol. 121</volume>
<publisher-name>IET</publisher-name>
;
<year>1974</year>
p.
<fpage>1585</fpage>
<lpage>1588</lpage>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref028">
<label>28</label>
<mixed-citation publication-type="journal">
<name>
<surname>Li</surname>
<given-names>H</given-names>
</name>
,
<name>
<surname>Yu</surname>
<given-names>J</given-names>
</name>
,
<name>
<surname>Hilton</surname>
<given-names>C</given-names>
</name>
,
<name>
<surname>Liu</surname>
<given-names>H</given-names>
</name>
.
<article-title>Adaptive sliding-mode control for nonlinear active suspension vehicle systems using T-S fuzzy approach</article-title>
.
<source>Industrial Electronics, IEEE Transactions on</source>
.
<year>2013</year>
;
<volume>60</volume>
(
<issue>8</issue>
):
<fpage>3328</fpage>
<lpage>3338</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TIE.2012.2202354">10.1109/TIE.2012.2202354</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref029">
<label>29</label>
<mixed-citation publication-type="journal">
<name>
<surname>Tan</surname>
<given-names>J</given-names>
</name>
,
<name>
<surname>Ju</surname>
<given-names>Z</given-names>
</name>
,
<name>
<surname>Hand</surname>
<given-names>S</given-names>
</name>
,
<name>
<surname>Liu</surname>
<given-names>H</given-names>
</name>
.
<article-title>Robot navigation and manipulation control based-on fuzzy spatial relation analysis</article-title>
.
<source>International Journal of Fuzzy Systems</source>
.
<year>2011</year>
;
<volume>13</volume>
(
<issue>4</issue>
):
<fpage>292</fpage>
<lpage>301</lpage>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref030">
<label>30</label>
<mixed-citation publication-type="book">
<name>
<surname>Woodson</surname>
<given-names>WE</given-names>
</name>
,
<name>
<surname>Tillman</surname>
<given-names>B</given-names>
</name>
,
<name>
<surname>Tillman</surname>
<given-names>P</given-names>
</name>
.
<source>Human factors design handbook: information and guidelines for the design of systems, facilities, equipment, and products for human use</source>
.
<publisher-name>McGraw-Hill</publisher-name>
;
<year>1992</year>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref031">
<label>31</label>
<mixed-citation publication-type="journal">
<name>
<surname>Zadeh</surname>
<given-names>LA</given-names>
</name>
.
<article-title>Fuzzy Sets</article-title>
.
<source>Information and Control</source>
.
<year>1965</year>
;
<volume>8</volume>
(
<issue>3</issue>
):
<fpage>338</fpage>
<lpage>353</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1016/S0019-9958(65)90241-X">10.1016/S0019-9958(65)90241-X</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref032">
<label>32</label>
<mixed-citation publication-type="book">
<name>
<surname>Bouchon-Meunier</surname>
<given-names>B</given-names>
</name>
,
<name>
<surname>Dotoli</surname>
<given-names>M</given-names>
</name>
,
<name>
<surname>Maione</surname>
<given-names>B</given-names>
</name>
.
<chapter-title>On the choice of membership functions in a mamdani-type fuzzy controller</chapter-title>
In:
<source>Proceedings of the First Online Workshop on Soft Computing</source>
,
<publisher-loc>Nagoya, Japan</publisher-loc>
<publisher-name>Citeseer</publisher-name>
;
<year>1996</year>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref033">
<label>33</label>
<mixed-citation publication-type="journal">
<name>
<surname>Mizumoto</surname>
<given-names>M</given-names>
</name>
.
<article-title>Fuzzy controls under various fuzzy reasoning methods</article-title>
.
<source>Information Sciences</source>
.
<year>1988</year>
;
<volume>45</volume>
(
<issue>2</issue>
):
<fpage>129</fpage>
<lpage>151</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1016/0020-0255(88)90037-0">10.1016/0020-0255(88)90037-0</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref034">
<label>34</label>
<mixed-citation publication-type="book">
<name>
<surname>Ross</surname>
<given-names>TJ</given-names>
</name>
.
<chapter-title>Fuzzy logic with engineering applications</chapter-title>
<source>John Wiley & Sons</source>
;
<year>2009</year>
.</mixed-citation>
</ref>
<ref id="pone.0129281.ref035">
<label>35</label>
<mixed-citation publication-type="journal">
<name>
<surname>Takagi</surname>
<given-names>T</given-names>
</name>
,
<name>
<surname>Sugeno</surname>
<given-names>M</given-names>
</name>
.
<article-title>Fuzzy identification of systems and its applications to modeling and control</article-title>
.
<source>Systems, Man and Cybernetics, IEEE Transactions on</source>
.
<year>1985</year>
;
<volume>15</volume>
(
<issue>1</issue>
):
<fpage>116</fpage>
<lpage>132</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/TSMC.1985.6313399">10.1109/TSMC.1985.6313399</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref036">
<label>36</label>
<mixed-citation publication-type="journal">
<name>
<surname>Corke</surname>
<given-names>PI</given-names>
</name>
.
<article-title>A robotics toolbox for MATLAB</article-title>
.
<source>Robotics & Automation Magazine, IEEE</source>
.
<year>1996</year>
;
<volume>3</volume>
(
<issue>1</issue>
):
<fpage>24</fpage>
<lpage>32</lpage>
.
<comment>doi:
<ext-link ext-link-type="uri" xlink:href="http://dx.doi.org/10.1109/100.486658">10.1109/100.486658</ext-link>
</comment>
</mixed-citation>
</ref>
<ref id="pone.0129281.ref037">
<label>37</label>
<mixed-citation publication-type="other">Ju Z, Yang C, Ma H. Kinematic Modeling and Experimental Verification of Baxter Robot. In: Proceedings of the 33rd Chinese Control Conference Nanjing, China, 28–30 Jul, 2014. CCC; 2014. p. 8518–8523.</mixed-citation>
</ref>
</ref-list>
</back>
</pmc>
<affiliations>
<list>
<country>
<li>Royaume-Uni</li>
<li>République populaire de Chine</li>
</country>
<region>
<li>Angleterre</li>
<li>Grand Londres</li>
<li>Guangdong</li>
</region>
<settlement>
<li>Jiangmen</li>
<li>Londres</li>
<li>Pékin</li>
</settlement>
</list>
<tree>
<country name="Royaume-Uni">
<noRegion>
<name sortKey="Smith, Alex M C" sort="Smith, Alex M C" uniqKey="Smith A" first="Alex M. C." last="Smith">Alex M. C. Smith</name>
</noRegion>
<name sortKey="Burdet, Etienne" sort="Burdet, Etienne" uniqKey="Burdet E" first="Etienne" last="Burdet">Etienne Burdet</name>
<name sortKey="Cangelosi, Angelo" sort="Cangelosi, Angelo" uniqKey="Cangelosi A" first="Angelo" last="Cangelosi">Angelo Cangelosi</name>
<name sortKey="Culverhouse, Phil" sort="Culverhouse, Phil" uniqKey="Culverhouse P" first="Phil" last="Culverhouse">Phil Culverhouse</name>
<name sortKey="Yang, Chenguang" sort="Yang, Chenguang" uniqKey="Yang C" first="Chenguang" last="Yang">Chenguang Yang</name>
</country>
<country name="République populaire de Chine">
<region name="Guangdong">
<name sortKey="Yang, Chenguang" sort="Yang, Chenguang" uniqKey="Yang C" first="Chenguang" last="Yang">Chenguang Yang</name>
</region>
<name sortKey="Ma, Hongbin" sort="Ma, Hongbin" uniqKey="Ma H" first="Hongbin" last="Ma">Hongbin Ma</name>
<name sortKey="Ma, Hongbin" sort="Ma, Hongbin" uniqKey="Ma H" first="Hongbin" last="Ma">Hongbin Ma</name>
</country>
</tree>
</affiliations>
</record>

Pour manipuler ce document sous Unix (Dilib)

EXPLOR_STEP=$WICRI_ROOT/Ticri/CIDE/explor/HapticV1/Data/Pmc/Checkpoint
HfdSelect -h $EXPLOR_STEP/biblio.hfd -nk 000430 | SxmlIndent | more

Ou

HfdSelect -h $EXPLOR_AREA/Data/Pmc/Checkpoint/biblio.hfd -nk 000430 | SxmlIndent | more

Pour mettre un lien sur cette page dans le réseau Wicri

{{Explor lien
   |wiki=    Ticri/CIDE
   |area=    HapticV1
   |flux=    Pmc
   |étape=   Checkpoint
   |type=    RBID
   |clé=     PMC:4452518
   |texte=   Novel Hybrid Adaptive Controller for Manipulation in Complex Perturbation Environments
}}

Pour générer des pages wiki

HfdIndexSelect -h $EXPLOR_AREA/Data/Pmc/Checkpoint/RBID.i   -Sk "pubmed:26029916" \
       | HfdSelect -Kh $EXPLOR_AREA/Data/Pmc/Checkpoint/biblio.hfd   \
       | NlmPubMed2Wicri -a HapticV1 

Wicri

This area was generated with Dilib version V0.6.23.
Data generation: Mon Jun 13 01:09:46 2016. Site generation: Wed Mar 6 09:54:07 2024