High dynamics parallel mechanisms: contributions to force ...

High dynamics parallel mechanisms: contributions to force ... High dynamics parallel mechanisms: contributions to force ...

dimec.unige.it
from dimec.unige.it More from this publisher
13.07.2015 Views

High dynamicsparallel mechanisms:contributions to forcetransmission andsingularity analysisMatteo ZoppiPh.D. ThesisThe University of Genoa — Faculty of EngineeringDIMEC – Dept. of Mechanics and Machine DesignPMAR Lab – RobotDesign Research Group

<strong>High</strong> <strong>dynamics</strong><strong>parallel</strong> <strong>mechanisms</strong>:<strong>contributions</strong> <strong>to</strong> <strong>force</strong>transmission andsingularity analysisMatteo ZoppiPh.D. ThesisThe University of Genoa — Faculty of EngineeringDIMEC – Dept. of Mechanics and Machine DesignPMAR Lab – RobotDesign Research Group


Cover: ArmillEye: wire frame mathematical mock-up. The end-effec<strong>to</strong>r constraint wrenches. Front and rear.


Università di GenovaFacoltà di IngegneriaTesi di Dot<strong>to</strong>ra<strong>to</strong>in Meccanica e Costruzione delle MacchineMeccanismi <strong>parallel</strong>i per operazioni inelevata dinamica: contributi alle analisidi singolarità e di trasmissione di forzaMatteo Zoppin ◦ MCM0402Dipartimen<strong>to</strong> di Meccanica e Costruzione delle MacchineVia all’Opera Pia 15A, 16145, Genova, ITALIAMarzo 2004


Università degli studî di GenovaDot<strong>to</strong>ra<strong>to</strong> di Ricerca in Meccanica e Costruzione delle MacchineXVI cicloDipartimen<strong>to</strong> di Meccanica e Costruzione delle MacchineDIMECVia all’Opera Pia 15A16145, GenovaITALIAPh.D. Thesis in Mechanics and Machine Designn o MCM0402Submitted by: Matteo Zoppizoppi@dimec.unige.itDate of submission: March 2004Title: <strong>High</strong> <strong>dynamics</strong> <strong>parallel</strong><strong>mechanisms</strong>: <strong>contributions</strong> <strong>to</strong> <strong>force</strong>transmission and singularity analysisAdvisor:Rezia MolfinoDIMEC, Università di GenovaExternal referees:Clément GosselinUnivérsité Laval, Québec, CanadaDimiter ZlatanovUniversity of Innsbruck, Innsbruck, Austria


The University of GenoaFaculty of EngineeringPh.D. Thesisin Mechanics and Machine Design<strong>High</strong> <strong>dynamics</strong> <strong>parallel</strong><strong>mechanisms</strong>: <strong>contributions</strong> <strong>to</strong> <strong>force</strong>transmission and singularity analysisMatteo Zoppin ◦ MCM0402Department of Mechanics and Machine DesignVia all’Opera Pia 15A, 16145, Genoa, ITALYMarch 2004


c○2004 - Matteo ZoppiAll rights reserved.


PrefazioneQuesta tesi raccoglie contributi nei campi della analisi di trasmissione di forza e disingolarità di meccanismi <strong>parallel</strong>i per robotica, e presenta nuove architetture di meccanismi.I principî alla base della produzione manifatturiera sono oggi in profonda evoluzione. Inuovi criterî guida sono, fra altri: • la modularità per una maggiore agilità che permetta diaffrontare il passaggio da produzione di massa a produzione personalizzata; • nuovi modi diimmaginare le macchine e macchine di nuova concezione per una netta riduzione del time <strong>to</strong>market; • nuovi me<strong>to</strong>di di progettazione knowledge-based per aumentare la qualità dei prodottie mirare al loro ciclo di vita. 1L’evoluzione della meccanica verso il micro e nano e verso le scienze della vita aggiunge lanecessità di risalire i confini tradizionali verso la fisica, la chimica e la biologia.Uno degli argomenti di ricerca più interessanti in robotica diviene lo sviluppo di modulia limitata mobilità – spesso tre o quattro gradi di libertà (gdl) – capaci di grandi velocità edaccelerazioni. Queste macchine ad elevata dinamica sono necessarie per la manipolazione el’assemblaggio ad altissima cadenza, per la esecuzione di lavorazioni speciali ad alta velocità eper specifiche operazioni manifatturiere.In progettazione è necessario mirare alle elevate prestazioni richieste per le specificheapplicazioni, per esempio riguardo all’indice di trasmissione, alla forma e dimensione dellospazio di lavoro, al disegno dei componenti meccanici (membri, giunti, attua<strong>to</strong>ri) e alcontrollo/accuratezza.Per ques<strong>to</strong> la progettazione deve divenire orientata alle prestazioni. 2Perché la progettazione orientata alle prestazioni sia efficace, è necessario disporre di me<strong>to</strong>die strumenti realmente efficaci di analisi di insieme dei meccanismi, che permettano di calcolaree confrontare le prestazioni operative per architetture cinematiche anche complesse e checonsentano di individuare e classificare le configurazioni singolari. 3Lo sviluppo di questi me<strong>to</strong>di e di questi strumenti ha implicazioni teoriche al di là dellameccanica tradizionale. Ecco, dunque, le radici di questa tesi, che cerca di riunire contributiteorici per la analisi di insieme di meccanismi, rivolgendosi in particolare alla localizzazione eclassificazione delle singolarità e ai loro effetti strutturali.Per ottenere risultati soddisfacenti, i me<strong>to</strong>di e gli strumenti di analisi di insieme devonosuperare le distinzioni tradizionali fra i differenti dominî della Meccanica, ed è inoltre necessarioconsiderare le conseguenze della scelta di sensori e controllo già nelle prime fasi dellaprogettazione. Lo scopo deve essere la progettazione meccatronica integrata.1 Idee recentemente discusse in occasione della conferenza: Manufuture. European Manufacturing of theFuture: role of research and education for European leadership, svoltasi in Milano, 1-2 dicembre 2003.2 per esempio, confrontare: Neugebauer et alii., Parallel Kinematics structures in manufacturing, et J-P.Merlet, The Need for a Systematic Methodology for the Evaluation and Optimal Design of Parallel Manipula<strong>to</strong>rs,memoria presentata in occasione del terzo Parallel Kinematics Seminar PKS2002, Chemnitz, Germania,2002 ; Weck, M., Staimer, D., Parallel Kinematic Machine Tools - Current State and Future Potentials, LesAnnales du CIRP 2002, Vol.51/2/2002.3 in questa direzione, per esempio: J-P. Merlet, The Need for a Systematic Methodology for the Evaluationand Optimal Design of Parallel Manipula<strong>to</strong>rs, presenta<strong>to</strong> al terzo Parallel Kinematics Seminar PKS2002,Chemnitz, Germania, 2002.


viPrefazioneImmaginiamo, per esempio, che la massima dimensione consentita ai membri di un meccanismo(determinata per analisi di collisione) impedisca la scelta di sezioni dei membri cheassicurino una sufficiente rigidezza complessiva. Sarà dunque necessario ri<strong>to</strong>rnare alla fase disintesi (che tradizionalmente non appartiene al dominio della Meccanica strutturale) propriocome sarebbe necessario in caso di insoddisfacenti caratteristiche di trasmissione di forza o peraltri problemi direttamente legati alla sintesi.Consideriamo, poi, il controllo: a seconda del tipo che si pensa di adottare, la meccanicadeve soddisfare differenti specifici requisiti. Per esempio, in caso di controllo di impedenza(e se non è richiesta una grande accuratezza, come nel caso di assemblaggio di oggetti inplastica), allora è possibile accettare giuochi ai giunti ma è necessario che gli attriti sianotrascurabili. Al contrario, in caso di controllo di posizione senza retroazione sulla posizionedel membro terminale, è necessario riprendere i giuochi ai giunti per assicurare una sufficienteaccuratezza.Tut<strong>to</strong> ques<strong>to</strong> suggerisce uno sforzo di cooperazione interdisciplinare in Meccanica e, piùoltre, verso l’ingegneria elettrica, elettronica ed informatica.La traccia di ques<strong>to</strong> sforzo di cooperazione, sebbene limita<strong>to</strong> ai contributi raccolti, è il filorosso della tesi.I primi tre capi<strong>to</strong>li presentano nuove architetture di meccanismi che soddisfano i requisitidella lavorazione meccanica e della manipolazione ad alta velocità. Il quar<strong>to</strong> e il quin<strong>to</strong> presentanome<strong>to</strong>di. La terza parte raccoglie gli algoritmi utilizzati per le analisi e per sperimentare ime<strong>to</strong>di.Il primo capi<strong>to</strong>lo discute la cinematica e le singolarità di una classe di meccanismi puramente<strong>parallel</strong>i a 4-gdl: tre rotazioni ed una traslazione. Le singolarità sono classificate, edè rivolta particolare attenzione alle configurazioni singolari senza gambe in singolarità e allesingolarità di vincolo (spesso dimenticate o non osservate).Il secondo capi<strong>to</strong>lo presenta una nuova architettura a 3-gdl: due rotazioni at<strong>to</strong>rno ad unpun<strong>to</strong> fisso alla base ed una traslazione. Mobilità e cinematica sono affrontate per geometriadel meccanismo qualsiasi e si ricava una formulazione analitica parametrica del problema diposizione diret<strong>to</strong>. Vengono poi mostrate e discusse alcune geometrie speciali; una di esse, inparticolare, con mobilità tilt/pan/zoom è impiegabile per il suppor<strong>to</strong> di un sistema di visione.In fine, si mostra una versione a 4-gdl della architettura (in vero una architettura differenteottenuta come estensione di quella a 3-gdl).Il terzo capi<strong>to</strong>lo introduce altre due nuove architetture di meccanismo: una, per lavorazionimeccaniche ad alta velocità; l’altra, mol<strong>to</strong> ridondante, per l’orientazione ad alta accelerazionedi parti di massa elevata, per esempio per celle di lavoro cooperative nelle quali il tavolo chesostiene ed orienta la parte ha un ruolo attivo nel ciclo di lavorazione. Di queste architetturesono brevemente discussi la cinematica e la mobilità ed i possibili impieghi industriali.


PrefazioneviiIl quar<strong>to</strong> capi<strong>to</strong>lo presenta un me<strong>to</strong>do non standard per la analisi di trasmissione di forzain meccanismi <strong>parallel</strong>i non ridondanti. Nei primi tre capi<strong>to</strong>li si utilizzano assi di Mozzi, iquali assicurano una rappresentazione mol<strong>to</strong> elegante della distribuzione di forze nelle catenecinematiche. L’inten<strong>to</strong> di ques<strong>to</strong> quar<strong>to</strong> capi<strong>to</strong>lo è mostrare che, soddisfatte alcune ipotesiriguardanti la mobilità, si ottengono risultati equivalenti utilizzando un me<strong>to</strong>do matriciale orienta<strong>to</strong>alle sollecitazioni dei membri del meccanismo. Naturalmente, non si vuole stabilire unaopposizione, bensì si cerca di tracciare una analogia e resta inteso che la analisi con assi diMozzi è più generale.Il quin<strong>to</strong> capi<strong>to</strong>lo tratta il problema generale rappresenta<strong>to</strong> da un sistema di due equazionialgebriche tetraedriche di secondo grado. Fondamentalmente, si tratta del problema di calcolarela posizione del quar<strong>to</strong> vertice di un tetraedro a partire dagli altri tre vertici e dalle lunghezzedegli spigoli. La soluzione è semplice ma è assai complica<strong>to</strong> ricavare delle espressioni analiticheesplicite per il suo Jacobiano e per l’Hessiano. Si fa di quest’argomen<strong>to</strong> il sogget<strong>to</strong> di un interocapi<strong>to</strong>lo, poiché nella tesi il problema ricorre, ed ogni volta la sua soluzione è un ingredientefondamentale della dinamica diretta. Un’altra ragione è che è sta<strong>to</strong> un divertimen<strong>to</strong> algebricoper l’au<strong>to</strong>re. Per non allontanarsi troppo dalla robotica, la discussione è orientata al problemadella cinematica differenziale dei meccanismi delta-like, una classe assai vasta di architetturetraslazionali la cui cinematica diretta è formalizzata proprio da un sistema di due equazionitetraedriche.La terza parte della tesi raccoglie gli algoritmi. La scelta di non commentarli estesamenteed anzi di mostrarli nella sintassi compatta del codice MAPLE, riflette un preciso inten<strong>to</strong> diconcisione.L’ampio uso di strumenti di programmazione testimonia la volontà di contribuire con me<strong>to</strong>dialgoritmici allo sviluppo di codici di analisi di insieme. Tutte le analisi cinematiche e di singolaritàpresentate nella tesi sono state sviluppate seguendo il me<strong>to</strong>do del mock-up matematico.Il mock-up matematico è un simulacro virtuale 3D del meccanismo, integralmente parametricoe fonda<strong>to</strong> su un modello matematico robus<strong>to</strong>. Ques<strong>to</strong> simulacro può essere considera<strong>to</strong> unavisualizzazione del modello e rappresenta oggetti matematici. Una libreria grafica in linguaggioMAPLE, implementata insieme al modello matematico, permette di ricavare immagini adalta risoluzione, esatte ed integralmente personalizzabili, del meccanismo e di ogni sua parte.Seguire ques<strong>to</strong> me<strong>to</strong>do di analisi è in sé un passo nella direzione della integrazione, sebbenequi ci si limiti alla cinematica, alle singolarità ed alla trasmissione di forza.Un’ultima osservazione. Gli sforzi della comunità scientifica nella direzione dello sviluppodi me<strong>to</strong>di di analisi di insieme realmente efficaci potrà dare un vigoroso contribu<strong>to</strong> alla diffusioneindustriale delle macchine <strong>parallel</strong>e, oggi del tut<strong>to</strong> in fieri sebbene esse promuovanoun vantaggioso rinnovamen<strong>to</strong> del concet<strong>to</strong> di macchina utensile o di manipolazione, e delletecniche stesse di lavoro.


Avant-proposCette thèse apporte des <strong>contributions</strong> dans les domaines de la transmission de <strong>force</strong> et del’analyse de singularité des mécanismes parallèles pour la robotique et présente de nouvellesarchitectures de mécanismes.Les principes de base de la production industrielle sont aujourd’hui en nette évolution. Lesnouveaux points de repère sont entre autres : • la modularité pour une majeure agilité quipermet d’affronter le passage de la production massive à la production personnalisée; • denouvelles façons d’imaginer les machines et des machines de nouvelle conception pour unenette réduction du délai d’arrivée sur le marché ; • de nouvelles méthodologies de conceptionknowledge-based pour augmenter la qualité et viser au cycle de vie des produits. 1Un des arguments de recherche privilégié dans le domaine de la robotique va devenir ledéveloppement des machines à mobilité réduite – souvent trois ou quatre degrés de liberté(ddl) – qui sont capables d’atteindre de grandes vitesses et de grandes accélérations. Ces machinesde grande dynamique sont nécessaires pour la manipulation et l’assemblage à grandevitesse autant que pour des usinages spéciaux à grande vitesse et d’autres opérations industrielles.Il faut faire face aux problèmes aigus de performance liés aux applications spécifiques. C’està-dire,au sujet de l’index de transmission, de la forme et de la dimension de l’espace de travail,du dessein des composants mécaniques (membres, joints, actuation) et du contrôle/précision.Pour cela, le projet doit devenir orienté aux performances. 2Pour que le projet orienté aux performance soit efficace, il faut disposer de méthodologies etd’instruments véritablement efficaces pour l’analyse d’ensemble des machines. Ces instrumentsdoivent être capables de considérer les redondances et de repérer les singularités. 3Le développement de ces méthodologies et de ces instruments a des implications théoriquesbien au-delà de la mécanique traditionelle. Voilà donc les racines de cette thèse, qui essaie deréunir des <strong>contributions</strong> théoriques pour l’analyse d’ensemble de mécanismes, avec une particulièreattention à la localisation et à la classification des singularités et à leurs conséquencesstructurelles.Pour atteindre des résultats satisfaisants, les méthodologies et les instruments d’analysed’ensemble doivent franchir la distinction traditionnelle entre les différents domaines de lamécanique. Ils doivent, en outre, considérer les différentes conséquences dues au choix dessenseurs et au contrôle. Le but doit être le projet mécatronique intégré.Imaginons, par exemple, que la dimension maximale permise aux membres d’un mécanisme1 Idées qui ont été récemment débattues lors de la conférence : Manufuture. European Manufacturing of theFuture : role of research and education for European leadership, Milan, 1-2 décembre 2003.2 par exemple, voir : Neugebauer et alii., Parallel Kinematics structures in manufacturing, et J-P. Merlet,The Need for a Systematic Methodology for the Evaluation and Optimal Design of Parallel Manipula<strong>to</strong>rs,présenté lors du troisième Parallel Kinematics Seminar PKS2002, Chemnitz, Allemagne, 2002 ; Weck, M.,Staimer, D., Parallel Kinematic Machine Tools - Current State and Future Potentials, Les Annales du CIRP2002, Vol.51/2/2002.3 sur ce chemin voir, par exemple : J-P. Merlet, The Need for a Systematic Methodology for the Evaluationand Optimal Design of Parallel Manipula<strong>to</strong>rs, présenté lors du troisième Parallel Kinematics Seminar PKS2002,Chemnitz, Allemagne, 2002.


xAvant-propos(déterminée, disons, par analyse de collision) ne permet pas de lui donner des sections quiassurent une rigidité d’ensemble suffisante. De conséquence il faudra revenir à la phase desynthèse (qui traditionnellement n’appartient pas au domaine de la mécanique structurelle),exactement comme c’est le cas pour une mauvaise transmission de <strong>force</strong> ou d’autres problèmesdirectement liés au domaine de la synthèse.Considérons, maintenant, le contrôle : selon le type que l’on pense adopter, la mécaniquedoit satisfaire différentes exigences. Par exemple, si l’on adopte un contrôle d’impédance (et siune grande précision n’est pas requise, comme dans le cas d’assemblage d’objets en plastique),alors, on peut accepter des jeux aux joints mais il faut que le frottement soit le plus petit possible.Au contraire, en cas de contrôle de position sans rétroaction sur la position de l’effecteur,il faut que les jeux aux joints soient assez petits afin d’obtenir une précision suffisante.Tout cela va suggérer un effort de liaisons entre les différents domaines de la Mécanique,autant qu’avec les chercheurs qui travaillent dans les domaines de l’ingénierie électrique etélectronique et de l’informatique.La trace de cet effort de liaison, bien qu’il soit limité aux <strong>contributions</strong> fournies, est le filrouge de la thèse.Les trois premiers chapitres présentent des nouvelles architectures de mécanismes qui satisfontles nécessités de l’usinage et de la manipulation à grande vitesse. Le quatrième et lecinquième chapitres présentent des méthodes. La troisième partie présent les algorithmes quiont été utilisés pour élaborer les analyses et pour essayer les méthodes proposés.Le premier chapitre traite la cinématique et les singularités d’une classe de mécanismespurement parallèles avec 4-ddl : trois rotations et une translation. Les singularités sont classifiéesselon leur type et beaucoup d’attention est apportée aux configurations singulières sanspattes en singularité, et aux singularités de contrainte (qui ont été souvent oubliées ou nonobservées).Le deuxième chapitre propose une nouvelle architecture de mécanisme avec 3-ddl : deuxrotations au<strong>to</strong>ur d’un centre fixe à la base et une translation. La mobilité du mécanisme et sacinématique sont analysées dans le cas général d’une géométrie quelconque et nous obtenonsde plus une solution analytique de la cinématique droite. Nous donnons aussi des géométriesparticulières. Une, sur<strong>to</strong>ut, avec une mobilité pan/tilt/zoom, utile pour servir de soutien à unappareil de vision. Une version 4-ddl de cette architecture est enfin présentée (une architecturedifférente qui est une simple extension de celle de 3-ddl).Le troisième chapitre présente deux autres nouvelles architectures, une pour usinage àgrande vitesse, l’autre, fort redondante, pour l’orientation à grande accélération de pièceslourdes ; par exemple pour celles de travail dont la table qui soutient la pièce joue un rôleactif en coopération avec le système d’usinage. La cinématique et la mobilité sont brièvementdiscutées avec de possibles utilisations industrielles.Le quatrième chapitre présente une méthodologie alternative pour analyser la transmission


Avant-proposxide <strong>force</strong> dans les mécanismes parallèles non redondants. Dans les premiers trois chapitres, nousle faisons avec les visseurs, qui donnent une représentation assez élégante de la transmissionde <strong>force</strong> à travers les chaînes du mécanisme. Le propos de ce quatrième chapitre est de montrerqu’au moyen de certaines hypothèses concernant la mobilité, nous obtenons les mêmes résultatsen suivant une méthode algébrique orientée aux sollicitations des membres du mécanisme. Ilest à noter que l’intention n’est pas d’établir une opposition entre les deux méthodologies ; c’està-direentre les visseurs et la méthode algébrique présentée. Au contraire, le but du chapitreest de tracer une analogie et il va de soi que l’analyse par visseurs est plus générale.Le cinquième chapitre traite du problème général du système de deux équations algébriques,tétraédriques de deuxième degré, c’est à dire, par ailleurs, du problème de calculer la position duquatrième sommet d’un tétraèdre à partir des trois autres sommets et de la longueur des arêtes.La solution de ce problème est assez simple mais, ce qui n’est pas du <strong>to</strong>ut simple, c’est d’obtenirdes expressions analytiques du Jacobian et du Hessian de la solution. La raison pour laquellenous faisons de cela le sujet d’un chapitre entier est qu’il s’agit d’un problème qui se répèteplusieurs fois dans la thèse, et chaque fois sa solution est un ingrédient de base de la dynamiquedroite. Une autre raison est qu’il a été un loisir algébrique pour l’auteur. Pour ne pas s’éloignertrop de la robotique, la discussion est orientée au problème de la cinématique différentielledes mécanismes delta-like, une classe assez vaste d’architectures translationnelles, dont lacinématique droite est justement représentée par un système de deux équations tétraédriques.La dernière partie de la thèse réunit des extraits des codes MAPLE. Ces extraits sont unepartie intégrante de la thèse, parce qu’ils montrent les algorithmes que nous avons utilisé pourobtenir les résultats présentés. Le choix de ne pas discuter ces algorithmes explicitement estdu à une précise volonté de concision.La vaste utilisation faite de ces instruments de programmation reflète le but de contribueravec des méthodologies algorithmiques au développement d’outils intégrés d’analyse d’ensemble.A ce sujet, <strong>to</strong>utes les analyses cinématiques et de singularité présentées dans la thèse ont étédéveloppées en suivant la méthode du mock-up mathématique. Le mock-up mathématiqueest une maquette virtuel 3D du mécanisme, entièrement paramétrique, fondé sur un modèlemathématique robuste. Cette maquette n’est rien de plus qu’une visualisation du modèle mathématiqueet représente des objets mathématiques. Une librairie d’outils graphiques, transcrite enlangage MAPLE avec le modèle mathématique, donne des images de grande qualité entièrementpersonnalisables de la maquette et de <strong>to</strong>us ses composants. Suivre cette méthode d’analyse estun autre pas sur le chemin de l’intégration, bien que dans cette thèse nous nous limi<strong>to</strong>ns à lacinématique, aux singularités et à la transmission de <strong>force</strong>.Une dernière observation. Les efforts de la communauté scientifique vers le développementde méthodologies d’analyse d’ensemble véritablement efficaces pourra donner une forte contributionà la diffusion industrielle des machines parallèles, aujourd’hui en devenir, bien qu’ellesfournissent de gros avantages du point de vue du renouvellement du concept de machine d’usinageou de manipulation, et des techniques mêmes de travail.


ForewordThe thesis collects <strong>contributions</strong> in the fields of modelling, <strong>force</strong> transmission and singularityanalysis of <strong>parallel</strong> <strong>mechanisms</strong> for robotics applications. New mechanism architectures aredescribed.Besides the mainly theoretical content, the motivation of the work is <strong>to</strong> provide <strong>to</strong>ols andknowledge useful in the design of robotized systems for industrial applications, in particular formanufacturing.Economic fac<strong>to</strong>rs and the availability of au<strong>to</strong>mation technology are now inducing dramaticchanges in the manufacturing paradigm. New concerns are: • modularity for enhanced reconfigurabilityand flexibility <strong>to</strong> efficiently cope with mass cus<strong>to</strong>mization of production; • newconcepts for the use of the machines and new machine design for a drastic reduction of the time<strong>to</strong> market; • knowledge-based design for product quality and life cycle performance. These issuessteer a global rethink of the manufacturing, especially in Europe <strong>to</strong>wards a common visionon European Manufacturing 1Several research domains are involved in this change and robotics plays a central rule as incharge of providing the core technology <strong>to</strong> make the new paradigm running.The development of machines with a reduced degree of freedom, frequently three or four, andcapable of high velocities and accelerations, becomes one significant point of interest. Thesehighly dynamical machines are required for high speed manipulation and assembly, as well asfor specific high speed machining applications and other manufacturing operations.To cope with the specific performance issues stressed by the particular application requirements,e.g., <strong>dynamics</strong>, workspace, mechanical components (struts/joints/actua<strong>to</strong>rs), control/accuracy,design need <strong>to</strong> become feature-oriented. 2A necessary action for feature-oriented design is the development of methods and <strong>to</strong>olsfor overall analysis of <strong>mechanisms</strong>, able <strong>to</strong> study all the functional and structural aspects,considering redundancies and recognizing singularities. 3This involves strong theoretical issues besides traditional mechanics. The aim of the thesisis <strong>to</strong> collect some theoretical <strong>contributions</strong> in this direction of overall mechanism analysis, witha particular attention <strong>to</strong> location and classification of singularities and their structural effects.In order <strong>to</strong> result effective, the methods and <strong>to</strong>ols for the overall analysis must overcomethe traditional distinctions between the different domains of Mechanics and should also takein<strong>to</strong> account sensoring and control issues <strong>to</strong>wards really integrated mechatronic design.For example, if the maximal dimension allowed <strong>to</strong> the links (depending on the results of the1 Manufuture. European Manufacturing of the Future: role of research and education for European leadership,Milan, December 2003, and Enschede, the Netherland, December 2004.2 Neugebauer et alii., Parallel Kinematics structures in manufacturing, and J-P. Merlet, The Need for aSystematic Methodology for the Evaluation and Optimal Design of Parallel Manipula<strong>to</strong>rs, 3 rd Parallel KinematicsSeminar PKS2002, Chemnitz, Germany, 2002Weck, M., Staimer, D., Parallel Kinematic Machine Tools - Current State and Future Potentials, CIRP Annals2002, Vol.51/2/2002.3 J-P. Merlet, The Need for a Systematic Methodology for the Evaluation and Optimal Design of ParallelManipula<strong>to</strong>rs, 3 rd Parallel Kinematics Seminar PKS2002, Chemnitz, Germany, 2002.


xivForewordcollision analysis) is not enough <strong>to</strong> shape them in order <strong>to</strong> achieve the targeted overall stiffnessof the machine, this should feedback on the synthesis phase (which traditionally belongs <strong>to</strong>another mechanics domain), the same way as a problem of bad <strong>force</strong> transmission (whichdirectly belongs <strong>to</strong> the mechanics domain of synthesis).The same for control issues: planning the control at the earliest stage of the design cancondition the mechanical design itself, e.g., for impedance control (with not so strict accuracyrequirements, like in assembly of plastic items) larger joint clearances are acceptable butjoint friction must be as low as possible, while the open-loop position control demands for lowclearances <strong>to</strong> achieve the targeted accuracy.A strict interaction between the different domains of Mechanics, <strong>to</strong>gether with a fruitful collaborationwith electrical and electronic engineers and people from computer science (enlargingthe point of view), becomes a key point.This cross effort, although limited <strong>to</strong> the provided <strong>contributions</strong>, is a red thread of the thesis.The first three chapters present architectures and examples. The fourth and fifth chapterspresent methods. The third part shows the algorithms that have been used.The first chapter discusses kinematics and singularities of a class of 4-dof, fully <strong>parallel</strong><strong>mechanisms</strong> with three rotational and one translational freedoms. The singularities are classifiedon the basis of their nature and a great attention is given <strong>to</strong> singular configurations withnonsingular legs and constraint singularities (frequently unobserved).The second chapter deals with a novel 3-dof hybrid architecture with one translational andtwo rotational freedoms. Mobility and kinematics are discussed for the general geometry and aclosed form solution for the forward kinematics is provided. Some special geometries are shown.One, in particular, provides a pan/tilt/zoom end-effec<strong>to</strong>r mobility that make the <strong>mechanisms</strong>uitable <strong>to</strong> support a vision system. A 4-dof version of this architecture (in fact a differentarchitecture that looks like a simple extension of the original one) is also proposed.The third chapter presents two other new mechanism architectures, one for high speed machining,the other particularly suitable for fast orientation of heavy payloads, e.g., for cooperativecells where the worked object is fixed <strong>to</strong> a mobile platform with some dof. Their kinematicsand mobility are briefly discussed <strong>to</strong>gether with some possible industrial applications.The fourth chapter shows an alternative methodology for <strong>force</strong> transmission analysis ofnonredundant architectures. In the first three chapters this is done by screws, which representthe generalised <strong>force</strong>s transmitted through the leg chains in a nice way. The aim of this fourthchapter is <strong>to</strong> show that, under some hypotheses on the mobility, the same can also be donewith an algebraic approach that focus on the stress characteristics of the links. Instead ofestablishing an opposition between the two methodologies, screws and the proposed algebraic,the discussion tries <strong>to</strong> recall the existence of an analogy, left unders<strong>to</strong>od that a screw basedapproach is more general.The fifth chapter discusses the general problem represented by a system of two algebraic,


Forewordxvsecond degree tetrahedral equations, that is, basically, the problem of computing the locationof the fourth vertex of a tetrahedron whose edge lengths and whose other three vertices areknown. The solution of this problem is simple, but what is not simple at all is <strong>to</strong> obtainanalytical expressions for the Jacobian and the Hessian of the solution. The reason why thisis the object of an entire chapter is that it is a recurrent problem throughout the thesis. By theway, another important reason is that this has been an algebraic amusement for the author.To keep close <strong>to</strong> robotics, the discussion refers <strong>to</strong> the problem of the differential kinematics ofthe delta-like <strong>mechanisms</strong>, a wide class of translational architectures whose forward positionproblem is just expressed by a system of two tetrahedral equations.The third part of the thesis collects the main sections of the MAPLE code implemented <strong>to</strong>develop the analyses and <strong>to</strong> test the proposed methodologies. This code is an integral part ofthe thesis, since it shows the algorithms that have been used <strong>to</strong> obtain the presented results.These algorithms are not discussed in the body of the thesis for conciseness.The large use of program code matches with the main intent of providing algorithmicmethodologies for overall design in the direction of integrated analysis <strong>to</strong>ols. In particular,the kinematics analysis proposed in the thesis and the singularity analysis have been performedfollowing the concept of the mathematical mock-up, proposed in the thesis. The mathematicalmock-up is a fully parametric 3D virtual mock-up of the mechanism, based on a strong mathematicmodel. This mock-up is a mere embodiment of the mathematical model and directlyrepresents mathematical objects. A library of graphics <strong>to</strong>ols implemented in MAPLE language<strong>to</strong>gether with the mathematical model provides a high quality, fully cus<strong>to</strong>mizable graphical representationof the full mock-up or any parts of it. This analysis methodology itself represents astep <strong>to</strong>ward integrated analysis, although <strong>to</strong> the limited extent of kinematics, singularities and<strong>force</strong> transmission.As a final remark, it is in the opinion of the author that the efforts of the scientific community<strong>to</strong>ward effective overall analysis methodologies will strongly contribute <strong>to</strong> the wide industrialacceptance of <strong>parallel</strong> machines. This process is still on going and will result in new, moreadvanced and flexible machine <strong>to</strong>ols as well as in a renewal of the manufacturing technology.


ContentsCitations <strong>to</strong> Previously Published WorkNomenclaturexxxxivI Mechanisms 11 Kinematics and singularities of a new class of 4-dof PMs 31.1 Chapter overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 The class of 4-dof PMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.5 Inverse Kinematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.6 Forward Kinematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.7 Analysis of the platform constraint . . . . . . . . . . . . . . . . . . . . . . . . . 131.7.1 Systems of freedom and constraint . . . . . . . . . . . . . . . . . . . . . 131.7.2 Basic types of leg postures . . . . . . . . . . . . . . . . . . . . . . . . . . 141.7.3 The equivalent simplified mechanism . . . . . . . . . . . . . . . . . . . . 161.7.4 The 4-dimensional workspace and its boundary . . . . . . . . . . . . . . 171.8 Leg Singularities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.8.1 The case π45 L ≡π 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.8.2 RPM-type singularities . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.8.3 IIM-type singularities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.8.4 Singularities on B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.8.5 Leg singularities not on B . . . . . . . . . . . . . . . . . . . . . . . . . . 251.9 Singular configurations with nonsingular legs . . . . . . . . . . . . . . . . . . . 251.9.1 Computation of the full Jacobian . . . . . . . . . . . . . . . . . . . . . . 271.9.2 Singularity check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.10 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 ArmillEye 412.1 Chapter overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.3 Remarks about synthesis of PMs with spherical mobility . . . . . . . . . . . . . 422.4 The class of architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432.5 Origin of the name ArmillEye . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.6 Constraint and mobility analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 492.7 Forward position problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.7.1 Numerical example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562.8 Inverse kinematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.8.1 Numerical example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.9 Jacobian analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.10 Applications of ArmillEye . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632.10.1 Sub-Bot<strong>to</strong>m-Cutter application . . . . . . . . . . . . . . . . . . . . . . . 642.11 4-dof ArmillEye . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.11.1 Kinematics of the 4-dof ArmillEye . . . . . . . . . . . . . . . . . . . . . 662.12 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67xvii


xviiiContents3 Agraule 693.1 Chapter overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.2 Agraule : 3PU 2 S 2 R − 1PRUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693.3 Kinematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.3.1 Constraint and mobility analysis . . . . . . . . . . . . . . . . . . . . . . 703.3.2 Jacobian analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.3.3 Position analysis for symmetric geometries . . . . . . . . . . . . . . . . . 773.4 A larger class of <strong>mechanisms</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.5 3TETRA-P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82II Methods 834 Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 854.1 Chapter overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854.3 Remarks on statics of nonoverconstrained PMs . . . . . . . . . . . . . . . . . . 874.4 Constraint singularities of <strong>parallel</strong> robots . . . . . . . . . . . . . . . . . . . . . 904.5 The Linear Delta robot case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904.5.1 Observations on the Linear Delta statics . . . . . . . . . . . . . . . . . . 904.5.2 Influence of the robot geometry on the constraint singularity surfaces . 934.5.3 Physical interpretation of the Linear Delta constraint singularities . . . 984.6 Velocity analysis of interconnected chains hybrid PMs . . . . . . . . . . . . . . 984.7 Velocity analysis of purely <strong>parallel</strong> PMs . . . . . . . . . . . . . . . . . . . . . . 1004.8 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025 Tetrahedral Equations and Differential Kinematics of a Class of PMs 1055.1 Chapter overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.3 Bibliographical hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085.4 Preliminaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.5 Forward position analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095.6 Velocity analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105.6.1 Coefficients for the terms of l II . . . . . . . . . . . . . . . . . . . . . . . 1125.6.2 Jacobian opera<strong>to</strong>r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135.7 Acceleration analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155.7.1 Computation of the Hessian tensor . . . . . . . . . . . . . . . . . . . . . 1155.8 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119III Algorithms 121A General MAPLE mathematical mock-up library 125B HeaveEye MAPLE mathematical mock-up library 131C ArmillEye MAPLE mathematical mock-up library 153D MAPLE tensor algebra library 163E Tetrahedral J and H: numerical example 171Bibliography 183


Citations <strong>to</strong> Previously Published WorkNote that the following is just a recall of the main publications inherent <strong>to</strong> the subject ofthe thesis and it is not an exhaustive bibliography of the author.• So far, portions of Chapter 1 are presented in the following papers, of near publication:D. Zlatanov, M. Zoppi, C. Gossélin. Motion analysis and singularities of aclass of 4-dof <strong>mechanisms</strong>. Advances in Robot Kinematics ARK 2004, June28 - July 1 2004, Sestri Levante, Italy.M. Zoppi, D. Zlatanov, C. Gossélin. Kinematics Equations of a class of 4-dof<strong>parallel</strong> wrists. Advances in Robot Kinematics ARK 2004, June 28 - July 12004, Sestri Levante, Italy.A more complete journal paper presenting the singularity analysis is under review.• The mechanism proposed in Chapter 2 is the subject of the patents:PCT Application PCT/EP03/51097 priority GE2003 A 000040It is being presented in:M. Zoppi, L. Bruzzone, M. Molfino. ArmillEye. The 4 th Parallel KinematicsSeminar PKS2004, Chemnitz, Germany, April 20-21 2004.• The first class of <strong>mechanisms</strong> discussed in Chapter 3 is patented:Priority GE2004 A 000028These <strong>mechanisms</strong> appear in:L. Bruzzone, M. Molfino, M. Zoppi. Kinematic modelling and simulation of anovel interconnected-chains PKM. IASTED Int. Conf. Modelling, Identificationand Control (MIC2004), Grindelwald, Switzerland, February 23-25 2004.M. Zoppi, L. Bruzzone, M. Molfino. A novel 5-DoF Interconnected-ChainsPKM for manufacturing of revolute surfaces. The 4 th Parallel KinematicsSeminar PKS2004, Chemnitz, Germany, April 20-21 2004.• The subject of Chapter 4 has mainly appeared in:L. Bruzzone, R. Molfino, M. Zoppi. Design of PKM modules for precisionassembly. IPAS2004 Second International Precision Assembly Seminar, BadHofgastein, Austria, February 12-13 2004.M. Zoppi, L. Bruzzone, R. Molfino, R. Michelini. Constraint Singularities ofForce Transmission in Nonredundant Parallel Robots with less than Six Degreesof Freedom. ASME Journal of Mechanical Design, Vol.125, pp. 557-563,2003.L. Bruzzone, R. Molfino, M. Zoppi, G. Zurlo. Experimental tests on the pro<strong>to</strong>typeof an impedance controlled three-degree-of-freedom <strong>parallel</strong> robot. 12thxix


xxCitations <strong>to</strong> Previously Published WorkInt. Workshop on Robotics in Alpe-Adria-Danube Region RAAD03, May 7-10, Cassino, Italia, 2003.L. Bruzzone, R. Molfino, M. Zoppi. Mechatronic design of a <strong>parallel</strong> robot forhigh-speed, impedance- controlled manipulation. 11th IEEE MediterraneanConf. on Control and Au<strong>to</strong>mation MED03, June 18-20, Rhodes, Greece, 2003.L. Bruzzone, R.M. Molfino, M. Zoppi. A cost-effective purely translational<strong>parallel</strong> robot for rapid assembly tasks. The 3 th Parallel Kinematics SeminarPKS2002, Chemnitz, Germany, April 23-25 2002.• Portions of Chapter 5 have appeared in:M. Zoppi, L. Bruzzone, R. Molfino. Position Analysis of a class of translational<strong>parallel</strong> <strong>mechanisms</strong>. Int. Journal of Robotics and Au<strong>to</strong>mation.A journal paper presenting the differential kinematics is under review.


Nomenclature◦ = the reciprocal screw product;¯ = on <strong>to</strong>p of a twist means 4-dimensional vec<strong>to</strong>r collecting the ω x ,ω y , ω z , v z coordinates; on <strong>to</strong>p of a wrench means 4-dimensionalvec<strong>to</strong>r collecting the f z , m x , m y , m z components;˜ = skew opera<strong>to</strong>r; applied <strong>to</strong> a $ inverts the first three componentswith the second three ones;α L 1 , β L 1α L i i+1 , i < 3= angles providing the direction of ξ L 1 in the base frame;= angle between ξL i and ξ L i+1;α L 34= angle between ξ L 3 and a straight line through O intersecting ξL 4orthogonally;A , B , C , D = uppercase - Labels for leg chains;A, B, C, D, . . . = labels for points;bB= subscript - indicate vec<strong>to</strong>rs projected in the base reference frame;= extrusion boundary;C L iC L, i = 1, . . .,4= feasible leg configuration space of the L-th leg;= the four basic classes of leg postures for the L-th leg;C L i1= subclass of C L i with the additional condition k L 1 ‖ π L 23;c a , c c = condition numbers of E a ind and Ec ind ;δ L , ε L= boolean parameters ([−1; +1]) defining the assembly mode of theL-th leg chain;η L = wrench in W L ∩ M ∗ ;e = feasible platform pose (R, h);E ∗E a ind , Ec ind= matrix of the equilibrium equations coefficients of the LinearDelta, relating the external moment on the end-effec<strong>to</strong>r and themodules of the moments acting on the legs;= matrices of the equilibrium equations coefficients, decoupled withrespect <strong>to</strong> actuation and constraint <strong>force</strong>s;ϕ= generic pure <strong>force</strong>;xxi


xxiiNomenclatureϕ σ , σ = x, y, z, σ = <strong>force</strong> wrench of a standard wrench basis;f = <strong>force</strong> component of a generic wrench (3-entries vec<strong>to</strong>r);ϕ L = pure <strong>force</strong> at the intersection of π23 L and π45;Lϕ L 0= pure <strong>force</strong> through O in direction k L 4 (and kL 5 );F a , F c = actuation and constraint <strong>force</strong>s;i b , j b , k b = Unit-length vec<strong>to</strong>rs along the coordinated axes of a base referenceframe;i O , j O , k O = unit-length vec<strong>to</strong>rs representing the coordinated axes of a legreference frame;i, j, k = unit-length vec<strong>to</strong>rs along the coordinated axes of an end-effec<strong>to</strong>rreference frame;k L i , i = 1, . . .,5 = unit-length vec<strong>to</strong>r along ξL i ;= unit-length vec<strong>to</strong>r in direction P −−→4 LO;k L 4rJ = 6×6 jacobian matrix of the mechanism;J = geometric Jacobian;j i , l i = Unit-length vec<strong>to</strong>rs;Λ = Jacobian of the actuated joint velocities (referring <strong>to</strong> the classicalform: Zξ = Λ˙q);L= uppercase - label for a generic leg chain (L = A, . . . , D);l45 L = distance between P4 L and P5 L ;L = matrix of the equilibrium equations coefficients;L cardL joint= sub-matrix of L representing the equilibrium of the complete system;= sub-matrix of L representing the joint type and arrangement;µ = generic pure moment;µ σ , σ = x, y, z, σ = moment wrench of a standard wrench basis;M fxi , M fyiµ L = pure moment orthogonal <strong>to</strong> π L 23;m = moment component of a generic wrench (3-entries vec<strong>to</strong>r);M iM t i= bending moment components acting on the i−th leg;= module of the moment acting on the i−th leg;= <strong>to</strong>rsional moment component acting on the i−th leg;


NomenclaturexxiiiM= twist system of the platform mobility in nonsingular configuration;n L 23= unit-length vec<strong>to</strong>r orthogonal <strong>to</strong> π L 23;N i= normal <strong>force</strong> acting on the i−th leg;OO= subscript - indicate vec<strong>to</strong>rs projected in the leg reference frame“ O ”;= center of rotation of the end-effec<strong>to</strong>r;π 0 = plane through O orthogonal <strong>to</strong> k;πi L i+1 , i < 3 or i = 4 = Plane defined by ξL i and ξ L i+1;π h = plane <strong>parallel</strong> <strong>to</strong> π 0 at a distance h from π 0 ;πe L = plane through O orthogonal <strong>to</strong> k L 4 ;P = point projection of O on π h ;P = prismatic joint;P4 L , P5 L = points at the intersections of πe L with, respectively, ξ L 4 and ξ L 5 ;p L= pitch of a wrench depending on the L-th leg;P L = twist system spanned by the nonactuated joint screws of leg L;q i , i = 1, 2, . . ., n, q L J ,L = A, B, . . .q L= internal coordinate of the i-th/L-th leg/joint;= configuration of the L-th leg;ϱ = generic pure rotation;ϱ σ , σ = x, y, z, σ = rotation velocity twist of a standard twist basis;R = rotation matrix;R = revolute joint;r4 L = distance between P4 L and O;r5 L = distance of ξ L 5 from an axis through O in direction k;S = spherical joint;S = stress characteristics;S 0S a ind , Sc indS indS= re-ordered stress characteristics;= stress characteristics components depending on the actuation andconstraint <strong>force</strong>s;= independent stress characteristics;= the six dimensional space of twists;


xxivNomenclatureS ∗ = the six dimensional space of wrenches dual of S;τττ σ , σ = x, y, z, σT xi , T yiT= actuation <strong>to</strong>rque;= generic pure translation;= translation velocity twist of a standard twist basis;= shear <strong>force</strong>s acting on the i−th leg;= twist system of the feasible platform mobility;T L = twist system spanned by all joint screws of leg L;U = universal joint;u i= unit-length vec<strong>to</strong>r along the central axis of the i-th U joint;ξ L iV L = wrench system reciprocal <strong>to</strong> P L ;V= space of the actuated constraints;W L = wrench system reciprocal <strong>to</strong> T L ;W 0Wξ, i = 1, . . .,5= space of the structural constraints in nonsingular configuration;= space of the structural constraints;= a generic twist;= screw of the i-th revolute joint of the L-th leg, numbering fromthe base;ξ L 45= twist at the intersection of π L 45 and π 0 ;ξ RO= twist of the redundant platform motion, in an RO-type singularconfiguration;x, y, z, r, ϕ, θ, ψ = linear and angular external coordinates;x L , y L , z LX= coordinates of a point depending on leg L, in the end-effec<strong>to</strong>rreference frame;= 4-dimensional workspace of the mechanism;∂X = boundary of X;int(X) = interior of X;ζ = a generic wrench;Z = 4×4 Jacobian of the end-effec<strong>to</strong>r twist (referring <strong>to</strong> the classicalform: Zξ = Λ˙q);


Part IMechanisms


Chapter 1Kinematics and singularities of a new class of4-dof PMs1.1 Chapter overviewThe sections following Section 1.3 discuss the class of PMs and propose a fully parametric,analytical form solution <strong>to</strong> the inverse position problem. All working modes of the mechanismare shown and discussed. The equations of the forward position problem are obtained underdifferent leg arrangement and numerical examples are provided. Special geometries in the classare proposed.The sections following Section 1.7 analyse mobility and singularities. The singular configurationsare classified in detail <strong>to</strong> provide a complete map <strong>to</strong> the designer. The work yieldsboth the geometric interpretation of the singularities and their localization. The workspaceboundary and interior are analyzed separately. The redundant motion of the end-effec<strong>to</strong>r,when it occurs, is obtained analytically. The velocity kinematics and the Jacobian opera<strong>to</strong>rare formulated via a screw-system based approach.So far, part of the results has been presented in [1] and [2].1.2 IntroductionThis chapter presents kinematics and singularity analysis of a new class of fully <strong>parallel</strong>,4-dof, 4-legged <strong>parallel</strong> <strong>mechanisms</strong>, providing three rotational and one translational freedoms.These <strong>mechanisms</strong> look like an “extension” of the famous Agile Eye and have been proposed<strong>to</strong> me in Laval in 2002. They have been invented while redesigning Agile Eye for a flyingsimula<strong>to</strong>r, an application that requires the three rotational freedoms of Agile Eye but alsoone more translational freedom. The first paper presenting these <strong>mechanisms</strong> is [3], where theauthors describe the architecture and discuss in general position and velocity kinematics. Atthe time, these were the only known fully-<strong>parallel</strong> 4-dof <strong>mechanisms</strong>. Later, in [4, 5], other4-dof <strong>mechanisms</strong> have been presented; non fully-<strong>parallel</strong> 4-dof <strong>mechanisms</strong> exist, e.g. onenovel such architecture is presented in the next chapter.A fully parametric mathematical model of the mechanism kinematics has been created<strong>to</strong> support the analysis, check the proposed relations and illustrate and verify the obtainedconditions for singularity. The model has been implemented in MAPLE and a library ofgraphical and computational <strong>to</strong>ols has been written in order <strong>to</strong> simplify the analysis and <strong>to</strong>provide a sophisticated and effective graphic output. This library is presented, respectively,in Sections Algorithms A (general functions) and Algorithms B (specific functions). The <strong>to</strong>olsinclude routines <strong>to</strong> compute and represent finite and infinite-pitch screws, such as the jointtwists, the wrenches of the platform constraints, the twist of the redundant output mobility forRO-type singular configurations, specific wrenches for IIM-type singularities, and many other3


4 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsCDOBACBOADDCOBAFigure 1.1: Mechanisms in the class.mathematical and geometrical objects that are useful for understanding and illustration ofmechanism behaviour. The kinematic model and the <strong>to</strong>ols are suitable for mechanism design,e.g. <strong>to</strong> shape the workspace, <strong>to</strong> select geometry for given tasks, <strong>to</strong> make the workspace free ofsingular configurations. The model and the library of <strong>to</strong>ols are structured, so most functions aregeneral and can be reused for different mechanism architectures, without significant changes.All presented 3D figures have been au<strong>to</strong>matically generated by MAPLE and are exact. Theimages can be modified immediately for different values of the variable geometric parameters.1.3 The class of 4-dof PMsFigure 1.1 shows the basic mechanism architecture in the class and two special geometries.The end-effec<strong>to</strong>r is connected <strong>to</strong> the base by four 5R serial chains (legs), labeled with A, B,C and D. Consider leg L, where L stands for one of A, B, C, D. The joints are numbered fromthe base: we denote the joint screws (and their axes) by ξ L 1 , . . . , ξL 5 and their direction vec<strong>to</strong>rsby k L 1 , . . . ,k L 5 (Fig. 1.2). The first three axes intersect in the fixed point O, the rotation centerof the mechanism, which is common <strong>to</strong> all four legs. The fourth and fifth joints are <strong>parallel</strong>.The platform joint axes, ξ A 5 , . . . , ξ D 5 , are <strong>parallel</strong> <strong>to</strong> a common plane, π h , (fixed in the mobileplatform) named the platform plane. It is required that these joints are not all <strong>parallel</strong> <strong>to</strong> eachother; then the mobile platform has four dof: it rotates arbitrarily around O and translatesalong a direction orthogonal <strong>to</strong> π h . (If the ξ L 5 were <strong>parallel</strong>, the mechanism would have fivedof.) The extrusion (or heave), h, of the platform (representing the amount of translation) isthe distance between π h and the <strong>parallel</strong> 0-extrusion plane, π 0 , through O.From a geometric point of view the mechanism can have any number of legs greater thanone; the choice of four legs allows <strong>to</strong> control the mechanism by actuating base joints only,hence the analysis focuses on this more advantageous set up. Nevertheless, part of the resultscan be extended <strong>to</strong> the general, m-leg layout.Other special geometries are shown in Fig. 1.3(b) (double compass geometries) and inFig. 1.4, where the picture 1.4 represent a mechanism geometry particularly feasible for surgicalapplications (abdomen laparoscopic surgery).1.4 GeometryThe following description holds for all possible mechanism geometries.We use: a platform reference frame Pijk (k ⊥ π h ), at the projection, P, of O on π h ; arotating frame Oijk; and a base frame, Oi b j b k b . The leg L heave plane, πe L , is through O and


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 5DCABξ L 3ξ L 5ξ L 2ξ L 4OOξ L 1Figure 1.2: The mechanism architecture under discussion.(a)(b)Figure 1.3: Double compass mechanism geometries: shifted (a) and cross end-effec<strong>to</strong>r (b).(a) (b) (c)Figure 1.4: Double-compass geometry for a multi-dof actuated joint (a) and with a full rotationalmobility about the collinear base joint axes (b); surgical geometry (c).


6 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsk L 3n L45πhk L 4rP 5LP 4L_ Lk_4rω L 4kP LPl 45LP 5Lπhα 34Lψ L4P 4Lr 5LP Lh h Lε L =1ε L =-1P Lk L 4χ LOr L4r Lintr L45OπOO(a)(b)(c)Figure 1.5: Heave section of leg L: vec<strong>to</strong>rs (a); parameters (b); working modes (c).orthogonal <strong>to</strong> ξ L 5 . Points P 4 L and P 5 L are the intersections of πL e with ξL 4 and ξL 5 , respectively.The distance from P4 L <strong>to</strong> P5 L is l45; L r4 L is between P4 L and O. The constant angle α L 34, spannedby the third leg link, is from ξ L −→3 <strong>to</strong> OPL4 . The angles of the first two links, α L i i+1 , i = 1, 2, arebetween k L i and k L i+1 . The set {lL 45, r4 L , α L 34, α L 12, α L 23} gives the geometry of leg L standingalone.How leg L is placed in the mechanism is described by: the distances r5 L from P 5 L −→<strong>to</strong> OP,and h L from π h <strong>to</strong> ξ L 5 ; the angles θ L between πe L and Oik; and the tilt, α L 1 , and azimuth, β1 L ,angles that place ξ L 1 in Oi bj b k b .The leg heave and spherical sections are formed by the third and fourth, and first twolinks, respectively. The PM’s heave and spherical sections are the end-effec<strong>to</strong>r with all legheave sections, and the base and the leg spherical sections.A PM is rhombic, if its leg heave sections are two by two equal (l45=l M 45, N r4 M =r4 N , α M 34=α N 34,{M, N}={A, C}, {B, D}) and symmetrical, with πe L coincident (rM 5 =rN 5 , θM −θ N =π). Also,πeM ≡ πe N , ψ4 M = ψ4 N (ψ4 L = ∠P4 L OP L ) and (k M 4 −k N 4 )⊥k. A rectangular PM is rhombic withπe A ⊥πB e ; a square PM is a rectangular with four identical legs.Figures 1.1 show two new <strong>mechanisms</strong> with two nontrivial special geometries. In 1.1(b)the platform joints overlap two by two along two skew axes (r5 L = 0 ∀L, h A =h C ≠h B =h D );the base joints are coaxial (α L 1 = π/2 ∀L). The end-effec<strong>to</strong>r has a straight shape along an axisthrough O orthogonal <strong>to</strong> π h . In Fig. 1.1(c) the fifth joints are two by two coincident and forma cross (r5 L = hL = 0 ∀L). The end-effec<strong>to</strong>r has a compact cross shape.Possible practical applications of these particular geometries are in assembly and machiningand <strong>to</strong> design measuring machines for large revolution surfaces, that cartesian or gantryarchitectures are not so fit <strong>to</strong> treat. In fact, although the high number of joints, it is possible<strong>to</strong> design the mechanism in order that it is rigid and accurate enough (e.g. exploitingredundancy) <strong>to</strong> carry a probe head.1.5 Inverse KinematicsThe end-effec<strong>to</strong>r pose is given by the extrusion, h, and the platform orientation matrix, R.The aim is <strong>to</strong> compute the PM’s entire configuration. First, we solve the heave section, thenthe spherical section. Unless noted otherwise, vec<strong>to</strong>rs are given in the end-effec<strong>to</strong>r frame.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 7Heave-sectionConsider the leg L heave section. Point P L is the projection of O on the plane throughξ L 5 <strong>parallel</strong> <strong>to</strong> π h (Fig. 1.5); the quadrilateral OP L P5 L P4 L is a virtual 1-dof mechanism withparameter h. We obtain k L 3 in the reference frame O(kL 4 ×k) kL 4 k, and then in Oijk.First, we get c L 4 = cosψ4 L , s L 4 = sin ψ4 L . We have2r L 4 H L c L 4 + 2r L 4 r L 5 s L 4 − H L2 − N L = 0 (1.1)where H L = h+ h L , N L = r5L 2+ rL2 4 − lL 245 . The solutions of (1.1) are:[cL4 s L 4[] T=(2rL4 (H L2 +r5L 2))−1 H L −r5L ] [r5 L H L H L2 +N L ε L CεL] T(1.2)where ε L = ±1 distinguishes between the two feasible working modes of the quadrilateralOP L P5 LP 4 L (Fig. 1.5), and: √Cε L = −(H L2 − m L 45 )(HL2 − M45 L ) (1.3)with M45 L =(rL 4 + lL 45 )2 − r5L 2and mL45 =(r4 L− lL 45 )2 − r5L 2.The quadrangle takes symmetric configurations for positive and negative values of h. Considerh ≥ 0. At maximal extrusion, P5 L, P 4 L and O are collinear and HL = (M45 L 2. At )1minimal extrusion (if allowed by the geometry), P5 L , P4 L and O are collinear, with P5 L betweenP4 L and O; H L = (m L 45 )1 2 . (These are transition configurations between the two workingmodes of the quadrilateral.) It is clear from (1.3) that for Cε L <strong>to</strong> be real, it is necessary thatm L 45 ≤ H L2 ≤ M45.LTo obtain k L 4 in Pijk, we rotate j about k at θL , k L 4 = R z(θ L )j. Vec<strong>to</strong>r k L 4r is computedanalogously:k L 4r = R z (θ L ) [ ]s L 4 0 c L T4(1.4)Now an α L 34 rotation about k L 4 ⊥ πe L gets k L 3 = R e (α L 34)R z (θ L ) [ ] T,s L 4 0 c L 4 where, obviously:⎡⎤R e (α L 34 )R z(θ L ) =⎢⎣cθ L cα L 34 −sθ L cθ L sα L 34sθ L cα L 34 cθ L sθ L sα L 34−sα L 34 0 cα L 34⎥⎦ (1.5)The four ε L , one for each leg, distinguish between four different working modes of the heavesection of the mechanism. Fig. 1.6 shows the two working modes of the heave section of oneleg.To complete the discussion, we provide an expression of the unit-length vec<strong>to</strong>r n L 45 , orthogonal<strong>to</strong> the plane π45 L defined by ξ L 4 and ξ L 5 , and the expressions of r45 L and rint L , which are thedistances from O of the intersections of the straight line P4 LP 5 L with, respectively, π 0 and ξ L 3(see Fig. 1.5). We compute the components of n L 45 along k L 4r and k ⊥L4r and add them:n L 45 = R z (θ L ) ( cosω4 L k L 4r + sin ω4 L k ⊥L )4r(1.6)


8 Chapter 1: Kinematics and singularities of a new class of 4-dof PMswhere k L 4r is provided by (1.4), k ⊥L4r= k L 4 ×k L 4r, and:sin ω4 L = lL 245 + rL2 4 − rL2 5 − HL 22 l45 L rL 4cosω L 4 = εL C L ε2 l L 45 rL 4(1.7)The distance r L 45 is: r L 45 =(H L2 + r5L 2)ε L CεL(H L2 + r5L 2− rL2 4 + lL 245 )HL + ε L r5 L CL ε(1.8)The distance r L int is:r L int =r L 4 εL C L εsα L 34 (HL2 + r5L 2− rL2 4 − lL 245 ) + εL cα L 34 CL ε(1.9)An expression of the angle χ L between π 0 and π45 L , taken right-hand with respect <strong>to</strong>−−−−→Q L P5 L× OQ −−→ L :where:ε L Ccotχ L ε L H L − r5L=()H L2 + r5L 2− rL2 4 + lL 245() H L2 + r5L 2− rL2 4 + lL 245 H L + ε L r5 L CL εFinally, we note the following relation; the proof is omitted:(1.10)r L int(cL434 cotχ L + s L 434)= rL45 (1.11)c L 434 = cos(ψL 4 + αL 34 )s L 434 = sin(ψ L 4 + α L 34)(1.12)Spherical sectionThe poses of the first and second links of leg L depend both on R and h through thedirection vec<strong>to</strong>rs k L 1 and k L 3 . Vec<strong>to</strong>r k L 3 is a result of the inverse kinematics of the heavesection, while vec<strong>to</strong>r k L 1 is easily obtained by a change of reference frame: kL 1 = RkL 1 b .It remains <strong>to</strong> compute vec<strong>to</strong>r k L 2 . The axis ξL 2 of the second joint lies at the intersection oftwo right circular cones with vertex, axes and half-angle O, ξ L 1 , α L 12 and O, ξ L 3 , α L 23, respectively.For ξ L 2 <strong>to</strong> lie on both cones, kL 2 must satisfy kL 2 ·kL 1 = cL 12 and kL 2 ·kL 3 = cL 23 , where cL ij = cosαL ij .Then, k L 2 is obtained as a linear combination of k L 1 , k L 3 and k L 1×k L 3 ,k L 2 = (1 − (k L 1·k L 3 ) 2 ) −1 [ k L 1 k L 3 k L 1 ×kL 3][tL1 t L 2 t L 3] T(1.13)The coefficients are: t L 1=c L 12−c L 23 k L 1·k L 3 , t L 2=c L 23−c L 12 k L 1·k L 3 , t L 3=δ L C L δ ,C L δ =√−(k L 1·kL 3 − mL AB )(kL 1·kL 3 − ML AB ) (1.14)with m L AB = cL 12c L 23− ∣ sL12 s L ∣23 , MLAB = c L 12c L 23+ ∣ sL12 s L ∣23 , sLij = sinα L ij . The boolean parameter


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 9CACADBDBDBDBACBD(a) ε A = +1(b) ε A = −1(c) δ A = +1(d) δ A = −1leg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.625 1.25 0 0 .0898 .25 0 .7071 .7071B 1.625 1.25 0 1.5708 .0898 .25 1.5708 .7071 .7071C 1.625 1.25 0 3.1416 .0898 .25 3.1416 .7071 .7071D 1.625 1.25 0 4.7124 .0898 .25 4.7124 .7071 .7071¢¡ £Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D1 0 0(a): +1(c): +10 1 0 2.1251 1 1(b): −1(d): −10 0 11 1 1Figure 1.6: Working modes of the heave section ((a) and (b)) and of the spherical section ((c)and (d)) of leg A.δ L = ±1 distinguishes between the two working modes of the spherical section of the leg(Fig. 1.6).The rotation angles of the actuated (base) joints, the solution of the inverse kinematicsproblem, are easily computed from the four k L 2 .A leg configuration is feasible (Cδ L in (1.14) is real) iff ∣ ∣α L 12 − αL ∣23 ≤ α L 13 ≤ ∣ ∣α L 12 + ∣αL 23∣,where α L 13 = ∠(ξL 1 , ξL 3 ), i.e. mL AB ≤ kL1·kL 3 ≤ ML AB .An expressions for the unit-length vec<strong>to</strong>r n L 23, orthogonal <strong>to</strong> the plane π23 L defined by ξ L 2and ξ L 3 is: n L 23 = ∣ ∣ sL23 −1 (−tL3 k L 1 + t L 3 k L 1·k L 3 k L 3 + t L 1 k L 1×k L )3(1.15)Things simplify if c L 12 = cL 23 = 0: Eq. (1.14) becomes CL δ = √ 1−(k L 1·kL 3 )2 , k L 2 ‖ kL 1 ×kL 3(t L 1 =tL 2 =0) and T L 3 =0.An alternative <strong>to</strong> Eq. (1.15) is the following, herein reported in case a different formalisationis preferred:where:⎡⎤δn L 23 = L Cδ LcL 4 −c L 4 ΦL −δ L Cδ LcL 4 sL 4ML ⎢⎣ c L 4 ΦL δ L Cδ L −s L ⎥M LT k L4 ΦL1⎦ 1−(k L (1.16)−δ L Cδ LcL 4 sL 4 s L 4 ΦL δ L Cδ L 1 ·kL 3 )2sL 4M L = R z (θ L )R y (α L 34)Φ L = c L 12 −cL 23 kL 1 · ML[ s L 4 0 ] T(1.17)cL 4Since n L 23 is unit-length, the following relation holds:⎡( )k L 1 · ML Φ L2 + CδL 2 ⎢⎣c L 240 −c L 4 sL 40 1 0−c L 4 sL 4 0 s L 24⎤⎥⎦ MLT k L 1 − (kL 1 ×kL 3 )4 = 0 (1.18)


10 Chapter 1: Kinematics and singularities of a new class of 4-dof PMswhere:CδL 2= 1 − cL 212 − cL 223 + kL1 ·k L (3 2cL12 c L 23 − k L 1 ·k L )3 ⎡⎤⎡sΦ L2 = c L 2 + c 12L 2 k L · M L 24 0 s L 4 cL 4L ⎢23 1 ⎣ 0 0 0⎥⎦ MLT k L 1 − 2cL 12 cL 23 kL 1 · MLs L 4 cL 4 0 c L 24s L 4⎢⎣ 0c L 4⎤(1.19)⎥⎦ (1.20)Finally, we note that the kernel space of the following matrix has dimension one and isspanned by n L 23 :⎡⎤ ⎡0 − cotχ L 0R z (θ L ) ⎢⎣ cotχ L 0 −1⎥⎦ R y(α L 34) ⎢⎣0 1 01.6 Forward Kinematics0 −c L 4 0c L 4 0 −s L 40 s L 4 0⎤⎥⎦ RT y (α L 34)R T z (θ L ) (1.21)The four k L 2 are given and the pose, (h,R), is unknown.In the general case, <strong>to</strong> write a system of equations for the forward kinematics is quitecomplicated; a general discussion can be found in [3]. Here, we consider rhombic PMs withα L 34 = 0, hL = 0, ∀L. Even for this case, writing a reasonable system of equations is not obvious.The use of h and some rotation parameters, as variables, results in very complex formulations.We have succeeded in deriving relatively simple equations, however, an analytical form solutionis not known. Such systems can be solved numerically (see [6]). We provide an even simplersystem of equations for the square <strong>mechanisms</strong>. An analytical form solution in this case maybe achievable for particular geometries (see [7], [8]), however, the global solution remains anopen problem.To get four simpler equations, we use as intermediate unknowns the angles θ2 L (sL 2 = sin θL 2 ,c L 2 = cosθ2 L ) of the second joints of the legs, rather than h and three rotation parameters forR. In leg L, θ2 L is the angle about kL 2 from πL 12 <strong>to</strong> πL 23 . Since ξL 3 lies on the cone with axis ξL 2and half angle α L 23, an expression of k L 3 as a function of θ2 L is:where a L c = s L 23 k L 1×k L 2 , b L c = s L 23Rhombic <strong>mechanisms</strong>k L 3 (θ L 2 ) = a L c c L 2 + b L c s L 2 + g L c (1.22)( )cL12 k L 2 − k L 1 , gLc = c L 23 k L 2 .Two equations state that the right, rectangular pyramid with base edges along ξ L 3 has equalopposite faces, i.e., ∠ξ A 3 ξB 3 = ∠ξC 3 ξD 3 and ∠ξA 3 ξD 3 = ∠ξC 3 ξB 3 :k A 3 · kB 3 − kC 3 · kD 3 = 0 (1.23)k A 3 · k D 3 − k C 3 · k B 3 = 0 (1.24)The third equation describes the angle, θ B −θ A , between π A e and πB e :(kA3 − k C ) (3 · kB3 − k D )3 = cos(θ B −θ A ) (1.25)By developing Eq. (1.25), simplifying and substituting in Eqs. (1.23) and (1.24), we obtain


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 11the following second degree equations in s L 2 and c L 2 :k A 3 (θ2 A ) · k B 3 (θ2 B ) − k B 3 (θ2 B ) · k C 3 (θ2 C ) = 1 2 cos(θB −θ A ) (1.26)k C 3 (θC 2 ) · kD 3 (θD 2 ) − kB 3 (θB 2 ) · kC 3 (θC 2 ) = 1 2 cos(θB −θ A ) (1.27)k A 3 (θA 2 ) · kB 3 (θB 2 ) − kA 3 (θA 2 ) · kD 3 (θD 2 ) = 1 2 cos(θB −θ A ) (1.28)and, by means of (1.22), we write them as three quadratic forms:X T Q i X = cos(θ B −θ A )/2 i = 1, 2, 3 (1.29)where X T = [ s A 2 s B 2 s C 2 s D 2 c A 2 c B 2 c C 2 c D 2 1 ] . The matrices Q i are:⎡0 b B c·bA c 0 −b D c·bA c 0 a B c·bA c 0 −a D c·bA c b A c·gB c − ⎤bAc·gD c0 0 0 0 a A c·b B c 0 0 0 b B c·g A c0 0 0 0 0 0 0 0 00 0 0 0 −a A c·bD c 0 0 0 −b D c·gA cQ 1 =0 0 0 0 0 a B c·a A c 0 −a D c·a A c a A c·gc B − a A c·gcD 0 0 0 0 0 0 0 0 a B c·gA c⎢ 0 0 0 0 0 0 0 0 0⎥⎣ 0 0 0 0 0 0 0 0 −a D c·gA ⎦c0 0 0 0 0 0 0 0 gc·g B c A −gc·g D cA⎡0 b B c·bA c 0 0 0 a B c·bA c 0 0 b A ⎤c·gB c0 0 −b C c·b B c 0 a A c·b B c 0 −a C c·b B c 0 b B c·gc A −b B c·g C c0 0 0 0 0 −a B c·bC c 0 0 −b C c·gB c0 0 0 0 0 0 0 0 0Q 2 =0 0 0 0 0 a B c·a A c 0 0 a A c·gcB 0 0 0 0 0 0 −a C c·aB c 0 a B c·gA c −aBc·gC c⎢ 0 0 0 0 0 0 0 0 −a C c·gcB ⎥⎣ 0 0 0 0 0 0 0 0 0 ⎦0 0 0 0 0 0 0 0 gc·g B c A −gc·g C cB⎡⎤0 0 0 0 0 0 0 0 00 0 b C c·bB c 0 0 0 a C c·bB c 0 b B c·gC c0 0 0 −b D c·b C c 0 a B c·b C c 0 −a D c·b C c b C c·gc B −b C c·g D c0 0 0 0 0 0 −a C c·bD c 0 −b D c·gC cQ 3 =0 0 0 0 0 0 0 0 00 0 0 0 0 0 a C c·a B c 0 a B c·gcC ⎢ 0 0 0 0 0 0 0 −a D c·aC c a C c·gB c −aCc·gD c ⎥⎣ 0 0 0 0 0 0 0 0 −a D c·gcC ⎦0 0 0 0 0 0 0 0 g c·gB C c −gD c·gC c(1.30)(1.31)(1.32)Finally, we express that ψ4 A and ψB 4 satisfy (1.1) for the same value of h. We solve (1.1)for h; since α L 34 = 0 and h L = 0, we obtain: h = r4c L L 4 + ε L (r4L 2cL2 4 −N L +2r4 L r5 L s L 4 ) 1 2 . Thus, thefourth equation is:r A 4 cA 4 −rB 4 cB 4 =εB √r B 4√2cB2 4 −NB +2r4 BrB 5 sB 4 −εA r4A 2cA2 4 −NA +2r4 ArA 5 sA 4 (1.33)


12 Chapter 1: Kinematics and singularities of a new class of 4-dof PMs(a) (b) (c) (d)(e) (f) (g) (h)(i)(l)fig. θ2A θ2B θ2C θ2Da .0221 .3947 .3535 6.1686b .5082 1.0353 .8155 .1905c 1.3246 2.0550 .7475 6.0834d 2.7094 .0067 5.5956 2.4968e 2.9029 3.4042 3.7732 3.3844f 3.1853 3.8419 4.4627 3.9232g 3.1513 3.8820 4.7720 4.1761h 4.8807 4.8715 4.6196 4.6091i 5.5429 2.2388 3.1101 6.2231l 5.6334 5.2362 3.2778 3.4593¢.7846 −.552 .2823R= .552 .8292 ¡ £ .0873 , h/l45 =1.04, ε L = δ L =1 ∀L; r 4 /l 45 =.8, β 1 = α 43 =0, α 12 =1.0472, α 23 = .6283−.2823 .0873 .9553Figure 1.7: Example of solutions for the forward kinematics of a square mechanism. To improvevisibility, base pyramids are represented wire-frame.After squaring twice, Eq. (1.33) becomes a second degree equation in s L 4 , c L 4 . Since the PM isrhombic, k M 3 · kN 3 = cos(2ψM 4 ), {M, N}={A, C}, {B, D}. Therefore, cM 24 = (1 + kM3 · k N 3 )/2and s M 24 = (1 − kM3 · k N 3 )/2. Eq. (1.22) allows <strong>to</strong> obtain k M 3 · k N 3 as a function of θ2 L .Eqs. (1.29–1.33) are the final system of four equations for the forward kinematics of rhombicPMs.Square <strong>mechanisms</strong>For square PMs, θ A −θ B = π/2 and Eqs. (1.29) are homogeneous. Eq. (1.33) becomesk A 3 · k C 3 − k B 3 · k D 3 = 0, stating that ψ A 4 =ψ B 4 . From Eq. (1.22), we write this fourth equationas a quadratic form X T Q 4 X = 0, where:⎡0 0 b C c·b A c 0 0 0 a C c·b A c 0 b A c·g C ⎤c0 0 0 −b D c·bB c 0 0 0 −a D c·bB c −b B c·gD c0 0 0 0 a A c·b C c 0 0 0 b C c·g A c0 0 0 0 0 −a B c·bD c 0 0 −b D c·gB cQ 4 =0 0 0 0 0 0 a C c·aA c 0 a A c·gC c0 0 0 0 0 0 0 −a D c·a B c −a B c·gcD ⎢ 0 0 0 0 0 0 0 0 a C c·gA c ⎥⎣ 0 0 0 0 0 0 0 0 −a D c·gcB ⎦0 0 0 0 0 0 0 0 g c·gC A c −gB c·gD c(1.34)So, the forward kinematics of the square <strong>mechanisms</strong> is expressed by a system of four seconddegree, homogeneous equations X T Q i X = 0, i = 1, 2, 3, 4.Fig. 1.7 shows a numerical example for a square, cross-platform geometry. This is the


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 13problem of placing a “double-compass” tetrapod on four circles of a sphere. The system of theforward kinematics equations is:⎧−0.1907s A 2 cB 2 −0.2892cA 2 −0.377sA 2 +0.32cB 2 +0.8910sB 2 −0.0489 +0.2573cA 2 cB 2 −0.0948cA 2 sB 2 ++0.0894s A 2 sB 2 −0.0981cC 2 −0.4620sC 2 +0.0567cB 2 sC 2 +0.0934sB 2 cC 2 −0.3249cB 2 cC 2 −0.0589sB 2 sC 2⎪⎨−0.1739c C 2 −0.9313sC 2 +0.0368sC 2 sD 2 −0.0586−0.042sC 2 cD 2 +0.4506sB 2 +0.2515cD 2 +0.4034sD 2 +⎪⎩−0.1792c C 2 sD 2 +0.1417cB 2 +0.2902cC 2 cD 2 +0.0567cB 2 sC 2 +0.0934sB 2 cC 2 −0.3249cB 2 cC 2 −0.0589sB 2 sC 2−0.1907s A 2 cB 2 −0.5963cA 2 −0.73sA 2 +0.1782cB 2 +0.4404sB 2 +0.1436+0.2573cA 2 cB 2 −0.0948cA 2 sB 2 ++0.0894s A 2 sB 2 +0.2114cD 2 +0.4174sD 2 −0.2143cA 2 cD 2 +0.1538cA 2 sD 2 +0.2232sA 2 cD 2 −0.061sA 2 sD 2−0.22s A 2 sC 2 −0.26sA 2 cC 2 −0.263cA 2 sC 2 +0.224cA 2 cC 2 +0.223sD 2 sB 2 −0.082sA 2 +0.259cD 2 sB 2 +0.065sC 2 +−0.016c A 2 +0.0027+0.0525cC 2 +0.262sD 2 cB 2 −0.225cD 2 cB 2 −0.045sD 2 −0.002cB 2 +0.071sB 2 −0.055cD 2Geometry and configuration parameters are reported in the figure. We have identified thesame ten solutions with several different numeric procedures, yet, so far, there is no proof tha<strong>to</strong>thers do not exist.1.7 Analysis of the platform constraintThis section starts the singularity analysis of the class of <strong>mechanisms</strong>.We distinguish four different types of leg postures and analyse the corresponding systemsof constraint wrenches that the leg exerts between base and platform. In other words, howthe possible postures of one leg chain affect the constraint this leg imposes on the platformmotion.The following sections analyze the mechanism singularities. The singularities are classifiedusing six types, as proposed in [9, 10]: redundant input/output (RI/RO), impossible output/input(IO/II), redundant passive motion (RPM), increased instantaneous mobility (IIM).First, in Section 1.8.2 we obtain the geometrical conditions that lead <strong>to</strong> RPM-type singularitiesand show that they all occur for maximal or minimal extrusion of the platform. Then,in Section 1.8.3 we address IIM-type singularities and conclude that, under certain conditions,they can be present only on the workspace boundary. The other singularity types are studiedby means of the input-output velocity relationship. In [3] the 4×4 Jacobian matrix Z is obtainedby eliminating the passive velocities from the velocity equations of the mechanism; herewe obtain the same matrix geometrically. Using this Jacobian, we recognize the conditionsfor RO-type singularity and propose a test <strong>to</strong> identify them. Finally, we compute the platformredundant mobility (the platform mobility with blocked actua<strong>to</strong>rs, when the mechanismconfiguration is an RO-type singularity).1.7.1 Systems of freedom and constraintWe use the rotating reference frame Oijk centered at O, with k orthogonal <strong>to</strong> π 0 . Theorigin is fixed in the base while the coordinate vec<strong>to</strong>rs are constant in the mobile platform.For a chosen Cartesian frame in space, we associate a standard basis, {ϱ x , ϱ y , ϱ z , τ x , τ y , τ z },in the six-dimensional space of twists, S. The elements of this basis are the three rotations andthree translations about the coordinate axes. The dual basis, {ϕ x , ϕ y , ϕ z , µ x , µ y , µ z }, spansthe dual space of wrenches S ∗ . The coordinates of a twist, ξ = (ω,v) = (ω x , ω y , ω z , v x , v y , v z ),and wrench, ζ = (f,m) = (f x , f y , f z , m x , m y , m z ), in the standard basis are:ω σ = µ σ ◦ ξ , v σ = ϕ σ ◦ ξ , f σ = ζ ◦ τ σ , m σ = ζ ◦ ρ σ , σ = x, y, z , (1.35)where “◦” is the reciprocal screw product. Note that in (1.35) the rotation/<strong>force</strong> coordinates


14 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsare generated by the moment/translation basis screws and vice versa.For leg L, the twist systems T L and P L are spanned by all joint screws and by the passive(non-actuated) joint screws, respectively. The reciprocal wrench systems are W L = TL⊥ andV L = PL ⊥. The system W L consists of wrenches reciprocal <strong>to</strong> all the joint screws of the L-thleg; it spans the <strong>force</strong>s the leg can transmit between platform and base when all its joints areleft free <strong>to</strong> move. The system V L represents the <strong>force</strong>s and moments that the leg can transmitbetween platform and base, when its actuated joint is locked.If the leg posture is nonsingular (i.e., if the five joint screws are linearly independent),W L = Span(ϕ L 0), where ϕ L 0is the pure <strong>force</strong> through O in the direction k L 5 (and k L 4 ). In aleg singularity, the dimension of W L increases and Span (ϕ L) W 0 L. For any configuration,we have T L ⊃ P L , and hence W L ⊂ V L . In a nonsingular leg posture, dim W L = 1 anddim V L = 2. In some singular postures, V L is also reciprocal <strong>to</strong> the screw of the actuated joint,and then T L = P L and W L = V L .We will refer <strong>to</strong> the wrench spaces of structural constraints, W = ∑ L W L, and actuatedconstraints, V = ∑ L V L, which represent the combined constraints of the four legs on theplatform, when the actuated joints are free and blocked, respectively. If no leg is in a singularposture, W = Span(ϕ A, . . . , 0 ϕD). Since the platform joint axes, 0 kA 5 , . . .,kD 5 , are not all<strong>parallel</strong>, the four ϕ L 0never coincide; they span a planar pencil of <strong>force</strong>s, W 0 = Span (ϕ x , ϕ y ),lying in π 0 and centred at O. (In particular, this implies that the mechanism cannot have aconstraint singularity [11], where the platform would have at least five instantaneous dof.) Ina nonsingular configuration, W = W 0 = Span (ϕ x , ϕ y ) and V = S ∗ (i.e. dim V = 6).The platform freedoms span the twist system T = ∩ L T L = W ⊥ . The platform is alwaysconstrained at least by the 2-system W 0 , so it cannot translate but in a direction orthogonal <strong>to</strong>π 0 . In a nonsingular configuration, T is given by M = W ⊥ = Span (ϱ0 x , ϱ y , ϱ z , τ z ); in IO-typesingularities T is smaller. Note that a leg singularity leads <strong>to</strong> a loss of a platform freedom(IO) only if W L − W 0 ≠ ∅ (W L ⊄ W 0 ). The dual space of M, M ∗ = Span (ϕ z , µ x , µ y , µ z ) isthe maximum system of wrenches that the mechanism can actively apply on the end-effec<strong>to</strong>r.1.7.2 Basic types of leg posturesDepending on the relative location of the passive joints (2 <strong>to</strong> 5) in a leg, we distinguishfour basic classes of leg postures, i.e. subsets, C L i , i = 1, . . .,4, (listed below) of the feasibleleg configuration space, C L . To describe geometrically a leg posture, q L , below we refer <strong>to</strong>two planes: π23 L through ξL 2 and ξL 3 ; and πL 45 defined by ξL 4 and ξL 5 . The angle αL 34 is formedbetween k L 3 and the plane defined by ξ L 4 and O; from a geometrical point of view, it is theconstant angle spanned by the third leg link. The angle α L i i+1 , i < 3, is between kL i and k L i+1 .For each class, C L i , a subclass, C L i1, is defined by the additional condition k L 1 ‖ π23 L (i.e.,when the first three joint axes are coplanar).• Case 1. C L 1 = {q L | k L 4 ∦ π L 23 and O ∉ π L 45} (Fig. 1.8).V L = Span (ϕ L 0, ϕ L ), where ϕ L is the <strong>force</strong> along the intersection of π L 23 and πL 45 . The<strong>force</strong> ϕ L is not through O and not on π 0 , therefore the intersection V L ∩W 0 = Span (ϕ L 0),and V L is a cylindroid. Since O ∉ π L 45 , then πL 45 ≢π 0.If q L ∈ C L 11 (kL 1 ‖ πL 23 ), W L = V L and W L ⊄ W 0 , else W L = Span(ϕ L 0 ).• Case 2. C L 2 = {qL | k L 4 ‖ πL 23 and O ∉ πL 45 } (Fig. 1.8).V L = Span(ϕ L 0 , µL ) is the 2-system of the pure <strong>force</strong>s <strong>parallel</strong> <strong>to</strong> k L 4 and lying on πL 23(µ L is a pure moment orthogonal <strong>to</strong> π L 23). We note that V L ∩ W 0 = Span (ϕ L 0). SinceO ∉ π L 45 , πL 45 ≢π 0.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 15e ∉ B and π L 45 ≢ π 0 e ∈ B or π L 45 ≡ π 0π L 45π L 45ϕ Lϕ L ⊥OO ϕ L0π L 23ϕ L 0C L 1π L 23C L 3k L 4 ∦ πL 23π L 45µ Lπ L 45ϕ L ⊥π L 23µ Lπ L 23O ϕ L 0C L 2C L 4O ∉ π L 45 O ∈π L 45O ϕ L 0k L 4 ‖ πL 23Figure 1.8: Wrench spaces and leg geometry for each posture class.W L =V L and W L ⊄ W 0 iff q L ∈ C L 21 (k L 1 ‖ π L 23), else W L = Span (ϕ L 0).• Case 3. C L 3 = {q L | k L 4 ∦ π L 23 and O ∈π L 45} (Fig. 1.8).V L = Span(ϕ L 0 , ϕL ⊥ ) is the planar pencil of <strong>force</strong>s centred at O and lying in πL 45 . ϕL ⊥ is apure <strong>force</strong> through O orthogonal <strong>to</strong> k L 4 and lying on πL 45 . If πL 45 ≡π 0, then V L =W 0 ; else,V L ∩ W 0 = Span (ϕ L 0 ).W L =V L everywhere in C L 3 . Iff πL 45 ≢π 0, W L ⊄ W 0 .• Case 4. C L 4 = {qL | k L 4 ‖ πL 23 and O ∈πL 45 } (Fig. 1.8).V L = Span (ϕ L, 0 µL , ϕ L ⊥ ) is a 3-system spanned by a planar pencil in πL 45 and a momentperpendicular <strong>to</strong> π23.L– If α L 34 ≠ 0, then πL 23 ≢ πL 45 and V L is a 3-system of Gibson-Hunt type IB, containingscrews of all pitches (a 7th or an 8th special 3-system according <strong>to</strong> [12]).– if α L 34 = 0, then π L 23 ≡ π L 45 and V L is a 3-system <strong>force</strong>s of Gibson-Hunt type IIB,spanned by the pure <strong>force</strong>s in a plane.If π L 45 ≡π 0 , then W 0 ⊂ V L ; else V L ∩ W 0 = Span (ϕ L 0).W L =V L if q L ∈ C L 41 (k L 1 ‖ π L 23), else W L = Span (ϕ L 0, ϕ L ⊥ ). In CL 4 , we have extraconstraints, W L ⊄ W 0 , unless both π L 45 ≡π 0 and k L 1 ∦ πL 23 .Table 1.8 sums up the geometries of the four posture classes (e and B are defined inSection 1.7.4).Note that a leg singularity always leads <strong>to</strong> extra structural constraints (and an IO singularity),W L − W 0 ≠ ∅, except if π L 45 ≡π 0 and q L ∉ C L 41.


16 Chapter 1: Kinematics and singularities of a new class of 4-dof PMse ∉ B and π45 L ≢ π 0 e ∈ B or π45 L ≡ π 0q L ∈ C L 1 q L ∈ C L 3dim V L =2{dim V L =2dim W L =1 if k L 1 ∦π23L2 if k L 1 ‖πL 23dim W L =2W L ⊂ W 0 ⇔ k L 1 ∦ πL 23 W L ⊂ W 0 ⇔ π45 L ≡ π 0 k L 4 ∦ πL 23q L ∈ C L 2 q L ∈ C L 4dim V L =2{dim V L =3{dim W L =1 if k L 1 ∦πL 23 2 if k L 12 if k L 1 ‖π23L dim W L =233 if k L 1 ‖π23LW L ⊂ W 0 ⇔ k L 1 ∦ π23 L W L ⊂ W 0 ⇔ k L 1 ∦π23 L and π45 L ≡π 0 k L 4 ‖ π23LO ∉ π45 L O ∈π45LTable 1.1: Wrench spaces and leg geometry for each posture class.ξ L 5π45LOπ 0ξ L 4 ξ L 3ξ L 45ξ L 2ξ L 1Figure 1.9: In the equivalent mechanism, fourth and fifth joints are replaced by the imaginaryrevolute joint, ξ L 45 , at the intersection of πL 45 and π 0.1.7.3 The equivalent simplified mechanismIn configurations where all π L 45 ≢π 0 , the mechanism is instantaneously kinematically equivalent<strong>to</strong> a simplified mechanism (see Fig. 1.9). The fourth and fifth joints of each leg arereplaced by a single revolute joint, with screw ξ L 45, at the intersection of π L 45 and π 0 . (Jointξ L 45 is prismatic when πL 45 ‖ π 0). The velocity of the new joint is the sum of the joint velocitiesit replaces.In the simplified mechanism, the combined constraints by the four simplified legs are thesame as in the original mechanism, for both free and blocked actua<strong>to</strong>rs. Indeed, for a nonsingularsimplified leg, W L = W 0 , and V L is the sum of W 0 with the planar pencil of <strong>force</strong>sin π L 23 , centred at the intersection of πL 23 and ξL 45 . Since πL 23 is through O, V L is a 3-system,V L = Span(ϕ x , ϕ y , ϕ L ) (or V L = Span (ϕ x , ϕ y , µ L ), in case of a C L 2 leg), where ϕ L is at theintersection of π L 23 and π L 45 (and µ L the pure moment orthogonal <strong>to</strong> π L 23). Hence, the mobileplatform is constrained by W 0 and by the four pure <strong>force</strong>s ϕ L (or possibly some µ L ), as in theoriginal mechanism. Of course, the geometry of the simplified mechanism changes dependingon the configuration of the original mechanism, and the equivalence works only if no π L 45 ≡π 0.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 17kξ 3OhFigure 1.10: Heave section of the L-th leg seen orthogonally <strong>to</strong> k L 5 .1.7.4 The 4-dimensional workspace and its boundaryLet X ⊂ SO(3) × R be the 4-dimensional workspace of the mechanism. In singularityanalysis it is usual <strong>to</strong> consider separately the boundary ∂X and the interior int(X) (weassume int(X) ≠ ∅). Here, it is important <strong>to</strong> give special attention <strong>to</strong> a proper subset of ∂X,the extrusion boundary, B, which consists of all feasible platform poses, e = (R, h), where theheave, h, achieves an extremal value, h = ±h L min , ±hL max (for some L).Figure 1.10 represents the heave section of the mechanism along one of the leg chains. TheOz axis (along k) is always perpendicular <strong>to</strong> the platform and intersects it at the same point,so there is a 1-dof PRRR planar loop which describes how extrusion works. This mechanismallows extremal extension when O ∈ π 45 , so, from a geometrical point of view, a mechanismconfiguration leads <strong>to</strong> a platform pose in B iff the posture of at least one leg is such thatπ45 L ≢π 0 and O ∈π45 L (qL ∈ C L 3 ∪ CL 4 ).Figure 1.11 shows a mechanism in four different configurations, with extremal heave anddifferent platform orientations. However, it is not said that a mechanism can reach (all orsome) extremal values of h for any platform rotation. It depends on the geometry, since thethree joint axes k L 1 , kL 2 , kL 3 can become coplanar before extremal heave is reached, makinghigher extrusion impossible. In fact, if α L 12 and αL 23 are sufficiently small, B can be empty.The remainder of the boundary, ∂X − B, consists of mechanism configurations where, atleast in one leg, k L 1 , kL 2 and kL 3 are coplanar (kL 1 ‖πL 23 ), i.e., qL ∈ C L 11 ∪ CL 21 .Every mechanism configuration with e ∈ ∂X is an IO-type singularity. Indeed, e ∈ ∂Ximplies e ∈ ∂X L , where X L is the 5-dimensional workspace of some leg, and hence a leg singularity.However, the feasible leg singularities are all IO-type configuration for the mechanism(except π45 L ≡ π 0 configurations which are not on ∂X L ). (The fact that any neighbourhoodof e ∈ ∂X contains unfeasible poses does not au<strong>to</strong>matically imply that instantaneous platformmotion is restricted.) When e ∈ B there is a loss of the translational freedom, whilee ∈ ∂X − B, leads <strong>to</strong> instantaneously restricted rotation.Conversely, an IO-type singularity generally implies e ∈ ∂X, the only exception beingconfigurations where ξ L 1 ≡ ξL 3 . Thus, only if αL 12 = αL 23 can there be IO singularities fore ∈ int(X).1.8 Leg SingularitiesWe show that singularity types IO, IIM, RI and RPM are possible only if some leg issingular, i.e., its five joint screws are linearly dependent.


18 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsFigure 1.11: Mechanism with four identical leg chains symmetrically connected <strong>to</strong> base andplatform. The base is moved with respect <strong>to</strong> the platform, which is kept fixed. In all shownconfigurations the platform is on the elevation boundary B. It can be seen that the maximalplatform extrusion is the same for all configurations.✛ r4L✛ l45 L ✲✛r5L✲✲♣OFigure 1.12: Leg with π L 45 ≡π 0 .1.8.1 The case π L 45 ≡π 0A necessary condition for the special situation π45 L ≡π 0 is O ∈π45 L . This is also a sufficientcondition if the distance, r5 L , between ξ L 5 and Oz is equal <strong>to</strong> r4 L ± l45, L where r4 L is the distancebetween Oz and ξ L 4 , and lL 45 is the length of the leg link connected <strong>to</strong> the platform (seeFigure 1.12). Otherwise, π45 L ≡π 0 is geometrically impossible.Suppose that π45 L ≡π 0, while the other legs are nonsingular.An IO occurs only if q L ∈ C L 41. In this case, the configuration is also of the RPM- andRI-types. The five joints of leg L span a 3-system and the platform has 3-dof. Therefore, themechanism has 5-dof (analogously <strong>to</strong> a closed loop with 8 joints spanning a 3 system) and IIMis present. The configuration also belongs <strong>to</strong> both or neither of types II and RO dependingon the other three leg chains. (Indeed, replace leg L with a passive nonsingular leg with thesame 3-dof. Then this equivalent mechanism can have only a singularity of class (RO, II).)Therefore, the configuration is either (RI, RPM, IO, IIM) or with all six types.Otherwise, if q L ∉ C L 41 , although leg L is singular, the platform is constrained only by W 0and dim T = 4 (no IO). Either q L ∈ C L 4 −C L 41 and we have an RPM singularity, or q L ∈ C L 3 andthere is RI. In either case, since there is no IO, there must be an IIM-type singularity. (Thisfollows from the interdependence rules of the singularity types, Table 1.2, [10,13].) Moreover,if q L ∈ C L 3 and there is no RPM, an RO-type singularity must be present as well. Thus wehave at least (RPM, IIM) or (RI, RO, IIM) and each can be augmented with (RO, II) if theother three legs cooperate.Figure 1.13 shows an example of a singularity of class (IIM, RI, RO).


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 19ADBζ ACζ A(a)leg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.5 .5625 0 0 .0898 .9 0 .5 .5B 1.5 .625 0 1.5708 .0898 .9 1.5708 .5 .5C 1.5 .5625 0 3.1416 .0898 .9 3.1416 .5 .5D 1.5 .625 0 4.7124 .0898 .9 4.7124 .5 .5¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9814 −.1544 .1145.1642 .983 −.0821 0 1 1 1 1 1 1 1 1−.0998 .0993 .99Figure 1.13: Example of (IIM, RI, RO)-singularity with π D 45 ≡π 0; the corresponding constraint<strong>force</strong> ζ D is through O, lies on π 0 and belongs <strong>to</strong> W 0 , then the configuration is RO singular.IO II IIMIOandIIIOandIIMIIandIIMIOandIIandIIMRIYROYRPM Y Y YRI and RO Y Y Y Y YRI and RPM Y Y YRO and RPM Y Y YRI and RO and RPM Y Y Y Y YTable 1.2: Combinations of singularity types for any nonredundant mechanism.For the rest of the chapter, we generally assume that no π L 45 ≡π 0.1.8.2 RPM-type singularitiesA configuration is an RPM-type singularity when a leg chain has an unconstrained dofeven if both the platform twist and the active joint velocity are zero. The necessary andsufficient condition for this is the linear dependence of the passive joints screws, dim P L < 4,or equivalently dim V L > 2. According <strong>to</strong> Table 1.8, this happens iff q L ∈ C L 4 for some L.Each C 4 leg has one passive dof, so the redundant passive freedoms of the mechanism areas many as the C 4 legs. Figure 1.14 represents a configuration with two RPM freedoms.Provided that all π45 L ≢π 0, a necessary condition for O ∈π45 L is e ∈ B. Therefore, under thishypothesis, all RPM-type singular configurations have an end-effec<strong>to</strong>r in B and the workspaceinterior int(X) is free of them. (As we saw, if the geometry of some leg is such that π45 L ≡π 0,it is possible <strong>to</strong> have an RPM-type singularity and e ∈ int(X)).


20 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.75 1 0 0 .0898 .45 0 .2712 .2712B 1.75 .75 0 1.5708 .0898 .45 1.5708 .5 .5C 1.75 1 0 3.1416 .0898 .45 3.1416 .2712 .2712D 1.75 .75 0 4.7124 .0898 .45 4.7124 .5 .5¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9489 −.3156 0.3156 .9489 0 2.5617 1 1 1 1 1 1 1 10 0 1Figure 1.14: An (RPM, IIM, IO, II)-singularity with two C 4 legs.1.8.3 IIM-type singularitiesThe singularity analysis can be performed by using the simplified instantaneously equivalentmechanism, introduced in Section 1.7.3. Indeed, the instantaneous kinematics of everymechanism is fully described by a system of linear velocity equations with unknowns all jointvelocities and the platform twist [10,13,14]. If some (eliminable) passive joint velocities canbe expressed as functions of the remaining passive, active and platform velocities, then thesystem can be simplified and it is possible <strong>to</strong> prove that a singularity analysis performed byusing this simplified system gives the same results obtained if using all equations (for proofsee Proposition 5.14 in [13]). The velocity equations of the simplified mechanism are exactlysuch a simplified system.Since W ⊃ W 0 = Span (ϕ x , ϕ y ), T ⊂ M = Span (ϱ x , ϱ y , ϱ z , τ z ), in the standard basisthe last four coordinates of every wrench (<strong>force</strong>) in W are zero, as are the first and secondcoordinates of every twist in T .The method for the study of IIM-type singularities in <strong>parallel</strong> <strong>mechanisms</strong> is given in[9,13]. For the simplified mechanism this technique gives the following necessary and sufficientcondition:• There exist four (linearly dependent) wrenches η A , η B , η C , η D , not all zero, such thatη L ∈ W L ∩ M ∗ , i.e.:⎡⎤−I 4 Ξ A 0 0 0[] −I 4 0 Ξ B 0 0˜η AT ˜η BT ˜η CT ˜η DT = 0 (1.36)⎢⎣−I 4 0 0 Ξ C 0 ⎥⎦−I 4 0 0 0 Ξ D


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 21where:Ξ L =[¯ξL ¯ξ L ¯ξ L ¯ξ]L1 2 3 45(1.37)¯ξ L j = ( k L j · k |0) j = 1, 2, 3 (1.38)¯ξ L 45 = ( k L 4 · k | r45k L ) (1.39)[ ]˜η L 0 I3= ¯η L (1.40)1 0The matrices I 3 and I 4 are the 3×3 and 4×4 identity matrices. A bar on <strong>to</strong>p of a twistmeans that we consider it as a 1 × 4 matrix with only its ω x , ω y , ω z , v z coordinates; the samebar on <strong>to</strong>p of a wrench means that we keep only its f z , m x , m y , m z components. The first4 columns of the 16 × 20 matrix on the left-hand side of Eq. (1.36) serve <strong>to</strong> check the lineardependence of the four η L ; the vanishing of each product ˜η L Ξ L ensures η L ∈ W L .The L-th leg has a wrench η L ≠0 iff q L is such that W L ∩ M ∗ ≠ 0. We refer <strong>to</strong> Table 1.8:if W L ⊂ W 0 then W L ∩ M ∗ = 0, therefore, since we need η L ≠0 in more than one leg, anecessary condition for an IIM-type singularity is <strong>to</strong> have more than one L such that: q L ∈C L 11 ∪ CL 21 ∪ CL 3 ∪ CL 4 .In all cases, assuming π45 L ≢π 0 and α L 12 ≠ α L 23 for all L, the mechanism configuration hasan end-effec<strong>to</strong>r in ∂X and int(X) is free from IIM-type singularity. Examples of IIM-typeconfigurations are presented in Figs. 1.15 <strong>to</strong> 1.18.Figure 1.15 shows an IIM-type configuration with e ∈ ∂X and q L ∈ C L 11 for all L. Allfour η L are pure <strong>force</strong>s in direction k (and are therefore linearly dependent); each of themintersects π 0 at the intersection of ξ L 45 with a plane through ξ L 3 and orthogonal <strong>to</strong> k L 4 :⎡ ⎤ ⎡⎤¯η A 1 0 −0.093 0⎢¯η B⎥⎣¯η C ⎦ = ⎢1 0.093 0 0⎥⎣1 0 0.093 0⎦ (1.41)¯η D 1 −0.15313 0 0In Fig. 1.16(a)(a) another example of IIM-type singularity: in this case, q A ∈ C A 4 , whileagain q L ∈ C L 11, L = B, C, D. The ¯η L are:⎡ ⎤ ⎡⎤¯η A 0 0 0 0⎢¯η B⎥⎣¯η C ⎦ = ⎢1 0.093 0 0⎥⎣1 0 0.093 0⎦ (1.42)¯η D 1 −0.15313 0 0In Fig. 1.16(b) another example of IIM-type singularity that is also (IO,RPM,RI).Figure 1.17 represents a mechanism with e ∈ B and q L ∈ C L 31, L = A, B (the posturesof legs C and D are irrelevant). The wrenches η A ≡ η B are two pure <strong>force</strong>s through O indirection k; they are linearly dependent and Eq. (1.36) is satisfied while taking η C = η D = 0;the mechanism configuration is again an IIM-type singularity. The ¯η L are:⎡ ⎤ ⎡⎤¯η A 1 0 0 0⎢¯η B⎥⎣¯η C ⎦ = ⎢1 0 0 0⎥⎣1 −0.014334 0.093 −0.021845⎦ (1.43)¯η D 1 −0.15313 −0.0091345 −0.021025In general, if q L ∈ C L i1, i = 3, 4, π L 45 ≢π 0 , and π L 23 ⊥ π 0 , then η L is a pure <strong>force</strong> in direction k


22 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsηBη ABη C Cη D ADleg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 −.1794 .8317 .8317B 1.25 .75 0 1.5708 .0898 .4 1.2828 .8705 .8705C 1.25 .75 0 3.1416 .0898 .4 2.9288 .924 .924D 1.75 1.125 0 4.7124 .0898 .4 4.5925 .9253 .9253¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9605 .1947 −.1987−.1987 .9801 0 1.75 1 1 1 1 1 1 1 1.1947 .0395 .9801Figure 1.15: (RI, RO, IO, II, IIM)-singularity with e ∈ ∂X and q L ∈ C L 11 ∀L. The wrenchesη L , L = A, . . .,D, (gray arrows) have zero pitch.intersecting ξ L 45; else, if π L 23 ̸⊥ π 0 , then η L is a pure moment orthogonal <strong>to</strong> π L 23.Figures 1.18(a) and (b) show an example of IIM-singularity with e ∈ int(X) and q L ∈ C L 1 ,α L 12 ≡ αL 23 , ξL 1 ≡ ξL 3 , in all four legs. Since in every leg kL 1 ≡ kL 3 , the direction of kL 2 isundetermined; in order <strong>to</strong> have four linearly dependent η L , the vec<strong>to</strong>rs normal <strong>to</strong> the planesπ L 12 ≡ πL 23 have <strong>to</strong> lie on <strong>parallel</strong> planes. The four ¯ηL are:⎡ ⎤ ⎡⎤¯η A 1 0.030815 −0.076203 0.045388⎢¯η B⎥⎣¯η C ⎦ = ⎢1 0.082399 −0.026770 −0.055629⎥⎣1 0.024507 0.093827 −0.11833 ⎦ (1.44)¯η D 1 −0.11880 −0.074550 0.19335Figure 1.18(c) shows the same mechanism of Fig. 1.18(a) and (b), with π B 12 and πD 12 areorthogonal <strong>to</strong> π 0 , so that η B and η D are <strong>parallel</strong>, pure <strong>force</strong>s, while η A and η C are puremoments orthogonal, respectively, <strong>to</strong> π A 12 and π C 12:⎡ ⎤ ⎡⎤¯η A 0 0.56165 0 0.82737⎢¯η B⎥⎣¯η C ⎦ = ⎢1 0.082399 0 0⎥⎣0 −0.20278 0 0.97922⎦ (1.45)¯η D 1 −0.11880 0 01.8.4 Singularities on BFor mechanism configurations with e ∈ B, either q L ∈ C L 3 or q L ∈ C L 4 (π L 45 ≡π 0 ) for someL. All these configurations are are IO-type singularities with respect <strong>to</strong> extrusion.As we showed, a leg with q L ∈ C L 4 leads <strong>to</strong> an RPM-type singularity; the number ofredundant passive dofs is the number of such legs.When q L ∈ C L 3 , the passive joints of the leg are linearly independent (dim V L = 2), but


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 23η C η Dη BCDBAη DDCη BAB(a)(b)leg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.9115 1.1469 0 0 .0898 .4 −.4 .1804 .1804B 1.9115 1.1469 0 1.5708 .0898 .4 1.2828 .8705 .8705(a) 2.9288 (a) .824 (a) .824C 1.9115 1.1469 0 3.1416 .0898 .4(b) 3.1416 (b) .924 (b) .924D 2.6761 1.7203 0 4.7124 .0898 .4 4.5925 .9253 .9253¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9605 .1947 −.1987−.1987 .9801 0 2.6761 1 1 1 1 1 1 1 1.1947 .0395 .9801Figure 1.16: (a) (RI, RO, IO, II, IIM and RPM)-singularity with e ∈ B, q A ∈ C D 4 , qL ∈ C L 11 ,L = B, C, D; η L , L = A, . . . , D (gray arrows) are pure <strong>force</strong>s in direction k, and ¯ζ D is throughO; η A , η B , η D are coplanar. (b) (IIM, RPM, RI, IO)-singularity with e ∈ B, q A ∈ C A 4 ,q C ∈ C C 1 , qL ∈ C L 11 , L = B, D; ηL , L = A, B, D (gray arrows) are pure <strong>force</strong>s in direction k;η A is through O.


24 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsη A ≡ η BABDCleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.9115 1.1469 0 0 .0898 .4 −.1794 .6702 .6702B 1.9115 1.1469 0 1.5708 .0898 .4 1.2828 .7232 .7232C 1.9115 1.1469 0 3.1416 .0898 .4 3.1416 .5388 .5388D 2.6761 1.7203 0 4.7124 .0898 .4 4.7124 .5364 .5364¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9605 .1947 −.1987−.1987 .9801 0 2.6761 1 1 1 1 1 1 1 1.1947 .0395 .9801Figure 1.17: (RI, IO, II, IIM)-singularity with e ∈ B, q L ∈ C L 31, L = A, B. The wrenchesη A ≡ η B (gray arrows) are pure <strong>force</strong>s through O in direction k.η BDCBξ RODη CCBη AAξ ROBAA(a)η D(b)(c)leg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A .8219 .4932 0 0 .0898 .4 −.1794 .6983 .6983B .8219 .4932 0 1.5708 .0898 .4 1.2828 .7619 .7619C .8219 .4932 0 3.1416 .0898 .4 2.9288 .8243 .8243D 1.1507 .7398 0 4.7124 .0898 .4 4.5925 .8227 .8227¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9605 .1947 −.1987−.1987 .9801 0 .5754 1 1 1 1 1 1 1 1.1947 .0395 .9801Figure 1.18: IIM-type singularity with e ∈ int(X) and q L ∈ C L 1 and ξL 1 ≡ ξL 3 , ∀L. In (b)the wrenches η L (gray arrows) of (a) are drawn with the lengths of their pitches, <strong>to</strong> show thelinear dependence; ξ ROis orthogonal <strong>to</strong> all four vec<strong>to</strong>rs normal <strong>to</strong> the leg planes π L 12 ≡ π L 23. In(c), same mechanism and configuration but with π B 12 , πD 12 ⊥ π 0; the moment components of allη L are coplanar.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 25Figure 1.19: The two possible leg working modes. The leg passes from the first one (left) <strong>to</strong>the second one (right), through a C 3 configuration (centre).its five joints (four passive and one active) are linearly dependent (dim W L = 2). Hence,there exists a set of four non-null passive velocities for every active velocity such that thefive velocities are feasible, although the platform is fixed. Hence, C 3 legs cause an RI-typesingularity. The leg has two working modes, as shown in Fig. 1.19; it passes from one <strong>to</strong> theother through a C L 3 or a CL 4 configuration.If q L ∈ C L 4 , P L is a 3-system (i.e., dim V L = 3); the configuration is an RI-type singularityonly if T L is also a 3-system (and dim W L = 3). A necessary condition for that is k L 1 ‖πL 23 .In conclusion, under the hypothesis π L 45 ≢π 0, a mechanism configuration with q L ∈ C L 3 ∪CL 41is both an IO-type and RI-type singularity; the number of redundant inputs (RI) is equal <strong>to</strong>the number of such legs (see Fig. 1.20).1.8.5 Leg singularities not on BWe consider mechanism configurations with q L ∈ C L 1 ∪CL 2 for all legs. Under the hypothesisπ45 L ≢π 0, such a configuration is an (RI, IO) singularity iff q L ∈ C L i1 , i = 1, 2 for at least one leg;in both cases, if α L 12 ≠ α L 23, then e ∈ ∂X − B, else e ∈ int(X). Figure 1.21 shows an examplewith e ∈ ∂X − B: q A ∈ C A 11 , while qL ∈ C L 1 , L = B, C, D; leg A instantaneously restricts theplatform rotation while its actuation is redundant, so the configuration is an RI- and IO-typesingularity. In Fig. 1.22(a) another example with e ∈ ∂X − B, q A ∈ C A 11 , qC ∈ C C 21 , qL ∈ C L 1 ,L = B, D. The configuration is an (RI, IO)-singularity with two redundant inputs.Figure 1.22(b) is an example of RI- and IO-type singularity with e ∈ int(X); q C ∈ C C 11,α C 12 ≡ αC 23 , ξC 1 ≡ ξC 3 , qL ∈ C L 1 , L = A, B, D. Since ξA 1 ≡ ξA 3 , instead of an infinitesimalrotation, the redundant input is any finite rotation of the L-th actua<strong>to</strong>r.1.9 Singular configurations with nonsingular legsThe analysis in the previous section shows that if no leg is singular, the only possiblesingularity class is (RO, II). When π L 45 ≢π 0 and α L 12 ≠ α L 23, “no singular legs” is equivalent <strong>to</strong>e ∈ int(X).In an RO-type singularity, the combined platform-constraint system V L loses dimension.Therefore, <strong>to</strong> detect these singularities we can consider a set of six wrenches, defined for everyconfiguration, that span V. They can be written as the rows of a matrix, J, the 6 ×6 Jacobianof the mechanism. A singularity for end-effec<strong>to</strong>r in int(X) occurs if and only if J is singular.In the following subsections we first obtain a convenient expression for the Jacobian matrix,then we discuss the kinematic behaviour of the mechanism in more detail and introduce a test


26 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsCDACDA(a)BB(b)leg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23(a) .6428 (a) .6428A 1.75 1 0 0 .0898 .45 0(b) .2712 (b) .2712B 1.75 .75 0 1.5708 .0898 .45 1.5708 .6428 .6428C 1.75 1 0 3.1416 .0898 .45 3.1416 .6428 .6428D 1.75 .75 0 4.7124 .0898 .45 4.7124 .6428 .6428¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9489 −.3156 0.3156 .9489 0 2.5617 1 1 1 1 1 1 1 10 0 1Figure 1.20: (RI, IO)-singularity with e ∈ B, q L ∈ C L 3 , L = A, C. In subfigure (b), thegeometry of leg C is changed so that q C ∈ C C 4 ; the configuration becomes also RPM-typesingular.BDACleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.75 1 0 0 .0898 .45 0 .7322 .7322B 1.75 .75 0 1.5708 .0898 .45 1.5708 .6428 .6428C 1.75 1 0 3.1416 .0898 .45 3.1416 .7322 .7322D 1.75 .75 0 4.7124 .0898 .45 4.7124 .6428 .6428¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.7953 .2278 −.5618−.3116 .9485 −.0564 1.75 1 1 1 1 1 1 1 1.5201 .2199 .8253Figure 1.21: (RI, IO)-singularity with e ∈ ∂X − B, q A ∈ C A 11, q L ∈ C L 1 , L = B, C, D.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 27CBADBDA(a)C(b)(a)(b)leg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.75 1 0 0 .0898 .45 0 .7636 .7636B 1.75 .75 0 1.5708 .0898 .45 1.5708 .6428 .6428C 1.75 1 0 3.1416 .0898 .45 3.1416 .8555 .8555D 1.75 .75 0 4.7124 .0898 .45 4.7124 .6428 .6428¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.3462 .8922 −.2901−.8904 .4099 .198 .875 1 1 1 1 1 1 1 1.2955 .1898 .9363¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9553 0 −.29550 1 0 .7875 1 1 1 1 1 1 1 1.2955 0 .9553Figure 1.22: (RI, IO)-singularity with e ∈ ∂X − B, q A ∈ C A 11, q C ∈ C C 21, q L ∈ C L 1 , L = B, D.<strong>to</strong> check if a configuration is singular.1.9.1 Computation of the full JacobianIn this section we compute the 4×4 and the 6×6 Jacobian matrices (Z and J, respectively)and show that J can be obtained geometrically and Z is one of its sub-matrices.We suppose that every leg is nonsingular, q L ∈ C L i − C L i1, i ∈ {1, 2}.A system of genera<strong>to</strong>rs of V is given by ϕ x , ϕ y and four wrenches, ζ L , one for each leg. Ifq L ∈ C L 1 , ζL is the pure <strong>force</strong> ϕ L ; if q L ∈ C L 2 it is the pure moment µL . The entries of the fullJacobian matrix J are the Plücker coordinates of the six wrenches of this basis with respect<strong>to</strong> Oijk:⎡ζ A ⎤ζ Bζ CJ =ζ D⎢ ⎥⎣ ϕ x⎦ϕ yT⎡f1 A f2 A f3 A | m A 1 m A 2 m A 3f1 B f2 B f3 B | m B 1 m B 2 m B 3f1 C f2 C f3 C | m C 1 m C 2 m C 3=f⎢1 D f2 D f3 D | m D 1 m D 2 m D 3⎣ 1 0 0 | 0 0 00 1 0 | 0 0 0⎤⎥⎦T(1.46)In a non-singular configuration, the rank of J is six. We consider the four 4-dimensionalwrenches ¯ζ L , obtained from the corresponding ζ L by erasing the <strong>force</strong> components along i andj.⎡¯ζ A ⎤ ⎡⎤f ¯ζ B3 A m A 4 m A 5 m A 6⎢⎣¯ζ C⎥⎦ = f3 B m B 4 m B 5 m B 6(1.47)⎢¯ζ D ⎣f3 C m C 4 m C 5 m C ⎥6 ⎦f3 D m D 4 m D 5 m D 6


28 Chapter 1: Kinematics and singularities of a new class of 4-dof PMss 1 = (0, 0, 0,1, 0, 0)IID s 2 = (0, 0, 0,0, 1, 0)s 3 = (0, 0, 0,0, 0, 1)s 1 = (1, 0, 0,0, 0, 0)IIC(p = 0) s 2 = (0, 0, 0,0, 1, 0)s 3 = (0, 0, 0,0, 0, 1)s 1 = (1, 0, 0, p,0, 0)IIC(p ≠ 0) s 2 = (0, 0, 0,0, 1, 0)s 3 = (0, 0, 0,0, 0, 1)s 1 = (1, 0, 0,0, 0, 0)IC(p ≠ 0) s 2 = (0, 0, 0,0, 1, 0)s 3 = (0, 0, 0,1, 0, p)s 1 = (1, 0, 0,0, 0, 0)IC 0 s 2 = (0, 0, 0,0, 1, 0)s 3 = (0, 0, 0,1, 0, 0)s 1 = (1, 0, 0,0, 0, 0)IIA(p = 0) s 2 = (0, 1, 0,0, 0, 0)s 3 = (0, 0, 1,0, 0, 0)IIBs 1 = (1, 0, 0, p,0, 0)s 2 = (0, 1, 0,0, p,0)s 3 = (0, 0, 0, 0,0, 1)s 1 = (1, 0, 0, p a,0, 0)IB 0 (p a ≠ p b ) s 2 = (0, 1, 0, 0, p a, 0)s 3 = (0, 0, 0, 1,0, p b )s 1 = (1, 0, 0, p a,0, 0)IB 3 (p ≠ 0) s 2 = (0, 1, 0, 0, p b , 0)s 3 = (0, 0, 0, 0,0, 1)IIA(p ≠ 0)s 1 = (1, 0, 0, p,0, 0)s 2 = (0, 1, 0,0, p,0)s 3 = (0, 0, 1,0, 0, p)s 1 = (1, 0, 0, p a,0, 0)IA 2 (p a ≠ p b ) s 2 = (0, 1, 0, 0, p b , 0)s 3 = (0, 0, 1, 0,0, p b )s 1 = (1, 0, 0, p a,0, 0)IA 1 (p i ≠ p j ) s 2 = (0, 1, 0, 0, p b , 0)s 3 = (0, 0, 1,0, 0, p c)Table 1.3: The ten possible 3-systems.ζ C ζ Dζ B ζ A¯ζ C¯ζ D¯ζ A¯ζ BFigure 1.23: A mechanism with the pure <strong>force</strong>s ζ L and the corresponding ¯ζ L ; q A ∈ C A 2 , henceζ A is orthogonal <strong>to</strong> k and ¯ζ A is the pure moment µ A .The four ¯ζ L are linearly dependent iff J is singular, as suggested by Eq. (1.46). Figure 1.23shows an example of a mechanism with the four ζ L and their corresponding ¯ζ L .The direction of every finite-pitch wrench belonging <strong>to</strong> the system ¯V =Span (¯ζ A , ¯ζ B , ¯ζ C , ¯ζ D ) is k. The direction of every pure moment belonging <strong>to</strong> ¯V is n L 23,since the moment component, [m L 1 , mL 2 , mL 3 ], of every ϕL and µ L is orthogonal <strong>to</strong> π L 23 .The 4×4 Jacobian gathers the non-zero components of ¯ζ A , ¯ζ B , ¯ζ C and ¯ζ D , from the third<strong>to</strong> the sixth. By considering the mechanism geometry and normalizing the wrenches with


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 29respect <strong>to</strong> their moment components, we obtain:⎡Z =⎢⎣− 1r A 45n A 23 · kA 4 | n A 23− 1r B 45n B 23 · k B 4 | n B 23− 1r C 45n C 23 · k C 4 | n C 23− 1r D 45n D 23 · kD 4 | n D 23⎤⎥⎦T(1.48)In the following, the mechanism singular configurations are analysed by referring <strong>to</strong> Zinstead of the full Jacobian J.1.9.2 Singularity checkIn an RO-type singular configuration, the four ¯ζ L become linearly dependent and dim ¯V 3: we consider only the case dim ¯V = 3. The four ¯ζ L span a 3-system. The possible 3-systemsof screws are shown in Tab. 1.3. We can immediately exclude some of them: the finite-pitchwrenches belonging <strong>to</strong> ¯V are all <strong>parallel</strong>, so the only types of 3-systems they can span are: IID,IIC(p = 0), IIC(p ≠ 0), IC(p ≠ 0), IC 0 .In the following we propose a test <strong>to</strong> check if in a given configuration the four ¯ζ L belong<strong>to</strong> one of these 3-systems. The test changes depending on the number of ¯ζ L which are puremoments. If not all are pure moments, ¯V is an IC-type or IIC-type 3-system. An analogousexpression for the redundant platform mobility is obtained in all cases.If we normalize any ¯ζ L with respect <strong>to</strong> the <strong>force</strong> component (by dividing by the magnitudeof the <strong>force</strong> component, if it is not zero) the results of the analysis are the same. In thefollowing, when the <strong>force</strong> component is not null, we use normalized wrenches ( 0, 0, 1 | m L ) .Test in case of no pure momentsAll four ¯ζ A , ¯ζ B , ¯ζ C , ¯ζ D have finite pitch and ¯V is an IC-type 3-system.We consider the 4×4 Jacobian matrix that gathers on rows the four wrenches ¯ζ L , normalizedwith respect <strong>to</strong> the <strong>force</strong> component:⎡1 m A ⎤⎢1 m B⎥⎣1 m C ⎦ (1.49)1 m DInstead of matrix (1.49) we can use the equivalent matrix:⎡1 m A ⎤⎢0 m B − m A⎥⎣0 m C − m A ⎦ (1.50)0 m D − m AWe represent each ¯ζ L by its pitch p L and by the i and j coordinates, x L , y L , of the pointwhere it intersects π 0 . These parameters can be simply obtained from the entries of ¯ζ L .


30 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsMatrix (1.50) is singular iff:y B − y A x A − x B p B − p A ∣ ∣∣∣∣∣ y C − y A x A − x C p C − p A = 0 (1.51)∣y D − y A x A − x D p D − p AEquation (1.51) can be used as a singularity test <strong>to</strong> effectively check if a configuration issingular in the case that none of the four ¯ζ L is a pure moment. Geometrically, this means <strong>to</strong>verify that the tips of four directed line segments, whose common direction is k, whose pointsof application have coordinates ( x L , y L , 0 ) and whose lengths are the pitches p L , lie in thesame plane (Fig. 1.24).If Eq. (1.51) holds, then system V 0 is a 5-system and the platform has one redundant outputfreedom, represented by the twist ξ RO. Its expression is:ξ RO= (n | 0, 0, m) (1.52)Figures 1.25 and 1.26 show the platform constraint and the twist ξ ROof the platformredundant motion for the same mechanism and configuration of Fig. 1.24: e ∈ int(X), q L ∈C L 1 , L = A, . . . , D. The end-effec<strong>to</strong>r belongs <strong>to</strong> int(X) and all four ¯ζ L have finite pitch;matrix (1.49) becomes:⎡¯ζ A ⎤ ⎡⎤1 −0.16646 −0.095833 −1.0418¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢1 0.095833 0.67164 4.2035⎥⎣1 −0.097990 0.095833 0.61327⎦ (1.53)¯ζ D 1 −0.14008 −0.051948 0.58206The twist ξ ROof the redundant platform mobility is:(0.96217, −0.27232, −0.00827 0, 0, 0.12545)(1.54)Since ξ ROis reciprocal <strong>to</strong> the platform constraint, the vec<strong>to</strong>r n and the scalar m satisfythe equations:⎧n · m⎪⎨D + m = 0n · m C + m = 0n · m ⎪⎩B (1.55)+ m = 0n · m A + m = 0We solve <strong>to</strong> obtain:ξ RO= ((m B −m A )×(m C −m A ) | 0, 0, −(m A ×m B ) · m C ) (1.56)All the pure moments belonging <strong>to</strong> V are orthogonal <strong>to</strong> n. The moment component m ofξ ROis equal <strong>to</strong> the scalar product n · m L , where L is indifferently A, B, C or D.If the pitches of the four wrenches ¯ζ L are the same, then ¯V is an IIC-type system andn ‖ k. The twist ξ ROhas direction k, is through O and its pitch is h = m/ |n|. In Fig. 1.27 anexample of one such mechanism configuration and the corresponding redundant mobility.Test in case of one pure momentOne ¯ζ L , say ¯ζ D , is a pure moment and ¯V is an IC-type 3-system. We proceed as in the caseof no pure moments; the Jacobian matrix, normalized with respect <strong>to</strong> the <strong>force</strong> components of


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 31CBCA BDAD(a)(b)leg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 0 .7071 .7071B 1.25 .75 0 1.5708 .0898 .4 1.5708 .7071 .7071C 1.25 .75 0 3.1416 .0898 .4 3.1416 .7071 .7071D 1.75 1.125 0 4.7124 .0898 .4 4.7124 .7071 .7071¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9981 0 .06110 1 0 .7819 1 1 1 1 −1 1 1 1−.0611 0 .9981Figure 1.24: RO-type singularity with e ∈ int(X), q L ∈ C L 1 , L = A, . . . , D, seen from twodifferent points of view. The arrows represent the ¯ζ L , each with a length equal <strong>to</strong> its pitch;the tips of the arrows are coplanar (b).the wrenches on its rows, is:⎡1 m A ⎤⎢1 m B⎥⎣1 m C ⎦ (1.57)0 m Dwhere:Matrix (1.57) is singular iff m B − m A , m C − m A and m D are linearly dependent, i.e.:m D · n = 0 (1.58)n = (m B ×m C + m C ×m A + m A ×m B ) == (m B −m A )×(m C −m A )(1.59)For a given mechanism configuration such that one of the four ¯ζ L is a pure moment andthe moment components of the other three ¯ζ L are linearly independent, the singularity testconsists of checking if Eq. (1.58) holds.The components of n, expressed by referring <strong>to</strong> the pitch p L and <strong>to</strong> the i and j coordinates,


32 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsξ ROFigure 1.25: RO-type singularity same as in Fig. 1.24; ξ ROhas pitch −0.00104 lrad, where l isthe unit length. The four gray arrows represent the pure <strong>force</strong>s ϕ L .ξ RO(a)(b)Figure 1.26: RO-type singularity same as in Fig. 1.24. In (b) the same mechanism from anotherpoint of view, with ξ ROpointing outward the sheet. The other arrows represent the platformvelocities at the platform points where they are applied.x L , y L , of the point of intersection between ¯ζ L and π 0 , L = A, B, C, are:n 1 = p l (x m −x n ) + p m (x n −x l ) + p n (x l −x m )n 2 = p l (y m −y n ) + p m (y n −y l ) + p n (y l −y m )n 3 = x l (y m −y n ) + x m (y n −y l ) + x n (y l −y m )(1.60)where (l, m, n) stand for any cyclic permutation of (A, B, C).Every pure moment in Span (¯ζ A , ¯ζ B , ¯ζ C ) is orthogonal <strong>to</strong> n. The singularity test expressedby m D · n = 0 consists of checking if ¯ζ D <strong>to</strong>o is orthogonal <strong>to</strong> n; if true, the four ¯ζ L are linearlydependent.If ¯ζ A , ¯ζ B and ¯ζ C have the same pitch, then ¯V is an IIC-type 3-system.The redundant platform mobility is represented by a twist ξ ROwhose structure is againthat of Eq. (1.52).Figures 1.28, 1.29(a) and 1.29(b) show an example of RO-singular configuration withe ∈ int(X) and one pure moment ¯ζ D ; for these particular geometry and configuration, matrix(1.57) becomes:⎡¯ζ A ⎤ ⎡⎤1 0.067760 −0.11014 −0.33583¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢1 0.11014 0.070368 −0.34875⎥⎣1 0.089957 0.11014 0.44583 ⎦ (1.61)¯ζ D 0 0 0.15748 0.98752


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 33leg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.5714 .5143 0 0 .1257 .6283 0 .7071 .7071B 1.5714 .5143 0 1.5708 .1257 .6283 1.5708 .7071 .7071C 1.5714 .5143 0 3.1416 .1257 .6283 3.1416 .7071 .7071D 1.5714 .5143 0 4.7124 .1257 .6283 4.7124 .7071 .7071¡Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D1 0 00 1 00 0 1¢£ 1.8571 1 1 1 1 −1 −1 −1 −1Figure 1.27: A mechanism with a symmetric geometry and four identical legs shown in fiveconsecutive configurations, all with k vertical. The pictures illustrate the redundant platformmobility; the mobile platform swirls around k. At each step the translation is coupled with arotation about k by the pitch of ξ RO. Although the platform is moving, the first link of eachleg remains fixed.The twist ξ ROof the redundant platform mobility is:(0.97347, −0.22597, 0.03604 0, 0, −0.07875)(1.62)Test in case of two pure momentsTwo ¯ζ L , say ¯ζ C and ¯ζ D , are pure moments. The Jacobian matrix, normalized with respect<strong>to</strong> the <strong>force</strong> components of the wrenches on its rows, is:⎡1 m A ⎤⎢1 m B⎥⎣0 m C ⎦ (1.63)0 m DMatrix (1.63) is singular iff:where(m B − m A ) · n = 0 (1.64)n = m C × m D (1.65)We have:(m B −m A ) = (y B −y A , x A −x B , p B −p A ) (1.66)If n ‖ k, then ¯V is an IIC-type 3-system and every pure moment belonging <strong>to</strong> ¯V is <strong>parallel</strong><strong>to</strong> π 0 .The redundant twist ξ ROis expressed again by Eq. (1.52), where the moment component


34 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsDCABCBAζ Dξ ROζ DDξ RO(a)(b)leg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 0 .8324 .8324B 1.25 .75 0 1.5708 .0898 .4 1.5708 .8253 .8253C 1.25 .75 0 3.1416 .0898 .4 3.1416 .8324 .8324D 1.75 1.125 0 4.7124 .0898 .4 4.7124 .7791 .7791¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.8374 −.525 .152.51 .8506 .128 1.25 1 1 1 1 −1 1 1 1−.1964 −.0297 .9801Figure 1.28: RO-type singularity with e ∈ int(X), q D ∈ C D 2 , qL ∈ C L 1 , L = A, B, C; the pitchof ξ ROis −0.00284 lrad . The cylindrical arrows represent the pure <strong>force</strong>s ϕL . In (b) the samemechanism from another point of view; ζ D is <strong>parallel</strong> <strong>to</strong> π 0 .m is:m = −n · m A = −n · m B (1.67)If ¯V is an IIC-type 3-system, then ξ ROis through O and its pitch is h = m A · k.Figure 1.30 shows an RO-type singularity with e ∈ int(X), q L ∈ C L 2 , L = B, D, qL ∈ C L 1 ,L = A, C: ¯ζ B and ¯ζ D are pure moments; matrix (1.63), in this case, becomes:⎡¯ζ A ⎤ ⎡⎤1 0.72618 −0.11014 −3.5990¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢0 0 −0.19779 0.98025⎥⎣1 0.72618 0.11014 3.5990 ⎦ (1.68)¯ζ D 0 0 0.15748 0.98752The twist ξ ROof the redundant platform mobility is:(1, 0, 0 0, 0, −0.7262)(1.69)Figure 1.31 represents another example of RO-type singularity with e ∈ int(X), q L ∈ C L 2 ,L = B, D, q L ∈ C L 1 , L = A, C. Matrix (1.63) in this case is:⎡¯ζ A ⎤ ⎡⎤1 −0.0034568 −0.10536 0.23835¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢0 0 −0.014501 0.99989⎥⎣1 −0.0034568 0.10536 −0.23835⎦ (1.70)¯ζ D 0 0 0.030218 0.99954The twist ξ ROof the redundant platform mobility is:(1, 0, 0 0, 0, 0.003457)(1.71)


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 35DCBC¯ζ DB¯ζ CD¯ζBA(a)ξ RO¯ζ AA(b)Figure 1.29: RO-singularity same as in Fig. 1.28: (a) the pitch of ξ ROis −0.00284 lrad andthe gray arrows on the platform represent the velocities at the platform points where they areapplied; (b) the arrows show the ¯ζ L .Test in case of three pure momentsThree ¯ζ L , say ¯ζ B , ¯ζC , ¯ζD , are pure moments. The Jacobian matrix, normalized withrespect <strong>to</strong> the <strong>force</strong> components of the wrenches on its rows, is:⎡1 m A ⎤⎢0 m B⎥⎣0 m C ⎦ (1.72)0 m DMatrix (1.72) is singular iff the three pure moments ¯ζ B , ¯ζ C , ¯ζ D are coplanar:(m B ×m C ) · m D = 0 (1.73)The singularity test consists of checking if Eq. (1.73) holds.If the directions of ¯ζ B , ¯ζ C and ¯ζ D are orthogonal <strong>to</strong> k, then ¯V is an IIC-type 3-system.The redundant twist is expressed again by Eq. (1.52), where n is the cross-product of thedirections of two of ¯ζ B , ¯ζ C , ¯ζ D , and m = −n · m A .Figures 1.32 and 1.33 show a RO-type singularity with q L ∈ C L 2 , L = C, D, q B ∈ C B 4 : ¯ζ B ,¯ζ C , ¯ζ D are pure moments, and matrix (1.72) becomes:⎡¯ζ A ⎤ ⎡⎤1.0 −0.19187 −0.10365 0.40350¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢ 0 0 −0.86108 0.50847⎥⎣ 0 0 0 1.0 ⎦ (1.74)¯ζ D 0 0 0.31780 0.94816The twist ξ ROof the redundant platform mobility is:(1, 0, 0 0, 0, 0.19187)(1.75)Test in case of four pure momentsAll four ¯ζ L are pure moments and ¯V is an IID 3-system. The redundant twist is a puremoment in direction k. Figure 1.34 shows one of these mechanism configurations with e ∈


36 Chapter 1: Kinematics and singularities of a new class of 4-dof PMs¯ζ A¯ζ B¯ζ DB¯ζCDCξ ROAleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 0 .3363 .3363B 1.25 .75 0 1.5708 .0898 .4 1.5708 −.1265 −.1265C 1.25 .75 0 3.1416 .0898 .4 3.1416 .7813 .7813D 1.75 1.125 0 4.7124 .0898 .4 4.7124 .8814 .8814¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9589 −.1151 −.2593.0801 .9867 −.1417 1.25 1 1 1 1 1 1 1 1.2722 .1151 .9553Figure 1.30: An RO-type singularity with e ∈ int(X) and q L ∈ C L 2 , L = B, D, qL ∈ C L 1 ,L = A, C; ξ ROis a pure rotation.int(X) and q L ∈ C L 2 , for all legs; in this case, the four ¯ζ L are:⎡¯ζ A ⎤ ⎡⎤0 −0.048443 0 0.12221¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢0 0 −0.050498 0.12740⎥⎣0 0.048443 0 0.12221⎦ (1.76)¯ζ D 0 0 0.050498 0.12740Figures 1.35 and 1.36 show another RO-type singularity with q L ∈ C L 2 , L = A, C, D,q B ∈ C B 4 ; the ¯ζ L are the pure moments:⎡¯ζ A ⎤ ⎡⎤0 −0.51189 0 0.85905¯ζ B⎢⎣¯ζ C ⎥⎦ = ⎢0 0 −0.86108 0.50847⎥⎣0 0.42945 0 0.90309⎦ (1.77)¯ζ D 0 0 0.31780 0.94816


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 37¯ζ D¯ζ B¯ζCC¯ζ ADBξ ROAleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 0 .9364 .9364B 1.25 .75 0 1.5708 .0898 .4 1.5708 .8649 .8649C 1.25 .75 0 3.1416 .0898 .4 3.1416 .7813 .7813D 1.75 1.125 0 4.7124 .0898 .4 4.7124 .9281 .9281¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.951 −.2964 −.0876.2932 .9549 −.0479 1 1 1 1 1 1 1 1 1.0978 .0198 .995Figure 1.31: An RO-type singularity with e ∈ int(X), q L ∈ C L 2 , L = B, D, qL ∈ C L 1 , L = A, C;ξ ROis a pure rotation.1.10 ConclusionsAs a conclusion, just few short final remarks about the main research <strong>contributions</strong> providedin the chapter.The chapter deals with a new class of fully <strong>parallel</strong>, 4-dof PMs. The first part presentsan analytical form solution of the inverse kinematics. It also presents a relatively simpleformulation of the forward kinematics of an interesting mechanism subclass, including somenew PMs with special geometries. A great attention has been spent <strong>to</strong> obtain a mathematicalmodel free of mathematic singularities, i.e., valid in all configurations.The second part of the chapter provides an analysis of the configuration space singularities.It is shown that, under certain hypotheses, the RPM-type singular configurations only occuron the workspace boundary. With the exception of some particular mechanism geometries,the RI-, IO- and IIM-type singularities are also restricted <strong>to</strong> the workspace boundary.The singular configurations with an end-effec<strong>to</strong>r in the workspace interior are generally ROtypeand II-type singularities. They can be identified by checking the dimension of the systemof wrenches W constraining the mobile platform. Four simple tests are proposed, dependingon the number of pure moments in the available basis of W; moreover, these tests provide anexpression of the redundant motion of the mobile platform.The method of analysis that has been followed, although applied <strong>to</strong> a particular mechanism,is general. The basic approach is <strong>to</strong> create a fully parametric 3D virtual mock-up of themechanism, based on a strong mathematic model. The kinematics has been solved and aparametric kinematic model of the mechanism architecture has been written. This modelhas been implemented in the MAPLE language <strong>to</strong>gether with a library of computationaland graphical routines required <strong>to</strong> build the mock-up, analyse the architecture, visualize themechanism behaviour and verify the results of the singularity analysis. Since most such routinesare general, they can be reused for different <strong>mechanisms</strong> (see Section Algorithms A). Theappearance of the mock-up can be selected <strong>to</strong> focus on particular aspects, e.g. the pose of


38 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsCBDAξ ROleg r L 4 /lA 45 r L 5 /lA 45 h L /l A 45 θ L 5 [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.25 .75 0 0 .0898 .4 0 .8335 .8335B 1.25 .75 0 1.5708 .0898 .4 1.5708 .3523 .3523C 1.25 .75 0 3.1416 .0898 .4 3.1416 .7166 .7166D 1.75 1.125 0 4.7124 .0898 .4 4.7124 .1517 .1517¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9461 −.213 .2439.1754 .9702 .1669 1.5811 1 1 1 1 1 1 1 1−.2722 −.1151 .9553Figure 1.32: RO-singularity with e ∈ B, q L ∈ C L 2 , L = C, D, qB ∈ C B 4 , qA ∈ C A 1 . The grayarrows represent the four ζ L ; ζ B is through O in direction k B 4 ; ξ ROis a pure rotation.the legs or the platform twist. So, it is possible, for example, <strong>to</strong> hide some links in order <strong>to</strong>have a better look of some parts of the mechanism; the shape and color of the links can bechanged; it is possible <strong>to</strong> visualize, <strong>to</strong>gether with the mechanism mock-up, every screws andvec<strong>to</strong>rs with any particular meaning in order <strong>to</strong> look at their spatial position from every poin<strong>to</strong>f view; planes, lines and points can be analogously displayed.The mock-up is a mere embodiment of the mathematical model and directly representsmathematical objects; the user can choose <strong>to</strong> see only what he or she desires without beingdistracted by other elements of the analysis. Standard <strong>to</strong>ols for kinematic or multibody simulationare based on numerical routines, are not really parametric, are anything but smart,flexible and essential (since they are not cus<strong>to</strong>mized nor cus<strong>to</strong>mizable, they provide an exuberan<strong>to</strong>r incomplete graphic and numeric output). Indeed, the user can only accede a se<strong>to</strong>f predefined functions and, for example, one cannot compute a particular screw, or visualizeany desired significant vec<strong>to</strong>r, or directly check if a set of wrenches is linearly dependent andthe dimension of the system they span. Although it may appear complicated, this method isvery effective and, in the long-run, time-saving. Thus, all shown pictures have been generatedby MAPLE au<strong>to</strong>matically and very quickly, without image postprocessing (MAPLE provideshigh-level routines <strong>to</strong> control the output of postscript image files). Moreover, the images areexact, since they simply represent the virtual mock-up of the mechanism.The equations obtained in the first part of the chapter are the base for the singularityanalysis presented in the second part, and are the base of any further investigation, such asworkspace and <strong>force</strong> transmission analysis, as well as for the design or the implementation ofthe control. Challenging open problems, related <strong>to</strong> the solution of the direct kinematics andthe evaluation of the number of possible solutions, remain.


Chapter 1: Kinematics and singularities of a new class of 4-dof PMs 39¯ζCC¯ζ A A¯ζ BD(a)B¯ζ D ξ RODC(b)A¯ζ Aξ ROFigure 1.33: An RO-type singularity with e ∈ B, q L ∈ C L 2 , L = C, D, q B ∈ C B 4 , q A ∈ C A 1 .The pure moments ¯ζ B , ¯ζ C , ¯ζ D (prismatic arrows) are coplanar; ξ ROis a pure rotation.ξ ROCADBleg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.75 1.75 0 0 .0898 .25 0 .5 .5B 1.75 1.375 0 1.5708 .0898 .25 1.5708 .5 .5C 1.75 1.75 0 3.1416 .0898 .25 3.1416 .5 .5D 1.75 1.375 0 4.7124 .0898 .25 4.7124 .5 .5¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9931 −.1172 0.1172 .9931 0 1.7704 1 1 1 1 1 1 1 10 0 1Figure 1.34: RO-singularity with e ∈ int(X) and q L ∈ C L 2 , for all legs. The gray arrowsrepresent the leg wrenches µ L ; ξ RO⊥ π 0 is a pure translation.


40 Chapter 1: Kinematics and singularities of a new class of 4-dof PMsDCAξ ROBleg r4 L /lA 45 r5 L /lA 45 h L /l A 45 θ5 L [rad] αL 34 [rad] αL 1 [rad] βL 1 [rad] cos αL 12 cos α L 23A 1.4089 .8454 0 0 .0898 .4 0 .5403 .5403B 1.4089 .8454 0 1.5708 .0898 .4 1.5708 .3523 .3523C 1.4089 .8454 0 3.1416 .0898 .4 3.1416 .3924 .3924D 1.9725 1.268 0 4.7124 .0898 .4 4.7124 .1517 .1517¡¢£Rotation Matrix h/l A 45 ε A ε B ε C ε D δ A δ B δ C δ D.9461 −.213 .2439.1754 .9702 .1669 1.7822 1 1 1 1 1 1 1 1−.2722 −.1151 .9553Figure 1.35: RO-type singularity with an end-effec<strong>to</strong>r in B and q L ∈ C L 2 , L = A, C, D, andq B ∈ C B 4 . The gray arrows represent the four ζ L ; ξ ROis a pure translation.ξ ROCABξ ROA BDCDFigure 1.36: RO-type singularity as in Fig. 1.35. All ¯ζ L are pure moments (square arrows).


Chapter 2ArmillEye2.1 Chapter overviewThe chapter presents a class of 3-dof, hybrid architectures with one translational and tworotational freedoms. The leg chains are not independent, as in purely <strong>parallel</strong> <strong>mechanisms</strong>,but connected each other by bridge links (interconnected chains (IC) <strong>mechanisms</strong>). Mobilityand kinematics of one of these architectures, named ArmillEye, are discussed in detail. Somespecial geometries are proposed, among which one particularly suitable <strong>to</strong> support a visionsystem. A 4-dof version of ArmillEye is also shown and briefly discussed.2.2 IntroductionThis chapter opens with some remarks about synthesis of <strong>mechanisms</strong> that generate planarmotion versus synthesis of <strong>mechanisms</strong> that generate motion on spherical surfaces.The sections that follow present a class of hybrid 3-dof architectures providing two rotationaland one translational mobility. These architectures have a spherical section (a part ofthe mechanism that we name spherical section), whose architecture is the same for all of them,and a translational section that makes the difference between them. The progeni<strong>to</strong>r of thesearchitectures, ArmillEye, has been conceived as the support mechanism of an underwater visionsystem, while looking for a pan-tilt mechanism with an additional translational freedom(see Section 2.10.1).The chapter concludes with the discussion of a variant of these 3-dof architectures withone additional rotational mobility (hence 4-dof). The idea of these variants comes from acomparison of ArmillEye with the 4-dof <strong>mechanisms</strong> discussed in Chapter 1.The mechanism of Chapter 1 has been found while thinking <strong>to</strong> a redesign of Agile Eye withone more translational freedom. ArmillEye has been designed as a pan-tilt mechanism withone translational freedom and decoupled rotational freedoms. In both cases, the approach<strong>to</strong> the synthesis has not been algorithmic nor structured, but based on ideas from statedrequirements on mobility and workspace. On this premise, the first section of this chaptertries <strong>to</strong> note an analogy between planar and spherical <strong>mechanisms</strong> and outlines a possible,practical methodology for the synthesis of <strong>mechanisms</strong> with some spherical mobility.Purely <strong>parallel</strong> PMs are composed of a platform connected <strong>to</strong> the base by independent,actuated serial chains. For this reason, in the most of cases, the inverse position analysis isrelatively simple, while the direct position analysis is much more difficult. For IC PMs bothforward and inverse position analyses can be difficult, since in both cases it is necessary <strong>to</strong>write and solve closure equations involving more than one leg. The direct position problem ofArmillEye is solved by introducing the simplifying hypothesis that a part of the mechanism issymmetric. An analytic form solution for the inverse position problem is not provided.The analyses have been performed following the method of the mathematical mock-up,41


42 Chapter 2: ArmillEyespherical rodplanar rod(a) Agile Eye (courtesy Labora<strong>to</strong>irede Robotique, Université Laval)spherical crank(b) 3RRR sphericalplanar crank(c) 3RRR planarFigure 2.1: Agile Eye (a), its kinematics scheme (b) and the analogous planar 3RRR architecture(c).same as in Chapter 1. A specific library of graphics and analysis functions has been implementedin MAPLE language; it is reported in Section Algorithms C.ArmillEye has been developed as a part of the European Project Sub Bot<strong>to</strong>m Cutter, fundedby the European Commission under the GROWTH EC Programme (G1RD-CT-2000-03007),and patented 1 by project funding. The EU Commission is hereby kindly acknowledged.2.3 Remarks about synthesis of PMs with spherical mobilityPlanar <strong>mechanisms</strong> are more intuitive than spherical <strong>mechanisms</strong> and lot of scientific literaturedeals with them. Many architectures have been recognised and described. This sectionhighlights a kinematics analogy between <strong>mechanisms</strong> with some planar mobility and <strong>mechanisms</strong>with some spherical mobility. The aim is <strong>to</strong> show that interesting hybrid architecturesproviding some spherical mobility can be obtained by means of analogy from planar architecturesand architectures presenting some equivalent planar bond within their leg chains.Significant traces of this analogy between planar and spherical bonds have recently appearedin [15].Consider Agile Eye, Fig. 2.1(a), the well known architecture proposed by C. Gosselin( [16,17] et alia). The leg chains are spherical crank-rod bonds composed of two links and tworevolute joints each one; the rods are connected <strong>to</strong> the end-effec<strong>to</strong>r body by revolute joints(Fig. 2.1(b)). All joint axes intersect in the common point O. The base joint of each leg chainis actuated. The end-effec<strong>to</strong>r has a spherical mobility about O. In a physical embodimentwe can describe this spherical mobility by saying that the end-effec<strong>to</strong>r moves on a sphericalsurface, whose radius depends on the design of the links of the mechanism, and rotates abouta radial axis.Suppose, now, that the axes of the revolute joints are all <strong>parallel</strong> instead of intersecting atO. This is like imaging <strong>to</strong> restrict the mobility of the end-effec<strong>to</strong>r <strong>to</strong> a small spherical angle,by means of links spanning very small angles; at the limit, the end-effec<strong>to</strong>r translates on thetangent plane (orthogonal <strong>to</strong> the joint axes) and rotates about a direction orthogonal <strong>to</strong> thisplane. The spherical crank-rod bonds become planar crank-rod links. The result is the 3RRRplanar architecture (Fig. 2.1(c)). So, Agile Eye is the “spherical version” of the well known1 PCT Application PCT/EP03/51097 priority GE2003 A 000040


Chapter 2: ArmillEye 43planar rod(a)planar crank(b)Figure 2.2: The 4-dof version of Agile Eye (a) and the equivalent planar 4RRRRR mechanism(b).planar 3RRR mechanism. The analogy works under every kinematical point of view, e.g. forsingularities.Consider, now, the architecture presented in the previous Chapter 1. Each leg has aspherical section composed of a spherical crank-rod bond, with joint axes intersecting in thecommon centre of rotation O, and a translational section with two <strong>parallel</strong> revolute joints.The first joint is actuated. If we replace the first three joints of the leg with <strong>parallel</strong> revolutejoints, the mobility of the third link from spherical becomes planar. The four legged version ofthe architecture (Fig. 2.2(a)) is analogous <strong>to</strong> a 4RRRRR architecture (Fig. 2.2(b)) that is alsoequivalent (with all actua<strong>to</strong>rs free) <strong>to</strong> a 4FRRR mechanism. Both these “planar versions” ofthe mechanism was known before the spherical version were presented.The outlined analogy works also in presence of prismatic joints, which are replaced byrevolute joints through the spherical center, suitably disposed with axes orthogonal <strong>to</strong> thedirection of the prismatic joint.Many other examples can be pointed out among which the architecture discussed in thischapter. In fact these remarks about the analogy come a posteriori as a result of the workdone on this architecture.2.4 The class of architecturesEach architecture in the considered class is composed of a 3-dof spherical mechanism (thatwe name spherical section) carrying a 1-dof translational mechanism (named translationalsection) (Fig. 2.3). The difference is made by the translational section, while the architectureof the spherical section is always the same. The translational mechanism is actuated by thespherical mechanism and its output is a translational freedom. Since it is oriented as a whole bythe spherical mechanism, its end-effec<strong>to</strong>r link (which is also the end-effec<strong>to</strong>r link of the wholemechanism) has two rotational freedoms about a fixed point and one translational freedomalong an axis fixed <strong>to</strong> the end-effec<strong>to</strong>r.In order <strong>to</strong> make more understandable the presentation, in the following we describe, first,the spherical mechanism, then the translational mechanism. The sections that follow discussmobility and kinematics.


44 Chapter 2: ArmillEyebaseend-effec<strong>to</strong>rplanar crank1-dofmechanism1-dofmechanismend-effec<strong>to</strong>rinput angletranslational sectionplanar roddouble planar crank(a)(b)Figure 2.3: Schematic representation of the generic architecture in the class (a) and the equivalentplanar mechanism (b).(a) US 5,966,991 (b) US 5,243,873 (c) US 4,628,765Figure 2.4: Referred patents.Spherical sectionThe spherical section is composed of two terminal links and four interconnected sphericalcrank-rod chains centred at the fixed point O (Fig. 2.5(a)). By spherical crank-rod chain (orcrank-rod bond) we mean a kinematic chain composed of two members, crank and rod, andthree revolute joints, one connecting the crank <strong>to</strong> the rod (elbow joint). The axes of the threerevolute joints intersect at the centre O of the spherical crank-rod bond, which is the centre ofthe output spherical motion allowed by the bond. The non-elbow revolute joint connected <strong>to</strong>the crank is actuated. The crank-rod bond is connected <strong>to</strong> other kinematic chains or bodiesby the non-elbow revolute joint connected <strong>to</strong> the rod. In the knowledge of the author, the firstidea <strong>to</strong> use spherical crank-rod bonds for the orientation of a rigid body in space has been ofC. Gosselin, with the well known Agile Eye just discussed in Section 2.3 ( [16,17] et alia). Asecond mechanism using two spherical crank-rod bonds is the 2-dof version of Agile Eye, againby C. Gosselin and F. Caron, United States Patent Number: 5,966,991, Date of patent: Oct.19, 1999 (Fig. 2.4(a)). This is the spherical version of a planar 5-bar linkage, proposed as anorient device and in particular as a camera support with camera view axis orthogonal <strong>to</strong> bothrod joint axes of one of the two rods of the mechanism. Basically, we find a trace of the samekinematics also in the two previous patents: United States Patent Number: 4,628,765, Dateof Patent: Dec. 16, 1986 (Fig. 2.4(b)), and United States Patent Number: 5,243,873, Dateof Patent: Sep. 14, 1993 (Fig. 2.4(c)), where some revolute joints are generated by contactsurfaces. In particular, US 5,243,873 proposes a 5-bar linkage camera support and the viewaxis of the camera coincides with the axis of the revolute joint connecting the two rods.


Chapter 2: ArmillEye 45Two of the four spherical cranks are fixed <strong>to</strong>gether, so that they form a single doublespherical crank carrying two rods. We label this double bond by the letter C and distinguishbetween the two rods by the labels CA and CB. The two other bonds are labelled by the lettersA (connected <strong>to</strong> rod CA) and B (connected <strong>to</strong> rod CB). Each terminal link is connected by arevolute joint <strong>to</strong> one of the spherical rods belonging <strong>to</strong> the double spherical crank, while it isconnected by another revolute joint <strong>to</strong> one of the independent spherical rods. The axes of boththese revolute joints are through O as well as the axes of all the other joints of the sphericalsection. We name E A the terminal link connected <strong>to</strong> CA and A, while E B is the terminal linkconnected <strong>to</strong> CB and B. The screws of the base revolute joints of the three cranks (and theiraxes) are ξ L 1 , L = A, B, C, respectively for chains A, B and C, while kL 1 , L = A, B, C, are thecorresponding direction vec<strong>to</strong>rs. The screws of the elbow revolute joints (and their axes) are,respectively, ξ A 2 , ξCA 2 , ξCB 2 , ξB 2 , where the superscript label is that of the rod <strong>to</strong> which the jointis connected; the corresponding direction vec<strong>to</strong>rs are k A 2 , k CA2 , k CB2 and k B 2 . Analogously, thescrews of the non-elbow revolute joints of the four rods (and their axes) are, respectively, ξ A 3 ,ξ CA3 , ξCB 3 , ξB 3 , while the direction vec<strong>to</strong>rs are kA 3 , kCA 3 , kCB 3 and k B 3 . The axes ξL i , ξL i+1 definethe plane πi L i+1 , L = A, B; ξC 1 , ξ CL2 , L = A, B, define the plane π12 CL ; ξ CL2 , ξ CL3 define theplane π23 CL,L = A, B. The angle formed by kL i , kL i+1 is αL i i+1 , 0 < i < 4, L = A, B. The anglesα CA12 , α CB12 are, respectively, between k C 1 , k CA2 and between k C 1 , k CB2 ; α C is the right-hand angleabout ξ C 1 between πCA 12 , πCB 12 ; αCA 23 and αCB 23 are, respectively, the angles between kCA 2 ,kCA 3 , andbetween k CB2 , kCB 3 . As base reference frame, we take the reference frame Oi bj b k b centred at Owith k b orthogonal <strong>to</strong> both k A 1 and k B 1 . If k A 1 ≢ k B 1 and k C 1 ≢ k b , i b lies on the intersection ofthe plane defined by k A 1 , kB 1 with the plane defined by k b, k C 1 . Else, if kC 1 ≡ k b, then i b ≡ k A 1 .In this case, we express the components of k L 1 by the right-hand angle β L between i b and k L 1 ,L = A, B; the components of k C 1 are expressed by the right-hand angle βC between k b and k C 1 .If k A 1 ≡ kB 1 , then i b ≡ k A 1 ≡ kB 1 and k b lies on the plane defined by i b , k C 1 ; we introduce againthe angle β C between k b , k C 1 in order <strong>to</strong> express the components of k C 1 . If k A 1 ≡ k B 1 ≡ k C 1 ,Oi b j b k b is one of the reference frames, whose i b ≡ k A 1 .Without a translational section, each terminal link of the spherical section has one unconstrainedredundant passive freedom. If the axes of the revolute joints connected <strong>to</strong> oneterminal link are coincident (Fig. 2.5(b)), their direction is determined by the configuration ofthe closed chain composed of this terminal and of the two corresponding spherical crank-rodbonds. In this case, the unconstrained redundant passive motion is the rotation of the terminallink about these two coincident joint axes. If the axes of the revolute joints connected <strong>to</strong> oneterminal link are not coincident, the axis of the redundant passive rotation do not coincidewith one joint axis.In the whole mechanism (spherical and translational sections), the two redundant passivefreedoms (one for each terminal link) are constrained by the translational section, whose architecturemust be suitably chosen. In the case that the axes of the revolute joints connected <strong>to</strong>the terminal links do not coincide, this makes more complex both forward and inverse positionproblems of the mechanism.It is noteworthy <strong>to</strong> remark that in the family of architectures presented in this chapter,the spherical section is composed of two spherical 6-bar linkages, while the 2-dof version ofAgile Eye mentioned above consists of just one spherical 5-bar linkage. Moreover, the waythese two spherical 5-bar linkages are used in the mechanism is remarkably different. Aboutthe application shown in the following Fig. 2.15(a), in fact in this case each camera is carriedby one spherical rod of a spherical 5-bar linkage, but in this case the contribution seems <strong>to</strong>be the idea of coupling two of such spherical 5-bar linkages in order <strong>to</strong> obtain an eyes-likemobility for stereoscopic vision. Anyway, it is not in the aim of the author of the present


46 Chapter 2: ArmillEyecranksrodsbaserodsOOCACBinterconnectedcrankterminal linksAE ABE B(a)(b)Figure 2.5: Scheme of the spherical section with noncoincident (a) and coincident (b) endeffec<strong>to</strong>rjoint axes.thesis <strong>to</strong> discuss about paternity of <strong>mechanisms</strong>; the aim has been <strong>to</strong> give a good answer <strong>to</strong>some precise practical needs.Translational sectionThe translational section is a 1-dof mechanism, whose output coordinate is the translationalmotion of an end-effec<strong>to</strong>r link, and whose input coordinate is the angle that two of its membersform each other. We consider the case that these two members coincide with the terminal linksof the spherical section. Although really lot of <strong>mechanisms</strong> satisfy these requirements, <strong>to</strong> goon it is necessary <strong>to</strong> consider one in particular; we consider a 4-R, 5-links serial chain, havingas first and fifth links respectively the terminal links of the spherical section. This particulararchitecture is named ArmillEye. The end-effec<strong>to</strong>r is the central link of the chain (third link),which is also the end-effec<strong>to</strong>r of the whole mechanism. In order that this serial chain hasone translational freedom and, at the same time, suitably constraints the redundant passivefreedoms of the terminal links of the spherical section, the joint axes of its revolute joints mustbe <strong>parallel</strong> two by two and not all <strong>parallel</strong> (Fig. 2.6(a)).In case that all four axes of the 4-R, 5-links chain are <strong>parallel</strong>, the chain has one unconstrainedredundant degree of freedom and it is necessary <strong>to</strong> add a second chain and a cylindricaljoint, and <strong>to</strong> suppose a plane of symmetry. In this case, the translational section consists of adouble planar four-bar linkage, whose rockers are connected by revolute joints <strong>to</strong> the terminallinks of the spherical section, and whose output links are connected by an additional cylindricaljoint (Fig. 2.7). Note that if we use a P joint in place of the cylindrical joint the translationalsection is overconstrained. The axis of the cylindric joint is through O and orthogonal <strong>to</strong>the axes of the revolute joints. The added chain, the cylindrical joint and the presence of aplane of symmetry constraint the end-effec<strong>to</strong>r link <strong>to</strong> translate along the axis of the cylindricaljoint. The end-effec<strong>to</strong>r of the translational section is the output link of one of the two four-barlinkages.In the following, we consider both cases of end-effec<strong>to</strong>r joint axes <strong>parallel</strong> two by two and all<strong>parallel</strong>, since both them deserve practical interest. Clearly, it is sufficient <strong>to</strong> consider one 4-R,


Chapter 2: ArmillEye 47L r 4 /l 45 r 5 /l 45 α 34 [rad] β L [rad] cos α L 12cos α L 23A 1.2174 .1652 .1571 4.1888 0 .8413B 1.2174 .1652 .1571 4.1888 0 .8413cos α CA12cos α CA23cos α CB12cos α CB23θ 5 [rad] α C [rad] β C [rad].5 .866 .6235 .823 2.1 .4 1.4θ A θ B θ C δ CA δ CB ε AB δ AB ε h-.6 3.7416 -.1 -1 1 1 1 -1(a)planar crankplanar rod(b)double planar crankFigure 2.6: Architecture with a 4-R, 5-links chain as translational section (a) and the correspondingplanar mechanism (b). The tables show geometry and configuration of themechanism.5-links chain (with revolute joints <strong>parallel</strong> two by two (first case) or all <strong>parallel</strong> (second case)).Provided that the mechanism is properly assembled, the input coordinate of the translationalsection is the angle that the two terminal links of the spherical section form each other aboutO.The screws of the revolute joints of this 5-links chain (and their axes) are ξ L 4 , ξL 5 , where Lstands for A or B depending if the joint is on the side of the chain connected <strong>to</strong> the rod A orB; k L 4 ‖ kL 5 , L = A, B, are the corresponding direction vec<strong>to</strong>rs. The plane defined by ξA 5 , ξB 5is the end-effec<strong>to</strong>r plane π h ; the straight line through O orthogonal <strong>to</strong> the end-effec<strong>to</strong>r plane isthe orientation axis ξ p , whose direction vec<strong>to</strong>r is k; ξ p intersects plane π h at point P. Planeπ O is the plane through O <strong>parallel</strong> <strong>to</strong> the end-effec<strong>to</strong>r plane. The axis ξ L 4 is supposed <strong>to</strong> beorthogonal <strong>to</strong> the plane π L defined by k and ξ L 3 , L = A, B. The distance between ξ L 4 and ξ L 5is l45 L , L = A, B. The distance of ξL 4 from O is rL 4 , L = A, B; rL 5 is the distance of ξL 5 from theorientation axis; α L 34 is the angle that the plane defined by ξ L 4 , O forms with the plane throughO <strong>parallel</strong> <strong>to</strong> ξ L 4 ; αL 34 represents the angle spanned by the corresponding terminal link of thespherical section. The angle formed by ξ A 5 , ξB 5 is θ AB; it defines, <strong>to</strong>gether with r5 A and rB 5 ,the geometry of the end-effec<strong>to</strong>r link. The extrusion of the end-effec<strong>to</strong>r link with respect <strong>to</strong>O (corresponding <strong>to</strong> the translational degree of freedom) is measured by the distance h of theend-effec<strong>to</strong>r plane from O. The translational section is carried by the spherical section: the


48 Chapter 2: ArmillEyeFigure 2.7: ArmillEye with a double planar four-bar linkage and an additional cylindric jointas translational section.angular orientation of the end-effec<strong>to</strong>r can be represented by the orientation of the orientationaxis and by the angle of rotation of the end-effec<strong>to</strong>r about the orientation axis.2.5 Origin of the name ArmillEyeThe name ArmillEye comes from the application for which this mechanism has originallybeen conceived: an agile underwater camera support for deep undersea applications. In particular,the first ArmillEye had <strong>to</strong> support the main external vision system of a heavy-duty,remotely-operated underwater vehicle designed <strong>to</strong> move on the see-bed at very great depthand <strong>to</strong> au<strong>to</strong>nomously cut dismissed steel piping of off-shore oil extraction platforms.In such environments the camera must be very simple and very well recovered and thecomplexity of the mechanism must be the least possible in order <strong>to</strong> improve the reliabilityof the vision system. Usually, the main external <strong>force</strong>s applied <strong>to</strong> moving bodies are thehydrodynamic <strong>force</strong>s. In most cases, these <strong>force</strong>s overcome the inertial <strong>force</strong>s significantly.Therefore, for a high rotational agility it is preferable that the links are thin and suitablyshaped and that the actua<strong>to</strong>rs, with large fluid resistant section, are fixed <strong>to</strong> the base. Parallel<strong>mechanisms</strong> are the best option <strong>to</strong> satisfy these requirements. The actua<strong>to</strong>rs are fixed <strong>to</strong> thebase and can be easily protected in<strong>to</strong> waterproof boxes or in the hull of the underwater vehicle.Moreover, since the leg chains are closed, sufficient overall stiffness is reached also with thinlinks, so that the final mechanism has very small resistant surfaces. In the earliest design thelinks had some circular shapes that recalled the arcs of an armillary sphere, which suggestedthe name ArmillEye.For a correct perception of the environment, the camera shall move in a way such thatits rotation component about the view axis is always zero. This can be obtained: • by a 3rotational dof mechanism, suitably controlled in order that the component of the end-effec<strong>to</strong>rrotation about the view axis is zero; • by a 2 rotational dof device intrinsically lacking (due <strong>to</strong> itskinematics) of the rotational freedom about the view axis (tilt/pan rotational mobility). For abetter reliability, the second way is preferable, since the mechanism has a simpler architectureand control is simpler. In the considered application, it was also required a zoom facilityexternal <strong>to</strong> the camera, hence an additional translational freedom.


Chapter 2: ArmillEye 49ϕ CAζ Cϕ CBOϕ A 0ζ C 0Oϕ B ϕ B 0(a)(b)ϕ B 0Figure 2.8: Wrenches that leg B (a) and leg C (b) transmit with free and locked actua<strong>to</strong>rs.Consider the tilt/pan mobility of the end-effec<strong>to</strong>r. It is preferable that these two rotationalfreedoms are decoupled with respect <strong>to</strong> the horizon of the viewpoint for every direction of theview axis. Moreover, <strong>to</strong> simplify the scanning of the field of vision, it is also preferable thatthe translational freedom, providing the zoom facility, is decoupled from at least one of thetwo rotational freedoms, preferably the tilt (decoupled rotational freedom); i.e., that in everyconfiguration one of the actua<strong>to</strong>rs commands the tilt, while the two other actua<strong>to</strong>rs commandthe pan and the translation along the view axis. This is preferred in order <strong>to</strong> simplify thehorizontal scanning of the field of vision.Since none of the known <strong>parallel</strong> architectures satisfied all these requirements, it has beennecessary <strong>to</strong> synthesize a new mechanism with the tilt/pan/zoom mobility required and investigatethe geometric conditions <strong>to</strong> decouple the tilt.These issues are recalled and discussed in the following sections.2.6 Constraint and mobility analysisThis section analyses the combined constraint that the legs of ArmillEye exert on theend-effec<strong>to</strong>r link.As usual, we consider two cases: actuated joints free and locked. In the first case, thewrenches that the legs can transmit from the end-effec<strong>to</strong>r <strong>to</strong> the base span the space W ofthe structural constraints; in the second case, the wrenches that can be transmitted by the legspan the space V of the actuated constraints.Consider leg B, composed of the crank-rod bond B, of the link E B and of the link thatconnects the end-effec<strong>to</strong>r <strong>to</strong> E B . The system W B of the structural constraints applied by legB contains wrenches reciprocal <strong>to</strong> all joint screws. In a nonsingular posture, W B is a 1-systemspanned by a pure <strong>force</strong> ϕ B 0 through O in direction k B 4 . The system V B of wrenches reciprocal<strong>to</strong> the screws of the passive joints of the leg is a 2-system spanned by ϕ B 0 and a pure <strong>force</strong>ϕ B at the intersection between the plane π45 B (defined by ξB 4 and ξB 5 ) and πB 23 (defined by ξB 2and ξ B 3 ) (Fig. 2.8(a)). Analogously, in leg A, in a nonsingular posture, W A is the 1-systemspanned by a pure <strong>force</strong> ϕ A 0 through O in direction kA 4 and VA is the 2-system spanned byϕ A 0 and a pure <strong>force</strong> ϕ A at the intersection between π45 A and π23.AConsider, now, leg C, composed of the interconnected crank-rod bonds CA and CB; of thelinks E A and E B ; and of the two links connecting E A and E B <strong>to</strong> the end-effec<strong>to</strong>r. With the


50 Chapter 2: ArmillEyebase joint locked, this leg behaves exactly like two independent legs of the type of the legs Aand B discussed above. So, in a nonsingular posture V C is the 4-system spanned by ϕ A 0 andϕ B 0 (the same as for legs A and B, since leg C shares with them the two links connected <strong>to</strong>the end-effec<strong>to</strong>r), and by a pure <strong>force</strong> ϕ CA at the intersection between π45 A and π23 CA and a pure<strong>force</strong> ϕ CB at the intersection between π45 B and πCB 23 .When the actuated joint is free, leg C transmits ϕ A 0 and ϕ B 0 (like two separate legs of thetype of legs A and B), but can also transmit other generalized <strong>force</strong>s due <strong>to</strong> the fact that thecranks of the crank-rod bonds are connected each other. These other generalized <strong>force</strong>s mustbelong <strong>to</strong> V C and their moment components must be orthogonal <strong>to</strong> k C 1 , else they could not betransmitted through the base joint. The wrenches satisfying both these conditions belong <strong>to</strong>a 1-system spanned by a wrench ζ C 0 , which can be obtained as a linear combination of ϕ CAand ϕ CB by imposing that the moment component is orthogonal <strong>to</strong> k C 1 :ζ C 0 = ( f C 0 |mC 0)= λ1 ϕ CA + λ 2 ϕ CB (2.1)where:λ 1 =kC 1 · n CB23r int k A 3 · nA 45kC 1 · nCA 23λ 2 = −r int k B 3 · nB 45(2.2)(2.3)and r int is the distance between O and the point at the intersection of ξ L 4 with the planedefined by ξ L 4 and ξ L 5 . So, in a nonsingular posture, W C = Span (ϕ A 0 , ϕ B 0 , ζ C 0 ). An expressionfor ϕ CA and ϕ CB is:ϕ CL = ( n CL23 ×nL 45 | r int k L )3 ·nL 45 nCL 23L = A, B (2.4)Due <strong>to</strong> the symmetry, k A 3 ·nA 45 = kB 3 ·nB 45 . The moment component mC 0 of ζC 0 is a linearcombination of the moment components of ϕ CA and ϕ CB , as it is stated by Eq. (2.1). Wedevelop and obtain:m C 0 = λ 1 m CAϕ + λ 2 m CBϕ = k C 1 × ( n CA23 ×n CB )23(2.5)Vec<strong>to</strong>r n CA23 ×nCB 23lies at the intersection between πCA 23is <strong>parallel</strong> <strong>to</strong> nCAand πCB 23 . If ξCA 2 ≡ ξ CB2 (i.e., α C = 0),then n CA23 ×nCB 23 = kCA 2 ≡ k CB2 and m C 0 12 .The <strong>force</strong> component f0 C of ζ C 0 is obtained in the same way as m C 0 by a linear combination:f0 C = λ 1 fϕ CA + λ 2 fϕ CB = r int k A 3 ·n A (45 kC1 ·n CB23 n CA23 ×n A 45 − k C 1 ·n CA23 n CB23 ×n B )45The combined constraint of the legs on the end-effec<strong>to</strong>r is the sum of the constraintsof the single legs. The space of the structural constraints is W = ∑ L WL and out ofsingularities W = W 0 = Span (ϕ A 0 , ϕ B 0 , ζ C 0 ). The space of the actuated constraints isV = ∑ L VL = Span (ϕ A 0 , ϕB 0 , ϕA , ϕ B , ϕ CA , ϕ CB ). If the two <strong>force</strong>s ϕ CA , ϕ CB are not skew,we can also introduce a wrench ζ C = λ 1 ϕ CA − λ 2 ϕ CB ∈ Span(ϕ CA , ϕ CB ) reciprocal <strong>to</strong> ζ C 0 ;since Span (ζ C 0 , ζC ) = Span(ϕ CA , ϕ CB ), then V = Span (ϕ A 0 , ϕB 0 , ζC 0 , ϕA , ϕ B , ζ C ).The end-effec<strong>to</strong>r freedoms span the twist system T reciprocal <strong>to</strong> W. Out of singularities,W = W 0 and T is a 3-system, so the dimension of the mobility of the end-effec<strong>to</strong>r is 3.Since ϕ A 0 and ϕB 0 are pure <strong>force</strong>s, the end-effec<strong>to</strong>r cannot translate but in direction kA 4 ×k B 4 = k. Then, in the end-effec<strong>to</strong>r reference frame Oijk, the translation velocity componentsi and j of any feasible end-effec<strong>to</strong>r twist τ and the i and j <strong>force</strong> components of every wrench(2.6)


Chapter 2: ArmillEye 51are null:τ = (ω | 0, 0, v ) (2.7)In particular, it is W 0 = Span (ϕ A 0 , ϕ B 0 , ¯ζ C 0 ), with:¯ζ C 0 = ( 0, 0, f C k |m C 0)(2.8)where m C 0 is the moment component of ζ C 0 .If k A 4 ‖ kB 4 , then ϕA 0 = ϕB 0 and the end-effec<strong>to</strong>r has one unconstrained mobility, as discussedin Section 2.4.We prefer mechanism geometries such that the translational freedom of the end-effec<strong>to</strong>r isindependent from the rotational freedoms, i.e., it is possible <strong>to</strong> change the extrusion of theend-effec<strong>to</strong>r while keeping its orientation fixed. Necessary and sufficient condition for that isf0 C ·k = 0. In this case, ζC 0 is a pure moment and the rotation velocity component of everyfeasible end-effec<strong>to</strong>r twist is orthogonal <strong>to</strong> m C 0 . Consider Eq. (2.6). No mechanism geometryexists such that one of {k A 3 ·nA 45 = 0} or {kC 1 ·nCB 23 = 0 and k C 1 ·nCA 23 = 0} is verified forevery mechanism configuration. Therefore, a necessary and sufficient condition for f0 C ·k = 0is n CA23 ×n A 45·k = 0 and n CB23 ×n B 45·k = 0 for every mechanism configuration, i.e.:{ nCA23 ·k A 4 = 0n CB23 ·kB 4 = 0 (2.9)Figure 2.7 shows an example of mechanism that satisfies Eq. (2.9).If Eq. (2.9) holds, the mechanism has a tilt-pan-zoom mobility (Cardanic rotational mobility)with the tilt decoupled. In Fig. 2.7, m C 0 = nCA 12 in every configuration and any feasiblerotation of the end-effec<strong>to</strong>r link is about axes <strong>parallel</strong> <strong>to</strong> Ok C 1 k CA2.7 Forward position problemThe leg chains of ArmillEye are interconnected: the spherical section is composed of twoindependent, closed, 6-links chains containing the base, while the translational section is anotherindependent chain sharing one link with each one of the two closed chains of the sphericalsection.For fully-<strong>parallel</strong> <strong>mechanisms</strong>, the forward position problem can be very complicated, whilethe inverse position problem consists of solving one independent inverse position problem forevery leg chain, and is usually simple. In the case of IC <strong>mechanisms</strong>, the complexity offorward and inverse position problems depends on the particular architecture under analysisand generalisations are difficult.In the case of ArmillEye, if ξ A 3 ≢ ξCA, both forward and inverse position3 and ξ B 3 ≢ ξCB 3problems are made complex by the fact that the translational section contributes <strong>to</strong> the structuralconstraint of the terminal links of the spherical section. To simplify the task, in thefollowing we assume that ξ A 3 ≡ ξ CA3 and ξ B 3 ≡ ξ CB3 . This does not lead <strong>to</strong> any dramatic loss ofgenerality and makes the forward position problem of the spherical section independent fromthe forward position problem of the translational section.We solve the forward position problem of the translational section in the case of 4-R, 5-links chain with revolute joints <strong>parallel</strong> two by two and not all <strong>parallel</strong>, since the case of double4-bar linkage with cylindrical joint is included. In order <strong>to</strong> simplify the problem and since thisseems a preferable choice also from a practical point of view, we assume that the translationalsection has one symmetry plane. Therefore: l A 45 = lB 45 = l 45, r A 4 = rB 4 = r 4, r A 5 = rB 5 = r 5,2 .


52 Chapter 2: ArmillEyeα A 34 = α B 34 = α 34 . Under these hypotheses, the orientation axis lies on the symmetry planeand the angle formed by the planes π A and π B is θ AB .Spherical sectionWe compute the components of k A 3 and kB 3 in the reference frame Oi bj b k b as functions ofthe base joint angles θ1 A, θB 1 , θC 1 . Angle θL 1 , L = A, B, is the angle between πL 12 and Oi bj b , righthand with respect <strong>to</strong> k L 1 ; θ1 C is the angle between π12 CA and Oi b k b , right hand with respect <strong>to</strong>k C 1 . Due <strong>to</strong> the choice of Oi b j b k b , k L 1 = [cosβ L sin β L 0] T , L = A, B, and k C 1 =[cosβ C 0 sin β C ] T . Vec<strong>to</strong>r k L 2 depends on θL 1 , L = A, B, while vec<strong>to</strong>r kCA 2 depends on θ1 C:k L 2 = sL 1 sL 12 k b + c L 12 kL 1 + sL 12 cL 1 k b×k L 1 , L = A, B (2.10)k CA2 = s C 1 s CA12 j b + c CA12 k C 1 + s CA12 c C 1 j b ×k C 1 (2.11)where c L i i+1 = cosαL i i+1 and sL i i+1 = sinαL i i+1 , L = A, CA, CB, B, sL i = sin θ L i , cL i = cosθ L i ,L = A, B, C. Vec<strong>to</strong>r k CB2 depends on θ C 1 +αC :k CB2 = sin (θ C 1 +αC )s CB12 j b + c CB12 kC 1 + sCB 12 cos(θC 1 +αC )j b ×k C 1 (2.12)Each axis ξ L 3 , L = A, B, lies at the intersection of two cones of centre, axis and half angle,respectively, O, k L 2 , α L 23 and O, k CL2 , α CL23 . For ξ L 3 <strong>to</strong> lie on both cones, k L 3 must satisfy theequations: k L 3 · kL 2 = cL 23 and kL 3 · kCL 2 = c CL23 , L = A, B. Out of singularity, ξL 2 ≢ ξCLcan express k L 3 as a linear combination of k L 2 , k CL2 and k L 2 ×k CL2 :2 and wek L 3 = (1 − (k L 2 · k CL2 ) 2 ) −1 [ ][ ]k L 2 k CL2 k L 2 ×kCL 2 tLd1 t L d2 t L Td3(2.13)The coefficients are: t L d1 = cL 23 − c CL23 k L 2 · k CL2 , t L d2 = cCL 23 − c L 23 k L 2 · k CL2 , t L d3 = δCL C L ,√C L = −(k L 2 · kCL 2 − m L d )(kL 2 · kCL 2 − Md L) (2.14)and m L d = cL 23 c CL23 − ∣ sL23 s CL ∣23 , MLd = c L 23 c CL23 + ∣ sL23 s CL ∣23 .The boolean parameter δ CL = ±1 distinguishes between the two assembly modes of the4-links spherical chain composed of the two crank-rod bonds. The quantities m L d and ML d donot depend on the θ1 L . The necessary and sufficient condition for the solutions <strong>to</strong> be feasible(i.e., the condition for C L in Eq. (2.14) <strong>to</strong> be real) is: {m L d < kL 2 ·kCL 2 < Md L and kL 2 ·kCL 2 ≠ 1}.Translational sectionWe assume that the direct position problem of the spherical section has been solved andvec<strong>to</strong>rs k L 3 , L = A, B, have been computed. Now we obtain the expressions of k and h, andthe assembly modes of the translational section of the mechanism.By hypothesis, the translational section must be symmetric and k is <strong>parallel</strong> <strong>to</strong> the symmetryplane. With respect <strong>to</strong> this symmetry plane, k A 3 and kB 3 are one the symmetric of theother, so we can express k as a linear combination of (k A 3 +kB 3 ) and (kA 3 ×kB 3 ):k = (1 + k A 3 · kB 3 )−1 (1 − cosθ AB ) − [ 12 (kA3 +k B 3 ) kA 3 ×kB 3] [Td1 T d2] T(2.15)The angle θ AB between ξ A 4 and ξ B 4 is the same that the plane defined by k and k A 3 formswith the plane defined by k and k B 3 , taken right hand with respect <strong>to</strong> k. Therefore (k×kA 3 ) ·


Chapter 2: ArmillEye 53P 5Lr 5O Cε h = +1ψ 4l 45ε AB = −1α34P 4Lψ 3hε AB = +1Or 45Oε h = −1r 4r int(a)(b)Figure 2.9: The boolean parameter ε AB , ε h for the possible assembly modes (a), and thegeometry of a half chain (b) of the translational section of ArmillEye.(k×k B 3 )/ ∣ (k×kA3 ) · (k×k B 3 )∣ ∣√ = cosθAB . We substitute Eq. (2.15), simplify and obtain: T d1 =kA3 · k B 3 − cosθ AB, T d2 = signsinθ AB δ √ AB 1 + cosθ AB , where signsin θ AB is introduced <strong>to</strong>consider the case θ AB > π.The boolean parameter δ AB = ±1 determines which of the two half spaces defined by theplane ξ A 3 , ξB 3 , k lies in.The following step is computing k L 4 , L = A, B. Its direction is ε AB k L 3 ×k, where thesign given by ε AB = ±1 depends on the assembly mode of link E L . We take ε AB = 1 if theintersection point P4 L between ξL 4 and πL is in the half plane, bounded by ξ L 3 , containing P(Fig. 2.9(a)). The cross case (only one of P4 A , P4 B in the half plane containing P) is not feasiblesince it does not respect the hypothesis of symmetry. To have a unit length vec<strong>to</strong>r, we take:√k L 4 = ε AB 1 − cosθ AB1 − k A 3 · k L 3×k (2.16)kB 3−−−→Once computed k L 4 , we easily obtain OP4 L = r 4 k L 4r (Fig. 2.9(b)),k L 4r = s 4s 3k L 3 + εAB s 34s 3k (2.17)where s 34 = sinα 34 , c 34 = cosα 34 , s 4 = sin ψ 4 , ψ 4 = ψ 3 − ε AB α 34 , and c 3 = cosψ 3 =(k A 3 · kB 3 − cosθ AB) 1 2/(1 − cosθ AB ) 1 2 , s 3 = sin ψ 3 = (1 − k A 3 · kB 3 )1 2 /(1 − cosθ AB ) 1 2.The last step is computing the extrusion h and the location of point P L 5 , L = A, B,at the intersection between ξ L 5 and πL . As discussed in Section 2.4, we we assume thatthe translational section is a 4-R, 5-links chain, whose first and last links are E A and E B(Fig. 2.9(b)). The following equation holds: h 2 +2 r 4 h c 4 +2 r 5 s 4 −r 5 2 +r 4 2 −l 45 2 = 0, wherec 4 = cosψ 4 . We solve with respect <strong>to</strong> h and obtain:h = r 4 c 4 + ε h √l 45 2 − (r 4 s 4 + ε AB δ AB r 5 ) 2 (2.18)where ε h = ±1 distinguishes between the two assembly modes (front and rear) of the end-


54 Chapter 2: ArmillEye[1, 1, 1, 1, 1] [1, 1, 1, 1, −1] [1, 1, 1, −1, 1] [1, 1, 1, −1, −1][1, −1, 1, 1, 1] [1, −1, 1, 1, −1] [1, −1, 1, −1, 1] [1, −1, 1, −1, −1][−1, 1, 1, 1, 1] [−1, 1, 1, 1, −1] [−1, 1, 1, −1, 1] [−1, 1, 1, −1, −1][−1, −1, 1, 1, 1] [−1, −1, 1, 1, −1] [−1, −1, 1, −1, 1] [−1, −1, 1, −1, −1]Table 2.1: Assembly modes of ArmillEye; under each picture the values of[δ CA , δ CB , ε AB , δ AB , ε h ] (ε AB = +1). The red faces of the links (one face for each link, while theothers are white) keep on the same side of the joints, showing that all these assembly modesare feasible.


Chapter 2: ArmillEye 55[1, 1, −1, 1, 1] [1, 1, −1, 1, −1] [1, 1, −1, −1, 1] [1, 1, −1, −1, −1][1, −1, −1, 1, 1] [1, −1, −1, 1, −1] [1, −1, −1, −1, 1] [1, −1, −1, −1, −1][−1, 1, −1, 1, 1] [−1, 1, −1, 1, −1] [−1, 1, −1, −1, 1] [−1, 1, −1, −1, −1][−1, −1, −1, 1, 1] [−1, −1, −1, 1, −1] [−1, −1, −1, −1, 1] [−1, −1, −1, −1, −1]Table 2.2: Assembly modes of ArmillEye; under each picture the values of[δ CA , δ CB , ε AB , δ AB , ε h ] (ε AB = −1). The red faces of the links (one face for each link, while theothers are white) keep on the same side of the joints, showing that all these assembly modesare feasible.


56 Chapter 2: ArmillEyeL r 4 /l 45 r 5 /l 45 α 34 [rad] β L [rad] cos α L 12cos α L 23A 1.2174 0.1652 0.1571 4.1888 0 0.8413B 1.2174 0.1652 0.1571 1.7453 0.2588 0.8519cos α CA12cos α CA23cos α CB12cos α CB23θ 5 [rad] α C [rad] β C [rad]0.5 0.866 0.6235 0.823 2.1 0.4 1.4Table 2.3: Example mechanism geometryeffec<strong>to</strong>r (central link of the translational section) (Fig. 2.9(a)).We compute the components of −−−→OP5 L along k and kL 4r −c 4 k (that is orthogonal <strong>to</strong> k and<strong>parallel</strong> <strong>to</strong> π L ):−−−→OP5 L ε AB δ AB (k L 4r − c 4 k)= hk − r 5 (2.19)s 4In order <strong>to</strong> complete the description of the mechanism configuration, we also provide theexpressions of: • the direction vec<strong>to</strong>r, i, of the end-effec<strong>to</strong>r reference frame, while the thirddirection vec<strong>to</strong>r is k and the second, j, comes from the others; • the distance r 45 from O ofthe point at the intersection of the planes Okk L 4r, π L 45 and π O ; • the distance r int from O ofthe intersection between ξ L 4 and πL 45 :i =k A 3 − kB 3√2 (1 − kA3 · k B 3 ) (2.20)r 45 = h tanβ − ε AB δ AB r 5 = r4 ( h s 4 + ε AB δ AB r 5 c 4)r int =r 45s 3 + tanβ c 3=(2.21)h − r 4 c( 4)r 4 h s4 + ε AB δ AB r 5 c 4h s 3 − r 4 s 3 c 4 + r 4 c 3 s 4 + ε AB δ AB (2.22)r 5 c 3where β is the angle that k forms with the unit-length vec<strong>to</strong>r <strong>parallel</strong> <strong>to</strong> −−−−→P4 LP 5 L , L = A, B,tan β = (r 4 s 4 + ε AB δ AB r 5 )/(h − r 4 c 4 ).ArmillEye has at most 32 assembly modes, distinguished by the five boolean parametersδ CA , δ CB , δ AB , ε AB , ε h . Tables 2.1 and 2.2 show an explana<strong>to</strong>ry geometry with all 32 assemblymodes.The pose of the end-effec<strong>to</strong>r is expressed as a function θ1 L , L = A, B, C, in an analytic formby Eqs. (2.15) and (2.18).2.7.1 Numerical exampleConsider the mechanism geometry in Tab. 2.3 and the actuated joint angles: θ A 1 = −0.63,θ B 1 = 0.7416, θ C 1 = −0.1. Tabs. 2.1 and 2.2 show the 32 assembly modes of the mechanism.The corresponding values of k and h, representing the pose of the end-effec<strong>to</strong>r, are reportedin Tab. 2.4.If ε AB and δ AB have the same sign, the second and fourth link of the translational sub-chainare connected <strong>to</strong> the end-effec<strong>to</strong>r at opposite sides and cross each other. This makes uneasy <strong>to</strong>design them so that interferences are avoided. Therefore, 16 of the 32 assembly modes cannotbe easily practically used.Compare the assembly modes with ε h = ±1 and the same δ CA , δ CB , ε AB , δ AB . The endeffec<strong>to</strong>rand the second and fourth links of the translational sub-chain take symmetric configurationswith respect <strong>to</strong> the plane defined by ξ A 3 and ξ B 3 . This justifies the decision ofincreasing the end-effec<strong>to</strong>r constraint by introducing as translational sub-chain a double 4-R,5-links serial chain with the central link of the back 4-R, 5-links serial chain connected <strong>to</strong> the


Chapter 2: ArmillEye 57δ CA δ CB ε AB δ AB ε h k h1 1 1 1 1 [ 0.9859 −0.1044 0.131 ] 0.23981 1 1 1 -1 [ 0.9582 0.0475 0.2822 ] 0.21191 1 1 -1 1 [ 0.9989 0.0251 −0.0406 ] 0.25251 1 1 -1 -1 [ 0.9795 0.1783 0.0939 ] 0.23881 1 -1 1 1 [ 0.9859 −0.1044 0.131 ] 0.03311 1 -1 1 -1 [ 0.9582 0.0475 0.2822 ] 0.04231 1 -1 -1 1 [ 0.9989 0.0251 −0.0406 ] 0.02731 1 -1 -1 -1 [ 0.9795 0.1783 0.0939 ] 0.03341 -1 1 1 1 [ 0.9558 −0.137 −0.2601 ] 0.25081 -1 1 1 -1 [ 0.9358 0.0486 −0.3491 ] 0.2351 -1 1 -1 1 [ 0.9725 0.0689 −0.2225 ] 0.2541 -1 1 -1 -1 [ 0.9201 0.2524 −0.2995 ] 0.25031 -1 -1 1 1 [ 0.9558 −0.137 −0.2601 ] 0.02211 -1 -1 1 -1 [ 0.9358 0.0486 −0.3491 ] 0.01921 -1 -1 -1 1 [ 0.9725 0.0689 −0.2225 ] 0.02591 -1 -1 -1 -1 [ 0.9201 0.2524 −0.2995 ] 0.0219-1 1 1 1 1 [ 0.9859 −0.1044 0.131 ] 0.2221-1 1 1 1 -1 [ 0.9582 0.0475 0.2822 ] 0.189-1 1 1 -1 1 [ 0.9989 0.0251 −0.0406 ] 0.2432-1 1 1 -1 -1 [ 0.9795 0.1783 0.0939 ] 0.2207-1 1 -1 1 1 [ 0.9859 −0.1044 0.131 ] 0.018-1 1 -1 1 -1 [ 0.9582 0.0475 0.2822 ] 0.0165-1 1 -1 -1 1 [ 0.9989 0.0251 −0.0406 ] 0.0203-1 1 -1 -1 -1 [ 0.9795 0.1783 0.0939 ] 0.0179-1 -1 1 1 1 [ 0.9558 −0.137 −0.2601 ] 0.1903-1 -1 1 1 -1 [ 0.9358 0.0486 −0.3491 ] 0.1172-1 -1 1 -1 1 [ 0.9725 0.0689 −0.2225 ] 0.2256-1 -1 1 -1 -1 [ 0.9201 0.2524 −0.2995 ] 0.188-1 -1 -1 1 1 [ 0.9558 −0.137 −0.2601 ] 0.0498-1 -1 -1 1 -1 [ 0.9358 0.0486 −0.3491 ] 0.0883-1 -1 -1 -1 1 [ 0.9725 0.0689 −0.2225 ] 0.0378-1 -1 -1 -1 -1 [ 0.9201 0.2524 −0.2995 ] 0.0506Table 2.4: End-effec<strong>to</strong>r pose in the 32 mechanism configurationsend-effec<strong>to</strong>r by a prismatic or cylindrical joint disposed <strong>parallel</strong> <strong>to</strong> k. This can increase thestiffness of the mechanism and any eventual payload is better supported. In the mechanism ofFig. 2.7, this added 4-R, 5-links serial chain constraints the translational freedom orthogonal<strong>to</strong> ξ L 4 , which, without this added chain, would be a redundant passive motion of the endeffec<strong>to</strong>r.The preferable assembly mode for application as camera support seems the one with[δ CA , δ CB , ε AB , δ AB , ε h ] = [1, −1, 1, −1, 1].2.8 Inverse kinematicsVec<strong>to</strong>r k and the extrusion h are known and we compute the actuated joint angles θ1 A, θB 1 ,θ1 C . The rotation θ E of the end-effec<strong>to</strong>r about k (measured right-hand between k A 4 and the jdirection of the end-effec<strong>to</strong>r reference frame) is unknown. To solve the problem we considerthe double spherical crank, C, as two separate cranks. We express θ1 A, θB 1 , θC 1 as functionsof k, h and θ E ; the procedure followed is the same used in [2] (although the <strong>mechanisms</strong> aredifferent) since with the crank C divided in two separate cranks ArmillEye is geometricallyequivalent <strong>to</strong> a special geometry of the mechanism discussed in [2]. In the following sectionswe recall the principal steps of this procedure. Finally, we impose that the angle between thetwo cranks C is α C and obtain one equation in the unknown θ E . Unless an analytic-formsolution was not find, this equation can be solved numerically.First we consider the translational sub-chain, then the spherical sub-chain.


58 Chapter 2: ArmillEyeTranslational sub-chainConsider the heave section of leg L, L = A, B. The quadrilateral OP L P5 LP 4 L is a virtual1-dof mechanism with parameter h. We obtain k L 3 first in the reference frame O(k L 4×k)k L 4 k,then in the end-effec<strong>to</strong>r frame Pijk.From a geometrical analysis of this 1-dof mechanism, we easily obtain the expressions ofthe sine s L 4 and cosine cL 4 of the angle ψL 4 (between kL 4r and k, Fig. 2.9(b)) as functions of h:[cL4 s L 4[] T=(2rL4 (H L2 +r5L 2))−1 H L −r5L ] [r5 L H L H L2 +N L ε L CεL] T(2.23)√where H L = h+ h L , N L = r5L 2+ rL2 4 − lL 245 , CLε = −(H L2 − m L 45 )(HL2 − M45 L ), ML 45=(r4 L + l45) L 2 − r5Land m L 45 =(rL 4 − lL 45 )2 − r5L 2; ε L = ±1 distinguishes between the two feasible working modes ofthe quadrilateral OP L P5 LP 4 L.The quadrilateral takes symmetric configurations for positive and negative values of h. Onequadrilateral configuration is feasible if m L 45 ≤ HL2 ≤ M45 L , where (ML 45 )1 2 represents the minimalextrusion (P5 L , P4 L and O collinear, with P5 L between P4 L and O) and (m L 45) 1 2 representsthe maximal extrusion.To obtain k L 4 in O(kL 4 ×k)kL 4 k, we rotate j about k at θ E, k L 4 = R z(θ E )j. Vec<strong>to</strong>r k L 4r iscomputed analogously, k L 4r = R z (θ E )[ s L 4 0 c L 4 ]T , and now an α 34 rotation about k L 4 gets:Spherical sub-chaink L 3 = R e(α 34 )R z (θ E )[ s L 4 0 c L 4 ]T (2.24)Vec<strong>to</strong>rs k A 3 and kB 3 result from the inverse kinematics of the translational sub-chain. Vec<strong>to</strong>rsk A 1 , kB 1 , kC 1 are known in the base reference frame; they can be expressed in the end-effec<strong>to</strong>rframe by means of the rotation matrix R, whose entries are known since we know k and θ Eby hypothesis.The following step is the computation of the four k L 2 , L = A, B, CA, CB, from which theactuated joint angles are calculated; the four spherical crank-rod chains A, B, CA, CB can beanalyzed separately each other.The axis ξ L 2 lies at the intersection of two right circular cones with vertex, axes and halfangleO, ξ L 1 , αL 12 and O, ξL 3 , αL 23 , respectively. For ξL 2 <strong>to</strong> lie on both cones, kL 2 must satisfyk L 2 · k L 1 = c L 12 and k L 2 · k L 3 = c L 23, where c L ij = cosαL ij . Thus, kL 2 is obtained as a linearcombination of k L 1 , kL 3 and kL 1 ×kL 3 ,2k L 2 = (1 − (kL 1·kL 3 )2 ) −1 [ k L 1 k L 3 k L 1 ×kL 3][tL1 t L 2 t L 3] T(2.25)The√coefficients are: t L 1 =cL 12 −cL 23 kL1·kL 3 , tL 2 =cL 23 −cL 12 kL1·kL 3 , tL 3 =νL Cν L, CL ν =−(k L 1·kL 3 − mL AB )(kL1·kL 3 − ML AB ) with mL AB =cL 12c L 23− ∣ sL12 s L ∣23 , MLAB =c L 12c L 23+ ∣ sL12 s L ∣23 ,s L ij = sin αL ij . The boolean parameter νL =±1 distinguishes between the two working modesof the spherical section of the leg.Equation (2.25) expresses k L 2 as a function of θ E. By means of these expressions of k CA2and k CB2 , we compute the two vec<strong>to</strong>rs orthogonal, respectively, <strong>to</strong> π12 CA and π12 CB , and imposethat the angle they form is α C (known by hypothesis), so obtaining a scalar equation in θ E .


Chapter 2: ArmillEye 59We develop and simplify, getting:k CA2 (θ E) · k CB2 (θ E) − c CA12 cCB 12s CA12 sCB 12− cosα C = 0 (2.26)Equation (2.26) depends also on the six configuration parameters ε A , ε B , ν A , ν B , ν CA ,ν CB . Thus, in general, we can expect a maximal number of working modes also higher than64, depending on the number of feasible roots of Eq. (2.26) for the different combinations ofthe configuration parameters.The roots of Eq. (2.26) are feasible values of θ E iff k CA2 ×k CB2 · k C 1 ≥ 0. Else, the anglebetween π12 CAlink C we have one mirrored.and πCB 12 is α C but ξ CA2 and ξ CB2 are inverted and instead of the original baseFrom the feasible values of θ E we compute the k L 2 and, from them, the actua<strong>to</strong>r anglessolving the inverse kinematics problem.The condition for a crank-rod configuration <strong>to</strong> be feasible (Cν L real) is ∣ αL12 − α L ∣23 ≤ αL13 ≤ ∣ αL12 + α L ∣23 ,where α L 13 = ∠(ξL 1 , ξL 3 ), i.e. mL AB ≤ kL1·kL 3 ≤ ML AB . From the values of θ E, we can also checkfor the condition m L 45 ≤ HL2 ≤ M45 L for the configuration of the heave sub-chain <strong>to</strong> be feasible.2.8.1 Numerical exampleConsider the example geometry in Tab. 2.5 and the configuration with end-effec<strong>to</strong>r extrusionh = 0.17 and orientation axis k = [−0.0141, 0.1404, −0.99]. Figure 2.10(a) shows the plo<strong>to</strong>f the right-hand side of Eq. (2.26) as a function of θ E , for the 64 possible combinations ofthe six configuration parameters (one curve per each combination). Part of these curves areidentical and part does not intersect the zero axis. The curves intersecting the zero axis havetwo roots each one, listed in Tab. 2.6.Thus, for this geometry and configuration, the working modes of the mechanism are 24.Figure 2.10(b) shows part of these working modes: the other working modes distinguish bythe working mode of the spherical crank-rod parts of the legs.The maximal number of working modes of the mechanism is an open problem.2.9 Jacobian analysisIn this section we write the system of the velocity equations of the mechanism and obtainan expression for the Jacobian opera<strong>to</strong>r. A premise <strong>to</strong> the velocity analysis of the mechanismis the extension of the standard method for velocity analysis of purely <strong>parallel</strong> PMs proposedin Chapter 4.The end-effec<strong>to</strong>r twist ξ must be the same computed along the four different leg subchainsL r 4 /l 45 r 5 /l 45 α 34 [rad] β L [rad] cos α L 12cos α L 23A 3.5 .75 .0449 0 .733 .5B 3.5 .75 .0449 3.1416 .733 .5cos α CA12cos α CA23cos α CB12cos α CB23θ 5 [rad] α C [rad] β C [rad].733 .6235 .733 .6235 1.0472 .452 1.5708Table 2.5: Inverse kinematics: example geometry


60 Chapter 2: ArmillEyeconfiguration parameters roots of Eq. (2.26)ε A ε B ν A ν B ν CA ν CB θ E 1 θ E 2-1 -1 -1 -1 -1 -1 -.8563 -.3407-1 1 -1 -1 -1 -1 -1.1620 1.49301 -1 -1 -1 -1 -1 -2.3100 -.21541 1 -1 -1 -1 -1 -1.8740 .5104-1 1 -1 -1 -1 1 -.8563 -.34071 -1 -1 -1 -1 1 -1.1620 1.49301 1 -1 -1 -1 1 -2.3100 -.2154-1 -1 -1 1 1 -1 -1.8740 .5104-1 1 -1 1 1 -1 .7104 1.23101 -1 -1 1 1 -1 .6311 2.72701 1 -1 1 1 -1 -1.0780 1.5720-1 1 -1 1 1 1 -.0942 2.29301 -1 -1 1 1 1 .7104 1.23101 1 -1 1 1 1 .6311 2.7270-1 1 1 -1 -1 -1 -1.0780 1.57201 -1 1 -1 -1 -1 -.0942 2.29301 1 1 -1 -1 -1 -.8563 -.3407-1 1 1 -1 -1 1 -1.1620 1.49301 -1 1 -1 -1 1 -2.3100 -.21541 1 1 -1 -1 1 -1.8740 .5104-1 -1 1 1 1 -1 -.8563 -.3407-1 1 1 1 1 -1 -1.1620 1.49301 -1 1 1 1 -1 -2.3100 -.21541 1 1 1 1 -1 -1.8740 .5104-1 1 1 1 1 1 .7104 1.23101 -1 1 1 1 1 .6311 2.72701 1 1 1 1 1 -1.0780 1.5720Table 2.6: Sets of configuration parameters and roots in the 27 working modes of the example<strong>mechanisms</strong>hown in Fig. 2.11. This leads <strong>to</strong> the following four velocity equations:ξ = ˙θ A 1 ξ A 1 + ω A 2 ξ A 2 + ω A 3 ξ A 3 + ω A 4 ξ A 4 + ω A 5 ξ A 5 (2.27)ξ = ˙θ B 1 ξB 1 + ωB 2 ξB 2 + ωB 3 ξB 3 + ωB 4 ξB 4 + ωB 5 ξB 5 (2.28)ξ = ˙θ C 1 ξ C 1 + ω CA2 ξ CA2 + ω CA3 ξ A 3 + ω A 4 ξ A 4 + ω A 5 ξ A 5 (2.29)ξ = ˙θ 1 C ξC 1 + ωCB 2 ξ CB2 + ω3 CB ξ B 3 + ωB 4 ξB 4 + ωB 5 ξB 5 (2.30)where ˙θ 1 A, ˙θ 1 B, ˙θ 1 C are the actuation velocities and ωL i , L = A, B, CA, CB, i = 2, . . .,5, are thevelocities of the passive joints.Note that the structure of the velocity equations (2.27) <strong>to</strong> (2.30) of ArmillEye is the sameof the velocity equations of the mechanism discussed in Chapter 1, since the structures of the–3 –2 –1r1 2 30–0.2–0.4–0.6–0.8Eq–1–1.2–1.4–1.6–1.8(a) (b) θ E = −0.0967 and θ E = 2.164Figure 2.10: Inverse kinematics of ArmillEye for an example mechanism: plot of the right-handside of Eq. (2.26) (left) and the two working modes (right)


Chapter 2: ArmillEye 61(a) subchain A (b) subchain B (c) subchain CA (d) subchain CBFigure 2.11: The four leg subchains and the corresponding actuated wrenches ϕ A , ϕ B , ϕ CA ,ϕ CB (cylindrical arrows) considered for the velocity analysis.spaces V of the actuated constraints are the same (compare Sections 2.6 and 1.7.1).The spaces of the actuated constraints of the four chains are, respectively: V A =Span(ϕ A 0 , ϕA ), V B = Span (ϕ B 0 , ϕB ), V CA = Span(ϕ A 0 , ϕCA ), V CB = Span(ϕ B 0 , ϕCB ) (seeSection 2.6). We eliminate the passive joint velocities from Eqs. (2.27) <strong>to</strong> (2.30) by computingthe reciprocal products of their left and right-hand sides by, respectively, ϕ A , ϕ B , ϕ CA , ϕ CB .We obtain:ϕ A ◦ ξ = ˙θ A 1 ϕA ◦ ξ A 1 (2.31)ϕ B ◦ ξ = ˙θ B 1 ϕ B ◦ ξ B 1 (2.32)ϕ CA ◦ ξ = ˙θ C 1 ϕCA ◦ ξ C 1 (2.33)ϕ CB ◦ ξ = ˙θ C 1 ϕCB ◦ ξ C 1 (2.34)Equations (2.31) <strong>to</strong> (2.34) can be rearranged in the classical matrix form Zξ = Λ˙q:⎡˜ϕ A ⎤ ⎡⎢˜ϕ B⎥⎣ ˜ϕ CA ⎦ ξ = ⎢⎣˜ϕ CBϕ A ◦ ξ A 1 0 00 ϕ B ◦ ξ B 1 00 0 ϕ CA ◦ ξ C 10 0 ϕ CB ◦ ξ C 1⎤⎡⎥⎣⎦˙θ 1A˙θ 1B˙θ 1C⎤⎦ (2.35)If we use any reference frame with i and j <strong>parallel</strong> <strong>to</strong> π 0 , the i and j translation velocitycomponents of ξ are null in every nonsingular mechanism configuration, since V contains everypure <strong>force</strong> through O <strong>parallel</strong> <strong>to</strong> π 0 . In this case, we can substitute in Eq. (2.35) the expressionsof the ϕ L , L = A, B, CA, CB, and rearrange, obtaining:⎡k A 2 ×kA 3k B 2 ×k B 3⎢⎣ k CA2 ×k A 3k CB2 ×kB 3⎤1r45k A A 4 ·kA 2 ×kA ⎡3 k1r45k B B 4 ·k B 2 ×k B [ ]A 1 ·k A 2 ×k A ⎤3 0 0 ⎡3ω 1k A 4 ·k CA2 ×k A ⎥ = ⎢ 0 k B 1 ·kB 2 ×kB 3 0⎥⎣3 ⎦ v k⎣ 0 0 k CA1 ·k CA2 ×k A ⎦3k B 4 ·kCB 2 ×kB 0 0 k CB31 ·k CB2 ×kB 3r45A 1r45B˙θ 1A˙θ 1B˙θ 1C⎤⎦ (2.36)where ω and v k are, respectively, the rotation velocity component and the k translationalcomponent of the end-effec<strong>to</strong>r twist ξ.In Eq. (2.36), all entries of the matrix on the right and the entries of the fourth column


62 Chapter 2: ArmillEyeξ A 1π 0ξ A 45π A 45ξ A 2ξ A 4ξ A 3ξ A 5Figure 2.12: Wrenches transmitted by leg A: instantaneously, the fourth and fifth joints arereplaced by a single joint described by ξ L 45.L r 4 /l 45 r 5 /l 45 α 34 [rad] β L [rad] cos α L 12cos α L 23A 1.4 .18 .1571 4.1888 −.0826 .8519B 1.4 .18 .1571 1.848 .2035 .8355cos α CA12cos α CA23cos α CB12cos α CB23θ 5 [rad] α C [rad] β C [rad].529 .866 .4684 .823 2 .5 1.3Figure 2.13: Example mechanism geometry and configuration of ArmillEyeof the matrix on the left are invariant, while vec<strong>to</strong>rs k L 2 ×kL 3 depend on the reference frame.So, the components of ω that satisfy Eq. (2.36) are expressed in the same reference frame ofk L 2×k L 3 .Multiplying both sides of Eq. (2.36) by the inverse of the left-hand matrix yields a 4×3 Jacobiangiving the end-effec<strong>to</strong>r twist from the actuation velocities: [ ω v ] T = J[ ˙θA 1˙θB 1˙θC 1 ] T .Since the velocity equations of ArmillEye have the same structure of the velocity equationsof the mechanism discussed in Chapter 1, we can analogously introduce an equivalent simplifiedmechanism (Fig. 2.12). Joints ξ L 4 and ξL 5 are replaced by a single revolute joint, with screwξ L 45 , at the intersection of πL 45 and π 0. (if π45 L ‖ π 0, then joint ξ L 45 is a prismatic joint.) Thevelocity of the new joint is the sum of the joint velocities it replaces.As a numerical example, consider the example geometry and assembly mode shown inFig.2.13, with actuated joint angles θ1 A = −0.6, θ1 B = π + 0.4, θ1 C = −0.14. By solving theinverse position problem we obtain r 45 and the components of k C 1 and kL 1 , kL 2 , kL 3 , kL 4 , kCL 2 ,k CL3 , L = A, B. We compute the entries of Z and Λ, then we get the direct Jacobian:J = Z −1 Λ =⎡⎢⎣−1.347 −.236 .654−.384 .0966 −.429−.111 .176 .353.0729 .0192 −.0419⎤⎥⎦ (2.37)


Chapter 2: ArmillEye 63Figure 2.14: ArmillEye with one more rotational spindle mobility.(a)(b)Figure 2.15: Possible applications of the spherical section of ArmillEye for vision and handling.2.10 Applications of ArmillEyeArmillEye had been originally conceived as a camera support for stereoscopic vision withone view point (scale based stereoscopic vision). This section briefly proposes other possiblepractical applications of ArmillEye besides a camera support.Figure 2.14 shows a 4-dof version of ArmillEye with an added spindle mobility. This thirdrotational freedom is transmitted <strong>to</strong> the end-effec<strong>to</strong>r by an universal joint centred at O and anextensible limb that connect the U joint <strong>to</strong> the end-effec<strong>to</strong>r. This set-up of ArmillEye seemsparticularly suitable for machining operation of revolution surfaces, since the spindle rotatesabout O and has a radial translational freedom.Figures 2.15(a) and 2.15(b) show two possible applications of the spherical section of Armill-Eye. The pictures are just schemes without any design ambition. The aim is <strong>to</strong> show thatthe tilt/pan mobility of the two terminal links, whose axes ξ A 3 and ξ B 3 keep coplanar, can beexploited in various ways. In particular note the application of Fig. 2.15(a): the cameras movelike two eyes, with view axes intersecting at a point whose distance from O can be varied fromvery close, up <strong>to</strong> infinity; the mechanism works like a compact <strong>parallel</strong> head for stereoscopicvision with verging view axes.


64 Chapter 2: ArmillEye2.10.1 Sub-Bot<strong>to</strong>m-Cutter applicationThe synthesis and development of ArmillEye have been originally pulled by a specificunderwater application: equipping an enhanced version of a remotely operated underwaterrobot, SBC (Sub Bot<strong>to</strong>m Cutter) [18], developed in the frame of the homonym EuropeanProject, designed for the disposal of off-shore installations (wellheads, platforms, sea-lines andmarine and harbor structures). The reference task of SBC is <strong>to</strong> cut a pile below the sea bedlevel: the robot moves on the sea bed and reaches the pile, then a special drilling fork ispushed some meters in<strong>to</strong> the ground across the pile and a diamond wire shifts along the forkand performs the cutting (Fig. 2.16).For a correct cutting, the positioning with respect <strong>to</strong> the pile has <strong>to</strong> be accurate. Weconsider the use of stereoptic vision <strong>to</strong> drive the robot on the target pile.Instead of binocular stereoscopic vision we consider monocular stereoptic vision since inthis way we can place one vision sensor (one camera with an active support, ArmillEye) in themiddle of the narrow fork embracing the pile, so realizing a sort of eye-in-palm setup.For monocular stereoptic vision, the camera is rhythmically moved and pictures of theenvironment are shot from different points of view. These pictures are compared <strong>to</strong> calculatethe distances of the objects from the camera. We consider rhythmical movements along theview axis. The distance of the pipe is calculated by comparing some reference distances, e.g.between laser spots projected on the surface of the pipe (which has a small curvature).The robot SBC moves shakily, in spite of the high mass, due <strong>to</strong> the instability and unevennessof the sandy sea bed and <strong>to</strong> the presence of fast bot<strong>to</strong>m water streams that causeoscillations of the fork. The mechanism supporting the camera has <strong>to</strong> be agile and fast enough<strong>to</strong> compensate for these oscillations. The choice of a <strong>parallel</strong> mechanism is clearly preferablesince it can work fully submersed (with the links moving in the water) and a low overall hydrodynamicresistance is easily achieved, intrinsically, due <strong>to</strong> the <strong>parallel</strong> architecture, and bysuitably shaping the links. Moreover, the actua<strong>to</strong>rs are fixed <strong>to</strong> the base and can be simplyrecovered in waterproof boxes or inside the body of the vehicle so that the required “waterproofvolumes” (<strong>to</strong> host the actua<strong>to</strong>rs and the camera) are the smallest possible, which isadvantageous at high depths, due <strong>to</strong> the high water pressure. (The use of a vision system fullyplaced inside a waterproof box and seeing outside through a transparent window port wouldbe absolutely unsuitable.) In principle, the ranges of rotation of a serial mechanism might belarger, but for the considered application a very large orientation workspace is not necessary.The mobility required by the application is two rotational freedoms (tilt and pan) about aVISIO NSYSTEMSBC RO BO TFigure 2.16: Schematic of the enhanced SBC robot at work


Chapter 2: ArmillEye 65point fixed <strong>to</strong> the base, in order <strong>to</strong> orient the view axis of the camera, and one translationalfreedom along the view axis <strong>to</strong> perform monocular stereoptic vision. Usually the camerasupports have a pan-tilt mobility with the pan axis fixed <strong>to</strong> the base; for the SBC applicationit is convenient that the tilt axis is fixed <strong>to</strong> the base (while of course the pan is about a mobileaxis orthogonal <strong>to</strong> the tilt axis).Mechanisms with two rotational freedoms about a centre of rotation fixed <strong>to</strong> the base andone translational freedom, with the actuated base joints of type prismatic (e.g. the 3PRSand the 3PSP spatial PMs), have not been considered since for underwater applications itis preferable <strong>to</strong> have revolute actuated joints. Mechanisms with the same mobility and baseactuated joints of the type revolute (e.g. the 3RSR 3-dof spatial symmetrical PM ) seemed notsatisfac<strong>to</strong>ry <strong>to</strong> fulfill all the requirements, in particular the desired large orientation workspaceand the tilt-pan mobility with the tilt actuated independently from the pan and the translation.We decided <strong>to</strong> select an architecture derived from <strong>mechanisms</strong> usually utilized as camerasupports.The desired tilt-pan rotational mobility could be achieved by means of a 3 rotational dofmechanism suitably commanded <strong>to</strong> obtain the two desired end-effec<strong>to</strong>r rotational mobilities,e.g. the well known 3RRR architecture Agile Eye proposed by C. Gosselin [16,17]. Clearly,this solution has two drawbacks: one is the presence of three actuated joints instead of thetwo strictly required <strong>to</strong> get two rotational freedoms; moreover, in order <strong>to</strong> have one moretranslational mobility it is necessary <strong>to</strong> modify the mechanism, e.g. by fixing <strong>to</strong> the end-effec<strong>to</strong>rone additional actuated prismatic joint. Also the 2-dof version of Agile Eye (United StatesPatent Number 5,966,991) would have required for the translational freedom an additionalactuated prismatic joint fixed <strong>to</strong> the end-effec<strong>to</strong>r. In the case of HeaveEye (see Chapter 1) theend-effec<strong>to</strong>r translation is commanded by the base joints but one more non-required rotationalfreedom is still present. This additional rotational freedom can be eliminated by suitablycoupling two of the legs. ArmillEye originates from this idea.2.11 4-dof ArmillEyeThe class of architectures presented in this chapter has been conceived <strong>to</strong> be 3-dof. Nevertheless,one more rotational freedom is simply achieved by splitting the interconnected cranksof the C leg. So doing, the system of the structural constraints reduces <strong>to</strong> the 2-systemW C = Span(ϕ A 0 , ϕ B 0 ) and the third rotational freedom is no more constrained by the structuralwrench ζ C 0 (see Section 2.6). The results are new hybrid IC architectures, depending onthe particular translational mechanism used in the translational section.Figure 2.17(a) shows a scheme of the 4-dof version of ArmillEye, with its particular translationalsection.Consider the velocity equations (2.31) <strong>to</strong> (2.34): the only difference, now, is that theCA CBactuated joint velocities in Eqs. (2.33) and (2.34) are, respectively, ˙θ 1 and ˙θ 1 instead of ˙θ 1 C,CA CBwhere ˙θ 1 and ˙θ 1 are the actuated velocities of the base joints of the two cranks in whichthe original interconnected crank has been split off. The new velocity equations, rearranged


Chapter 2: ArmillEye 67that moves superimposed due <strong>to</strong> the fact that they have an identical geometry. The mechanismis IC, but if we imagine <strong>to</strong> split the links P4 LP 5 L and assign one <strong>to</strong> each spherical crank-rod bond,we obtain a purely <strong>parallel</strong> mechanism with the same architecture presented in Chapter 1. So,for the inverse position problem, we can use the same solution discussed in Section 1.5.About the forward position problem, we can compute k A 3 and kB 3 like in Section 2.7. Thistime k CA2 depends on θ1 CA and k CB2 depends on θ1 CB instead of θ1+α C C . Once obtained k A 3 and, the translational section is solved like in Section 2.7.k B 32.12 ConclusionsWe conclude with few final remarks and a recall of the main research <strong>contributions</strong>.The chapter presents a class of novel IC <strong>parallel</strong> 3-dof architectures composed of a sphericalsection carrying a translational section. The difference between the architectures is made bythe translational section.In particular, the discussion focuses on one architecture in the class, named ArmillEyesince it was designed as a camera support. In fact, under some hypothesis on the geometry (inparticular the symmetry of the translational section) ArmillEye has a tilt/pan/zoom mobility.Mobility and kinematics of ArmillEye are discussed and some practical applications of thisarchitecture are outlined.Note that a tilt/pan/zoom mobility is not the same as a pan/tilt/zoom mobility, as itis well known that rotations are not commutative. In fact, usually vision systems have apan/tilt/zoom mobility, but in underwater environments, without any preferential directionof motion imposed by the gravity, a tilt/pan/zoom mobility can be advantageous. In suchenvironments, the vehicle can move in every direction and a pan mobility in the actual viewhorizon, instead of in the gravity view horizon, can be preferable (pan mobility in the planedetermined by the actual tilt).In the end of the chapter, 4-dof variants of the original 3-dof architectures are presentedand briefly discussed.A pro<strong>to</strong>type of ArmillEye is now being designed under the supervision of the author. Itwill be built soon and preliminary tests will start in the next months.


Chapter 3Agraule3.1 Chapter overviewThis chapter presents two other novel interconnected chains (IC) mechanism architectures,Agraule and 3TETRA-P, the first suitable for high <strong>dynamics</strong> operations, the second for fastand accurate orientation of heavy payloads.Agraule, is the 5-dof 3PU 2 S 2 R −1PRUP hybrid architecture. The first part of the chapterpresents its mobility and kinematics. Agraule has four legs connecting the end-effec<strong>to</strong>r <strong>to</strong> thefixed base. The leg chains are not independent and, as discussed in Section 2.2, both forwardand inverse position analysis are represented by coupled algebraic systems, discussed in thefollowing. The Jacobian is obtained by screws.3TETRA-P is a 9 legged 3-dof platform. The contribution of the thesis about this mechanismis limited <strong>to</strong> a very brief presentation of the earliest version of the architecture. Thework is in progress and will continue beyond the thesis.3.2 Agraule : 3PU 2 S 2 R − 1PRUPAgraule is the (hopefully sweeter) name we use for the novel 3PU 2 S 2 R − 1PRUP 5-dofhybrid mechanism architecture. Figure 3.1(a) shows a kinematic scheme of the mechanism.The end-effec<strong>to</strong>r is connected <strong>to</strong> the base by three “lateral” PU 2 S 2 R “legs”, labeled A, B, C,and one central PRUP leg, labeled D. The uppercase “2” above a joint label means that, ifwe follow the leg from the end-effec<strong>to</strong>r <strong>to</strong> the base, we find a couple of such joints at the samelevel on the two separate branches of the leg chain.Consider the L-th “lateral leg”, where L stands for A, B or C. The leg is connected <strong>to</strong>the base by the actuated prismatic joints P M and P N ([M, N] = [B, C], [C, A], [A, B]). The Ujoints are U L M , centred at UL M , and UL N , centred at UL N . The spherical joints are SL M , centredat SM L , and SL N , centred at SL N . The leg is connected <strong>to</strong> the end-effec<strong>to</strong>r by the revolute jointR L .The central leg is serial with two actuated joints: the base prismatic joint P D and thefollowing revolute joint R D . The axis of R D is <strong>parallel</strong> <strong>to</strong> P D . The U joint U D is centred atO. The leg is connected <strong>to</strong> the end-effec<strong>to</strong>r by the prismatic joint P D 1 .We use a base frame O b i b j b k b , with k b <strong>parallel</strong> <strong>to</strong> P D , and a rotating frame Oi O j O k O , withk O <strong>parallel</strong> <strong>to</strong> P D 1 and i O orthogonal <strong>to</strong> both P D and P D 1 .The dof is five (see Fig. 3.2(a)), three rotational and two translational freedoms. The endeffec<strong>to</strong>rrotates about the spherical centre of rotation O and translates in the plane throughO <strong>parallel</strong> <strong>to</strong> P D and P D 1 . The internal coordinate of P L is qP L , L = A, B, C, D; the internalcoordinate of R D is qR D . The external coordinates are the spherical angles ϕ, θ, ψ, the radiusr and the j b coordinate z of the centre O (see Fig. 3.2(a)).A machine with the mobility of Agraule can have numerous industrial applications in69


70 Chapter 3: AgrauleS Ck ORRR R RREERPS AR BR AS BRRRRRRRR C R DP D 1U C U C k ABbU D j OP AU A BU Bi AP B OP CRRRRRRRRRRRRRRRRRRRRRU A CU B CP Dj bi bPPBPP(a)(b)Figure 3.1: Agraule: kinematics scheme with spherical joints of the lateral legs noncoincident(a) and the graph of the mechanism (b)machining, finishing and cleaning of revolution surfaces. Figure 3.6(b) shows a realistic embodimentand Fig. 3.7 presents a possible layout for machining of aircraft body panels.3.3 KinematicsIn this section we discuss the mobility of Agraule and obtain an expression for the Jacobianin the particular case of points SM L and SL N coincident (Figs. 3.3). Then we consider symmetricgeometries with points SM L and SL N noncoincident and outline for them a numerical method<strong>to</strong> solve forward and inverse kinematics.We associate <strong>to</strong> any chosen cartesian reference frame a standard basis, {ϱ x , ϱ y , ϱ z , τ x , τ y , τ z },in the six-dimensional space of twists, S. The elements of this basis are the three rotations andthree translations about the coordinate axes. The dual basis, {ϕ x , ϕ y , ϕ z , µ x , µ y , µ z }, spansthe dual space of wrenches S ∗ . The coordinates of a twist, ξ = (ω,v) = (ω x , ω y , ω z , v x , v y , v z ),and wrench, ζ = (f,m) = (f x , f y , f z , m x , m y , m z ), in the standard basis are:ω σ = µ σ ◦ ξ , v σ = ϕ σ ◦ ξ , f σ = ζ ◦ τ σ , m σ = ζ ◦ ρ σ , σ = x, y, z , (3.1)where “◦” is the reciprocal screw product.3.3.1 Constraint and mobility analysisThis subsection analysis the combined constraints that the four legs apply on the endeffec<strong>to</strong>rlink. This is the premise <strong>to</strong> prove the mobility of the mechanism and obtain theJacobian.Unlike the more known purely <strong>parallel</strong> architectures, in Agraule each actua<strong>to</strong>r actuatessimultaneously more than one leg chain, since the three “lateral legs” are interconnected eachother. These interconnections redistribute the <strong>force</strong> components between the different legs,so increasing the overall constraint on the end-effec<strong>to</strong>r. For purely <strong>parallel</strong> architectures, it isusual <strong>to</strong> analyse the constraint exerted by the single legs with free and locked actua<strong>to</strong>rs, andconsequently determine the spaces of the actuated and structural combined constraints on the


Chapter 3: Agraule 71jCi Oj Ok O=krθOzk O=kCj Oi Ow Lβ LC Lv LriziOkO bjkO bi ϕj(a)(b)Figure 3.2: End-effec<strong>to</strong>r mobility of Agraule (a) and definition of the end-effec<strong>to</strong>r angle β L(b).end-effec<strong>to</strong>r. With IC PMs, the analysis is more complex since it is necessary <strong>to</strong> consider thegeneralised <strong>force</strong>s internal <strong>to</strong> the leg loops, due <strong>to</strong> the interconnections between the legs.In Agraule, the interconnections between the “lateral legs” are at the level of the actuatedlinks (between first and second leg joints) and at the level of the platform links (links connected<strong>to</strong> the end-effec<strong>to</strong>r).Consider the L-th “lateral” leg (Fig. 3.4(a)), L = A, B, C, separately from the rest of themechanism. With base prismatic joints P M and P N free ([M, N] = [B, C], [C, A], [A, B]), theconstraint applied by the leg on the end-effec<strong>to</strong>r is null, while with P M and P N locked, theleg can transmit between the end-effec<strong>to</strong>r and the base any pure <strong>force</strong> ϕ L through S L alongthe intersection of πR L and πL . Hence, the structural constraint provided by the leg (analyzedseparately from the rest of the mechanism) is null (W L = 0) and the system of the actuatedconstraints, with both actuated P joints locked, is the 1-system V L = Span (ϕ L ).Note that, since the “lateral” legs are interconnected and not serial, we do not single outtwo separate systems of actuated constraints for the two actuated joints, but one system ofactuated constraints with both actuated joints locked. In general, for an interconnected legwe can consider one system of actuated constraints for each group of actuated joints at a samelevel in the graph of the leg chain (on <strong>parallel</strong> branches of the graph).Consider, now, the “central” leg D (Fig. 3.4(b)) separately from the mechanism. Withjoints P D and R D free, the leg can transmit any pure <strong>force</strong> ϕ D 0 through O orthogonal <strong>to</strong> πD .Thus, the structural constraint provided by the leg is W D = Span (ϕ D 0 ). With PD locked andR D free, the leg can also transmit any pure <strong>force</strong> ϕ D through O orthogonal <strong>to</strong> both ϕ D 0 andξ D P1 . Hence, the actuated constraint related <strong>to</strong> joint PD is VP D = Span (ϕD 0 , ϕD ). With P Dfree and R D locked, the leg can transmit ϕ D 0 and any pure moment µ D orthogonal <strong>to</strong> bothξ D U1 and ξD U2 (i.e., <strong>parallel</strong> <strong>to</strong> the axis of the U joint). So, the actuated constraint related <strong>to</strong>joint R D is VR D = Span(ϕD 0 , µ D ).Leg D is serial. Once considered in the mechanism, the structural and architectural constraintsit provides are the same obtained by analyzing it separately from the mechanism.The three “lateral” legs form an interconnected system. The combined structural constraintapplied <strong>to</strong> the end-effec<strong>to</strong>r by the system of the lateral legs can be larger than ∑ L W L, L =A, B, C (which is null), due <strong>to</strong> possible additional structural constraint wrenches internal <strong>to</strong>


72 Chapter 3: Agraulek OS CR BS BS AR C R DR AP D 1U C Bk bU DU C AP AU A BU B Ai OP B P Cj OU A CU B CP Di bj bFigure 3.3: Kinematics scheme of Agraule with spherical joints in the lateral legs two by twocoincident.the chains of the system of the interconnected legs. Now, we have <strong>to</strong> check if and when suchadditional wrenches exist for Agraule.The two links connecting S L , respectively, <strong>to</strong> U L M and UL N can transmit pure <strong>force</strong>s ϕL M−−−−→ −−−→and ϕ L N in directions, respectively, S L UM L and S L UN L. These <strong>force</strong>s ϕL M , ϕL N must belong <strong>to</strong>V L , i.e. their sum ϕ L M + ϕL N must lie on the intersection between πL R and πL .With joint P L free, the <strong>force</strong>s ϕ M L and ϕN L applied <strong>to</strong> the slider of joint PL are transmitted <strong>to</strong>the base iff their resultant ϕ L M +ϕL N is orthogonal <strong>to</strong> the direction of PL (i.e. (ϕ L M + ϕL N ) ◦ ξL P).So, we have six pure <strong>force</strong>s ϕ A B , ϕA C , ϕB A , ϕB C , ϕC A , ϕC B , one for each link SL U L M , and thesesix <strong>force</strong>s have <strong>to</strong> satisfy six constraints: three of the type (ϕ M L + ϕN L ) ◦ ξL P and three of thetype (ϕ L M + ϕL N ) ◦ ξL R, representing an homogeneous system of six equations in six unknowns.This system has solutions different from the trivial one iff the six equations are linearlydependent.The combined structural constraint applied <strong>to</strong> the end-effec<strong>to</strong>r by the four legs (threelateral and one central) is W = W D + Span (ϕ A B + ϕA C + ϕB A + ϕB C + ϕC A + ϕC B ). The configurationssuch that the six homogeneous equations are linearly dependent are singular,dimSpan (ϕ A B + ϕA C + ϕB A + ϕB C + ϕC A + ϕC B ) ≥ 1 and the dof of the mechanism is less than5. Out of these (and other) singularities, dim Span(ϕ A B + ϕA C + ϕB A + ϕB C + ϕC A + ϕC B ) = 0,W = W 0 = W D , the dof of the end-effec<strong>to</strong>r is 5 (3 rotational freedoms about O and 2 translationalfreedoms orthogonal <strong>to</strong> ϕ D 0 ) and the end-effec<strong>to</strong>r freedoms span the twist systemT = ∩ L T L = W ⊥ . In every reference frame with i ‖ ϕ D 0 , e.g., Oi O j O k O , the first translationalcomponent of every ξ ∈ T is null, i.e., ξ = (ω x , ω y , ω z , 0, v y , v z ).In this case, the dual space of T is T ∗ = Span (ϕ A , ϕ B , ϕ C , ϕ D , µ D ); T ∗ is the highestsystem of wrenches that the mechanism can actively apply <strong>to</strong> the end-effec<strong>to</strong>r.The system of the actuated constraints V L of leg L considered in the mechanism (withboth P joints locked) is the same as for the leg considered separately from the mechanism,


Chapter 3: Agraule 73ϕ Lξ Rξ L S3ξ L S1ξ M Pξ D P1π L 2ξ L S2ξ D Rξ L UM1 π1Lξ L UM2UMLS L U L Nξ L UN2ξ N Pξ D U1µ D π D (b)ϕ D 0Oξ D U2ϕ Dξ L UN1ξ D P(a)Figure 3.4: Mobility of one “lateral” leg chain (a) and of the central leg chain (b) of Agraule.since the P joints, which are shared, in this case are supposed locked. Thus, the combinedactuated constraint is V = ∑ L V L, without any additional constraint. Out of singularities,V = W 0 ∪ Span(ϕ A , ϕ B , ϕ C , ϕ D , µ D ) is a 6-system and, with locked actua<strong>to</strong>rs, theend-effec<strong>to</strong>r is fully constrained.3.3.2 Jacobian analysisWe write the velocity equations of the mechanism, then reduce them and obtain an expressionfor the Jacobian. A premise <strong>to</strong> the velocity analysis of the mechanism is the extension ofthe standard method for velocity analysis of purely <strong>parallel</strong> PMs proposed in Chapter 4.Consider a nonsingular configuration and a generic end-effec<strong>to</strong>r twist ξ ∈ T . The fourlegs are connected <strong>to</strong> the end-effec<strong>to</strong>r, therefore, in each of them, the sum of the joint screwsmultiplied by the corresponding joint velocities must be equal <strong>to</strong> ξ. We express these fourconditions in four velocity equations.The end-effec<strong>to</strong>r twist computed along the L-th “lateral” leg (Fig. 3.4(a)) is:ξ = ξ L + ω L R ξ L R (3.2)where ξ L is the twist of the leg link connected <strong>to</strong> the end-effec<strong>to</strong>r and ωR L is the passive velocityof R L .Twist ξ L can be computed along the leg subchains P M − S L and P N − S L , obtaining thefollowing two expressions:2∑ξ L = ˙q Q P ξQ P + ωUQi L ξ L UQi +i=13∑ωSiQ L ξ L Si Q = M, N (3.3)where: ωUM1 L , ωL UM2 and ωL UN1 , ωL UN2 are the velocities of the revolute joints of, respectively,U L M and UL N , and ωL SiM and ωL SiN , i = 1, 2, 3, are the velocities of the R joints representing,respectively, S L M and SL N .i=1


74 Chapter 3: AgrauleEquations (3.3) contain both active and passive joint velocities. Since the leg chain is notserial (like in purely <strong>parallel</strong> architectures), no wrenches exist reciprocal <strong>to</strong> all the passive jointscrews. In order <strong>to</strong> eliminate the passive joint velocities, we need two wrenches, ϕ L M and ϕL N ,reciprocal, respectively, <strong>to</strong> {ξ L UM1, ξ L UM2, ξ L S1, ξ L S2, ξ L S3, ξ L R} and {ξ L UN1, ξ L UN2, ξ L S1, ξ L S2, ξ L S3, ξ L R}.Two wrenches satisfying these conditions are the two components ϕ L M and ϕL N of ϕL ,through O, in directions, respectively, −−−−→ −−−→S L UM L and S L UN L, ϕL M + ϕL N = ϕL .The reciprocal product of both sides of Eq. (3.2) by ϕ L gives:ϕ L ◦ ξ = ϕ L ◦ ξ L = ϕ L M ◦ ξL + ϕ L L ◦ ξL . In the right-hand side of this equation, we substitute<strong>to</strong> the first ξ L its expression provided by the first of the Eqs. (3.3) and <strong>to</strong> the second ξ L itsexpression provided by the second of the Eqs. (3.3), then simplify and obtain:ϕ L ◦ ξ = ˙q M P ϕ L M ◦ ξ M P + ˙q N P ϕ L N ◦ ξ N P (3.4)Consider, now, the “central” leg D. The joint velocities must satisfy the following equation:ξ = ˙q D P ξ D P + ˙q D R ξ D R + ω D U1 ξ D U1 + ω D U2 ξ D U2 + v D P1 ξ D P1 (3.5)Wrench µ D is reciprocal <strong>to</strong> all leg joints but ξ D R, while ϕ D is reciprocal <strong>to</strong> all leg joints butξ D P . So, we multiply Eq. (3.5), respectively, by µD and ϕ D and obtain the equations:ϕ D ◦ ξ = ˙q D P ϕD ◦ ξ D P (3.6)µ D ◦ ξ = ˙q D R µD ◦ ξ D R (3.7)The three Eqs. (3.4) and Eqs. (3.6) and (3.7) are the five velocity equations of Agraule. Wecan rearrange them in the classical matrix form Zξ = Λ˙q. In a reference frame with i ‖ ϕ D 0 ,the i component of the translation velocity component of every feasible ξ is null, then we canwrite: ⎡⎤˜ϕ A ⎡˜ϕ B˜ϕ Cξ =⎢⎣˜ϕ D⎢⎥ ⎣⎦˜µ D0 ϕ A B ◦ ξB P ϕA C ◦ ξC P 0 0ϕ B A ◦ ξA P 0 ϕ B C ◦ ξC P 0 0ϕ C A ◦ ξA P ϕC B ◦ ξB P 0 0 00 0 0 ϕ D ◦ ξ D P 00 0 0 0 µ D ◦ ξ D R⎤⎡⎥⎢⎦⎣˙q A P˙q B P˙q C P˙q D P˙q D R⎤⎥⎦(3.8)where, if ξ = (ω x , ω y , ω z , v x , v y , v z ) and ζ = (f x , f y , f z , m x , m y , m z ) are, respectively, any twistand any wrench, then ξ = (ω x , ω y , ω z , v y , v z ), ζ = (f y , f z , m x , m y , m z ),[ ]ζ˜ 0 I3= ζ L (3.9)I 2 0and I n is the n×n identity matrix.In a nonsingular configuration, the geometric Jacobian is easily obtained from Eq. (3.8):ξ = J˙q = Z −1 Λ˙q.Like for the example discussed in Chapter 2, the entries of Z and Λ can be expressedreferring <strong>to</strong> the geometry parameters of the mechanism.


Chapter 3: Agraule 75−−→OSB A = ( −.137 −.062 .394 )−−−−→ξ A P = ( 0 0 0 −.114 −.139 .984 )UBS A B A = ( .153 −.322 .419 )−−−−→ξ B P = ( 0 0 0 .336 .240 .911 )UC A SB A = ( .017 .249 .490 )−−−→ξ C P = ( 0 0 0 −.223 .433 .873 )C A C = ( .137 .062 0 )−−→ξ D P = ( 0 0 0 0 .190 .982 )OSC B = ( .084 −.124 .394 )−−−−→ξ D R = ( 0 .190 .982 0 0 0 )UC B SC B = ( .143 .218 .484 )−−−−→ϕ A B = ( −.124 .262 −.340 −.082 −.095 −.043 )UA B SC B = ( −.273 −.128 .460 ) ϕ A C = ( −.023 −.328 −.647 .169 −.097 .043 )−−−→C B C = ( −.084 .124 0 )−−→ϕ B C = ( −.165 −.252 −.558 .169 −.018 −.042 )OSA C = ( .070 .133 .394 )−−−−→ϕ B A = ( .255 .119 −.429 .006 .136 .042 )UA C SA C = ( −.269 .033 .479 )−−−−→ϕ C A = ( .332 −.041 −.590 −.062 .172 −.047 )UB C SA C = ( .283 −.192 .431 )−−−→ϕ C B = ( −.261 .177 −.398 −.123 −.075 .047 )C C C = ( −.070 −.133 0 ) ϕ D = ( 0 1. 0 0 0 0 )ϕ D 0 = ( 1. 0 0 0 0 0 ) µD = ( 0 0 0 −.039 .182 .983 )Table 3.1: Numerical example: configuration and constraint wrenches in the reference frameOi O j O k O .Matrix Z becomes:⎡ −−→OS B × ( t B C nB C + ( ⎤tB A A) nB tBC n B C + tB A A) nB Ir−−→OS C × ( t C BZ =nC B + ( tC A A) nC tCB n C B + tC A A) nC Ir−−→OS⎢A × ( t A B nA B + ( tA C C) nA tAB n A B + tA C C) nA Ir( ) ⎥⎣ 0 k · nDP k − n D P Ir ⎦n D U 0(3.10)−−−−→where: n L M is a unit-length vec<strong>to</strong>r in direction UM L SL , t L M = s L M,s L M cL N +sL N cL ML; M; N = A, B, C, L ≠ M ≠ N; s L M , cL M are the sine and cosine of the angle that nL Mforms with the plane defined by the points O, R L and S L ; n L P , L = A, B, C, D, is a unit-lengthvec<strong>to</strong>r in the direction of the actuated prismatic joint P L ; n D U is a unit-length vec<strong>to</strong>r <strong>parallel</strong><strong>to</strong> µ D ; and I r is a 3× 2 matrix whose only non-null entries are I r22 = I r31 = 1.Matrix Λ is:Λ= ⎡0 t B C nC P · nB C tB A nA P · ⎤nB A 0 0t C B nB P · nC B 0 t C A nA P · nC A 0 0t A B⎢nB P · nA B tA C nC P · nA C 0 0 0(3.11)( )⎣ 0 0 0 k · nD 2 ⎥P − 1 0 ⎦0 0 0 0 n D U · nD PThe following section shows a numerical example.Numerical exampleWe show a numerical example of computation of the geometric Jacobian for a genericmechanism geometry and a generic configuration. Table 3.1 and Fig. 3.5 show the mechanismconfiguration and the constraint wrenches of the legs.Matrix Z, which gathers the constraint wrenches ˜ϕ L = ˜ϕ L M + ˜ϕ L N , L = A, B, C, and ˜ϕ D


76 Chapter 3: Agrauleξ B Pξ C Pµ DS A CS B SCϕ DOϕ D 0ϕ AϕO C BB bξ A Pξϕ B Aϕ B Cϕ A Cϕ C AFigure 3.5: Numerical example: scheme of the mechanism architecture and of the constraintwrenches.and ˜µ D , is:Matrix Λ is:⎡Z =⎢⎣Λ =⎢⎣and the geometric Jacobian is:⎡.087 −.193 0 −.066 −.987.175 .118 0 −.133 −.987−.185 .097 0 .136 −.9880 0 0 1. 0−.039 .182 .983 0 0⎡J = Z −1 Λ =⎢⎣0 −.289 −.702 0 0−.467 0 −.560 0 0−.613 −.407 0 0 00 0 0 .190 00 0 0 0 1.⎤⎥⎦⎤⎥⎦.500 1.094 −1.6100 .141 0−1.647 .618 .915 .001 0.325 −.071 −.233 .006 1.0170 0 0 .190 0.366 .268 .391 0 0⎤⎥⎦(3.12)(3.13)(3.14)For example, if we choose the actuation velocities ˙q = [ 1. 2. 3. 1.5 0.25 ] T , the correspondingend-effec<strong>to</strong>r twist ξ = J˙q (shown in Fig. 3.5) is:ξ = ( −1.928 2.336 −.255 .284 2.074 ) (3.15)The results have been validated by ADAMS.


Chapter 3: Agraule 77k D B3r sB C C BsC C C sB BsD Cjip B A D AssC AuA C E Bu u OaqPE CB quA APDu G B ka apE A uiaO bq acG APC G C japqRDapu A Bq A P2s two coincident S jointsu U joint3r three coincident R joints(a)papacP jointactuated P jointactuated C joint(b)Figure 3.6: Agraule: kinematics scheme of a symmetric geometry (a) and a realistic embodimen<strong>to</strong>f the machine (b).3.3.3 Position analysis for symmetric geometriesThis section discusses the forward and inverse position analysis of Agraule in the particularcase of symmetric geometry with S L joints noncoincident (Fig. 3.6(a)). The “lateral legs” havethe same geometry. The six S joints lie in a plane intersecting ξ L R orthogonally at point C. Thepose of the end-effec<strong>to</strong>r is represented by the location and the orientation of the end-effec<strong>to</strong>rframe Cijk. The S joints of each leg are disposed symmetrically with respect <strong>to</strong> the plane π1Lthrough ξ L −−−−→R orthogonal <strong>to</strong> SM L SL N ; the intersection point between −−−−→πL 1 and the segment SM L SL Nis C L .The P joints P A , P B , P C , are disposed symmetrically with respect <strong>to</strong> ξ D R and form the sameangle α with ξ D R. The plane through ξ D R, <strong>parallel</strong> <strong>to</strong> P L , is named πP L ; every two consequentπP L (i.e., πA P and πB P , πB P and πC P , πC P and πA P ) form an angle of 120˚.In each leg, joints U L M and UL N are disposed symmetrically with respect <strong>to</strong> πL P , and| −−−−→UM L SL M | = |−−−−→ UN LSL N |.The internal coordinate qP D is the distance between O and the center O b of the base frame.The internal coordinate qP L, L = A, B, C, is the distance of the middle point of UL M UL Nfrom the base point G L . Point G L is the base point which coincides with the middle point ofUM L UL N when UL M and UL N lie in the base plane through O b orthogonal <strong>to</strong> ξ D R. Obviously, due<strong>to</strong> the hypothesis, the triangle G A G B G C is equilateral.Preliminaries <strong>to</strong> position analysisIn this section we develop some expressions, which are used in the following.The rotation of the end-effec<strong>to</strong>r about its symmetry axis is represented by the externalcoordinate ψ. This external coordinate depends only on the internal coordinate qR D and iseasily obtained by solving the kinematics of U D . Analogously, in the inverse position problemqR D is computed from ψ. Therefore, we can consider both forward and inverse position problemslike problems in four unknowns (x = [ z r ϕ θ ] T the forward and q = [ qP A qB P qC P qD P ]T


78 Chapter 3: AgrauleFigure 3.7: Agraule carried by a cartesian positioning robot for aircraft body manufacturing(holing and con<strong>to</strong>uring).the inverse).−→Due <strong>to</strong> the choice of the external coordinates, vec<strong>to</strong>r OC is easily obtained from−→x: OC = r v OC = [ r ib r jb r kb ] T = [ r sθcϕ r sθsϕ r cθ ] T . On the other hand,the components of x that depend on −→ OC are easily expressed by: [ r ϕ θ ]T=[ |r| arctan2(r jb , r ib ) arccosr kb / |r| ] T .An expression for the unit-length vec<strong>to</strong>r v L <strong>parallel</strong> <strong>to</strong> −−−→CC L is:v L = [ cϕcθcβ L − sϕsβ L sϕcθcβ L + cϕsβ L −sθcβ L ] T (3.16)where β is the angle about ξ L R that −−−→CC L forms with the plane defined by O, C, O b (seeFig. 3.2(b)).The unit-length vec<strong>to</strong>r w L in direction v OC ×v L is:v L = [ −cϕcθsβ L − sϕcβ L −sϕcθsβ L + cϕcβ L sθsβ L ] T (3.17)Vec<strong>to</strong>rs −−−→ −−→OSM L and OSN L can be expressed as functions of the components of x and of thethree angles β L (see Fig. 3.6(a)):−−→OS A C = z k b + r(r, ϕ, θ) + dv A (ϕ, θ, β A ) + b/2w 1 (ϕ, θ, β A )−−→OS B C = z k b + r(r, ϕ, θ) + dv B (ϕ, θ, β B ) − b/2w 2 (ϕ, θ, β B )−−→OS B A = z k b + r(r, ϕ, θ) + dv B (ϕ, θ, β B ) + b/2w 2 (ϕ, θ, β B )−−→OS C A = z k b + r(r, ϕ, θ) + dv C (ϕ, θ, β C ) − b/2w 3 (ϕ, θ, β C )−−→OS C B = z k b + r(r, ϕ, θ) + dv C (ϕ, θ, β C ) + b/2w 3 (ϕ, θ, β C )−−→OS A B = z k b + r(r, ϕ, θ) + dv A (ϕ, θ, β A ) − b/2w 1 (ϕ, θ, β A )where d = | −−−→OC L |, L = A, B, C, and b = | −−−→S A B SA C | = | −−−→S B C SB A | = | −−−→S C A SC B |.(3.18)


Chapter 3: Agraule 79The centers U L M and UL N of UL M and UL N depend on qA P , qB P , qC P :−−−→ [ √3OUC A =−−−→OU B C =−−−→OU B A =[ √3[a2−−−→ [OUA C = − a 22 sα q 1+ l 2 − a 4− sα 2 q 1− √ 36 l− √ 34 a cα q 12 sα q 1+ l 2 + a 4− sα 2 q 1− √ 36 l+ √ 34 a cα q 1√33 l+sα q 2 cα q 2] T√33 l+sαq 2 cα q 2] T−−−→ [OUB C = − √ 32 sα q 3− l 2 − a 4− sα 2 q 3− √ 36 l+ √ 34 a cα q 3−−−→ [OUB A = − √ 32 sα q 3− l 2 + a 4− sα 2 q 3− √ 36 l− √ 34 a cα q 3] T] T(3.19)] T] Twhere l is the side of the equilateral triangle G A G B G C and a = | −−−−→UC AUB C | = |−−−−→ UA BUC A | = |−−−−→ UB CUA B |(see Fig. 3.6(a)).Forward kinematicsWe compute the locations of the six points SM L , SL N from the internal coordinates q.The six −−−→OUM L , −−−→OUN L are provided as functions of the q by Eqs. (3.19) and z = qD P . Asclosure equations, we take the following six equations, stating | −−−−→UM L SL M | = |−−−−→ UN LSL N | = m:( −−−→ −−−→2OUM L (q) − OSM L (x, βA , β B , β )) C = m 2 , L = A, B, C( −−−→OU L N(q) − −−−→OS L N(x, β A , β B , β C )) 2= m 2 , L = A, B, C(3.20)Equations (3.20) are a system of six nonlinear algebraic equations in the six unknownsr, ϕ, θ, β A , β B , β C . We do not provide a closed form solution. The system can be solvednumerically.Inverse kinematicsThe pose x of the end-effec<strong>to</strong>r is known. The position vec<strong>to</strong>rs −−−→OSM L , −−−→OSN L are expressedas functions of β A , β B , β C by Eqs. (3.18); qP D = z, where z is known. We can use againEqs. (3.20), intended as a system of six nonlinear algebraic equations in the six unknowns qP A,qP B, qC P , βA , β B , β C . No explicit solution is provided but the system can be solved numerically.Meaningless solutions are avoided by suitable inequalities.The following section outlines another geometrical approach <strong>to</strong> the inverse kinematics,alternative <strong>to</strong> system (3.20).Geometrical approach <strong>to</strong> the inverse kinematicsThe inverse position problem can be faced following another geometrical approach, insteadof system (3.20), in both cases of S L 1 and S L 2 noncoincident and coincident.The external coordinates are known. Therefore, each −−−→ −−−→OSM L and OSN L , according <strong>to</strong>Eqs. (3.18), is a function of only one β L . Points UM L and UL N lie at one of the two intersectionsbetween, respectively, the straight lines p L A , pL E (loci of the possible locations of UL M


80 Chapter 3: AgrauleS C B SC AR CR BS A B R AS A CP D 1U C BU DU A BP B P CU A C U B CS B AS B CU C AU B AP AS CR CR B S BS A R AP D 1U C U C ABU DP AU A BU B AP B P CU A C U B C(a)(b)Figure 3.8: Simple variants of Agraule.and UN L due <strong>to</strong> the prismatic joint) and, respectively, the spheres SL B and SL D having centresSM L and SL N , L, M = A, B, C, and radius m. For constructive reasons, the intersection <strong>to</strong> betaken in<strong>to</strong> account (of the two that are generally possible) is that with a lower z component.The following relations hold:−−−→OUB A (βA ) · k b = −−−→OUC A (βB ) · k b−−−→OUC B (β B ) · k b = −−−→OUA B (β C ) · k b(3.21)−−−→OUA C (βC ) · k b = −−−→OUB C (βA ) · k bEquations (3.21) are a system of three nonlinear, algebraic equations in the three unknownsβ L . This system replaces system (3.20). Once solved, the centres SM L and UL N of the spheresSB L and SL D are singled out by Eq. (3.18) and the intersections of SL B and SL D with, respectively,the lines p L A , pL E give the q. The numerical solution is simpler due <strong>to</strong> the lower number ofunknowns.3.4 A larger class of <strong>mechanisms</strong>Agraule belongs <strong>to</strong> a larger class of hybrid IC PMs, whose architectures follow the idea <strong>to</strong>orient and support an end-effec<strong>to</strong>r link by means of a system of “lateral” leg chains, while thecenter of rotation of such end-effec<strong>to</strong>r is defined by another “central” leg chain with a suitablekinematics geometry.The architecture of the “lateral” legs is not necessarily the one of Agraule; what is requiredis that the combined constraint that these “lateral” legs apply <strong>to</strong> the end-effec<strong>to</strong>r does notcontain wrenches constraining the end-effec<strong>to</strong>r rotation about the centre of rotation imposedby the “central” leg. The number of the “lateral” legs can vary from one <strong>to</strong> any number,depending on their architecture.Figures 3.8(a) and 3.8(b) show two simple variant of Agraule. In the pictures, the “central”


Chapter 3: Agraule 81COBplatformOPASCCSObBObBbasePAAFigure 3.9: Kinematics schemes of a symmetric embodiment of the 3TETRA-P architecture.leg is a simple extensible limb. The “lateral” legs define the orientation of the end-effec<strong>to</strong>rand its radial extrusion, so they command three end-effec<strong>to</strong>r dofs; the whole end-effec<strong>to</strong>r dofdepends on the mobility of the centre of rotation, i.e., if the centre of rotation is fixed <strong>to</strong>the base or if it can be moved. In Agraule this centre of rotation translates along a straightline (1-dof) and the end-effec<strong>to</strong>r dof is five, since one more dof is due <strong>to</strong> the rotation of theend-effec<strong>to</strong>r about its axis. If the centre of rotation has a planar mobility, e.g., if it is carriedby the end-effec<strong>to</strong>r of a 2-dof planar mechanism, then the end-effec<strong>to</strong>r dof is six: five more theoptional rotation of the end-effec<strong>to</strong>r about its axis.Other interesting architectures are obtained by changing the architecture of the “lateral”legs and their number. If we stress the concept, also the 4-dof variant of ArmillEye with anadded spindle mobility (see Fig. 2.14 in Chapter 2) belongs <strong>to</strong> the same class of <strong>mechanisms</strong> ofAgraule, since also in that case we have a “central” leg, fixing the centre of rotation, and some“lateral” legs defining the orientation and the extrusion of the spindle. In fact the differencebetween the two classes of architectures is in the constraint that the system of the “lateral”legs applies <strong>to</strong> the end-effec<strong>to</strong>r: in the case of the variant of ArmillEye, the “lateral” legs fullyconstrain the end-effec<strong>to</strong>r, while in the case of the Agraule-like <strong>mechanisms</strong>, without centralleg, the end-effec<strong>to</strong>r is not fully constrained.3.5 3TETRA-PHopefully, the researches of the author of this thesis in the field of high <strong>dynamics</strong> PMswill continue beyond the thesis. In this section we only report a last architecture that we areconsidering for the cooperative table of a robotised machining center.Traditionally, machining centers consist of a multi dof machine that executes the machiningoperations and of a fixed table carrying the worked piece. Sometimes, the table has somelimited mobility, but these freedoms are usually used <strong>to</strong> locate the worked piece under themulti dof machine and they do not play any active rule during the machining operations.A new paradigm for machining is use of cooperative machining centers composed of many


82 Chapter 3: Agraulelimited-dof agents that cooperate <strong>to</strong> produce the final piece. Since the required accuracyis usually very high, the mechanical architecture of the agents must be attentively chosen.Moreover, the need of a high production rate stresses the expected working accelerations and,since worked pieces are frequently very heavy, the result are high inertial <strong>force</strong>s.This section introduces the problem of the synthesis of robotic orientation platforms forcooperative machining centers. As a very preliminary result, it is presented the architecturenamed 3TETRA-P shown in Fig. 3.9.The mechanism is composed of a base, a mobile platform and three tetrahedral “legs”.Each tetrahedral “leg” consists of three rods connected, on one side, at the same platformslider by S joints, while their other extremities are connected by U joints <strong>to</strong> the three basesliders. The dof is three. In this first version the mobility of the platform is rotational andtranslational. The translational freedoms are coupled <strong>to</strong> the rotational ones and, in fact, inthis early version of the architecture, the mobility of the platform is not optimal for the task.It is not possible <strong>to</strong> orient at wish the platform without some platform translation.The base P joints are coplanar and each tetrahedral “leg” has two rod with the same lengthand a longer third rod. Therefore, the vertex of the “leg” lies in a plane orthogonal <strong>to</strong> andpassing through the middle point of the base edge opposite <strong>to</strong> the longer rod. The three planes,one for each tetrahedral “leg”, intersect at a straight line orthogonal <strong>to</strong> the plane of the baseP joints.More work on the architecture and on the geometry will be necessary <strong>to</strong> reach a platformmobility suitable for the considered application.3.6 ConclusionsThe chapter presents two more IC <strong>parallel</strong> architectures for high <strong>dynamics</strong> operations.Once again, conception and design have been steered by the requirements imposed by theconsidered tasks. The first architecture presented, Agraule, deserves some industrial interests.In the near future, it will be considered the possibility of deepening its study and designingand realizing a pro<strong>to</strong>type <strong>to</strong> test its performances. The second architecture, 3TETRA-P, isjust in a preliminary phase of study.


Part IIMethods


Chapter 4Force transmission oriented analysis ofnonoverconstrained limited-dof PMs andremarks on velocity analysis of interconnectedchains hybrid PMs4.1 Chapter overviewThe chapter presents a method for <strong>force</strong> transmission analysis of nonoverconstrained purely<strong>parallel</strong> PMs with less than 6-dof (limited-dof PMs [19,20]) and proposes a simple extension ofthe standard method for the velocity analysis of purely <strong>parallel</strong> PMs, <strong>to</strong> redundantly actuatedPMs. This extension is collected in the thesis as a premise <strong>to</strong> the constraint and mobilityanalyses carried out in Chapters 2 and 3 for the hybrid PMs ArmillEye and Agraule.The method for <strong>force</strong> transmission analysis has been developed for the analysis of the<strong>force</strong> transmission throughout the legs and the related singularities. The method focuses inparticular on the <strong>force</strong> characteristics, which have a fundamental importance for the designof the mechanism. A given set of external generalised <strong>force</strong>s is applied <strong>to</strong> the end-effec<strong>to</strong>r.Suitable linear combinations of the <strong>force</strong> characteristics are singled out for every desired linksection.4.2 IntroductionThe design of <strong>parallel</strong> <strong>mechanisms</strong> is quite complex, due <strong>to</strong> the number of strictly interrelatedfunctional and structural problems <strong>to</strong> be faced. Many researchers, in the past years, proposedmethodologies and optimisation criteria <strong>to</strong> be used as design criteria particularly in order<strong>to</strong> obtain large and suitably shaped workspaces, <strong>to</strong> avoid functional singularities and <strong>to</strong> reachsatisfac<strong>to</strong>ry robot behaviours (C. Gosselin, J. Angeles, J-P. Merlet, among others [21–29]).Moreover, investigations have been directed <strong>to</strong> the design requirements for effective control,such as stiffness of links and joints and the consequences of friction and clearances [30]. However,most works on <strong>parallel</strong> robots deal only with the kinematics aspects, without exhaustivelyanalysing the <strong>force</strong> transmission throughout the mechanism. Depending on the mobility, amerely kinematics approach can take in<strong>to</strong> account only the part of the transmitted generalised<strong>force</strong>s, which is due <strong>to</strong> the actuation of the mechanism, while the remainder <strong>force</strong>s, i.e., thestructural constraint <strong>force</strong>s, are disregarded.In this chapter we discuss the overall <strong>force</strong> transmission throughout the mechanism andthe related singularities for nonoverconstrained, <strong>parallel</strong>-chain <strong>mechanisms</strong> with less than 6-dof (limited-dof PMs), specifically addressing <strong>to</strong> the structural constraint components, up tillnow often neglected as compared with the velocity transmission patterns. With <strong>parallel</strong>-chain<strong>mechanisms</strong>, we mean <strong>mechanisms</strong> composed of a base link, an end-effec<strong>to</strong>r link and a certain85


86 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsFigure 4.1: Example of <strong>parallel</strong>-chain mechanism.number of serial chains (leg chains), each connecting the base <strong>to</strong> the end-effec<strong>to</strong>r (Fig. 4.1). Inthe case that the degree of freedom of the end-effec<strong>to</strong>r link is less than six, some authors use thename constrained mechanism, but we think that this can lead <strong>to</strong> confusion and that limiteddofmechanism is preferable. We also assume that, out of singular configurations, the mobilityof the end-effec<strong>to</strong>r link coincides with its degree of freedom, i.e., the actua<strong>to</strong>rs command theentire mobility of the end-effec<strong>to</strong>r link and, with locked actua<strong>to</strong>rs, the end-effec<strong>to</strong>r is fully andnonredundantly constrained (details in Section 4.3).As well known, under suitable hypotheses the Jacobian of the transform between inputand output coordinates of a mechanism relates input <strong>to</strong> output velocities as well as input <strong>to</strong>output actuation generalised <strong>force</strong>s. So, in a mechanism, the Jacobian matrix singularities,known as kinematics singularities, are related not only <strong>to</strong> kinematics but also <strong>to</strong> statics of theactuation <strong>force</strong>s. Such singularities are usually considered during the functional design of a<strong>parallel</strong> robot [10, 31], and the workspace mapping of the condition number of the Jacobianmatrix is accordingly used as index of robot dexterity [26].The structural analysis of limited-dof <strong>parallel</strong> <strong>mechanisms</strong> gives rise <strong>to</strong> a different kind ofsingularities (constraint singularities), related <strong>to</strong> the constraint <strong>force</strong> transmission, which arenot described by the conventional Jacobian matrix [11,32]. The rotation singularities of the3-UPU <strong>parallel</strong> mechanism, examined in [33] and in [34], are an example of such constraintsingularities.Main purpose of the methodology proposed in this chapter is <strong>to</strong> provide the designerwith an instrument <strong>to</strong> design <strong>mechanisms</strong> free of constraint singularities as well as a Jacobianapproach allows designing <strong>mechanisms</strong> free of kinematics singularities. The argument deservedhuge attention between kinematicians and robot engineers from 2001, when the SNU (SeoulNational University) translational <strong>parallel</strong> robot collapsed during a demonstration organisedat the 2 nd Workshop on Computational Kinematics, May 22, 2001. The fact echoed likea puzzling phenomenon, while it had just been addressed for the case of the SNU <strong>parallel</strong>architecture in [35,36] (later proposed again in [33]), and ”rediscovered” by me in my masterthesis in 2000 [34], while designing the 3-PUU assembly robot Zoe, mentioned in the followingSection 4.5.2. The matter of this chapter originates as a wide generalisation of the conceptsand the method presented in that master thesis.In order <strong>to</strong> outline the context of the research, it is noteworthy <strong>to</strong> mention the particular6×6 Jacobian matrix and the related method proposed by Joshi and Tsai in a recent paper [19](published while a paper disclosing our methodology was just under review). The authors usereciprocity of screw systems in order <strong>to</strong> derive a generalised Jacobian which can be used <strong>to</strong>single out both kinematics and constraint singularities, for limited-dof <strong>parallel</strong> <strong>mechanisms</strong>.


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 87In the following we propose a different systematic approach <strong>to</strong> this problem, which leads <strong>to</strong>the analysis of final matrices that are similar <strong>to</strong> that obtained by Joshi and Tsai.In fact, constraint singularities had been presented earlier (e.g., in [37,38]). Later on, otherworks has dealt with them and their physical interpretation [11,32] (et alia).For explana<strong>to</strong>ry purpose, the method proposed in this chapter is applied <strong>to</strong> a Linear Deltarobot and constraint singularity surfaces are computed and shown.4.3 Remarks on statics of nonoverconstrained PMsFrom the point of view of the combined constraint that the legs apply <strong>to</strong> the end-effec<strong>to</strong>r,<strong>parallel</strong> <strong>mechanisms</strong> can be overconstrained or nonoverconstrained. The mechanical lay-ou<strong>to</strong>f a nonoverconstrained <strong>parallel</strong> mechanism with locked actua<strong>to</strong>rs can be analysed by meansof the rigid body equilibrium equations, since by hypothesis the end-effec<strong>to</strong>r and every linkof the mechanism are nonredundantly constrained by the remainder links. On the contrary,overconstrained <strong>parallel</strong>-chain <strong>mechanisms</strong> are redundantly constrained and the joint reactionscannot be computed by means of the rigid body equations. In the case of nonoverconstrained<strong>parallel</strong>-chain <strong>mechanisms</strong>, the dimension of the constraint that the leg chains exert on theend-effec<strong>to</strong>r link, with locked actua<strong>to</strong>rs, is six.Moreover, <strong>parallel</strong> <strong>mechanisms</strong> can be divided in<strong>to</strong> two categories, depending on the mobilityof the end-effec<strong>to</strong>r link: 6-dof <strong>parallel</strong> <strong>mechanisms</strong> (such as the Stewart Platform) andlimited-dof <strong>parallel</strong> <strong>mechanisms</strong> (for instance the purely translating ones, such as the Delta).The present approach is restricted <strong>to</strong> limited-dof, nonoverconstrained <strong>parallel</strong> <strong>mechanisms</strong>,with ideal constraints.If the number of degrees of freedom n of a mechanism is six and if the mechanism configurationis not singular, all external generalised <strong>force</strong>s applied <strong>to</strong> the end-effec<strong>to</strong>r link aretransmitted <strong>to</strong> the actua<strong>to</strong>rs, and this transmission is described by the transposed Jacobianmatrix. On the contrary, if n is lower than six, only the generalised <strong>force</strong>s which correspond<strong>to</strong> the degrees of freedom of the end-effec<strong>to</strong>r (actuation <strong>force</strong>s) are balanced by the actua<strong>to</strong>rs;we represent the actuation <strong>force</strong>s by the n-dimensional vec<strong>to</strong>r F a . The remaining generalised<strong>force</strong>s applied <strong>to</strong> the end-effec<strong>to</strong>r (constraint <strong>force</strong>s) are balanced by joint reactions, withouteffect on the actua<strong>to</strong>rs; we represent the constraint <strong>force</strong>s by the (6−n)−dimensional vec<strong>to</strong>rF c .In the frictionless case, the equations of motion are projected in<strong>to</strong> two sub-spaces: tangentand orthogonal <strong>to</strong> constraints [39,40]; the solution in the tangent sub-space (corresponding <strong>to</strong>the actuated joint coordinates) provides the system motion, depending on F a ; the solution inthe orthogonal sub-space provides the constraint reactions, dependent on F c .The distinction between F a and F c is obvious for many architectures: for instance, withregard <strong>to</strong> the Delta, F a is the three-dimensional vec<strong>to</strong>r of the external <strong>force</strong> applied <strong>to</strong> theplatform, which is related <strong>to</strong> the actuation moments by the Jacobian matrix, while F c isthe three-dimensional vec<strong>to</strong>r of the external moments applied <strong>to</strong> the platform by the workenvironment. In general the distinction is not so evident: for some architectures, the degreesof freedom related <strong>to</strong> F a are combinations of rotational and translational motions and varywith the point of the workspace; still, numerical methods exist <strong>to</strong> single out the actuated jointcoordinates, and consequently the F a components [39].In the following, we suppose the mechanism in static conditions and with no distributed<strong>force</strong> applied <strong>to</strong> the legs. The linear relation between F a and the actua<strong>to</strong>rs generalised <strong>force</strong>s


88 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsFigure 4.2: End-effec<strong>to</strong>r link with the portions of legs bounded by four sections in a <strong>parallel</strong>chainmechanism with four legs.is expressed by the n×n Jacobian matrix [41]:F a = J T τ (4.1)We assume that the end-effec<strong>to</strong>r is connected <strong>to</strong> the fixed frame by p legs, and we considerone section for each leg; 6p generalised <strong>force</strong>s act on these sections (a normal <strong>force</strong> component,two shear <strong>force</strong> components, two bending moment components and one <strong>to</strong>rsional momentcomponent for each section); all these generalised <strong>force</strong>s compose the vec<strong>to</strong>r S of the <strong>force</strong>characteristics.The equilibrium of the system composed of the end-effec<strong>to</strong>r and of the portions of legsbounded by said p sections (Fig. 4.2) depends on the external <strong>force</strong>s acting on the end-effec<strong>to</strong>rand on the 6p <strong>force</strong> characteristics. We suppose that the external <strong>force</strong>s are known, and the<strong>force</strong> characteristics S are the unknowns. Since we consider nonoverconstrained robots, theproblem is isostatic (it can be solved on the base of a rigid-body model of the system) and alinear relation exists between F c and the <strong>force</strong> characteristics S. We have 6p linear equationsin 6p unknowns: the six equilibrium equations of the system and the 6(p − 1) equationsthat express the (frictionless) static equilibrium of the joints. The following linear system is,accordingly, written: ⎡ ⎤⎢⎣F aF c0.0⎡ ⎤= ⎣ L card⎦ S = LS (4.2)L joint⎥⎦The 6×6p matrix L card represents the coefficients of the equilibrium equations. The6(p − 1)×6p matrix L joint represents the relations between the 6p <strong>force</strong> characteristics: theserelations are due <strong>to</strong> type and sequence of the joints in the leg chains, which do not depend onF a and F c .If matrix L is nonsingular, the local problem (4.2) has one solution; this solution is obtained


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 89inverting L and considering only the 6p×6 matrix E, composed of the first 6 columns of L −1 :⎡ ⎤F aF c⎡ ⎤S = L −1 0= E ⎣ Fa⎦ (4.3).F c⎢ . ⎥⎣ ⎦0When L is invertible, the rank of E is 6; moreover, vec<strong>to</strong>r S belongs <strong>to</strong> a 6−dimensionalsubspace of R 6p , since it depends on a 6−dimensional vec<strong>to</strong>r. By properly reordering thecomponents of S and the rows of E, system (4.3) can be rewritten with a non-singular 6×6minor E ind in the first six rows:⎡ ⎤ ⎡ ⎤⎡⎤S 0 = ⎣ S ind⎦ = ⎣ E ind⎦⎣ Fa⎦ (4.4)S dip E dip F cOf course, more than one possible choice of S ind exists; whenever possible, the selection of S indshould be based on the physics of the problem; furthermore, it is preferable <strong>to</strong> choose a set ofcomponents which is suitable <strong>to</strong> be used all over the workspace. In Eq. (4.4), the rows beyondthe sixth one are a linear combination of the first six rows; therefore, vec<strong>to</strong>r S 0 is expressed asfunction of S ind : ⎡ ⎤⎡ ⎤S 0 = ⎣I ⎦ S ind = TS ind = TE ind⎣ Fa⎦ (4.5)T inf F cWe consider now the upper part of system (4.4). Since matrix E ind is full-rank, the 6×nrectangular matrix composed of its first n columns is full-rank <strong>to</strong>o. Then, adding properlinear combinations of the first n rows <strong>to</strong> the following (6−n) rows, we obtain a new system,whose structure is the following:˜S ind = Ẽind F =⎡⎣ Ea indE acind0 E c ind⎤ ⎡⎦⎤⎦ (4.6)F c⎣ FaThe (6−n)×(6−n) matrix E c ind is full-rank. In fact, Ẽind is full-rank, since obtained from afull-rank matrix by means of linear combinations of its rows. Therefore, E c indis full-rank <strong>to</strong>o:if E c ind were not full-rank, the last (6−n) rows of Ẽind would be linearly dependent, whichis false. Since E c indis full-rank, by adding <strong>to</strong> the first n rows of system (4.6) proper linearcombinations of its last (6−n) rows we obtain the following block-diagonal system:S ∗ ind = E ∗ ind F =⎡⎣ Ea ind 00 E c ind⎤ ⎡⎦⎣ FaF c ⎤⎦ (4.7)In Eq. (4.7), the structural effects on the legs of actuation and constraint <strong>force</strong>s keep distinguished,thus we can split up and obtain two separate systems:S a ind(F a ) = E a ind F a (4.8)


90 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsS c ind(F c ) = E c ind F c (4.9)The architecture singularities, related <strong>to</strong> system (4.1), are also described by system (4.8),by analysing the conditioning of the n×n matrix E a ind [25]. The constraint singularities aredescribed by system (4.9); the analysis of the conditioning of the (6−n)×(6−n) matrix E c indprovides important additional information about the structural behaviour of the mechanism.4.4 Constraint singularities of <strong>parallel</strong> robotsThe constraint singularities correspond <strong>to</strong> configurations such that the <strong>force</strong>s F c cannotbe balanced by the <strong>force</strong> characteristics S. In these configurations matrix L is singular, andproblem (4.2) has no solution.We consider, now, the linear transform L card : S → F, represented by the upper part ofsystem (4.2). Out of singular configurations, this transform projects a 6−dimensional subspaceof R 6p <strong>to</strong> R 6 . In correspondence with the constraint singularities, the codomain of L card isa subspace of R 6 with dimension lower than 6: from a physical point of view, the <strong>force</strong>characteristics S does not balance the external <strong>force</strong>s applied <strong>to</strong> the end-effec<strong>to</strong>r in somedirections, because of the joint attitude. Since L is singular, systems (4.3) and, consequently,(4.8) and (4.9), cannot be stated; nevertheless, close <strong>to</strong> singularities these systems exist, andthe maps of the conditioning of problems (4.8) and (4.9) are useful instruments <strong>to</strong> assess therobot behaviour.Away from singularities, the matrices E a ind and Ec indare well-conditioned, and the sensitivityof S a ind and Sc ind <strong>to</strong> Fa and F c are finite; close <strong>to</strong> architecture singularities the conditioningof E a ind tends <strong>to</strong> infinity, and this results in high sensitivity of Sa ind <strong>to</strong> Fa , while close <strong>to</strong> constraintsingularities the conditioning of E c indtends <strong>to</strong> infinity, and this results in high sensitivityof S c ind <strong>to</strong> Fc .One of the tasks of the designer is <strong>to</strong> modify the robot geometry in order <strong>to</strong> obtain twowell-conditioned matrices E a ind and Ec ind . If possible, the whole workspace should be free ofsingularities; however, a limited sensitivity of problems (4.8) and (4.9) is desirable <strong>to</strong> reduce the<strong>force</strong> characteristics, at least in the workspace regions where interaction with the environmentis expected.4.5 The Linear Delta robot case4.5.1 Observations on the Linear Delta staticsThe proposed general procedure has been used <strong>to</strong> study the transmission of the constraint<strong>force</strong>s in a Linear Delta robot with universal joints (Fig. 4.3). The robot is assembled for purelytranslational motion of the mobile platform. The architecture singularities of this robot havebeen extensively discussed in the technical literature [42]. The considered Linear Delta robothas straight legs, connected <strong>to</strong> the end-effec<strong>to</strong>r and <strong>to</strong> the three sliders by universal joints.For a universal joint, we name joint axis the straight line perpendicular <strong>to</strong> both its revolutejoints (Fig. 4.4(a)); a universal joint can only transfer moments having the direction of itsjoint axis. We name internal the six revolute joints directly connected <strong>to</strong> the three legs, andthe corresponding axes; the remaining six revolute joints, connected <strong>to</strong> the end-effec<strong>to</strong>r and<strong>to</strong> the three sliders, and the corresponding axes, are named external. In order that the endeffec<strong>to</strong>rtranslates without rotating, the external axes and the internal axes of each leg mustbe <strong>parallel</strong>. Due <strong>to</strong> the robot kinematics, these <strong>parallel</strong>isms remain even if the configuration


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 91Figure 4.3: Linear Delta architecture.joint axisjoint plane(a)(b)Figure 4.4: Joint axis and joint plane of a universal joint (a) and symmetric universal jointwith the pyramid representing the joint mobility and the cone that approximates this pyramid.changes. Therefore, also the two joint axes of each leg remain <strong>parallel</strong> during the motion.The external axes translate without rotation; on the contrary, the internal axes are fixed withrespect <strong>to</strong> the legs and rotate with them. During the motion, each joint axis rotates remainingin a plane, named joint plane, with fixed orientation and perpendicular <strong>to</strong> the direction of theexternal axes. For geometric reasons, considering a leg, the projection of the longitudinal axis<strong>to</strong> one of the two joint planes has the same direction of the joint axes. Due <strong>to</strong> the mobilitybounds related <strong>to</strong> the structural design of the universal joints, the longitudinal axis of a leg isnever orthogonal <strong>to</strong> the corresponding joint axes.We consider, now, the static equilibrium of a leg: for the recalled reasons, the leg cantransfer only moments having the direction of the joint axis. Therefore, <strong>to</strong> fulfil the momentequilibrium, the <strong>force</strong> transferred through the leg must have the same direction of the leg.In fact, if the direction were different, the <strong>force</strong>s at the two ends would generate a momentperpendicular <strong>to</strong> the leg, which would have direction different from the joint axis direction andcould not be balanced.


92 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsFigure 4.5: The system composed of the end-effec<strong>to</strong>r and the portions of the legs delimited bythree arbitrary sections.Summing up: each leg, in any configuration, can transfer only moments having the directionof the joint axis, and normal <strong>force</strong>s. These <strong>force</strong> transmission conditions are imposed by the6(p − 1) equations associated <strong>to</strong> the matrix L joint in Eq. (4.2) for any configuration.The end-effec<strong>to</strong>r purely translates; then, it is obvious <strong>to</strong> identify the three components ofthe external <strong>force</strong> applied <strong>to</strong> the end-effec<strong>to</strong>r as vec<strong>to</strong>r F a and the three components of theexternal moment applied <strong>to</strong> the end-effec<strong>to</strong>r as vec<strong>to</strong>r F c .The static equilibrium of the end-effec<strong>to</strong>r is expressed by a system of two vec<strong>to</strong>rial equations,equivalent <strong>to</strong> six scalar equations, where the six unknowns are the modules of <strong>force</strong>s andmoments applied by the legs:⎧N 1 l 1 + N 2 l 2 + N 3 l 3 + F a = 0⎪⎨M 1 j 1 + M 2 j 2 + M 3 j 3 ++(P 1 −P) × N 1 l 1 + (P 2 −P) × N 2 l 2 + (P 3 −P)×N 3 l 3 +⎪⎩ +(P a −P) × F a + F c = 0(4.10)where: N i is the module of the normal <strong>force</strong> applied by the i−th leg; M i is the module of themoment applied by the i−th leg; l i is the unit-length vec<strong>to</strong>r with the i−th leg longitudinaldirection, pointing from the slider <strong>to</strong> the end-effec<strong>to</strong>r; j i is the unit-length vec<strong>to</strong>r that definesthe direction of the i−th joint axis; P i is the position vec<strong>to</strong>r of the geometric centre of thejoint connecting the end-effec<strong>to</strong>r <strong>to</strong> the i−th leg; P is the position vec<strong>to</strong>r of the centroid ofthe triangle P 1 P 2 P 3 ; P a is the position vec<strong>to</strong>r of the application point of F a .We take three arbitrary leg sections and consider the system composed of the end-effec<strong>to</strong>rand the portions of legs delimited by the three sections (Fig. 4.5). In general each sectioncan transmit a normal <strong>force</strong> (N i ), two shear <strong>force</strong>s (Ti x and T yi ), one <strong>to</strong>rsional moment (Mt i ),two bending moments (M fxiand M fyi), which are components of S. Since we suppose thatno distributed <strong>force</strong> is applied, the <strong>force</strong> characteristics are constant along the legs. In theformulation of problem (4.4), it is convenient <strong>to</strong> choose the normal <strong>force</strong>s N i and the <strong>to</strong>rsionalmoments Mi t as components of S ind . This choice is valid in all the workspace, because theshear <strong>force</strong>s are null and the bending moments can be always expressed as function of the<strong>to</strong>rsional moments: in fact, the joint axes are never perpendicular <strong>to</strong> the corresponding leg,and then a bending component cannot exist without a <strong>to</strong>rsional one. This choice leads <strong>to</strong> the


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 93following systems:⎡⎤ ⎡ ⎤N 1 (F x , F y , F z ) F xS a ind = ⎢⎣ N 2 (F x , F y , F z ) ⎥⎦ = Ea ⎢ind ⎣ F y⎥⎦ (4.11)N 3 (F x , F y , F z ) F zS c ind =⎡M1 t (M ⎤x, M y , M z )⎢⎣ M2(M t x , M y , M z ) ⎥⎦ = Ec indM3 t(M x, M y , M z )⎡ ⎤M x⎢⎣ M y⎥⎦ (4.12)M zFinally, it is possible <strong>to</strong> write matrix E ∗ , expressing the relation between the three modules ofthe moments applied <strong>to</strong> the sections and the three components of the external moment applied<strong>to</strong> the platform:⎡()⎤1/2⎡ ⎤M (M1 t 1)2 + (M fx1 )2 + (M fy1 )2 ⎢⎣ M 2⎥⎦ = () 1/2(M2) t 2 + (M fx2⎢)2 + (M fy2 )2 M 3 ⎣ ()⎥1/2 ⎦(M3 t)2 + (M fx3 )2 + (M fy3 )2⎡ ⎤M x= E ∗ ⎢⎣ M y⎥⎦ (4.13)M zThe analysis of matrix E ∗ provides useful information for the design of the mechanism: itscondition number is a good index of the quality of the constraint <strong>force</strong> transmission throughthe structure. Since the bending moments are a linear combination of the <strong>to</strong>rsional moments,the singularities of the matrices E ∗ and E c ind are the same, and the study of Ec indis sufficientfor their localisation.The internal coordinates of the robot are represented by the positions of the three slidersalong the prismatic guides (q 1 , q 2 , q 3 ), while the external coordinates are the three components(x, y, z) of P. The workspace maps of the architecture and constraint singularities are obtainedby computing the condition numbers c a and c c of the matrices E a ind and Ec ind . In thefollowing, the attention is focused on the constraint singularities. For the considered robot theconstraint singularity loci are three-dimensional surfaces, with cumbersome expressions bothin the internal coordinates space and in the external coordinates space. However, by means ofnumerical computations and heuristic considerations, it is possible <strong>to</strong> modify the geometry inorder <strong>to</strong> move these surfaces away from the workspace zones where the robot should operatewith full efficiency.4.5.2 Influence of the robot geometry on the constraint singularitysurfacesThe workspace of a Linear Delta robot depends on: geometry of the members; arrangemen<strong>to</strong>f the prismatic guides; mobility bounds of the sliders; angular mobility of the universal joints.Several heuristic methods can be followed <strong>to</strong> avoid the presence of singularities; one of thepossible ways is <strong>to</strong> modify the universal joints orientation and the arrangement of the prismaticguides.While one of the two extremities of a universal joint is fixed, the mobility of the otherextremity depends on the mechanical design of the joint [43]; usually the joint mobility isdescribed by a cone or a symmetric pyramid (well approximated by the inscribed cone). Wename central axis the axis of the cone (or the intersection of the symmetry planes of the


94 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs(a)(b)(c)Figure 4.6: Conformation of the constraint singularity surface (lengths in meters): (a) α 1 = 0, α 2 = 0 , α 3 = 0 (b) α 1 = 0 , α 2 = π/2 , α 3 = π/2 (c) α 1 = π/2 , α 2 = π/2 , α 3 = π/2pyramid). In the Linear Delta, we consider the six central axes obtained while fixing theexternal extremities of the universal joints; the directions of these axes are constant, since theexternal ends purely translate. In order <strong>to</strong> maximise the workspace, the two central axes of thesame leg shall be <strong>parallel</strong>; in the following, this assumption is kept and only the three centralaxes of the joints connected <strong>to</strong> the sliders are dealt with. We represent the central axes of thesejoints by three unit-length vec<strong>to</strong>rs u i ; each u i points <strong>to</strong>wards the half-space containing theend-effec<strong>to</strong>r and delimited by a plane passing through the centre of the joint and perpendicular<strong>to</strong> u i .The first objective of the functional synthesis of a mechanism is <strong>to</strong> obtain a workspace satisfyinggiven operation requirements. In the case of the linear delta, the workspace is stronglyinfluenced by the orientations of the central axes with respect <strong>to</strong> the sliders: while varying thedirections of the unit-length vec<strong>to</strong>rs u i , workspace portions are added or subtracted; thereforeit is convenient <strong>to</strong> define these unit-length vec<strong>to</strong>rs in the first design phase of the mechanism.We consider universal joints whose mobility is defined by cones and whose central axis areperpendicular <strong>to</strong> the external axis (it is the most common case, due <strong>to</strong> the symmetry of therotational pairs s<strong>to</strong>ps). Figure 4.4(b) shows an example of such universal joint: the yokes ofthe joint are identical and the cross is symmetric. In this case, the rotation of a joint about itscentral axis does not influence the workspace nor the robot kinematics, therefore the Jacobian


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 95(a) (b) (c)Figure 4.7: Mapping of the condition number c c on the symmetry plane xz (lengths in meters):(a) α 1 = 0 , α 2 = 0 , α 3 = 0 (b) α 1 = 0 , α 2 = π/2 , α 3 = π/2 (c) α 1 = π/2 , α 2 = π/2 ,α 3 = π/2; the joint mobility bounds the workspace <strong>to</strong> the region delimited by the white dashedline; the constraint singularity surface is placed outside the workspace.matrix and the actuation <strong>force</strong> transmission are not modified. On the contrary, the constraint<strong>force</strong> transmission and the corresponding singularities depend on this rotation.Figures 4.8 and 4.9 show the PMAR PKM-PRIDE linear delta robot, nicknamed Zoe, aLinear Delta robot for assembly tasks expressly conceived, designed and built at the PMARlabof the University of Genova, in 2000 [30,34,44,45]. Figure 4.10 shows a scheme of themechanism and the workspace [34,45]. The translating platform is <strong>parallel</strong> <strong>to</strong> the global xyplane. This geometry, symmetric with respect <strong>to</strong> the xz plane, provides a good compromisebetween front accessibility of the workspace and conditioning of the Jacobian matrix. Maintainingthe same orientation of the central axes (and then the same workspace and Jacobianmatrix), it is possible <strong>to</strong> orient differently the external axes of the joints. Looking at the jointconnecting the i−th leg <strong>to</strong> the corresponding slider, we name r i the straight line passing bythe intersection of internal and external axes, orthogonal <strong>to</strong> the central axis u i and <strong>parallel</strong> <strong>to</strong>the xy plane; we name α i the angle of right-hand rotation about u i from the external axis <strong>to</strong>r i . Figures 4.6(a), 4.6(b) and 4.6(c) show the constraint singularity surfaces corresponding <strong>to</strong>different values of α 1 , α 2 and α 3 ; approaching these surfaces, c c tends <strong>to</strong> infinity. In the thirdcase, the constraint singularity surface is placed outside of the workspace allowed by the jointmobility. Figures 4.7(a), 4.7(b) and 4.7(c) represent the maps of c c in the same cases, on theworkspace sections corresponding <strong>to</strong> the symmetry plane xz. These numerical maps allow <strong>to</strong>recognise and locate the constraint singularity loci.The norm m of the vec<strong>to</strong>r [M 1 , M 2 , M 3 ] T is an index of the structural stress of the robotlegs. This norm has been computed in the three cases (a), (b) and (c) of Figs. 4.7 and 4.7 inpresence of an external moment [M x , M y , M z ] T = [1Nm, 1Nm, 1Nm] T .In the cases (a) and (b), since the constraint singularity surface is inside the workspace, mis not bounded; in the case (a), m is higher than 6 Nm in the 39% of the workspace volume;in the case (b) it occurs in the 44% of the workspace volume. In the case (c) the maximumvalue of m is 25.65 Nm and in the 88.5% of the workspace volume m is lower than 6 Nm.Moreover, the values of m higher than 6 Nm are in the workspace region close <strong>to</strong> the (external)singularity surface. These values show the structural behaviour improvement obtained in case(c) removing the constraint singularities.When a constraint singularity is placed inside the operation workspace, the robot mobilityis not compromised; nevertheless, approaching the singularity, any finite moment applied <strong>to</strong>the end-effec<strong>to</strong>r results in legs <strong>to</strong>rsional moments tending <strong>to</strong> infinity. This may cause the


96 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsFigure 4.8: Zoe: the overall machine.


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 97Figure 4.9: Zoe: drawing of the <strong>parallel</strong> mechanism.


98 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMsstructural failure of some robot members or a deflection that moves the robot away fromsingular configurations, in workspace regions where the condition number is lower.Usually, the legs of Delta robots are quite slender and the gradient of c c is very high close<strong>to</strong> the singularity surfaces; for these reasons, the structural failure of the members is unusualso that the robot functionality is rarely compromised. On the other hand, if high accuracy isrequired, it is not sufficient <strong>to</strong> avoid constraint singularity inside the operation workspace, butit is also necessary <strong>to</strong> limit the values of c c , because high values of the legs <strong>to</strong>rsional momentscause remarkable deformations of the robot structure.For the considered geometry the constraint singularities can be removed from the workspacerotating the universal joints about their central axes; in general this is not true, and it might benecessary <strong>to</strong> modify also the external axes orientations, with consequent variation of the kinematics:in this case the geometry should be synthesised with a compromise between functionaland structural requirements.4.5.3 Physical interpretation of the Linear Delta constraint singularitiesThe vec<strong>to</strong>rial equation of the <strong>force</strong>s in system (4.10) can be solved au<strong>to</strong>nomously, andprovides the normal <strong>force</strong>s transmitted by the legs if the actuation <strong>force</strong>s F a are known. Wename combined moment the sum of the external moment applied <strong>to</strong> the platform and themoment on the platform due <strong>to</strong> the normal <strong>force</strong>s applied by the legs. According <strong>to</strong> thevec<strong>to</strong>rial equation of the moments in Eq. (4.10), the combined moment is balanced by thethree moments applied <strong>to</strong> the end-effec<strong>to</strong>r by the legs, which have the known directions of thecorresponding joint axes.When a robot is in a singular configuration, all the three joint axes lie in a plane; if thereis a component of the combined moment orthogonal <strong>to</strong> this plane, the equilibrium problemdoes not have solution. The end-effec<strong>to</strong>r locally gains additional degree(s) of freedom notcommanded by the actua<strong>to</strong>rs. The codomain of the linear transform associated <strong>to</strong> the matrixL card in Eq. (4.2), with regard <strong>to</strong> the constraint components, is represented by the momentswith direction <strong>parallel</strong> <strong>to</strong> the plane of the three joint axes. If all the joint axes are <strong>parallel</strong>, thiscodomain becomes the one-dimensional subspace of the moments with their common direction.The map of the condition number c c allows <strong>to</strong> single out the constraint singularity surfaces,i.e. the loci where the joint axes are coplanar, including the particular case of <strong>parallel</strong> jointaxes.It is noteworthy <strong>to</strong> point out that the two hypotheses of static condition and absence ofdistributed <strong>force</strong>s acting on the legs, used <strong>to</strong> introduce the matrices E a ind and Ec ind , lead <strong>to</strong> thedetermination of the constraint singularities, which are an intrinsic property of the robot anddo not dependent on these hypotheses. Therefore, the proposed method provides importantinformation about the robot behaviour also in dynamic conditions.4.6 Velocity analysis of interconnected chains hybridPMsIn any (well designed) mechanism, the coordinates of this output twist at a nonsingularconfiguration are linear functions of the actuated joint velocities. Usually, the input-outputvelocity equations are obtained in the form: Zξ = Λ˙q, where ˙q is the vec<strong>to</strong>r of actuated jointvelocities, for some matrices Z and Λ. Then, (out of singularities) it is easy <strong>to</strong> obtain the


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 99Figure 4.10: Workspace of Zoe (the arrows represent the directions of the central axes of theuniversal joints) (lengths in meters).Jacobian J = Z −1 Λ. (In the literature, a PM’s Jacobian is sometimes defined as the inverseof this matrix.)Symbolic expressions for matrices Z and Λ (and the Jacobian) are very helpful in assessingmechanism behavior in comparison <strong>to</strong> task requirements. In particular, when singular configurationsare investigated with the goal <strong>to</strong> select a mechanism geometry without singularitiesin required regions of the workspace. A lot of technical literature discusses these issues, see[46]. Moreover, once a mechanism is used as a robot, the Jacobian is fundamental <strong>to</strong> theimplementation of the control system.For purely <strong>parallel</strong> architectures, Z, Λ and the Jacobian can be easily computed by amethod that we can consider “standard”. This method is briefly recalled in the followingsection. The origin of the method can be found in [12]. It was first presented in [47] and [48],then developed in [49–51]. One of the first papers taking in<strong>to</strong> account the case of more thanone actuated joint per leg correctly (i.e., considering the possible occurrence of RedundantPassive Motion (RPM) leg singularities) was [9], where the authors consider also limited-dof<strong>mechanisms</strong> with legs that apply <strong>to</strong> the end-effec<strong>to</strong>r the same constraint. The application ofthe method <strong>to</strong> planar PMs is discussed in an elegant way in [52]; a further inherent presentationis [53]. Recent papers discussing the method (addressed also <strong>to</strong> limited-dof PMs) are [19,54].It is relatively easy (at least in the simpler cases, ignoring more “exotic” singularities) <strong>to</strong>generalize the method of passive-velocity elimination for series-<strong>parallel</strong> chains. However, thesame method cannot be used, without changes, for IC (Interconnected chains) architectures. Inthe most general case, one deals with the velocity loop equations (rather than linear expressionsof the output twist in terms of each leg’s joint screws, as is done in the <strong>parallel</strong> case.) A closeanalogy exists with electrical networks. When the network is series-<strong>parallel</strong> Ohm’s laws suffice,otherwise the more general Kirchhoff loop laws must be used. See [55] for more details andfurther references.In the first part of the thesis, Sections 2.9 and 3.3.2 show how the basic approach for PMs


100 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMspresented in the following can be adapted <strong>to</strong> achieve successful velocity analyses of two IC<strong>mechanisms</strong>. In such <strong>mechanisms</strong>, due <strong>to</strong> the interconnections between the legs, an actua<strong>to</strong>ractuates neighboring leg chains as well as its own. The standard method for the computationof Z and Λ cannot take in<strong>to</strong> account this cross action, since it is based on the simplificationof the velocity equations of individual legs, considered separately.4.7 Velocity analysis of purely <strong>parallel</strong> PMsMost papers discussing the “standard” method for the velocity analysis of purely <strong>parallel</strong>PMs, [19], consider only the case of one actuated joint per leg. We do not make this assumption.Consider a <strong>parallel</strong> mechanism composed of an end-effec<strong>to</strong>r connected <strong>to</strong> the base by Nindependent serial legs. In general, some legs can be passive (without actuated joints), so weassume that the mechanism contains N p passive legs while the remaining N a = N −N p legs cancontain one or more actuated joints. Passive legs are used <strong>to</strong> constrain the end-effec<strong>to</strong>r <strong>to</strong> thedesired mobility or <strong>to</strong> apply a redundant constraint (<strong>to</strong> overconstrain the end-effec<strong>to</strong>r). Themechanism may be redundantly actuated (the number of the actuated joints can be greaterthan the dof).Consider the L-th leg, L = 1, . . .,N. We suppose that it is a serial chain with a dof ofC L . Since every joint is instantaneously equivalent <strong>to</strong> a series of 1-dof joints (e.g., a sphericaljoint is equivalent <strong>to</strong> three revolute joints whose axes intersect at the center of the sphericaljoint, a universal joint is equivalent <strong>to</strong> two revolute joints with axes intersecting, and so on)we can suppose without loss of generality that the L-th leg is a serial chain composed of C L1-dof joints.Moreover, we assume that the mechanism configuration is nonsingular and, in particular,none of the legs is in an RPM-type singularity. We require also that leg joints are linearlyindependent, hence C L ≤ 6.The screws of the leg’s actuated joints are ξ L ai , i = 1, . . .,CL a , numbered from the base; thepassive joint screws are ξ L pi, i = 1, . . .,Cp L , numbered from the base; Ca L + Cp L = C L .Two systems of leg wrenches are introduced: W L and V L , W L ⊂ V L . The system W L ,the structural constraints of the leg, consists of wrenches reciprocal <strong>to</strong> all the joint screws; itspans the generalized <strong>force</strong>s that the leg can transmit between the end-effec<strong>to</strong>r and the basewhen all its joints are left free <strong>to</strong> move. The system V L , the actuated constraints contains allwrenches reciprocal <strong>to</strong> the passive joint screws; it represents the generalized <strong>force</strong>s that the legcan transmit between the end-effec<strong>to</strong>r and the base, when its actuated joints are locked.If we consider the leg standing alone, any feasible motion of its extremal link (the endeffec<strong>to</strong>r,imagined connected <strong>to</strong> this leg and disconnected from the others) must belong <strong>to</strong>the system of twists T L = W ⊥ L , where the symbol ⊥ indicates the reciprocal system. (For adefinition and discussions of the reciprocity, see [12].)By hypothesis the leg joints are linearly independent, therefore dim W L = 6 − C L anddim V L − dim W L = Ca L . Hence, if Ca L ≥ 1 (i.e., if the leg is not passive), it is possible <strong>to</strong>select Ca L linearly independent wrenches ζL ai ∈ V L, ζ L ai ∉ W L, i = 1, . . . , Ca L . Moreover for anypassive or active leg, if C L < 6 it is possible <strong>to</strong> select 6 − C L linearly independent wrenchesζ L i ∈ W L , i = 1, . . .,6 − C L .Now, we consider the whole mechanism.Since all legs are connected <strong>to</strong> the same end-effec<strong>to</strong>r, every feasible output motion ξ mustbelong <strong>to</strong> the space of the feasible extremal-link motions of each leg, i.e., ξ ∈ T = ∩ L T L = W ⊥ ,where the wrench system W = ∑ L W L represents the combined structural constraint that thelegs apply on the end-effec<strong>to</strong>r [1].


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 101On these premises, we can write the velocity equations of the mechanism. We considerthe N a active legs. The twist ξ must be the same computed along each leg chain. This isexpressed by the following N a velocity equations:ξ =C L a∑i=1C L p∑˙θ aiξ L L ai + ˙θ piξ L L pi (4.14)where ˙θ ai L and ˙θ pi L are, respectively, the active and passive joint velocities.For each Eq. (4.14), we compute the reciprocal product of the left- and right-hand sides bythe corresponding ζ L ai, i = 1, . . .,Ca L . The result is Ca L equations of the type:ζ L ai ◦ ξ =C L a∑j=1i=1˙θ L aj ζ L ai ◦ ξ L aj (4.15)where “◦” denotes the reciprocal screw product.We do the same for all Eqs. (4.14) and obtain a system of C a = ∑ N aL=1 CL a equations inthe C a actuated joint velocities of the mechanism. We can rearrange these equations in thematrix form:Zξ = Λ˙q (4.16)Z is the C a ×6 matrix:Z =[˜ζ1 a1˜ζ 1 a2 · · · ˜ζ1 aC · · · · · · a˜ζNa 1 a1˜ζ Naa2 · · · ˜ζNaaC Naa] T(4.17)The column vec<strong>to</strong>r ˜ζ is obtained from any wrench ζ by inverting the <strong>force</strong> and momentcomponents. (Thus, in the left-hand side of Eq. (4.16) the reciprocal products ζ L ai ◦ ξ L aj arecomputed by usual row-column multiplications: ˜ζ L aiTξLaj ):˜ζ L ai = [ 0 I33I 33 0]ζ L ai (4.18)In Eq. 4.17, Λ is C a ×C a and given by:⎡⎤Λ 1 0 0 · · · 00 Λ 2 0 · · · 0Λ =0 0 Λ 3 · · · 0⎢ . . . .⎣ . . . ... ⎥ . ⎦0 0 0 · · · Λ Nawhere Λ L , L = 1, . . .,N a , is the C L a ×C L a matrix:⎡ζ L a1 ◦ ξ L a1 ζ L a1 ◦ ξ L a2 · · · ζ L a1 ◦ ξ L aCaL ζ L a2Λ L =◦ ξL a1 ζ L a2 ◦ ξL a2 · · · ζ L a2 ◦ ξL aCaL⎢ . ..⎣ . . · · · .ζ L aC ◦ a L ξL a1 ζ L aC ◦ a L ξL a2 · · · ζ L aC ◦ a L ξL aCaL⎤⎥⎦(4.19)(4.20)Matrix Λ is square and full rank, since we suppose that the mechanism configuration isnonsingular. Therefore, we can multiply both sides of Eq. (4.16) by Λ −1 and obtain the system


102 Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs˙q = J a ξ, providing the actuated joint velocities ˙q corresponding <strong>to</strong> a given end-effec<strong>to</strong>r twistξ. The C a ×6 matrix J a (Jacobian of Actuations) is a generalization of the one derived in [19].Remark 1 If the leg wrenches ζ L ai are chosen so that ζ L ai is reciprocal <strong>to</strong> all leg joints butξ L ai , then the corresponding Λ L in Eq. (4.20) is diagonal. As it is clear from Eq. (4.19), if weoperate in the same way for all legs we obtain a diagonal matrix Λ.Remark 2 The rank of J a is equal <strong>to</strong> the dof n of the mechanism. Clearly, if the mechanismis not redundantly actuated, then C a = n and J a is a n×6 matrix.Since in limited-dof <strong>mechanisms</strong> rankJ a = n < 6, we need 6−n more equations <strong>to</strong> computeξ from a given set of actuated joint velocities ˙q. These 6 − n equations state that ξ ∈ T . Wecan select them among the 6N − C homogeneous equations ζ L i ◦ ξ = 0, L = 1, . . .,N a , i =1, . . .,6−C L , where C = ∑ Ni=1 CL is the number of equivalent 1-dof joints of the mechanism.These equations state that ξ is reciprocal <strong>to</strong> the space of the structural constraints W L of eachleg.If ˆζ 1 , . . . , ˆζ 6−n are 6 − n linearly independent wrenches forming a base of W (e.g., any6 −n linearly independent ζ L i ), then we can use the minimum set of equations J c ξ = 0, wherethe (6 − n)×6 matrix J c is the Matrix of Structural Constraints (referred <strong>to</strong> as Jacobian ofconstraints in [19]):[ ] TJ c = ˆζ1 . . . ˜ζ6−n (4.21)The actuation and constraint equations can be rearranged in the compact expression:Ẑξ =[ ] [ Zξ =J c] [Λ 0 Ca×(6−n)0 (6−n)×Ca I (6−n)×(6−n)] [˙q= ˆΛ0 6−n]˙q0 6−n(4.22)Matrix ˆΛ is square with dimension C a + 6 − n and if the mechanism is not redundantlyactuated also Ẑ is square 6×6.Out of singularities, we can also introduce the overall inverse Jacobian J of the mechanism:J = ˆΛ −1 Ẑ = [ J T aJ T c] T(4.23)If the mechanism is not redundantly actuated, J is a 6× 6 square matrix.In PMs which are not purely <strong>parallel</strong>, due <strong>to</strong> the presence of interconnection links, par<strong>to</strong>f the constraint wrenches applied <strong>to</strong> the end-effec<strong>to</strong>r are internal <strong>to</strong> the leg loops and donot depend on the reaction <strong>force</strong>s at the base joints. In order <strong>to</strong> eliminate the passive jointvelocities from the velocity equations, it is necessary <strong>to</strong> take in<strong>to</strong> account these additionalconstraints. The extended standard approach presented above is modified so that, in theseparticular cases, a system of velocity equations containing only actuated joint velocities isobtained. The formulation of an effective method for the geometric derivation of one suchsystem of velocity equations, for <strong>mechanisms</strong> with any hybrid architecture, is still an openproblem.4.8 ConclusionsThis chapter proposes a method for the singularity analysis of nonoverconstrained, limiteddofPMs and presents a method for velocity analysis of redundantly actuated purely <strong>parallel</strong>PMs.


Chapter 4: Force transmission analysis of l-dof PMs and velocity analysis of IC PMs 103Starting from the equilibrium equations, the external <strong>force</strong>s applied <strong>to</strong> the end-effec<strong>to</strong>rare split in<strong>to</strong> two categories: actuation <strong>force</strong>s and constraint <strong>force</strong>s. Out of singularities, theactuation <strong>force</strong>s are balanced by a corresponding action of the actua<strong>to</strong>rs; on the contrary,the constraint <strong>force</strong>s are balanced exclusively by the constraint reactions. The well knownarchitecture singularities, related <strong>to</strong> the actuation <strong>force</strong>s transmission, can be singled outanalysing the conventional Jacobian matrix. On the other hand, the constraint singularities,related <strong>to</strong> the constraint <strong>force</strong>s transmission, are not observable by means of the standardkinematics equations. Considering fixed the actua<strong>to</strong>rs and in absence of distributed <strong>force</strong>son the legs, it is possible <strong>to</strong> formulate and <strong>to</strong> solve the equilibrium problem, which providesthe <strong>force</strong>s transmitted through the legs. In a constraint singularity, external constraint <strong>force</strong>sapplied <strong>to</strong> the end-effec<strong>to</strong>r cannot be balanced by the robot structure; the mechanism locallygains additional degree(s) of freedom not commanded by the actua<strong>to</strong>rs and some generalised<strong>force</strong>s transmitted by the legs (<strong>force</strong> characteristics) tend <strong>to</strong> infinity. Thanks <strong>to</strong> the systemcompliance, this condition may not cause the structural failure: the robot may warp until goingsufficiently away from the singular configuration. Probably, this is the reason why this categoryof singularities was not observed and studied systematically until recently. Nevertheless, thisphenomenon is not acceptable when high accuracy is required: in this case, it is necessary <strong>to</strong>carefully analyse the constraint singularities since the early design phase. Moreover, even if nosingularity loci are present in the workspace, the condition number of the matrix describingthe constraint <strong>force</strong>s transmission is a useful index of the structural quality of the robot. Theproposed method has been exemplified by means of the application <strong>to</strong> a Linear Delta robot,specially designed for <strong>force</strong>-controlled tasks. The structural behaviour has been significantlyimproved by suitably modifying the universal joints orientation [34].The described approach, based on the linear relation between generalised <strong>force</strong>s applied <strong>to</strong>the end-effec<strong>to</strong>r and <strong>force</strong> characteristics, is an alternative <strong>to</strong> the approaches using reciprocalscrews. Compared <strong>to</strong> these latter ones, the proposed approach can provide a good physicalinsight on the robot structural behaviour.


Chapter 5Tetrahedral Equations and DifferentialKinematics of a Class of PMs5.1 Chapter overviewThe chapter presents the parametric, analytical expressions for the first and second derivativesof the solution of the general system of two tetrahedral equations.This is a recurrent problem throughout the thesis. Basically, the solution is a vec<strong>to</strong>r thatrepresents the location of the fourth vertex of a tetrahedron whose edge lengths and whoseother three vertices are known. It is also the problem of computing the intersection of twocones, whose axes intersect and have known directions, and whose half angles are given. In thiscase, the vertices of the tetrahedron are: the intersection point of the cone axes; two points,one along each cone axis, say at a unit distance from the intersection point; one point alongthe intersection of the two cones at a unit distance from the intersection point.The solution of this problem is known from long time ago but the first and second derivativesof the solution have always been computed by deriving the equations one or two times, inorder <strong>to</strong> obtain new equations in the unknown components of the derivatives, and solvingagain. As an alternative <strong>to</strong> this method, the chapter proposes the solutions in an analytic andfully parametric form. The main advantage is a faster computation of the solution, besides theintrinsical advantages of an analytic solution in terms of understanding and use for optimisationalgorithms.The motivation for an effective expression of the second derivative is that this is the firststep <strong>to</strong>wards the analytic <strong>dynamics</strong> of <strong>mechanisms</strong> whose kinematics involves the tetrahedralequations problems.To keep close <strong>to</strong> robotics issues, the problem is treated as the problem of the first-orderand second-order direct differential kinematics of a particular class of 3-dof, translational<strong>mechanisms</strong>, the tetrahedral <strong>mechanisms</strong>. The class gathers redundant and nonredundantarchitectures; the most famous are the 3UPU, the 3RUU and the 3PUU.The expressions for the velocity and acceleration of the mobile platform are developedreferring <strong>to</strong> an equivalent geometric system, the tetrahedral system, <strong>to</strong> which every tetrahedralmechanism can be reduced.The Jacobian is obtained analytically, although it could also be singled out in an elegantway by screws.5.2 IntroductionThis chapter discusses a general explicit formulation for the first and second order directdifferential kinematics of a class of translational <strong>parallel</strong> <strong>mechanisms</strong>, named tetrahedral <strong>mechanisms</strong>,whose forward position problem is solved by reducing the mechanism <strong>to</strong> the tetrahedralgeometric system shown in Fig. 5.1(a).105


106 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMsl IPl III_l I_B I_B III_P= B II= B II= B III= B I_l IIIt IA Ilπ IIA A IIIt IIIu vA IIt IIs Is sII IIIkOij_t I_G I_A It AIIG Il I_l II=l IIA IIt IIs IIIG II=_G IIl IIIA IIIu v_A II=s I_= t IIs IIikOj_A IIIt IIIG III_t III_G III(a)(b)Figure 5.1: The tetrahedral geometric system (a) and the tetrahedral system obtained from ageneric mechanism in the class by translating legs I and III <strong>to</strong> have P ≡ B II (b).By “reduction” we mean that in every configuration and independently from the natureand number of the actuated joints, we can univocally pass from the configuration of the originalmechanism <strong>to</strong> a corresponding configuration of the tetrahedral system by translating the legchains of a constant quantity in a fixed direction. The relation is one-<strong>to</strong>-one.The tetrahedral system can be figured out as a mechanism whose end-effec<strong>to</strong>r is the vertexP. The vec<strong>to</strong>rs are described in the ground reference frame Oi b j b k b . Along the i-th vec<strong>to</strong>rchain, i = I, II, III, the vec<strong>to</strong>r s i represents the location of the point A i , and l i = −−→ A i P.The length of l i is l i . Point P is the extremity of the system. Each base point A i movesin the space and its coordinates are internal coordinates of the mechanism. We assume thatthere is a prismatic joint along every edge l i , such that the lengths l i are internal coordinates.Then, the mechanism is a 3-dof redundant mechanism with twelve internal coordinates; theexternal coordinates are the three coordinates of point P. The trajec<strong>to</strong>ry of P depends on thetrajec<strong>to</strong>ries t i of the base points A i , and on the laws of the lengths l i variation.Point P belongs <strong>to</strong> the mobile platform of the original mechanism, therefore the velocityand acceleration of P are the translational velocity and acceleration of the mobile platform.The reduction <strong>to</strong> the tetrahedral system is possible if the architecture of the original <strong>mechanisms</strong>atisfies the following hypotheses: • it is a purely <strong>parallel</strong> mechanism, i.e. all legs areserial chains connecting the mobile platform <strong>to</strong> the base [9]; • the mobile platform has threetranslational dof; • there are at least three main legs (Fig. 5.1(b)) such that in a neighborhoodof every non singular configuration the lengths l i of their last links and the trajec<strong>to</strong>ries t i oftheir points A i are functions of the internal coordinates of the mechanism. The labels, e.g., ofpoints, are overlined if they refer <strong>to</strong> the original mechanism; the corresponding labels for theequivalent tetrahedral system are nonoverlined.The class contains <strong>mechanisms</strong> with more than three legs. The three main legs define theplatform location; every other leg must follow the platform.Example 1: as first explana<strong>to</strong>ry example, we consider the case of the 3-PUU architecture(Fig. 5.2(a)). The three guides of the prismatic joints are fixed <strong>to</strong> the base; the internal


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 107_l I_A I_B I_G I_A II_G II_B II_l II_G III_B III_l III_A III_G I_l I_B I_A I_B II_l II_A II_G II_B III_l III_A III_G III_l I_B I_A I=_=A II_G I_l II_G II_B IIA III_B III_=__l IIIG III(a) 3PUU(b) 3RUU(c) 3UPUFigure 5.2: Explana<strong>to</strong>ry examples.coordinates are the distances of the sliders along the guides measured from the three fixedpoints G i . The trajec<strong>to</strong>ry of each point A i coincides with the axis of the corresponding guide.If we assume by hypothesis that the platform does not rotate, we can translate the leg chains inorder <strong>to</strong> make their platform extremities coincident and we obtain the equivalent tetrahedralsystem. The edges l i of the tetrahedron are <strong>parallel</strong> <strong>to</strong> the leg rods, whose extremities connectthe U-joints.Example 2: we consider now the case of the 3-RUU mechanism (Fig. 5.2(b)). The firstlink of each leg chain is connected <strong>to</strong> the base by a revolute joint at the corresponding point G iand rotates around a fixed axis. The internal coordinates are the rotation angles about thesefixed axes and the trajec<strong>to</strong>ries of points A i are arcs of circumferences. Since the platform doesnot rotate by hypothesis, we can translate the leg chains as we have done in example 1. Themechanism is reduced <strong>to</strong> the equivalent tetrahedral system. The edges l i of the tetrahedronare the leg rods between the couples of U-joints.Example 3: the third explana<strong>to</strong>ry example is the 3-UPU mechanism (Fig. 5.2(c)). In thiscase, points A i are fixed and coincide with the corresponding G i ; the internal coordinates arethe leg lengths. Once again, if the platform does not rotate by hypothesis, we can translatethe leg chains <strong>to</strong> obtain the equivalent tetrahedral system. Vec<strong>to</strong>rs s i are constant.Every mechanism of the class has two assembly modes, say first mode and second mode.The coordinates of the points A i and the lengths l i are univocally determined by the values ofthe internal coordinates. Once fixed the internal coordinates, we can assemble the mechanismin two ways depending on which side of the plane defined by the points A i the mobile platformis on.We have shown that the relationship between the configuration of the original mechanismand the configuration of the equivalent tetrahedral system is one-<strong>to</strong>-one. Hence, the two assemblymodes of the mechanism correspond <strong>to</strong> two possible assembly modes of the tetrahedralsystem and in the following we can refer only <strong>to</strong> the tetrahedral system.The unit-length vec<strong>to</strong>r orthogonal <strong>to</strong> the plane π A , defined by the three points A i , is namedw:w = v × u(5.1)|v × u|where u = A −−−→I A II and v = A −−−−→III A II (Fig. 5.1(a)). If the three points A i are collinear, plane π Ais indeterminate, but in this case the mechanism configuration is singular. Out of singularities,


108 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMspoint P belongs <strong>to</strong> one of the two half spaces bounded by π A : if P is in the half space pointedby w, the assembly mode of the mechanism is the first one, else it is the second one. Thetwo assembly modes are distinguished by the boolean parameter ɛ, ɛ = +1 in the first mode,ɛ = −1 in the second mode.In the following we discuss the differential kinematics of the tetrahedral system, which isthe main subject of the chapter, and show the algorithm <strong>to</strong> compute velocity and accelerationof the mobile platform of every tetrahedral mechanism.5.3 Bibliographical hintsThe first idea <strong>to</strong> introduce the class of the tetrahedral <strong>mechanisms</strong> came during the analysisof an asymmetric 3PUU mechanism.The class includes and generalises the Delta-like mechanism proposed by R. Di Gregorioand V. Parenti-Castelli. The Delta-like mechanism is a 3-dof translational mechanism withthree leg chains. Each leg chain is composed of a first link connected <strong>to</strong> the base by a revolutejoint and of a second link with a <strong>parallel</strong>ogram-like shape, as in the first version of the Deltarobot by R. Clavel [56]. Similar <strong>mechanisms</strong> are also described in [57], but in this paper thesurvey is heuristic and restricted <strong>to</strong> the discussion of possible mechanism layouts.Every tetrahedral mechanism admits the truss transformation proposed in [58,59], thereforethe tetrahedral <strong>mechanisms</strong> are a subclass of the class of the VGT <strong>mechanisms</strong>. In [58,59], theauthors recognise and describe the class of the VGT (variable-geometry truss) architecturesand propose a method for the velocity analysis. This method leads <strong>to</strong> the system of the velocityequations for the general VGT mechanism, but no explicit solution is singled out.Some tetrahedral <strong>mechanisms</strong> are very famous and their differential kinematics has beenjust discussed: the 3-UPU architecture is analysed in [60] and related works ( [36, 61, 62] etalia); the 3-RUU in [63] and in the papers dealing with the Delta architecture ( [42] et alia). Inthese works the forward position problem is solved for particular geometries, sometime undersome hypothesis of symmetry. The velocity equations are written along the different leg chainsand it is imposed that the velocity of the end-effec<strong>to</strong>r computed along the different leg chains isthe same. No general analytic solution is provided. The acceleration analysis is presented onlysometimes; we are not aware of papers dealing with parametric expressions for the Hessiantensor of any tetrahedral architecture.The approach proposed in this chapter is general and works in all of the above mentionedcases, for both redundant and nonredundant architectures. The process of reduction thatwe introduce <strong>to</strong> solve the direct kinematics has been suggested first in [64] for the 3-RUUarchitecture with a 120˚symmetry. In this chapter we generalise the method.Other translational architectures for the proposed algorithm can be pointed out by lookingat the work of Jacques Marie Hervé ( [65,66] et alia).The first insights in<strong>to</strong> the issues of this chapter can be found in [34] and [67], wherethe discussion focuses particularly on the direct position problem and on the geometricalconditions for constraint singularity. A first formulation of the algorithm for the Jacobianis used in [30] <strong>to</strong> analyse the constraint singularities of a 3-PUU mechanism designed forassembly. The online control software for the impedance control of this assembly robot baseson the algorithm described in this chapter [68]; the algorithm has been suitably particularised<strong>to</strong> the nonsymmetric architecture of the mechanism, so obtaining a quite simple and effectivecontrol software.


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 1095.4 PreliminariesConsider a generic tetrahedral mechanism.The dof is 3 translational by hypothesis, so the minimum number of internal coordinatesis three. On the other hand, since, by hypothesis, there are three main legs, the maximumnumber of independent internal coordinates is twelve. The legs over the three main ones mustfollow the mobile platform, then, if they contain internal coordinates, these coordinates can beexpressed as functions of the internal coordinates of the main legs. We name q i the independentinternal coordinates of the three main legs; vec<strong>to</strong>r q gathers the q i .The configuration of the tetrahedral system is univocally described by the components ofvec<strong>to</strong>rs s i and by the lengths l i . These twelve values are gathered in vec<strong>to</strong>r s:s = [ s I T s II T s III T l I l II l III] T(5.2)The configuration of the original mechanism corresponds <strong>to</strong> the configuration of the equivalenttetrahedral system and we can express the components of s as functions of the internalcoordinates q i :s = s(q) (5.3)Suppose, now, <strong>to</strong> dispose of the explicit formulation for the direct differential kinematicsof the tetrahedral system intended as a mechanism, as explained in the introduction. Then,the differential kinematics of every tetrahedral mechanism is simply obtained by substituting<strong>to</strong> the components of s their expressions (5.3).The components of s are intermediate variables. The advantage of using these intermediatevariables is that the develop algorithms are independent from the choice of the actuated joint.Therefore these algorithms work for all <strong>mechanisms</strong> in the class.Writing the analytic expressions for the direct differential kinematics of the generic tetrahedralsystem as functions of s is very complex. To simplify the task we split off the procedure byintroducing an intermediate step: first, we compute the position, velocity and acceleration ofP in the reference frame A II i b j b k b , having the same orientation of the base frame but centredat point A II ; then, we pass <strong>to</strong> the base frame by introducing the <strong>contributions</strong> represented byvec<strong>to</strong>r s II . The description of the tetrahedron {PA I A II A III } in the reference frame A II i b j b k bis simpler if we use vec<strong>to</strong>rs u and v instead of s I , s II and s III ; then we introduce another set sof intermediate variables gathering the components of u and v, and the three lengths l i . Theset s is represented as a nine-entries vec<strong>to</strong>r:s = [ u T v T l I l II l III] T(5.4)Summing up the procedure, in the following, first we describe the mechanism in A II i b j b k busing s; then we introduce the intermediate variables s; finally, we pass <strong>to</strong> the base frame.Vec<strong>to</strong>rs u and v are differences of intermediate variables:u = s II − s I (5.5)v = s II − s III (5.6)5.5 Forward position analysisThe forward position problem consists of computing the location of the mobile platformfrom the values of the internal coordinates. The location of the mobile platform is represented


110 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMsby the coordinates of one of its points, say Q.By hypothesis, the point P used <strong>to</strong> “reduce” the mechanism belongs <strong>to</strong> the mobile platform;the choice is arbitrary and it is always possible <strong>to</strong> take P coincident with Q. So point Prepresents the location of the mobile platform and its components solve the forward positionproblem.We write −→ OP along the second leg chain of the tetrahedral system:−→OP = l II + s II (5.7)Vec<strong>to</strong>r s II depends on the internal coordinates and is an input variable <strong>to</strong> the problem.Vec<strong>to</strong>r l II is computed by solving a system of two loop closure equations involving the edgesof the tetrahedron {PA I A II A III }. The problem is discussed in [67] and here we directly usethe final expression:l IIi = ˜h pi · wp + ɛ r w i (5.8)where:m = − l II 2 − l III 2 + v 22n = − l II 2 − l I 2 + u 22(5.9)(5.10)c = |v × u| (5.11)h = m c u − n c v (5.12)r =√l II 2 − h 2 (5.13)To slim the formulation we write vec<strong>to</strong>rs, matrices and tensors by index notation; as usual,repeated indexes are summed.A “tilde” on <strong>to</strong>p of a vec<strong>to</strong>r indicates skew operation; it is noteworthy <strong>to</strong> point out theidentity:ṽ ij = ε pi · j v p (5.14)where ε ijk is the Ricci tensor, such that ε 123 = 1.By substituting Eq. (5.8) in Eq. (5.7), we finally obtain:5.6 Velocity analysis−→OP i = ˜h pi · wp + ɛ r w i + s IIi (5.15)Once assigned the law of motion <strong>to</strong> the internal coordinates, the absolute velocity of P isformally obtained by deriving Eq. (5.15) in the time. We can derive in two steps:where:∂ −→ OP i∂q rd −→ OPdt= ∂ −→ OP∂q rdq rdt(5.16)= J ir = ∂l IIi∂q r+ ∂s IIi∂q r(5.17)is the matrix associated <strong>to</strong> the Jacobian opera<strong>to</strong>r, i; r = 1, 2, 3 (briefly, the Jacobian).


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 111We need the derivatives of both s and s with respect <strong>to</strong> the internal coordinates q. Thederivative of s is the 9×3 matrix:s |q =[∂uT∂qT∂v∂q∂l I∂q∂l II∂q∂l III∂q] T(5.18)The derivative of s is the 12×3 matrix s |q :s |q =[T ∂sI∂qT∂s II∂qT∂s III∂q∂l I∂q∂l II∂q∂l III∂q] T(5.19)Matrices (5.18) and (5.19) are put in relation by the derivatives of Eqs. (5.5) and (5.6):u |q = s II |q − s I |q (5.20)v |q = s II |q − s III |q (5.21)Since the velocity problem is linear, the first derivative of every scalar and every vec<strong>to</strong>rrelated <strong>to</strong> the tetrahedral system with respect <strong>to</strong> the internal coordinates is a linear combinationof the derivatives of the intermediate variables. When we refer <strong>to</strong> frame A II i b j b k b , wecan use s |q or s |q ; when we refer <strong>to</strong> frame Oi b j b k b , it is preferable <strong>to</strong> use s |q . In both cases weintroduce coefficients for the linear combinations such that, if z is any scalar or vec<strong>to</strong>r related<strong>to</strong> the tetrahedral system, the derivative of z with respect <strong>to</strong> s |q is:z |q = C s |q = [ C 1 C 2 C 3 C 4 C 5]s|q =∂u T= C 1∂q + C ∂v T2∂q + C ∂l I3∂q + C ∂l II4∂q + C ∂l III5∂q(5.22)and the same derivative with respect <strong>to</strong> s |q is:z |q = [ −C 1 (C 1 +C 2 ) −C 2 C 3 C 4 C 5]s|q == −C 1∂s IT∂q + (C 1+C 2 ) ∂s II T∂q − C 2∂s IIIT∂q + C ∂l I3∂q + C ∂l II4∂q + C ∂l III5∂q(5.23)If z is a scalar, then C is a nine-entries row vec<strong>to</strong>r, the coefficients C 1 and C 2 are three-entriesrow vec<strong>to</strong>rs, and C 3 , C 4 , C 5 are scalars; if z is a three-entries vec<strong>to</strong>r, C is a 3×9 matrix, C 1and C 2 are 3×3 matrices, and C 3 , C 4 , C 5 are three-entries vec<strong>to</strong>rs; if C is a a×b secondordertensor, represented by a matrix, then C is a a×b×9 third-order tensor, C 1 and C 2 area×b×3 tensors, and C 3 , C 4 , C 5 are a×b matrices. These coefficients depend on geometry andconfiguration of the mechanism.To compute the Jacobian, we need the derivative of l II with respect <strong>to</strong> the q i . We refer<strong>to</strong> Eq. (5.8). The way we follow is: writing the coefficients for the derivative of every termappearing in the expression of l II ; then, working on the relations <strong>to</strong> obtain a compact form ofthe coefficients. The passages are omitted for brevity. Finally, we rearrange as suggested in(5.23) and add on the contribution of s II , in order <strong>to</strong> obtain the Jacobian as a linear combinationof the components of s |q .


112 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs5.6.1 Coefficients for the terms of l IIThe terms which appear in the expression (5.8) of l II are the scalars m, n, c, r, and thevec<strong>to</strong>rs w, h.The coefficients C m and C n for the first derivatives of the scalars m and n are simplysingled out by referring <strong>to</strong> the definitions (5.9) and (5.10). They are the nine-entries rowvec<strong>to</strong>rs:C m = [ 0 3 T −v T 0 −l II l III](5.24)C n = [ −u T 0 3 T l I −l II 0 ] (5.25)where 0 3 is the three-entries zero vec<strong>to</strong>r.The coefficient for the derivative of the crossproduct u×v is the 3×9 matrix:C u×v = [ ṽ −ũ 0 33](5.26)where 0 33 is the 3×3 zero matrix.The scalar c and vec<strong>to</strong>r w depend on u×v; they are functions of u and v, but they donot depend on l I , l II , l III . The coefficients for the derivatives are worked out by referring <strong>to</strong>Eq. (5.26):C c i = w p C u×v pi (5.27)C w ij = (δ pi− w i w p ) C u×v pj (5.28)where δ ij is the Kronecker delta, representing the components of the identity matrix.Vec<strong>to</strong>r h depends on all the components of s. We derive and simplify; the coefficient forthe derivative we obtain is the 3×9 matrix:[C h R=cwhere we introduce the 3×3 matrices:Sc− l Ivc− l II (u − v)cl III uc](5.29)M ij = m δ ij + v i u j (5.30)R ij = M ij − h i w p ṽ pj (5.31)N ij = n δ ij + u i v j (5.32)S ij = N ij − h i w p ũ pj (5.33)and u and v are three-entries vec<strong>to</strong>rs.The coefficient for the derivative of r is singled out by referring <strong>to</strong> the definition (5.13). Itis the nine-entries row vec<strong>to</strong>r:C r = [ C r u C r v C r l IC r l IIC r l III](5.34)


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 113where C r u and C r v are the three-entries row vec<strong>to</strong>rs:C r u i = −hp R picrC r v i = −hp S picr(5.35)(5.36)and C r l I, C r l II, C r l IIIare the scalars:C r l IC r l IIC r l III= l Ih p v pcr= l II (h p (u p − v p )+c)cr= −l IIIh p u pcr(5.37)(5.38)(5.39)The coefficient for the derivative of the crossproduct h ×w is worked out by deriving,substituting the expressions for C w and C h , and simplifying. The result is the 3×9 matrix:C h×w = [ C h×wuC h×wvC h×wl IC h×wl IIC h×wl III](5.40)where C h×wuand C h×wvare the 3×3 matrices:Cuh×w ij = − 1 (˜w pi ·cMpj − ˜h)qi · B q p· ṽ pjCvh×wij = 1 (˜w pi ·cNpj − ˜h)qi · B q p· ũ pj(5.41)(5.42)and C h×wl I, C h×w , C h×w are the three-entries vec<strong>to</strong>rs:l IIl IIIC h×wl I i = l Ic ˜w pi · vp (5.43)C h×wl II i = l IIc ˜w pi · (u p − v p ) (5.44)C h×wl III i = − l IIIc ˜w pi · up (5.45)with:B ij = δ ij − 2w i w j (5.46)5.6.2 Jacobian opera<strong>to</strong>rOnce singled out the derivatives of the terms, we compute the coefficient matrix C lII forthe derivative of l II , such that:∂l II= C lII s |r (5.47)∂q rWe derive Eq. (5.8). To achieve a compact expression of C lII , we recognize and introduce thetwo matrices E and F, which depend on the geometry and the configuration of the tetrahedral


114 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMssystem. Their definitions are:E ij = −r ˜w ij − ɛ w i h j (5.48)F ij = r A pi · Bpj − ɛ l II 2 w i w j (5.49)where:A ij = −˜h ij − ɛrδ ij (5.50)Matrix C lII is the 3×9 matrix:[C lII =C lIIuC lIIvC lIIl IC lIIl IIC lIIl III](5.51)where C lIIu and C lIIv are the 3×3 matrices:Cu lIIij = 1 ()E pi ·crMpj − F pi · ṽpjCv lIIij = − 1 ()E pi ·crNpj − F pi · ũpj(5.52)(5.53)and C lIIl I, C lIIl II, C lIIl IIIare the three-entries vec<strong>to</strong>rs:C lIIl I i= − l Icr E pi · vp (5.54)C lIIl II i= − l ()IIE pi ·cr p − v p ) − ɛ c w i (5.55)C lIIl III i= l IIIcr E pi · up (5.56)Our goal is writing the 3×12 coefficient matrix T in order <strong>to</strong> compute the Jacobian matrixby linear combination of the derivatives of the intermediate variables s:J ir = T pi · s p|r (5.57)We obtain Matrix T by rearranging the entries of C lII in Eq. (5.51), as just done <strong>to</strong> obtainEq. (5.23); the identity matrix I 33 is added on <strong>to</strong> take in<strong>to</strong> account the contribution of s II , assuggested by Eqs. (5.7) and (5.17):[T =−C lIIuI 33 +C lIIu +ClII v−C lIIvC lIIl IC lIIl IIC lIIl III](5.58)Equations (5.57) and (5.58) allow an effective computation of the Jacobian matrix in thegeneral case. If some of the intermediate variables s do not depend on the internal coordinates,i.e., some components of s are constant for every mechanism configuration, then thecorresponding components of s |q are always zero. In such a case part of the entries of T isalways multiplied by zero: the computation of those entries can be avoided.


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 1155.7 Acceleration analysisAs done in the case of the absolute velocity, we obtain the acceleration of point P byderiving Eq. (5.16). The derivation is again in two steps:where:d 2 −→ OPdt 2= ∂ −→ OP∂q rd 2 −→q r ∂2 OP dq r+dt2 ∂q r ∂q s dtdq sdt(5.59)∂ 2 −→ OP i∂q r ∂q s= H irs = ∂2 l IIi∂q r ∂q s+ ∂2 s IIi∂q r ∂q s(5.60)is the third-order tensor representing the Hessian opera<strong>to</strong>r, i; r; s = 1, 2, 3.Consider the right-hand side of Eq. (5.59). The first term is the composition 1 of theJacobian matrix with the vec<strong>to</strong>r representing the accelerations of the internal coordinates.These accelerations are input variables of the acceleration analysis. The Jacobian matrix is aresult of the velocity analysis and is an input <strong>to</strong> the acceleration analysis. Then this first termis known.The second term is the composition of the Hessian tensor with two times the vec<strong>to</strong>r ofthe internal coordinate velocities. The internal coordinate velocities are input variables of thevelocity analysis and are known. The Hessian tensor is discussed in the following section.5.7.1 Computation of the Hessian tensorThe Hessian tensor is the sum of two third-order tensors: the former is the second derivativeof l II , the latter is the second derivative of s II , both with respect <strong>to</strong> the internal coordinates.As suggested by Eq. (5.47), the second derivative of l II with respect <strong>to</strong> the internal coordinatesis:∂ 2 l IIi= C lII pi ·∂q r ∂q|s s p|r + C lII pi · sp|r|s (5.61)sEvery component of C lII is a combination of scalars and vec<strong>to</strong>rs which are related <strong>to</strong> thetetrahedral system; hence, the derivative C lII |qis a linear combination of the components ofs |q and we can introduce a tensor of coefficients L, as suggested by Eq. (5.22), such that:C lII pi · |s = L pqi · · sq|s (5.62)Tensor L is a 3×9×9 symmetric tensor. Formally its components can be worked out byderiving and gathering, but the complexity of the terms suggests a quite different approach.It is recommendable <strong>to</strong> exploit the structure of C lII shown in the Eqs. (5.52) <strong>to</strong> (5.56); sowe introduce two coefficients, U and V, which refer <strong>to</strong>. The structure of these coefficients isdiscussed below.First of all, we write the derivative of L in a raw form, without substituting the coefficientsC c and C h which appear in the expressions. For the derivatives of E and F we introduce asbefore two tensors of coefficients C E and C F , such that:We leave C w and C h non substituted also in C E and C F .E i|r = C E pi · sp|r (5.63)F i|r = C F pi · sp|r (5.64)1 we use the names composition and product for the two fundamental tensor algebra operations


116 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMsOnce written this raw expression of the derivative of L, we select the terms of U and Vby comparison of the components of L, looking at the recurrences. The selected terms containC c , C w and C h ; we substitute their expressions and simplify. The result is:U pij · = −1crV pij ·= 1 cr(ɛ w i(Mqp· · Q qj −l II 2 w q ṽ qj h p) +r 2 (r ε qpi · · +ɛ δ qi · hp )B mq · ṽ mj)(ɛ w i(Nqp· · Q qj −l II 2 w q ũ qj h p) +r 2 (r ε qpi · · +ɛ δ qi · hp )B mq · ũ mj)(5.65)(5.66)where:Q ij = r 2 δ ij + h i h j (5.67)Once recognised U and V in the derivative of L, we collect and simplify the other terms,up <strong>to</strong> the final form. The cumbersome passages are omitted. In the final form, the structureof L is:⎡L =⎢⎣L u u L v u L lI u L lIIuL u v L v v L lI v L lIIvL u l IL v l IL lI l IL lIIl IL u l IIL v l IIL lI l IIL lIIl IIL u l IIIL v l IIIL lI l IIIL lIIl IIIL lIIIuL lIIIvL lIIIl IL lIIIl IIL lIIIl III⎤⎥⎦(5.68)If we intuitively represent L as a 3D matrix of numbers L ijk , then Eq. (5.68) shows the9×9 “side” spanned by j and k; the first index i = 1, 2, 3 represents the thickness.• L u u, L v u, L u v, L v v are 3×3×3 third-order tensors. In keep with the symmetry of the Hessian(Schwartz’s theorem), by developing the expressions we verify:L u u ijk = L u u ikj (5.69)L v v ijk = L v v ikj (5.70)L v u ijk = L v u ikj (5.71)• L u l I, L v l I, L u l II, L v l II, L u l III, L v l IIIare 3×3 matrices; in L they rule as 3×1×3 tensors;• L lI u, L lIIu , L lIIIu , L lI v, L lIIv , L lIIIv are 3×3 matrices, ruling as 3×3×1 tensors. The symmetryof the Hessian suggests: L β α ij1 = L α β i1j, where, formally, α = u;v and β = l I ;l II ;l III ;• L lI l I, L lIIl I, L lIIIl I, L lI l II, L lIIl II, L lIIIl II, L lI l III, L lIIl III, L lIIIl IIIare three-entries vec<strong>to</strong>rs, ruling in L as3×1×1 tensors.We introduce the notation:P ijk = r ε ijk − ɛ δ ik h j − E ij w k (5.72)O ijk = 2rA ik w j + 2r A pi · wp B jk + ɛl II 2 δ ik w j + ɛl II 2 w i B jk (5.73)


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 117The expressions for the components of L follow:L u unij · = 1 cr(U pij · R pn − r ClII u ij wp ṽp n· + 1 c O ami · · ṽaj ṽm n·++ 1 c P ami · · M aj ṽm n· + E pi · vp δ nj) (5.74)L u nv ij · = −1cr(U pij · S pn − r Cu lIIij wp ũp n· + 1 c O ami · · ṽaj ũm n·++ 1 c P ami · · M aj ũm n· − F pi · ε npj + E ij v n − E ni · uj) (5.75)L u l I ij = −l Icr U pij · vp (5.76)L u l II ij = −l (IIU pij ·cr (u p − v p ) + E ij +− ɛ (r2 r 2 ṽ ij − l 2 II w i w p ṽ pj + w i h p ) ) (5.77)M pjL u l III ij = l ( )IIIU pij ·crup + E ij(5.78)L v nv ij · = −1cr(V pij · S np · − r C lIIv ij wp ũ np · − 1 c O ami · · ũaj ũ n− 1 c P ami · · N aj ũ nm · + E pi · up δ nj ·m ·+) (5.79)L v l I ij = −l ( )IV pij ·crvp + E ij(5.80)L v l II ij = −l (IIV pij ·cr (u p − v p ) − E ij ++ ɛ ( r2ũ r 2 ij − l 2 II w i w p ũ pj + w i h p ) ) (5.81)N pjL v l III ij = l IIIcr V pij · up (5.82)L lI l I i = −1 ()c 2 r 3 l 2 I ɛw i Q pq v q − cr 2 E pi · v p (5.83)L lI l II i = −l Il II ɛ(c 2 r 3 w i Q pq (u q − v q ) + ch p) v p (5.84)


118 Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMsL lI l III i = l Il III ɛc 2 r 3 w iQ pq u q v p (5.85)L lIIl II i = −l II 2 ɛ(c 2 r 3 w i Q pq (u q − v q ) + 2ch p) (u p − v p )+− ɛr 3 w ih p h p − 1cr E pi · (u p − v p )(5.86)L lIIl III i = l IIl III ɛ(c 2 r 3 w i Q pq (u q − v q ) + ch p) u p (5.87)L lIIIl III i = −1 ()c 2 r 3 l 2 III ɛw i Q pq u q − cr 2 E pi · u p (5.88)We rearrange the components of L as suggested by Eq. (5.23) in order <strong>to</strong> introduce theintermediate variables s. In this case the rearrangement is more complex; we must combinethe rows and the columns of Eq. (5.68) separately <strong>to</strong> take in<strong>to</strong> account that the vec<strong>to</strong>r of theinternal coordinate velocities is combined with tensor L on both the second and third indexesof L, as shown in Eqs. (5.60) and (5.62). So we finally obtain the tensor coefficient L that weneed <strong>to</strong> compute C lII by linear combination of the derivatives s |q ; L is a 3×12×12 tensor:⎡L =⎢⎣L u u −L u u−L v u L v u −L lI u −L lIIu −L lIIIu−♯1 ♯1 + ♯2 −♯2 ♯3 ♯4 ♯5L u v −L u v −Lv v L v v −L lI v −L lIIv−L u l IL u l I+L v l I−L v l IL lI l IL lIIl I−L u l IIL u l II+L v l II−L v l IIL lI l IIL lIIl II−L u l IIIL u l III+L v l III−L v l IIIL lI l IIIL lIIl IIIWe rewrite Eq. (5.61) <strong>to</strong> introduce L:−L lIIIvL lIIIl IL lIIIl IIL lIIIl III⎤⎥⎦♯1 = L u u+ L u v♯2 = L v u+ L v v♯3 = L lI u + LlI v♯4 = L lIIu + L lIIv♯5 = L lIIIu + LlIII v(5.89)∂ 2 l IIi∂q r ∂q s= L pqi · · sp|rs q|s + C lII pi · sp|r|s (5.90)Finally, we substitute Eq. (5.90) in Eq. (5.60) and introduce the Jacobian matrix <strong>to</strong> obtainthe Hessian tensor in final form:H irs = L pqi · · sp|rs q|s + J pi · sp|r|s (5.91)As in the case of the Jacobian matrix, depending on the geometry and the actuation of themechanism the computation of some components of L can be avoided. It happens when someof the intermediate variables s do not depend on any internal coordinate, or when the law ofmotion is such that some component of the acceleration is null; in both cases some componen<strong>to</strong>f s |q is zero. The entries of L corresponding <strong>to</strong> these null components are multiplied by zeroand their computation can be neglected.


Chapter 5: Tetrahedral Equations and Differential Kinematics of a Class of PMs 119In spite of the complexity of L, the expressions simplify remarkably if they are particularisedfor some architecture and geometry. In many cases, the proposed algorithm can be used forthe robot design and <strong>to</strong> perform design optimisation as well as for the computation of therobot <strong>dynamics</strong> in a model-based real time control system.5.8 ConclusionsThe chapter proposes efficient algorithms for the first and second derivatives of the solutionof the generic system of two tetrahedral equations.The subject is developed referring <strong>to</strong> the tetrahedral <strong>mechanisms</strong>, a class of 3-dof translationalarchitectures that includes both redundant and nonredundant devices. Their commoncharacteristic is <strong>to</strong> have three particular leg chains, named main chains, such that the problemof computing the location of the mobile platform with respect <strong>to</strong> the frame is solved bylocalising the vertex of a particular tetrahedron.The proposed approach is analytic and fully parametric. The input variables are the actualvalues of the internal coordinates and their velocities and accelerations; the outputs are theactual velocity and the actual acceleration of the mobile platform. The maximum numberof independent internal coordinates of a tetrahedral mechanism is twelve. The formulas aredeveloped under the hypothesis that each one of these twelve coordinates is independentlyactuated; the application <strong>to</strong> <strong>mechanisms</strong> with less than twelve internal coordinates is possibleby introducing proper constraint relations, and leads <strong>to</strong> progressively simpler expressions.To reduce the running time, the terms which compare in the expressions are organized inorder <strong>to</strong> minimize the final number of subterms required <strong>to</strong> compute the platform velocity andacceleration. Once the values <strong>to</strong> the internal coordinates are assigned, the platform location,the Jacobian and the Hessian are singled out by substitution. The Jacobian requires thecomputation of the six subterms: A, B, E, F, M, N. Once singled out the subterms for theJacobian, the Hessian requires the computation of five more subterms: Q, U, V, O, P. Everyterm is singled out by composition and product of tensors. The minimization of the numberof subterms <strong>to</strong> speed up the algorithm has been a very demanding work.Every passage and the final formulas have been attentively validated first of all algebraically.The expressions of the velocity and acceleration obtained from the algorithm have been compared,term by term, <strong>to</strong> the velocity and acceleration directly singled out by deriving thecoordinates of the vertex P of the tetrahedral system. The check required some days ofMAPLE computation. The library with the tensor algebra functions written <strong>to</strong> perform thecheck is presented in Section Algorithms D.Although this algebraical validation was enough <strong>to</strong> assure the correctness, we applied thealgorithm <strong>to</strong> particular architectures and geometries and compared the results <strong>to</strong> the output ofmulti-body simulations. Moreover, these tests prove the effectiveness of the algorithm. SectionAlgorithms E shows a numerical example developed with MAPLE; J and H are computed forthe 3-PUU robot Zoe, mentioned in Section 4.5.2.Due <strong>to</strong> the architecture of the legs, the computation of the translational and rotationalaccelerations of every leg link from the velocity and acceleration of the mobile platform isquite simple; then the algorithm is the base for the effective computation of the explicit direct<strong>dynamics</strong> of every tetrahedral mechanism and a feasible alternative <strong>to</strong> the methods usingLagrange multipliers.


Part IIIAlgorithms


NoteThe code collected in this third Part of the thesis is not reported for mere spirit of completeness.On the contrary, it is an integral part of the presentation of the work, since it documentsthe algorithms used <strong>to</strong> perform all analyses and <strong>to</strong> test the proposed methodologies. Due <strong>to</strong>a precise choice of conciseness, these algorithms are not extensively discussed nor explicitlymentioned in the previous parts of the thesis, which deal with the results obtained by meansof them. Moreover, due <strong>to</strong> the same spirit of conciseness we have decided <strong>to</strong> report thesealgorithms in the essential syntaxis of the MAPLE code in which they have been originallyimplemented.Section Algorithms A presents the MAPLE library collecting the general functions used <strong>to</strong>create all mathematical mock-ups discussed in the thesis.Section Algorithms B shows the library of MAPLE functions used <strong>to</strong> create the mathematicalmock-up of the mechanism discussed in Chapter 1. The library gathers also the functionsused for the singularity analysis of the mechanism and a function which generates an outputtext file <strong>to</strong> set the geometry of the Pro/ENGINEER virtual mock-up used <strong>to</strong> check themechanism behaviour in singular configurations.Section Algorithms C collects the MAPLE functions used <strong>to</strong> create the mathematical mockupof ArmillEye, discussed in Chapter 2.The second and the third libraries require the first one.Section Algorithms D presents the library of general MAPLE tensor algebra functionspurposely implemented <strong>to</strong> test the algorithm presented in Chapter 5.Finally, Section Algorithms E shows a numerical example of application of the algorithmpresented in Chapter 5 <strong>to</strong> a nonsymmetric 3PUU linear delta architecture.123


Algorithms AGeneral MAPLE mathematical mock-uplibrary> denari:=1e-6: #utilizza<strong>to</strong> dalla funzione: filtro()>> STILE_FACCIA_OPPOSTAALLASEGNATA:=STYLE(PATCHNOGRID),COLOR(RGB,255/255,212.5/255,8.3/255):General purpose functionsRx rotation matrix> Rx:=proc(ang)> matrix(3,3,[[1,0,0],[0,cos(ang),-sin(ang)],[0,sin(ang),cos(ang)]]):> end:Ry rotation matrix> Ry:=proc(ang)> matrix(3,3,[[cos(ang),0,sin(ang)],[0,1,0],[-sin(ang),0,cos(ang)]]):> end:Rz rotation matrix> Rz:=proc(ang)> matrix(3,3,[[cos(ang),-sin(ang),0],[sin(ang),cos(ang),0],[0,0,1]]):> end:R general rotation matrix> Rr:=proc(angx,angy,angz)> evalm(Rx(angx)&*Ry(angy)&*Rz(angz)):> end:R general rotation matrix> RrTT:=proc(angx,angy,angz)> evalm(Rz(angx)&*Ry(angy)&*Rz(angz)):> end:Common functions> modu:=proc(VV)> sqrt(innerprod(VV,VV));> end:> norma:=proc(VV) ### versore da un vet<strong>to</strong>re ###> if(VV[1]0 or VV[2]0 or VV[3]0)then> evalm(VV/sqrt(innerprod(VV,VV))); else VV; fi:> end:> normaS:=proc(S) ### vite normalizzata da una vite ###> if(S[1]0 or S[2]0 or S[3]0)then> evalm(S/sqrt(S[1]^2+S[2]^2+S[3]^2)):> else> evalm(S/sqrt(S[4]^2+S[5]^2+S[6]^2)):> fi:> end:> angol:=proc(v1,v2,vr)> local pr:> pr:=arccos(innerprod(norma(v1),norma(v2))):> end:125


126 Algorithms A: General MAPLE mathematical mock-up libraryskew of a vec<strong>to</strong>r> skew:=proc(a)> evalm(-matrix(3,3,[[0,a[3],-a[2]],[-a[3],0,a[1]],[a[2],-a[1],0]]));> end:> angolo:=proc(v1,v2,dir)> local vv1,vv2,inn,cr;> vv1:=evalm(v1/norm(v1,2)):> vv2:=evalm(v2/norm(v2,2)):> inn:=innerprod(vv1,vv2):> cr:=crossprod(vv1,vv2):> if(evalf(innerprod(dir,cr)) sign(cr)*arccos(inn);> end:Calcola passo e pun<strong>to</strong> di passaggio dagli elementi della $ S> scrTOfhpt:=proc(S,EPS)> local f,m,ff,h,pun<strong>to</strong>:> f:=[S[1],S[2],S[3]]:> m:=[S[4],S[5],S[6]]:> ff:=innerprod(f,f):> if(innerprod(m,m)>EPS^2)then> h:=innerprod(f,m)/ff:> pun<strong>to</strong>:=evalm(crossprod(f,evalm(m-h*f))/ff):> else> h:=0:> pun<strong>to</strong>:=evalm([0,0,0]):> fi:> [f,op(pun<strong>to</strong>),h]:> end:Disegna la $ S (BOZZA) trasl trasla il pun<strong>to</strong>p di applicazionelungo la direzione di S> show_screw:=proc(S,EPS,scala,colore,trasl)> local pupa:> pupa:=scrTOfhpt(S,EPS):> wre_arrow(evalm(pupa[2] + trasl*norma(pupa[1])) , pupa[1] , 1. , scala , colore):> end:Prodot<strong>to</strong> Reciproco> PR:=proc(sc1,sc2)> evalf(innerprod([sc1[1],sc1[2],sc1[3]],[sc2[4],sc2[5],sc2[6]])+innerprod([sc1[4],sc1[5],sc1[6]],[sc2[1],sc2[2],sc2[3]]));> end:> filtro:=proc(M,iii,jjj)> local i,j,M_:> M_:=matrix(iii,jjj):> for i from 1 <strong>to</strong> iii do> for j from 1 <strong>to</strong> jjj do> if(abs(M[i,j]) od: od:> op(M_);> end:Ricci tensor (basis 1)> propr:=1:> Ricci:=array(1..3,1..3,1..3):> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 do Ricci[i,j,k]:=0: od: od: od:> Ricci[1,2,3]:=propr: Ricci[2,3,1]:=propr: Ricci[3,1,2]:=propr:> Ricci[1,3,2]:=-propr: Ricci[2,1,3]:=-propr: Ricci[3,2,1]:=-propr:Singular values of a matrix> siva:=proc(M)> local ssvv:> ssvv:=map(abs,singularvals(M));> max(op(ssvv))/min(op(ssvv));


Algorithms A: General MAPLE mathematical mock-up library 127> end:An elementary bisection <strong>to</strong>ol> bisection:=proc(prcd,m,M,eps,NUPA)> local ind,i,f,c,ai,af,ac,minim:> if(abs(prcd(m)) for ind from 1 <strong>to</strong> NUPA while(abs(prcd(c))>eps) do> c:=(i+f)/2:> if(prcd(i) if(ceil(ind/ceil(NUPA/10))-ind/ceil(NUPA/10)=0) thenprint("fatti",ind,prcd(i),prcd(f),i,f,c,prcd(c)); fi:> od:> ai:=abs(prcd(i)): af:=abs(prcd(f)): ac:=abs(prcd(c)): minim:=min(ai,af,ac):> if(ai=minim)then c:=i: elif(af=minim)then c:=f: fi:> print(prcd(c));> fi:> c;> end:Solves a system of two conic equations> tetrasolver:=proc(v1,v2,infAB,supAB,A,B,K)> local ab,axb,rad,T1,T2,T3:> ab:=innerprod(v1,v2):> axb:=crossprod(v1,v2):> rad:=sqrt(-(ab-infAB)*(ab-supAB)):> T1:=evalm((A-B*ab)/(1-ab^2)):> T2:=evalm((B-A*ab)/(1-ab^2)):> T3:=K*rad/(1-ab^2):> evalm(T1*v1+T2*v2+T3*axb):> end:Compute axis of rotation and cos of the rotation angle from anygiven rotation matrix> VRML:=proc(rotmat)> local eps,ttt,eigen,T,vec,trace,coseno,seno,i,j,k,skewwert:> global Ricci:> trace:=0:> for i from 1 <strong>to</strong> 3 do trace:=trace+rotmat[i,i]; od:> coseno:=(trace-1)/2:> seno:=sqrt(1-coseno^2):> skewwert:=evalm(rotmat-transpose(rotmat)):> vec:=array(1..3):> for i from 1 <strong>to</strong> 3 do> vec[i]:=(-1/(4*seno)) * sum(sum(Ricci[i,p,q]*skewwert[p,q],p=1..3),q=1..3):> od:> evalf([op(vec),coseno]):> end:Rotates any plot; sgn=[-1;+1] indicates the versus of rotation> rota:=proc(plotstruct,rotmatrix,sgn)> local quat:> quat:=VRML(rotmatrix):print(-sgn*arccos(op(quat)[2]),[[0,0,0],[op(quat)[1][1],op(quat)[1][2],op(quat)[1][3]]]);> rotate(plotstruct,-sgn*arccos(op(quat)[2]),[[0,0,0],[op(quat)[1][1],op(quat)[1][2],op(quat)[1][3]]]):> end:Draws a dashed line> LINEDASH:=proc(B,A,n,thi)> local ll,lt,BA,i,P_i,P_f,l,nBA:> BA:=evalm(B-A):> nBA:=norma(BA):> ll:=norm(BA,2):> lt:=ll/(2*n+1):> for i from 0 <strong>to</strong> n do


128 Algorithms A: General MAPLE mathematical mock-up library> P_i:=evalm(A+nBA*lt*(2*i)): P_f:=evalm(A+nBA*lt*(2*i+1)):> l[i]:=polygonplot3d([P_f,P_i]):# ,thickness=thi):> od:> display(convert(l,list));> end:Hatches a surface> retinatura:=proc(p1,p2,p3,p4,reti)> local j,k,lx,ly,dx,px,dy,py,pu,pun,DIGI;> #DIGI:=Digits:> #Digits:=3:> lx:=norm(evalm(p2-p1),2):> px:=lx/reti:> ly:=norm(evalm(p4-p1),2):> py:=ly/reti:> dx:=norma(p2-p1):> dy:=norma(p4-p1):> #pu:=[p1[1],p1[2],p1[3]]:> pu:=NULL:> #for j from px by px <strong>to</strong> lx-px do> #for k from py by py <strong>to</strong> ly-py do> #pun:=evalm(p1+j*dx+k*dy):> #pu:=pu,[pun[1],pun[2],pun[3]]:> #od:od:> for j from px by px <strong>to</strong> lx-px do> pun:=polygonplot3d([evalm(p1+j*dx) , evalm(p1+j*dx+ly*dy)] , style=line):> pu:=pu,pun:> od:> #Digits:=DIGI:> pu;> end:Draws a cylindrical arrow for no-infinit-pitch wrenches> wre_arrow:=proc(puah,vdire,lunghezza,fasca,colore)> local vdir,raci,raci2,epesele,lutes,nugri,base,base_,corpo,sottes,sottes_,punta,lunghezzz;> raci:=fasca/5: raci2:=fasca: lutes:=4*raci2: epesele:=fasca/1000000: nugri:=9:> lunghezzz:=lunghezza-lutes*norm(vdire,2): print(lunghezzz);> vdir:=vdire/norm(vdire,2):> base_:=tubeplot(evalm(t*lunghezzz*vdir+puah),t=0..epesele,radius=t*raci/epesele,grid=[2,nugri]):> base:=polygonplot3d(op(op(base_))[2]):> corpo:=tubeplot(evalm(t*lunghezzz*vdire+puah),t=epesele..1-epesele,radius=raci,grid=[2,nugri]):> sottes_:=tubeplot(evalm(t*lunghezzz*vdire+puah),t=1-epesele..1,radius=raci+(t-1+epesele)*(raci2-raci)/(epesele),grid=[2,nugri]):> sottes:=polygonplot3d(op(op(sottes_))[2]):> punta:=tubeplot(evalm(t*vdir+lunghezzz*vdire+puah),t=0..lutes,radius=raci2-t*raci2/lutes,grid=[2,nugri]):> display(base,corpo,sottes,punta,scaling=constrained,colour=colore);> #display(base,corpo,sottes,punta,scaling=constrained,colour=colore);> end:Draws a cylindrical arrow for no-infinit-pitch wrenches> wre_arrow:=proc(puah,vdire,lunga,fasca,colore)> localvdir,raci,raci2,epesele,lutes,nugri,base,base_,corpo,sottes,sottes_,punta,vdire_norm,lunghezza,normvdire,intervallocorpo;> raci:=fasca/5: raci2:=fasca: lutes:=4*raci2: epesele:=fasca/1000000: nugri:=9:> normvdire:=norm(vdire,2):> lunghezza:=lunga*normvdire:> vdire_norm:=vdire/normvdire:> base_:=tubeplot(evalm(t*vdire_norm+puah),t=0..epesele,radius=t*raci/epesele,grid=[2,nugri]):> base:=polygonplot3d(op(op(base_))[2]):> if((lunghezza-lutes)-2*epesele>0)then intervallocorpo:=t=epesele..(lunghezza-lutes)-epesele:> else intervallocorpo:=t=(lunghezza-lutes)+epesele..epesele: fi:> corpo:=tubeplot(evalm(t*vdire_norm+puah),intervallocorpo,radius=raci,grid=[2,nugri]):> sottes_:=tubeplot(evalm(t*vdire_norm+puah),t=(lunghezza-lutes)-epesele..(lunghezza-


Algorithms A: General MAPLE mathematical mock-up library 129lutes),radius=raci+(t-(lunghezza-lutes)+epesele)*(raci2-raci)/(epesele),grid=[2,nugri]):> sottes:=polygonplot3d(op(op(sottes_))[2]):> punta:=tubeplot(evalm((t+lunghezza-lutes)*vdire_norm+puah),t=0..lutes,radius=raci2-t*raci2/lutes,grid=[2,nugri]):> display(base,corpo,sottes,punta,scaling=constrained,colour=colore);> end:Draws a square arrow for pure moment (infinite-pitch screw)> mom_arrow:=proc(puah,vdire,lunghezzz,colore)> local vdir,raci,raci2,epesele,ragambo,base,base_,corpo,sottes,sottes_,punta;> raci:=lunghezzz/3.5: raci2:=1.8*raci: epesele:=lunghezzz/10000: ragambo:=0.6:> vdir:=vdire/norm(vdire,2):> base_:=tubeplot(evalm(t*lunghezzz*vdir+puah),t=0..epesele,radius=t*raci/epesele,grid=[2,5]):> base:=polygonplot3d(op(op(base_))[2]):> corpo:=tubeplot(evalm(t*lunghezzz*vdir+puah),t=epesele..ragambo,radius=raci,grid=[2,5]):> sottes_:=tubeplot(evalm(t*lunghezzz*vdir+puah),t=ragambo..ragambo+epesele,radius=raci+(tragambo)*(raci2-raci)/(epesele),grid=[2,5]):> sottes:=polygonplot3d(op(op(sottes_))[2]):> punta:=tubeplot(evalm(t*lunghezzz*vdir+puah),t=ragambo+epesele..1,radius=raci2-(t-ragamboepesele)*(raci2)/(1-ragambo-epesele),grid=[2,5]):> display(base,corpo,sottes,punta,colour=colore,scaling=constrained);> end:Draws an arc link> rappresentaARCO:=proc(vet1,vet2,pun<strong>to</strong>,STILE,STILEfacciasegnata,NP,thl_r,thl_z,r4,A)> local k12,k1xk12,lll_i,lll_ii,lll_iii,lll_iiii,lll_i_,lll_ii_,lll_iii_,lll_iiii_,l_i,l_ii,l_iii,l_iiii,l_i_,l_ii_,l_iii_,l_iiii_,li,lii,liii,liiii,di,dii,diii,diiii,RRRR,ARCO:> global STILE_FACCIA_OPPOSTAALLASEGNATA:> k12:=norma(crossprod(vet1,vet2)):> k1xk12:=crossprod(k12,vet1):> RRRR:=transpose(matrix(3,3,[norma(vet1),norma(k1xk12),k12])):> lll_i:=evalm((r4+thl_r)*RRRR&*[cos(t),sin(t),0]+k12*thl_z+pun<strong>to</strong>):> lll_ii:=evalm((r4-thl_r)*RRRR&*[cos(t),sin(t),0]+k12*thl_z+pun<strong>to</strong>):> lll_iii:=evalm((r4+thl_r)*RRRR&*[cos(t),sin(t),0]-k12*thl_z+pun<strong>to</strong>):> lll_iiii:=evalm((r4-thl_r)*RRRR&*[cos(t),sin(t),0]-k12*thl_z+pun<strong>to</strong>):> l_i:=spacecurve(op(lll_i),t=0..A,colour=black,numpoints=NP,thickness=3):> l_ii:=spacecurve(op(lll_ii),t=0..A,colour=black,numpoints=NP,thickness=3):> l_iii:=spacecurve(op(lll_iii),t=0..A,colour=black,numpoints=NP,thickness=3):> l_iiii:=spacecurve(op(lll_iiii),t=0..A,colour=black,numpoints=NP,thickness=3):> li:=op(op(l_i)[1])[1]:> lii:=op(op(l_ii)[1])[1]:> liii:=op(op(l_iii)[1])[1]:> liiii:=op(op(l_iiii)[1])[1]:> di:=PLOT3D(MESH([li,lii]),STILE_FACCIA_OPPOSTAALLASEGNATA):> dii:=PLOT3D(MESH([lii,liiii]),op(STILE)):> diii:=PLOT3D(MESH([liii,liiii]),op(STILEfacciasegnata)):> diiii:=PLOT3D(MESH([liii,li]),op(STILE)):> ARCO:=l_i,l_ii,l_iii,l_iiii,di,dii,diii,diiii:> end:Draws a cylindrical joint> rappresentaGIUNTO:=proc(asse,pun<strong>to</strong>,offset,raci,seluci,GRID_,GRID_2,COLOGIU)> local con<strong>to</strong>rni:> con<strong>to</strong>rni:=tubeplot([pun<strong>to</strong>[1]+asse[1]*t,pun<strong>to</strong>[2]+asse[2]*t,pun<strong>to</strong>[3]+asse[3]*t],t=offsetseluci..offset+seluci,radius=raci,colour=black,style=WIREFRAME,grid=GRID_,thickness=3):> con<strong>to</strong>rni,> tubeplot([pun<strong>to</strong>[1]+asse[1]*t,pun<strong>to</strong>[2]+asse[2]*t,pun<strong>to</strong>[3]+asse[3]*t],t=offsetseluci..offset+seluci,radius=raci,colour=COLOGIU,style=PATCHNOGRID,grid=GRID_2),> polygonplot3d(op(op(con<strong>to</strong>rni)[1])[1][1],colour=COLOGIU,grid=[30,30]),> polygonplot3d(op(op(con<strong>to</strong>rni)[1])[1][2],colour=COLOGIU,grid=[30,30]):> end:Draws a straight link> rappresentaDRITTO:=proc(P4,P5,vettra_,vetnor_,thl_r1,thl_z1,thl_r2,thl_z2,STILE,STILEfacciasegnata)> local P3i1,P3ii1,P3iii1,P3iiii1,P3i2,P3ii2,P3iii2,P3iiii2,l4,l4_1,l4_2,l4_3,l4_4,vettra,vetnor:> global STILE_FACCIA_OPPOSTAALLASEGNATA:


130 Algorithms A: General MAPLE mathematical mock-up library> vettra:=norma(vettra_): vetnor:=norma(vetnor_):> P3i1:=evalm([P4[1],P4[2],P4[3]]+vettra*thl_r1+vetnor*thl_z1):> P3ii1:=evalm([P4[1],P4[2],P4[3]]-vettra*thl_r1+vetnor*thl_z1):> P3iii1:=evalm([P4[1],P4[2],P4[3]]+vettra*thl_r1-vetnor*thl_z1):> P3iiii1:=evalm([P4[1],P4[2],P4[3]]-vettra*thl_r1-vetnor*thl_z1):> P3i2:=evalm([P5[1],P5[2],P5[3]]+vettra*thl_r2+vetnor*thl_z2):> P3ii2:=evalm([P5[1],P5[2],P5[3]]-vettra*thl_r2+vetnor*thl_z2):> P3iii2:=evalm([P5[1],P5[2],P5[3]]+vettra*thl_r2-vetnor*thl_z2):> P3iiii2:=evalm([P5[1],P5[2],P5[3]]-vettra*thl_r2-vetnor*thl_z2):> l4:=PLOT3D(MESH([[[op(P3i2)[1],op(P3i2)[2],op(P3i2)[3]],[op(P3ii2)[1],op(P3ii2)[2],op(P3ii2)[3]],[op(P3iiii2)[1],op(P3iiii2)[2],op(P3iiii2)[3]],[op(P3iii2)[1],op(P3iii2)[2],op(P3iii2)[3]],[op(P3i2)[1],op(P3i2)[2],op(P3i2)[3]]],[[op(P3i1)[1],op(P3i1)[2],op(P3i1)[3]],[op(P3ii1)[1],op(P3ii1)[2],op(P3ii1)[3]],[op(P3iiii1)[1],op(P3iiii1)[2],op(P3iiii1)[3]],[op(P3iii1)[1],op(P3iii1)[2],op(P3iii1)[3]],[op(P3i1)[1],op(P3i1)[2],op(P3i1)[3]]]]),STYLE(WIREFRAME),COLOR(RGB,0.,0.,0.),THICKNESS(3)):> l4_1:=PLOT3D(MESH([> [[op(P3iiii2)[1],op(P3iiii2)[2],op(P3iiii2)[3]],[op(P3iii2)[1],op(P3iii2)[2],op(P3iii2)[3]]],> [[op(P3iiii1)[1],op(P3iiii1)[2],op(P3iiii1)[3]],[op(P3iii1)[1],op(P3iii1)[2],op(P3iii1)[3]]]> ]),op(STILEfacciasegnata)):> l4_2:=PLOT3D(MESH([> [[op(P3i2)[1],op(P3i2)[2],op(P3i2)[3]],[op(P3ii2)[1],op(P3ii2)[2],op(P3ii2)[3]]],> [[op(P3i1)[1],op(P3i1)[2],op(P3i1)[3]],[op(P3ii1)[1],op(P3ii1)[2],op(P3ii1)[3]]]> ]),STILE_FACCIA_OPPOSTAALLASEGNATA):> l4_3:=PLOT3D(MESH([> [[op(P3i2)[1],op(P3i2)[2],op(P3i2)[3]],[op(P3iii2)[1],op(P3iii2)[2],op(P3iii2)[3]]],> [[op(P3i1)[1],op(P3i1)[2],op(P3i1)[3]],[op(P3iii1)[1],op(P3iii1)[2],op(P3iii1)[3]]]> ]),op(STILE)):> l4_4:=PLOT3D(MESH([> [[op(P3iiii2)[1],op(P3iiii2)[2],op(P3iiii2)[3]],[op(P3ii2)[1],op(P3ii2)[2],op(P3ii2)[3]]],> [[op(P3iiii1)[1],op(P3iiii1)[2],op(P3iiii1)[3]],[op(P3ii1)[1],op(P3ii1)[2],op(P3ii1)[3]]]> ]),op(STILE)):> l4,l4_1,l4_2,l4_3,l4_4:> end:


Algorithms BHeaveEye MAPLE mathematical mock-uplibraryAnalysis Tools for HeaveEye> with(plot<strong>to</strong>ols):> FILE_IMAGINI:="C:/Utenti/DamapleZ/":>> COLORE_RO:=white:> COLORE_W0_SEGN:=cyan:> COLORE_W:=aquamarine:> COLORE_IIM:=green:> COLORE_VEL:=pink:> COLORE_TWIST:=yellow:> COLORE_SCREWS:=white:> denari:=1e-6: ### used in filtro()Configuration <strong>to</strong>olsRotation matrix Ry as a function of psi4P> RyP4:=proc(i,hh,H)> local L,M,N,s1,c1,RAD,den;> L:=hh+h||i:> M:=r5||i:> N:=((hh+h||i)^2+r5||i^2+r4||i^2-l45||i^2):> den:=((hh+h||i)^2+r5||i^2)*r4||i:> RAD:=sqrt(-(-(r4||i-l45||i)^2+r5||i^2+(hh+h||i)^2)*(-(r4||i+l45||i)^2+r5||i^2+(hh+h||i)^2)):The argument of the square root is positive or null iffr5i^2+(hh+hi)^2 belongs <strong>to</strong> [-(r4i- l45i)^2 , -(r4i+l45i)^2> c1:=(N*L-H*M*RAD)/2/den:> s1:=(N*M+H*L*RAD)/2/den:The following matrix might also be composed like a product ofmatrices obtained by using the cross definition of the entries s1and c1> matrix(3,3,[[c1,0,s1],[0,1,0],[-s1,0,c1]]);> end:Solves the inverse kinematics of leg i> vernum:=proc(i,R,hh,H,K)> local P5_O_p,inf45,sup45,Rzte5,RyP4i,k1_b,k1_p,k2_p,k3_p,k4_p,k5_p,k4r_p,A,B,ab,axb,ABAB,rad,T1,T2,T3,axbaxb,GEO,L,M,N,s1,c1,RAD,den,RyP4e3,Re3va,r45,sw1,cmi,rint,k4r_p_ort,k3_p_ort,s_om3,s_om4,c_om3,c_om4,n23,n45,s_chi,ctg_chi,c143,s143,SCRV1:> L:=hh+h||i:> M:=r5||i:> N:=(L^2+coe1||i):> den:=(L^2+r5||i^2):> if(den>=inf45||i and den RAD:=sqrt(-(den-inf45||i)*(den-sup45||i)):> c1:=(N*L-H*M*RAD)/(2*den*r4||i):> s1:=(N*M+H*L*RAD)/(2*den*r4||i):> RyP4e3:=[s1,0,c1];> Rzte5:=evalm(Rz(theta5||i)):> k3_p:=evalm(Rzte5&*Ry(alpha43||i)&*RyP4e3):> k1_p:=evalm(R&*k1_b||i):> A:=A||i: B:=B||i:> ab:=innerprod(k1_p,k3_p):> if(ab>=infAB||i and ab axb:=crossprod(k1_p,k3_p):131


132 Algorithms B: HeaveEye MAPLE mathematical mock-up library> rad:=sqrt(-(ab-infAB||i)*(ab-supAB||i)):> #rad:=sqrt(1-A^2-B^2+ab*(2*A*B-ab)):> T1:=evalm((A-B*ab)/(1-ab^2)):> T2:=evalm((B-A*ab)/(1-ab^2)):> T3:=K*rad/(1-ab^2):> k2_p:=evalm(T1*k1_p+T2*k3_p+T3*axb):> P5_O_p:=evalm(r5||i*Rzte5&*e1+L*e3):> k5_p:=evalm(Rzte5&*e2):> k4_p:=evalm(k5_p):> k4r_p:=evalm(Rzte5&*RyP4e3):> k4r_p_ort:=evalm(Rzte5&*[-RyP4e3[3],0,RyP4e3[1]]):> k3_p_ort:=evalm(Rzte5&*Ry(alpha43||i)&*[-RyP4e3[3],0,RyP4e3[1]]):> rint:=r4||i*H*RAD/(sin(alpha43||i)*(den-r4||i^2-l45||i^2)+H*cos(alpha43||i)*RAD):> r45:=den*H*RAD/((den-r4||i^2+l45||i^2)*L+H*r5||i*RAD):> #s_om3:=((l45||i^2+r4||i^2-r5||i^2-L^2)*cos(alpha43||i)+sin(alpha43||i)*H*RAD)/(2*l45||i*r4||i):> #c_om3:=(-(l45||i^2+r4||i^2-r5||i^2-L^2)*sin(alpha43||i)+cos(alpha43||i)*H*RAD)/(2*l45||i*r4||i):> s_om4:=(l45||i^2+r4||i^2-r5||i^2-L^2)/(2*l45||i*r4||i):> c_om4:=H*RAD/(2*l45||i*r4||i):> #n45:=norma(evalm(c_om3*k3_p+s_om3*k3_p_ort));> n45:=norma(evalm(c_om4*k4r_p+s_om4*k4r_p_ort));> n23:=evalm((-T3*k1_p+T3*ab*k3_p+T1*axb)/sqrt(1-B^2)):> s_chi:=H*sign(r45)*abs(L)/sqrt(L^2+(r45-r5||i)^2):> ctg_chi:=(H*RAD*L-r5||i*(L^2+r5||i^2-r4||i^2+l45||i^2))/((L^2+r5||i^2-r4||i^2+l45||i^2)*L+H*r5||i*RAD):> c143:=c1*cos(alpha43||i)-s1*sin(alpha43||i):> s143:=s1*cos(alpha43||i)+c1*sin(alpha43||i):> #SCRV1:=evalm( rint/innerprod(n23,k4_p)*evalm(n23&*matrix(3,3,[[0,0,-1],[0,1,0],[-1,0,0]]))*(c143*ctg_chi+s143) ):> SCRV1:=evalm( r45/innerprod(n23,k4_p)*evalm(n23&*matrix(3,3,[[0,0,-1],[0,1,0],[-1,0,0]])) ):> [op(k1_p),op(k2_p),op(k3_p),op(k4_p),op(k5_p),op(k4r_p),op(P5_O_p),r45,rint,pitch,op(n45),s_chi,op(SCRV1)]:> else NULL;> fi:> else NULL; fi:> end:Solves the direct kinematics of the mechanism under some simplificative HP> vernumdir:=proc(the1,the2,the3,the4,KA,KB,HAB,KP,Hh)> local i,k2_bA,k2_bB,k2_bCA,k2_bCB,k3_bA,k3_bB,LA,NA,LB,NB,AxB,ip_b,jp_b,kp_b,AscB,k4r_bA,k4r_bB,c3A, c3B,k4_bA,k4_bB,k5r_bA,k5r_bB,h,c4B,c4A,s4B,s4A,T1__,T2__,R,VRML,n45_bA,n45_bB,c34,s34,c3,s3,c4,s4,r45,rint,Tgbeta,sethe5:> global AA,AB,HAB_,theta5,r4A,l45A,r5A,r4B,l45B,r5B,ne3k1:> r4A:=r4||1: l45A:=l45||1: r5A:=r5||1:> r4B:=r4||4: l45B:=l45||4: r5B:=r5||4:> the||1:=the1: the||2:=the2: the||3:=the3: the||4:=the4:> for i from 1 <strong>to</strong> 4 do> ne3k1:=norma(crossprod(e3,k1_b||i)):> k2_b||i:=map(evalf,evalm( A||i*k1_b||i + SA||i*(cos(the||i)*ne3k1+sin(the||i)*crossprod(k1_b||i,ne3k1)) )):> od:> k3_bA:=tetrasolver(k2_b||1,k2_b||2,infABACA,supABACA,B1,B2,KA):> k3_bB:=tetrasolver(k2_b||4,k2_b||3,infABBCB,supABBCB,B4,B3,KB):> theta5:=PI+abs(theta5||3-theta5||2):> sethe5:=sign(sin(theta5)):> AscB:=innerprod(k3_bA,k3_bB):> AxB:=crossprod(k3_bA,k3_bB):> T1__:=sqrt(AscB-cos(theta5))/( (1+AscB)*sqrt(1-cos(theta5)) ):> T2__:=sethe5 * KP * sqrt(1+cos(theta5))/( (1+AscB)*sqrt(1-cos(theta5)) ):> kp_b:=evalm(T1__*(k3_bA+k3_bB) + T2__*AxB):> s34:=sin(alpha43||1):> c34:=cos(alpha43||1):> k4_bA:=evalm( HAB* crossprod(k3_bA,kp_b) *sqrt(1-cos(theta5))/sqrt(1-AscB)):> k4_bB:=evalm( HAB* crossprod(k3_bB,kp_b) *sqrt(1-cos(theta5))/sqrt(1-AscB)):> c3:=sqrt(AscB-cos(theta5))/sqrt(1-cos(theta5)):> s3:=sqrt(1-c3^2):


Algorithms B: HeaveEye MAPLE mathematical mock-up library 133> c4:=c3*c34+ HAB*s3*s34:> s4:=s3*c34- HAB*c3*s34:> k4r_bA:=evalm( (s4*k3_bA +HAB *s34*kp_b) / s3):> k4r_bB:=evalm( (s4*k3_bB +HAB *s34*kp_b) / s3):> h:=r4A*c4 + Hh*sqrt(l45A^2 - (r4A*s4 + HAB * KP *r5A)^2):> k5r_bA:=evalm(h*kp_b - r5A *HAB * KP *(k4r_bA-kp_b*c4) / s4):> k5r_bB:=evalm(h*kp_b - r5B *HAB * KP *(k4r_bB-kp_b*c4) / s4):> ip_b:=evalm((k3_bA-k3_bB)/(2*sqrt((1-AscB)/2))):> jp_b:=evalm( (-2*T1__*AxB + T2__*(k3_bA+k3_bB)*(1-AscB)) /(2*sqrt((1-AscB)/2))):> R:=blockmatrix(1,3,[ip_b,jp_b,kp_b]): ### ip_b,jp_b,kp_b in colonne ###> VRML:=norma(evalm([ (jp_b[3]-kp_b[2]) , (kp_b[1]-ip_b[3]) , (ip_b[2]-jp_b[1]) ])):> n45_bA:=norma(crossprod(k4_bA,evalm(k5r_bA-r4A*k4r_bA))):> n45_bB:=norma(crossprod(k4_bB,evalm(k5r_bB-r4B*k4r_bB))):> Tgbeta:=(r4A*s4 + HAB * KP * r5A)/(h-r4A*c4): ### beta è l’angolo che P5-P4 forma con kp ###> r45:=h*Tgbeta - HAB * KP * r5A: ### negativo per HAB*KP=1 and Hh=-1 ; ques<strong>to</strong> compensa ilcambiamen<strong>to</strong> di segno di sin(beta+psi3) ed rint vien giusta ###> rint:=r45/(s3+Tgbeta*c3):> [[evalm(k1_b||1),evalm(k1_b||2),evalm(k1_b||3),evalm(k1_b||4)],> [evalm(k2_b||1),evalm(k2_b||2),evalm(k2_b||3),evalm(k2_b||4)],> [evalm(k3_bA),evalm(k3_bB)],op(kp_b),op(k4r_bA),op(k4r_bB),op(k4_bA),op(k4_bB),op(k5r_bA),op(k5r_bB),h,op(R),op(ip_b),op(jp_b),op(VRML),op(n45_bA),op(n45_bB),rint,r45]:> end:Provides four angles that (suitably interpreted,e.g., by changing sign and summing up PI) are the angles the1,...,the4> givethe:=proc(R,hh,H1,H2,H3,H4,K1,K2,K3,K4)> local i,ne3k1,GEO,H,K,R_pltTObase,DEk3:> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> GEO:=vernum(i,R,hh,H,K):> R_pltTObase:=transpose(conf[1]):> k1orig||i:=evalm(R_pltTObase &* GEO[1]):> k2orig||i:=evalm(R_pltTObase &* GEO[2]):> k3orig||i:=evalm(R_pltTObase &* GEO[3]):> alf||i:=evalm( sin(alpha23||i) * crossprod(k1orig||i,k2orig||i) / sin(alpha12||i) ):> bet||i:=evalm( sin(alpha23||i) * (A||i*k2orig||i-k1orig||i) / sin(alpha12||i) ):> gam||i:=evalm( cos(alpha23||i) * k2orig||i ):> k3||i :=evalm( alf||i*cos(tet||i)+bet||i*sin(tet||i)+gam||i ):> DEk3:= (k3||i[1]-k3orig||i[1])^2 + (k3||i[2]-k3orig||i[2])^2 + (k3||i[3]-k3orig||i[3])^2:> tetaorig||i:=fsolve(DEk3,tet||i);> od:> tetaorig||1,tetaorig||2,tetaorig||3,tetaorig||4;> end:Provides a simplifies graphical mockup of the mechanism via direct kinematics> configdir:=proc(the1,the2,the3,the4,KA,KB,HAB,KP,Hh)> localGEO,P1,P2,P3,P4,P5,l1,l2,l3,l4,l5,ax1,ax2,ax3,ax4,ax5,i,r45,rappr,platf,base,K,numero,axcern,H,LET,kp,jjj,l1CA,l1CB,l1CAB,l2CA,l2CB,ax1CA,ax1CB,ax2CA,ax2CB,legCA,legCB,axkp,P4A,P4B,ax4r,RRRR,lll_i_,pltf,NP,h,EPS,casp,rintdisA,rintdisB,l1C,r4A,l45A,r5A,r4B,l45B,r5B:> EPS:=10^(-(Digits-4.)):> axcern:=0.02:> NP:=20:> GEO:=vernumdir(the1,the2,the3,the4,KA,KB,HAB,KP,Hh):> r4A:=r4||1: l45A:=l45||1: r5A:=r5||1:> r4B:=r4||4: l45B:=l45||4: r5B:=r5||4:>> P1||A:=evalm(r4A*op(GEO)[1][1]):> P1||CA:=evalm(r4A*op(GEO)[1][2]):> P2||A:=evalm(r4A*op(GEO)[2][1]):> P2||CA:=evalm(r4A*op(GEO)[2][2]):> P3||A:=evalm(r4A*op(GEO)[3][1]):> P1||B:=evalm(r4A*op(GEO)[1][4]):


134 Algorithms B: HeaveEye MAPLE mathematical mock-up library> P1||CB:=evalm(r4A*op(GEO)[1][3]):> P2||B:=evalm(r4A*op(GEO)[2][4]):> P2||CB:=evalm(r4A*op(GEO)[2][3]):> P3||B:=evalm(r4A*op(GEO)[3][2]):>> h:=op(GEO)[11]:> kp:=evalm(op(GEO)[4]):> P4||A:=evalm(r4A*op(GEO)[5]):> P4||B:=evalm(r4B*op(GEO)[6]):> P5||A:=evalm(op(GEO)[9]):> P5||B:=evalm(op(GEO)[10]):>> for jjj from 1 <strong>to</strong> 2 do> if(jjj=1)then i:=’A’: elif(jjj=2)then i:=’B’: fi:> l1:=polygonplot3d([[P2||i[1],P2||i[2],P2||i[3]],[P1||i[1],P1||i[2],P1||i[3]]],style=line,colour=brown,thickness=3):> l2:=polygonplot3d([[P3||i[1],P3||i[2],P3||i[3]],[P2||i[1],P2||i[2],P2||i[3]]],colour=red,thickness=3):> l3:=polygonplot3d([[P4||i[1],P4||i[2],P4||i[3]],[P3||i[1],P3||i[2],P3||i[3]]],colour=red,thickness=3):> l4:=polygonplot3d([[P5||i[1],P5||i[2],P5||i[3]],[P4||i[1],P4||i[2],P4||i[3]]],colour=red,thickness=3):> ax1:=polygonplot3d([[P1||i[1],P1||i[2],P1||i[3]],[0,0,0]],colour=blue,style=line):> ax2:=polygonplot3d([[P2||i[1],P2||i[2],P2||i[3]],[0,0,0]],colour=cyan,style=line):> ax3:=polygonplot3d([[P3||i[1],P3||i[2],P3||i[3]],[0,0,0]],colour=coral,style=line):> ax4r:=polygonplot3d([[P4||i[1],P4||i[2],P4||i[3]],[0,0,0]],colour=green,style=line):> ax4:=polygonplot3d([evalm([P4||i[1],P4||i[2],P4||i[3]]+axcern*op(GEO)[7+jjj-1]),evalm([P4||i[1],P4||i[2],P4||i[3]]-axcern*op(GEO)[7+jjj-1])],colour=blue,style=line):> ax4||i:=op(GEO)[7+jjj-1]:> ax5:=polygonplot3d([evalm([P5||i[1],P5||i[2],P5||i[3]]+axcern*op(GEO)[7+jjj-1]),evalm([P5||i[1],P5||i[2],P5||i[3]]-axcern*op(GEO)[7+jjj-1])],colour=blue,style=line):> leg||i:=l1,l2,l3,l4,ax1,ax2,ax3,ax4r,ax4,ax5:> od:> l1CA:=polygonplot3d([[P1||CA[1],P1||CA[2],P1||CA[3]] ,[P2C||A[1],P2C||A[2],P2C||A[3]]],colour=red,thickness=3):> l1CB:=polygonplot3d([[P1||CB[1],P1||CB[2],P1||CB[3]] ,[P2C||B[1],P2C||B[2],P2C||B[3]]],colour=red,thickness=3):> l2CA:=polygonplot3d([[P3||A[1],P3||A[2],P3||A[3]] ,[P2C||A[1],P2C||A[2],P2C||A[3]]],colour=red,thickness=3):> l2CB:=polygonplot3d([[P3||B[1],P3||B[2],P3||B[3]] ,[P2C||B[1],P2C||B[2],P2C||B[3]]],colour=red,thickness=3):> ax1CA:=polygonplot3d([[P1||CA[1],P1||CA[2],P1||CA[3]],[0,0,0]],colour=blue,style=line):> ax1CB:=polygonplot3d([[P1||CB[1],P1||CB[2],P1||CB[3]],[0,0,0]],colour=blue,style=line):> ax2CA:=polygonplot3d([[P2C||A[1],P2C||A[2],P2C||A[3]],[0,0,0]],colour=cyan,style=line):> ax2CB:=polygonplot3d([[P2C||B[1],P2C||B[2],P2C||B[3]],[0,0,0]],colour=cyan,style=line):> legCA:=l1CA,l2CA,ax1CA,ax2CA:> legCB:=l1CB,l2CB,ax1CB,ax2CB:> axkp:=polygonplot3d([[h*kp[1],h*kp[2],h*kp[3]],[0,0,0]],colour=coral,style=line):> RRRR:=transpose(matrix(3,3,[op(GEO)[7],crossprod(op(GEO)[7],kp),op(kp)])):> lll_i_:=evalm(r5A*RRRR&*[cos(t),sin(t),0]+h*kp):> pltf:=spacecurve(op(lll_i_),t=0..2*PI,colour=black,numpoints=NP,thickness=3):> base:=polygonplot3d([[P1||A[1],P1||A[2],P1||A[3]] , [P1||CA[1],P1||CA[2],P1||CA[3]] ,[P1||CB[1],P1||CB[2],P1||CB[3]] ,[P1||B[1],P1||B[2],P1||B[3]]],colour=green):> casp:=evalm(op(GEO)[1][3]*op(GEO)[18]):rintdisA:=polygonplot3d([[0,0,0],[casp[1],casp[2],casp[3]]],style=line,colour=yellow,thickness=3):> casp:=evalm(op(GEO)[2][3]*op(GEO)[18]):> rintdisB:=polygonplot3d([[0,0,0],[casp[1],casp[2],casp[3]]],style=line,colour=red,thickness=3):> numero:=textplot3d([P1||A[1],P1||A[2],P1||A[3]+0.02,1],colour=black),> textplot3d([P1||CA[1],P1||CA[2],P1||CA[3]+0.02,2],colour=black),> textplot3d([P1||CB[1],P1||CB[2],P1||CB[3]+0.02,3],colour=black),> textplot3d([P1||B[1],P1||B[2],P1||B[3]+0.02,4],colour=black):> rappr:=legA,legB,legCA,legCB,axkp,pltf,base,numero:> #rappr:=legA,legB,legCA,legCB,axkp,pltf, rintdisA,rintdisB:> display(rappr,axes=framed,scaling=constrained,labels=[’e_1’,’e_2’,’e_3’]);


Algorithms B: HeaveEye MAPLE mathematical mock-up library 135> end:Solves the configuration via direct kinematics per geometries with r5=0> configdirgen_r5eq0:=proc(tettta1,tettta2,tettta3,tettta4,k21,k22,k23,k24)> local i,j,Randh,P5,k4,kinterno3,kinterno4:> kinterno2||1:=k21: kinterno2||2:=k22: kinterno2||3:=k23: kinterno2||4:=k24:> tetttainterno||1:=tettta1: tetttainterno||2:=tettta2: tetttainterno||3:=tettta3:tetttainterno||4:=tettta4:> for i from 1 <strong>to</strong> 4 do> alf||i:=evalm( sin(alpha23||i) * crossprod(k1_b||i,kinterno2||i) / sin(alpha12||i) ):> bet||i:=evalm( sin(alpha23||i) * (A||i*kinterno2||i-k1_b||i) / sin(alpha12||i) ):> gam||i:=evalm( cos(alpha23||i) * kinterno2||i ):> kinterno3[i]:=evalm( alf||i*cos(tetttainterno||i)+bet||i*sin(tetttainterno||i)+gam||i ):> od:> Randh:=k3<strong>to</strong>Rh(kinterno3[1],kinterno3[2],kinterno3[3],kinterno3[4]):> for j from 1 <strong>to</strong> 4 do> kinterno4[j]:=norma(crossprod(row(Randh[1],3) , kinterno3[j])):> od:> P5:=evalm(row(Randh[1],3)*Randh[2]):> [[evalm(k1_b1),evalm(k1_b2),evalm(k1_b3),evalm(k1_b4)],> [evalm(kinterno21),evalm(kinterno22),evalm(kinterno23),evalm(kinterno24)],> [evalm(kinterno3[1]),evalm(kinterno3[2]),evalm(kinterno3[3]),evalm(kinterno3[4])],> [evalm(kinterno4[1]),evalm(kinterno4[2]),evalm(kinterno4[3]),evalm(kinterno4[4])],> evalm(P5)]:> end:Graphics <strong>to</strong>olsProvides a simplified graphical mockup of the mechanism> config:=proc(R,hh,H1,H2,H3,H4,K1,K2,K3,K4)> local GEO,P1,P2,P3,P4,P5,l1,l2,l3,l4,l5,ax1,ax2,ax3,ax4,ax5,i,r45,rappr,platf,base,K,numero,axcern,H,LET:> axcern:=0.02:> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> GEO:=vernum(i,R,hh,H,K):> P1:=evalm(r4||i*op(GEO)[1]): #r1||i> P1||i:=op(P1):> P2:=evalm(r4||i*op(GEO)[2]): #r2||i> P3:=evalm(r4||i*op(GEO)[3]): #r3||i> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> l1:=polygonplot3d([[P2[1],P2[2],P2[3]],[P1[1],P1[2],P1[3]]],colour=red,thickness=3):> l2:=polygonplot3d([[P3[1],P3[2],P3[3]],[P2[1],P2[2],P2[3]]],colour=red,thickness=3):> l3:=polygonplot3d([[P4[1],P4[2],P4[3]],[P3[1],P3[2],P3[3]]],colour=red,thickness=3):> l4:=polygonplot3d([[P5||i[1],P5||i[2],P5||i[3]],[P4[1],P4[2],P4[3]]],colour=red,thickness=3):> ax1:=polygonplot3d([[P1[1],P1[2],P1[3]],[0,0,0]],colour=blue,style=line):> ax2:=polygonplot3d([[P2[1],P2[2],P2[3]],[0,0,0]],colour=cyan,style=line):> ax3:=polygonplot3d([[P3[1],P3[2],P3[3]],[0,0,0]],colour=coral,style=line):> ax4:=polygonplot3d([evalm([P4[1],P4[2],P4[3]]+axcern*op(GEO)[4]),evalm([P4[1],P4[2],P4[3]]-axcern*op(GEO)[4])],colour=blue,style=line):> ax5:=polygonplot3d([evalm([P5||i[1],P5||i[2],P5||i[3]]+axcern*op(GEO)[5]),evalm([P5||i[1],P5||i[2],P5||i[3]]-axcern*op(GEO)[5])],colour=blue,style=line):> r45:=evalm(norma(P5||i-(hh+h||i)*e3)*op(GEO)[8]):> r45:=polygonplot3d([[r45[1],r45[2],r45[3]],[0,0,0]],colour=red, style=line):> if(i=1)then LET:=’A’: elif(i=2)then LET:=’B’: elif(i=3)then LET:=’C’: elif(i=4)thenLET:=’D’: fi:> numero:=textplot3d([P1||i[1],P1||i[2],P1||i[3]+0.02,LET],colour=black):> leg||i:=ax1,ax2,ax3,ax4,ax5,l1,l2,l3,l4,numero:> od:> platf:=polygonplot3d([[P51[1],P51[2],P51[3]],[P52[1],P52[2],P52[3]],[P53[1],P53[2],P53[3]],[P54[1],P54[2],P54[3]]],colour=green,thickness=1):> base:=polygonplot3d([[P11[1],P11[2],P11[3]],[P12[1],P12[2],P12[3]],[P13[1],P13[2],P13[3]],[P14[1],P14[2],P14[3]]],colour=green,thickness=1):> rappr:=leg1,leg2,leg3,leg4:


136 Algorithms B: HeaveEye MAPLE mathematical mock-up library> display(rappr,platf,base,axes=framed,scaling=constrained,labels=[’e_1’,’e_2’,’e_3’]);> end:Provides a graphical mockup of the platform> dispiat:=proc(P1,P2,P3,P4,PP)> local i,j,X21_1,X21_2,X41_1,X41_4,X23_3,X23_2,X43_3,X43_4,maxh,minh,ggg,Dzz:> for i from 1 <strong>to</strong> 4 do k5||i:=evalm(Rz(theta5||i)&*e2): od:> ### trova il più al<strong>to</strong> ed il più basso> zz||1:=P1: zz||2:=P2: zz||3:=P3: zz||4:=P4:> maxh:=1: minh:=1: for ggg from 2 <strong>to</strong> 4 do if(zz||ggg[3]>zz||maxh[3])then maxh:=ggg: fi:if(zz||ggg[3] Dzz:=zz||maxh[3]-zz||minh[3]:> ### calcola i punti di intersezione; li fissa alla altezza minima per la opzione PP=3> i:=2:j:=1: P5||i:=P2: P5||j:=P1:> d||i||j:=[P5||i[1]-P5||j[1],P5||i[2]-P5||j[2],0]: ### distanza> ka||i||j:=-(-k5||i[1]*d||i||j[2]+d||i||j[1]*k5||i[2])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> #kb||i||j:= (-k5||j[1]*d||i||j[2]+d||i||j[1]*k5||j[2])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> X||i||j:=evalm(ka||i||j*k5||j+[P5||j[1],P5||j[2],zz||minh[3]]): ### pun<strong>to</strong>intersezione sul piano> i:=4:j:=1: P5||i:=P4: P5||j:=P1:> d||i||j:=[P5||i[1]-P5||j[1],P5||i[2]-P5||j[2],0]:> ka||i||j:=-(-k5||i[1]*d||i||j[2]+d||i||j[1]*k5||i[2])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> #kb||i||j:=(-k5||j[1]*d||i||j[2]+k5||j[2]*d||i||j[1])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> X||i||j:=evalm(ka||i||j*k5||j+[P5||j[1],P5||j[2],zz||minh[3]]):> i:=2:j:=3: P5||i:=P2: P5||j:=P3:> d||i||j:=[P5||i[1]-P5||j[1],P5||i[2]-P5||j[2],0]:> ka||i||j:=-(-k5||i[1]*d||i||j[2]+d||i||j[1]*k5||i[2])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> #kb||i||j:=(-k5||j[1]*d||i||j[2]+k5||j[2]*d||i||j[1])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> X||i||j:=evalm(ka||i||j*k5||j+[P5||j[1],P5||j[2],zz||minh[3]]):> i:=4:j:=3: P5||i:=P4: P5||j:=P3:> d||i||j:=[P5||i[1]-P5||j[1],P5||i[2]-P5||j[2],0]:> ka||i||j:=-(-k5||i[1]*d||i||j[2]+d||i||j[1]*k5||i[2])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> #kb||i||j:=(-k5||j[1]*d||i||j[2]+k5||j[2]*d||i||j[1])/(-k5||j[1]*k5||i[2]+k5||j[2]*k5||i[1]):> X||i||j:=evalm(ka||i||j*k5||j+[P5||j[1],P5||j[2],zz||minh[3]]):> X21_1:=[X21[1],X21[2],P1[3]]: X21_2:=[X21[1],X21[2],P2[3]]:> X41_1:=[X41[1],X41[2],P1[3]]: X41_4:=[X41[1],X41[2],P4[3]]:> X23_3:=[X23[1],X23[2],P3[3]]: X23_2:=[X23[1],X23[2],P2[3]]:> X43_3:=[X43[1],X43[2],P3[3]]: X43_4:=[X43[1],X43[2],P4[3]]:> if(PP=0)then> polygonplot3d([X21_1,X21_2,X23_2,X23_3,X43_3,X43_4,X41_4,X41_1],style=line,colour=black,thickness=4);> elif(PP=1)then> polygonplot3d([X21_1,X21_2,X23_2,X23_3,X43_3,X43_4,X41_4,X41_1],colour=grey,thickness=4);> elif(PP=2)then> polygonplot3d([X21_1,X21_2,X23_2,X23_3,X43_3,X43_4,X41_4,X41_1],style=HIDDEN,colour=black,thickness=4);> elif(PP=3)then> display(> polygonplot3d([X21,X41,X43,X23]),> polygonplot3d([evalm(X21+[0,0,Dzz]),evalm(X41+[0,0,Dzz]),evalm(X43+[0,0,Dzz]),evalm(X23+[0,0,Dzz])]),> polygonplot3d([X21,X41,evalm(X41+[0,0,Dzz]),evalm(X21+[0,0,Dzz])]),> polygonplot3d([X41,X43,evalm(X43+[0,0,Dzz]),evalm(X41+[0,0,Dzz])]),> polygonplot3d([X43,X23,evalm(X23+[0,0,Dzz]),evalm(X43+[0,0,Dzz])]),> polygonplot3d([X23,X21,evalm(X21+[0,0,Dzz]),evalm(X23+[0,0,Dzz])])> );> fi:> end:


Algorithms B: HeaveEye MAPLE mathematical mock-up library 137Provides a graphical mockup of the base> disbase:=proc(P11,P12,P13,P14,BB)> local OPT:> if(BB=0)then OPT:=colour=black,style=line,thickness=4:> elif(BB=1)then OPT:=colour=grey:> else OPT:=colour=black,style=HIDDEN,thickness=4: fi:> display(polygonplot3d([[P11[1],P11[2],P11[3]],[0,0,0],[P12[1],P12[2],P12[3]]],OPT),> polygonplot3d([[P12[1],P12[2],P12[3]],[0,0,0],[P13[1],P13[2],P13[3]]],OPT),> polygonplot3d([[P13[1],P13[2],P13[3]],[0,0,0],[P14[1],P14[2],P14[3]]],OPT),> polygonplot3d([[P14[1],P14[2],P14[3]],[0,0,0],[P11[1],P11[2],P11[3]]],OPT)):> end:Provides all elements (joints, links, axes) of the graphical mockup of the i-th leg chain> unagamba:=proc(i,R,hh,H,K)> local GEO,P2,P3,P4,l1,l2,l3,l4,l5,g1,g2,g3,g4,g5,ax1,ax2,ax3,axcern,seluci,raci,tttt,LET,GRID_,GRID_2,divis_archi,STILEfacciasegnata,STILEbase,COLOGIU,tratti,NP,STILE,thl_r,thl_z,dimref,COLOGIUplatform:> dimref:=max(r41,r42,r43,r44):> seluci:=dimref/12.: raci:=5/12*seluci:> tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]: COLOGIU:=white:COLOGIUplatform:=COLOR(RGB,76/255,200/255,255/255):> tratti:=6: NP:=20: divis_archi:=30.:> #tratti e per il tratteggio assi; NP controllo il disegno dei link 1 e 2> STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> STILEfacciasegnata:=STYLE(PATCHNOGRID),COLOR(RGB,1.,0.,0.):> STILEbase:=STYLE(PATCHNOGRID),COLOR(RGB,0.7,0.,0.):> thl_r:=dimref/divis_archi: thl_z:=thl_r/2.5:>> GEO:=vernum(i,R,hh,H,K):> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> g1:=rappresentaGIUNTO(op(GEO)[1],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g2:=rappresentaGIUNTO(op(GEO)[2],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g3:=rappresentaGIUNTO(op(GEO)[3],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g4:=rappresentaGIUNTO(op(GEO)[4],P4,0,raci,seluci,GRID_,GRID_2,COLOGIU):> g5:=rappresentaGIUNTO(op(GEO)[4],P5||i,0,raci,seluci,GRID_,GRID_2,COLOGIUplatform):> l1:=rappresentaARCO((GEO)[1],(GEO)[2],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(A||i)):> l2:=rappresentaARCO((GEO)[2],(GEO)[3],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(B||i)):> l3:=rappresentaDRITTO(P3,P4,GEO[6],evalm(-GEO[4]),1.2*thl_r,1.2*thl_z,1.2*thl_z,1.2*thl_r,[STILE],[STILEfacciasegnata]):> l4:=rappresentaDRITTO(P4,P5||i,crossprod(evalm(P4-P5||i),op(GEO)[4]),evalm(-GEO[4]),thl_z,thl_r,thl_z,thl_r,[STILE],[STILEfacciasegnata]):> ax1:=LINEDASH([P1||i[1]-(P1||i[1]/r4||i*seluci),P1||i[2]-(P1||i[2]/r4||i*seluci),P1||i[3]-(P1||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax2:=LINEDASH([P2[1]-(P2[1]/r4||i*seluci),P2[2]-(P2[2]/r4||i*seluci),P2[3]-(P2[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax3:=LINEDASH([P3[1]-(P3[1]/r4||i*seluci),P3[2]-(P3[2]/r4||i*seluci),P3[3]-(P3[3]/r4||i*seluci)],[0,0,0],tratti,0):> [[display([l1,ax1,ax2,g1,g2]),display(l2,ax3,g3),display([l3,g4]),display(l4,g5)] , GEO];> end:Provides all elements (joints, links, axes) of the graphical mockup of the i-th leg chain> unagambadir_r5eq0:=proc(i,GEO)> localP2,P3,P4,l1,l2,l3,l4,l5,g1,g2,g3,g4,g5,ax1,ax2,ax3,axcern,seluci,raci,tttt,LET,GRID_,GRID_2,divis_archi,STILEfacciasegnata,STILEbase,COLOGIU,tratti,NP,STILE,thl_r,thl_z,dimref,COLOGIUplatform:> dimref:=max(r41,r42,r43,r44):> seluci:=dimref/12.: raci:=5/12*seluci:> tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]: COLOGIU:=white:COLOGIUplatform:=COLOR(RGB,76/255,200/255,255/255):###COLOR(RGB,149/255,230/255,255/255):


138 Algorithms B: HeaveEye MAPLE mathematical mock-up library> tratti:=6: NP:=20: divis_archi:=30.:> #tratti e per il tratteggio assi; NP controllo il disegno dei link 1 e 2> STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> STILEfacciasegnata:=STYLE(PATCHNOGRID),COLOR(RGB,1.,0.,0.):> STILEbase:=STYLE(PATCHNOGRID),COLOR(RGB,0.7,0.,0.):>> thl_r:=dimref/divis_archi: thl_z:=thl_r/2.5:> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:>> g1:=rappresentaGIUNTO(op(GEO)[1],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g2:=rappresentaGIUNTO(op(GEO)[2],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g3:=rappresentaGIUNTO(op(GEO)[3],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g4:=rappresentaGIUNTO(op(GEO)[4],P4,0,raci,seluci,GRID_,GRID_2,COLOGIU):> g5:=rappresentaGIUNTO(op(GEO)[4],P5||i,0,raci,seluci,GRID_,GRID_2,COLOGIUplatform):> l1:=rappresentaARCO((GEO)[1],(GEO)[2],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(A||i)):> l2:=rappresentaARCO((GEO)[2],(GEO)[3],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(B||i)):> l3:=rappresentaDRITTO(P3,P4,GEO[6],evalm(-GEO[4]),1.2*thl_r,1.2*thl_z,1.2*thl_z,1.2*thl_r,[STILE],[STILEfacciasegnata]):> l4:=rappresentaDRITTO(P4,P5||i,crossprod(evalm(P4-P5||i),op(GEO)[4]),evalm(-GEO[4]),thl_z,thl_r,thl_z,thl_r,[STILE],[STILEfacciasegnata]):ax1:=LINEDASH([P1||i[1]-(P1||i[1]/r4||i*seluci),P1||i[2]-(P1||i[2]/r4||i*seluci),P1||i[3]-(P1||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax2:=LINEDASH([P2[1]-(P2[1]/r4||i*seluci),P2[2]-(P2[2]/r4||i*seluci),P2[3]-(P2[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax3:=LINEDASH([P3[1]-(P3[1]/r4||i*seluci),P3[2]-(P3[2]/r4||i*seluci),P3[3]-(P3[3]/r4||i*seluci)],[0,0,0],tratti,0):> [[display([l1,ax1,ax2,g1,g2]),display(l2,ax3,g3),display([l3,g4]),display(l4,g5)] , GEO];> end:Draws the planes pi_45 and pi_23 of leg ’i’> legplanesC1:=proc(i,R,hh,H,K)> local GEO,P1,P2,P3,P4,P5,pian1,pian2,n23,PPP1,PPP2,PPP3,PPP4,shf,WIDRO,WID,HEADL,MEN,pu1,vis1,vis2,vis3,vis4,axcern,seluci,raci,tttt,GRID_,GRID_2,COLOGIU,tratti,NP,thl_r,thl_z,STILE,dvis1,vis5,vis6,vis,fitt,puin,dire1,dire2,lista1,cnt2,j,cnt,k,temp,lista,pimpp:> axcern:=0.02: seluci:=0.012: raci:=0.005: tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]:COLOGIU:=white: tratti:=6: NP:=60:>> thl_r:=r4||i/35.: thl_z:=thl_r/2.5: STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> GEO:=vernum(i,R,hh,H,K):> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> fitt:=1:> n23:=crossprod(op(GEO)[2],op(GEO)[3]):> PPP1:=[0,-0.03]: PPP2:=[0,0.085+0.04]: PPP3:=[0.28,0.085+0.04]: PPP4:=[0.28,-0.03]:> puin:=[op(PPP1)[1],op(PPP1)[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]]:> dire1:=evalm([op(PPP2)[1],op(PPP2)[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]]-puin):> dire2:=evalm([op(PPP4)[1],op(PPP4)[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]]-puin):> lista1:=[puin[1],puin[2],puin[3]]:> cnt2:=0:> for j from 0 by fitt <strong>to</strong> 1 do> cnt:=0:> for k from 0 by fitt <strong>to</strong> 1 do> cnt:=cnt+1:> temp:=evalm(puin+k*dire1+j*dire2):> lista[cnt]:=[temp[1],temp[2],temp[3]]:


Algorithms B: HeaveEye MAPLE mathematical mock-up library 139> od:> cnt2:=cnt2+1: pimpp[cnt2]:=convert(lista,list):> od:> lista1:=convert(pimpp,list):> pian1:=PLOT3D(MESH(lista1),STYLE(PATCH),THICKNESS(2),COLOR(RGB,0.96,0.96,0.96)):> n23:=op(GEO)[11]:> PPP1:=[-0.03,-0.03]: PPP2:=[-0.03,0.085+0.04]: PPP3:=[0.13,0.085+0.04]: PPP4:=[0.13,-0.03]:shf:=evalm(op(GEO)[7]):> pian2:=polygonplot3d([> [op(PPP1)[1]+shf[1],op(PPP1)[2]+shf[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP2)[1]+shf[1],op(PPP2)[2]+shf[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP3)[1]+shf[1],op(PPP3)[2]+shf[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP4)[1]+shf[1],op(PPP4)[2]+shf[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]+shf[3]]],style=PATCH,colour=COLOR(RGB,0.9,0.9,0.9),thickness=2,grid=[30,30]):#,style=line,colour=black,thickness=2):> puin:=[op(PPP1)[1]+shf[1],op(PPP1)[2]+shf[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]+shf[3]]:> dire1:=evalm([op(PPP3)[1]+shf[1],op(PPP3)[2]+shf[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]+shf[3]]-puin):> dire2:=evalm([op(PPP4)[1]+shf[1],op(PPP4)[2]+shf[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]+shf[3]]-puin):> lista1:=[puin[1],puin[2],puin[3]]:> cnt2:=0:> for j from 0 by fitt <strong>to</strong> 1 do> cnt:=0:> for k from 0 by fitt <strong>to</strong> 1 do> cnt:=cnt+1:> temp:=evalm(puin+k*dire1+j*dire2):> lista[cnt]:=[temp[1],temp[2],temp[3]]:> od:> cnt2:=cnt2+1: pimpp[cnt2]:=convert(lista,list):> od:> lista1:=convert(pimpp,list):>> WIDRO:=0.0006: WID:=7*WIDRO: HEADL:=5*WID:> dvis1:=evalm(0.55*crossprod(crossprod(op(GEO)[2],op(GEO)[3]),op(GEO)[11])):> pu1:=evalm(op(GEO)[9]*op(GEO)[3]-0.6*(dvis1)):> vis1:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):> dvis1:=evalm(-0.2*op(GEO)[4]):> pu1:=evalm(0*op(GEO)[9]*op(GEO)[3]-0.12*norma(dvis1)):> vis2:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):>> display(pian1,pian2,vis1,vis2,scaling=constrained,orientation=[161,63]);> end:Draws the planes pi_45 and pi_23 of leg ’i’> legplanesC2:=proc(i,R,hh,H,K)> local GEO,P1,P2,P3,P4,P5,pian1,pian2,n23,PPP1,PPP2,PPP3,PPP4,shf,WIDRO,WID,HEADL,MEN,pu1,vis1,vis2,vis3,vis4,axcern,seluci,raci,tttt,GRID_,GRID_2,COLOGIU,tratti,NP,thl_r,thl_z,STILE,dvis1,vis5,vis6,vis:> axcern:=0.02: seluci:=0.012: raci:=0.005: tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]:COLOGIU:=white: tratti:=6: NP:=60:> thl_r:=r4||i/35.: thl_z:=thl_r/2.5: STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> GEO:=vernum(i,R,hh,H,K):> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> n23:=crossprod(op(GEO)[2],op(GEO)[3]):> PPP1:=[0,-0.04]: PPP2:=[0,0.14]: PPP3:=[0.2,0.14]: PPP4:=[0.2,-0.04]:> pian1:=polygonplot3d([> [op(PPP1)[1],op(PPP1)[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP2)[1],op(PPP2)[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]],


140 Algorithms B: HeaveEye MAPLE mathematical mock-up library> [op(PPP3)[1],op(PPP3)[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP4)[1],op(PPP4)[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]]],colour=COLOR(RGB,0.96,0.96,0.96),thickness=2):> n23:=op(GEO)[11]:> PPP1:=[-0.02,-0.04]: PPP2:=[-0.02,0.14]: PPP3:=[0.075,0.14]: PPP4:=[0.075,-0.04]:shf:=evalm(op(GEO)[7]):> pian2:=polygonplot3d([> [op(PPP1)[1]+shf[1],op(PPP1)[2]+shf[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP2)[1]+shf[1],op(PPP2)[2]+shf[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP3)[1]+shf[1],op(PPP3)[2]+shf[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP4)[1]+shf[1],op(PPP4)[2]+shf[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]+shf[3]]],colour=COLOR(RGB,0.9,0.9,0.9),thickness=2):> WIDRO:=0.8:> MEN:=0.17:> dvis1:=evalm(0.49*crossprod(crossprod(op(GEO)[2],op(GEO)[3]),op(GEO)[11])):> pu1:=evalm(op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis1:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,white):> pu1:=evalm(0.8*op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis2:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,white):> pu1:=evalm(0.6*op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis3:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,white):> pu1:=evalm(0.4*op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis4:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,white):> pu1:=evalm(0.2*op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis5:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,white):> pu1:=evalm(0.*op(GEO)[9]*op(GEO)[3]-MEN*norma(dvis1)):> vis6:=wre_arrow(evalm(pu1),evalm(dvis1),WIDRO,0.005,red):> vis:=display(vis1,vis2,vis3,vis4,vis5,vis6,colour=black):> display(pian1,pian2,vis,scaling=constrained,orientation=[162,66]);> end:Draws the planes pi_45 and pi_23 of leg ’i’> legplanesC3:=proc(i,R,hh,H,K)> localGEO,P1,P2,P3,P4,P5,pian1,pian2,n23,PPP1,PPP2,PPP3,PPP4,shf,WIDRO,WID,HEADL,MEN,pu1,vis1,vis2,vis3,vis4,axcern,seluci,raci,tttt,GRID_,GRID_2,COLOGIU,tratti,NP,thl_r,thl_z,STILE,dvis1,vis5,vis6,vis:> axcern:=0.02: seluci:=0.012: raci:=0.005: tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]:COLOGIU:=white: tratti:=6: NP:=60:> thl_r:=r4||i/35.: thl_z:=thl_r/2.5: STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> GEO:=vernum(i,R,hh,H,K):> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> n23:=crossprod(op(GEO)[2],op(GEO)[3]):> PPP1:=[0,-0.04]: PPP2:=[0,0.08]: PPP3:=[0.175,0.08]: PPP4:=[0.175,-0.04]:> pian1:=polygonplot3d([> [op(PPP1)[1],op(PPP1)[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP2)[1],op(PPP2)[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP3)[1],op(PPP3)[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP4)[1],op(PPP4)[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]]],colour=COLOR(RGB,0.96,0.96,0.96),thickness=2):> n23:=op(GEO)[11]:> PPP1:=[-0.1405-0.027,-0.07]: PPP2:=[-0.1405-0.027,0.08]: PPP3:=[0.035,0.08]: PPP4:=[0.035,-0.07]: shf:=evalm(op(GEO)[7]):> pian2:=polygonplot3d([> [op(PPP1)[1]+shf[1],op(PPP1)[2]+shf[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP2)[1]+shf[1],op(PPP2)[2]+shf[2],-


Algorithms B: HeaveEye MAPLE mathematical mock-up library 141(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP3)[1]+shf[1],op(PPP3)[2]+shf[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP4)[1]+shf[1],op(PPP4)[2]+shf[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]+shf[3]]],style=line,colour=COLOR(RGB,0.,0.,0.),thickness=2):> WIDRO:=0.0006: WID:=7*WIDRO: HEADL:=5*WID:> MEN:=0.36:> dvis1:=evalm(MEN*norma(crossprod(crossprod(op(GEO)[2],op(GEO)[3]),op(GEO)[11]))):> pu1:=evalm([0,0,0]-0.*norma(dvis1)):> vis1:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(-MEN*norma(crossprod(op(GEO)[4],op(GEO)[11]))):> vis2:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):> dvis1:=evalm(MEN*norma(0.12*e2-norma(crossprod(op(GEO)[4],op(GEO)[11])))):> vis3:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(MEN*norma(0.25*e2-norma(crossprod(op(GEO)[4],op(GEO)[11])))):> vis4:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(MEN*norma(-0.13*e2-norma(crossprod(op(GEO)[4],op(GEO)[11])))):> vis5:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> pu1:=evalm(-0.*MEN/2*e2):> dvis1:=evalm(0.4*MEN*(op(GEO)[4])):> vis6:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):> vis:=display(vis1,vis2,vis3,vis4,vis5,vis6,colour=black):> display(pian1,pian2,vis,scaling=constrained,orientation=[169,105]);> end:Draws the planes pi_45 and pi_23 of leg ’i’> legplanesC4:=proc(i,R,hh,H,K)> localGEO,P1,P2,P3,P4,P5,pian1,pian2,n23,PPP1,PPP2,PPP3,PPP4,shf,WIDRO,WID,HEADL,MEN,pu1,vis1,vis2,vis3,vis4,axcern,seluci,raci,tttt,GRID_,GRID_2,COLOGIU,tratti,NP,thl_r,thl_z,STILE,dvis1,vis5,vis6,vis,vis20,vis21,vis22,n45:> axcern:=0.02: seluci:=0.012: raci:=0.005: tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]:COLOGIU:=white: tratti:=6: NP:=60:>> thl_r:=r4||i/35.: thl_z:=thl_r/2.5: STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> GEO:=vernum(i,R,hh,H,K):> P1||i:=evalm(r4||i*op(GEO)[1]):> P2:=evalm(r4||i*op(GEO)[2]):> P3:=evalm(r4||i*op(GEO)[3]):> P4:=evalm(r4||i*op(GEO)[6]):> P5||i:=op(GEO)[7]:> n23:=crossprod(op(GEO)[2],op(GEO)[3]):> PPP1:=[0,-0.04]: PPP2:=[0,0.14]: PPP3:=[0.16,0.14]: PPP4:=[0.16,-0.04]:> pian1:=polygonplot3d([> [op(PPP1)[1],op(PPP1)[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP2)[1],op(PPP2)[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP3)[1],op(PPP3)[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]],> [op(PPP4)[1],op(PPP4)[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]]],colour=COLOR(RGB,0.9,0.9,0.9),thickness=2):> n23:=op(GEO)[11]:> shf:=[0,0,0]: PPP1:=[0,-0.04]: PPP2:=[0,0.14]: PPP3:=[0.15,0.14]: PPP4:=[0.15,-0.04]:> pian2:=polygonplot3d([> [op(PPP1)[1]+shf[1],op(PPP1)[2]+shf[2],-(op(PPP1)[1]*op(n23)[1]+op(PPP1)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP2)[1]+shf[1],op(PPP2)[2]+shf[2],-(op(PPP2)[1]*op(n23)[1]+op(PPP2)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP3)[1]+shf[1],op(PPP3)[2]+shf[2],-(op(PPP3)[1]*op(n23)[1]+op(PPP3)[2]*op(n23)[2])/op(n23)[3]+shf[3]],> [op(PPP4)[1]+shf[1],op(PPP4)[2]+shf[2],-(op(PPP4)[1]*op(n23)[1]+op(PPP4)[2]*op(n23)[2])/op(n23)[3]+shf[3]]],style=line,colour=COLOR(RGB,0.,0.,0.),thickness=2):> WIDRO:=0.0006: WID:=7*WIDRO: HEADL:=5*WID:> pu1:=evalm([0,0,0]-0.*norma(dvis1)):> dvis1:=evalm(-0.3*norma(crossprod(op(GEO)[4],op(GEO)[11]))):> vis1:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):


142 Algorithms B: HeaveEye MAPLE mathematical mock-up library> dvis1:=evalm(-0.3*norma(crossprod(op(GEO)[4],op(GEO)[11])-0.25*op(GEO)[4])):> vis20:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(-0.3*norma(crossprod(op(GEO)[4],op(GEO)[11])-0.55*op(GEO)[4])):> vis21:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(-0.3*norma(crossprod(op(GEO)[4],op(GEO)[11])+0.25*op(GEO)[4])):> vis22:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> dvis1:=evalm(-0.26*norma(op(GEO)[4])):> pu1:=evalm(5000*op(GEO)[9]*op(GEO)[3]-0.169*norma(dvis1)):> vis2:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> pu1:=evalm(3*5000/4*op(GEO)[9]*op(GEO)[3]-0.169*norma(dvis1)):> vis3:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> pu1:=evalm(2*5000/4*op(GEO)[9]*op(GEO)[3]-0.169*norma(dvis1)):> vis4:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> pu1:=evalm(1*5000/4*op(GEO)[9]*op(GEO)[3]-0.169*norma(dvis1)):> vis5:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,white):> pu1:=evalm(0*op(GEO)[9]*op(GEO)[3]-0.169*norma(dvis1)):> vis6:=wre_arrow(evalm(pu1),evalm(dvis1),1,0.005,red):> vis:=display(vis1,vis2,vis3,vis4,vis5,vis6,vis20,vis21,vis22,colour=black):> display(pian1,pian2,vis,scaling=constrained,orientation=[156,100]);> end:Provides a careful graphical mockup of the mechanism> Kschem:=proc(R,hh,H1,H2,H3,H4,K1,K2,K3,K4,PP,BB)> local i,K,H,unaga:> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> unaga:=unagamba(i,R,hh,H,K):> leg||i:=op(unaga)[1]:> P1||i:=evalm(r4||i*unaga[2][1]):> P5||i:=op(unaga)[2][7]:> r45||i:=op(unaga)[2][8]:> od:> display(display(leg1,leg2,leg3,leg4),dispiat(op(P5||1),op(P5||2),op(P5||3),op(P5||4),PP),disbase(P11,P12,P13,P14,BB),axes=NONE,scaling=constrained);> end:Provides a careful graphical mockup of the mechanism with r5=0> Kschemdir_r5eq0:=proc(tettta1,tettta2,tettta3,tettta4,k21,k22,k23,k24,PP,BB)> local i,K,H,unaga,GEO_r5eq0:> GEO_r5eq0:=configdirgen_r5eq0(tettta1,tettta2,tettta3,tettta4,k21,k22,k23,k24):> for i from 1 <strong>to</strong> 4 do> unaga:=unagambadir_r5eq0(i,[GEO_r5eq0[1][i],GEO_r5eq0[2][i],GEO_r5eq0[3][i],GEO_r5eq0[4][i],GEO_r5eq0[4][i],GEO_r5eq0[3][i],GEO_r5eq0[5]] ):> leg||i:=op(unaga)[1]:> P1||i:=evalm(r4||i*GEO_r5eq0[1][i]):> P5||i:=op(GEO_r5eq0)[5]:> od:> display(display(leg1,leg2,leg3,leg4),dispiat(op(P5||1),op(P5||2),op(P5||3),op(P5||4),PP),disbase(P1||1,P1||2,P1||3,P1||4,BB),axes=NONE,scaling=constrained);> end:Provides all elements (joints, links, axes) of a careful graphicalmockup of the simplif version if the mechanism via direct kinematics> Kcomple<strong>to</strong>_elementi:=proc(the1,the2,the3,the4,KA,KB,HAB,KP,Hh)> local GEO,P1,P2,P3,P4,P5,l1,l2,l3,l4,l5,ax1,ax2,ax3,ax4,ax5,i,r45,rappr,platf,base,K,numero,axcern,H,LET,kp,jjj,l1CA,l1CB,l1CAB,l2CA,l2CB,ax1C,ax2CA,ax2CB,legC,axkp,P4A,P4B,ax4r,RRRR,pltf,NP,h,seluci,raci,tttt,GRID_,GRID_2,hhhh,COLOGIU,tratti,thl_r,thl_z,thl_rA,thl_zA,thl_rB,thl_zB,STILE,g1,g2,g3,g4,g5,g1C,g2CA,g2CB,lCCA,lCCB,lCAA,lCBB,lCACB,gambA,gambB,gambC,ax2A,ax2B,STILEfacciasegnata,STILEbase,divis_archi,r4A,l45A,r5A,r4B,l45B,r5B,cane:> ### axcern:=0.02:> seluci:=r4||A/12.:#0.012:> raci:=5/12*seluci:> tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]: COLOGIU:=white:> tratti:=6: NP:=20: divis_archi:=30.:> #tratti e per il tratteggio assi; NP controllo il disegno dei link 1 e 2


Algorithms B: HeaveEye MAPLE mathematical mock-up library 143> STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> STILEfacciasegnata:=STYLE(PATCHNOGRID),COLOR(RGB,1.,0.,0.):> STILEbase:=STYLE(PATCHNOGRID),COLOR(RGB,0.7,0.,0.):>> GEO:=vernumdir(the1,the2,the3,the4,KA,KB,HAB,KP,Hh):> r4A:=r4||1: l45A:=l45||1: r5A:=r5||1:> r4B:=r4||4: l45B:=l45||4: r5B:=r5||4:> P1||A:=evalm(r4A*op(GEO)[1][1]):> P1||CA:=evalm(r4A*op(GEO)[1][2]):> P2||A:=evalm(r4A*op(GEO)[2][1]):> P2||CA:=evalm(r4A*op(GEO)[2][2]):> P3||A:=evalm(r4A*op(GEO)[3][1]):> P1||B:=evalm(r4A*op(GEO)[1][4]):> P1||CB:=evalm(r4A*op(GEO)[1][3]):> P2||B:=evalm(r4A*op(GEO)[2][4]):> P2||CB:=evalm(r4A*op(GEO)[2][3]):> P3||B:=evalm(r4A*op(GEO)[3][2]):>> h:=op(GEO)[11]:> kp:=evalm(op(GEO)[4]):> P4||A:=evalm(r4A*op(GEO)[5]):> P4||B:=evalm(r4B*op(GEO)[6]):> P5||A:=evalm(op(GEO)[9]):> P5||B:=evalm(op(GEO)[10]):>> for jjj from 1 <strong>to</strong> 2 do> if(jjj=1)then i:=’A’: elif(jjj=2)then i:=’B’: fi:> thl_r:=r4||i/divis_archi: thl_z:=thl_r/2.5:> g1:=rappresentaGIUNTO(op(GEO)[1][1+3*(jjj-1)],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g2:=rappresentaGIUNTO(op(GEO)[2][1+3*(jjj-1)],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g3:=rappresentaGIUNTO(op(GEO)[3][jjj],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> if(jjj=1)then cane:=(GEO)[1][1+3*(jjj-1)],(GEO)[2][1+3*(jjj-1)]: elsecane:=(GEO)[2][1+3*(jjj-1)],(GEO)[1][1+3*(jjj-1)] fi:> l1:=rappresentaARCO(cane,[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(A||(1+3*(jjj-1))) ):> if(jjj=1)then cane:=(GEO)[2][1+3*(jjj-1)],(GEO)[3][jjj]: elsecane:=(GEO)[3][jjj],(GEO)[2][1+3*(jjj-1)] fi:> l2:=rappresentaARCO(cane,[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(B||(1+3*(jjj-1))) ):> ax1:=LINEDASH([P1||i[1]-(P1||i[1]/r4||i*seluci),P1||i[2]-(P1||i[2]/r4||i*seluci),P1||i[3]-(P1||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax2:=LINEDASH([P2||i[1]-(P2||i[1]/r4||i*seluci),P2||i[2]-(P2||i[2]/r4||i*seluci),P2||i[3]-(P2||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax3:=LINEDASH([P3||i[1]-(P3||i[1]/r4||i*seluci),P3||i[2]-(P3||i[2]/r4||i*seluci),P3||i[3]-(P3||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> l3:=rappresentaDRITTO(P3||i,P4||i,op(GEO)[7+jjj-1],op(GEO)[5+jjj-1],1.2*thl_z,1.2*thl_r,1.2*thl_r,1.2*thl_z,[STILE],[STILEfacciasegnata]):> g4:=rappresentaGIUNTO(op(GEO)[7+jjj-1],P4||i,0,raci,seluci,GRID_,GRID_2,COLOGIU):> g5:=rappresentaGIUNTO(op(GEO)[7+jjj-1],P5||i,0,raci,seluci,GRID_,GRID_2,COLOGIU):> l4:=rappresentaDRITTO(P4||i,P5||i,op(GEO)[7+jjj-1],crossprod(evalm(P5||i-P4||i),op(GEO)[7+jjj-1]),thl_r,thl_z,thl_r,thl_z,[STILE],[STILEfacciasegnata]):> gamb||(1+3*(jjj-1)):=display([l1,ax1,ax2,g1,g2]),display(l2),display([l3,l4,ax3,g3,g4,g5]):> od:> for jjj from 2 <strong>to</strong> 3 do> if(jjj=2)then i:=’A’: elif(jjj=3)then i:=’B’: fi:> thl_r:=r4||i/divis_archi: thl_z:=thl_r/2.5:> g1:=rappresentaGIUNTO(op(GEO)[1][jjj],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g2:=rappresentaGIUNTO(op(GEO)[2][jjj],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> if(jjj=3)then cane:=(GEO)[1][jjj],(GEO)[2][jjj]: else cane:=(GEO)[2][jjj],(GEO)[1][jjj] fi:> l1:=rappresentaARCO(cane,[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(A||(jjj-1)) ):> if(jjj=3)then cane:=(GEO)[2][jjj],(GEO)[3][jjj-1]: else cane:=(GEO)[3][jjj-1],(GEO)[2][jjj]fi:> l2:=rappresentaARCO(cane,[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(B||((jjj-1)+2*(jjj-2) )) ):


144 Algorithms B: HeaveEye MAPLE mathematical mock-up library> ax1:=LINEDASH([P1C||i[1]-(P1C||i[1]/r4||i*seluci),P1C||i[2]-(P1C||i[2]/r4||i*seluci),P1C||i[3]-(P1C||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax2:=LINEDASH([P2C||i[1]-(P2C||i[1]/r4||i*seluci),P2C||i[2]-(P2C||i[2]/r4||i*seluci),P2C||i[3]-(P2C||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> gamb||jjj:=display([l1,ax1,ax2,g1,g2]),display(l2):> od:> axkp:=LINEDASH([1.1*h*kp[1],1.1*h*kp[2],1.1*h*kp[3]],[0,0,0],tratti,0):> pltf:=display(rappresentaARCO(GEO[7],GEO[8],evalm(h*kp),[STILE],[STILEfacciasegnata],NP,r5||A,thl_z,0,2*PI)):> base:=display(disbase(P1||A,P1||CA,P1||CB,P1||B,[0,0,0],[STILEbase],[STILEfacciasegnata],NP,r4A-seluci)):> [gamb1,gamb2,gamb3,gamb4,base,pltf]:> end:Provides a careful graphical mockup of the mechanism> ### switches=[mA1,mA2,mAp,mB1,mB2,mBp,mC,mCA,mCB,base,pltf] array di 11 elementi [0,1]: se 0non viene visualizza<strong>to</strong> il corrispondente elemen<strong>to</strong> di geometria;m=membro L=gamba A,B,CA,CB n=1(primomembro), 2(secondo membro),p(terzo e quar<strong>to</strong> membro)> ### modificata il 30.XII 2003 ###> Kcomple<strong>to</strong>:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,switches)> local pezzi,pezziri,i:> pezzi:=Kcomple<strong>to</strong>_elementi(theA,theB,theC,KA,KB,HAB,KP,Hh):> pezziri:=NULL:> if(switches=’ALL’)then> display( pezzi ,scaling=constrained,axes=NONE):> else> for i from 1 <strong>to</strong> 11 do> if(switches[i]=1)then> pezziri:=pezziri,pezzi[i]:> fi:> od:> display( pezziri ,scaling=constrained,axes=NONE):> fi:> end:Particular representations of the mechanismPlots the kinematically equivalent layout of a leg with leg planes> simleg:=proc(R,hh,H,K,PP,BB,lunghe,fasca,retina)> local i,leg,P11,P51,r45,platf,base,unaga,altrega,k1,k2,k3,k4,k5,P41,scr1,scr2,scr3,scr4,scr5,scr6,scr,shift,shiftk4,shiftr45,shiftp45,pianoO,piano45,piani,pupaO,pupa45,intersez,grigio:> shift:=2.5:> unaga:=unagamba(1,R,hh,H,K,0):> leg:=display(unaga[1]):> P11:=evalm(r41*unaga[2][1]):> P51:=unaga[2][7]:> r45:=unaga[2][8]*norma(crossprod(unaga[2][4],e3)):> k1:=unaga[2][1]:> k2:=unaga[2][2]:> k3:=unaga[2][3]:> k4:=unaga[2][4]:> k5:=unaga[2][5]:> P41:=evalm(r41*unaga[2][6]):> for i from 2 <strong>to</strong> 4 do> altrega[i]:=vernum(i,R,hh,1,1):> P1||i:=evalm(r4||i*altrega[i][1]):> P5||i:=altrega[i][7]:> od:> scr1:=wre_arrow(evalm(r11*k1),k1,lunghe*2/3,fasca,COLORE_SCREWS):> scr2:=wre_arrow(evalm(r12*k2),k2,lunghe*2/3,fasca,COLORE_SCREWS):> scr3:=wre_arrow(evalm(r13*k3),k3,lunghe*2/3,fasca,COLORE_SCREWS):> scr4:=wre_arrow(P41-lunghe/shift*k4,k4,lunghe,fasca,COLORE_SCREWS):> scr5:=wre_arrow(P51-lunghe/shift*k5,k5,lunghe,fasca,COLORE_SCREWS):> scr6:=wre_arrow(r45-lunghe*4/1.84/shift*k4,k4,lunghe*4/2,fasca,COLORE_SCREWS):> if(retina=’nopiani’)then> scr:=scr1,scr2,scr3,scr4,scr5:


Algorithms B: HeaveEye MAPLE mathematical mock-up library 145> else> scr:=scr1,scr2,scr3,scr4,scr5,scr6:> fi:> grigio:=0.65:> shiftk4:=lunghe*(1/4+1/shift)*k4:> shiftr45:=1/6*r45:> shiftp45:=evalm(norm(shiftr45,2)*norma(P41-P51)):> if(retina=’N’)then> pupaO:=(r45+shiftk4+shiftr45),(r45-shiftk4+shiftr45),(-r53*norma(r45)-shiftk4-shiftr45),(-r53*norma(r45)+shiftk4-shiftr45):> pianoO:=polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])]> ,style=patch,colour=COLOR(RGB,grigio,grigio,grigio),thickness=2):> pupaO:=(r45+shiftk4+shiftp45),(r45-shiftk4+shiftp45),(P51-shiftk4-shiftp45),(P51+shiftk4-shiftp45):> piano45:=polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])]> ,style=patch,colour=COLOR(RGB,grigio+0.2,grigio+0.2,grigio+0.2),thickness=2):> elif(retina’nopiani’)then> pupaO:=(r45+shiftk4+shiftr45),(r45-shiftk4+shiftr45),(-r53*norma(r45)-shiftk4-shiftr45),(-r53*norma(r45)+shiftk4-shiftr45):> pianoO:=display(polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])],style=line,colour=black,thickness=2),symbol=circle,symbolsize=1,colour=COLOR(RGB,grigio,grigio,grigio))):> display([retinatura(evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4]),retina)],colour=COLOR(RGB,grigio,grigio,grigio))):> pupaO:=(r45+shiftk4+shiftp45),(r45-shiftk4+shiftp45),(P51-shiftk4-shiftp45),(P51+shiftk4-shiftp45):> piano45:=display(polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])],style=line,colour=black,thickness=2),symbol=circle,symbolsize=1,colour=COLOR(RGB,grigio,grigio,grigio))):> display([retinatura(evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4]),retina)],colour=COLOR(RGB,grigio,grigio,grigio))):> fi:> if(retina’nopiani’)then> intersez:=polygonplot3d([evalm(r45+shiftk4),evalm(r45-shiftk4)],colour=black,style=line,thickness=2):> piani:=pianoO,piano45,intersez:> fi:> platf:=dispiat(op(P5||1),op(P5||2),op(P5||3),op(P5||4),PP):> base:=disbase(P11,P1||2,P1||3,P1||4,BB):> if(retina=’nopiani’)then display(leg,platf,base,scr,axes=NONE,scaling=constrained);> else> display(piani,leg,platf,base,scr,axes=NONE,scaling=constrained);> fi:> end:Provides a mockup of the mechanism with kinematically equivalent legs> Ksimmech:=proc(R,hh,H1,H2,H3,H4,K1,K2,K3,K4,PP,BB,tipo,verso)> local axcern,seluci,raci,tttt,GRID_,GRID_2,COLOGIU,tratti,NP,divis_archi,STILE,STILEfacciasegnata,STILEbase,i,thl_r,thl_z,thl_rr,thl_zr,P45,k2,H,K,unaga,GEO,P3,r45,l3,g3,O5O,k12,MezO,CETRO,dista,k1,l4,P4:> axcern:=0.02: seluci:=0.012: raci:=0.005: tttt:=4: GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]:COLOGIU:=white: tratti:=6: NP:=60:> divis_archi:=30.:> seluci:=r4||A/12.:> raci:=5/12*seluci:> STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> STILEfacciasegnata:=STYLE(PATCHNOGRID),COLOR(RGB,1.,0.,0.):> STILEbase:=STYLE(PATCHNOGRID),COLOR(RGB,0.7,0.,0.):> for i from 1 <strong>to</strong> 4 do> thl_r:=r4||i/divis_archi: thl_z:=thl_r/2.5:> thl_rr:=thl_z: thl_zr:=1.4*thl_r:> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> unaga:=unagamba(i,R,hh,H,K,asset):> GEO:=unaga[2]:> P3:=evalm(r4||i*GEO[3]):> P45:=evalm(crossprod(op(GEO)[4],e3)*op(GEO)[8]):


146 Algorithms B: HeaveEye MAPLE mathematical mock-up library> P5||i:=GEO[7]:> r45:=GEO[8]:> l3:=rappresentaDRITTO(P3,P45,crossprod(evalm(P3-P45),op(GEO)[4]),op(GEO)[4],thl_r,thl_z,thl_z,thl_r,[STILE],[STILEfacciasegnata]):> g3:=rappresentaGIUNTO(op(GEO)[4],P45,0,raci,seluci,GRID_,GRID_2,COLOGIU):> if(tipo=’Y’)then> O5O:=evalm(hh*e3):> k12:=op(GEO)[4]:> MezO:=evalm((P45-P5||i)/2+P5||i):> CETRO:=evalm(-verso*sqrt(3.)/2.*crossprod(evalm(P45-P5||i),k12)+MezO):> dista:=norm(evalm(1.*(P45-CETRO)),2):> k1:=evalm(P45-CETRO):> k2:=evalm(P5||i-CETRO):> l4:=rappresentaARCO(k2,evalm(k1),CETRO,[STILE],[STILEfacciasegnata],NP,thl_z,thl_r,dista,angle(k1,k2)):> else> P4:=evalm(r4||i*op(GEO)[6]):> l4:=rappresentaDRITTO(P4,P5||i,op(GEO)[4],crossprod(evalm(P4-P5||i),op(GEO)[4]),thl_r,thl_z,thl_r,thl_z,[STILE],[STILEfacciasegnata]):> fi:> leg||i:=display([op(unaga)[1][1],op(unaga)[1][2],l3,g3,l4]):> od:> display(leg1,leg2,leg3,leg4,dispiat(op(P5||1),op(P5||2),op(P5||3),op(P5||4),PP),disbase(P11,P12,P13,P14,BB)):> end:Twists, wrenches, etc.Represents the constraint wrenches> intplanf:=proc(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4,lgt,lgtteste,V,lgtmom,nodispitches)> locali,platf,MSCR,a,b,aa,bb,ab,B_A,ka,kb,Pb_Pa,Pa_A,Pb_B,CEO,P12,P23,P34,P41,crop1,crop2,j,pun<strong>to</strong>,pocn12,pocn23,pocn34,pocn41,noc1,noc2,geom1,geom2,geom3,geom4,veref,tmp,ll,lll,eps,lgtlunghe;> global COLORE_W0_SEGN,COLORE_W:> lgtlunghe:=1:> eps:=0.001:> geom||1:=vernum(1,Rr,h,H1,K1):> geom||2:=vernum(2,Rr,h,H2,K2):> geom||3:=vernum(3,Rr,h,H3,K3):> geom||4:=vernum(4,Rr,h,H4,K4):> if(geom1NULL and geom2NULL and geom3NULL and geom4NULL) then> for i from 1 <strong>to</strong> 4 do> pun<strong>to</strong>:=evalm(op(geom||i)[9]*op(geom||i)[3]):> n45||i:=crossprod(geom||i[5],evalm(geom||i[7]-r4||i*geom||i[6])):> cro23||i:=crossprod(geom||i[3],geom||i[2]):> dirf||i:=norma(crossprod(n45||i,cro23||i)):> mom||i:=crossprod(pun<strong>to</strong>,dirf||i):> if(abs(dirf||i[3])>eps)then> pitch||i:=mom||i[3]/dirf||i[3]:> P_nscr||i:=evalm(crossprod(e3,[mom||i[1],mom||i[2],0])/dirf||i[3]):> tmp:=evalm(P_nscr||i+dirf||i[3]*e3/lgt):pitlab||i:=textplot3d([tmp[1],tmp[2],pitch||i/lgt,evalf(pitch||i,3)],align=RIGHT,colour=black):#c‘era tmp[3]> if(nodispitches=1)then> nscr||i:=display(wre_arrow(P_nscr||i,[0,0,pitch||i/lgt],lgtlunghe,lgtteste,COLORE_W0_SEGN),pitlab||i):> else> nscr||i:=wre_arrow(P_nscr||i,[0,0,pitch||i/lgt],lgtlunghe,lgtteste,COLORE_W0_SEGN):> fi:> ll:=evalm(-dirf||i/lgt+pun<strong>to</strong>): lll:=evalm(2/lgt*dirf||i):> l||i:=wre_arrow(ll,lll,lgtlunghe,lgtteste,COLORE_W):> ll:=evalm([0,0,0]): lll:=evalm(2/lgt*mom||i):> o||i:=wre_arrow(ll,lll,lgtlunghe,lgtteste,coral):> else> pitch||i:=’inf’:> nscr||i:=mom_arrow(evalm(mom||i),evalm(-r3||i*cro23||i/norm(cro23||i,2)),evalm(norm(cro23||i,2)/lgtmom),COLORE_W0_SEGN):


Algorithms B: HeaveEye MAPLE mathematical mock-up library 147> if(norm(mom||i,2) ll:=evalm(-dirf||i/lgt+pun<strong>to</strong>): lll:=evalm(2/lgt*dirf||i):> l||i:=wre_arrow(ll,lll,lgtlunghe,lgtteste,COLORE_W):> ll:=evalm([0,0,0]): lll:=evalm(2/lgt*mom||i):> o||i:=wre_arrow(ll,lll,lgtlunghe,lgtteste,coral):> fi:> od:> if(V=’Y’)then> display(l1,l2,l3,l4);> else> display(nscr1,nscr2,nscr3,nscr4);> fi:> else NULL; fi:> end:Represents the constraint wrenches (’public’ version of intplanf())> confScr:=proc(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4,lgt,V,lgtmom,lgtteste)> local argo,nodispitches:> nodispitches:=0:> argo:=Rr,h,H1,H2,H3,H4,K1,K2,K3,K4:> intplanf(argo,lgt,lgtteste,V,lgtmom,nodispitches):> end:Shows the RO platform motion as a twist in the platform space of the mechanism> confRO:=proc(red,fscal,lgtteste,dispitch)> local pl,wre,noRED,lgtlunghe:> global COLORE_RO:> lgtlunghe:=1:> if(red[1][1]=0 and red[1][2]=0 and red[1][3]=0)then> noRED:=evalm(norma([red[1][4],red[1][5],red[1][6]])/fscal):> wre:=mom_arrow([0,0,2.5*l451],[noRED[1],noRED[2],noRED[3]],1/fscal,COLORE_RO):> else> noRED:=evalm(norma([red[1][1],red[1][2],red[1][3]])/fscal):> wre:=wre_arrow([red[2][2],red[2][3],0],[noRED[1],noRED[2],noRED[3]],lgtlunghe,lgtteste,COLORE_RO):> fi:> if(dispitch=’Y’)then> pl:=display(wre,textplot3d([red[2][2]+noRED[1]+l451/10,red[2][3]+noRED[2]+l451/10,noRED[3]+l451/10,evalf(red[2][1],3)],align=RIGHT,colour=black)):> else> pl:=wre:> fi:> display(pl,scaling=constrained):> end:Plots the four wrenches barzeta^L for IIM-type singular configurations> ploIIM:=proc(GEO,nnn,sca,lgtteste,soglia)> ### se sca=’thepitch’, allora la altezza degli assi è il loro passo ###> local S,zp,zpp,dir,supme,lgtlunghe,limite;> global COLORE_IIM:> lgtlunghe:=1:> S:=IIM(GEO,nnn):> zpp:=zpS<strong>to</strong>P(S):> if(zpp[1]’VUOTO’)then> zp:=zpp[1]:> if(sca=’thepitch’)then> dir:=evalm(zpp[2]*norma([0,0,S[1]])):> else> dir:=evalm(sca*norma([0,0,S[1]])):> fi:> supme:=dir[3]/10.:> limite:=sqrt(zp[1]^2+zp[2]^2):> if(limite if(sca=’thepitch’)then print([zp[1],zp[2],dir[3]]); fi:> display(wre_arrow([zp[1],zp[2],zp[3]],dir,lgtlunghe,lgtteste,COLORE_IIM),scaling=constrained);> else


148 Algorithms B: HeaveEye MAPLE mathematical mock-up library> display(mom_arrow([0,0,0],evalm([S[2],S[3],S[4]]/limite),sca,COLORE_IIM),scaling=constrained);> fi:> else> print(guajo);> fi:> end:Plots the platform twist and some platform velocities> AnalVel:=proc(V1,V2,V3,V4,Rr,h,H1,H2,H3,H4,K1,K2,K3,K4,lgtteste,dispitch)> local WID,WIDRO,MAT,lll,TW,TW___,TWW,POS,eps,plo,nor,n,nn,pitch,cro,w,lgtlunghe:> global COLORE_VEL:> lgtlunghe:=1:> lll:=0.2:> eps:=1e-3:> MAT:=calma(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4):> TW___:=evalm(inverse(MAT[2])&*diag(op(MAT[1]))&*[V1,V2,V3,V4]):> TW:=evalm(TW___/norm([TW___[1],TW___[2],TW___[3]],2)):> if(abs(TW[4])>eps)then> n:=[TW[1],TW[2],TW[3]]:> nn:=innerprod(n,n):> cro:=crossprod(n,e3): ## vecteur qui represent la direction du bras ##> w:=crossprod(cro,n):> pitch:=TW[4]*innerprod(n,e3)/nn:> POS:=evalm((TW[4]*innerprod(cro,cro)/innerprod(w,w))*cro):> if(dispitch=’Y’)thenplo:=display(wre_arrow([POS[1],POS[2],h],[n[1]*lll/nn,n[2]*lll/nn,n[3]*lll/nn],lgtlunghe,lgtteste,COLORE_VEL),textplot3d([POS[1]+h/5,POS[2]+h/5,h,pitch],colour=black)):> else> plo:=wre_arrow([POS[1],POS[2],h],[n[1]*lll/nn,n[2]*lll/nn,n[3]*lll/nn],lgtlunghe,lgtteste,COLORE_VEL):> fi:> else ## pure rotation ##> n:=sqrt(TW[1]^2+TW[2]^2+TW[3]^2):> plo:=wre_arrow([0,0,h],[TW[1]/n*lll,TW[2]/n*lll,TW[3]/n*lll],lgtlunghe,lgtteste,COLORE_VEL):> fi:> display(plo);> end:Plots the platform twist and some platform velocities -- this versionplots also some end-eff. point velocities> AnalVel_:=proc(V1,V2,V3,V4,Rr,h,H1,H2,H3,H4,K1,K2,K3,K4,lgtteste)> local MAT,VeVe,Vq,Vp51,Vp52,i,H,K,modVq,modVp51,modVp52,fasca,ploC,ploQ,plo1,plo2,plo3,plo4,textp,lgtlunghe:> global COLORE_TWIST:> lgtlunghe:=1:> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> geom||i:=vernum(i,Rr,h,H,K):> od:> if(geom1NULL and geom2NULL and geom3NULL and geom4NULL) then> MAT:=calma(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4):> VeVe:=evalm(inverse(op(MAT)[2])&*diag(op(MAT[1]))&*vec<strong>to</strong>r(4,[V1,V2,V3,V4])):> Vq:=evalm(op(VeVe)[4]*e3+crossprod([op(VeVe)[1],op(VeVe)[2],op(VeVe)[3]],h*e3)):> for i from 1 <strong>to</strong> 4 doVp5||i:=evalm(op(VeVe)[4]*e3+crossprod([op(VeVe)[1],op(VeVe)[2],op(VeVe)[3]],op(geom||i)[7])):od:> modVq:=norm(Vq,2):> for i from 1 <strong>to</strong> 4 do modVp5||i:=norm(Vp5||i,2): od:> fasca:=10*max(modVq,modVp5||1,modVp5||2,modVp5||3,modVp5||4):> ploQ:=wre_arrow([0,0,h],[Vq[1]/fasca,Vq[2]/fasca,Vq[3]/fasca],lgtlunghe,lgtteste,COLORE_TWIST):> for i from 1 <strong>to</strong> 4 doplo||i:=wre_arrow([op(geom||i)[7][1],op(geom||i)[7][2],op(geom||i)[7][3]],[Vp5||i[1]/fasca,Vp5||i[2]/fasca,Vp5||i[3]/fasca],lgtlunghe,lgtteste,COLORE_TWIST):> od:


Algorithms B: HeaveEye MAPLE mathematical mock-up library 149> textp:=textplot3d([0,0,2*h,fasca],colour=black):> display(ploQ,plo||1,plo||2,plo||3,plo||4,scaling=constrained);> else NULL; fi:> end:Graphics <strong>to</strong>olsFrom $[dir3,mom1,mom2,mom3] To $[h,px,py]> screwALTApitch:=proc(v)> local pitch,P_nscr:> pitch:=v[4]/v[1]:> P_nscr:=evalm(crossprod(e3,[v[2],v[3],0])/v[1]):> [pitch,op(P_nscr)[1],op(P_nscr)[2]]:> end:From $[dir3,mom1,mom2,mom3] To $[[Ppassage_i, Ppassage_j, 0] , pitch]> zpS<strong>to</strong>P:=proc(S)> local a,n,h;> ### S e‘ in quattro soltan<strong>to</strong>; primo e secondo elemen<strong>to</strong> nulli ###> if(S[1]0)then> h:=S[4]/S[1]:> [[-S[3]/S[1],S[2]/S[1],0],h];> else [’VUOTO’,’VUOTO’]: fi:> end:Computes the twist of the redundant platform motion> redout:=proc(SCR_)> local i,n,Sred,m,nxe3,P,hP,w,SCR,SCR__,jj,a,cfin,cinf:> SCR:=matrix(4,4): SCR__:=matrix(4,4):> SCR__:=filtro(SCR_,4,4): unassign(’cinf’): cinf[1]:=0: cfin:=0:> ### Ordina la matrice delle screws per avere le infpitch ultime> ### e fa il con<strong>to</strong> delle infpitch> for i from 1 <strong>to</strong> 4 do if(SCR__[i,1]=0)then cinf[1]:=cinf[1]+1: cinf[2][cinf[1]]:=i: elsecfin:=cfin+1: cinf[3][cfin]:=i: fi: od:> if(cinf[1]0)then> for i from 1 <strong>to</strong> cfin do> for jj from 1 <strong>to</strong> 4 do SCR[i,jj]:=op(SCR__)[cinf[3][i],jj]: od:> od:> for i from cfin+1 <strong>to</strong> 4 do> for jj from 1 <strong>to</strong> 4 do SCR[i,jj]:=op(SCR__)[cinf[2][5-i],jj]: od:> od:> else SCR:=op(SCR__): fi:> ### divide i casi in ragione del numero di infpitch> if(cinf[1] if(cinf[1]=0 or cinf[1]=1)then ### tre al meno hanno passo fini<strong>to</strong>> for i from 1 <strong>to</strong> 3 do> ### normalizzazione rispet<strong>to</strong> alla componente della forza> a||i:=evalm([row(SCR,i)[2],row(SCR,i)[3],row(SCR,i)[4]]/row(SCR,i)[1]):> od:> n:=crossprod(evalm(a2-a1),evalm(a3-a1)):> m:=-innerprod(crossprod(a1,a2),a3):> elif(cinf[1]=2 or cinf[1]=3)then> a:=evalm([row(SCR,1)[2],row(SCR,1)[3],row(SCR,1)[4]]/row(SCR,1)[1]):> n:=norma(crossprod([row(SCR,3)[2],row(SCR,3)[3],row(SCR,3)[4]],[row(SCR,4)[2],row(SCR,4)[3],row(SCR,4)[4]])):> m:=-innerprod(n,a):> fi:> Sred:=evalm([n[1],n[2],n[3],0,0,m]/norm(n,2)):> nxe3:=crossprod(n,e3):> w:=crossprod(crossprod(n,e3),n):> if(w[1]0 and w[2]0 and w[3]0)then> P:=evalm(m*innerprod(nxe3,nxe3)*nxe3/innerprod(w,w)):> hP:=[m*innerprod(n,e3)/innerprod(n,n),P[1],P[2]];> else hP:=[0,0,0]: fi:> else> Sred:=evalm([0,0,0,0,0,1]):> hP:=[inf,0,0]:


150 Algorithms B: HeaveEye MAPLE mathematical mock-up library> fi:> [op(Sred),hP];> end:Computes four wrenches <strong>to</strong> test IIM-type singularity> IIM:=proc(GEO,nnn)> local n,m,nk4m;> n:=crossprod(op(GEO)[nnn],op(GEO)[3]):> m:=op(GEO)[8]: #=r45> nk4m:=innerprod(n,op(GEO)[4])/m: ###print(n,m);> [-nk4m, n[1], n[2], n[3]]:> end:Another version of IIM() - changes on running time> IIM:=proc(GEO,nnn)> local n,m,r45,k4,pos,mom,passo,t_,m_;> n:=norma(crossprod(op(GEO)[nnn],op(GEO)[3])):> k4:=op(GEO)[4]:> r45:=op(GEO)[8]:> t_ := evalf(-r45*(-n[2]*k4[1]+n[1]*k4[2])/(n[2]*k4[2]+n[1]*k4[1])):> m_ := evalf(-r45*(k4[2]^2+k4[1]^2)/(n[2]*k4[2]+n[1]*k4[1])):> passo := evalf(-r45*(k4[2]^2+k4[1]^2)/(n[2]*k4[2]+n[1]*k4[1])*n[3]):> mom:=evalm(m_*n):> pos:=evalm(r45*crossprod(k4,[0,0,1])+t_*k4):> if(m_0)then [[1/m_,mom[1]/m_,mom[2]/m_,mom[3]/m_],op(pos),passo];> else> [[1,mom[1],mom[2],mom[3]],op(pos),passo];> fi:> end:Computes the actuates wrenches that constrain the platform> Cscrews:=proc(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4)> local i,pun<strong>to</strong>,K,H,screwf5,screwf6,MA1,MA2,MA3,MA4,veref,n23,n45,mmm;> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> geom||i:=vernum(i,Rr,h,H,K):> od:> if(geom1NULL and geom2NULL and geom3NULL and geom4NULL) then> for i from 1 <strong>to</strong> 4 do> pun<strong>to</strong>:=evalm(op(geom||i)[9]*op(geom||i)[3]):> n45||i:=crossprod(geom||i[5],evalm(geom||i[7]-r4||i*geom||i[6])):> cro23||i:=crossprod(geom||i[3],geom||i[2]):> dirf||i:=norma(crossprod(n45||i,cro23||i)):> mom||i:=crossprod(pun<strong>to</strong>,dirf||i):> screwf||i:=[op(dirf||i)[1],op(dirf||i)[2],op(dirf||i)[3],op(mom||i)[1],op(mom||i)[2],op(mom||i)[3]]:> ###if(dirf||i[3]0)then pitch||i:=mom||i[3]/dirf||i[3]: else pitch||i:=’inf’: fi:###gestisce le infinita au<strong>to</strong>nomamente###> pitch||i:=mom||i[3]/dirf||i[3]:> P_nscr||i:=evalm(crossprod(e3,[mom||i[1],mom||i[2],0])/dirf||i[3]):> infoscr||i:=[op(P_nscr||i)[1],op(P_nscr||i)[2],op(P_nscr||i)[3],pitch||i]:> n45:=op(geom||i)[11]:> n23:=norma(cro23||i):> mmm:=evalm(-innerprod(op(geom||i)[3],n45)*n23):> PPP||i:=op(geom||i)[13]:> od:> screwf5:=[1,0,0,0,0,0]:> screwf6:=[0,1,0,0,0,0]:> MA1:=submatrix(matrix(6,6,[[op(screwf1)],[op(screwf2)],[op(screwf3)],[op(screwf4)],[op(screwf5)],[op(screwf6)]]),1..4,3..6):> MA2:=matrix(4,4,[op(infoscr1),op(infoscr2),op(infoscr3),op(infoscr4)]):> MA3:=submatrix(matrix(6,6,[[op(screwf1)],[op(screwf2)],[op(screwf3)],[op(screwf4)],[op(screwf5)],[op(screwf6)]]),1..6,1..6):> MA4:=matrix(4,3,[PPP1,PPP2,PPP3,PPP4]):> op(MA1),op(MA2),op(MA3),op(MA4);> else NULL: fi:


Algorithms B: HeaveEye MAPLE mathematical mock-up library 151> end:Computes the joint screws of leg nb> Ascrews:=proc(nb,Rr,h,H,K)> local i,j,pun<strong>to</strong>,cro4,cro5,scr,geom,eps;> eps:=1e-8: geom:=vernum(nb,Rr,h,H,K):> if(geomNULL) then> cro4:=crossprod(op(geom)[4],evalm(r4||nb*op(geom)[6])):> cro5:=crossprod(op(geom)[5],op(geom)[7]):> scr[1]:=matrix(1,6,[op(geom)[1][1],op(geom)[1][2],op(geom)[1][3],0,0,0]): ### $1> scr[2]:=matrix(1,6,[op(geom)[2][1],op(geom)[2][2],op(geom)[2][3],0,0,0]):> scr[3]:=matrix(1,6,[op(geom)[3][1],op(geom)[3][2],op(geom)[3][3],0,0,0]):> scr[4]:=matrix(1,6,[op(geom)[4][1],op(geom)[4][2],op(geom)[4][3],op(cro4)[1],op(cro4)[2],op(cro4)[3]]):> scr[5]:=matrix(1,6,[op(geom)[5][1],op(geom)[5][2],op(geom)[5][3],op(cro5)[1],op(cro5)[2],op(cro5)[3]]):> scr[6]:=matrix(1,6,[op(geom)[4][1],op(geom)[4][2],op(geom)[4][3],0,0,op(geom)[8]]): ### $45> for i from 2 <strong>to</strong> 5 do for j from 1 <strong>to</strong> 6 do> if(abs(scr[i][1,j]) od:od:> blockmatrix(6,1,[scr[5],scr[4],scr[3],scr[2],scr[1],scr[6]]);> else NULL: fi:> end:Computes the velocity matrices Z and Lambda> calma:=proc(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4)> local i,MAT1,MAT2,K,H:> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> geom||i:=vernum(i,Rr,h,H,K):> od:> if(geom1NULL and geom2NULL and geom3NULL and geom4NULL) then> for i from 1 <strong>to</strong> 4 do> cro23||i:=crossprod(geom||i[2],geom||i[3]):> rw||i:=cro23||i[1],cro23||i[2],cro23||i[3],-(1/geom||i[8])*innerprod(geom||i[4],cro23||i):> terd||i:=innerprod(geom||i[1],cro23||i):> od:> MAT1:=[terd1,terd2,terd3,terd4]:> MAT2:=matrix(4,4,[[rw1],[rw2],[rw3],[rw4]]):> [MAT1,op(MAT2)];> else NULL; fi:> end:Computes the Jacobian matrix J of the mechanism> JJJ:=proc(GEO)> local i,v23,fff,MM:> for i from 1 <strong>to</strong> 4 do> v23||i:=crossprod(op(GEO)[i][2],op(GEO)[i][3]):> fff||i:=evalm(-innerprod(v23||i,op(GEO)[i][4])/op(GEO)[i][5]):> od:> MM:=matrix(4,4,[[fff1,v231[1],v231[2],v231[3]],[fff2,v232[1],v232[2],v232[3]],[fff3,v233[1],v233[2],v233[3]],[fff4,v234[1],v234[2],v234[3]]]):> end:Other <strong>to</strong>olsProvides a set of key geometric elements of the mechanism that can be used<strong>to</strong> au<strong>to</strong>matically generate a ProEngineer virtual mock-up of the mechanism> puntaproE:=proc(Rr,h,H1,H2,H3,H4,K1,K2,K3,K4,nomefile)> local i,j,k,H,K,eps,matr,fil:> eps:=1e-6: matr:=matrix(20,3): fil:=fopen(nomefile,WRITE);> for i from 1 <strong>to</strong> 4 do> if(i=1) then H:=H1:K:=K1: elif(i=2) then H:=H2:K:=K2: elif(i=3) then H:=H3:K:=K3: elif(i=4)then H:=H4:K:=K4: fi:> geom||i:=vernum(i,Rr,h,H,K):> od:


152 Algorithms B: HeaveEye MAPLE mathematical mock-up library> if(geom1NULL and geom2NULL and geom3NULL and geom4NULL) then> for i from 1 <strong>to</strong> 4 do> bra||i:=matrix(5,3,[evalm(r1||i*op(geom||i)[1]),evalm(r2||i*op(geom||i)[2]),evalm(r3||i*op(geom||i)[3]),evalm(r4||i*op(geom||i)[6]),op(geom||i)[7]]):> od:> fprintf(fil,"%f %f %fn",0,0,0);> for i from 1 <strong>to</strong> 4 do> for j from 1 <strong>to</strong> 5 do> for k from 1 <strong>to</strong> 3 do> if(op(bra||i)[j,k]^2 matr[j+5*(i-1),k]:=evalf(1000*op(bra||i)[j,k]):> od:fprintf(fil,"%.14f %.14f %.14fn",op(matr)[j+5*(i-1),1],op(matr)[j+5*(i-1),2],op(matr)[j+5*(i-1),3]);od:od:> else NULL; fi:> fclose(fil);> end:


Algorithms CArmillEye MAPLE mathematical mock-uplibraryAnalysis Tools for ArmillEye> with(plot<strong>to</strong>ols):> FILE_IMAGINI:="C:/Utenti/DamapleZ/AR/":> COLORE_RO:=white:> COLORE_W0_SEGN:=cyan:> COLORE_W:=aquamarine:> COLORE_IIM:=green:> COLORE_VEL:=pink:> COLORE_TWIST:=yellow:> COLORE_SCREWS:=white:> palecyan:=COLOR(RGB,0.65,0.98,.99):> palered:=COLOR(RGB,1,107/255.,058/255.):Configuration <strong>to</strong>olsSolves the direct kinematics of the mechanism and provides all elements of the configuration> vernumdir:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local i,k2_bA,k2_bB,k2_bCA,k2_bCB,k3_bA,k3_bB,LA,NA,LB,NB,AxB,ip_b,jp_b,kp_b,AscB,k4r_bA,k4r_bB,c3A,c3B,k4_bA,k4_bB,k5r_bA,k5r_bB,h,c4B,c4A,s4B,s4A,T1__,T2__,R,VRML,n45_bA,n45_bB,c34,s34,c3,s3,c4,s4,r45,rint,Tgbeta,sethe5:> global AA,AB,HAB_:> k2_bA:=map(evalf,evalm(AA*k1_bA+SAA*cos(theA)*crossprod(e3,k1_bA)+sin(theA)*SAA*e3)):> k2_bB:=map(evalf,evalm(AB*k1_bB+SAB*cos(theB)*crossprod(e3,k1_bB)+sin(theB)*SAB*e3)):> k2_bCA:=map(evalf,evalm(ACA*k1_bC+SACA*cos(theC)*crossprod(e2,k1_bC)+sin(theC)*SACA*e2)):> k2_bCB:=map(evalf,evalm(ACB*k1_bC+SACB*cos(theC+alphaC)*crossprod(e2,k1_bC)+sin(theC+alphaC)*SACB*e2)):> k3_bA:=tetrasolver(k2_bA,k2_bCA,infABACA,supABACA,BA,BCA,KA):> k3_bB:=tetrasolver(k2_bB,k2_bCB,infABBCB,supABBCB,BB,BCB,KB):> sethe5:=sign(sin(theta5)):> AscB:=innerprod(k3_bA,k3_bB):> AxB:=crossprod(k3_bA,k3_bB):> T1__:=sqrt(AscB-cos(theta5))/( (1+AscB)*sqrt(1-cos(theta5)) ):> T2__:=sethe5 * KP * sqrt(1+cos(theta5))/( (1+AscB)*sqrt(1-cos(theta5)) ):> kp_b:=evalm(T1__*(k3_bA+k3_bB) + T2__*AxB):> s34:=sin(alpha43A):> c34:=cos(alpha43A):> k4_bA:=evalm( HAB* crossprod(k3_bA,kp_b) *sqrt(1-cos(theta5))/sqrt(1-AscB)):> k4_bB:=evalm( HAB* crossprod(k3_bB,kp_b) *sqrt(1-cos(theta5))/sqrt(1-AscB)):> c3:=sqrt(AscB-cos(theta5))/sqrt(1-cos(theta5)):> s3:=sqrt(1-c3^2):> c4:=c3*c34+ HAB*s3*s34:> s4:=s3*c34- HAB*c3*s34:> k4r_bA:=evalm( (s4*k3_bA +HAB *s34*kp_b) / s3):> k4r_bB:=evalm( (s4*k3_bB +HAB *s34*kp_b) / s3):> h:=r4A*c4 + Hh*sqrt(l45A^2 - (r4A*s4 + HAB * KP *r5A)^2):> k5r_bA:=evalm(h*kp_b - r5A *HAB * KP *(k4r_bA-kp_b*c4) / s4):> k5r_bB:=evalm(h*kp_b - r5B *HAB * KP *(k4r_bB-kp_b*c4) / s4):> ip_b:=evalm((k3_bA-k3_bB)/(2*sqrt((1-AscB)/2))):> jp_b:=evalm( (-2*T1__*AxB + T2__*(k3_bA+k3_bB)*(1-AscB)) /(2*sqrt((1-AscB)/2))):> R:=blockmatrix(1,3,[ip_b,jp_b,kp_b]): ### ip_b,jp_b,kp_b in colonne ###> VRML:=norma(evalm([ (jp_b[3]-kp_b[2]) , (kp_b[1]-ip_b[3]) , (ip_b[2]-jp_b[1]) ])):> n45_bA:=norma(crossprod(k4_bA,evalm(k5r_bA-r4A*k4r_bA))):> n45_bB:=norma(crossprod(k4_bB,evalm(k5r_bB-r4B*k4r_bB))):> Tgbeta:=(r4A*s4 + HAB * KP * r5A)/(h-r4A*c4): ### beta è l’angolo che P5-P4 forma con kp ###> r45:=h*Tgbeta - HAB * KP * r5A: ### negativo per HAB*KP=1 and Hh=-1 ; ques<strong>to</strong> compensa il153


154 Algorithms C: ArmillEye MAPLE mathematical mock-up librarycambiamen<strong>to</strong> di segno di sin(beta+psi3) ed rint vien giusta ###> rint:=r45/(s3+Tgbeta*c3):> [[evalm(k1_bA),op(k2_bA),op(k3_bA)],[evalm(k1_bB),op(k2_bB),op(k3_bB)],[evalm(k1_bC),op(k2_bCA),op(k2_bCB)],op(kp_b),op(k4r_bA),op(k4r_bB),op(k4_bA),op(k4_bB),op(k5r_bA),op(k5r_bB),h,op(R),op(ip_b),op(jp_b),op(VRML),op(n45_bA),op(n45_bB),rint,r45]:> end:Some complements <strong>to</strong> vernumdir()> vernumdirSUP:=proc(GEO)> local n23CA,n23CB,r:> n23CA:=crossprod(GEO[3][2],GEO[1][3]):> n23CB:=crossprod(GEO[3][3],GEO[2][3]):> r:=crossprod(GEO[3][1] , crossprod(n23CA,n23CB)):> [op(n23CA),op(n23CB),op(r)]:> end:Graphics <strong>to</strong>olsProvides a simplifies graphical mockup of the mechanism> configdir:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local GEO,P1,P2,P3,P4,P5,l1,l2,l3,l4,l5,ax1,ax2,ax3,ax4,ax5,i,r45,rappr,platf,base,K,numero,axcern,H,LET,kp,jjj,l1CA,l1CB,l1CAB,l2CA,l2CB,ax1C,ax2CA,ax2CB,legC,axkp,P4A,P4B,ax4r,RRRR,lll_i_,pltf,NP,h, EPS,casp,rintdisA,rintdisB,l1C:> EPS:=10^(-(Digits-4.)):> axcern:=0.02: NP:=20:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> P1||A:=evalm(r4A*op(GEO)[1][1]):> P2||A:=evalm(r4A*op(GEO)[1][2]):> P3||A:=evalm(r4A*op(GEO)[1][3]):> P1||B:=evalm(r4B*op(GEO)[2][1]):> P2||B:=evalm(r4B*op(GEO)[2][2]):> P3||B:=evalm(r4B*op(GEO)[2][3]):> P1||C:=evalm(r4A*op(GEO)[3][1]):> P2C||A:=evalm(r4A*op(GEO)[3][2]):> P2C||B:=evalm(r4B*op(GEO)[3][3]):> h:=op(GEO)[11]:> kp:=evalm(op(GEO)[4]):> P4||A:=evalm(r4A*op(GEO)[5]):> P4||B:=evalm(r4B*op(GEO)[6]):> P5||A:=evalm(op(GEO)[9]):> P5||B:=evalm(op(GEO)[10]):> for jjj from 1 <strong>to</strong> 2 do> if(jjj=1)then i:=’A’: elif(jjj=2)then i:=’B’: fi:> l1:=polygonplot3d([[P2||i[1],P2||i[2],P2||i[3]],[P1||i[1],P1||i[2],P1||i[3]]],style=line,colour=brown,thickness=3):> l2:=polygonplot3d([[P3||i[1],P3||i[2],P3||i[3]],[P2||i[1],P2||i[2],P2||i[3]]],colour=red,thickness=3):> l3:=polygonplot3d([[P4||i[1],P4||i[2],P4||i[3]],[P3||i[1],P3||i[2],P3||i[3]]],colour=red,thickness=3):> l4:=polygonplot3d([[P5||i[1],P5||i[2],P5||i[3]],[P4||i[1],P4||i[2],P4||i[3]]],colour=red,thickness=3):> ax1:=polygonplot3d([[P1||i[1],P1||i[2],P1||i[3]],[0,0,0]],colour=blue,style=line):> ax2:=polygonplot3d([[P2||i[1],P2||i[2],P2||i[3]],[0,0,0]],colour=cyan,style=line):> ax3:=polygonplot3d([[P3||i[1],P3||i[2],P3||i[3]],[0,0,0]],colour=coral,style=line):> ax4r:=polygonplot3d([[P4||i[1],P4||i[2],P4||i[3]],[0,0,0]],colour=green,style=line):> ax4:=polygonplot3d([evalm([P4||i[1],P4||i[2],P4||i[3]]+axcern*op(GEO)[7+jjj-1]),evalm([P4||i[1],P4||i[2],P4||i[3]]-axcern*op(GEO)[7+jjj-1])],colour=blue,style=line):> ax4||i:=op(GEO)[7+jjj-1]:> ax5:=polygonplot3d([evalm([P5||i[1],P5||i[2],P5||i[3]]+axcern*op(GEO)[7+jjj-1]),evalm([P5||i[1],P5||i[2],P5||i[3]]-axcern*op(GEO)[7+jjj-1])],colour=blue,style=line):> leg||i:=l1,l2,l3,l4,ax1,ax2,ax3,ax4r,ax4,ax5:> od:> #l1CA:=polygonplot3d([[P2C||A[1],P2C||A[2],P2C||A[3]],[P1||C[1],P1||C[2],P1||C[3]]],style=line,colour=green,thickness=3):> #l1CB:=polygonplot3d([[P2C||B[1],P2C||B[2],P2C||B[3]],[P1||C[1],P1||C[2],P1||C[3]]],style=line,colour=green,thickness=3):> #l1CAB:=polygonplot3d([[P2C||A[1],P2C||A[2],P2C||A[3]],[P2C||B[1],P2C||B[2],P2C||B[3]]],style=


Algorithms C: ArmillEye MAPLE mathematical mock-up library 155line,colour=green,thickness=3):> l1C:=polygonplot3d([> [P2C||A[1],P2C||A[2],P2C||A[3]],[P1||C[1],P1||C[2],P1||C[3]],[P2C||B[1],P2C||B[2],P2C||B[3]]> ],colour=green,thickness=3):> l2CA:=polygonplot3d([[P3||A[1],P3||A[2],P3||A[3]] ,[P2C||A[1],P2C||A[2],P2C||A[3]]],colour=red,thickness=3):> l2CB:=polygonplot3d([[P3||B[1],P3||B[2],P3||B[3]] ,[P2C||B[1],P2C||B[2],P2C||B[3]]],colour=red,thickness=3):> #l3:=polygonplot3d([[P4||i[1],P4||i[2],P4||i[3]],[P3||i[1],P3||i[2],P3||i[3]]],colour=red,thickness=3):> #l4:=polygonplot3d([[P5||i[1],P5||i[2],P5||i[3]],[P4[1],P4[2],P4[3]]],colour=red,thickness=3):> ax1C:=polygonplot3d([[P1||C[1],P1||C[2],P1||C[3]],[0,0,0]],colour=blue,style=line):> ax2CA:=polygonplot3d([[P2C||A[1],P2C||A[2],P2C||A[3]],[0,0,0]],colour=cyan,style=line):> ax2CB:=polygonplot3d([[P2C||B[1],P2C||B[2],P2C||B[3]],[0,0,0]],colour=cyan,style=line):> #legC:=l1CA,l1CB,l1CAB,l2CA,l2CB,ax1C,ax2CA,ax2CB:> legC:=l1C,l2CA,l2CB,ax1C,ax2CA,ax2CB:> axkp:=polygonplot3d([[h*kp[1],h*kp[2],h*kp[3]],[0,0,0]],colour=coral,style=line):> RRRR:=transpose(matrix(3,3,[op(GEO)[7],crossprod(op(GEO)[7],kp),op(kp)])):> lll_i_:=evalm(r5A*RRRR&*[cos(t),sin(t),0]+h*kp):> pltf:=spacecurve(op(lll_i_),t=0..2*PI,colour=black,numpoints=NP,thickness=3):> casp:=evalm(op(GEO)[1][3]*op(GEO)[18]):> rintdisA:=polygonplot3d([[0,0,0],[casp[1],casp[2],casp[3]]],style=line,colour=yellow,thickness=3):> casp:=evalm(op(GEO)[2][3]*op(GEO)[18]):> rintdisB:=polygonplot3d([[0,0,0],[casp[1],casp[2],casp[3]]],style=line,colour=red,thickness=3):> rappr:=legA,legB,legC,axkp,pltf, rintdisA,rintdisB:> display(rappr,axes=framed,scaling=constrained,labels=[’e_1’,’e_2’,’e_3’]);> end:Provides a graphical mockup of the base> rappresentaBASE:=proc(vet1_,vet2_,vet3_,pun<strong>to</strong>,STILE,STILEsfera,NP,r4)> local k12,k1xk12,lll_i,lll_ii,l_iA,l_iB,l_iC,l_ii,li,lii,diA,diB,diC,RRRR,ARCO,vet1,vet2,vet3,PA,PB,PC,ang12,ang23,ang31,EPS,CAL,l_iC__,l_iC_prev,i,vet11,vet22,ang,l_iC_:> EPS:=1e-4:> vet1:=norma(vet1_):vet2:=norma(vet2_):vet3:=norma(vet3_):> ang12:=angolo(vet1,vet2,vet3):if(ang12 ang23:=angolo(vet2,vet3,vet1):if(ang23 ang31:=angolo(vet3,vet1,vet2):if(ang31 if(abs(abs(ang12)-2*PI)>EPS and abs(abs(ang12)-PI)>EPS and abs(ang12)>EPS)then> k12:=norma(crossprod(vet1,vet2)):> k1xk12:=crossprod(k12,vet1):> RRRR:=transpose(matrix(3,3,[(vet1),norma(k1xk12),norma(k12)])):> lll_i:=evalm((r4)*RRRR&*[cos(t),sin(t),0]+pun<strong>to</strong>):> lll_ii:=evalm(pun<strong>to</strong>):> l_iA:=spacecurve(op(lll_i),t=0..ang12,colour=black,numpoints=NP,thickness=3):> l_ii:=spacecurve(op(lll_ii),t=0..ang12,colour=black,numpoints=NP,thickness=3):> li:=op(op(l_iA)[1])[1]:> lii:=op(op(l_ii)[1])[1]:> diA:=PLOT3D(MESH([li,lii]),op(STILE)): fi:> if(abs(abs(ang23)-2*PI)>EPS and abs(abs(ang23)-PI)>EPS and abs(ang23)>EPS)then> k12:=norma(crossprod(vet3,vet2)):> k1xk12:=crossprod(k12,vet3):> RRRR:=transpose(matrix(3,3,[(vet3),norma(k1xk12),k12])):> lll_i:=evalm((r4)*RRRR&*[cos(t),sin(t),0]+pun<strong>to</strong>):> lll_ii:=evalm(pun<strong>to</strong>):> l_iB:=spacecurve(op(lll_i),t=0..ang23,colour=black,numpoints=NP,thickness=3):> l_ii:=spacecurve(op(lll_ii),t=0..ang23,colour=black,numpoints=NP,thickness=3):> li:=op(op(l_iB)[1])[1]:> lii:=op(op(l_ii)[1])[1]:> diB:=PLOT3D(MESH([li,lii]),op(STILE)): fi:> if(abs(abs(ang31)-2*PI)>EPS and abs(abs(ang31)-PI)>EPS and abs(ang31)>EPS)then> k12:=norma(crossprod(vet3,vet1)):> k1xk12:=crossprod(k12,vet3):> RRRR:=transpose(matrix(3,3,[(vet3),norma(k1xk12),k12])):> lll_i:=evalm((r4)*RRRR&*[cos(ang31-t),sin(ang31-t),0]+pun<strong>to</strong>):> lll_ii:=evalm(pun<strong>to</strong>):> l_iC:=spacecurve(op(lll_i),t=0..ang31,colour=black,numpoints=NP,thickness=3):> l_ii:=spacecurve(op(lll_ii),t=0..ang31,colour=black,numpoints=NP,thickness=3):


156 Algorithms C: ArmillEye MAPLE mathematical mock-up library> li:=op(op(l_iC)[1])[1]:> lii:=op(op(l_ii)[1])[1]:> diC:=PLOT3D(MESH([li,lii]),op(STILE)): fi:> CAL:=NULL: l_iC__:=NULL:> l_iC_prev:=l_iC:> for i from 2 <strong>to</strong> NP do> vet11:=norma(op(op(op(l_iA)[1])[1])[i]):> vet22:=norma(op(op(op(l_iB)[1])[1])[i]):> ang:=angolo(vet11,vet22,vet2): if(ang k12:=norma(crossprod(vet11,vet22)):> k1xk12:=norma(crossprod(k12,vet11)):> RRRR:=transpose(matrix(3,3,[[op(vet11)[1],op(vet11)[2],op(vet11)[3]],[op(k1xk12)[1],op(k1xk12)[2],op(k1xk12)[3]],[op(k12)[1],op(k12)[2],op(k12)[3]]])):> lll_i:=evalm((r4)*RRRR&*[cos(t),sin(t),0]+pun<strong>to</strong>):> if(abs(ang) l_iC_:=spacecurve(op(lll_i),t=0..ang,colour=black,numpoints=NP,thickness=3):> li:=op(op(l_iC_)[1])[1]:> lii:=op(op(l_iC_prev)[1])[1]:> CAL:=CAL,PLOT3D(MESH([lii,li]),op(STILEsfera)):> l_iC_prev:=l_iC_: od:> PA:=evalm(r4*vet1+pun<strong>to</strong>):> PB:=evalm(r4*vet2+pun<strong>to</strong>):> PC:=evalm(r4*vet3+pun<strong>to</strong>):> l_iA,diA,l_iB,diB,l_iC,diC,CAL,> polygonplot3d([[PA[1],PA[2],PA[3]],[pun<strong>to</strong>[1],pun<strong>to</strong>[2],pun<strong>to</strong>[3]]],thickness=3),> polygonplot3d([[PB[1],PB[2],PB[3]],[pun<strong>to</strong>[1],pun<strong>to</strong>[2],pun<strong>to</strong>[3]]],thickness=3),> polygonplot3d([[PC[1],PC[2],PC[3]],[pun<strong>to</strong>[1],pun<strong>to</strong>[2],pun<strong>to</strong>[3]]],thickness=3):> end:Provides all elements (joints, links, axes) of a careful graphical mockup of the mechanism> Kcomple<strong>to</strong>_elementi:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local GEO,P1,P2,P3,P4,P5,l1,l2,l3,l4,l5,ax1,ax2,ax3,ax4,ax5,i,r45,rappr,platf,base,K,numero,axcern,H,LET,kp,jjj,l1CA,l1CB,l1CAB,l2CA,l2CB,ax1C,ax2CA,ax2CB,legC,axkp,P4A,P4B,ax4r,RRRR,pltf,NP,h,seluci,raci,tttt,GRID_,GRID_2,hhhh,COLOGIU,tratti,thl_r,thl_z,thl_rA,thl_zA,thl_rB,thl_zB,STILE,g1,g2,g3,g4,g5,g1C,g2CA,g2CB,lCCA,lCCB,lCAA,lCBB,lCACB,gambA,gambB,gambC,gambCA,gambCB,ax2A,ax2B,STILEfacciasegnata,STILEbase,divis_archi:> seluci:=r4||A/12.: raci:=5/12*seluci: tttt:=4: tratti:=6: NP:=20: divis_archi:=30.:> #tratti e per il tratteggio assi; NP controllo il disegno dei link 1 e 2> GRID_:=[2,11]: GRID_2:=[40,GRID_[2]]: COLOGIU:=white:> STILE:=STYLE(PATCHNOGRID),COLOR(RGB,1.,1.,1.):> STILEfacciasegnata:=STYLE(PATCHNOGRID),COLOR(RGB,1.,0.,0.):> STILEbase:=STYLE(PATCHNOGRID),COLOR(RGB,0.7,0.,0.):> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> P1||A:=evalm(r4A*op(GEO)[1][1]):> P2||A:=evalm(r4A*op(GEO)[1][2]):> P3||A:=evalm(r4A*op(GEO)[1][3]):> P1||B:=evalm(r4B*op(GEO)[2][1]):> P2||B:=evalm(r4B*op(GEO)[2][2]):> P3||B:=evalm(r4B*op(GEO)[2][3]):> P1||C:=evalm(r4A*op(GEO)[3][1]):> P2C||A:=evalm(r4A*op(GEO)[3][2]):> P2C||B:=evalm(r4B*op(GEO)[3][3]):> h:=op(GEO)[11]:> kp:=evalm(op(GEO)[4]):> P4||A:=evalm(r4A*op(GEO)[5]):> P4||B:=evalm(r4B*op(GEO)[6]):> P5||A:=evalm(op(GEO)[9]):> P5||B:=evalm(op(GEO)[10]):> for jjj from 1 <strong>to</strong> 2 do> if(jjj=1)then i:=’A’: elif(jjj=2)then i:=’B’: fi:> thl_r:=r4||i/divis_archi: thl_z:=thl_r/2.5:> g1:=rappresentaGIUNTO(op(GEO)[jjj][1],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g2:=rappresentaGIUNTO(op(GEO)[jjj][2],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> g3:=rappresentaGIUNTO(op(GEO)[jjj][3],[0,0,0],r4||i,raci,seluci,GRID_,GRID_2,COLOGIU):> l1:=rappresentaARCO((GEO)[jjj][1+(2-jjj)],(GEO)[jjj][2+(jjj-2)],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(A||i)):> l2:=rappresentaARCO((GEO)[jjj][2+(2-jjj)],(GEO)[jjj][3+(jjj-


Algorithms C: ArmillEye MAPLE mathematical mock-up library 1572)],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_r,thl_z,r4||i,arccos(B||i)):> ax1:=LINEDASH([P1||i[1]-(P1||i[1]/r4||i*seluci),P1||i[2]-(P1||i[2]/r4||i*seluci),P1||i[3]-(P1||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax2:=LINEDASH([P2||i[1]-(P2||i[1]/r4||i*seluci),P2||i[2]-(P2||i[2]/r4||i*seluci),P2||i[3]-(P2||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> ax3:=LINEDASH([P3||i[1]-(P3||i[1]/r4||i*seluci),P3||i[2]-(P3||i[2]/r4||i*seluci),P3||i[3]-(P3||i[3]/r4||i*seluci)],[0,0,0],tratti,0):> l3:=rappresentaDRITTO(P3||i,P4||i,op(GEO)[7+jjj-1],op(GEO)[5+jjj-1],1.5*thl_z,1.5*thl_r,1.5*thl_r,1.5*thl_z,[STILE],[STILEfacciasegnata]):> g4:=rappresentaGIUNTO(op(GEO)[7+jjj-1],P4||i,0,raci,seluci,GRID_,GRID_2,COLOGIU):> g5:=rappresentaGIUNTO(op(GEO)[7+jjj-1],P5||i,0,raci,seluci,GRID_,GRID_2,COLOGIU):> l4:=rappresentaDRITTO(P4||i,P5||i,op(GEO)[7+jjj-1],crossprod(evalm(P5||i-P4||i),op(GEO)[7+jjj-1]),thl_r,thl_z,thl_r,thl_z,[STILE],[STILEfacciasegnata]):> gamb||i:=display([l1,ax1,ax2,g1,g2]),display(l2),display([l3,l4,ax3,g3,g4,g5]):> od: jjj:=3: i:=C:> thl_rA:=r4A/divis_archi: thl_zA:=thl_rA/2.5:> thl_rB:=r4A/divis_archi: thl_zB:=thl_rB/2.5:> g1C:=rappresentaGIUNTO(op(GEO)[jjj][1],[0,0,0],r4||C,raci,seluci,GRID_,GRID_2,COLOGIU):> g2CA:=rappresentaGIUNTO(op(GEO)[jjj][2],[0,0,0],r4||C,raci,seluci,GRID_,GRID_2,COLOGIU):> g2CB:=rappresentaGIUNTO(op(GEO)[jjj][3],[0,0,0],r4||C,raci,seluci,GRID_,GRID_2,COLOGIU):> lCCA:=rappresentaARCO((GEO)[jjj][1],(GEO)[jjj][2],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_rA,thl_zA,r4A,arccos(ACA)):> lCCB:=rappresentaARCO((GEO)[jjj][3],(GEO)[jjj][1],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_rB,thl_zB,r4B,arccos(ACB)):> if(angle((GEO)[jjj][2],(GEO)[jjj][3]) 0) thenlCACB:=rappresentaARCO((GEO)[jjj][2],(GEO)[jjj][3],[0,0,0],[STILE],[STILE],NP,thl_rA,thl_zA,r4A,angle((GEO)[jjj][2],(GEO)[jjj][3])):> else lCACB:=NULL: fi:> lCAA:=rappresentaARCO((GEO)[jjj][2],(GEO)[1][3],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_rA,thl_zA,r4A,arccos(BCA)):> lCBB:=rappresentaARCO((GEO)[2][3],(GEO)[jjj][3],[0,0,0],[STILE],[STILEfacciasegnata],NP,thl_rB,thl_zB,r4B,arccos(BCB)):> ax1C:=LINEDASH([P1||i[1]-(P1||i[1]/r4||A*seluci),P1||i[2]-(P1||i[2]/r4||A*seluci),P1||i[3]-(P1||i[3]/r4||A*seluci)],[0,0,0],tratti,0):> i:=CA: ax2A:=LINEDASH([P2||i[1]-(P2||i[1]/r4||A*seluci),P2||i[2]-(P2||i[2]/r4||A*seluci),P2||i[3]-(P2||i[3]/r4||A*seluci)],[0,0,0],tratti,0):> i:=CB: ax2B:=LINEDASH([P2||i[1]-(P2||i[1]/r4||B*seluci),P2||i[2]-(P2||i[2]/r4||B*seluci),P2||i[3]-(P2||i[3]/r4||B*seluci)],[0,0,0],tratti,0):> axkp:=LINEDASH([1.1*h*kp[1],1.1*h*kp[2],1.1*h*kp[3]],[0,0,0],tratti,0):> gambC:=display([g1C,g2CA,g2CB,lCCA,lCCB,lCACB,ax1C,ax2A,ax2B]),display(lCAA),display(lCBB):> gambCA:=display([g1C,g2CA,g2CB,lCCA,lCCB,lCACB,ax1C,ax2A,ax2B]),display(lCAA),display(gamb||A[3]):> gambCB:=display([g1C,g2CA,g2CB,lCCA,lCCB,lCACB,ax1C,ax2A,ax2B]),display(lCBB),display(gamb||B[3]):> pltf:=display(axkp,rappresentaARCO(GEO[8],GEO[7],evalm(h*kp),[STILE],[STILEfacciasegnata],NP,r5||A,thl_z,0,2*PI)):> base:=display(rappresentaBASE(GEO[1][1],GEO[2][1],GEO[3][1],[0,0,0],[STILEbase],[STILEfacciasegnata],NP,r4||A-seluci)):> [display(gamb||A),display(gamb||B),display(gambC),display(base),display(pltf),display(gambCA),display(gambCB)];> end:Plots the kinematically equivalent layout of a leg with leg planes> simleg_AR:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,lunghe,fasca,retina)> local i,leg,P11,P51,r45,platf,base,unaga,altrega,k1,k2,k3,k4,k5,P41,scr1,scr2,scr3,scr4,scr5,scr6,scr,shift,shiftk4,shiftr45,shiftp45,pianoO,piano45,piani,pupaO,pupa45,intersez,grigio,GEO,h,kp:> shift:=2.5: grigio:=0.65:> unaga:=Kcomple<strong>to</strong>_elementi(theA,theB,theC,KA,KB,HAB,KP,Hh):> leg:=display(unaga[1]):> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> P1||A:=evalm(r4A*op(GEO)[1][1]):> P2||A:=evalm(r4A*op(GEO)[1][2]):> P3||A:=evalm(r4A*op(GEO)[1][3]):> P1||B:=evalm(r4B*op(GEO)[2][1]):> P2||B:=evalm(r4B*op(GEO)[2][2]):> P3||B:=evalm(r4B*op(GEO)[2][3]):> P1||C:=evalm(r4A*op(GEO)[3][1]):> P2C||A:=evalm(r4A*op(GEO)[3][2]):> P2C||B:=evalm(r4B*op(GEO)[3][3]):


158 Algorithms C: ArmillEye MAPLE mathematical mock-up library> h:=op(GEO)[11]:> kp:=evalm(op(GEO)[4]):> P4||A:=evalm(r4A*op(GEO)[5]):> P4||B:=evalm(r4B*op(GEO)[6]):> P5||A:=evalm(op(GEO)[9]):> P5||B:=evalm(op(GEO)[10]):> k1:=k1_bA:> k2:=op(GEO)[1][2]:> k3:=op(GEO)[1][3]:> k4:=op(GEO)[7]:> k5:=op(GEO)[7]:> r45:=op(GEO)[19]*norma(crossprod( k4 , kp )):> scr1:=wre_arrow(evalm(r4A*k1),k1,lunghe*2/3,fasca,COLORE_SCREWS):> scr2:=wre_arrow(evalm(r4A*k2),k2,lunghe*2/3,fasca,COLORE_SCREWS):> scr3:=wre_arrow(evalm(r4A*k3),k3,lunghe*2/3,fasca,COLORE_SCREWS):> scr4:=wre_arrow(P4||A-lunghe/shift*k4,k4,lunghe,fasca,COLORE_SCREWS):> scr5:=wre_arrow(P5||A-lunghe/shift*k5,k5,lunghe,fasca,COLORE_SCREWS):> scr6:=wre_arrow(r45-lunghe*4/1.84/shift*k4,k4,lunghe*4/2,fasca,COLORE_SCREWS):> if(retina=’nopiani’)then scr:=scr1,scr2,scr3,scr4,scr5:> else> scr:=scr1,scr2,scr3,scr4,scr5,scr6: fi:> shiftk4:=lunghe*(1/4+1/shift)*k4:> shiftr45:=1/6*r45:> shiftp45:=evalm(norm(shiftr45,2)*norma(P4||A-P5||A)):> if(retina=’N’)then> pupaO:=(r45+shiftk4+shiftr45),(r45-shiftk4+shiftr45),(-r53*norma(r45)-shiftk4-shiftr45),(-r53*norma(r45)+shiftk4-shiftr45):> pianoO:=polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])]> ,style=patch,colour=COLOR(RGB,grigio,grigio,grigio),thickness=2):> pupaO:=(r45+shiftk4+shiftp45),(r45-shiftk4+shiftp45),(P5||A-shiftk4-shiftp45),(P5||A+shiftk4-shiftp45):> piano45:=polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])]> ,style=patch,colour=COLOR(RGB,grigio+0.2,grigio+0.2,grigio+0.2),thickness=2):> elif(retina’nopiani’)then> pupaO:=(r45+shiftk4+shiftr45),(r45-shiftk4+shiftr45),(-r5||A*norma(r45)-shiftk4-shiftr45),(-r5||A*norma(r45)+shiftk4-shiftr45):> pianoO:=display(polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])],style=line,colour=black,thickness=2),> pointplot3d([retinatura(evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4]),retina)] ,symbol=circle,symbolsize=1,colour=COLOR(RGB,grigio,grigio,grigio))):> pupaO:=(r45+shiftk4+shiftp45),(r45-shiftk4+shiftp45),(P5||A-shiftk4-shiftp45),(P5||A+shiftk4-shiftp45):> piano45:=display(polygonplot3d([evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4])],style=line,colour=black,thickness=2),> pointplot3d([retinatura(evalm(pupaO[1]),evalm(pupaO[2]),evalm(pupaO[3]),evalm(pupaO[4]),retina)] ,symbol=circle,symbolsize=1,colour=COLOR(RGB,grigio,grigio,grigio))):> fi:> if(retina’nopiani’)then> intersez:=polygonplot3d([evalm(r45+shiftk4),evalm(r45-shiftk4)],colour=black,style=line,thickness=2):> piani:=pianoO,piano45,intersez:> display(piani,leg,unaga[4],unaga[5],scr,axes=NONE,scaling=constrained);> else display(leg,unaga[4],unaga[5],scr,axes=NONE,scaling=constrained); fi:> end:Provides a careful graphical mockup of the mechanism> ### switches=[mA1,mA2,mAp,mB1,mB2,mBp,mC,mCA,mCB,base,pltf] array di 11 elementi [0,1]: se 0non viene visualizza<strong>to</strong> il corrispondente elemen<strong>to</strong> di geometria; m=membro L=gamba A,B,CA,CBn=1(primomembro), 2(secondo membro), p(terzo e quar<strong>to</strong> membro)> Kcomple<strong>to</strong>:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,switches)> local pezzi,pezziri,i:> pezzi:=Kcomple<strong>to</strong>_elementi(theA,theB,theC,KA,KB,HAB,KP,Hh):> pezziri:=NULL:> if(switches=’ALL’)then> display( pezzi ,scaling=constrained,axes=NONE):> else> for i from 1 <strong>to</strong> 11 do


Algorithms C: ArmillEye MAPLE mathematical mock-up library 159> if(switches[i]=1)then pezziri:=pezziri,pezzi[i]: fi:> od:> display( pezziri ,scaling=constrained,axes=NONE):> fi:> end:Plots the constraint wrenches of a basis of the space W> screwsW:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,disegno)> local GEO,n45A,n45B,AmB,rint,k3intA,k3intB,n23CA,n23CB,zetaCA,zetaCB,n23Axn23B,zetaAdis,zetaBdis,dirmompiu,mompiu,ddCA,ddCB,scrCA,scrCB,lam1,lam2,zeta_dis,zeta,fi0A,fi0B,fi0C,fi0C_,fi0Adis,fi0Bdis,fi0Cdis,EPS,fasca:> EPS:=10^(-2*Digits/3.): fasca:=disegno:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> n45A:=GEO[16]: n45B:=GEO[17]: AmB:=GEO[13]: rint:=GEO[18]:> k3intA:=evalm(rint*GEO[1][3]):> k3intB:=evalm(rint*GEO[2][3]):> n23CA:=norma(crossprod(GEO[3][2],GEO[1][3])):> n23CB:=norma(crossprod(GEO[3][3],GEO[2][3])):> fi0A:=normaS([GEO[7][1],GEO[7][2],GEO[7][3],0,0,0]):> fi0B:=normaS([GEO[8][1],GEO[8][2],GEO[8][3],0,0,0]):> zetaCA:=(crossprod(n23CA,n45A)):> ddCA:=evalm(innerprod(k3intA,n45A)*n23CA):> scrCA:=[zetaCA[1],zetaCA[2],zetaCA[3],ddCA[1],ddCA[2],ddCA[3]]:> zetaCB:=(crossprod(n23CB,n45B)):> ddCB:=evalm(innerprod(k3intB,n45B)*n23CB):> scrCB:=[zetaCB[1],zetaCB[2],zetaCB[3],ddCB[1],ddCB[2],ddCB[3]]:> lam1:= innerprod(GEO[3][1],n23CB)/innerprod(k3intA,n45A):> lam2:=-innerprod(GEO[3][1],n23CA)/innerprod(k3intB,n45B):> ### asse nel 2spazio delle trasmisse dalla catena doppia CCACB and appartenente alsot<strong>to</strong>spazio (dim=1) di quelle il cui momen<strong>to</strong> è or<strong>to</strong>gonale a k_1^C> fi0C:=normaS(evalm(lam1*scrCA+lam2*scrCB)):> fi0C_:=scrTOfhpt(fi0C,EPS):> if(disegno=’N’)then> [op(fi0A),op(fi0B),op(fi0C)]> else> fi0Adis:=wre_arrow([0,0,0],[fi0A[1],fi0A[2],fi0A[3]],fasca*l45A,fasca*l45A/15.,white):> fi0Bdis:=wre_arrow([0,0,0],[fi0B[1],fi0B[2],fi0B[3]],fasca*l45A,fasca*l45A/15.,white):> fi0Cdis:=wre_arrow(fi0C_[2],fi0C_[1],fasca*l45A,fasca*l45A/15.,white):> mompiu:=mom_arrow([0,0,0],[fi0C[4],fi0C[5],fi0C[6]],fasca*0.05,green):> [fi0Adis,fi0Bdis,fi0Cdis,mompiu]; ### <strong>to</strong>l<strong>to</strong> display addi 30.XII 2003 ###> fi:> end:Plots the constraint wrenches of a basis of the space V> screwsV:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,disegno)> local GEO,n45A,n45B,AmB,rint,k3intA,k3intB,n23A,n23B,n23CA,n23CB,zetaA,zetaB,n23Axn23B,zetaAdis,zetaBdis,dirmompiu,mompiu2,ddA,ddB,scrA,scrB,lam1,lam2,zeta_dis,zeta,fiA,fiB,fiC2,fiC2_,fiAdis,fiBdis,fiCdis,CACB,LAM1,LAM2,zetaCA,zetaCB,ddCA,ddCB,scrCA,scrCB,fiC2dis,EPS,fasca,zetaCAdis,zetaCBdis:> EPS:=10^(-2*Digits/3.): fasca:=disegno:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> n45A:=GEO[16]: n45B:=GEO[17]: AmB:=GEO[13]: rint:=GEO[18]:> k3intA:=evalm(rint*GEO[1][3]):> k3intB:=evalm(rint*GEO[2][3]):> n23A:=norma(crossprod(GEO[1][2],GEO[1][3])):> n23B:=norma(crossprod(GEO[2][2],GEO[2][3])):> n23CA:=norma(crossprod(GEO[3][2],GEO[1][3])):> n23CB:=norma(crossprod(GEO[3][3],GEO[2][3])):> CACB:=innerprod(n23CA,n23CB):> zetaA:=(crossprod(n23A,n45A)):> ddA:=evalm(innerprod(k3intA,n45A)*n23A):> scrA:=[zetaA[1],zetaA[2],zetaA[3],ddA[1],ddA[2],ddA[3]]:> zetaB:=(crossprod(n23B,n45B)):> ddB:=evalm(innerprod(k3intB,n45B)*n23B):> scrB:=[zetaB[1],zetaB[2],zetaB[3],ddB[1],ddB[2],ddB[3]]:> zetaCA:=(crossprod(n23CA,n45A)):> ddCA:=evalm(innerprod(k3intA,n45A)*n23CA):> scrCA:=[zetaCA[1],zetaCA[2],zetaCA[3],ddCA[1],ddCA[2],ddCA[3]]:


160 Algorithms C: ArmillEye MAPLE mathematical mock-up library> zetaCB:=(crossprod(n23CB,n45B)):> ddCB:=evalm(innerprod(k3intB,n45B)*n23CB):> scrCB:=[zetaCB[1],zetaCB[2],zetaCB[3],ddCB[1],ddCB[2],ddCB[3]]:> lam1:= innerprod(GEO[3][1],n23CB)/innerprod(k3intA,n45A):> lam2:=-innerprod(GEO[3][1],n23CA)/innerprod(k3intB,n45B):> fiC2:=normaS(evalm(lam1*scrCA-lam2*scrCB)):> fiC2_:=scrTOfhpt(fiC2,EPS):> if(disegno=’N’)then> [(normaS(scrA)),normaS(scrB),op(fiC2) , normaS(scrCA)]> else> zetaAdis:=wre_arrow(k3intA,zetaA,fasca*l45A,fasca*l45A/15.,palered):> zetaBdis:=wre_arrow(k3intB,zetaB,fasca*l45A,fasca*l45A/15.,palered):> zetaCAdis:=wre_arrow(k3intA,zetaCA,fasca*l45A,fasca*l45A/15.,palered):> zetaCBdis:=wre_arrow(k3intB,zetaCB,fasca*l45A,fasca*l45A/15.,palered):> fiC2dis:=wre_arrow(fiC2_[2],fiC2_[1],fasca*l45A,fasca*l45A/15.,cyan):> mompiu2:=mom_arrow([0,0,0],[fiC2[4],fiC2[5],fiC2[6]],fasca*0.05,green):> [zetaAdis,zetaBdis,fiC2dis,mompiu2,zetaCAdis,zetaCBdis]; ### <strong>to</strong>l<strong>to</strong> display addi 30.XII 2003> fi:> end:Change of cartesian reference frame for the components of a screw S> scrCRef:=proc(R,S)> local R_,B1,B2:> B1:=blockmatrix(1,2,[transpose(R),[[0,0,0],[0,0,0],[0,0,0]]]);> B2:=blockmatrix(1,2,[[[0,0,0],[0,0,0],[0,0,0]],transpose(R)]);> R_:=blockmatrix(2,1,[B1,B2]);> evalm(R_ &* S):> end:Flips the first three components with the second three components> invertS:=proc(S)> [S[4],S[5],S[6],S[1],S[2],S[3]]:> end:Change of screw reference frame for the components of a screw S - from standard <strong>to</strong> minimal> scrCbasis:=proc(conf,S_,type)> local S,c3,c4,c5,c6,fiC,a:> if(type=’T’)then S:=invertS(S_) else S:=S_ fi:> #fiC:=screwsW(op(conf),’N’)[3]: ### base frame ###> fiC:=scrCRef(vernumdir(op(conf))[12],screwsW(op(conf),’N’)[3]): ### end-eff frame ###> a:=evalm([0,0,fiC[6]]/fiC[3]):> c3:= 1/2*(a[3]*S[3]+S[6])/a[3]:> c4:=-1/2*(a[1]*a[3]*S[3]+a[1]*S[6]-2*S[4]*a[3])/a[3]:> c5:=-1/2*(a[2]*a[3]*S[3]+a[2]*S[6]-2*S[5]*a[3])/a[3]:> c6:=-1/2*(-a[3]*S[3]+S[6])/a[3]:> if(type=’T’)then invertS([0,0 , c3 , c4 , c5 , c6]) else> [0 , 0 , c3 , c4 , c5 , c6] fi:> end:Provides in the actual configuration a basis such that the first three components of the endeffec<strong>to</strong>rtwist in this basis are null for every actuation velocities> wreBasis:=proc(conf)> local fiC,a,noaa:> fiC:=scrCRef(vernumdir(op(conf))[12],screwsW(op(conf),’N’)[3]): ### end-eff frame ###> a:=evalm([fiC[3],fiC[4],fiC[5],fiC[6]] / fiC[3]):> noaa:=norm([a[1],a[4]],2):> inverse(matrix(6,6,[[1,0,0,0,0,0],[0,1,0,0,0,0],[0,0,a[1],a[2],a[3],a[4]],[0,0,0,1,0,0],[0,0,0,0,1,0],[0,0,a[1],0,0,-a[4]]])):> end:Change of screw reference frame for the components of a screw S - from standard <strong>to</strong> minimal> twiTOwreBasis:=proc(conf,S,type)> local c,i,B:> B:=inverse(wreBasis(conf)):> if(type=’T’)then invertS(evalm(B &* invertS(S))) else evalm(B &* S) fi:> end:Auxiliar function


Algorithms C: ArmillEye MAPLE mathematical mock-up library 161> giveBmin:=proc(conf)> local GEO,T1,T2,T3:> GEO:=vernumdir(op(conf)):> T1:=innerprod(GEO[1][1] , crossprod(GEO[1][2],GEO[1][3])):> T2:=innerprod(GEO[2][1] , crossprod(GEO[2][2],GEO[2][3])):> T3:=innerprod(GEO[3][1] , crossprod(GEO[3][2],GEO[1][3])):> matrix(3,3,[[T1,0,0],[0,T2,0],[0,0,T3]]):> end:Provides the velocity matrices Z and Lambda in a frame rotated by R from the base frame> calmaR:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,R)> local GEO,MAT1,MAT2,cro23A,cro23B,cro23CA,cro23CB,rwA,rwB,rwCA,rwCB,terdA,terdB,terdCA,terdCB,terdC,RRR:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> RRR:=evalm(R &* GEO[12]):> cro23A:=evalm(RRR&*(crossprod(GEO[1][2],GEO[1][3]))):> rwA:=cro23A[1],cro23A[2],cro23A[3], +(1/GEO[19])*innerprod(evalm(RRR&*GEO[7]),cro23A):> terdA:=innerprod(evalm(RRR&*GEO[1][1]),cro23A):> cro23B:=evalm(RRR&*(crossprod(GEO[2][2],GEO[2][3]))):> rwB:=cro23B[1],cro23B[2],cro23B[3], +(1/GEO[19])*innerprod(evalm(RRR&*GEO[8]),cro23B):> terdB:=innerprod(evalm(RRR&*GEO[2][1]),cro23B):> cro23CA:=evalm(RRR&*(crossprod(GEO[3][2],GEO[1][3]))):> rwCA:=cro23CA[1],cro23CA[2],cro23CA[3], +(1/GEO[19])*innerprod(evalm(RRR&*GEO[7]),cro23CA):> terdCA:=innerprod(evalm(RRR&*GEO[3][1]),cro23CA):> cro23CB:=evalm(RRR&*(crossprod(GEO[3][3],GEO[2][3]))):> rwCB:=cro23CB[1],cro23CB[2],cro23CB[3], +(1/GEO[19])*innerprod(evalm(RRR&*GEO[8]),cro23CB):> terdCB:=innerprod(evalm(RRR&*GEO[3][1]),cro23CB):> MAT1:=matrix(4,3,[[terdA,0,0],[0,terdB,0],[0,0,terdCA],[0,0,terdCB]]):> MAT2:=matrix(4,4,[[rwA],[rwB],[rwCA],[rwCB]]):> [op(MAT1),op(MAT2),RRR];> end:Provides the Jacobian matrix J <strong>to</strong> be used <strong>to</strong> compute the end-effec<strong>to</strong>r twist in areference frame rotated by R from the base frame (since it uses vec<strong>to</strong>rs n_23^Lexpressed in the base frame and multiplies by R the result)> JmobilityR:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh,R)> local MAT:> MAT:=calmaR(theA,theB,theC,KA,KB,HAB,KP,Hh,R):> evalm(inverse(MAT[2])&*MAT[1]):> end:Provides the extended Jacobian> Jesteso:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local V,W,R,R_,B1,B2:> V:=screwsV(theA,theB,theC,KA,KB,HAB,KP,Hh,N):> W:=screwsW(theA,theB,theC,KA,KB,HAB,KP,Hh,N):> R:=vernumdir(confo)[12]:> B1:=blockmatrix(1,2,[transpose(R),[[0,0,0],[0,0,0],[0,0,0]]]);> B2:=blockmatrix(1,2,[[[0,0,0],[0,0,0],[0,0,0]],transpose(R)]);> R_:=blockmatrix(2,1,[B1,B2]);> [evalm(R_ &* blockmatrix(1,6,[op(W),op(V)])),evalm(blockmatrix(1,6,[op(W),op(V)]))]:> end:Provides the velocity matrices Z and Lambda in the base reference frame> calma:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local GEO,MAT1,MAT2,cro23A,cro23B,cro23CA,cro23CB,rwA,rwB,rwCA,rwCB,terdA,terdB,terdCA,terdCB,terdC:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> cro23A:=(crossprod(GEO[1][2],GEO[1][3])):> rwA:=cro23A[1],cro23A[2],cro23A[3], +(1/GEO[19])*innerprod(GEO[7],cro23A):> terdA:=innerprod(GEO[1][1],cro23A):> cro23B:=(crossprod(GEO[2][2],GEO[2][3])):> rwB:=cro23B[1],cro23B[2],cro23B[3], +(1/GEO[19])*innerprod(GEO[8],cro23B):> terdB:=innerprod(GEO[2][1],cro23B):> cro23CA:=(crossprod(GEO[3][2],GEO[1][3])):> rwCA:=cro23CA[1],cro23CA[2],cro23CA[3], +(1/GEO[19])*innerprod(GEO[7],cro23CA):> terdCA:=innerprod(GEO[3][1],cro23CA):> cro23CB:=(crossprod(GEO[3][3],GEO[2][3])):


162 Algorithms C: ArmillEye MAPLE mathematical mock-up library> rwCB:=cro23CB[1],cro23CB[2],cro23CB[3], +(1/GEO[19])*innerprod(GEO[8],cro23CB):> terdCB:=innerprod(GEO[3][1],cro23CB):> MAT1:=matrix(4,3,[[terdA,0,0],[0,terdB,0],[0,0,terdCA],[0,0,terdCB]]):> MAT2:=matrix(4,4,[[rwA],[rwB],[rwCA],[rwCB]]):> [op(MAT1),op(MAT2),GEO[12]];> end:Provides the Jacobian matrix J <strong>to</strong> be used <strong>to</strong> compute the end-effec<strong>to</strong>r twist in the basereference frame> Jmobility:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local MAT:> MAT:=calma(theA,theB,theC,KA,KB,HAB,KP,Hh):> evalm(inverse(MAT[2])&*MAT[1]):> end:Velocity analysis function> AnalVel:=proc(V1,V2,V3,theA,theB,theC,KA,KB,HAB,KP,Hh,dati)> local MAT,lll,TW,veP,pop,omega,omega_vz,POS,eps,lgtlunghe,R,POSb,COLORE_VEL,TW_b_rot,TW_b_tra,TW_b,J ,TW_p,hpa,h,GEO,vz,veO:> COLORE_VEL:=yellow:> lll:=0.2: eps:=1e-7:> J:=Jmobility(theA,theB,theC,KA,KB,HAB,KP,Hh):> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> omega_vz:=evalm(J&*[V1,V2,V3]):> omega:=[omega_vz[1],omega_vz[2],omega_vz[3]]:> vz:=evalm(omega_vz[4]*GEO[4]):> TW:=[omega[1],omega[2],omega[3],vz[1],vz[2],vz[3]]:> hpa:=scrTOfhpt(TW,10^(-2*Digits/3.));> veP:=evalm( crossprod(omega,evalm(GEO[4]*GEO[11]-hpa[2])) + hpa[3]*omega ): ### velocità delpun<strong>to</strong> P ###> veO:=evalm( crossprod(omega,evalm(-hpa[2])) + hpa[3]*omega ): ### velocità del pun<strong>to</strong> O ###> print(hpa[3]);> if(dati=’N’)then> display(> wre_arrow(hpa[2],norma(evalm(omega*lll)),l45A,l45A/12,COLORE_VEL),> wre_arrow(evalm(GEO[4]*GEO[11]),norma(veP),l45A,l45A/12,coral),> wre_arrow([0,0,0],norma(veO),l45A,l45A/12,green)):> else [TW,hpa,op(veP)]; fi:> end:Computes and represents the joint screws> jointScrews:=proc(theA,theB,theC,KA,KB,HAB,KP,Hh)> local GEO,S1A,S1B,S2A,S2B,S3A,S3B,S4A,S4B,S5A,S5B,mo4A,mo4B,mo5A,mo5B,S1C,S2CA,S2CB:> GEO:=vernumdir(theA,theB,theC,KA,KB,HAB,KP,Hh):> S1A:=[GEO[1][1][1],GEO[1][1][2],GEO[1][1][3],0,0,0]:> S2A:=[GEO[1][2][1],GEO[1][2][2],GEO[1][2][3],0,0,0]:> S3A:=[GEO[1][3][1],GEO[1][3][2],GEO[1][3][3],0,0,0]:> mo4A:=crossprod(evalm(r4A*GEO[5]),GEO[7]):> S4A:=[GEO[7][1],GEO[7][2],GEO[7][3],mo4A[1],mo4A[2],mo4A[3]]:> mo5A:=crossprod(GEO[9],GEO[7]):> S5A:=[GEO[7][1],GEO[7][2],GEO[7][3],mo5A[1],mo5A[2],mo5A[3]]:> S1B:=[GEO[2][1][1],GEO[2][1][2],GEO[2][1][3],0,0,0]:> S2B:=[GEO[2][2][1],GEO[2][2][2],GEO[2][2][3],0,0,0]:> S3B:=[GEO[2][3][1],GEO[2][3][2],GEO[2][3][3],0,0,0]:> mo4B:=crossprod(evalm(r4B*GEO[6]),GEO[8]):> S4B:=[GEO[8][1],GEO[8][2],GEO[8][3],mo4B[1],mo4B[2],mo4B[3]]:> mo5B:=crossprod(GEO[10],GEO[8]):> S5B:=[GEO[8][1],GEO[8][2],GEO[8][3],mo5B[1],mo5B[2],mo5B[3]]:> S1C:=[GEO[3][1][1],GEO[3][1][2],GEO[3][1][3],0,0,0]:> S2CA:=[GEO[3][2][1],GEO[3][2][2],GEO[3][2][3],0,0,0]:> S2CB:=[GEO[3][3][1],GEO[3][3][2],GEO[3][3][3],0,0,0]:> [[S1A,S2A,S3A,S4A,S5A],[S1B,S2B,S3B,S4B,S5B],[S1C,S2CA,S2CB]]:> end:


Algorithms DMAPLE tensor algebra library> restart:> with(linalg):Warning, the protected names norm and tracehave been redefined and unprotectedPercorso Base Dati> BASE_DATI_FILE_GEOMETRIA_SERVIZIO_GEOM:="Y:/TESI/":> #BASE_DATI_FILE_GEOMETRIA_SERVIZIO_GEOM:="F:/LAVAL/ArchivioZ/dot<strong>to</strong>ra<strong>to</strong>/TESI/":> a:=array(1..3,[a1(x,y,z),a2(x,y,z),a3(x,y,z)]):> b:=array(1..3,[b1(x,y,z),b2(x,y,z),b3(x,y,z)]):> M:=matrix(3,3,[[M11(x,y,z),M12(x,y,z),M13(x,y,z)],[M21(x,y,z),M22(x,y,z),M23(x,y,z)],[M31(x,y,z),M32(x,y,z),M33(x,y,z)]]):> C:=matrix(3,3,[[C11(x,y,z),C12(x,y,z),C13(x,y,z)],[C21(x,y,z),C22(x,y,z),C23(x,y,z)],[C31(x,y,z),C32(x,y,z),C33(x,y,z)]]):> N:=matrix(3,3,[[N11(x,y,z),N12(x,y,z),N13(x,y,z)],[N21(x,y,z),N22(x,y,z),N23(x,y,z)],[N31(x,y,z),N32(x,y,z),N33(x,y,z)]]):> P:=matrix(3,3,[[P11(x,y,z),P12(x,y,z),P13(x,y,z)],[P21(x,y,z),P22(x,y,z),P23(x,y,z)],[P31(x,y,z),P32(x,y,z),P33(x,y,z)]]):> T:=array(1..3,1..3,1..3):New definition of the matrix norm, without abs> normM:=proc(M)> sqrt(norm(M,frobenius));> end:Stenografia per la trasposizione di matrice> T:=proc(MAT)> transpose(MAT);> end:Matrice identicaII:=matrix(3,3,[[1,0,0],[0,1,0],[0,0,1]]):Matrice unitaria> III:=matrix(3,3,1):Matrice nulla> OO:=matrix(3,3,0):Tensore di Ricci in proprietà: 1> propr:=1:> Ricci:=array(1..3,1..3,1..3):> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 dofor k from 1 <strong>to</strong> 3 do Ricci[i,j,k]:=0: od:od: od:> Ricci[1,2,3]:=propr: Ricci[2,3,1]:=propr:Ricci[3,1,2]:=propr:> Ricci[1,3,2]:=-propr:Ricci[2,1,3]:=-propr: Ricci[3,2,1]:=-propr:Derivata D(scalare) / D(vet<strong>to</strong>re)> diff_01:=proc(s,b,ib)> local i, v:> v:=array(1..ib):> for i from 1 <strong>to</strong> ib do> v[i]:=diff(s,b[i]):> od:> op(v);> end:Derivata D(vet<strong>to</strong>re) / D(vet<strong>to</strong>re)> diff_11:=proc(A,ia,B,ib)> local i,j, M:> M:=matrix(ia,ib):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> M[i,j]:=diff(A[i],B[j]):> od: od:> op(M);> end:Derivata D(Matrice) / D(vet<strong>to</strong>re)> diff_21:=proc(A,ia,ja,B,ib)> local i,j,k, T;> T:=array(1..ia,1..ja,1..ib):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ja do> for k from 1 <strong>to</strong> ib do> T[i,j,k]:=diff(A[i,j],B[k]):> od: od: od:> op(T);> end:Derivata D(vet<strong>to</strong>re) / D(Matrice)> diff_12:=proc(A,ia,B,ib,jb)> local i,j,k, T;> T:=array(1..ia,1..ib,1..jb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> for k from 1 <strong>to</strong> jb do> T[i,j,k]:=diff(A[i],B[j,k]):> od: od: od:> op(T);> end:Matrice skew di vet<strong>to</strong>re> skew:=proc(a)> ### matrix(3,3,[[0,a[3],-a[2]],[-a[3],0,a[1]],[a[2],-a[1],0]]); ### vecchia> matrix(3,3,[[0,-a[3],a[2]],[a[3],0,-a[1]],[-a[2],a[1],0]]);> end:Prodotti e composizioni163


164 Algorithms D: MAPLE tensor algebra libraryComposizionisc-M -> M[ib P]> comp_01:=proc(sc,B,ib)> local i, v;> for i from 1 <strong>to</strong> ib do> v[i]:=sc*B[i]:> od:> op(v);> end:sc-M -> M[(ib*jb) P]> comp_02:=proc(sc,B,ib,jb)> local i,j, M;> M:=matrix(ib,jb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> M[i,j]:=sc*B[i,j]:> od: od:> op(M);> end:sc-T -> T[(ib*jb*kb) P]> comp_03:=proc(sc,B,ib,jb,kb)> local i,j,k, T;> T:=array(1..ib,1..jb,1..kb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do> T[i,j,k]:=sc*B[i,j,k]:> od: od: od:> op(T);> end:v .. v -> sc[ia P + (ia-1) S]> comp_11:=proc(A,B,ia)> local i, sc;> sc:=sum(A[i]*B[i],i=1..ia):> sc;> end:M-v -> v || opera<strong>to</strong>ri nominati:M .1. v per n=1 e M .2. v per n=2n=1 -> [ja*(ia P + (ia-1) S)]n=2 -> [ia*(ja P + (ja-1) S)]> comp_12:=proc(A,ia,ja,n,B,ib)> local i,p, v;> if(n=1) then v:=array(1..ja):> for i from 1 <strong>to</strong> ja dov[i]:=sum(A[p,i]*B[p],p=1..ia): od: fi:> if(n=2) then v:=array(1..ia):> for i from 1 <strong>to</strong> ia dov[i]:=sum(A[i,p]*B[p],p=1..ja): od: fi:> op(v);> end:T-v -> M || opera<strong>to</strong>ri nominati:T .1. v per n=1 e T .2. v per n=2e T .3. v per n=3n=1 -> [ja*ka*(ia P + (ia-1) S)]n=2 -> [ia*ka*(ja P + (ja-1) S)]n=3 -> [ia*ja*(ka P + (ka-1) S)]> comp_13:=proc(A,ia,ja,ka,n,B,ib)> local i,j,k, M;> if(n=1) then M:=matrix(ja,ka):> for j from 1 <strong>to</strong> ja do> for k from 1 <strong>to</strong> ka do>M[j,k]:=sum(A[p,j,k]*B[p],p=1..ia): od: od:fi:>> if(n=2) then M:=matrix(ia,ka):> for i from 1 <strong>to</strong> ia do> for k from 1 <strong>to</strong> ka do>M[i,k]:=sum(A[i,p,k]*B[p],p=1..ja): od: od:fi:>> if(n=3) then M:=matrix(ia,ja):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ja do>M[i,j]:=sum(A[i,j,p]*B[p],p=1..ka): od: od:fi:> op(M);> end:M .. M -> Mm=1 n=1 -> [ja*jb*(ia P + (ia-1) S)]m=1 n=2 -> [ja*ib*(ia P + (ia-1) S)]m=2 n=1 -> [ia*jb*(ja P + (ja-1) S)]m=2 n=2 -> [ia*ib*(ja P + (ja-1) S)]> comp_22:=proc(A,ia,ja,m,B,ib,jb,n)> local i,j, M;> if(m=2 and n=1) then> if(ja=ib) then> M:=matrix(ia,jb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> jb do> M[i,j]:=sum(A[i,p]*B[p,j],p=1..ja):> od: od:> fi:> elif(m=1 and n=1) then> if(ia=ib) then> M:=matrix(ja,jb):> for i from 1 <strong>to</strong> ja do> for j from 1 <strong>to</strong> jb do> # M[j,i]:=sum(A[p,i]*B[p,j],p=1..ia):> M[i,j]:=sum(A[p,i]*B[p,j],p=1..ia):#MODIFICATO 13-VI-2002> od: od:> fi:> elif(m=2 and n=2) then> if(ja=jb) then> M:=matrix(ia,ib):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> M[i,j]:=sum(A[i,p]*B[j,p],p=1..ja):> od: od:> fi:> elif(m=1 and n=2) then> if(ia=jb) then> M:=matrix(ja,ib):> for i from 1 <strong>to</strong> ja do> for j from 1 <strong>to</strong> ib do> M[i,j]:=sum(A[p,i]*B[j,p],p=1..ia):> od: od:> fi:> fi:> op(M);


Algorithms D: MAPLE tensor algebra library 165> end:T-M -> T || opera<strong>to</strong>ri nominati:T .1. M per n=1 e T .2. M per n=2e T .3. M per n=3m=1 n=1 -> [ja*jb*kb*(ib P + (ib-1) S)]m=1 n=2 -> [ib*kb*ja*(jb P + (jb-1) S)]m=1 n=3 -> [ib*jb*ja*(kb P + (kb-1) S)]m=2 n=1 -> [ia*jb*kb*(ib P + (ib-1) S)]m=2 n=2 -> [ia*ib*kb*(jb P + (jb-1) S)]m=2 n=3 -> [ia*ib*jb*(ka P + (ka-1) S)]m=12 -> [kb*( ja*(ia P + (ia-1) S) +(ja-1) S )]> comp_23:=proc(A,ia,ja,m,B,ib,jb,kb,n)> local i,j,k, T;> if(m=1) then> if(n=1) thenT:=array(1..jb,1..kb,1..ja):> for i from 1 <strong>to</strong> jb do> for j from 1 <strong>to</strong> kb do> for k from 1 <strong>to</strong> ja do>T[k,i,j]:=sum(A[p,k]*B[p,i,j],p=1..ib): od:od: od: fi:>> if(n=2) thenT:=array(1..ib,1..ja,1..kb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> kb do> for k from 1 <strong>to</strong> ja do>T[i,k,j]:=sum(A[p,k]*B[i,p,j],p=1..jb): od:od: od: fi:>> if(n=3) thenT:=array(1..ib,1..jb,1..ja):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> ja do>T[i,j,k]:=sum(A[p,k]*B[i,j,p],p=1..kb): od:od: od: fi:> elif(m=2) then> if(n=1) thenT:=array(1..ia,1..jb,1..kb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do>T[i,j,k]:=sum(A[i,p]*B[p,j,k],p=1..ib): od:od: od: fi:>> if(n=2) thenT:=array(1..ia,1..ib,1..kb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> for k from 1 <strong>to</strong> kb do>T[j,i,k]:=sum(A[i,p]*B[j,p,k],p=1..jb): od:od: od: fi:>> if(n=3) thenT:=array(1..ia,1..ib,1..jb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> for k from 1 <strong>to</strong> jb do>T[j,k,i]:=sum(A[i,p]*B[j,k,p],p=1..kb): od:od: od: fi:> fi:> if(m=12 and n=12) then> T:=array(1..kb):> for i from 1 <strong>to</strong> kb do>T[i]:=sum(sum(A[p,q]*B[p,q,i],p=1..ia),q=1..ja): od: fi:> op(T);> end:T2-T4 -> T2 temporaneam=12 n=34 -> [ib*jb*( hb*(kb P + (kb-1)S) + (hb-1) S )]> comp_24:=proc(A,ia,ja,m,B,ib,jb,kb,hb,n)> local i,j,h,r,s, M;> if(m=12 and n=34) thenM:=array(1..ib,1..jb):> for i from 1 <strong>to</strong>ib do> for j from 1 <strong>to</strong>jb do>M[i,j]:=sum(sum(B[i,j,s,r]*A[s,r],s=1..kb),r=1..hb): od: od: fi:> op(M);> end:T3-T3 -> Tn temporaneam=23 n=12 -> [ia*kb*( ka*(ja P + (ja-1)S) + (ka-1) S )]m=3 n=1 -> [ia*ja*jb*kb*(ka P + (ka-1) S)]> comp_33:=proc(A,ia,ja,ka,m,B,ib,jb,kb,n)> local i,j,k,h,r,s, M;> if(m=23 and n=12) thenM:=array(1..ia,1..kb):> for i from 1 <strong>to</strong>ia do> for j from 1 <strong>to</strong>kb do>M[i,j]:=sum(sum(A[i,s,r]*B[s,r,j],s=1..ja),r=1..ka): od: od: fi:>> if(m=3 and n=1) thenM:=array(1..ia,1..ja,1..jb,1..kb):> for i from 1 <strong>to</strong>ia do> for j from 1 <strong>to</strong>ja do> for k from 1 <strong>to</strong>jb do> for h from 1 <strong>to</strong>kb do>M[i,j,k,h]:=sum(A[i,j,s]*B[s,k,h],s=1..ka):od: od: od: od: fi:> op(M);> end:T3-T4 -> Tn temporaneam=12 n=34 -> [ib*jb*ka*( hb*(kb P + (kb-1) S) + (hb-1) S )]>comp_34:=proc(A,ia,ja,ka,m,B,ib,jb,kb,hb,n)> local i,j,k,h,r,s, M;> if(m=12 and n=34) then


166 Algorithms D: MAPLE tensor algebra libraryM:=array(1..ib,1..jb,1..ka):> for i from 1 <strong>to</strong>ib do> for j from 1 <strong>to</strong>jb do> for k from 1 <strong>to</strong>ka do>M[i,j,k]:=sum(sum(B[i,j,s,r]*A[s,r,k],s=1..kb),r=1..hb): od: od: od: fi:> op(M);> end:Prodottiv-v -> M[ia*ib P]> prod_11:=proc(A,ia,B,ib)> local i,j, M:> M:=matrix(ia,ib):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ib do> M[i,j]:=A[i]*B[j]:> od: od:> op(M);> end:M-v -> Tn=1 -> [ia*ja*ib P]n=2 -> [ia*ib*ja P]n=3 -> [ia*ja*ib P]> prod_21:=proc(A,ia,ja,B,ib,n)> local i,j,k, T:> if(n=1) then>T:=array(1..ib,1..ia,1..ja):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ib do>T[k,i,j]:=A[i,j]*B[k]: od: od: od: fi:> if(n=2) then>T:=array(1..ia,1..ib,1..ja):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ib do>T[i,k,j]:=A[i,j]*B[k]: od: od: od: fi:> if(n=3) then>T:=array(1..ia,1..ja,1..ib):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ib do>T[i,j,k]:=A[i,j]*B[k]: od: od: od: fi:> op(T);> end:T3-v -> T4n=1 -> [ib*ia*ja*ka P]n=2 -> [ia*ib*ja*ka P]n=3 -> [ia*ja*ib*ka P]n=4 -> [ia*ja*ka*ib P]> prod_31:=proc(A,ia,ja,ka,B,ib,n)> local i,j,k,h, T:> if(n=1) then>T:=array(1..ib,1..ia,1..ja,1..ka):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ka do for h from 1 <strong>to</strong> ib do>T[h,i,j,k]:=A[i,j,k]*B[h]: od: od: od: od:fi:> if(n=2) then>T:=array(1..ia,1..ib,1..ja,1..ka):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ka do for h from 1 <strong>to</strong> ib do>T[i,h,j,k]:=A[i,j,k]*B[h]: od: od: od: od:fi:> if(n=3) then>T:=array(1..ia,1..ja,1..ib,1..ka):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ka do for h from 1 <strong>to</strong> ib do>T[i,j,h,k]:=A[i,j,k]*B[h]: od: od: od: od:fi:> if(n=4) then>T:=array(1..ia,1..ja,1..ka,1..ib):> for i from 1 <strong>to</strong>ia do for j from 1 <strong>to</strong> ja do for k from 1 <strong>to</strong>ka do for h from 1 <strong>to</strong> ib do>T[i,j,k,h]:=A[i,j,k]*B[h]: od: od: od: od:fi:> op(T);> end:M-M -> T4[ia*ja*ib*jb]> prod_22:=proc(A,ia,ja,B,ib,jb)> local i,j,k,l, T:> T:=array(1..ia,1..ja,1..ib,1..jb):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ja do> for k from 1 <strong>to</strong> ib do> for l from 1 <strong>to</strong> jb do> T[i,j,k,l]:=A[i,j]*B[k,l]:> od: od: od: od:> op(T);> end:AccessorieMostra Tensore3 (lo mostra a stratiribaltati, come <strong>to</strong>rta farcita)> most_3:=proc(A,ia,ja,ka)> local i,j,k, most;> for k from 1 <strong>to</strong> ka do> for i from 1 <strong>to</strong> ia do> most:=A[i,1,k]: for j from 2 <strong>to</strong> ja domost:=most,A[i,j,k]: od:> print(most);> od;> print(printf("nnn")); od:


Algorithms D: MAPLE tensor algebra library 167> end:Mostra Tensore4 (lo mostra a strati...)> most_4_app:=proc(A,ia,ja,ka)> local i,j,k, most;> for k from 1 <strong>to</strong> ka do> for i from 1 <strong>to</strong> ia do> most:=A[i,1,k]: for j from 2 <strong>to</strong> ja domost:=most,A[i,j,k]: od:> print(most);> od;> print(printf("n")); od:> end:> most_4:=proc(A,ia,ja,ka,ha)> local i,j,k,h,AA, most;> for i from 1 <strong>to</strong> ia do> unassign(AA):> for j from 1 <strong>to</strong> ja do> for k from 1 <strong>to</strong> ka do> for h from 1 <strong>to</strong> ha do> AA[j,k,h]:=A[i,j,k,h]:> od:od:od:> print(most_4_app(AA,ja,ka,ha));> print(printf("nnn"));> od:> end:Somma Matrici[ib*jb S]> sum_2:=proc(A,B,ib,jb)> local i,j, M:> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> M[i,j]:=A[i,j]+B[i,j]:> od: od:> op(M);> end:Somma Tensori3[ib*jb*kb S]> sum_3:=proc(A,B,ib,jb,kb)> local i,j,k, T:> T:=array(1..ib,1..jb,1..kb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do> T[i,j,k]:=A[i,j,k]+B[i,j,k]:> od: od: od:> op(T);> end:Somma Tensori3 aggiornata(A array dei termini in somma)[ib*jb*kb*(NUM-1) S]> sum_3m:=proc(ib,jb,kb,NUM,A)> local i,j,k,num, T:> T:=array(1..ib,1..jb,1..kb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do> T[i,j,k]:=A[1][i,j,k]:> od: od: od:> for num from 2 <strong>to</strong> NUM do> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do> T[i,j,k]:=op(T)[i,j,k]+op(A)[num][i,j,k]:> od: od: od: od:> op(T);> end:Somma Tensori4[ib*jb*kb*hb S]> sum_4:=proc(A,B,ib,jb,kb,hb)> local i,j,k, T:> T:=array(1..ib,1..jb,1..kb,1..hb):> for i from 1 <strong>to</strong> ib do> for j from 1 <strong>to</strong> jb do> for k from 1 <strong>to</strong> kb do> for h from 1 <strong>to</strong> hb do> T[i,j,k,h]:=A[i,j,k,h]+B[i,j,k,h]:> od: od: od: od:> op(T);> end:Sostitu<strong>to</strong>re generale (metter a zero gliindici oltre la dimensione del tensore incui sostituire)> subs_3:=proc(A,sostitu<strong>to</strong>re,ia,ja,ka)> local i,j,k, T:> T:=array(1..ia,1..ja,1..ka):> for i from 1 <strong>to</strong> ia do> for j from 1 <strong>to</strong> ja do> for k from 1 <strong>to</strong> ha do> T[i,j,k]:=subs(sostitu<strong>to</strong>re,A[i,j,k]):> od: od: od:> op(T);> end:Testsskew(a)&*skew(a) = T(a)&*a+II&*a^2skew(skew(a) b) = skew(a skew(b))TEST: skew(a) = eps_ijk a_jeps tensore di Ricci in proprietà: 1(eps[1,2,3] = 1)> evalm(comp_13(Ricci,3,3,3,2,a,3)-skew(a));[0 0 0][ ][0 0 0][ ][0 0 0]Test: Ricci doppiocompos<strong>to</strong> Ricci = 2*IIevalm(comp_33(Ricci,3,3,3,23,Ricci,3,3,3,12)-2*II);[0 0 0][ ][0 0 0][ ][0 0 0]Test: eps_ijk a_i b_j = (a x b)_kevalm(comp_12(comp_13(Ricci,3,3,3,1,a,3),3,3,1,b,3)-crossprod(a,b));[0, 0, 0]TEST: D(a . b )/ D(v) = D(a) / D(v) .1.b + D(b) / D(v) .1. a


168 Algorithms D: MAPLE tensor algebra library> ve:=[x,y,z]:> EL1:=diff_01(comp_11(a,b,3),ve,3):> EL2:=comp_12(diff_11(a,3,ve,3),3,3,1,b,3):> EL3:=comp_12(diff_11(b,3,ve,3),3,3,1,a,3):> evalm(EL1-EL2-EL3);[0, 0, 0]TEST: D(a . a ) / D(v) = 2 a . D(a)/D(v)> ve:=[x,y,z]:> simplify(evalm(> diff_01(comp_11(a,a,3),ve,3)-> ( 2*comp_12(diff_11(a,3,ve,3),3,3,1,a,3))> ));[0, 0, 0]TEST: D(a x b )/ D(v) = D(skew(b) .2.a) / D(v) = D(skew(b)) / D(v) .2. a +skew(b) . D(a) / D(v)> ve:=[x,z,z]:> b_sk:=skew(b):> EL1:=diff_11(comp_12(b_sk,3,3,2,a,3),3,ve,3 ):> EL2:=comp_13(diff_21(b_sk,3,3,ve,3),3,3,3,2,a,3):> EL3:=comp_22(b_sk,3,3,2,diff_11(a,3,ve,3),3,3,1):> simplify(evalm(EL1-(EL2+EL3)));[0 0 0][ ][0 0 0][ ][0 0 0]TEST: D(a x b)/D(v) = skew(b.D(a)/D(v)-skew(a) . D(b) / D(v)> ve:=[x,z,z]:> a_sk:=skew(a):> b_sk:=skew(b):> EL1:=diff_11(comp_12(b_sk,3,3,2,a,3),3,ve,3):> EL2:=comp_22(b_sk,3,3,2,diff_11(a,3,ve,3),3,3,1):> EL3:=comp_22(a_sk,3,3,2,diff_11(b,3,ve,3),3,3,1):> simplify(evalm(EL1-(EL2-EL3)));[0 0 0][ ][0 0 0][ ][0 0 0]TEST: D(scalare(v) a )/D(v) = scalare(v)D(a)/D(v) + transp(a) D(scalare(v))/D(v)> ve:=[x,y,z]:> EL1:=diff_11(evalm(a*s(x,y,z)),3,ve,3):> EL2:=comp_02(s(x,y,z),diff_11(a,3,ve,3),3,3) + prod_11(a,3,diff_01(s(x,y,z),ve,3),3):> evalm(EL1-EL2);[0 0 0][ ][0 0 0][ ][0 0 0]TEST: D( skew(a) ) / D(v) = D( Ricci .3.a ) / D(v) = Ricci .3. D(a) / D(v)> ve:=[x,y,z]:> sk_a:=comp_13(Ricci,3,3,3,3,a,3):> EL1:=diff_21(sk_a,3,3,ve,3):> EL2:=comp_23(diff_11(a,3,ve,3),3,3,1,Ricci,3,3,3,3,3):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k])^2; od:od: od: print(noqua);0TEST: D(M . N) / D(v) = D(M) / D(v) .2.N + M .1. D(N) / D(v)> ve:=[x,y,z]:>EL1:=diff_21(comp_22(M,3,3,2,N,3,3,1),3,3,ve,3):>EL2:=comp_23(N,3,3,1,diff_21(M,3,3,ve,3),3,3,3,2):>EL3:=comp_23(M,3,3,2,diff_21(N,3,3,ve,3),3,3,3,1):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k]-EL3[i,j,k])^2; od: od: od: print(noqua);TEST: D( T(a) . b ) / D(v) = D( a ** b ) /D(v) = D( a ) / D(v) *2* b + D( b ) / D(v)*1* a> ve:=[x,y,z]:> EL1:=diff_21(prod_11(a,3,b,3),3,3,ve,3):>EL2:=prod_21(diff_11(a,3,ve,3),3,3,b,3,2):>EL3:=prod_21(diff_11(b,3,ve,3),3,3,a,3,1):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k]-EL3[i,j,k])^2; od: od: od: print(noqua);TEST: D(s M) / D(v) = D(s) / D(v) .3. M+ s D(M) / D(v)> ve:=[x,y,z]:>EL1:=diff_21(comp_02(s(x,y,z),M,3,3),3,3,ve,3):>EL2:=prod_21(M,3,3,diff_01(s(x,y,z),ve,3),3,3):>EL3:=comp_03(s(x,y,z),diff_21(M,3,3,ve,3),3,3,3):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k]-EL3[i,j,k])^2; od: od: od: print(noqua);TEST: ( s M_ij )_|r = s_|r G_ij + s G_ij|r= T1_ijr + T2_ijr> ve:=[x,y,z]:000


Algorithms D: MAPLE tensor algebra library 169>EL1:=diff_21(comp_02(s(x,y,z),M,3,3),3,3,ve,3):>EL2:=prod_21(M,3,3,diff_01(s(x,y,z),ve,3),3,3):>EL3:=comp_03(s(x,y,z),diff_21(M,3,3,ve,3),3,3,3):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k]-EL3[i,j,k])^2; od: od: od: print(noqua);TEST: ( a_i b_j )_|r = a_i|r b_j + a_ib_j|r = T1_ijr + T2_ijr> ve:=[x,y,z]:> EL1:=diff_21(prod_11(a,3,b,3),3,3,ve,3):>EL2:=prod_21(diff_11(a,3,ve,3),3,3,b,3,2):>EL3:=prod_21(diff_11(b,3,ve,3),3,3,a,3,1):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL1[i,j,k]-EL2[i,j,k]-EL3[i,j,k])^2; od: od: od: print(noqua);TEST: C_isn a_j = II_isn a_sp C_psn> EL:=sum_3(prod_21(M,3,3,a,3,2),comp_03(-1,comp_23(M,3,3,1,prod_21(II,3,3,a,3,2),3,3,3,3),3,3,3),3,3,3):> noqua:=0: for i from 1 <strong>to</strong> 3 do for j from1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 donoqua:=noqua+(EL[i,j,k])^2; od: od: od:> print(noqua);TEST:> p21:=prod_21(M,3,3,[1],1,3):> p22:=prod_21(N,3,3,[1],1,2):> evalm(comp_33(p21,3,3,1,23,p22,1,3,3,12)-M&*N);[0 0 0][ ][0 0 0][ ][0 0 0]TEST: fat<strong>to</strong>re incrocia<strong>to</strong>EL1:=prod_21(evalm(T(C)&*N),3,3,evalm(M&*a),3,1):> EL2:=comp_34(prod_21(N,3,3,[1],1,1),1,3,3,12,prod_31(prod_21(T(C),3,3,[1],1,2),3,1,3,evalm(M&*a),3,1),3,3,1,3,34):> noct:=0:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> noct:=noct+(simplify(EL1[1,1,1]-EL2[1,1,1]))^2;> od:od:od:> print(noct);000> EL1:=prod_21(evalm(M&*N),3,3,comp_12(C,3,3,1,a,3),3,2):> EL2:=comp_34(prod_21(N,3,3,[1],1,1),1,3,3,12,prod_31(prod_21(M,3,3,[1],1,2),3,1,3,comp_12(C,3,3,1,a,3),3,2),3,3,1,3,34):> noct:=0:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> noct:=noct+(simplify(EL1[1,1,1]-EL2[1,1,1]))^2;> od:od:od:> print(noct);TEST: fat<strong>to</strong>re incrocia<strong>to</strong>; piu‘ semplice.Estrazione del solo vet<strong>to</strong>re skv3> EL1:=prod_21(evalm(M&*N&*P),3,3,comp_12(C,3,3,1,a,3),3,2):> EL2:=comp_23(P,3,3,1,prod_21(evalm(M&*N),3,3,comp_12(C,3,3,1,a,3),3,2),3,3,3,3):> noct:=0:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> noct:=noct+(simplify(EL1[1,1,1]-EL2[1,1,1]))^2;> od:od:od:> print(noct);> EL1:=prod_21(evalm(T(C)&*N&*P),3,3,evalm(M&*a),3,1):> EL2:=comp_23(P,3,3,1,prod_21(evalm(T(C)&*N),3,3,evalm(M&*a),3,1),3,3,3,3):> noct:=0:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> noct:=noct+(simplify(EL1[1,1,1]-EL2[1,1,1]))^2;> od:od:od:print(noct);Il prodot<strong>to</strong> di due tensori di differenteordine puo‘ esser scrit<strong>to</strong> come composizionedi due tensori fittizii derivati, di ordineuna unita‘ maggiore dei due da produrre,con introdot<strong>to</strong> un indice fittizio su cuisommare, di variabilita‘, anche, soltan<strong>to</strong>unitaria. La composizione dei due tensorifittizii, da‘ lo stesso risulta<strong>to</strong> delprodot<strong>to</strong> dei due originarii.Verifica:> AAgghh:=array(1..3,1..3):> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> AAgghh[i,k]:=a||i||k:> od: od:> BBgghh:=array(1..3):> for i from 1 <strong>to</strong> 3 do> BBgghh[i]:=b||i:> od:> EE1:=prod_21(AAgghh,3,3,BBgghh,3,2):> AAgghh:=array(1..3,1..1,1..3):> for i from 1 <strong>to</strong> 3 do for k from 1 <strong>to</strong> 3 do0000


170 Algorithms D: MAPLE tensor algebra library> AAgghh[i,1,k]:=a||i||k:> od: od:> BBgghh:=array(1..1,1..3):> for j from 1 <strong>to</strong> 3 do> BBgghh[1,j]:=b||j:> od:> EE2:=comp_23(BBgghh,1,3,1,AAgghh,3,1,3,2):> most_3(sum_3(EE1,comp_03(-1,EE2,3,3,3),3,3,3),3,3,3);0, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 0> AM:=matrix(3,3): BM:=matrix(3,3):CM:=matrix(3,3):> av:=vec<strong>to</strong>r(3): bv:=vec<strong>to</strong>r(3):cv:=vec<strong>to</strong>r(3):> te1:=prod_21(evalm(AM&*CM),3,3,comp_12(CM,3,3,1,av,3),3,2):> te2:=prod_21(prod_11(comp_12(CM,3,3,1,av,3),3,comp_12(CM,3,3,1,av,3),3),3,3,evalm(AM&*av),3,1):> te:=sum_3(te1,te2,3,3,3):> tr:=evalm(II+prod_11(av,3,av,3)):> tp:=prod_21(evalm((AM&*T(tr))&*CM),3,3,comp_12(CM,3,3,1,av,3),3,1):> #simplify(sum_3(te,comp_03(-1,tp,3,3,3),3,3,3));> a:=array(1..3):> b:=array(1..3):> A:=matrix(3,3):> B:=matrix(3,3):> C:=matrix(3,3):> M:=matrix(3,3):> N:=matrix(3,3):Verifica raccoglimen<strong>to</strong> prodot<strong>to</strong> buffo> aB:=comp_12(B,3,3,1,a,3):> skB:=comp_23(B,3,3,1,Ricci,3,3,3,2):> aBII:=prod_21(II,3,3,aB,3,2):>TER1:=comp_23(C,3,3,1,sum_3(aBII,comp_03(-1,skB,3,3,3),3,3,3),3,3,3,3):>TER2:=sum_3(prod_21(C,3,3,aB,3,2),comp_03(-1,comp_23(C,3,3,1,comp_23(B,3,3,1,Ricci,3,3,3,2),3,3,3,3),3,3,3),3,3,3):> most_3(sum_3(TER1,comp_03(-1,TER2,3,3,3),3,3,3),3,3,3);0, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 00, 0, 0>sum_3(comp_23(M,3,3,1,prod_21(II,3,3,a,3,1),3,3,3,2),comp_03(-1,prod_21(T(M),3,3,a,3,1),3,3,3),3,3,3);array(1 .. 3, 1 .. 3, 1 .. 3, [(1, 1, 1) = 0(1, 1, 2) = 0(1, 1, 3) = 0(1, 2, 1) = 0(1, 2, 2) = 0(1, 2, 3) = 0(1, 3, 1) = 0(1, 3, 2) = 0(1, 3, 3) = 0(2, 1, 1) = 0(2, 1, 2) = 0(2, 1, 3) = 0(2, 2, 1) = 0(2, 2, 2) = 0(2, 2, 3) = 0(2, 3, 1) = 0(2, 3, 2) = 0(2, 3, 3) = 0(3, 1, 1) = 0(3, 1, 2) = 0(3, 1, 3) = 0(3, 2, 1) = 0(3, 2, 2) = 0(3, 2, 3) = 0(3, 3, 1) = 0(3, 3, 2) = 0(3, 3, 3) = 0])


Algorithms ETetrahedral J and H: numerical example> with(linalg):Codice verifica<strong>to</strong>re, conteni<strong>to</strong>re in sillogedei derivati necessarii alla scrittura di Jed H- Versione con i calcoli per skewor<strong>to</strong>dossa- Elimina<strong>to</strong> Delta3Percorso Base Dati> BASE_DATI_TESI:= "Y:/TESI/":> BASE_DATI_FILE_GEOMETRIA:= "Y:/TESI/":> #BASE_DATI_FILE_GEOMETRIA:="D:/peng/Zoppi-maple_2/MZ_RICALCOLO/":Percorso Basi Dati> #BASE_DATI_TESI:="F:/LAVAL/ArchivioZ/dot<strong>to</strong>ra<strong>to</strong>/TESI/":> #BASE_DATI_FILE_GEOMETRIA:="F:/LAVAL/MAPLE_unige/":Carica libreria> read ‘‘||BASE_DATI_TESI||"lib_1.m";Carica geometria> read‘‘||BASE_DATI_FILE_GEOMETRIA||"geometria_senza_manovellismi_JH.m";>> eps:=-1.22112334:>> tran:=proc(M) transpose(M); end:Geometria del Delta Lineare Assembla<strong>to</strong>reper le verifiche numeriche; le misure diZoe> q1:=0.6221345512: q2:=0.36721:q3:=0.3566212377:> q1_:=q1: q2_:=q2: q3_:=q3:> u:=array(1..3,u_us(q1,q2,q3));sk_u:=skew(u):> v:=array(1..3,v_us(q1,q2,q3));sk_v:=skew(v):> n:=n_us(q1,q2,q3); m:=m_us(q1,q2,q3);> h:=array(1..3,h_us(q1,q2,q3));sk_h:=skew(h):>DV:=tran(evalm(sk_v&*tran(matrix(1,3,u))));c:=sqrt(evalm(DV&*tran(DV))[1,1]);#c:=norm(DV,frobenius);> w:=row(evalm(DV/c),1); sk_w:=skew(w):#w:=w_us(q1,q2,q3);:>hxw:=tran(evalm(sk_h&*tran(matrix(1,3,w))));> r:=sqrt(l2^2-norm(h,frobenius)^2);> Jver:=J(q1,q2,q3,eps);> unassign(’q1’,’q2’,’q3’);h:=[.3187116014, -.0726579697, .4837873881]u:=[-.5193925397,.4641128912, -.2516129469][0 .2516129469 .4641128912 ][ ]sk_u := [-.2516129469 0 .5193925397 ][ ][-.4641128912 -.5193925397 0 ]v:=[-.2070363765,.6972050464,.6950347402]n := -.2897385719m := -.5447763662DV:=[-.4980003991,-.4130888917,.2660348484]c := .6995865711w:=[-.7118495692,-.5904757308,.3802743784]hxw:=[.2580347472,-.4655816999,-.2399130102]r := .4777668261[.3372272021,-.7536005439,-.1958911684][ ]Jver:=[-.7567736998,.4933971237,-.2266803680][ ][.8595897521,.1271695655,-.01375473532]> l1_:=l1: l2_:=l2: l3_:=l3:> u_:=op(u): v_:=op(v):Implementazione esotica> unprotect(O);unprotect(D);Assoluti> ww:=prod_11(w,3,w,3):> wk1:=comp_12(sk_u,3,3,1,w,3):> wk3:=comp_12(sk_v,3,3,1,w,3):> M:=evalm(m*II+prod_11(v_,3,u_,3)):> R:=evalm(M-prod_11(h,3,wk3,3)):> N:=evalm(n*II+prod_11(u_,3,v_,3)):> S:=evalm(N-prod_11(h,3,wk1,3)):> A:=evalm(-sk_h-eps*II*r):> B:=evalm(II-2*ww):> D:=evalm(2*r*A+II*eps*l2_^2):> #P:=sum_3(comp_03(r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,2),3,3,3),3,3,3):> P:=sum_3m(3,3,3,3,[comp_03(r,Ricci,3,3,3),prod_21(II,3,3,evalm(-eps*h),3,2),prod_21(E,3,3,evalm(-w),3,3)]):> #O:=sum_3(prod_21(II,3,3,evalm(D&*w),3,1),prod_21(D,3,3,w,3,2),3,3,3):> terf1:=prod_21(A,3,3,evalm(2*r*w),3,2):171


172 Algorithms E: Tetrahedral J and H: numerical example> terf2:=prod_21(B,3,3,evalm(2*r*A&*w),3,1):> terf3:=prod_21(II,3,3,evalm(eps*l2_^2*w),3,2):> terf4:=prod_21(B,3,3,evalm(eps*l2_^2*w),3,1):> O:=sum_3m(3,3,3,4,[terf1,terf2,terf3,terf4]):> Q:=evalm(r^2*II+prod_11(h,3,h,3)):Rassegna ordinata dei coefficientiindipendenti utilizzati nella costruzionedei derivati; per le verifiche> c1 :=evalm( (m*IItran(matrix(1,3,h))&*matrix(1,3,w)&*sk_v+tran(matrix(1,3,v))&*matrix(1,3,u))/c ):> c2 :=evalm( -(n*IItran(matrix(1,3,h))&*matrix(1,3,w)&*sk_u+tran(matrix(1,3,u))&*matrix(1,3,v))/c ):> c3 :=evalm( -l1*tran(matrix(1,3,v))/c ):> c4 :=evalm( -l2*tran(matrix(1,3,u)-matrix(1,3,v))/c ):> c5 :=evalm( l3*tran(matrix(1,3,u))/c ):> c6 :=evalm( -(sk_w&*M-sk_h&*B&*sk_v)/c ):> c7 :=evalm( (sk_w&*N-sk_h&*B&*sk_u)/c ):> c8 :=evalm(l1*sk_w&*tran(matrix(1,3,v))/c ):> c9 :=evalm( l2*sk_w&*tran(matrix(1,3,u)-matrix(1,3,v))/c ):> c10:=evalm( -l3*sk_w&*tran(matrix(1,3,u))/c ):> c11:=evalm( ((IItran(matrix(1,3,w))&*matrix(1,3,w))&*sk_v)/c ):> c12:=evalm( -((IItran(matrix(1,3,w))&*matrix(1,3,w))&*sk_u)/c ):> E:=evalm(-sk_w*r-eps*prod_11(w,3,h,3)):> F:=evalm((-sk_h-eps*r*II)&*(II-2*prod_11(w,3,w,3))*reps*l2_^2*prod_11(w,3,w,3)):>> unassign(’q1’,’q2’,’q3’);> unassign(’u’,’v’,’l1’,’l2’,’l3’);Prima derivata del vet<strong>to</strong>re variabiliintermedie s, per il robot Delta Lineare;D(s(q_i)) / D(q_i)Ds_Dqi:=transpose(matrix(3,12,[[guida1[1],guida1[2],guida1[3],0,0,0,0,0,0,0,0,0],[0,0,0,guida2[1],guida2[2],guida2[3],0,0,0,0,0,0],[0,0,0,0,0,0,guida3[1],guida3[2],guida3[3],0,0,0]])):-- Velocità --Sinossi in [u v l1 l2 l3]Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di dv> Cc:=array(1..9):> for i from 1 <strong>to</strong> 3 doCc[i]:=evalm(matrix(1,3,w)&*sk_v)[1,i]:> Cc[i+3]:=evalm(-matrix(1,3,w)&*sk_u)[1,i]:> Cc[i+6]:=0:> od:Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale della CSI> Ch:=array(1..3,1..9):> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> Ch[i,k]:=op(c1)[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> Ch[i,k]:=op(c2)[i,k-3]:> od:> Ch[i,7]:=op(c3)[i,1]:> Ch[i,8]:=op(c4)[i,1]:> Ch[i,9]:=op(c5)[i,1]:> od:Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale della G> Cw:=array(1..3,1..9):> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> Cw[i,k]:=op(c11)[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> Cw[i,k]:=op(c12)[i,k-3]:> od:> Cw[i,7]:=0:> Cw[i,8]:=0:> Cw[i,9]:=0:> od:Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale della hxw> Chxw:=array(1..3,1..9):> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> Chxw[i,k]:=op(c6)[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> Chxw[i,k]:=op(c7)[i,k-3]:> od:> Chxw[i,7]:=op(c8)[i,1]:> Chxw[i,8]:=op(c9)[i,1]:> Chxw[i,9]:=op(c10)[i,1]:> od:Nota. Chxw puo‘ esser scrit<strong>to</strong> anchedirettamente utilizzando Ccsi e Cg:> ### Chxw:=evalm(sk_w&*Ch-sk_h&*Cw): ###Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di b2(Forma barbara, ancora non raccolta)>> T_:=evalm(Chxw+eps*r*Cw-(eps/r)*(tran(matrix(1,3,w))&*matrix(1,3,h))&*Ch+(eps/r)*tran(matrix(1,3,w))&*matrix(1,9,[0,0,0,0,0,0,0,l2_,0])):(Forma raccolta)> T1:=evalm( (1/(c*r))*((-F&*sk_v+E&*(m*II+prod_11(v_,3,u_,3))))):> T2:=evalm(-(1/(c*r))*((-F&*sk_u+E&*(n*II+prod_11(u_,3,v_,3))))):> T3:=evalm(-(l1_/(c*r))*E&*v_):> T4:=evalm(-(l2_/(c*r))*(E&*evalm(u_-v_)-eps*c*w)):


Algorithms E: Tetrahedral J and H: numerical example 173> T5:=evalm( (l3_/(c*r))*E&*u_):> T:=array(1..3,1..9):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> T[i,j]:=T1[i,j]:> od:> for j from 4 <strong>to</strong> 6 do> T[i,j]:=T2[i,j-3]:> od:> T[i,7]:=T3[i]:> T[i,8]:=T4[i]:> T[i,9]:=T5[i]:> od:(Verifica in itinere)> evalm(T-T_);[ -9 -9 -9 -9 -9[-.2 10 ,.7 10 ,-.5 10 ,0.,.6 10 ,.4 10 ,-9 -8 -9].1 10 ,-.1 10 ,.3 10 ][ -9 -9 -9 -9 -9 -9[-.1 10 ,.6 10 ,-.2 10 ,.1 10 ,-.1 10 ,.3 10-9 -9],-.1 10 ,0.,.1 10 ][ -9 -9 -9 -9 -10[.6 10 ,.1 10 ,0.,-.1 10 ,-.2 10 ,.4 10 ,-9 -9]-.1 10 ,0.,-.1 10 ]Passaggio alle dodici variabili intermedie[s1 s2 s3 l1 l2 l3](Infra, le verifiche numeriche son sempreriferite al caso Delta Lineare pergeometria e configurazione già fissate)Caso cCostruzione> _Cc:=array(1..12):> for i from 1 <strong>to</strong> 3 do> _Cc[i]:=-Cc[i]:> od:> for i from 4 <strong>to</strong> 6 do> _Cc[i]:=Cc[i]+Cc[i-3]:> od:> for i from 7 <strong>to</strong> 9 do> _Cc[i]:=-Cc[i-3]:> od:> for i from 10 <strong>to</strong> 12 do> _Cc[i]:=-Cc[i-3]:> od:> OTTENUTO:=evalm(_Cc&*Ds_Dqi);Verifica per derivazione diretta di dv(qi)> DV_qi:=evalm(-crossprod(v_us(q1,q2,q3),u_us(q1,q2,q3))):> dv_qi:=sqrt(op(DV_qi)[1]^2+op(DV_qi)[2]^2+op(DV_qi)[3]^2):> pimp__:=dv_qi:> for j from 1 <strong>to</strong> 3 do> pimpp[j]:=unapply(diff(pimp__,q||j),q1,q2,q3):> od:> pimpp_:=(q1,q2,q3)->[op(pimpp)[1](q1,q2,q3),op(pimpp)[2](q1,q2,q3),op(pimpp)[3](q1,q2,q3)]:> VERIFICA:=pimpp_(q1_,q2_,q3_);print(evalm(OTTENUTO-VERIFICA));OTTENUTO:=[.7435685028,.2293800624,.6280707219]VERIFICA:=[.7435685035,.2293800622, .6280707220][ -9 -9 -9][-.7 10 ,.2 10 ,-.110 ]Caso hCostruzione> _Ch:=array(1..3,1..12):> pimp1_:=Ch:> pimp2_:=_Ch:> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,k]:=-pimp1_[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,k]:=pimp1_[i,k]+pimp1_[i,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:od:> OTTENUTO:=evalm(pimp2_&*Ds_Dqi);Verifica per derivazione diretta dellaCSI(qi)> pimp__:=h_us:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> pimpp[i][j]:=unapply(diff(pimp__(q1,q2,q3)[i],q||j),q1,q2,q3):> od: od:> pimpp_:=(q1,q2,q3)-> matrix([[op(pimpp)[1][1](q1,q2,q3),op(pimpp)[1][2](q1,q2,q3),op(pimpp)[1][3](q1,q2,q3)],[op(pimpp)[2][1](q1,q2,q3),op(pimpp)[2][2](q1,q2,q3),op(pimpp)[2][3](q1,q2,q3)],[op(pimpp)[3][1](q1,q2,q3),op(pimpp)[3][2](q1,q2,q3),op(pimpp)[3][3](q1,q2,q3)]]):> VERIFICA:=pimpp_(q1_,q2_,q3_);print(evalm(OTTENUTO-VERIFICA));OTTENUTO :=[-.3737018477,.5831083202,.1674152874 ][ ][.3202365635,-.6437381413,-.4180268228][ ][.6235092684,-.3230559842,.2397928135 ]VERIFICA :=[-.3737018474,.5831083201,.1674152876 ][ ][.3202365637,-.6437381413,-.4180268225][ ][.6235092690,-.3230559846,.2397928134 ][ -9 -9 -9][-.3 10 .1 10 -.2 10 ][ ][ -9 -9][-.2 10 0. -.3 10 ]


174 Algorithms E: Tetrahedral J and H: numerical example[ ][ -9 -9 -9 ][-.6 10 .4 10 .1 10 ]Caso hxwCostruzione> _Chxw:=array(1..3,1..12):> pimp1_:=Chxw:> pimp2_:=_Chxw:> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,k]:=-pimp1_[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,k]:=pimp1_[i,k]+pimp1_[i,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:od:> OTTENUTO:=evalm(pimp2_&*Ds_Dqi);Verifica per derivazione diretta> pimp__:=(q1,q2,q3)-> evalm(skew(h_us(q1,q2,q3))&*w_us(q1,q2,q3)):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> pimpp[i][j]:=unapply(diff(pimp__(q1,q2,q3)[i],q||j),q1,q2,q3):> od: od:> pimpp_:=(q1,q2,q3)-> matrix([[op(pimpp)[1][1](q1,q2,q3),op(pimpp)[1][2](q1,q2,q3),op(pimpp)[1][3](q1,q2,q3)],[op(pimpp)[2][1](q1,q2,q3),op(pimpp)[2][2](q1,q2,q3),op(pimpp)[2][3](q1,q2,q3)],[op(pimpp)[3][1](q1,q2,q3),op(pimpp)[3][2](q1,q2,q3),op(pimpp)[3][3](q1,q2,q3)]]):> VERIFICA:=pimpp_(q1_,q2_,q3_);print(evalm(OTTENUTO-VERIFICA));OTTENUTO :=[.3998314053,-.1974178945,.1552138704 ][ ][-.3764842280,.2057587101,-.09120014671][ ][.4967612832,-.9297697035,-.4886238648 ]VERIFICA :=[.3998314060,-.1974178943,.1552138709 ][ ][-.3764842288,.2057587097,-.09120014717][ ][.4967612831,-.9297697035,-.4886238646 ][ -9 -9 -9][-.7 10 -.2 10 -.5 10 ][ ][ -9 -9 -9][.8 10 .4 10 .46 10 ][ ][ -9 -9][.1 10 0. -.2 10 ]Caso wCostruzione> _Cw:=array(1..3,1..12):> pimp1_:=Cw:> pimp2_:=_Cw:> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,k]:=-pimp1_[i,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,k]:=pimp1_[i,k]+pimp1_[i,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:od:> OTTENUTO:=evalm(pimp2_&*Ds_Dqi);Verifica per derivazione diretta> pimp__:=w_us:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> pimpp[i][j]:=unapply(diff(pimp__(q1,q2,q3)[i],q||j),q1,q2,q3):> od: od:> pimpp_:=(q1,q2,q3)-> matrix([[op(pimpp)[1][1](q1,q2,q3),op(pimpp)[1][2](q1,q2,q3),op(pimpp)[1][3](q1,q2,q3)],[op(pimpp)[2][1](q1,q2,q3),op(pimpp)[2][2](q1,q2,q3),op(pimpp)[2][3](q1,q2,q3)],[op(pimpp)[3][1](q1,q2,q3),op(pimpp)[3][2](q1,q2,q3),op(pimpp)[3][3](q1,q2,q3)]]):> VERIFICA:=pimpp_(q1_,q2_,q3_);print(evalm(OTTENUTO-VERIFICA));OTTENUTO :=[-.3894043223, .4007576734, -.02108788970][ ][.2398170609,-.4905121486, -.2844728054 ][ ][-.3565613493,-.01145578804,-.4811938537 ]VERIFICA :=[-.3894043230,.4007576730, -.0210878906][ ][.2398170600,-.4905121490, -.2844728061][ ][-.3565613490,-.0114557879, -.4811938534][ -9 -9 -9][.7 10 .4 10 .90 10 ][ ][ -9 -9 -9 ][.9 10 .4 10 .7 10 ][ ][ -9 -9 -9][-.3 10 -.14 10 -.3 10 ]Caso b2Costruzione> _T:=array(1..3,1..12):> pimp1_:=T:> pimp2_:=_T:> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,k]:=-pimp1_[i,k]:> od:> for k from 4 <strong>to</strong> 6 do


Algorithms E: Tetrahedral J and H: numerical example 175> pimp2_[i,k]:=pimp1_[i,k]+pimp1_[i,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,k]:=-pimp1_[i,k-3]:> od:od:> OTTENUTO:=evalm(pimp2_&*Ds_Dqi);Verifica per derivazione diretta (ancoranel caso particolare del delta lineareelet<strong>to</strong> a riferimen<strong>to</strong>)> pimp__:=b2_a2:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> pimpp[i][j]:=unapply(diff(pimp__(q1,q2,q3,eps)[i],q||j),q1,q2,q3):> od: od:> pimpp_:=(q1,q2,q3)-> matrix([[op(pimpp)[1][1](q1,q2,q3),op(pimpp)[1][2](q1,q2,q3),op(pimpp)[1][3](q1,q2,q3)],[op(pimpp)[2][1](q1,q2,q3),op(pimpp)[2][2](q1,q2,q3),op(pimpp)[2][3](q1,q2,q3)],[op(pimpp)[3][1](q1,q2,q3),op(pimpp)[3][2](q1,q2,q3),op(pimpp)[3][3](q1,q2,q3)]]):> VERIFICA:=pimpp_(q1_,q2_,q3_);print(evalm(OTTENUTO-VERIFICA));OTTENUTO :=[.3372272023,-.5700929092, -.1958911692 ][ ][-.7567736981,.3767390927, -.2266803681 ][ ][.8595897516,-.8489020770, -.01375473543]VERIFICA :=[.3372272021,-.5700929084, -.1958911685 ][ ][-.7567736996,.3767390930, -.2266803680 ][ ][.8595897521,-.8489020772, -.01375473532][ -9 -9 -9 ][.2 10 -.8 10 -.7 10 ][ ][ -8 -9 -9 ][.15 10 -.3 10 -.1 10 ][ ][ -9 -9 -9][-.5 10 .2 10 -.11 10 ]Caso Jsomma al coefficiente per b2, di I33 dallasesta alla nona colonna, per considerare ilcontribu<strong>to</strong> di s2> _J:=array(1..3,1..12):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 12 do> _J[i,j]:=_T[i,j]:> if((i=1 and j=4) or (i=2 and j=5) or (i=3and j=6))then _J[i,j]:=_J[i,j]+1: fi:> od:od:> OTTENUTO:=evalm(_J&*Ds_Dqi):Verifica per confron<strong>to</strong> alla J numerica;verifica<strong>to</strong> CHI più accuratamente, paresufficente.> evalm(OTTENUTO-Jver);[ -9 -9 -9 ][.2 10 -.8 10 -.8 10 ][ ][ -8 -9 -9 ][.17 10 -.3 10 -.1 10 ][ ][ -9 -9 -9][-.5 10 .1 10 -.11 10 ]-- Accelerazione --Sinossi in [v1 v3 l1 l2 l3]> T1:=matrix(3,3): for ii from 1 <strong>to</strong> 3 dofor jj from 1 <strong>to</strong> 3 do T1[ii,jj]:=T[ii,jj]:od: od:> T2:=matrix(3,3): for ii from 1 <strong>to</strong> 3 dofor jj from 4 <strong>to</strong> 6 do T2[ii,jj-3]:=T[ii,jj]: od: od:> h2:=evalm(innerprod(h,h)):Alla costruzione dei coefficienti per lederivate di E e F occorre subi<strong>to</strong> verifica;L1,2,3,4,5 sono costruiti e verificati dalgrezzo di derivazione. In fine unicaverifica di L con il passaggio allevariabili intermedieI coefficienti per le derivate di E e F nonsono semplificati fino ai componentielementari poiché scritti per verifica initinere dei calcoli per il LCostruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di E> DDD1:=comp_23(Cw,3,9,1,sum_3(comp_03(r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,2),3,3,3),3,3,3),3,3,3,3):> DDD2:=sum_3(comp_03(-1/r,prod_21(sk_w,3,3,comp_12(Ch,3,9,1,h,3),9,3),3,3,9) ,prod_21(Ch,3,9,evalm(eps*w),3,1),3,3,9):> CU:=sum_3(sum_3(DDD1,comp_03(-1,DDD2,3,3,9),3,3,9),comp_03(-1/r,prod_21(sk_w,3,3,[0,0,0,0,0,0,0,l2_,0],9,3),3,3,9),3,3,9):Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di F> DDD1:=comp_23(Ch,3,9,1,sum_3(prod_21(evalm((1/r)*(2*eps*r*II+sk_h)&*(II-2*prod_11(w,3,w,3))),3,3,h,3,3),comp_03(r,sum_3(Ricci,prod_21(evalm(-sk_w),3,3,evalm(2*w),3,2),3,3,3),3,3,3),3,3,3),3,3,3,3):> DDDA:=evalm(-2*r*(-sk_h-eps*II*r)-II*eps*l2_^2):> DDD2:=sum_3(prod_21(Cw,3,9,comp_12(DDDA,3,3,2,w,3),3,1),prod_21(comp_22(DDDA,3,3,2,Cw,3,9,1),3,9,w,3,2),3,3,9):> DDD3:=prod_21(evalm((1/r)*((-sk_h-eps*II*r)&*(II-2*prod_11(w,3,w,3))-eps*r*II)),3,3,[0,0,0,0,0,0,0,l2_,0],9,3):


176 Algorithms E: Tetrahedral J and H: numerical example> CV:=sum_3(sum_3(DDD1,DDD2,3,3,9),DDD3,3,3,9):Nove sinossi ai CU e CVCostruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di U> DDD1:=comp_23(Cw,3,9,1,sum_3(comp_03(r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,2),3,3,3),3,3,3),3,3,3,3):> DDD2:=comp_03(-1,sum_3(comp_03(-1/r,prod_21(sk_w,3,3,comp_12(Ch,3,9,1,h,3),9,3),3,3,9),prod_21(Ch,3,9,evalm(eps*w),3,1),3,3,9),3,3,9):> CU:=sum_3(sum_3(DDD1,DDD2,3,3,9),comp_03(-1/r,prod_21(sk_w,3,3,[0,0,0,0,0,0,0,l2_,0],9,3),3,3,9),3,3,9):Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di V> DDD1:=comp_23(Ch,3,9,1,sum_3(prod_21(evalm((1/r)*(eps*r*II-A)&*B),3,3,h,3,3),comp_03(r,comp_23(B,3,3,1,Ricci,3,3,3,2),3,3,3),3,3,3),3,3,3,3):> DDDA:=evalm(-2*r*A-II*eps*l2_^2):> DDD2:=sum_3(prod_21(Cw,3,9,comp_12(DDDA,3,3,2,w,3),3,1),prod_21(comp_22(DDDA,3,3,2,Cw,3,9,1),3,9,w,3,2),3,3,9):> DDD3:=prod_21(evalm((1/r)*(A&*Beps*r*II)),3,3,[0,0,0,0,0,0,0,l2,0],9,3):> CV:=sum_3(sum_3(DDD1,DDD2,3,3,9),DDD3,3,3,9):Altre novissime sinossi ai CU e CVCostruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di U> DDD1:=comp_23(Cw,3,9,1,sum_3(comp_03(r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,2),3,3,3),3,3,3),3,3,3,3):> DDD2:=comp_03(-1,sum_3(comp_03(-1/r,prod_21(sk_w,3,3,comp_12(Ch,3,9,1,h,3),9,3),3,3,9) ,prod_21(Ch,3,9,evalm(eps*w),3,1),3,3,9),3,3,9):> CV:=sum_3(sum_3(DDD1,DDD2,3,3,9),comp_03(1/r,prod_21(evalm(-sk_w),3,3,[0,0,0,0,0,0,0,l2_,0],9,3),3,3,9),3,3,9):Costruzione d’una sinossi ai coefficientidel deriva<strong>to</strong> vet<strong>to</strong>riale di V> DDD1:=comp_23(Ch,3,9,1,sum_3(prod_21(evalm((1/r)*(eps*r*II-A)&*(B)),3,3,h,3,3),comp_03(r,comp_23(evalm(B),3,3,1,Ricci,3,3,3,2),3,3,3),3,3,3),3,3,3,3):> DDD2:=comp_03(-1,sum_3(prod_21(Cw,3,9,comp_12(D,3,3,2,w,3),3,1),prod_21(comp_22(D,3,3,2,Cw,3,9,1),3,9,w,3,2),3,3,9),3,3,9):> DDD3:=prod_21(evalm((1/r)*(A&*Beps*r*II)),3,3,[0,0,0,0,0,0,0,l2_,0],9,3):> CV:=sum_3(sum_3(DDD1,DDD2,3,3,9),DDD3,3,3,9):Caso UCostruzione> _CU:=array(1..3,1..3,1..12):> pimp1_:=CU:> pimp2_:=_CU:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:od:od:> OTTENUTO:=comp_23(Ds_Dqi,12,3,1,pimp2_,3,3,12,3):Verifica per derivazione diretta> pimp__:=evalm((-skew(w_us(q1,q2,q3))*sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3)))-eps*tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,h_us(q1,q2,q3)))):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp[i,j,k]:=unapply(subs(diff(l2(q1,q2,q3),q1)=0,diff(l2(q1,q2,q3),q2)=0,diff(l2(q1,q2,q3),q3)=0,l2(q1,q2,q3)=l2_,diff(pimp__[i,j],q||k)),q1,q2,q3):> od: od: od:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp_[i,j,k]:=evalf(pimpp[i,j,k](q1_,q2_,q3_)):> od: od: od:> VERIFICA:=pimpp_:#most_3(VERIFICA,3,3,3);> most_3(sum_3(OTTENUTO,comp_03(-1,VERIFICA,3,3,3),3,3,3),3,3,3);-9 -9 -8.6 10 , .6 10 , .1 10-9 -9 -9.3 10 , .3 10 , .3 10-9 -9 -9-.491 10 , .3 10 , -.27 10-9 -9 -9.2 10 , -.3 10 , -.7 10-9 -9 -9.3 10 , -.1 10 , .9 10-9 -9 -9.9 10 , -.9 10 , -.1 10-9 -9 -9.5 10 , .19 10 , -.3 10-9 -9 -9.3 10 , .2 10 , .78 10-9 -9 -9.63 10 , -.6 10 , -.2 10Caso V


Algorithms E: Tetrahedral J and H: numerical example 177Costruzione> _CV:=array(1..3,1..3,1..12):> pimp1_:=CV:> pimp2_:=_CV:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:od:od:> OTTENUTO:=comp_23(Ds_Dqi,9,3,1,pimp2_,3,3,9,3):Verifica per derivazione diretta> RAD_qi:=sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3))):> GTG_qi:=evalm(tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,w_us(q1,q2,q3))):> pimp__:=evalm( -(skew(h_us(q1,q2,q3))+eps*RAD_qi*II) &*(II-2*GTG_qi)*RAD_qi -eps*l2(q1,q2,q3)^2*GTG_qi):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp[i,j,k]:=unapply(subs(diff(l2(q1,q2,q3),q1)=0,diff(l2(q1,q2,q3),q2)=0,diff(l2(q1,q2,q3),q3)=0,l2(q1,q2,q3)=l2_,diff(pimp__[i,j],q||k)),q1,q2,q3):> od: od: od:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp_[i,j,k]:=evalf(pimpp[i,j,k](q1_,q2_,q3_)):> od: od: od:> VERIFICA:=pimpp_:#most_3(VERIFICA,3,3,3);> most_3(sum_3(OTTENUTO,comp_03(-1,VERIFICA,3,3,3),3,3,3),3,3,3);-9 -90., -.6 10 , .9 10-8 -9-.15 10 , 0., .7 10-9 -9 -9.6 10 , .5 10 , .272 10-9 -8 -9-.4 10 , .119 10 , -.6 10-9 -9 -9.42 10 , -.52 10 , -.4 10-9 -9 -9-.4 10 , -.5 10 , -.4 10-9 -9 -9.21 10 , .5 10 , .1 10-9 -9 -9-.8 10 , -.3 10 , -.14 10-9 -9 -9-.1 10 , -.29 10 , -.1 10Caso L1per verifica (il grezzo di derivazione finoad un primo raccoglimen<strong>to</strong>)> AA:=evalm(-F&*sk_v+E&*(m*II+tran(matrix(1,3,v_))&*matrix(1,3,u_))):> Term_P:=sum_3m(3,3,9,5, [prod_21(evalm(-AA/c),3,3,Cc,9,3),prod_21(evalm(AA/r^2),3,3,comp_12(Ch,3,9,1,h,3),9,3), comp_23(evalm(-sk_v),3,3,1,CV,3,3,9,2),comp_03(m,CU,3,3,9),comp_23(prod_11(v_,3,u_,3),3,3,1,CU,3,3,9,2)]):> Term_v:=sum_3m(3,3,3,3,[comp_23(F,3,3,2,Ricci,3,3,3,1),comp_03(-1,prod_21(E,3,3,v_,3,3),3,3,3),prod_21(E,3,3,u_,3,2)]):> Term_u:=prod_21(II,3,3,comp_12(E,3,3,2,v_,3),3,1):> Term_l2:=evalm(-AA*l2_/r^2-E*l2_):> Term_l3:=evalm(E*l3_):> L1_:=comp_03(1/(c*r),sum_3m(3,3,9,5,[Term_P,> comp_23(matrix(3,9,[[1,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,0,0]]),3,9,1,Term_u,3,3,3,3),> comp_23(matrix(3,9,[[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0],[0,0,0,0,0,1,0,0,0]]),3,9,1,Term_v,3,3,3,3),> prod_21(Term_l2,3,3,[0,0,0,0,0,0,0,1,0],9,3),> prod_21(Term_l3,3,3,[0,0,0,0,0,0,0,0,1],9,3) ]),3,3,9):U> ff1:=comp_03(-eps,prod_21(comp_22(M,3,3,1,Q,3,3,1),3,3,w,3,1),3,3,3):> ff2:=comp_03(eps*l2_^2,prod_21(prod_11(comp_12(sk_v,3,3,1,w,3),3,h,3),3,3,w,3,1),3,3,3):> tempor:=sum_3(comp_03(-r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,3),3,3,3),3,3,3):> ff3:=comp_03(r^2,comp_23(evalm(B&*sk_v),3,3,1,tempor,3,3,3,2),3,3,3):> U:=comp_03(1/(c*r^2),sum_3m(3,3,3,3,[ff1,ff2,ff3]),3,3,3):L1L1_u definitivo> ch11:=comp_03(1,comp_23(R,3,3,1,U,3,3,3,3),3,3,3):> ch12:=comp_03(-r,prod_21(T1,3,3,wk3,3,3),3,3,3):> ch13:=comp_03(1/c,comp_23(sk_v,3,3,1,comp_23(sk_v,3,3,1,O,3,3,3,2),3,3,3,3),3,3,3):> ch14:=comp_03(1/c,comp_23(sk_v,3,3,1,comp_23(M,3,3,1,P,3,3,3,2),3,3,3,3),3,3,3):> ch15:=comp_03(1,prod_21(II,3,3,evalm(E&*v_)


178 Algorithms E: Tetrahedral J and H: numerical example,3,1),3,3,3):> L1_u:=comp_03(1/(c*r),sum_3m(3,3,3,5,[ch11,ch12,ch13,ch14,ch15]),3,3,3):>L1_v definitivo> ch11:=comp_03(1,comp_23(S,3,3,1,U,3,3,3,3),3,3,3):> ch12:=comp_03(-r,prod_21(T1,3,3,wk1,3,3),3,3,3):> ch13:=comp_03(1/c,comp_23(sk_u,3,3,1,comp_23(sk_v,3,3,1,O,3,3,3,2),3,3,3,3),3,3,3):> ch14:=comp_03(1/c,comp_23(sk_u,3,3,1,comp_23(M,3,3,1,P,3,3,3,2),3,3,3,3),3,3,3):> ch15:=comp_03(-1,comp_23(F,3,3,2,Ricci,3,3,3,1),3,3,3):> ch16:=comp_03(1,prod_21(E,3,3,v_,3,3),3,3,3):> ch17:=comp_03(-1,prod_21(E,3,3,u_,3,2),3,3,3):> L1_v:=comp_03(-1/(c*r),sum_3m(3,3,3,7,[ch11,ch12,ch13,ch14,ch15,ch16,ch17]),3,3,3):>L1 termini per l1, l2, l3> L1_l1:=evalm((-l1_/(c*r))*comp_13(U,3,3,3,3,v_,3)):>> L1_l2:=evalm((-l2_/(c*r))*(comp_13(U,3,3,3,3,evalm(u_-v_),3)-(eps/r^2)*(r^2*sk_vl2_^2*prod_11(w,3,w,3)&*sk_v+prod_11(w,3,h,3)&*M)+E)):> L1_l3:=evalm((l3_/(c*r))*(comp_13(U,3,3,3,3,u_,3)+E)):>Costruzione del tensore comple<strong>to</strong>> L1:=array(1..3,1..3,1..9):> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> L1[i,j,k]:=L1_u[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> L1[i,j,k]:=L1_v[i,j,k-3]:> od:> L1[i,j,7]:=L1_l1[i,j]:> L1[i,j,8]:=L1_l2[i,j]:> L1[i,j,9]:=L1_l3[i,j]:> od:od:Verifica> vere:=sum_3(L1,comp_03(-1,L1_,3,3,9),3,3,9): #most_3(vere,3,3,9);> veresom:=0:> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 dofor k from 1 <strong>to</strong> 9 doveresom:=veresom+(vere[i,j,k])^2: od:od:od:> veresom; # somma dei quadrati di tuttigli elementi #-16.545119 10Caso L2per verifica (il grezzo di derivazione finoad un primo raccoglimen<strong>to</strong>)> AA:=evalm(-F&*sk_u+E&*(n*II+tran(matrix(1,3,u_))&*matrix(1,3,v_))):> Term_P:=sum_3m(3,3,9,5, [prod_21(evalm(-AA/c),3,3,Cc,9,3),prod_21(evalm(AA/r^2),3,3,comp_12(Ch,3,9,1,h,3),9,3), comp_23(evalm(-sk_u),3,3,1,CV,3,3,9,2),comp_03(n,CU,3,3,9),comp_23(prod_11(u_,3,v_,3),3,3,1,CU,3,3,9,2)]):> Term_u:=sum_3m(3,3,3,3,[comp_23(F,3,3,2,Ricci,3,3,3,1),comp_03(-1,prod_21(E,3,3,u_,3,3),3,3,3),prod_21(E,3,3,v_,3,2)]):> Term_v:=prod_21(II,3,3,comp_12(E,3,3,2,u_,3),3,1):> Term_l2:=evalm(-AA*l2_/r^2-E*l2_):> Term_l1:=evalm(E*l1_):> L2_:=comp_03(-1/(c*r),sum_3m(3,3,9,5,[Term_P,> comp_23(matrix(3,9,[[1,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,0,0]]),3,9,1,Term_u,3,3,3,3),> comp_23(matrix(3,9,[[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0],[0,0,0,0,0,1,0,0,0]]),3,9,1,Term_v,3,3,3,3),> prod_21(Term_l2,3,3,[0,0,0,0,0,0,0,1,0],9,3),> prod_21(Term_l1,3,3,[0,0,0,0,0,0,1,0,0],9,3) ]),3,3,9):>V> ff1:=comp_03(-eps,prod_21(comp_22(N,3,3,1,Q,3,3,1),3,3,w,3,1),3,3,3):> ff2:=comp_03(eps*l2_^2,prod_21(prod_11(comp_12(sk_u,3,3,1,w,3),3,h,3),3,3,w,3,1),3,3,3):> tempor:=sum_3(comp_03(-r,Ricci,3,3,3),comp_03(-eps,prod_21(II,3,3,h,3,3),3,3,3),3,3,3):> ff3:=comp_03(r^2,comp_23(evalm(B&*sk_u),3,3,1,tempor,3,3,3,2),3,3,3):> V:=comp_03(-1/(c*r^2),sum_3m(3,3,3,3,[ff1,ff2,ff3]),3,3,3):L2L2_u definitivo> ch11:=comp_03(1,comp_23(R,3,3,1,V,3,3,3,3),3,3,3):> ch12:=comp_03(-r,prod_21(T2,3,3,wk3,3,3),3,3,3):> ch13:=comp_03(-1/c,comp_23(sk_v,3,3,1,comp_23(sk_u,3,3,1,O,3,3,3,2),3,3,3,3),3,3,3):> ch14:=comp_03(-1/c,comp_23(sk_v,3,3,1,comp_23(N,3,3,1,P,3,3,3,2),3,3,3,3),3,3,3):> ch15:=comp_03(-1,comp_23(F,3,3,2,Ricci,3,3,3,1),3,3,3):> ch16:=comp_03(1,prod_21(E,3,3,u_,3,3),3,3,3):> ch17:=comp_03(-1,prod_21(E,3,3,v_,3,2),3,3,3):> L2_u:=comp_03(1/(c*r),sum_3m(3,3,3,7,[ch11,ch12,ch13,ch14,ch15,ch16,ch17]),3,3,3):>L2_v definitivo


Algorithms E: Tetrahedral J and H: numerical example 179>ch11:=comp_03(1,comp_23(S,3,3,1,V,3,3,3,3),3,3,3):> ch12:=comp_03(-r,prod_21(T2,3,3,wk1,3,3),3,3,3):> ch13:=comp_03(-1/c,comp_23(sk_u,3,3,1,comp_23(sk_u,3,3,1,O,3,3,3,2),3,3,3,3),3,3,3):> ch14:=comp_03(-1/c,comp_23(sk_u,3,3,1,comp_23(N,3,3,1,P,3,3,3,2),3,3,3,3),3,3,3):> ch15:=comp_03(1,prod_21(II,3,3,evalm(E&*u_),3,1),3,3,3):> L2_v:=comp_03(-1/(c*r),sum_3m(3,3,3,5,[ch11,ch12,ch13,ch14,ch15]),3,3,3):>L2 termini per l1, l2, l3> L2_l1:=evalm((-l1_/c/r)*(comp_13(V,3,3,3,3,v_,3)+E)):>> L2_l2:=evalm((-l2_/c/r)*(comp_13(V,3,3,3,3,evalm(u_-v_),3)+(eps/r^2)*(r^2*sk_ul2_^2*prod_11(w,3,w,3)&*sk_u+prod_11(w,3,h,3)&*N)-E)):> L2_l3:=evalm((l3_/c/r)*comp_13(V,3,3,3,3,u_,3)):>Costruzione del tensore comple<strong>to</strong>> L2:=array(1..3,1..3,1..9):> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> L2[i,j,k]:=L2_u[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> L2[i,j,k]:=L2_v[i,j,k-3]:> od:> L2[i,j,7]:=L2_l1[i,j]:> L2[i,j,8]:=L2_l2[i,j]:> L2[i,j,9]:=L2_l3[i,j]:> od:od:>Verifica> vere:=sum_3(L2,comp_03(-1,L2_,3,3,9),3,3,9): #most_3(vere,3,3,9);> veresom:=0:> for i from 1 <strong>to</strong> 3 do for j from 1 <strong>to</strong> 3 dofor k from 1 <strong>to</strong> 9 doveresom:=veresom+(vere[i,j,k])^2: od:od:od:> veresom; # somma dei quadrati di tuttigli elementi #-16.18545400 10Caso L3L3 per verifica (il grezzo di derivazione)> Term_P:=evalm(l1_/c^2/r^2*prod_11(evalm(E&*v_),3,evalm(r*Cc+c/r*([0,0,0,0,0,0,0,l2_,0]-comp_12(Ch,3,9,1,h,3))),9) -l1_/c/r*(comp_13(CU,3,3,9,2,v_,3)) ):> Term_v:=evalm(-l1_/c/r*E&*matrix(3,9,[[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0],[0,0,0,0,0,1,0,0,0]])):> Term_l1:=prod_11(evalm(-1/c/r*E&*v_),3,[0,0,0,0,0,0,1,0,0],9):> L3_:=evalm(Term_P+Term_v+Term_l1):L3_u definitivo> L3_u:=L1_l1: ###evalm(-l1_/c/r*comp_13(U,3,3,3,3,v_,3)):L3_v definitivo> L3_v:=L2_l1: ###evalm(-l1_/c/r*(comp_13(V,3,3,3,3,v_,3)+E)):L3_l1 definitivo> L3_l1:=evalm(-1/c^2/r^3*(l1_^2*eps*prod_11(w,3,evalm(Q&*v_),3)+c*r^2*E)&*v_):L3_l2 definitivo> L3_l2:=evalm(-l1_*l2_*eps/c^2/r^3*w*evalm((Q&*(u_-v_)+h*c)&*v_)):> ### L3_l2:=evalm(-l1_*l2_*eps/c^2/r^3*(prod_11(w,3,evalm(Q&*(u_-v_)+h*c),3))&*v_):L3_l3 definitivo> L3_l3:=evalm(l1_*l3_*eps/c^2/r^3*w*evalm((Q&*u_)&*v_)):> ###L3_l3:=evalm(l1_*l3_*eps/c^2/r^3*(prod_11(w,3,evalm(Q&*u_),3))&*v_):Costruzione del tensore comple<strong>to</strong>> L3:=array(1..3,1..9):> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> L3[j,k]:=L3_u[j,k]:> od:> for k from 4 <strong>to</strong> 6 do> L3[j,k]:=L3_v[j,k-3]:> od:> L3[j,7]:=L3_l1[j]:> L3[j,8]:=L3_l2[j]:> L3[j,9]:=L3_l3[j]:> od:Verifica> evalm(L3-L3_);[ -8 -8 -9 -8[.172 10, 0., 0., 0., .10 10, -.3 10, -.1 10,-8 -9].3 10, -.4 10 ][ -9 -9 -9 -9 -9[.3 10, -.4 10, -.4 10, .2 10, .7 10, 0.,-9 -8 -9]-.3 10, .1 10, -.64 10 ][ -8 -9 -9 -9 -9[-.10 10, -.1 10, -.5 10, -.1 10, -.4 10,-9 -9 -9 -9]-.4 10, -.4 10, -.5 10, .16 10 ]Caso L4L4 per verifica (il grezzo di derivazione)> Term_P:=evalm(l2_/c^2/r^2*prod_11(evalm(E&*(u_-v_)),3,evalm(r*Cc+c/r*([0,0,0,0,0,0,0,l2_,0]-comp_12(Ch,3,9,1,h,3))),9) -l2_/c/r*(comp_13(CU,3,3,9,2,evalm(u_-v_),3)) +eps*l2_/r*(Cw+1/r^2*prod_11(w,3,comp_12(Ch,3,9,1,h,3),9)) ):> Term_u:=evalm(-l2_/c/r*E&*matrix(3,9,[[1,0,0,0,0,0,0,0,0],


180 Algorithms E: Tetrahedral J and H: numerical example[0,1,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,0,0]])):> Term_v:=evalm(l2_/c/r*E&*matrix(3,9,[[0,0,0,1,0,0,0,0,0],[0,0,0,0,1,0,0,0,0],[0,0,0,0,0,1,0,0,0]])):> Term_l2:=prod_11(evalm(-1/c/r*E&*(u_-v_)-eps/r^3*w*h2),3,[0,0,0,0,0,0,0,1,0],9):> L4_:=evalm(Term_P+Term_u+Term_v+Term_l2):L4_v1 definitivo> L4_u:=L1_l2:L4_v definitivo> L4_v:=L2_l2:L4_l1 definitivo> L4_l1:=L3_l2:L4_l2 definitivo> L4_l2:=evalm( -1/c^2/r^3*(l2_^2*eps*w*evalm(( Q&*(u_-v_) + 2*h*c)&*(u_-v_)) + eps*w*h2*c^2 + E&*(u_-v_)*c*r^2 )):> #L4_l2:=evalm( -1/c^2/r^3*(l2_^2*eps*w*evalm( evalm(r^2*(u_-v_)&*(u_-v_)+evalm(h&*(u_-v_))^2) + 2*c*h&*(u_-v_) )+ eps*w*h2*c^2 + E&*(u_-v_)*c*r^2 )):L4_l3 definitivo> L4_l3:=evalm(l3_*l2_*eps/c^2/r^3*w*evalm((Q&*(u_-v_)+h*c)&*u_)):> ### L4_l3:=evalm(l3_*l2_*eps/c^2/r^3*(prod_11(w,3,evalm(Q&*(u_-v_)+h*c),3))&*u_):Costruzione del tensore comple<strong>to</strong>> L4:=array(1..3,1..9):> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> L4[j,k]:=L4_u[j,k]:> od:> for k from 4 <strong>to</strong> 6 do> L4[j,k]:=L4_v[j,k-3]:> od:> L4[j,7]:=L4_l1[j]:> L4[j,8]:=L4_l2[j]:> L4[j,9]:=L4_l3[j]:> od:Verifica> evalm(L4-L4_);[ -8 -8 -9 -9 -8[-.22 10, -.21 10, .2 10, .2 10, -.17 10,-9 -8 -9].5 10, .2 10, 0., -.9 10 ][ -8 -8 -8 -9 -8[-.1 10, .19 10, .1 10, 0., -.1 10, 0., .2 10,-8 -9].2 10 , .6 10 ][ -8 -9 -9 -9 -9[.1 10, -.4 10, .9 10, 0., .2 10, -.2 10,-9 -9]-.9 10, 0., -.35 10 ]Caso L5L5 per verifica (il grezzo di derivazione)> Term_P:=evalm(-l3_/c^2/r^2*prod_11(evalm(E&*u_),3,evalm(r*Cc+c/r*([0,0,0,0,0,0,0,l2_,0]-comp_12(Ch,3,9,1,h,3))),9) +l3_/c/r*(comp_13(CU,3,3,9,2,u_,3)) ):> Term_u:=evalm(l3_/c/r*E&*matrix(3,9,[[1,0,0,0,0,0,0,0,0],[0,1,0,0,0,0,0,0,0],[0,0,1,0,0,0,0,0,0]])):> Term_l3:=prod_11(evalm(1/c/r*E&*u_),3,[0,0,0,0,0,0,0,0,1],9):> L5_:=evalm(Term_P+Term_u+Term_l3):L5_u definitivo> L5_u:=L1_l3:L5_v definitivo> L5_v:=L2_l3:L5_l1 definitivo> L5_l1:=L3_l3:L5_l2 definitivo> L5_l2:=L4_l3:L5_l3 definitivo> L5_l3:=evalm(-1/c^2/r^3*(l3_^2*eps*prod_11(w,3,evalm(Q&*u_),3)-c*r^2*E)&*u_):Costruzione del tensore comple<strong>to</strong>> L5:=array(1..3,1..9):> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> L5[j,k]:=L5_u[j,k]:> od:> for k from 4 <strong>to</strong> 6 do> L5[j,k]:=L5_v[j,k-3]:> od:> L5[j,7]:=L5_l1[j]:> L5[j,8]:=L5_l2[j]:> L5[j,9]:=L5_l3[j]:> od:Verifica> evalm(L5-L5_);[ -9 -9 -9 -9 -9[.8 10, -.4 10, -.7 10, -.2 10, .1 10, 0.,-9 -9 -8].3 10 , -.6 10 , -.12 10 ][ -8 -9 -10 -9 -9[.16 10, -.6 10, 0., -.2 10, -.91 10, -.8 10,-10 -8 -8].6 10 , -.10 10 , -.17 10 ][ -9 -9 -9 -9 -9[-.2 10, .6 10, .4 10, .2 10, 0., .4 10,-10 -9 -8]-.4 10 , .25 10 , .1 10 ]Costruzione del coefficiente comple<strong>to</strong>> L:=array(1..3,1..9,1..9):> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 9 do> for j from 1 <strong>to</strong> 3 do> L[i,j,k]:=L1[i,j,k]:> od:> for j from 4 <strong>to</strong> 6 do> L[i,j,k]:=L2[i,j-3,k]:> od:> L[i,7,k]:=L3[i,k]:> L[i,8,k]:=L4[i,k]:> L[i,9,k]:=L5[i,k]:> od:od:>Passaggio al vet<strong>to</strong>re delle variabili


Algorithms E: Tetrahedral J and H: numerical example 181intermedieIn due passaggii (nominati espansioni perintendere l’occorrere di combinazionilineari fra blocchi in righe ed incolonne):- espansione delle righe> __L:=array(1..3,1..9,1..12):> pimp1_:=L:> pimp2_:=__L:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 9 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:od:od:- espansione delle colonne> _L:=array(1..3,1..12,1..12):> pimp1_:=__L:> pimp2_:=_L:> for i from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 12 do> for j from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for j from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j-3,k]:> od:> for j from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j-3,k]:> od:> for j from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j-3,k]:> od:od:od:> _OTTENUTO_:=comp_23(Ds_Dqi,12,3,1,pimp2_,3,12,12,3):>> #most_3(_L,3,12,12);Verifiche per derivazione direttaCaso L1Costruzione> _L1:=array(1..3,1..3,1..12):> pimp1_:=L1:> pimp2_:=_L1:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:od:od:>OTTENUTO:=comp_23(Ds_Dqi,9,3,1,pimp2_,3,3,9,3):Verifica per derivazione diretta (ancoranel caso particolare del delta lineareelet<strong>to</strong> a riferimen<strong>to</strong>)> fi1_qi:=evalm((-skew(w_us(q1,q2,q3))*sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3)))-eps*tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,h_us(q1,q2,q3)))):> RAD_qi:=sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3))):> GTG_qi:=evalm(tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,w_us(q1,q2,q3))):> fi2_qi:=evalm( (-skew(h_us(q1,q2,q3))-eps*RAD_qi*II) &* (II-2*GTG_qi)*RAD_qi -eps*l2(q1,q2,q3)^2*GTG_qi):> DV_qi:=evalm(crossprod(v_us(q1,q2,q3),u_us(q1,q2,q3))):> dv_qi:=sqrt(op(DV_qi)[1]^2+op(DV_qi)[2]^2+op(DV_qi)[3]^2): # fq giuste> v3Tv1_qi:=evalm(tran(matrix(1,3,v_us(q1,q2,q3)))&*matrix(1,3,u_us(q1,q2,q3))):> sk_v3_qi:=skew(v_us(q1,q2,q3)):> LAM_qi:=m_us(q1,q2,q3):> pimp__:=evalm((1/(dv_qi*RAD_qi))*(-fi2_qi&*sk_v3_qi+fi1_qi&*(LAM_qi*II+v3Tv1_qi))):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp[i,j,k]:=unapply(subs(diff(l2(q1,q2,q3),q1)=0,diff(l2(q1,q2,q3),q2)=0,diff(l2(q1,q2,q3),q3)=0,l2(q1,q2,q3)=l2_,diff(pimp__[i,j],q||k)),q1,q2,q3):> od: od: od:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp_[i,j,k]:=evalf(pimpp[i,j,k](q1_,q2_,q3_)):> od: od: od:> VERIFICA:=pimpp_:#most_3(VERIFICA,3,3,3);> most_3(sum_3(OTTENUTO,comp_03(-1,VERIFICA,3,3,3),3,3,3),3,3,3);-8 -8-.20 10 , -.1 10 , 0.-9 -8 -8.3 10 , -.22 10 , .25 10-8 -9 -8.11 10 , .3 10 , .17 10-8 -9 -8-.28 10 , .4 10 , -.1 10-9 -8 -8-.6 10 , .31 10 , -.25 10-8 -8 -9-.17 10 , -.22 10 , .8 10


182 Algorithms E: Tetrahedral J and H: numerical example-8 -9 -9-.29 10 , -.7 10 , -.2 10-9 -9 -9-.78 10 , .90 10 , -.4 10-8 -80., -.17 10 , .16 10Caso L2Costruzione> _L2:=array(1..3,1..3,1..12):> pimp1_:=L2:> pimp2_:=_L2:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimp2_[i,j,k]:=-pimp1_[i,j,k]:> od:> for k from 4 <strong>to</strong> 6 do> pimp2_[i,j,k]:=pimp1_[i,j,k]+pimp1_[i,j,k-3]:> od:> for k from 7 <strong>to</strong> 9 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:> for k from 10 <strong>to</strong> 12 do> pimp2_[i,j,k]:=-pimp1_[i,j,k-3]:> od:od:od:>OTTENUTO:=comp_23(Ds_Dqi,9,3,1,pimp2_,3,3,9,3):Verifica per derivazione diretta (ancoranel caso particolare del delta lineareelet<strong>to</strong> a riferimen<strong>to</strong>)> fi1_qi:=evalm((-skew(w_us(q1,q2,q3))*sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3)))-eps*tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,h_us(q1,q2,q3)))):> RAD_qi:=sqrt(l2(q1,q2,q3)^2-innerprod(h_us(q1,q2,q3),h_us(q1,q2,q3))):> GTG_qi:=evalm(tran(matrix(1,3,w_us(q1,q2,q3)))&*matrix(1,3,w_us(q1,q2,q3))):> fi2_qi:=evalm( (-skew(h_us(q1,q2,q3))-eps*RAD_qi*II) &* (II-2*GTG_qi)*RAD_qi -eps*l2(q1,q2,q3)^2*GTG_qi):> DV_qi:=evalm(crossprod(v_us(q1,q2,q3),u_us(q1,q2,q3))):> dv_qi:=sqrt(op(DV_qi)[1]^2+op(DV_qi)[2]^2+op(DV_qi)[3]^2): # fq giuste> v1Tv3_qi:=evalm(tran(matrix(1,3,u_us(q1,q2,q3)))&*matrix(1,3,v_us(q1,q2,q3))):> sk_v1_qi:=skew(u_us(q1,q2,q3)):> GAM_qi:=n_us(q1,q2,q3):> pimp__:=evalm((-1/(dv_qi*RAD_qi))*(-fi2_qi&*sk_v1_qi+fi1_qi&*(GAM_qi*II+v1Tv3_qi))):> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp[i,j,k]:=unapply(subs(diff(l2(q1,q2,q3),q1)=0,diff(l2(q1,q2,q3),q2)=0,diff(l2(q1,q2,q3),q3)=0,l2(q1,q2,q3)=l2_,diff(pimp__[i,j],q||k)),q1,q2,q3):> od: od: od:> for i from 1 <strong>to</strong> 3 do> for j from 1 <strong>to</strong> 3 do> for k from 1 <strong>to</strong> 3 do> pimpp_[i,j,k]:=evalf(pimpp[i,j,k](q1_,q2_,q3_)):> od: od: od:> VERIFICA:=pimpp_:#most_3(VERIFICA,3,3,3);> most_3(sum_3(OTTENUTO,comp_03(-1,VERIFICA,3,3,3),3,3,3),3,3,3);-9 -9 -9-.2 10 , .7 10 , .4 10-9 -80. , .8 10 , -.2 10-9 -9 -9.4 10 , -.4 10 , .1 10-9 -9 -9.7 10 , -.2 10 , .1 10-9 -90. , .8 10 , .7 10-9 -8 -8.3 10 , .17 10 , -.107 10-9 -9 -9.4 10 , .20 10 , .3 10-9 -8 -8.4 10 , .10 10 , -.1 10-9 -9 -9.6 10 , .4 10 , .3 10


Bibliography[1] D. Zlatanov, M. Zoppi, and C. Gosselin. Singularities and mobility of a class of 4-dof<strong>mechanisms</strong>. In Advances in Robot Kinematics ARK 2004, pages 105–112, Sestri Levante,Italy, June 28 - July 1 2004. Kluwer (J. Lenarcic and C. Galletti Eds.).[2] M. Zoppi, D. Zlatanov, and C. Gosselin. Kinematics equations of a class of 4-dof <strong>parallel</strong>wrists. In Advances in Robot Kinematics ARK 2004, pages 321–328, Sestri Levante, Italy,June 28 - July 1 2004. Kluwer (J. Lenarcic and C. Galletti Eds.).[3] D. Zlatanov and C. Gosselin. A family of new <strong>parallel</strong> architectures with four degreesof freedom. In F.C. Park and C.C. Iurascu, edi<strong>to</strong>rs, Computational Kinematics, pages57–66, May 2001.[4] Z. Huang and Q.C. Li. Some novel lower-mobility <strong>parallel</strong> <strong>mechanisms</strong>. In 2002 ASMEDesign Engineering Technical Conferences and Computers and Information in EngineeringConference DETC02, Montreal, Canada, 2002.[5] Z. Huang and Q.C. Li. On the type synthesis of lower-mobility <strong>parallel</strong> manipula<strong>to</strong>rs. InWorkshop on Fundamental Issues and Future Research Directions for Parallel Mechanismsand Manipula<strong>to</strong>rs, Quebec City, Canada, 2002.[6] T.L. Saaty. Modern Non-linear Equations. New York (1967), Dover (1981), McGraw-Hill,1981.[7] G. Salmon. Introduc<strong>to</strong>ry <strong>to</strong> the Modern <strong>High</strong>er Algebra. Dublin, Hodges, Smith, and co.,1859.[8] T. Gohberg, P. Lancaster, and L. Rodman. Matrix Polynomials. New York, AcademicPress, 1982.[9] D. Zlatanov, B. Benhabib, and R.G. Fen<strong>to</strong>n. Velocity and singularity analysis of hybridchain manipula<strong>to</strong>rs. In ASME 23rd Biennial Mechaism Conference in DETC94,volume 70, pages 467–476, Minneapolis, MN, USA, 1994.[10] D. Zlatanov, R.G. Fen<strong>to</strong>n, and B. Benhabib. A unifying framework for classification andinterpretation of mechanism singularities. ASME Journal of Mechanical Design, 117:566–572, 1995.[11] D. Zlatanov, I. Bonev, and C. Gosselin. Constraint singularities of <strong>parallel</strong> <strong>mechanisms</strong>.In 2002 IEEE International Conference on Robotics and Au<strong>to</strong>mation, ICRA 2002, pages496–502, Washing<strong>to</strong>n, DC, USA, May 11-15 2002.[12] Kenneth H. Hunt. Kinematic Geometry of Mechanisms. Oxford University Press, 1978.[13] D. Zlatanov. Generalized Singularity Analysis of Mechanisms. PhD thesis, University ofToron<strong>to</strong>, 1998.[14] F. Freudenstein. On the variety of motions generated by <strong>mechanisms</strong>. ASME Journal ofEngineering for Industry, 84:156–160, 1962.[15] J.M. Hervé. The planar-spherical kinematic bond: Implementation in <strong>parallel</strong> <strong>mechanisms</strong>.Technical report, parallemic website, http://www.parallemic.org/Reviews/-Review013.html, January 24 2003.183


184 Bibliography[16] C. Gosselin and J-F. Hamel. The agile eye: A high-performance three-degree-offreedomcamera-orienting device. In International Conference on Robotics and Au<strong>to</strong>mationICRA94, volume 1, pages 781–787, San Diego, CA, USA, May 1994.[17] C.M. Gosselin, E. St Pierre, and M. Gagné. On the development of the agile eye. Roboticsand Au<strong>to</strong>mation Magazine, 3(4):29–37, 1996.[18] E. Cavallo, R.C. Michelini, and R. Molfino. The decommissioning of submerged structures:Pro<strong>to</strong>type equipment design and assessment. In Int. Conf. ISOPE 2004, Toulon, France,May 24-27 2004.[19] S.A. Joshi and L.W. Tsai. Jacobian analysis of limited-dof <strong>parallel</strong> manipula<strong>to</strong>rs. ASMEJournal of Mechanical Design, 124:254–258, 2002.[20] M. Zoppi, L. Bruzzone, R.M. Molfino, and R.C. Michelini. Constraint singularities of<strong>force</strong> transmission in nonredundant <strong>parallel</strong> robots with less than six degrees of freedom.ASME Journal of Mechanical Design, 125(3):557–563, 2003.[21] J-P. Merlet. Les robots parallèles. Éditions Hermès, 1997.[22] J-P. Merlet. Designing a <strong>parallel</strong> robot for a specific workspace. In B. Ravani and J-P.Merlet, edi<strong>to</strong>rs, Computational Kinematics, pages 203–212. Kluwer, 1995.[23] J-P. Merlet. Workspace-oriented methodology for designing a <strong>parallel</strong> manipula<strong>to</strong>r. InIEEE Int. Conf. on Robotics and Au<strong>to</strong>mation, pages 3726–3731, Minneapolis, USA, April24-26 1996.[24] J-P. Merlet. Determination of the orientation workspace of <strong>parallel</strong> manipula<strong>to</strong>rs. Journ.of Intelligent and Robotic Systems, 13:143–160, 1995.[25] O. Ma and J. Angeles. Optimum architecture design of platform manipula<strong>to</strong>rs. In FifthIntl. Conf. on Advanced Robotics, ICAR ’91, volume 2, pages 1130–1135, Pisa, Italy, 1991.[26] T. Huang, D. Whitehouse, and J. Wang. The local dexterity, optimal architecture anddesign criteria of <strong>parallel</strong> machine <strong>to</strong>ols. In First European-American Forum on ParallelKinematic Machines, pages 347–351, Milano, Italy, 31 Aug. - 1 Sept. 1998.[27] C. Gosselin and J. Angeles. The optimum kinematics design of a spherical three-degreeof-freedom<strong>parallel</strong> manipula<strong>to</strong>r. ASME Journal of Mechanisms, Transmissions, and Au<strong>to</strong>mationin Design, 111:202–207, 1989.[28] R.E. Stamper, L.W. Tsai, and G.C. Walsh. Optimisation of a three degrees of freedomtranslational platform for well-conditioned workspace. In IEEE Intl. Conf. on Roboticsand Au<strong>to</strong>mation, pages 3250–3255, Albuquerque, NM, USA, April 21-28 1997.[29] J.H. Park and H. Asada. Concurrent design optimisation of mechanical structure andcontrol for high speed robots. ASME Journal of Dynamic Systems, Measurement andControl, 116:244–256, 1994.[30] L.E. Bruzzone, R.M. Molfino, and M. Zoppi. A cost-effective purely translational <strong>parallel</strong>robot for rapid assembly tasks. In Reimund Neugebauer, edi<strong>to</strong>r, Development Methodsand Application Experience of Parallel Kinematics. Proc. of the 3rd Chemnitz ParallelKinematics Seminar PKS2002, volume 16, pages 429–440. Chemnitz, Germany, April23-25 2002.[31] J-P. Merlet. Singular configurations of <strong>parallel</strong> manipula<strong>to</strong>rs and grassmann geometry.Int. Journal of Robotics Research, 8(5):45–56, 1989.


Bibliography 185[32] D. Zlatanov, I.A. Bonev, and C.M. Gosselin. Constraint singularities as c-space singularities.In J. Lenarcic and F. Thomas, edi<strong>to</strong>rs, Advances in Robot Kinematics: theory andapplications, pages 183–192. Kluwer, 2002.[33] R. Di Gregorio and V. Parenti-Castelli. Mobility analysis of the 3-upu <strong>parallel</strong> mechanismassembled for a pure translational motion. ASME Journal of Mechanical Design, 124:259–264, 2002.[34] M. Zoppi. Analisi ed ottimizzazione geometrica e strutturale di una macchina <strong>parallel</strong>a.Master’s thesis, University of Genova, Genova, Italy, Oc<strong>to</strong>ber 2000.[35] R. Di Gregorio and V. Parenti-Castelli. Mobility analysis of the 3-upu <strong>parallel</strong> mechanismassembled for a pure translational motion. In IEEE Int. Conf. on Robotics andAu<strong>to</strong>mation, pages 520–525, 1999.[36] R. Di Gregorio and V. Parenti-Castelli. A translational 3-dof <strong>parallel</strong> manipula<strong>to</strong>r. InJ. Lenarcic and M.L. Husty, edi<strong>to</strong>rs, Advances in Robot Kinematics ARK 1998, pages49–58, Strobl, Austria, 29 Juin-4 Juillet 1998.[37] D. Zlatanov, I. Bonev, and C. Gosselin. Constraint singularities. Technical report, parallemicwebsite, http://www.parallemic.org/Reviews/Review005p.html, July 5 2001.[38] D. Zlatanov, I. Bonev, and C. Gosselin. Constraint singularities as configuration spacesingularities. Technical report, parallemic website, http://www.parallemic.org/Reviews/-Review005p.html, September 6 2001.[39] J.G. de Jalon and E. Bayo. Kinematic and dynamic simulation of multibody systems. Thereal-time challenge. Springer-Verlag, New York, NY, USA, 1994.[40] W. Blajer. A geometric unification of constrained system <strong>dynamics</strong>. Multibody systems<strong>dynamics</strong>, 1:3–21, 1997.[41] L.W. Tsai. Robot analysis: the mechanics of serial and <strong>parallel</strong> manipula<strong>to</strong>rs. John Wiley& Sons, New York, NY, USA, 1999.[42] L. Rey and R. Clavel. The delta robot: a position paper. Annals of CIRP, 47:347–351,1998.[43] H.J. Franke, D. Hagemann, and U. Hagedorn. Systematic approach <strong>to</strong> the design andselection of joints for <strong>parallel</strong> kinematic structures with design catalogs. In Intl. Workshopon Parallel Kinematic Machines, pages 110–117, Milano, Italy, November 30 1999.[44] L.E. Bruzzone, R.M. Molfino, and M. Zoppi. A discrete event simulation package formodular and adaptive assembly plants. In M.H. Hamza, edi<strong>to</strong>r, 22nd Int. Conf. Modelling,Identification and Control MIC2003, pages 280–282, Innsbruck, Austria, February 10-132003. IASTED/ACTA Press.[45] L.E. Bruzzone, R.C. Michelini, R.M. Molfino, and M. Zoppi. Innovative <strong>parallel</strong> architecturefor <strong>force</strong>-controlled industrial applications. In IASTED International ConferenceModelling, Identification and Control MIC2001, pages 711–713, Innsbruck, Austria, February19-22 2001.[46] J-P. Merlet. The need for a systematic methodology for the evaluation and optimaldesign of <strong>parallel</strong> manipula<strong>to</strong>rs. In Reimund Neugebauer, edi<strong>to</strong>r, Development Methodsand Application Experience of Parallel Kinematics. Proc. of the 3rd Chemnitz ParallelKinematics Seminar PKS2002, volume 16, pages 49–61, Chemnitz, Germany, April 23-252002.


186 Bibliography[47] M.G. Mohamed and J. Duffy. A direct determination of the instantaneous kinematics offully <strong>parallel</strong> robot manipula<strong>to</strong>rs. In ASME Design Engineering Technology Conference,pages ASME paper 83–DET–114, 1984.[48] M.G. Mohamed and J. Duffy. A direct determination of the instantaneous kinematics offully <strong>parallel</strong> robot manipula<strong>to</strong>rs. ASME J. of Mechanisms, Transmissions and Au<strong>to</strong>mationin Design, 107(2):226–229, 1985.[49] V. Kumar. Instantaneous kinematics of <strong>parallel</strong>-chain robotic <strong>mechanisms</strong>. In ASME 21thMechanisms Conference, Mechanism Synthesis and Analysis, pages 279–287, 1990.[50] V. Kumar. Instantaneous kinematics of <strong>parallel</strong>-chain robotic <strong>mechanisms</strong>. ASME J. ofMechanical Design, 114(3):349–358, 1992.[51] S.K. Agrawal. Rate kinematics of in-<strong>parallel</strong> manipula<strong>to</strong>r systems. In IEEE Int. Conf.on Robotics and Au<strong>to</strong>mation ICRA90, pages 104–109 vol.1, 1990.[52] K.H. Hunt. Don’t cross-thread the screw. In Ball-2000 Symposium, University of Cambridgeat Trinity College, Cambridge, July 9-11 2000. CD proceedings.[53] I.A. Bonev, D. Zlatanov, and C.M. Gosselin. Instantaneous kinematics of <strong>parallel</strong>-chainrobotic <strong>mechanisms</strong>. ASME J. of Mechanical Design, 125(3):573–581, 2003.[54] D. Zlatanov, I.A. Bonev, and C.M. Gosselin. Constraint singularities of <strong>parallel</strong> <strong>mechanisms</strong>.In IEEE Int. Conf. on Robotics and Au<strong>to</strong>mation ICRA’02, pages 496–502 vol.1,2002.[55] T.H. Davies. Kirchhoff’s circulation law applied <strong>to</strong> multi-loop kinematic chains. Mechanismand Machine Theory, 16:171–183, 1981.[56] R. Di Gregorio. Rotation singularities in the delta-like manipula<strong>to</strong>rs. In ASME 27thBiennial <strong>mechanisms</strong> and robotics conference in DETC02, Montreal, Canada, September29 - Oc<strong>to</strong>ber 2 2002. CD proceedings.[57] T. Brogårdh. Design of high performance <strong>parallel</strong> arm robots for industrial applications.In Ball-2000 Symposium, University of Cambridge at Trinity College, Cambridge, July9-11 2000. CD proceedings.[58] S. Canfield, R. Soper, C. Reinholtz, and S. Hendricks. Velocity analysis of truss typemanipula<strong>to</strong>rs. In ASME Design and Engineering Technical conference DETC-96, Irvine,CA, USA, August 18-22 1996. CD proceedings.[59] S. Canfield, R. Soper, and C. Reinholtz. Velocity analysis of <strong>parallel</strong> manipula<strong>to</strong>rs bytruss transformations. Mechanism and Machine Theory, 34(4):345–357, 1999.[60] R. Di Gregorio and V. Parenti-Castelli. Mobility analysis of the 3-upu <strong>parallel</strong> mechanismassembled for a pure translational motion. ASME Journal of Mechanical Design, 124:259–264, 2002.[61] L.W. Tsai. Kinematics of a three dof platform with three extensible limbs. In J. Lenarcicand V. Parenti-Castelli, edi<strong>to</strong>rs, Recent Advances in Robot Kinematics, pages 401–410,Portroz, Slovenia, Juin 22-26 1996.[62] R. Di Gregorio and V. Parenti-Castelli. Mobility analysis of the 3-upu <strong>parallel</strong> mechanismassembled for a pure translational motion. In IEEE/ASME International Conference onAdvanced Intelligent Mechatronics AIM’99, pages 520–525, Atlanta, GE, USA, September19-23 1999.


Bibliography 187[63] R. Di Gregorio. Closed-form solution of the position analysis of the pure translational 3-ruu <strong>parallel</strong> mechanism. In 8th Symposium on Mechanisms and Mechanical TransmissionsMTM2000, volume 1, pages 119–124, Timisoara, Romania, September 19-23 2000.[64] R. Clavel. Delta: a fast robot with <strong>parallel</strong> geometry. In 18th International Symposiumon Industrial Robots, pages 91–100, Sydney, Australia, 1988.[65] J.M. Hervé and F. Sparacino. Structural synthesis of <strong>parallel</strong> robots generating spatialtranslation. In Int. Conf. on Advanced Robotics ICAR, pages 808–813, Pisa, Italy, 1991.[66] J.M. Hervé. Design of <strong>parallel</strong> manipula<strong>to</strong>rs via the displacement group. In 9th WorldCongress on the Theory of Machines and Mechanisms, volume 3, pages 2079–2082, Milan,Italy, 1995.[67] M. Zoppi, L. Bruzzone, R. Molfino, and R. Michelini. Position analysis of a class oftranslational <strong>parallel</strong> <strong>mechanisms</strong>. Int. Journal of Robotics and Au<strong>to</strong>mation, 2004.[68] L. Bruzzone, R. Molfino, M. Zoppi, and G. Zurlo. The pride pro<strong>to</strong>type: control layou<strong>to</strong>f a <strong>parallel</strong> robot for assembly tasks. In IASTED International Conference on Modelling,Identification and Control MIC2003, Innsbruck, Austria, February 10-13 2003. CDproceedings.


L A TEX2εc○ PMARTesi %Z%Tesi composta nel labora<strong>to</strong>rio di Progettazione e Misure per la Au<strong>to</strong>mazione e la RoboticaDIMEC – Dipartimen<strong>to</strong> di Meccanica e Costruzione delle MacchineStampata nel mese di marzo anno 2004Università degli StudîGenova, Italia.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!