Home

Documento PDF - Università degli Studi di Padova

image

Contents

1. 6 5 CONNESSIONE E SCAMBIO DATI 61 e Chiama ripetutamente SetupDiEnumDeviceInterfaces per ottenere tutte le informazioni disponibili su un interfaccia SP_DEVICE_INTERFACE_DATA interfaceData BOOL devDetail devDetail SetupDiEnumDeviceInterfaces devInfoSet 0 amp Guid ifaceCounter amp interfaceData e Chiama la funzione SetupDiGetDevicelnderfaceDetail affinch le informazioni ottenute sull interfaccia vengano inserite in una struttura di tipo SP INTERFACE DEVICE DETAIL DATA SP DEVICE INTERFACE DETAIL interfaceDetailData devDetail SetupDiGetDeviceInterfaceDetailA devInfoSet amp interfaceData NULL 0 amp regSize NULL interfaceDetailData struct SP_DEVICE_INTERFACE_DETAIL_DATA_A malloc reqSize devDetail SetupDiGetDeviceInterfaceDetailA devInfoSet amp interfaceData interfaceDetailData reqSize 0 0 Si effettuano due chiamate alla funzione SetupDiGetDeviceInterfaceDetail poi ch non nota a priori la dimensione necessaria per la struttura SP INTERFACE DEVICE DETAIL la prima chiamata termina con un errore ma regSize contiene la dimen sione in byte richiesta per memorizzare la struttura vengono riservati reqSize byte per mezzo della funzione malloc con la seconda chiamata si ottiene effettivamente la struttura desiderata e Chiama la funzione CreateFile per ottenere un handle al HID HANDLE hOb
2. 2 BISON TT if isOnline int for k loopStack counter lt current if motions k type 1 execPose motions k info 0 macro SAVECMD TEXT FILE fpmacro fopen 2 w printf Insert command list nHit enter to quit n char str 80 do printf Enter a string CR to quit n gets str strcat str n add a newline fputs str fpmacro while str n printf Macro Saved n fclose fpmacro EXECCMD TEXT state 1 strcpy macroName 2 return turn TURN HEAD OFFS NUMBER DEGREE TO int joint 2 if 3 if 6 4 actualPosition joint degTo0ffset 4 else if 6 5 actualPosition joint degToOffset 4 else if 6 4 actualPosition joint degToO0ffset 4 offs joint else if 6 5 actualPosition joint degTo0ffset 4 offs joint 18 A FLEX amp BISON SIGN SECTION EYE BRIGHTNESS OFFS NUMBER DEGREE int side 2 int joint 3 if side amp amp joint 1 joint if 1 2 actualPosition joint 6 Oxffff 0x64 0x8000 offs joint else if 1 0 actualPosition joint 6 Oxffff 0x64 1 1 actualPosition joint 6 Oxffff 0x64 TURN SECTION JOINT OFFS NUMBER DEGREE TO int side 2 int joint 3 if side joint switch joint case 4 if 4 if 7 0 actualPosi
3. ONLINEMODE amp RCCOM 87 HidD_GetHidGuid amp Guid devInfoSet SetupDiGetClassDevsA amp Guid 0 0 0x12 questo ciclo permette di identificare il robot in presenza di altri HID collegati al pc while ifaceCounter lt 0x1000 printf ifaceCounter d n ifaceCounter hObject NULL devDetail SetupDiEnumDeviceInterfaces devInfoSet 0 40414 ifaceCounter amp interfaceData error GetLastError printf errore Ox n error if devDetail 0 questa prima chiamata serve a ottenere la reqSize Corretta normale che termini con l errore Ox7A ERROR_INSUFFICIENT_BUFFER devDetail SetupDiGetDeviceInterfaceDetailA devInfoSet amp interfaceData NULL 0 amp regSize NULL error GetLastError printf errore 0x n error printf reqSize d n regSize la chiamata malloc regSize serve a riservare il giusto spazio in memoria per la struttura DEVICE_INTERFACE_DETAIL_DATA_A interfaceDetailData struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A malloc reqSize cbSize 5 dipende da un problema di windows non deve essere cambiato interfaceDetailData gt cbSize 5 ottiene informazioni dettagliate sull interfaccia devDetail SetupDiGetDeviceInterfaceDetailA devInfoSet amp interfaceData interfaceDetailData regSize 0 0 error GetLastError printf errore 0x n error if devDetail 0 crea il file che permette di comunicare col
4. 0x00 Tabella 5 5 Terzo pacchetto 44 5 CONTROLLO IN TEMPO REALE I byte alla posizione JX devono essere contere la posizione a cui si vuole impostare il servomotore o altro sensore rispetto allo zero JX secondo lo schema riportato in figura 5 1 e secondo la legenda in tabella 5 6 JI J2 3 30 7 ss jo AD WE 410 Jll J12 J13 J14 15 20 J16 17 57 Mes Figura 5 1 Mappatura dei servomotori I valori da J1 J18 vanno impostati con 1 gradi a cui si vuole portare ogni servomotore effettuando la conversione da gradi sessagesimali a esadecimale con la formula che verr spiegata nel capito successivo Si fa notare che la posizione zero di alcuni servomotori non corrisponde alla posizione iniziale del robot La posizione J21 contiene il tempo di esecuzione della posa Il valore espresso in cicli di clock del microcontrollore del robot Il suono da riprodurre durante una posa va indicato alla posizione J20 Robovie X riproduce il suono memorizzato nella sua ROM a cui corrisponde il numero impostato 5 5 STRUTTURA DEI PACCHETTI 45 J1 J2 J3 J4 J5 J6 J7 J8 J9 J10 J11 Right Eye LED Left Eye LED Right Shoulder Pitch Left Shoulder Pitch Right Shoulder Roll Left Shoulder Roll Right Elbow Roll Left Elbow Roll Right Thigh Roll Left Thigh Roll Right Thigh Pitch J12 J13 J14 J15 J16 J17 J18 J20 J21 Tabella 5 6 Legenda mappatura Left
5. EOF t if strcmp op POSE 0 t fscanf ptrFile d x Zx x hx hx Ax hx Ax hx Ax hx Ax Ax LK hx x Ax x 4 x Zx hx Ax Ax hx Ax Ax AX AX AX AX Ax amp actualPosition time amp actualPosition anRollR amp actualPosition anPitchR amp actualPosition knPitchR amp actualPosition thPitchR amp actualPosition thRollR amp actualPosition anRollL amp actualPosition anPitchL amp actualPosition knPitchL amp actualPosition thPitchL amp actualPosition thRollL amp actualPosition eyeL amp actualPosition elRollR amp actualPosition shRollR amp actualPosition shPitchR amp actualPosition eyeR amp actualPosition elRollL amp actualPosition shRollL amp actualPosition shPitchL amp actualPosition head amp temp amp actualPosition gyroX amp actualPosition gyroY amp actualPosition mvPitchL amp actualPosition mvPitchR amp actualPosition 1StepRollL amp actualPosition 1StepRollR amp actualPosition rStepRollL amp actualPosition rStepRollR amp actualPosition paceLegL amp actualPosition paceLegR amp actualPosition turnL amp actualPosition turnR amp actualPosition shootAn for i 0 i lt 34 i actualPosition i WORD tmp i fscanf ptrFile s audio if strcmp audio X 0 strcpy audio else fscanf ptrFile s audio2 if strcmp audio2 POSE 0 amp amp strcmp audio2 REPEAT 0 amp amp strcmp audio2 S
6. break case 18 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToO0ffset 5 offs joint else if 7 3 actualPosition joint degToOffset 5 offs joint A FLEX amp BISON actualPosition joint degTo0ffset 5 3 actualPosition joint degToO0ffset 5 if 7 2 actualPosition joint degToOffset 5 offs joint else if 7 3 actualPosition joint degToDffset 5 offs joint break SIGN JOINT PARAMETER OFFS NUMBER int joint 2 switch joint case 21 case 22 if 1 2 actualPosition joint 5 1 t if 1 0 actualPosition joint 5 else if 1 1 actualPosition joint 5 if actualPosition joint gt 256 actualPosition joint 256 break case 23 if 1 2 actualPosition joint 5 1 t if 1 0 actualPosition joint 5 else if 1 1 actualPosition joint 5 break SIGN SECTION JOINT PARAMETER OFFS NUMBER int side 2 int joint 3 if side amp amp joint 1 joint switch joint t case 23 case 24 2 BISON 83 case 25 case 26 case 27 case 28 case 29 case 30 case 31 case 32 case 33 if 81 2 actualPosition joint 86 else if 1 0 actualPositi
7. while j lt 15 rcRead fromRobot BYTES_TO_READ amp bytesRead jets ONLINEMODE amp RCCOM 93 1 0 toRobot 5 0 08 toRobot 7 0 00 toRobot 8 0x00 toRobot 9 0x00 toRobot 10 0x00 toRobot 11 0x02 toRobot 12 0x02 toRobot 13 0x00 toRobot 14 0x00 toRobot 15 0x00 toRobot 16 0x00 rcWrite toRobot BYTES_TO_WRITE while j lt 15 rcRead fromRobot BYTES_TO_READ amp bytesRead jtts 150 toRobot 1 0 55 toRobot 2 0 01 toRobot 3 0 toRobot 4 0 00 toRobot 5 0x10 toRobot 6 0 04 toRobot 7 0 00 toRobot 8 OxOB toRobot 9 0 20 toRobot 10 0 00 toRobot 11 Ox8A toRobot 12 OxEC toRobot 13 OxOF toRobot 14 0 21 toRobot 15 0 toRobot 16 0x01 toRobot 17 0 82 toRobot 18 0x02 toRobot 19 0 86 toRobot 20 Ox7C toRobot 21 0 80 toRobot 22 Ox81 toRobot 23 0 5 toRobot 24 0 02 toRobot 25 0 80 toRobot 26 0 00 toRobot 27 0 18 toRobot 28 0 00 toRobot 29 0 00 toRobot 30 0 05 toRobot 31 0 04 toRobot 32 0 10 rcWrite toRobot BYTES_TO_WRITE amp bytesWritten while j lt 15 rcRead fromRobot BYTES_TO_READ amp bytesRead 1 0 amp bytesWritten 94 A FLEX amp BISON accende il robot portandolo alla po
8. 150 6 6 4 1 _VARCON 0 80 3 _MOTION_INFO POSE4 50 200 6 6 5 1 _POSE 89 0x0000 0x0aa5 0x3e97 0xf5c8 0x0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x2652 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 1111 10000000000000000000000000000001 _MOTION_INFO 50 250 6 6 6 1 _ 89 0 0000 0x0aa5 0x3e97 0xf5c8 0x0000 0 0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0xd9ae 0 0000 0 0000 0 0000 0x0000 0x00c8 0 0100 0 0000 0 0000 0 0000 0X0000 0 0000 0 0000 0X0000 0 0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0 0000 0x0000 0x0000 0 0000 0x0000 0 0000 0 0000 0 0000 0 X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 1 1111 10000000000000000000000000000001 _ _ CALCULATION6 50 3001 6 6 71 1 _VARCON 2 80 1 _MOTION_INFO 1 7 50 350 6 6 4 8 MIF 4 80 0 _ _ CALCU
9. ANKLE ROLL R VOICE TIME J struct joints actualPosition 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DWORD bytesWritten DWORD bytesRead bool init t int j O int i O while i lt MAX_BUF_SIZE toRobot i 0x00 itt toRobot 1 0x55 toRobot 2 0x01 toRobot 3 OxEO toRobot 4 0x00 ONLINEMODE amp RCCOM 91 toRobot 5 0 10 toRobot 6 0 04 toRobot 7 0 00 toRobot 8 OxOb toRobot 9 0 20 toRobot 10 0 00 toRobot 11 Ox8A toRobot 12 OxEC toRobot 13 0x08 toRobot 14 0x09 toRobot 15 0 toRobot 16 0 00 toRobot 17 0 20 toRobot 18 0 04 toRobot 19 0 14 toRobot 20 0 04 rcWrite toRobot BYTES_TO_WRITE amp bytesWritten prima di mandare un nuovo pacchetto legge le risposte del robot numero variabile ma comunque sempre minore di 15 while j lt 15 rcRead fromRobot BYTES_TO_READ amp bytesRead ats 0 toRobot 13 0 14 toRobot 14 0 11 toRobot 17 0 28 toRobot 18 OxOE toRobot 19 OxCO toRobot 20 0 01 toRobot 21 0 2 toRobot 22 0 02 toRobot 23 0 toRobot 24 0 00 toRobot 25 0 04 toRobot 26 0 02 toRobot 27 OxOE toRobot 28 0 04 toRobot 29 0 0 toRobot 30 0 05 toRobot 31 0 04 toRobot 32 0 10 rcWrite toRobot BYTES_T
10. initial eyeR gt gt 8 BYTE initial elRollL BYTE initial elRollL gt gt 8 BYTE initial shRollL BYTE initial shRollL gt gt 8 BYTE initial shPitchL BYTE initial shPitchL gt gt 8 BYTE initial head BYTE initial head gt gt 8 i O while i lt MAX_BUF_SIZE toRobot2 i 0x00 toRobot2 1 toRobot2 2 toRobot2 5 toRobot2 7 toRobot2 10 toReturn toReturn amp amp rcWrite toRobot2 i O 0x55 0x13 BYTE initial voice Oxc8 0x01 while 1 BUF SIZE t BYTES_TO_WRITE BYTES_TO_WRITE amp bytesWritten amp bytesWritten 96 A FLEX amp BISON toRobot3 i 0x00 itt toRobot3 1 0x55 toRobot3 2 0x23 toRobot3 7 0x80 toRobot3 9 0x04 toRobot3 14 0x80 toRobot3 16 0x02 toRobot3 17 toReturn BYTE initial time toReturn amp amp rcWrite toRobot3 return toReturn bool doMovements t bool toReturn toReturn toReturn toReturn false rcWrite toRoboti toReturn amp rcWrite toRobot2 toReturn amp rcWrite toRobot3 return toReturn bool off bool toReturn int i 0 false while 1 BUF SIZE toRobot i itt toRobot 1 toRobot 2 toRobot 3 toRobot 4 toRobot 5 toRobot 6 toRobot 7 toRobot 8 toRobot 9 toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot
11. 0000 0 0000 0 0000 0 0000 0X0000 0 0000 0 0000 0 0000 0 00001 1111 000000000000000000000000000000 n n for i 2 i lt current 1 switch motions i type 4 case 1 fprintf fp _MOTION_INFO POSE 4 50 a 6 6 a 1 n i i 50 motions i next1 fprintf fp _POSE 44 0x 04x 0 704 0x 04x 0 704 0 04 0X0000 0x 04x 0x404x 0 704 0x 04x 0x 04x 0X0000 0x 04x 0 0000 0 0000 0x 04x 0 x 04x 0 04 0 04 0 0000 0 0000 0x 04x 0x 04x 0x 04x 0 0000 0 X0000 0 04 0 0000 0 0000 0 0000 0x0000 0 04 0 04 0 0000 0 X0000 0 0000 0 0000 0 0000 0 0000 0X0000 0 0000 0 0000 0x 04x Ox 404x 0x 04x 0x 04x 0 704 0x 04x 0 04 0x 04x 0 04 0x 04x 0 X0000 0x 04x 0 0000 0 0000 0 0000 0X0000 0 0000 0X0000 0X0000 0 x0000 s 000000000000000000000000000000 n n motions i info time motions i info anRollR motions il info anPitchR motions i info knPitchR motions il info thPitchR motions il info thRollR motions i info anRollL motions i info anPitchL motions il info knPitchL motions i info thPitchL motions il info thRollL motions i info eyeL motions i info elRollR motions il info shRollR motions i info shPitchR motions i info eyeR motions il info elRollL motions i info shRollL motions il info shPitchL motions i info head motions i info gyroX motions i i
12. 0x00 0x00 0x00 0x00 J7 J7 J5 J5 J3 J3 J1 J1 0x00 0x00 0x00 0x00 J8 J8 J6 J6 J4 J4 0x00 0x00 0x00 0x00 JO JO 0x00 0x00 0x00 0x00 Tabella 5 3 Primo pacchetto 0x55 0x13 0x00 0x00 J20 0x00 0xC8 0x00 0 00 0 01 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 Tabella 5 4 Secondo pacchetto 0 55 0 23 0 00 0 00 0 00 0 00 0 80 0 00 0x04 0x00 0x00 0x00 0x00 0x80 0x00 0x02 J21 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
13. 3 2 3 ANALISI DEI FILE DI OUTPUT 19 Identificativo Operazione 0 Assegnazione 1 Addizione 2 Sottrazione 3 Moltiplicazione 4 Divisione Tabella 2 1 Corrispondenza tra identificativo e operazione 2 3 4 Blocco di salto condizionato Le variabili utilizzabili nel blocco di salto condizionato vanno dalla 0 alla 255 L istruzione che va a completare l intestazione del blocco la seguente MIF Condizione Variabile di riferimento Valore di riferimento Nel campo Variabile di riferimento possibile specificare delle opzioni avanzate selezionabili dalle propriet del blocco in RobovieMaker Identificativo Condizione 0 Non Definita Maggiore Minore Controllo dei bit Uguale Diverso Sempre Vero NPD OT ch FR Sempre Falso Tabella 2 2 Corrispondenza tra identificativo e condizione _MOTION_INFO 1 52 243 16 46 3 1 _ 2 1 3 2 3 5 Blocco di inizio e blocco di fine Per i blocchi di inizio e di fine vengono riportate le definizioni comprensive dell in testazione Si ricorda che il blocco di inizio non pu essere puntato da nessun altro blocco e che il blocco di fine non pu avere dei flussi in uscita 20 2 ROBOVIEMAKER2 MOTION INFO 11 50 101 6 1 0 11 1 _STARTMOT _MOTION_INFO
14. END 1 50 600 16 46 4 1 _ENDMOT Capitolo 3 Flex amp Bison 3 1 Introduzione Per la realizzazione del traduttore dal linguaggio pseudo naturale al file di comandi per il robot umanoide Robovie X si scelto di utilizzare gli strumenti Flex amp Bison Questi solitamente usati in coppia sono due strumenti che consentono di generare automaticamente il parser data la grammatica di un linguaggio e le espressioni rego lari dei token Flex e Bison non sono in grado di generare un compilatore completo richiedono codice C C di supporto per le parti non strettamente sintattiche En trambi sono dei generatori di codice ad alto livello normalmente generano codice C che poi deve essere compilato insieme al codice di supporto scritto esplicitamente 3 2 Flex Analisi Lessicale Flex genera programmi scritti in codice C atti ad elaborare sequenze di caratteri in ingresso Questo strumento accetta specifiche ad alto livello orientate al problema del riconoscimento di stringhe di caratteri e produce un programma che riconosce lin guaggi definiti da espressioni regolari le quali sono specificate dal programmatore nel sorgente delle specifiche di Flex Il codice prodotto quindi segmenta una sequenza di caratteri fornita in ingresso producendo un elemento per ogni sottosequenza che costituisce una stringa Al riconoscimento di una stringa viene eseguita una porzio ne di codice definita dal programmatore as
15. il nome delle parti del corpo del robot prima di tutto e poi tutte le parole chiave di controllo Il robot umanoide Robovie X viene scomposto in 17 giunti in cui il primo corri sponde alla testa mentre i rimanenti 16 sono costituiti da due blocchi da 8 perch simmetrici tra destra e sinistra Qui sotto vengono riportati i nomi specifici per ogni servomotore con la relativa traduzione in lingua inglese poich sar quella utilizzata per l implementazione testa head spalla shoulder braccio arm polso elbow anca hip coscia thigh ginocchio knee polpaccio calf caviglia ankle Di norma la prima parola con cui inizia una frase che il traduttore in grado di decodificare indica quale azione deve eseguire il robot oppure se viene richiesta la modifica di un parametro Nella pratica il comando muovi in inglese move e il comando ruota o gira in inglese turn coincidono nel senso che comunque utiliz zando una oppure l altra il risultato non cambia Altre parole chiave sono aumenta diminuisci e imposta le quali sono usate prevalentemente per l impostazione dei parametri ad esempio il guadagno dei giroscopi ed in via del tutto eccezionale anche per la luminosit dei led del Robovie X muovi move ruota turn aumenta increase diminuisci decrease imposta set Un ultimo aspetto ma non meno importante riguarda la direzione verso il quale un arto del Robovie X deve spostarsi ver
16. next1 succ currentt actualPosition time 50 Saves a calculation block into the struct void saveCalculation int op int index int value int succ motions current type 2 motions current info 1 op motions current info 2 index motions current info 3 value succ current 1 motions current next1i succ currentt Saves an if block into the struct void savelf int op int index int value int jump 1 int succ motions current type 3 motions current info 1 op motions current info 2 index motions current info 3 value motions current next2 jump 2 BISON 73 current 1 motions current next1 succ currentt Prints in text file output txt the commands for Robovie X void toString x int i fprintf fp MOTION FORMAT POSEDEF V1R4 Nn ENABLE AXIS 62 Nn Nn MOTION INFO 7 50 10 6 0 11 1 N n STARTMOT fprintf fp _MOTION_INFO POSE1 50 43 61 6 2 1 _ 50 0 0000 5 0x3e97 0xf5c8 0 0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 0000 0X0000 0 x0000 0 0000 0X0000 0x1d61 0 3680 0x0000 0x0000 0 0000 0X0000 0xe29f 0xc980 0 x0000 0 0000 0X0000 0x0000 0X0000 0 0000 0X0000 0x0000 0x00c8 0x0100 0 0000 0 0000 0 0000 0 0000 0X0000 0X0000 0 0000 0 0000 0X0000 0x0000 0x0000 0x0000 0 0
17. 0 9 DIGIT DIGIT equivalente a 0 9 0 9 La sezione delle regole di ingresso di Flex contiene una serie di regole della forma lo schema pattern che non deve essere identato e l azione action che deve iniziare sulla stessa linea Infine la sezione del codice utente viene semplicemente copiata nel file lex yy c La presenza di questa sezione facoltativa e se mancante le seconde nel file di input possono anche essere ignorate Gli schemi per le sequenze di ingresso vengono scritti utilizzando un insieme esteso di espressioni regolari 3 2 FLEX ANALISI LESSICALE 23 Schema Descrizione x riconosce il carattere x qualsiasi carattere byte ad eccezione di nuova riga xyz una classe di caratteri questo schema riconosce x z abj oZ una classe di caratteri con un intervallo riconosce una una qualsiasi lettera da j a o oppure la Z A Z una classe di caratteri negata in questo caso riconosce ogni carattere escluse le lettere maiuscole A Z n una classe di caratteri negata in questo caso riconosce ogni carattere escluse le lettere maiuscole e del carattere di nuova riga r riconosce 0 o pi r dove r un espressione regolare r riconosce una o pi r r riconosce zero o pi r r opzionale r 2 5 riconosce qualsiasi numero di r da 2 a 5 r 2 riconosce 2 o pi r r 4 riconosce esatt
18. 00 0 00 Tabella 5 8 Secondo pacchetto 46 5 CONTROLLO IN TEMPO REALE 0x55 0x23 0 00 0 00 0 00 0 00 0 80 0 00 0x04 0x00 0x00 0x00 0x00 0x80 0x00 0x02 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 Tabella 5 9 Terzo pacchetto Capitolo 6 Realizzazione del traduttore Manuale Questo capitolo ha come obiettivo quello di fornire a chi fosse interessato le in formazioni necessarie a comprendere il funzionamento del traduttore al fine di mo dificarlo o espanderne le funzionalit I requisiti necessari per tale scopo sono una buona conoscenza del linguaggio C e degli strumenti Flex 67 Bison 6 1 Mylexer l Come stato gi spiegato nel capitolo precedente relativo allo strumento Flex il file mylexer l ha la funzione di eseguire l analisi lessicale del linguaggio naturale La struttura del file divisa in tre sezioni definizioni regole e codice utente ma per nell implementazione relizzata la parte relativa al codice utente non stata utilizzata perch non
19. 0x0000 0xff26 0xc169 0x3318 0 x0000 0X0000 0x0000 0X0000 0X0000 0xf99d 0x2fb0 0xc4d1 0x0000 0X0000 0X0000 0 xe29f 0xd050 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 X Voice Files Other Hello wav 000000000000000000000000000000 _MOTION_INFO POSE12 50 600 6 6 13 1 _ 50 0x0000 0x0589 0 3 97 0xe158 0x0000 0X0000 0x0000 0xfa77 0xc169 0 1 8 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1b40 0x2fb0 0xc4d1 0x0000 0X0000 0X0000 0 xe29f 0xd050 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0X0000 1 1111 10000000000000000000000000000001 _MOTION_INFO 0 1 50 650 6 6 14 1 _ 50 0 0000 0 5 0 3 97 0xf5c8 0x0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0
20. Bisogna tenere presente che i numeri che vengono assegnati ai blocchi sono in ordine di come questi vengono salvati sul file di output inoltre la differenza tra la la singola parentesi quadra o e la doppia parentesi quadra o significa che nel secondo caso se non presente il dato questo viene ignorato mentre nel primo caso viene generato un errore 2 3 1 Blocco Posa Il blocco posa oltre all intestazione contiene e un primo parametro che corrisponde al tempo di transizione che deve essere compreso tra 1 e 239 e una lista di 62 valori esadecimali che stanno ad indicare la posizione dei cursori e di conseguenza la posizione dei servomotori o dei controlli sulla scheda di espansione I parametri vanno dallo 0 esimo al 61 esimo sono tutti indicati con 4 cifre anche se queste dovessero essere tutte zero e sono separati da una 18 2 ROBOVIEMAKER2 virgola E importante sottolineare una differenza tra i parametri che iniziano 0x e 0 2777 i primi sono valori modificabili in quanto rappresentano la posizione di un giunto o il valore di un sensore i secondi sono valori non modificabili e quindi sempre costanti e un campo per inserire il percorso file audio da riprodurre e un numero binario a 30 cifre dalla 0 esima alla 29 esima che indica se un servomotore acceso o spento dove 1 corrisponde a motore spento e 0 a motore acceso MOTION INFO POSE 011 1501 110
21. KNEE_PITCH_ toRobot1 23 toRobot1 24 KNEE_PITCH_ toRoboti 11 toRoboti 12 ANKLE PITCH toRobot1 21 toRobot1 22 ANKLE_PITCH toRobot1 9 toRobot1 10 ANKLE_ROLL_ toRobot1 19 toRobot1 20 ANKLE_ROLL_ toRobot1 7 toRobot1 8 NOICE toRobot2 5 LL_L BYTE actualPosition 6 actualPosition 6 gt gt 8 LL_R BYTE actualPosition 7 actualPosition 7 gt gt 8 BYTE actualPosition 8 actualPosition 8 gt gt 8 BYTE actualPosition 9 actualPosition 9 gt gt 8 BYTE actualPosition 10 actualPosition 10 gt gt 8 BYTE actualPosition 11 actualPosition 11 gt gt 8 LIL BYTE actualPosition 12 actualPosition 12 gt gt 8 R BYTE actualPosition 13 actualPosition 13 gt gt 8 BYTE actualPosition 14 actualPosition 14 gt gt 8 BYTE actualPosition 15 actualPosition 15 gt gt 8 Ri BYTE actualPosition 16 actualPosition 16 gt gt 8 LIE BYTE actualPosition i7 actualPosition 17 gt gt 8 BYTE actualPosition 18 actualPosition 18 gt gt 8 BYTE actualPosition 19 actualPosition 19 gt gt 8 BYTE actualPosition 20 100 A FLEX amp BISON pose execution toReturn doMovements return toReturn Bibliografia e RobovieMaker2 User Guide ATR Vstone Co Ltd 2008 e Robovie X Assembly Manual Vstone ver 1 11b e Lexical Ana
22. Thigh Pitch Right Knee Pitch Left Knee Pitch Right Ankle Pitch Left Ankle Pitch Right Ankle Roll Left Ankle Roll Voice Time Si riporta ora come esempio i tre pacchetti che portano il robot nella posizione iniziale 0x55 0x03 0 0 01 0 00 0 7 0 00 0 00 0 5 0 0 0 97 0 3 0xC8 0 5 0 00 0 00 0 00 0 00 0 00 0 00 0x5B 0 5 0 69 0 1 0 38 0 0 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 61 0x1D 0 80 0 36 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0x9F 0xE2 0 80 0 9 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 Tabella 5 7 Primo pacchetto 0x55 0 13 0 00 0 00 0 00 0 00 0 8 0 00 0 00 0 01 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0 00 0
23. actualPosition joint degToO0ffset 5 offs joint break case 9 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToO0ffset 5 offs joint else if 7 3 actualPosition joint degToOffset 5 offs joint 1 break case 10 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 80 A FLEX amp BISON else t if 7 2 actualPosition joint degToOffset 5 offs joint else if 7 3 actualPosition joint degToDffset 5 offs joint break case 11 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToO0ffset 5 offs joint else if 7 3 actualPosition joint degToOffset 5 offs joint 1 break case 12 if 4 if 7 0 actualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 factualPosition joint degToOffset 5 offs joint else if 7 1 actualPosition joint degToO0ffset 5 offs joint break case 13 if 4 t if 7 0 factualPosition joint degTo0ffset 5 else if 7 1 actualPositi
24. dello scheletro del robot permettono di eseguire ogni tipo di movimento dai pi semplici ai pi complessi Le caratteristiche dei servomotori sono e Dimensioni 38 x 19 x 38 5 mm e Torsoine 9 2 kg cm Velocit 60 gradi 0 11 s Peso 42 g e Massimo Angolo Operazionale 180 gradi Voltaggio Operativo 4 V 9 V Sistema di Controllo PWM x10 x EX 1 ye Figura 1 3 I servomotori 1 4 La scheda di controllo La scheda montata sul Robovie X di tipo VS RC003HV monta una CPU ARM LPC2148FBD64 ed ha la possibilit di essere espansa aggiungendo delle schede di espansione o dei controller aggiuntivi e Tipo VS RC003HV e CPU LPC2148FBD64 60MHz clock 14 LA SCHEDA DI CONTROLLO 7 e Memoria 512 kB ROM 64 kB RAM e Porte 30 x PWM analogiche 1 x USB e Altre caratteristiche Supporto di controllo compatibile con game pad e controllori ProBo Porta di espansione include 1 porta IXBUS Audio 2 W output Sincronizzazione con il suono l audio e i movementi possono essere sin cronizzati Figura 1 4 La scheda VS RC003HV Il processore montato sulla CPU un microprocessore general purpose a 32 bit che offre alte prestazioni ed un consumo energetico molto basso L architettura ARM basata sul principio Reduced Instruction Set Computer RISC e il set di istruzioni utilizza un meccanismo di decodifica molto pi semplice di quello microprogrammato Il
25. guadagni dei giroscopi e dei controlli Questi vengono utilizzati principalmente per lo sviluppo di movimenti complessi ed avanzati dove i semplici comandi non sono sufficienti gyrox gyroy shootanalog pitchmove rolllstep rollrstep legpace turnctr Come si fatto per gli arti simmetrici e non simmetrici sono state implementate due sintassi una con il parametro lato e una senza rispettivamente nella frase che rappresenta il comando si sono utilizzati i medesimi comandi per l azione che sono stati usati per gli occhi cio aumenta diminuisci e imposta e un ultimo parametro che indica se la modifica riguarda un controller oppure se un guadagno azione lato sensore tipo preposizione numero 4 3 Suoni Una ulteriore analisi stata fatta sulla possibilit di riprodurre i suoni caricati nella memoria ROM del robot utilizzando il traduttore Utilizzando la particolare sintassi che viene riportata qui sotto l utente pu scegliere quale traccia audio far riprodurre 4 4 VELOCIT DEI MOVIMENTI 31 al robot durante una posa indicando la cartella che contiene il file audio e il nome del file audio stesso dopo aver specificato eventualmente altre azioni utilizzando la parola chiave playing playing cartella file 4 4 Velocit dei movimenti anche possibile come nel RobovieMaker impostare la velocit di transizione per un blocco posa Si ricorda che prima bisognava p
26. loopStack counter loadFile movs goback3 txt break case 4 loadFile movs goright1 txt saveCalculation 0 80 counter 2 loopStack counter current counter loadFile movs goright2 txt ONLINEMODE amp RCCOM 85 counter saveCalculation 2 80 counter 1 saveIf 4 80 counter 0 loopStack counter loadFile movs goright3 txt break case 5 loadFile movs goleftl txt saveCalculation 0 80 counter 2 loopStack counter current countert loadFile movs goleft2 txt counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0 loopStack counter loadFile movs goleft3 txt break exit EXIT toString state 2 return hh OnlineMode amp Listing A 3 reCom h include lt windows h gt include lt stdbool h gt i define sevono a definire la posizione iniziale una posizione iniziale caricata da file viene determinata a partire da questa che E salvata nella rom del robot define BYTES_TO_READ 65 define BYTES_TO_WRITE 65 define MAX_BUF_SIZE 64 define HEAD_YAW 0x0000 define EYE_LED_L 0 0000 define EYE_LED_R 0 0000 define SHOULDER_PITCH_L 0x0000 define SHOULDER_PITCH_R 0x0000 define SHOULDER_RDLL_L 0xC980 define SHOULDER_ROLL_R 0x3680 define ELBOW_ROLL_L 0 29 86 A FLEX amp BISON define ELBOW_ROLL_R OX1
27. necessaria 6 1 1 Definizioni Il primo pezzo di codice riguarda la parte di definizione dei singoli caratteri che formano le parole del linguaggio utilizzato allo scopo di rendere pi semplici le specifiche per lo scanner nelle sezioni successive Seguendo la sintassi prevista per Flex viene indicato prima il nome della definizione e poi la definizione vera e propria aA B bB 48 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO 6 1 2 Regole Dopo le definizioni e il sibolo inizia la parte relativa alle regole cio dove le parole inserite dall utente vengono riconosciute e a seconda dell input ricevuto viene generato un token Di seguito si riporta come viene mappato in uscita ogni parola lecita in ingresso al traduttore e Numero nel caso in cui venga inserito un numero la union yylval viene utilizzata per passare al parser il valore associato al token corrente ovvero NUMBER 0 9 yylval number atoi yytext return NUMBER e Servomotori anche per i servomotori viene associato un numero diverso che corrisponde ad un servomotore diverso La scelta dovuta dal fatto che succes sivamente nel file Bison viene utilizzato il costrutto swtch case per riconoscere il giunto su cui si sta operando cosa che non possibile fare utilizzando i ca ratteri alfabetici Inoltre si osserva che i valori restituiti non sono sempre consecutivi nel caso in cui un servomotore o un se
28. qualche azione esegue una istruzione di return Tra i vari scopi per cui stato progettato Flex il pi importante il suo utilizzo insieme all analizzatore sintattico Bison che si aspetta di chiamare una routine chia mata yylex per trovare il prossimo token da analizzare Per utilizzare Flex insieme a Bison bisogna specificare l opzione d sulla riga di comando quando si compila il file dell analizzatore sintattico per generare il file y tab h che contiene la definizione di tutti i token che possono apparire in input a Bison 3 3 Bison Analisi Sintattica Bison utilizza regole grammaticali fornite dal programmatore allo scopo di analiz zare nella fase di analisi sintattica 1 token restituiti da Flex Questi devono essere organizzati secondo le regole di struttura dell ingresso che prendono il nome di regole grammaticali quando una di queste regole viene usata per ridurre l ingresso viene invocata un azione cio viene invocato il codice utente relativo alla regola 3 3 BISON ANALISI SINTATTICA 25 Una struttura riconosciuta dall analizzatore lessicale chiamata simbolo termi nale mentre una struttura riconosciuta dal parser chiamata simbolo non terminale Nella grammatica formale di Bison un simbolo non terminale viene rappresentato in ingresso come un identificatore e per convenzione viene scritto in minuscolo men tre la rappresentazione in Bison per un simbolo terminale viene detta token Per convenzione questi id
29. robot che permette di scegliere numerose impostazioni e preferenze come l utilizzo di servomotori controller e schede di espansione Questo software include anche una interfaccia grafica GUI di pannelli utili per creare i movimenti utilizzando la scheda VS RC003 Le specifiche minime richieste per l installazione sono Sistema Operativo Microsoft Windows 2000 XP Vista 7 e Processore Pentium III almeno 1 GHz o superiore e Memoria 128 MB RAM o superiore e Interfaccia porta USB Display XGA 1024x768 o superiore RobovieMaker un marchio registrato di propriet di ATR 10 2 ROBOVIEMAKER2 Robovie X RobovieMaker2 New motion File F Edit E Communicate C Motion M Play L Project preferences D Help H Ba Lon ton N Ius DUP DEL 9 3 4 100 Apply unused Figura 2 1 RobovieMaker2 2 2 Creare i movimenti Creare i movimenti del robot come la camminata bipede e alzarsi da terra lo scopo principale per cui questo programma stato sviluppato 2 2 1 Schema della Pose Area possibile creare movimenti nella Pose Area e nella Motion Area che sono le aree importanti per utilizzare questo software La Pose Area quella parte del program ma dove si possono impostare le posizioni dei singoli servomotori mentre la parte destra dello schermo dov presente lo schema a blocchi prende il nome di Motion Area Per c
30. state e macroName terminando la funzione yyparse e ritornando al main che si occupa dell esecuzione vera e propria della macro L implementazione del metodo main descritta nella sezione successiva macro SAVECMD TEXT FILE fpmacro fopen 2 w printf Insert command list nHit enter to quit n char str 80 6 3 METODO MAIN O 59 gets str strcat str Nn add a newline fputs str fpmacro while str n printf Macro SavedNn fclose fpmacro EXECCMD TEXT 4 state 1 strcpy macroName 2 return 6 3 Metodo main Il metodo main quello che realizza il parsing delle istruzioni e che coordina le attivit di apertura e chiusura del file di output La funzione principale si occupa del lettura e del parsing dei token ricevuti in input attraverso stream o file a cui punta yyin Durante la normale esecuzione del traduttore yyin un puntatore a stdin stan dard input e il parsing viene eseguito sulle istruzione digitate nella finestra di dialo go Quando viene richiamata una macro il main si occupa di creare un puntatore al file che la contiene copiare il puntatore in yyin reinizializzare il parser con il nuovo input e avviare il parsing con la chiamata a yyparse int main void fp fopen FILE OUTPUT w while state 0 yyin stdin yyrestart yyin
31. sviluppare un interfaccia grafica Appendice A Flex amp Bison A 1 Flex Listing A 1 mylexer l nt include lt stdio h gt include lt string h gt include myparser tab h ht Zoption yylineno aAt bB cC dD eEEE fF gG hH il jJ kK 1L mM nN 00 pP qQ rR sS tT vv wW xX yY zZ N lt CG 8 QO O S H 0 m b D G hh 68 A FLEX amp BISON 0 9 yylval number atoi yytext return NUMBER stop return STOP exit return EXIT and return AND LR return DOT Nt ignore whitespace move turn increase decrease set right left head eye led shoulder arm elbow hip thigh knee calf ankle gyrox gyroy shootanalog pitchmove rolllstep rollrstep legpace turnctrl degree s millisecond s ms ofl at to in forward front ahead back ward in ward side out side rightward leftward reset onlineloffline brightness repeat time s gain control play ing save Nt macro Nt exec Nt macro Nt return TURN yylval number 0 return SIGN yylval number 1 return SIGN yylval number 2 return SIGN yylval number strcmp yytext right yylval number 1 return HEAD yylval number 2 return EYE yylval number 4 return JOINT yylval number 6 return JOINT yylv
32. toRobot1 11 toRobot1 12 toRobot1 13 toRobot1 14 toRobot1 15 toRobot1 16 toRobot1 19 toRobot1 20 toRobot1 21 toRobot1 22 toRobot1 23 toRobot1 24 toRobot1 25 toRobot1 26 toRobot1 27 toRobot1 28 toRobot1 31 toRobot1 32 toRobot1 37 toRobot1 38 toRobot1 39 toRobot1 40 toRobot1 41 toRobot1 42 toRobot1 43 toRobot1 44 toRobot1 49 toRobot1 50 toRobot1 51 toRobot1 52 toRobot1 53 toRobot1 54 toRobot1 59 toRobot1 60 toReturn toReturn amp amp rcWrite toRobotl OxEO 0x01 0 7 BYTE initial anRollR BYTE initial anRollR gt gt 8 BYTE initial anPitchR BYTE initial anPitchR gt gt 8 BYTE initial knPitchR BYTE initial knPitchR gt gt 8 BYTE initial thPitchR BYTE initial thPitchR gt gt 8 BYTE initial thRollR BYTE Cinitial thRollR gt gt 8 BYTE initial anRollL BYTE initial anRollL gt gt 8 BYTE initial anPitchL BYTE initial anPitchL gt gt 8 BYTE initial knPitchL BYTE initial knPitchL gt gt 8 BYTE initial thPitchL BYTE initial thPitchL gt gt 8 BYTE initial thRollL BYTE initial thRollL gt gt 8 BYTE initial eyeL BYTE initial eyeL gt gt 8 BYTE initial elRollR BYTE initial elRol1lR gt gt 8 BYTE initial shRollR BYTE initial shRollR gt gt 8 BYTE initial shPitchR BYTE initial shPitchR gt gt 8 BYTE initial eyeR BYTE
33. x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 1111 10000000000000000000000000000001 MOTION INFO CCALCULATION14 50 700 6 6 15 1 _VARCON 2 80 1 _MOTION_INFO 1215 50 750 6 6 9 16 MIF 4 80 0 _MOTION_INFO END 11 1501 18001 1161 1461 1 11 1 11 _ENDMOT 4 11 Tuttii comandi In questa sottosezione sono riportati in lingua inglese tutti i comandi che il tradut tore in grado di riconoscere 4 11 TUTTI COMANDI 37 Testa move head of 30 degrees leftward playing Other Explosion turn head at 60 degrees rightward in 3000 ms Occhio set left eye brightness at 90 increase right eye brightness of 10 and decrease left eye brightness of 30 Spalla repeat 5 times move left shoulder of 45 degrees forward turn right shoulder at 15 degrees backward stop Braccio move left arm of 45 degrees inward turn right arm at 15 degrees outward Polso move left elbow of 45 degrees inward turn right elbow at 15 degrees outward Anca move left hip of 45 degrees inward turn right hip at 15 degrees outward Coscia move left thigh of 45 degrees forward turn right thigh at 15 degrees backward Ginocchio move left knee of 45 degrees forward turn right knee at 15 degrees backward Polpaccio move left calf of 45 degrees forwar
34. yyin yyparse state 0 fclose yyin yylex_destroy fclose fp return 0 ht token TURN STOP EXIT AND DOT BRIGHTNESS PARAMETER PLAY STEP FRONTFLIP BACKFLIP token DEGREE MILLISECOND ININ TIMES REPEAT RESET GREETINGS YAWN WALK DANCE GUFFU GUFFD token SAVECMD EXECCMD hunion int number char string 76 A FLEX amp BISON token number NUMBER Ztoken number HEAD token number EYE token number SECTION 4token number JOINT Ztoken number OFFS token number TO 4token number SIGN token lt string gt TEXT token number ONLINE hh commands commands command errore error printf Error command stop turn online macro exit turn AND turn DOT turn tempo turn tempo AND turn tempo DOT savePose turn audio turn audio AND turn audio DOT savePose turn tempo audio turn tempo audio AND turn tempo audio DOT savePose turn audio tempo turn audio tempo AND turn audio tempo DOT savePose repeat reset movements repeat REPEAT NUMBER TIMES saveCalculation 0 80 counter 2 loopStack counter current countert 5 online ONLINE if 1 char check 0 11 60 else printf vado offline goOffline stop STOP counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0 loopStack counter
35. 000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0X0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 000000000000000000000000000000 n n for i 2 i lt current i T switch motions il type 4 case 1 fprintf fp _MOTION_INFO POSE d 50 a 6 6 d 1 n i i 50 motions i next1 fprintf fp _POSE 4 0x 04x Ox 404x 0x 04x Ox 04x 0x 04x 0X0000 0x 04x 0 x 04x 0x 04x 0x 04x 0x 04x 0X0000 0x 04x 0X0000 0X0000 0x 04x 0x 04x 0x 404 0x 04x 0X0000 0X0000 0x 04x 0x 04x 0x 04x 0X0000 0 0000 0 04 0 X0000 0X0000 0X0000 0x0000 0x 04x 0x 04x 0X0000 0X0000 0X0000 0X0000 0 X0000 0X0000 0 0000 0X0000 0 0000 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0x 04x 0X0000 0x 04x 0X0000 0X0000 0 0000 0 0000 0X0000 0X0000 0X0000 0X0000 s 1 1000000000000000000000000000000 motions i info time motions i info anRollR motions i info anPitchR motions i info knPitchR motions i info thPitchR motions il info thRollR motions i info anRollL motions i info anPitchL motions il info knPitchL motions il info thPitchL motions i info thRollL motions i info eyeL motions i info elRol1R motions il info shRollR motions i info shPitchR motions i info eyeR motions i info elRollL motions i info shRollL motions i info shPitchL motions i info head motion
36. 11 161 161 131 1 11 POSE 50 0x0000 0x0aa5 0x3e97 0 5 8 0x0000 0 0000 0x0000 0xf55b 0xc169 0x0a38 0 0000 0X0000 0x0000 0 0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x0000 0 0000 0 0000 0X0000 0x0000 0x00c8 0 x0100 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0X0000 0 0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0 0000 0 0000 0x0000 0 0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 1111 10000000000000000000000000000001 2 3 2 Blocco di ciclo Il blocco contiene solo l istruzione OLDLOOP in aggiunta all intestazione _MOTION_INFO BREAK 11 1501 11651 1161 1781 151 121 _OLDLOOP 2 3 3 Blocco di calcolo Il blocco di calcolo permette di eseguire delle operazioni tra una variabile ed una costante o tra due variabili Nel primo caso l istruzione sara _VARCON Variabile che poi conterr a il risultato Operazione Constante mentre nel caso di due variabili si utilizza la seguente sintassi _VARVAR Variabile che poi conterr a il risultato Operazione Variabile di riferimento Le operazioni disponibili sono 5 e sono associate ad un identificativo che sar quello che viene riportato nel file _MOTION_INFO CALCULATION 11 1581 13471 161 161 111 1 11 _VARCON 1 0
37. 2 myparser y include lt stdio h gt include lt string h gt include onlineMode h ifdef WIN32 include lt windows h gt else typedef unsigned char WDRD endif Initial Offset define HEAD_YAW define EYE_LED_L define EYE_LED_R define SHOULDER_PITCH_L define SHOULDER_PITCH_R define SHOULDER_ROLL_L define SHOULDER_ROLL_R define ELBOW_ROLL_L define ELBOW_ROLL_R define THIGH_ROLL_L define THIGH_ROLL_R define THIGH_PITCH_L define THIGH_PITCH_R define KNEE_PITCH_L define KNEE_PITCH_R define ANKLE_PITCH_L define ANKLE_PITCH_R define ANKLE_ROLL_L define ANKLE_ROLL_R define VOICE define TIME define GYROXGAIN define GYROYGAIN 50 200 256 0x0000 0x0000 0x0000 0x0000 0x0000 0xC980 0x3680 0xE29F 0 1061 0 0000 0 0000 0x0A38 0xF5C8 0xC169 0x3E97 0xF55B 5 0x0000 0x0000 0x0000 70 A FLEX amp BISON define define define define define define define define define define define CTRL_SHOOTANALOG GAINMOVE_PITCH_L GAINMOVE_PITCH_R GAINLSTEP_ROLL_L GAINLSTEP_ROLL_R GAINRSTEP_ROLL_L GAINRSTEP_ROLL_R PACEGAIN_LEG_L PACEGAIN_LEG_R CTRL_TURN_L CTRL_TURN_R Constants define MAX_MOTIDNS define MAX_LOOPS define INFO_NUM Global Variables int time 0 int head 1 int eyeL 2 int eyeR 3 int shPitchL 4 int shPitchR 5 int shRollL 6 int shRollR 7 int elRollL 8 int elRo
38. A DEI PACCHETTI 41 5 5 Struttura dei pacchetti La struttura dei pacchetti pi o meno standard il primo byte 00 ha sempre valore 0x00 o 0x55 il secondo byte 01 indica di quanti pacchetti composto il buffer e il numero del pacchetto I 4 bit pi signifi cativi contengono il numero totale i 4 meno significativi identificano il pacchetto Esempio Si vuole inviare un buffer di 192 byte Si divide il buffer in 3 pacchetti il secondo byte di ogni pacchetto deve contenere i valori 0x30 per il primo 0x31 per il secondo e 0x32 Si possono distinguere due tipi principali di pacchetti e Pacchetti di inizializzazione e Pacchetti di istruzioni 5 5 1 Inizializzazione I pacchetti di inizializzazione hanno lo scopo di impostare la connessione e accendere i servomotori i pacchetti di istruzioni consentono comandare una posa al robot 0x55 0x01 OxEO 0x00 0x10 0x04 0x00 0x0B 0x20 0x00 0 8 OxEC 0x08 0x09 OxEO 0x00 0x20 0x04 0 14 0 04 0 00 0 00 0 00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0 00 0x00 0x00 0 00 0x00 0x00 0x00 0x00 0 00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0 00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x55 0x01 OxEO 0x00 0x10 0x04 0x00 0x0B 0x20 0x00 Ox8A OxEC 0x14 0x11 OxEO 0
39. D61 define THIGH ROLL L 0X0000 define THIGH ROLL R 0X0000 define THIGH PITCH L 0x0A38 define THIGH_PITCH_R 0xF5C8 define KNEE_PITCH_L 0xC169 define KNEE_PITCH_R 0x3E97 define ANKLE_PITCH_L 0xF55B define ANKLE_PITCH_R OxOAAb5 define ANKLE ROLL L 0 0000 define ANKLE_ROLL_R 0 0000 define VOICE 0x0000 define TIME 0 0001 prototipi delle funzioni disponibili void doMovements void bool init void void off void bool rcOpen bool rcWrite BYTE buffer int bToWrite DWORD bWritten bool rcRead BYTE buffer int bToRead DWORD bRead Listing A 4 reCom c include lt windows h gt includo le funzioni necessarie per gestire gli HID include lt ddk hidsdi h gt include lt setupapi h gt include lt stdbool h gt define MAX_BUF_SIZE 64 specifiche del Robovie X define VENDOR_ID 0x1962 define PRODUCT_ID 0x1000 define VERSION_NUMBER 0x0100 GUID Globally Unique IDentifier struttura che identifica univocamente un device static GUID Guid static HDEVINFO devInfoSet handle al file che permette di comunicare con in robot HANDLE hObject apre la connessione con il robovie x se questo collegato altrimenti ritorna 0 bool rcOpen SP_DEVICE_INTERFACE_DATA interfaceData SP_DEVICE_INTERFACE_DETAIL_DATA_A interfaceDetailData interfaceData cbSize 0x1c DWORD ifaceCounter 0 bool devDetail DWORD regSize 0 HIDD_ATTRIBUTES attributes DWORD error
40. DarSeray es Dos u d e OR Red two 0 21 Prologo hia da Vira Sh seis i ef etuer 56272 Dial sov dos vele Me eo 6 2 3 Regole grammaticali 624 SOR EER 6 37 Metodo main maa Nude SERIA let de 6 4 Implementazione del movimento in tempo reale nel Traduttore 6 5 Connessione e scambio 6 5 1 La funzione 6 5 2 Le funzioni rcWrite ercReadO 6 59 Libreria Move uu EX ee SS EXE AR p ew relati 6 6 Creazione dei pacchetti 2 6 6 1 La metodo 6 7 Istruzioni per la compilazione 39 39 39 40 40 41 41 42 43 Conclusioni 65 A Flex amp Bison 67 A Eid Silk lt gt WR True 67 AO S DISOD sarete mes nora nea eten 69 A OnlineMode amp rcCom 85 Sommario Questo progetto ha lo scopo di realizzare uno strumento semplice ed efficace per permettere a un qualsiasi utente l interazione con il robot umanoide Robovie X Data la sua facilit di utilizzo pu essere impiegato nella didattica scolastica come primo approccio al mondo dell informatica Il risultato di questo progetto un programma eseguibile che riceve come input delle istruzioni elementari o complesse in linguaggio pseudo naurale ovvero delle frasi di senso compiut
41. GAIN GYROYGAIN CTRL_SHOOTANALOG GAINMOVE_PITCH_L GAINMOVE_PITCH_R GAINLSTEP_ROLL_L GAINLSTEP_ROLL_R GAINRSTEP_ROLL_L GAINRSTEP_ROLL_R PACEGAIN_LEG_L PACEGAIN_LEG_R CTRL_TURN_L CTRL_TURN_R char audio 100 Contains all the blocks which constitute the struct motionSequence int type 1 pose 2 calculation 3 if int next1 int next2 int info INFO_NUM char sound 100 motions MAX_MOTIONS char FILE_OUTPUT output txt FILE fp state 0 gt OK 1 gt call macro 2 gt exit int state 0 char macroName 15 extern FILE yyin extern char yylineno extern char yytext int current 2 int counter 0 int loopStack MAX LOOPS Converts from degrees to hex int degToOffset int deg int offs deg return offs movement 72 A FLEX amp BISON void yyerror const char str fprintf stdout 45 s n str yytext return int return 1 Saves joint values into the struct void savePose 1 int i succ motions current type 1 for i 0 i lt INFO NUM i motions current info i actualPosition il char audioPwd 30 X Voice Files NN if strcmp audio 0 1 strcat audioPwd audio strcat audioPwd wav strcpy motions current sound audioPwd strcpy audio if isOnline execPose actualPosition il succ current 1 motions current
42. LATION8 50 400 6 6 91 1 _VARCON 0 80 2 _MOTION_INFO POSE9 50 450 6 6 10 1 _POSE 10 0x0000 0x0aa5 0x3e97 0xf5c8 0x0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 36 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 1111 10000000000000000000000000000001 _MOTION_INFO 1 10 50 500 6 6 11 1 _ 50 0 0000 0x0ee7 0x3e97 0 0000 0 0000 0x0000 0xf119 0xc169 0x05f6 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x2fb0 0xd34b 0x0000 0X0000 0X0000 0 xe29f 0xd050 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 1 1111 10000000000000000000000000000001 _MOTION_INFO 0 1 1 50 550 6 6 12 1 _ 50 0 0000 0 004 0x3e97 8 0x0000 0X0000
43. O_WRITE amp bytesWritten while j lt 15 rcRead fromRobot 0 toRobot 13 0 06 toRobot 14 0 19 toRobot 16 0 01 toRobot 17 OxCO toRobot 18 0 40 toRobot 19 0 00 toRobot 20 0 00 BYTES TO READ amp bytesRead queste sono in 92 A FLEX amp BISON rcWrite toRobot while j lt 15 BYTES_TO_WRITE amp bytesWritten rcRead fromRobot BYTES TO READ amp bytesRead jt Y j 0 toRobot 14 0x21 toRobot 16 0x02 toRobot 17 0x00 toRobot 18 0x10 while toRobot 14 lt 0x09 toRobot 14 toRobot 17 if toRobot 17 0x08 0x10 0x00 toRobot 16 rcWrite toRobot BYTES_TO_WRITE amp bytesWritten while j lt 15 t rcRead fromRobot BYTES_TO_READ amp bytesRead j j 0 toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot 13 14 15 16 17 18 19 20 0 05 0 11 0x85 0x00 OxFD 0x00 0x00 0x00 rcWrite toRobot BYTES TO WRITE amp bytesWritten while j lt 15 rcRead fromRobot BYTES TO READ amp bytesRead quts 1 0 toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot toRobot 13 14 15 16 17 18 19 20 21 22 0x08 0 19 OxEO 0x00 0x08 0x04 0x02 0x02 0x00 0x00 rcWrite toRobot BYTES TO WRITE amp bytesWritten
44. Per terminare l input sufficiente premere due volte INVIO lasciando una riga vuota L istruzione che richiama una macro la seguente execute macroname 4 7 1 Un esempio di macro vuole creare il comando NO muove la testa a sinistra e destra save macro as NO Inizializzazione Si definiscono le istruzioni che compongono la macro pong repeat 3 times Definizione move head at 45 degrees rightward in 1500 ms move head at 45 degrees leftward in 1500 ms stop move head of 45 degrees leftward in 1500 ms Esecuzione del comando appena definito execute macro NO Esecuzione 4 8 MOVIMENTI PREDEFINITI 33 4 8 Movimenti Predefiniti Il traduttore in grado di riconoscere anche dei comandi che sono formati solo da singole istruzioni ma riesce a decodificare anche delle sequenze di pose ovvero dei movimenti L inserimento del comando viene gestito come una normale operazione dunque il programma che si preoccupa di elaborare e fornire in output i blocchi corrispondenti alla richiesta La sintassi della frase con cui si richiede il comando dipende dalla richiesta che viene fatta fare 3 passi avanti necessita di 4 parametri mentre l istruzione sbadiglia consta solo di una parola Un aspetto che degno di nota riguarda la possibilit di inserire i movimenti gi inseriti all interno del traduttore all interno di singole i
45. R amp tmp thRollR amp tmp anRollL amp tmp anPitchL amp tmp knPitchL amp tmp thPitchL amp tmp thRollL 1 amp tmpleyeLl amp tmp elRollR amp tmp shRollR amp tmp shPitchR amp tmp eyeR amp tmp elRollL amp tmp shRollL amp tmp shPitchL amp tmp head amp tmp voice amp tmp gyroX amp tmp gyroY amp tmp mvPitchL amp tmp mvPitchR amp tmp lStepRollL amp tmp l1StepRollR amp tmp rStepRollL amp tmp rStepRollR amp tmpl paceLegL amp tmp paceLegR amp tmp turnL amp tmp turnR amp tmp shootAn for i 0 i lt 34 i actualPosition i WORD tmp i fscanf ptrFile s audio if strcmp audio X 0 strcpy audio else fscanf ptrFile 4s audio2 if strcmp audio2 POSE 0 amp amp strcmp audio2 REPEAT 0 amp amp strcmp audio2 STOP 0 strcat audio strcat audio audio2 savePose else if strcmp op REPEAT 0 fscanf ptrFile amp parami saveCalculation 0 80 counter parami loopStack counter current countert 2 BISON else if strcmp op STOP 0 counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0 loopStack counter MAIN int main void fp fopen FILE OUTPUT w while state 0 1 yyin stdin yyrestart yyin if state 1 yyin fopen macroName r yyrestart
46. TOP 0 strcat audio strcat audio audio2 savePose else if IF 0 fscanf ptrFile 4d amp parami amp param2 amp param3 amp param4 savelf param2 80 counter param4 loopStack counter 6 2 MYPARSER Y 55 6 2 2 Dichiarazioni In questa sezione vengono dichiarati i nomi dei token la union e se necessario il tipo a cui un token appartiene 4token TURN STOP EXIT AND DOT BRIGHTNESS PARAMETER PLAY STEP FRONTFLIP BACKFLIP token DEGREE MILLISECOND IN TIMES REPEAT RESET GREETINGS YAWN WALK DANCE GUFFU GUFFD union int number char string token token token token token token token token lt number gt lt number gt lt number gt lt number gt lt number gt lt number gt lt number gt lt number gt NUMBER HEAD EYE SECTION JOINT OFFS TO SIGN token lt string gt AUDIO 6 2 3 Regole grammaticali L analisi sintattica viene eseguita in questa sezione del file Bison l analizzatore sintattico infatti ricerca tra le regole grammaticali quale coincide con l istruzione ricevuta dal linguaggio naturale Per definire le azioni si parte dal generale per poi proseguire verso i dettagli in questo modo diventa pi facile il riconoscimento di frasi complesse che sono la concatenazione di pi frasi semplici commands commands command comman
47. UNIVERSIT DEGLI STUDI DI PADOVA FACOLT DI INGEGNERIA DIPARTIMENTO DI INGEGNERIA DELL INFORMAZIONE LAUREA TRIENNALE IN INGEGNERIA INFORMATICA ELABORATO CONTROLLO IN TEMPO REALE DEL ROBOT UMANOIDE ROBOVIE X CON LINGUAGGIO PSEUDO NATURALE RELATORE PROF MICHELE MORO LAUREANDO NICOL FREZZATO ANNO ACCADEMICO 2010 2011 Indice Sommario Introduzione 1 Robovie X Wel Descrizione sisin ee suyla a 1 2 Caratteristiche principali 13 E SCETOMOLOrI ola 1 4 La scheda di controllo 2 RobovieMaker2 Vul hop de ERA E Oe TED da eel bs al ways pn a ina 2 2 1 Schema della Pose Area 222 Creare u a Pose dx a beta Ds ete da et 2 2 3 Montaggio delle pose 2 3 Analisi dei file di output 2 3 1 2 3 2 Bl cc di Ciclo sun A osa Doro Blocco di calcolo are katu mp e Sois qe 2 3 4 Blocco di salto condizionato 2 3 5 Blocco di inizio e blocco di fine 3 Flex amp Bison Sil Introduzione us nA ee ee EE X ee 3 2 Flex Analisi Lessicale 3 3 Bison Analisi Sintattica 4 In
48. a cui forma generale la seguente Zo prologo dichiarazioni regole grammaticali epilogo 26 3 FLEX amp BISON I simboli 790707 sono la punteggiatura che compare in ogni file di grammatica Bison per separare le sezioni Il prologo pu definire i tipi e le variabili utilizzate nelle azioni inoltre possibile utilizzare comandi per il preprocessore per definire le macro utilizzate e di utilizzare pseudo istruzioni include per includere header file Sempre nel prologo necessario dichiarare l analizzatore lessicale yylex e la stampante per gli errori yyerror Le dichiarazioni dichiarano i nomi dei simboli terminali e non terminali e possono anche descrivere le precedenze tra gli operatori e i tipi di dati dei valori semantici dei vari simboli Le regole di grammatica definiscono le modalit per la costruzione di ogni simbolo non terminale a partire dalle sue parti L epilogo pu contenere un codice che si desidera utilizzare Spesso le definizioni di funzioni dichiarate nel prologo vanno messe qui In un programma semplice tutto il resto del programma pu essere scritto qui Capitolo 4 Interpretazione del linguaggio pseudo naturale 4 1 Introduzione La scelta di realizzare un traduttore per i movimenti del robot umanoide Robovie X nasce da due riflessioni principali la prima riguarda la difficolt di creare movimenti complessi utilizzando il software RobovieMaker mentre la seconda vert
49. al number 8 return JOINT yylval number 10 return JOINT yylval number 12 return JOINT yylval number 14 return JOINT yylval number 16 return JOINT yylval number 18 return JOINT yylval number 21 return JOINT yylval number 22 return JOINT yylval number 23 return JOINT yylval number 24 return JOINT yylval number 26 return JOINT yylval number 28 return JOINT yylval number 30 return JOINT yylval number 32 return JOINT return DEGREE return MILLISECOND yylval number strcmp yytext of return ININ yylval yylval yylval yylval yylval yylval return RESET yylval number strcmp yytext online return BRIGHTNESS return REPEAT return TIMES return PARAMETER return PLAY return SAVECMD return EXECCMD number 0 number 1 number 2 number 3 number 4 number 5 return return return return return return return SECTION return OFFS return ONLINE 2 BISON greetings yawn frontflip backflip dance walk get t up t from t face t up get t up t from t face t down step s a z0 9A Z NN hh yylval string strdup yytext return return return return return return return return return GREETINGS YAWN FRONTFLIP BACKFLIP DANCE WALK GUFFU GUFFD return TEXT printf invalid character A 2 Bison Listing A
50. alisi lessicale a cui si appoggia il parser durante l operazione di traduzione Il secondo comando compila mediante lo strumento Bison il file myparser y L opzione d serve per generare la tabella in cui presente la corrispondenza token valore numerico Tale tabella presente nello header file myparser tab h La compilazione genera inoltre un file myparser tab c dove contenuta la funzione yyparse funzione che esegue l analisi sintattica Infine il terzo ed ultimo comando compila mediante gcc i due file precedentemente generati e li unisce alle librerie che contengono i metodi per il controllo in tempo reale creando in uscita un programma eseguibile translator exe che il vero e proprio traduttore Conclusioni Il risultato di questa tesi VX Translator software che consente il controllo del robot umanoide Robovie X Questa applicazione grazie al linguaggio naturale che stato sviluppato risulta di semplice utilizzo per qualsiasi utente e allo stato attuale permette un controllo pressoch completo del movimento del Robovie X anche senza l utilizzo del software RobovieMaker Inoltre si voluto costruire una base per sviluppi futuri sarebbe interessante implementare la gestione dei sensori giroscopio e accelerometro nel software VX Translator oltre che espandere il linguaggio e i movimenti attualmente riconosciuto e integrati nell applicazione Per semplificare ulteriormente il programma si potrebbe pensare di
51. amente 4 r name espansione della definizione di nome Ixyz foo riconosce la stringa xyz foo 0 riconosce il carattere NULL codice ASCII 0 123 rionosce il carattere con valore in base ottale 123 x2a rionosce il carattere con valore in base esadecimale 2a rs riconosce l espressione regolare seguita dall espressione regolare s conocatenazione r s riconosce r oppure s r s riconosce r solo se seguita da s r riconosce una r solo se questa compare all inizio di una linea r riconosce una r solo se questa compare alla fine di una linea EOF riconosce end of file Tabella 3 1 Tipi di schema e descizione Le espressioni regolari riportate nella tabella qui sopra sono riportate secondo un ordine di precedenza da quella con maggiore precedenza all inizio a quella con la minore alla fine Si ricorda che all interno di una classe di caratteri tutte le espressioni regolari perdono il loro significato speciale ad eccezione di all inizio della classe 24 3 FLEX amp BISON Quando lo scanner appena generato in esecuzione analizza gli ingressi andando a cercare le stringhe che potrebbero corrispondere ad uno dei suoi schemi Se vengono trovati pi schemi a cui corrisponde una stringa il riconoscitore sceglie quello in cui c pi testo che coincide Nel caso in cui ci siano pi corrispondenze con la stessa lunghezza di testo allora lo scanner scegli
52. appresenta i gradi sessagesimali ma per quanto riguarda la taratura della luminosit dei LED questo viene sostituito dal simbolo di percentuale Ora mettendo insieme tutte le parole chiave sopra citate sl pu generare un semplice comando azione lato arto preposizione numero gradi direzione Quanto detto finora non vale per la testa e per i due occhi del robot umanoide Robovie X per due motivi il primo riguarda la testa e banalmente si nota che non 30 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE avrebbe senso specificare una testa destra piuttosto che una testa sinistra il secondo invece si riferisce agli occhi relativamente al concetto di luminosit Per risolvere il primo problema si dovuto eliminare il parametro lato andando di fatti a modificare la sintassi della frase di comando che cos diventa azione arto preposizione numero gradi direzione Nella frase prevista per inviare un comando al robot relativamente agli occhi stato inserito il concetto di lumisosit brightness in inglese e di illuminazione degli occhi in percentuale se l utente imposta la luminosit al valore zero il led sar spento mentre al valore di 100 corrisponde la massima luminosit Da queste osservazioni la sintassi sviluppata azione lato arto luminosita preposizione numero Infine viene fatta un analisi sulle istruzioni per l impostazione dei valori dei
53. ciclo e tantomeno dei blocchi di salto condizionato Queste faccende infatti vengono realizzate all interno del traduttore stesso E anche prevista la possibilit di avere pi ripetizioni una dentro l altra in modo da formare i cosiddetti cicli annidati La sintassi prevede di digitare il comando REPEAT integer TIMES ripeti intero volte per creare il punto di inizio 32 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE della ripetizione successivamente si inseriscono tutte le pose che si vuole far ripetere al Robovie X o un qualsiasi altro comando ed infine con il comando STOP si termina il ciclo Schematicamente si ottiene la seguente struttura repeat integer times blocchi di istruzioni stop 4 7 Creare comandi personalizzati Si da all utente anche la possibilit di creare comandi personalizzati macro associando a una parola chiave una sequenza di istruzioni dello stesso tipo di quel le descritte fino ad ora Questa funzione si rivela molto utile in quanto rende il programma ancora pi flessibile Facendo un esempio con questa funzione l utente pu facilmente definire il comando saluta Per per definire e realizzare una macro si usa il comando al posto di macroname si sostituisce la parola chiave che da il nome alla macro save macro macroname Successivamente si inseriscono le istruzioni che dovranno essere eseguite quando la macro viene richiamata
54. consentita alcuna operazione nel corso dell esecuzione di un movimento ad eccezione del comando di stop e dell accensione o spegnimento dei servomotori Per interrompere la riproduzione di un movimento si pu selezionare Play Stop Motion dal men oppure premere il relativo pulsante dalla barra degli strumenti Quando il movimento raggiunge la fine il software torna automaticamente dalla modalit di esecuzione di un movimento alla modalit di modifica Durante l esecuzione di un movimento il segnale nei blocchi si sposta per indicare in quale blocco si trova l esecuzione in quell istante 2 2 3 Montaggio delle pose Un movimento consiste in una sequenza di pose ordinate La velocit di esecuzione di un blocco posa e la posizione che occupa all interno di un movimento possono essere modificate nella Motion Area I blocchi di salto condizionato blocchi di ciclo e blocchi di calcolo servono per la creazione di movimenti avanzati come ripetere le stesse pose o l esecuzione di pose diverse a causa della ricezione di informazioni da un sensore In un blocco posa 6 registrata una posa e le impostazioni gi viste preceden temente Il blocco posa non consiste solo nel segnale che indica quale blocco si sta modificando ma anche nel settare il tempo della transizione e nel flusso normale 22 CREARE MOVIMENTI 13 per indicare quale sar il blocco successivo anche possibile cambiare nome alla posa e possono esistere pi bl
55. d stop turn exit turn AND turn DOT turn tempo turn tempo AND turn tempo DOT savePose turn audio turn audio AND turn audio DOT savePose turn tempo audio turn tempo audio AND turn tempo audio DOT savePose turn audio tempo turn audio tempo AND turn audio tempo DOT savePose repeat reset movements online macro 56 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO L azione repeat in coppia con stop permette di realizzare cicli anche annida ti con l ausilio di uno stack Quando il parser riconosce la sequenza REPEAT NUMBER TIMES il traduttore crea un nuovo blocco di calcolo per inizializzare la variabile contatore e salva il numero del blocco corrente in modo da ricordare in quale posizione posizionarsi in caso di salto Al termine del blocco di istruzioni che l utente ha deciso di far ripetere STOP aggiunge un blocco di calcolo che decrementa la variabile contatore e un blocco di salto condizionato che punta al primo blocco della sequenza da ripetere repeat REPEAT NUMBER TIMES saveCalculation 0 80 counter 2 loopStack counter current countert stop STOP counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0 loopStack counter L azione turn racchiude tutte le tipologie di movimenti e le impostazioni dei sen sori per ogni giunto viene fatta la distinzione tra lato
56. d turn right calf at 15 degrees backward Caviglia move left ankle of 45 degrees inward turn right ankle at 15 degrees outward Giroscopio set gyrox gain at 200 increase gyroy gain of 10 decrease gyrox of 30 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE e Altri Sensori set shootanalog control at 45 increase shootanalog control of 10 decrease left pitchmove gain of 545 set right pitchmove gain at 30411 increase left rolllstep gain of 4578 decrease right rolllstep gain of 545 set left rollrstep gain at 30411 increase right rollrstep gain of 4578 decrease left legpace gain of 545 set right legpace gain at 30411 increase left turnctrl control of 4578 decrease right turnctrl control of 545 e Movimenti walk number step ahead walk number step back walk number step rightward walk number step leftward dance greetings yawn getting up from face up getting up from face down front flip back flip e Macro save macro macroname execute macro macroname e Modalit real time online offline e Azzera reset e Fine exit Capitolo 5 Controllo in tempo reale 5 1 Introduzione In seguito alla realizzazione del traduttore si scelto di aggiungere la possibilit di controllare il robot in tempo reale direttamente dal traduttore e mediante il lin guaggio definito nel capitolo precedenti Questa funzione fornisce diversi vantaggi avendo la possibilit di vedere l effetto delle istruzioni illustra
57. destro e lato sinistro se necessario e successivamente a seconda della preposizione utilizzata nell istruzione si esegue un incremento o un decremento oppure la variabile modificata viene impo stata ad un preciso valore turn TURN SECTION JOINT OFFS NUMBER DEGREE TO int side 2 int joint 3 if side joint switch joint case 4 case 5 if 4 6 2 MYPARSER Y 57 if 7 0 factualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 factualPosition joint degToO0ffset 5 offs joint else if 7 1 actualPosition joint degToO0ffset 5 offs joint break A completamento di un istruzione di movimento pu essere prevista la specifica del tempo di esecuzione della posa e del suono da riprodurre Nell azione tempo vengono compiute le seguenti operazioni all inizio si converte il valore numerico da millisecondi a numero di cicli del processore del robot successivamente si esegue un controllo sul valore ottenuto in quanto valori troppo bassi o troppo alti potrebbero causare dei danni ai servomotori del Robovie X tempo IN NUMBER MILLISECOND 1 actualPosition time 2 0 06 if actualPosition 0 lt 1 actualPosition 0 1 else if actualPosition 0 gt 239 actualPosition 0 239 audio PLAY AUDIO strcpy audio 2 L azione movement
58. device hObject CreateFile interfaceDetailData gt DevicePath 0x0c0000000 3 0 3 0 0 if hObject INVALID_HANDLE_VALUE t mostra i dettagli del device e controlla che corrispondano a quelli del robovie x in modo da distinguere tra vari possibili hid collegati quali mouse usb tastiere usb joystick etc printf file creatoNn devDetail HidD_GetAttributes hObject amp attributes mostra i dettagli del device printf size Ox n attributes Size printf VendorID 0 attributes VendorID printf ProductID 0x n attributes ProductID printf VersionNumber 0x n attributes VersionNumber if devDetail 0 controlla che il device trovato sia quello giusto if attributes VendorID VENDOR_ID amp amp attributes ProductID PRODUCT_ID amp amp attributes VersionNumber gt VERSION_NUMBER 88 A FLEX amp BISON se sono verificate le condizioni dell if precedente allora il device trovato proprio il robovie x devDetail 1 break else devDetail 0 ifaceCounter continue gt else ifaceCounter continue else ifaceCounter continue else ifaceCounter continue else 1 esce dal ciclo perchE non sono stati trovati device collegati break stato riservato dello spazio per DEVICE_INTERFACE_DETAIL_DATA_A allora questo viene liberato dal momento che la struttura non pi necessaria if i
59. di ciclo possibile creare un ciclo di ripetizioni di pose fino al valore impostato Una struttura che ripete delle pose viene chiamata struttura di ciclo mentre una struttura che ripete pose per sempre prende il nome di struttura di ciclo infinita Per inserire un blocco di ciclo fare clic su Motion Aggiungi blocco del ciclo dal men I blocchi di ciclo possono cambiare nome e il flusso di connessione come i blocchi posa avendo un flusso di tipo normale e una condizione per interrompere il ciclo Il contatore del ciclo in RobovieMaker viene impostato dal bottone loop counter posizionato nella parte alta a destra I blocchi di ciclo contano il numero delle ripetizioni eseguite ed escono quando il conteggio arriva al numero di cicli impostati nel contatore del ciclo Pertanto se il ciclo contiene diversi blocchi di ciclo un ciclo viene contato diverse volte 14 2 ROBOVIEMAKER2 Figura 2 4 Blocco di ciclo In generale un programma realizza una struttura di ciclo utilizzando una varia bile contatore Durante la ripetizione di una parte del programma il contatore viene decrementato e confrontato con lo zero Se l uguaglianza verificata il programma esce dal ciclo Questo software utilizza una struttura di ciclo in cui si pu cambiare il valore della variabile contatore e dei salti condizionali In questo modo si ha il vantaggio che gli utenti possono risolvere le loro esigenze in un unico momento senza dover preoccupa
60. e la prima che incontra nella lista delle regole Una volta che la corrispondenza stata determinata il token disponibile nel puntatore di caratteri generale yytext e la la sua lunghezza nella variabile globale intera yyleng L azione corrispondente allo schema selezionato viene eseguita e lo scanner pronto ad analizzare la prossima stringa Nel caso in cui nessuno schema sia stato scelto viene eseguita la regola di default e il procedimento continua Ogni schema in una regola ha un azione corrispondente che pu essere una qualsiasi istruzione del linguaggio C Lo schema termina con il primo carattere di spazio bianco che non sia di escape Se non prevista un azione quando lo schema stato riconosciuto la stringa in ingresso viene semplicemente scartata Nel caso che un azione cominci con il carattere questa continua fino a quando non si trova il carattere corrispondente Un azione che consiste solamente in una barra verticale indica che l azione corrispondente la medesima della regola riportata successivamente L output restituito da Flex il file lex yy c che contiene la routine di scanner yylex un numero arbitrario di tabelle usate dalla routine per il riconoscimento dei token un numero di routine ausiliarie e di macro Ogniqualvolta yylex viene invocato esso scandisce i token dal file di input globale yyin di default impostato lo stdin Il metodo continua finch viene raggiunto la fine del file o se
61. e sempre sui problemi del programma fornito dall Vstone ma riguarda la difficolt di poter ope rare per un utente poco esperto Per questi due motivi si scelto di realizzare un traduttore che sia il pi semplice possibile ma allo stesso tempo modulare in modo da poter creare le sequenze di pose pi complesse A sostegno di queste scelte si deciso di optare per l uso della lingua inglese Gli altri vantaggi che discendono da questa realizzazione sono la possibilit di far effettuare al robot movimenti precisi cio di muovere gli arti ad angolazioni inserite dall utente in entrambi i sensi senza dover prestare molta attenzione alla posizione dei cursori di RobovieMaker Inoltre la possibilit di creare cicli annidati non diventa pi un problema di contatori e blocchi di calcolo in quanto l inserimen to di questi ultimi viene implementato direttamente dal traduttore Come ultima considerazione ma forse pi importante di tutte le precedenti si pu affermare che l applicazione realizzata non porta a delle limitazioni delle potenzialit del software RobovieMaker anzi punta ad essere la base per uno sviluppo futuro ad esempio verso un riconoscitore vocale del linguaggio naturale 4 2 I comandi Prima di procedere con la definizione dei comandi che il traduttore in grado di conoscere diventa fondamentale conoscere quali parole chiave costituiscono un input 28 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE valido
62. efine ELBOW_ROLL_L OXE29F define ELBOW ROLL R OX1D61 define THIGH ROLL L 0X0000 define THIGH ROLL R 0X0000 define THIGH PITCH L 0x0A38 define THIGH_PITCH_R OxF5C8 define KNEE_PITCH_L 0xC169 define KNEE_PITCH_R 0x3E97 define ANKLE_PITCH_L 0xF55B define ANKLE_PITCH_R OxOAAb5 define ANKLE ROLL L 0 0000 define ANKLE_ROLL_R 0 0000 define VOICE 0x0000 define TIME 0x0001 BYTE toRobot MAX BUF SIZE toRobot1 MAX_BUF_SIZE toRobot2 MAX_BUF_SIZE toRobot3 MAX_BUF_SIZE fromRobot MAX_BUF_SIZE prototipi delle funzioni disponibili bool init void bool doMovements void bool off void 90 A FLEX amp BISON Listing A 6 move c include lt windows h gt include lt stdio h gt include lt stdbool h gt include move h struttura con la posizione di tutti i giunti struct joints int head int eyeL int eyeR int shPitchL int shPitchR int shRollL int shRollR int elRollL int elRollR int thRollL int thRollR int thPitchL int thPitchR int knPitchL int knPitchR int anPitchL int anPitchR int anRollL int anRollR int voice int time struct joints initial HEAD YAW EYE LED L EYE LED R SHOULDER PITCH L SHOULDER PITCH R SHOULDER ROLL L SHOULDER ROLL R ELBOW ROLL L ELBOW ROLL R THIGH ROLL L THIGH ROLL R THIGH PITCH L THIGH PITCH R KNEE PITCH L KNEE PITCH R ANKLE PITCH L ANKLE PITCH R ANKLE ROLL L
63. el programma define SHOULDER_ROLL_L 0xC980 define SHOULDER_ROLL_R 0x3680 int knPitchL 14 int knPitchR 15 Successivamente vengono definiti ed inizializzati due array di tipo WORD 16 bit actualPosition rappresenta la posizione corrente di tutti i servomotori e sensori del robot mentre offs contiene i valori che indicano la posizione iniziale WORD actualPosition TIME HEAD_YAW EYE_LED_L EYE_LED_R SHOULDER_PITCH_L SHOULDER_PITCH_R SHOULDER_ROLL_L SHOULDER_ROLL_R ELBOW_ROLL_L ELBOW_ROLL_R THIGH_ROLL_L THIGH_ROLL_R THIGH_PITCH_L THIGH_PITCH_R KNEE_PITCH_L KNEE_PITCH_R ANKLE_PITCH_L ANKLE_PITCH_R ANKLE_ROLL_L ANKLE_ROLL_R VOICE GYROXGAIN GYROYGAIN CTRL_SHOOTANALOG GAINMOVE_PITCH_L GAINMOVE_PITCH_R GAINLSTEP_ROLL_L GAINLSTEP_ROLL_R GAINRSTEP_ROLL_L GAINRSTEP_ROLL_R PACEGAIN_LEG_L PACEGAIN_LEG_R CTRL_TURN_L CTRL_TURN_R WORD offs TIME HEAD_YAW EYE_LED_L EYE_LED_R SHOULDER_PITCH_L SHOULDER_PITCH_R SHOULDER_ROLL_L SHOULDER_ROLL_R ELBOW_ROLL_L ELBOW_ROLL_R THIGH_ROLL_L THIGH_ROLL_R THIGH_PITCH_L THIGH_PITCH_R KNEE_PITCH_L KNEE_PITCH_R ANKLE_PITCH_L ANKLE_PITCH_R ANKLE_ROLL_L ANKLE_ROLL_R VOICE GYROXGAIN GYROYGAIN CTRL_SHOOTANALOG GAINMOVE_PITCH_L GAINMOVE_PITCH_R GAINLSTEP_ROLL_L GAINLSTEP_ROLL_R GAINRSTEP_ROLL_L GAINRSTEP_ROLL_R PACEGAIN_LEG_L PACEGAIN_LEG_R CTRL_TURN_L CTRL_TURN_R Dopo aver dichiarato la variabile audio utile per
64. entificatori devono essere scritti in maiuscolo per distinguerli da quelli non terminali statement RETURN expression Una grammatica formale seleziona i token solo per la loro classificazione ad esempio se una regola cita il simbolo terminale costante intera significa che qual siasi costante intera grammaticalmente valida in quella posizione Il valore esatto della costante irrilevante per come viene analizzato l input Ma il valore preciso molto importante per ci che significa l ingresso una volta che viene analizzato Un compilatore inutile se non riesce a distinguere tra il 4 1 e 3 989 come costanti nel programma Pertanto ogni sequenza in ingresso valida in una grammatica Bison ha sia un tipo di token che un valore semantico Per essere utile un programma deve fare di pi che la semplice analisi di un ingresso ma deve anche produrre un output in base all input In una grammatica Bison una regola pu contenere un azione costituita da istruzioni in linguaggio C Ogni volta che il parser riconosce una corrispondenza di tale regola l azione viene eseguita Ad esempio questa una regola che dice che un espressione pu essere la somma di due sottoespressioni expression expression expression 1 3 L azione dice come produrre il valore semantico dell espressione somma dai valori delle due sottoespressioni Il file di input in Bison un file di grammatica Bison l
65. ezzo non eccessivamente elevato lo rendono un interes sante candidato per un progetto di robotica educativa Nonostante ci l ambiente di programmazione fornito il software RobovieMaker2 oltre al problema che non pu essere studiato e modificato per scopi didattici presenta un ulteriore inconveniente per creare un semplice movimento necessaria una buona conoscenza del software che si sta utilizzando AI fine di risolvere questi due problemi si deciso di realizzare un traduttore che permetta di trasformare un istruzione in linguaggio pseudo naturale nel corrispon dente file di comandi nel modo pi semplice e veloce possibile Il file che si ottiene in output se caricato con il programma RobovieMaker fa eseguire al robot la sequenza di pose specificate precedentemente attraverso il linguaggio di alto livello Capitolo 1 Robovie X 1 1 Descrizione Il Robovie X un robot umanoide di piccola taglia in grado di compiere movimenti complessi e sequenze di pose programmabili dall utente Vengono fornite in dotazio ne pi di 50 azioni predefinite diverse tra cui camminare fare la capriola e alzarsi da solo Il robot costituito da 13 o 17 motori programmabili pi 2 led per gli occhi ed un altoparlante per riprodurre i suoni pu anche essere equipaggiato con schede di espansione Robovie un marchio registrato di propriet di ATR 4 1 Figura 1 1 Robot umanoide Robovie X Nel nome R
66. f WIN32 include lt windows h gt else typedef unsigned short WORD 98 A FLEX amp BISON typedef char BYTE typedef unsigned long DWORD endif char comState 0 bool isOnline return comState bool goOnline rcOpen init comState 1 return 1 bool go0ffline bool toReturn false off 0 toReturn comState return toReturn bool execPose WORD actualPosition bool toReturn false TIME toRobot3 17 BYTE actualPosition 0 HEAD_YAW toRobot1 59 BYTE actualPosition 1 toRobot1 60 actualPosition 1 gt gt 8 EYE_LED_L toRobot1 31 BYTE actualPosition 2 toRoboti 32 actualPosition 2 gt gt 8 EYE_LED_R toRobot1 43 BYTE actualPosition 3 toRobot1 44 actualPosition 3 gt gt 8 SHOULDER_PITCH_L toRobot1 53 BYTE actualPosition 4 toRobot1 54 actualPosition 4 gt gt 8 SHOULDER_PITCH_R toRobot1 41 BYTE actualPosition 5 toRobot1 42 actualPosition 5 gt gt 8 ONLINEMODE amp RCCOM 99 SHOULDER_RO toRobot1 51 toRobot1 52 SHOULDER_RO toRobot1 39 toRobot1 40 ELBOW_ROLL_ toRobot1 49 toRobot1 50 ELBOW_ROLL_ toRobot1 37 toRobot1 38 THIGH_ROLL_ toRobot1 27 toRobot1 28 THIGH_ROLL_ toRobot1 15 toRobot1 16 THIGH_PITCH toRobot1 25 toRobot1 26 THIGH_PITCH toRobot1 13 toRobot1 14
67. i disponibili sono l assegnazione di un valore ad una variabile la somma la differenza la moltiplicazione e la divisione tra due 22 CREARE MOVIMENTI 15 variabili o tra una variabile ed una costante Il blocco di salto condizionato ha la funzione di creare flussi di salto basati su condizioni definite dall utente Questo blocco possiede una funzione simile a quella di un blocco di salto nel senso che esegue un salto basandosi su una condizione Tuttavia la condizione non solo per uscire da un ciclo ma anche per verificare condizioni composte da variabili arbitrarie F NO SETTING Figura 2 6 Blocco di salto condizionato Per aggiungere un blocco di salto condizionato su seleziona Motion Add condition branch block dal men questo verr aggiunto nella Motion Area pos sibile la modifica del nome del blocco e del flusso in uscita alla stessa maniera di un blocco posa all interno del blocco visualizzata l operazione che il programma compie durante l esecuzione Un blocco di salto condizionale salta quando la varia bile utilizzata verifica la condizione Nelle impostazioni di salto si pu scegliere sia la variabile di confronto sia il tipo di condizione da verificare maggiore del valore di soglia minore del valore di soglia controllo dei bit uguale al valore di soglia diverso dal valore di soglia sempre vero e sempre falso Il blocco di inizio inidica da dove comincia il movimento ne pu es
68. if state 1 yyin fopen macroName r yyrestart yyin 60 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO state 0 fclose yyin yylex_destroy fclose fp return 0 6 4 Implementazione del movimento in tempo reale nel Traduttore Per rendere possibile la connessione e comunicazione diretta tra robot traduttore sono state aggiunte delle librerie contenti le funzioni fondamentali che permetto no la connessione l inizializzazione l accensione l invio ricezione di pacchetti e lo spegnimento 6 5 Connessione e scambio dati Le funzioni necessarie alla connessione e allo scambio di informazioni con il robot sono state implementate nel file reCom c 6 5 1 La funzione rcOpen Questa funzione ha il compito di individuare il robot tra i vari HID collegati al pc e di aprire la connessione con esso Generalmente quando un applicazione che opera in user mode e gestisce un HID viene avviata esegue la seguente sequenza di operazioni e Chiama HidD GetHidGuid per ottenere il GUID Globally Unique IDentifier definito dal sistema per i dispositivi della classe HID static GUID Guid HidD GetHidGuid amp Guid e Chiama SetupDiGetClassDevs per ottenere un handle a un device in formation set che descrive le interfacce supportate dal sistema static HDEVINFO devInfoSet devInfoSet SetupDiGetClassDevsA amp Guid 0 0 0x12
69. int value int jump int succ motions current type 3 motions current info 1 op motions current info 2 index motions current info 3 value motions current next2 jump succ current 1 motions current next1 succ currentt Continuando con l analisi del file Bison la funzione toString ha il compito di stampare su file l intero movimento richiesto dall utente Sfruttando la struttura creata precedentemente la stampa stata realizzata riversando su file i valori con tenuti all interno di motions tenendo conto del tipo di blocco che si sta stampando e della sintassi prevista dal software RobovieMaker void toString int 7155 6 2 MYPARSER Y 53 fprintf fp _MOTION_FORMAT POSEDEF_V1R4 1 _ENABLE_AXIS 62 n n MOTION_INFO 1111 50 10 6 0 1 1 Nn STARTMOT n n fprintf fp MOTION INFO 5 111 50 43 6 6 2 1 POSE 50 0x0000 OxOaa5 0 3 97 Oxf5c8 0 0000 0 0000 0x0000 Oxf55b 0 169 0x0a38 0 0000 0 0000 0 0000 0 0000 0 0000 0 1461 0 3680 0x0000 0 0000 0 0000 0 0000 Oxe29f 0 980 0 0000 0 0000 0 0000 0 0000 0 X0000 0 0000 0 0000 0 0000 0 00 8 0 0100 0 0000 0X0000 0 0000 0X0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0x0000 0x0000 0 0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0
70. istere solo uno e non pu essere la destinazione del flusso di altri blocchi Il blocco di inizio viene aggiunto automaticamente quando si crea un movimento e non pu essere n aggiunto n eliminato Figura 2 7 Blocco di inizio e blocco di fine Un blocco di fine pu essere aggiunto al movimendo scegliendo Motion Add end block dal men Il blocco sar aggunto nella Motion Area dove si potranno collegare gli altri blocchi al blocco appena creato quando si vuole far terminare il 16 2 ROBOVIEMAKER2 movimento Il blocco di fine ha flussi in uscita e come per il blocco di inizio pu essere rinominato Figura 2 8 Esempio di schema a blocchi con due cicli 2 3 Analisi dei file di output Quando un movimento viene creato con il RobovieMaker viene anche salvato in me moria Il risultato di questa operazione un file di testo costituito da un insieme di strutture una per ogni blocco con una particolare sintassi Questa formata da due parti principali che sono l intestazione e la parte che contiene le informazioni l intestazione contiene l etichetta del blocco le sue coordinate all interno della Mo tion Area due campi di informazione per la freccia e due puntatori verso i blocchi successivi se un blocco non ha un puntatore il campo contiene il valore 1 Questo primo pezzo di informazioni comune per tutti i blocchi analizzati precedentemente 2 3 ANALISI DEI FILE DI OUTPUT 17 c
71. ject hObject CreateFile interfaceDetailData gt DevicePath 0x0c0000000 3 0 3 0 0 6 5 2 Le funzioni rcWrite e rcRead Queste funzioni hanno il compito rispettivamente di scrivere e leggere il dispositivo se il valore ritornato nullo allora viene invocata la funzione GetLastError che ritorna il codice dell errore verificatosi bool rcWrite BYTE buffer int bToWrite DWORD bWritten WriteFile HANDLE LPCVOID DWORD LPDWORD LP OVRLAPPED bool returned WriteFile hObject buffer bToWrite bWritten 0 if returned 0 t 62 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO printf errore in scrittura 0x n GetLastError return returned bool rcRead BYTE buffer int bToRead DWORD bRead ReadFile HANDLE LPCVOID DWORD LPDWORD LPOVERLAPPED bool returned ReadFile hObject buffer bToRead bRead 0 if returned 0 printf errore in lettura 0x n GetLastError return returned 6 5 3 Libreria move La libreria move definita nell header move h riportata nel listato contiene la defi nizione di quattro buffer toRobot della dimensione di 64 byte che saranno utilizzati per la comunicazione con il robot Il metodo init inizializza i quattro buffer con i valori di cui si gi parlato nel paragrafo 6 5 inizializza la connessione con il robot e invia il pacchetto che accende i servomotori portando l umanoide nella
72. la 5 2 Pacchetto che avvia l alimentazione ai servomotori Una volta ricevuto questo pacchetto il robot alimenta i motori portandosi nella sua posizione iniziale Nella sezione successiva si descrive la sequenza di pacchetti necessaria a cambiare posizione al robot Si riporta ora il pacchetto che comanda al robot lo spegnimento dei motori 0x55 0 01 OxEO 0x09 0xF8 0x02 0 00 0x00 0x00 0x00 0x8A OxEC OxOF 0x21 OxEO 0x01 0x82 0x02 0x86 Ox7C 0x80 0x81 0x5E 0x02 0x80 0x00 0 18 0x00 0x00 0x00 OxAE 0xD9 OxCE 0 1 0x00 0x00 0x00 0x00 0x00 0x00 0 00 0 00 0x52 0x26 0x32 0xE2 0 00 0 00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 5 5 STRUTTURA DEI PACCHETTI 5 5 3 Esecuzione di una posa Per far muovere il robot deve essere inviata una sequenza di 3 pacchetti contenente informazioni sulla posizione in cui devono portarsi ogni motore rispetto a quella iniziale Questo offset il risultato delle conversione da gradi a esadecimale con la funzione deg ToOffset descritta nel capitolo successivo 0x55 0x03 0 0 01 0 7 0 00 J17 J17 J15 J15 J13 J13 J11 J11 J9 J9 0x00 0x00 J18 J18 J16 J16 J14 J14 J12 J12 J10 J10 0x00 0x00 J2 J2
73. llR 9 int thRollL 10 int thRollR 11 int thPitchL 12 int thPitchR 13 int knPitchL 14 int knPitchR 15 int anPitchL 16 int anPitchR 17 int anRollL 18 int anRollR 19 int voice 20 int gyroX 21 int gyroY 22 int shootAn 23 int mvPitchL 24 int mvPitchR 25 int l1StepRollL 26 int l1StepRollR 27 int rStepRollL 28 int rStepRollR 29 int paceLegL 30 int paceLegR 31 int int Array which contains the current value of joints WORD actualPosition TIME HEAD YAW EYE LED L EYE LED R SHOULDER_PITCH_L turnL 32 turnR 33 o o o o oo 0000 0 100 10 34 SHOULDER_PITCH_R SHOULDER_ROLL_L SHOULDER_ROLL_R ELBOW_ROLL_L ELBOW_ROLL_R THIGH_ROLL_L THIGH_ROLL_R THIGH_PITCH_L THIGH_PITCH_R KNEE_PITCH_L KNEE_PITCH_R 2 BISON 71 ANKLE_PITCH_L ANKLE_PITCH_R ANKLE_ROLL_L ANKLE_ROLL_R VOICE GYROXGAIN GYROYGAIN CTRL_SHOOTANALOG GAINMOVE_PITCH_L GAINMOVE_PITCH_R GAINLSTEP_ROLL_L GAINLSTEP_ROLL_R GAINRSTEP_ROLL_L GAINRSTEP_ROLL_R PACEGAIN_LEG_L PACEGAIN_LEG_R CTRL_TURN_L CTRL_TURN_R Array wich contains the initial offset WORD offs TIME HEAD_YAW EYE_LED_L EYE_LED_R SHOULDER_PITCH_L SHOULDER_PITCH_R SHOULDER_ROLL_L SHOULDER_ROLL_R ELBOW_ROLL_L ELBOW_ROLL_R THIGH_ROLL_L THIGH_ROLL_R THIGH_PITCH_L THIGH_PITCH_R KNEE_PITCH_L KNEE_PITCH_R ANKLE_PITCH_L ANKLE_PITCH_R ANKLE_ROLL_L ANKLE_ROLL_R VOICE GYROX
74. lysis With Flex http flex sourceforge net manual e Bison GNU parser generator http www gnu org software bison manual e C A Reference Manual 5 Edition Samuel P Harbison Guy L Steele Prentice Hall 2002 e Applicativo Open Source per controllo del Robot RB200 Riccardo Bonetto Universit degli studi di Padova 2008 e MSDN Library Microsoft Developer s Network http www microsoft com
75. memorizzare le informazioni relative ai suoni si dichiara un array di struct motions di tipo motionSequence 6 2 MYPARSER Y 51 Questo stato memorizzare i blocchi che fanno parte di un vimento di qualunque tipo essi siano nella i esima cella dell array viene salvato il blocco i esimo cos da ottenere la sequenza di blocchi che d origine al movimento voluto Il campo type ha la funzione di codificare quale tipo di blocco sia memoriz zato posa calcolo o salto condizionato next1 e next2 sono i puntatori ai blocchi successivi l array info contiene il valore dati che variano a seconda del tipo di blocco e sound indica il nome del percorso del file audio struct motionSequence int type 1 posa int next1 int next2 WORD info INFO_NUM char sound 100 motions MAX_MOTIONS Una volta completate tutte le dichiarazioni e inizializzazioni delle variabili globali si procede all implementazione dei metodi yyerror e yywrap previsti da Bison La funzione deg ToOffset ha il compito di tradurre il valore dei gradi sessagesimali spe cificati dall utente nella notazione esadecimale questo stato realizzato mediante una moltiplicazione per la costante 0x00da int degToOffset int deg int offs deg Oxda return offs savePose una funzione che salva la posizione attuale di tutti i parametri nel di WORD info che si t
76. nella barra degli strumenti In questo modo il PC avvia la 12 2 ROBOVIEMAKER2 comunicazione con la scheda CPU e finch la comunicazione sar attiva il pulsante viene mantenuto come premuto Per terminare la connessione bisogna premere sullo stesso pulsante per passare allo stato offline Ora si pronti per creare la nuova posa utilizzando i cursori bene ricordare che il primo blocco deve essere collegato dal blocco START e che l ultimo blocco deve avere un collegamento verso il blocco END Dopo aver modificato le pose il passo successivo consiste nell esecuzione del movimento creato Per eseguire il movimento si seleziona Play Play Motions dal men o dalla barra degli strumenti Dopo il clic il robot comincia ad eseguire il movimento dal blocco di partenza e continua secondo l ordine indicato dalla freccia Nel RobovieMaker le frecce che indicano l esecuzione ordinata delle pose prendono il nome di flusso Ci sono due tipi di flussi flusso normale che parte da un blocco posa di colore blu di default e flusso condizionale usato per il blocco di ciclo per il blocco di salto condizionato Il flusso condizionale seleziona una freccia tra le due disponibili a seconda che sia verificata una condizione che di colore rosso di default se la condizione vera Il movimento si conclude quando il blocco posa il blocco END oppure un qualsiasi blocco posa senza flusso in uscita 51 noti che non
77. nfo gyroY motions il info mvPitchL motions i info mvPitchR motions i info 1StepRollL motions il info 1StepRollR motions il info rStepRollL motions i info rStepRollR motions i info paceLegL motions i info paceLegR motions i info turnL motions i info turnR motions i info shootAn motions il sound break case 2 fprintf fp _MOTION_INFO CALCULATION d 50 a 6 6 a 1 n i i 50 motions i next1 fprintf fp _VARCON a d Xa n n motions i info 1 motions il info 2 motions i info 3 break case 3 fprintf fp _MOTION_INFO LIF d 50 791 6 6 d d n i i 50 motions i next2 motions i next1 fprintf fp _MIF d d d n n motions i info 1 motions i info 2 motions i info 3 break fprintf fp _MOTION_INFO END 11 50 a 16 46 1 1 Nn _ENDMOT 50 current 54 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO La funzione loadFile permette di caricare da file txt che hanno una partico lare sintassi una sequenza di blocchi Il metodo stato realizzato per poter caricare quei movimenti che sono gi stati realizzati e che l utente pu includere all interno del movimento che desidera creare void loadFile char fileName T FILE ptrFile fopen fileName rb char op 10 WORD temp int 1 param2 param3 param4 i while fscanf ptrFile s op
78. nsore sia simmetrico l in cremento del valore restituito di 2 L utilit di questa scelta viene descritta successivamente nell analisi del file myparser y Il token restituito JOINT ad eccezione della testa HEAD e degli occhi LED head yylval number 1 return HEAD eye led yylval number 2 return EYE shoulder yylval number 4 return JOINT arm yylval number 6 return JOINT elbow yylval number 8 return JOINT hip yylval number 10 return JOINT thigh yylval number 12 return JOINT knee yylval number 14 return JOINT calf yylval number 16 return JOINT ankle yylval number 18 return JOINT gyrox yylval number 21 return JOINT gyroy yylval number 22 return JOINT shootanalog yylval number 23 return JOINT pitchmove yylval number 24 return JOINT rolllstep yylval number 26 return JOINT rollrstep yylval number 28 return JOINT legpace yylval number 30 return JOINT turnctrl yylval number 32 return JOINT e Lato di fondamentale importanza risulta essere la posizione del servomotore o del sensore nel caso questi siano simmetrici Ecco quindi che la distinzione viene fatta utilizzando la funzione strcmp incluso nella libreria string h di C se l oggetto appartiene alla parte destra viene restituito il valore numerico 1 altrimenti 0 Il token restituito in questo caso SECTION 6 1 MYLEXER L 49 right left yylval number strcmp yytext righ
79. nterfaceDetailData gt cbSize 0 free interfaceDetailData elimina la lista dei device SetupDiDestroyDeviceInfoList devInfoSet return devDetail invia bToWrite byte contenuti in memoria a partire dalla locazione puntata da buffer bool rcWrite BYTE buffer int bToWrite DWORD bWritten t WriteFile HANDLE LPCVOID DWORD LPDWORD LP_OVRLAPPED bool returned WriteFile hObject buffer bToWrite bWritten 0 if returned 0 printf errore in scrittura 0x n GetLastError ONLINEMODE amp RCCOM 89 return returned riceve bToRead byte contenuti in memoria a partire dalla locazione puntata da buffer bool rcRead BYTE buffer int bToRead DWORD bRead ReadFile HANDLE LPCVOID DWORD LPDWORD LPOVERLAPPED bool returned ReadFile hObject buffer bToRead bRead 0 if returned 0 printf errore in lettura 0x n GetLastError return returned Listing A 5 move h include lt windows h gt i define sevono a definire la posizione iniziale una posizione iniziale caricata da file viene determinata a partire da questa che salvata nella rom del robot define BYTES_TO_READ 65 define BYTES_TO_WRITE 65 define MAX_BUF_SIZE 64 define HEAD_YAW 0x0000 define EYE_LED_L 0X0000 define EYE_LED_R 0X0000 define SHOULDER_PITCH_L 0x0000 define SHOULDER_PITCH_R 0x0000 define SHOULDER_ROLL_L 0xC980 define SHOULDER_RDLL_R 0x3680 d
80. o in lingua inglese ma con una determinata struttura Il programma opera in 2 diverse modalit producendo risultati differenti e genera un file di comandi per l umanoide che possibile eseguire utilizzando il software RobovieMaker 2 e rende possibile il controllo in tempo reale del Robovie X Un lavoro di reverse engineering di RobovieMaker 2 software proprietario del l umanoide ha reso possibile la comprensione delle codifiche dei parametri e del protocollo utilizzato successivamente nel programma realizzato in questo progetto La parte di programma che interpreta l input e traduce le istruzioni renden dole eseguibili stata realizza utilizzando un analizzatore lessicale e grammaticale generato da Flex amp Bison Le istruzioni previste che il traduttore in grado di riconoscere sono e la modifica della posizione di un giunto o del valore di un sensore la possibilit di muovere pi di un giunto contemporaneamente e la specifica di un tempo di transizione tra due pose consecutive e l assegnazione di un suono da riprodurre durante ogni posa e linserimento di movimenti predefiniti all interno del movimento che si sta realizzando Inoltre si da la possibilit all utente di definire delle macro ovvero delle sequen ze di istruzioni da poter chiamare in un secondo momento Introduzione Negli ultimi anni la ricerca nel campo della robotica sta riscuotendo sempre pi successo e si sta diffondendo
81. obovie X la X sta flexible flessibile in italiano che indica il fatto che lo stesso prodotto disponibile in tre modelli X X Lite e X PRO robot in grado di ricevere input analogici e pu produrre in uscita movimenti come la rotazione degli arti avanti e indietro in grado di riprodurre musica e ballare inoltre pu avere un comportamento espressivo come addormentarsi o essere comico 1 2 Caratteristiche principali Il modello che stato utilizzato per la realizzazione di questo elaborato il Robovie X 1 2 CARATTERISTICHE PRINCIPALI e Dimensioni 343 x 180 x 71 mm e Peso 1 3 Kg Scheletro interno alluminio Scheletro esterno guscio in plastica Gradi di libert Testa 1 Braccia 6 Gambe 10 Il kit di montaggio comprende 1 Robot da assemblare 17 Servomotori 2 LED per occhi 1 Batteria a 6 V 1400mA 5 celle NiMH 1 Caricabatteria Altoparlati 2 W e Cavo USB e 1 CD ROM con il software RobovieMaker2 e la guida per l uso Altro viti a Batteria Mi MH da 6 V b Altoparlante 2 W Figura 1 2 Accessori principali 6 1 1 3 I servomotori I servomotori di cui composto il Robovie X sono di tipo VS S092J nel kit di montaggio ne sono presenti 10 con il cavo di collegamento lungo 400 mm e 7 con il cavo di collegamento corto di 150 mm La velocit di rotazione e la capacit di torsione insieme alla leggerezza
82. occhi posa con la stessa etichetta anche se aumenta la confusione quando il numero di blocchi posa diventa elevato Con un doppio clic sul blocco di posa possibile configurare le impostazioni avanzate che sono il nome della posa e la posizione del blocco nella finestra Figura 2 3 Blocco posa Il registro di posa ha la funzione di cambiare la velocit di movimento cio in quanto tempo la posa deve eseguire la trasformazione dalla posa precedente questo viene chiamato tempo di transizione e si pu cambiare con i pulsanti presenti sul blocco Queste impostazioni in ogni posa consentono il montaggio di movimenti avanzati acrobatici come la capriola in avanti e la ruota laterale Un tempo di tran sizione di 60 corrisponde circa ad 1 secondo poich 1 unit di tempo di transizione corrisponde a 60 Hz pari a circa 0 01666 s comunque possibile cambiare l uni t di transizione nelle preferenze di bordo della CPU Per decelerare o accelerare un intero movimento si pu modificare la percentuale di tempo di movimento nella barra degli strumenti I blocchi posa e un qualsiasi altro blocco visualizzato nella Motion Area do tato di una freccia chiamata flusso che indica quale sar la posa successiva durante l esecuzione Un blocco posa ha un flusso di tipo normale Le connessioni tra i blocchi possono essere cambiate cliccando sulla radice o sulla punta della freccia e trascinandola in un blocco diverso Utilizzando il blocco
83. omprendere la struttura di un movimento basta pensare alle animazioni dal momento che i movimenti sono costituiti da pose ordinate in ordine temporale Un robot esegue le pose in periodi fissi di tempo Si crea una posa in Pose Area e la si registra nella Motion Area Si ripete questo procedimento per creare tutte le pose di cui composto un movimento La Motion Area ha la funzione di modificare l ordine di registrazione delle pose e per impostare il tempo di transizione tra due pose consecutive che decide la velocit di movimen 2 2 CREARE MOVIMENTI 11 to inoltre ha anche la funzione per registrare blocchi di condizione e di calcolo di variabili Nella Pose Area sono presenti diversi cursori per il controllo dei dispositivi col legati alla scheda CPU come i servomotori i LED ed i guadagni dei sensori Questi si utilizzano ad esempio per creare le pose del robot impostando gli angoli dei ser vomotori La Pose Area configura automaticamente la posizione e il tipo dei cursori a seconda del robot selezionato La Pose Area pu visualizzare fino a 62 cursori di scorrimento numerati dallo 0 esimo al 61 esimo che hanno il ruolo di controlla re rispettivamente l assegnato servomotore Ad esempio dallo 0 esimo al 29 esimo cursore controllano gli angoli dei servomotori il 30 esimo cursore assegnato per la selezione del numero di suono da riprodurre e dal 31 esimo in poi i cursori servo no per le impostazioni della scheda di es
84. on joint 6 else if 1 1 actualPosition joint break tempo ININ NUMBER MILLISECOND actualPosition time 2 0 06 if actualPosition 0 lt 1 actualPosition 0 1 else if actualPosition 0 gt 239 actualPosition 0 audio PLAY TEXT strcpy audio 2 reset RESET int i for i 0 1 lt INFO_NUM 1 actualPosition i offs il if isOnline execPose amp actualPosition 0 movements GREETINGS loadFile movs greetings txt YAWN loadFile movs yawn txt 6 5 239 84 A FLEX amp BISON FRONTFLIP loadFile movs frontflip txt BACKFLIP loadFile movs backflip txt DANCE loadFile movs dance txt GUFFU loadFile movs gettingupffup txt GUFFD T loadFile movs gettingupffdown txt WALK NUMBER STEP TO switch 4 4 case 0 loadFile movs goaheadil txt saveCalculation 0 80 counter 2 1 loopStack counter current countert loadFile movs goahead2 txt counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0 loopStack counter loadFile movs goahead3 txt break case 1 loadFile movs goback1 txt saveCalculation 0 80 counter 2 loopStack counter current countert loadFile movs goback2 txt counter saveCalculation 2 80 counter 1 savelf 4 80 counter 0
85. on joint degTo0ffset 5 else if 7 0 actualPosition joint degToDffset 5 offs joint else if 7 1 actualPosition joint degToDffset 5 offs joint 1 break case 14 if 4 if 7 0 factualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 factualPosition joint degToO0ffset 5 offs joint 2 BISON 81 else if 7 1 actualPosition joint degToDffset 5 offs joint 1 break case 15 if 4 if 7 0 factualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 actualPosition joint degToOffset 5 offs joint else if 7 1 actualPosition joint degToOffset 5 offs joint break case 16 if 4 if 7 0 actualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 actualPosition joint degToOffset 5 offs joint else if 7 1 actualPosition joint degToOffset 5 offs joint 1 break case 17 if 4 if 7 0 actualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 actualPosition joint degToOffset 5 offs joint else if 7 1 actualPosition joint degToOffset 5 offs joint
86. on l aggiunta di un campo per indicare il tipo di flusso e di un campo puntatore per i blocchi di ciclo e di salto condizionato Le informazioni contenute nella seconda parte del blocco sono diverse per ogni tipologia e verranno presentate di seguito MOTION INFO Etichettall CoordinataX CoordinataY ParametroFrecciai ParametroFreccia2 Puntatorei Puntatore2 Il fatto che i movimenti siano registrati in un semplice file di testo d la possibi lit di poter modificare i valori dei parametri senza dover modificare il formato delle informazioni per creare dei blocchi con valori nuovi Il software RobovieMaker in grado di riconoscere la particolare sintassi con cui viene scritto il file ed in grado di ricostruire il diagramma a blocchi associato Questa funzione sar il punto di partenza per creare nuove pose o interi movimenti senza utilizzare il RobovieMaker ma usandolo come interprete tra il file di comandi per il robot e il robot stesso In altre parole con una applicazione esterna si crea un file di testo che verr caricato nel RobovieMaker che a sua volta lo invier al robot umanoide Robovie X per l ese cuzione Ogni file salvato con il RobovieMaker contiene un intestazione composta dalle istruzioni _MOTION_FORMAT POSEDEF_V1R4 1 ENABLE AXIS 62 dove la prima istruzione specifica il tipo di formato dei dati mentre la seconda rappresenta il numero dei parametri del blocco posa
87. ono stati studiati i singoli blocchi che compongo no una posa o un operazione al fine di capire meglio la funzione di ogni singolo parametro Questo progetto pu essere una base per ulteriori sviluppi sia ampliando la gam ma dei movimenti attuabili che implementando nuove funzioni Infatti nonostante vengano gi forniti circa 50 movimenti predefiniti per il robot si voluto creare un traduttore pi versatile in grado di tradurre delle sequenze di istruzioni in un file di comandi che possano essere semplici complesse oppure che contengano movimenti predefiniti a seconda delle preferenze di chi utilizza il programma L utente ha anche possibilit di creare dei comandi associando a una sequenza di istruzioni una parola chiave Infine stato aggiunta la possibilit di controllare l umanoide in tempo reale ovvero il traduttore in grado di interpretare i comandi ricevuti in ingresso e attraverso il collegamento USB impartire le istruzioni al Robovie X Il risultato della tesi un programma eseguibile che riconosce delle istruzioni sia elementari che complesse in lingua inglese e le trasforma in un file di comandi in uscita che rappresenta le stesse istruzione inserite in ingresso ma in un formato che sia decodificabile dal robot Contemporaneamente possibile vedere in real time gli effetti dei comandi sul robot Il robot umanoide Vstone Robovie X ha delle ottime caratteristiche strutturali e meccaniche che unite al pr
88. ontenere la parola degree stessa al plurare e al singolare sia per il simbolo di utilizzato nel comando degli occhi degree s return DEGREE Infine sono anche previste le regole per ignorare gli spazi bianchi tra le parole semplicemente lasciando vuota l azione corrispondente al carattere di spazio e quella per riconoscere il percorso di un file audio in cui si rende necessario creare una stringa che possa contenere sia numeri che lettere ed in aggiunta anche il carattere di Quest ultima istruzione deve essere necessariamente inserita come ultima regola altrimenti tutti i successivi schemi e azioni non verrebbero mai eseguiti t ignore whitespace a z0 9A Z NN yylval string strdup yytext return AUDIO 50 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO Tutte le altre parole vengono restituite al file Bison mediante dei token che hanno lo stesso nome della parola riconosciuta 6 2 Il file myparser y diviso nelle sezioni prologo dichiarazioni regole grammaticali ed epilogo realizza l analisi sintattica del linguaggio naturale 6 2 1 Prologo Questa prima parte del file Bison contiene dopo gli include le definizioni delle costanti che contengono i valori per la taratura del robot e le variabili globali che associano al nome di ogni giunto un valore numerico al fine di rendere pi semplice e leggibile il codice d
89. pansione come il guadagno dei sensori del giroscopio Questo software usa la 62 esima e la 63 esima variabile che dovrebbero esse re utilizzate come cursori come funzioni libere in RobovieMaker per VS RC003 Pertanto non possibile utilizzarle come cursori in questo software possibile modificare i valori dei cursori usando le frecce e la manopola utilizzando il mouse per impostare le pose del robot La cella di controllo dal cursore 0 esimo al 29 esimo hanno la funzione di controllare se gli interruttori dei servomotori sono accesi o spenti 0 6 Figura 2 2 cursore per il controllo della testa del robot 2 2 2 Creare una posa Si crea una posa accanto alla prima che prende il nome di posa di riferimento La duplicazione di una posa ne crea un altra modificabile in questo modo si pu cominciare a crearne un altra dalla posizione finale della posa precedente Il segnale visualizzato in colore rosso indica quale blocco posa si sta modificando Per passare al blocco successivo e salvare il blocco posa corrente basta fare clic su un altro blocco posa Mantenere in collegamento il proprio PC con la scheda CPU del robot con i servomotori accesi diventa conveniente per muovere il robot durante la fase di creazione dei movimenti Per collegare la scheda CPU al PC si utilizza il cavo incluso tra gli accessori Successivamente fare clic su Comunicazione Online dalla barra dei men o utilizzando il pulsante
90. posizione iniziale BYTE toRobot MAX_BUF_SIZE toRoboti1 MAX BUF SIZE toRobot2 MAX_BUF_SIZE toRobot3 MAX_BUF_SIZE fromRobot MAX_BUF_SIZE bool init void bool doMovements void bool off void Con la chiamata a doMovements vengono inviati all umanoide in sequenza i tre buffer toRobot1 toRobot2 e toRobot3 La struttura dei tre buffer stata descritta nel paragrafo 6 5 2 bool doMovements 1 bool toReturn false toReturn rcWrite toRoboti BYTES TO WRITE amp bytesWritten toReturn toReturn amp rcWrite toRobot2 BYTES TO WRITE amp bytesWritten toReturn toReturn amp rcWrite toRobot3 BYTES TO WRITE amp bytesWritten return toReturn Il metodo off invia pacchetto che comanda lo spegnimento del robot 6 6 CREAZIONE DEI PACCHETTI 63 6 6 Creazione dei pacchetti I pacchetti vengono creati e inviati durante l esecuzione del metodo savePose gi descritto nel paragrafo 6 2 Ad ogni salvataggio di una posa nell array di struct motions se la connessione con l umanoide aperta viene lanciato il metodo exexcPose Tale metodo riformatta le informazioni contenute nella struct actualPosition e lancia il metodo doMovements 6 6 1 La metodo execPose Questo metodo riceve in ingresso un puntatore al buffer che contiene gli offset dell ul tima posa salvata Prima di lanciare il metodo doMovements trasferisce i dati con tenuti nel buffer ricev
91. rees rightward in 1500 ms move head of 90 degrees leftward in 1500 ms stop repeat 2 times greetings stop exit 4 10 UN ESEMPIO 35 _MOTION_FORMAT POSEDEF_V1R4 _ENABLE_AXIS 62 _ MOTION_INFO 50 10 6 0 1 L 1 _STARTMOT _MOTION_INFO POSE1 50 43 6 6 2 1 _POSE 50 0x0000 0x0aa5 0x3e97 0xf5c8 0x0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x3680 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0 0000 0X0000 1 1111 10000000000000000000000000000001 _MOTION_INFO POSE2 50 100 6 6 3 1 _POSE 50 0x0000 0x0aa5 0x3e97 0xf5c8 0x0000 0X0000 0x0000 0xf55b 0xc169 0x0a38 0 x0000 0X0000 0x0000 0X0000 0X0000 0x1d61 0x9d38 0x0000 0x0000 0X0000 0X0000 0 xe29f 0xc980 0x0000 0X0000 0X0000 0x0000 0X0000 0X0000 0X0000 0x0000 0x00c8 0 x0100 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0x0000 0 x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0X0000 0x0000 0 X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 0X0000 X Voice Files Other Hello wav 000000000000000000000000000000 _MOTION_INFO CALCULATION3 50
92. remere sulle frecce presenti sul bloc co posa all interno della Motion Area per impostare la velocit desiderata accusando una perdita di tempo se il nuovo da impostare era molto lontano dal valore predefi nito Ora invece solamente necessario specificare al termine di una istruzione di posa la seguente sintassi in integer milliseconds Il codice all interno del traduttore si preoccuper del cambiamento di base per renderlo compatibile con il valore di clock della scheda che controlla il robot 4 5 Pi azioni contemporaneamente Un altro aspetto interessante del nuovo software traduttore riguarda la possibilit di poter far muovere al robot pi di un giunto contemporaneamente nello stesso blocco posa Questa operazione risulta essere pi facile rispetto a prima poich basta elen care le istruzioni da compiere come un normale elenco tra due azioni contemporanee necessario inserire la parola AND oppure il simbolo della virgola Dopo l ultima istruzione per viene richiesto l inserimento di un altro carattere speciale il punto 77 in modo che il traduttore possa capire quando terminano le istruzioni relative ad un blocco in modo e quando iniziano quelle della posa successiva 4 6 I cicli La realizzazione delle ripetizioni di sequenze di blocchi posa cambia sostanzialmente con il traduttore rispetto al software RobovieMaker l utente non deve preoccuparsi n dei blocchi di calcolo n dei blocchi di
93. risultato la semplicit di un throughput elevato nell esecuzione delle istruzioni e una notevole prontezza nella gestione degli interrupt tutto questo a fronte di un core dalle dimensioni ridotte e dal prezzo contenuto La CPU LPC2148 incorpora 512 kB di memoria flash che pu essere usata per contenere sia dati che codice La memoria flash pu essere programmata in diversi modi ad esempio tramite la porta seriale fronte delle scelte effettuate nella progettazione la memoria realmente disponibile per contenere il codice dell utente di 500 kB La memoria flash in dotazione con la CPU garantisce un numero minimo di cicli di scrittura pari a 100000 inoltre garantisce vent anni di durata per i dati contenuti in essa 8 1 La memoria RAM disponibile pari 32 altri 32 kB sono messi a disposizione dalla scheda e pu essere indirizzata a 8 16 e 32 bit LPC2148FBD64 equipaggiato inoltre con un USB device controller che per mette lo scambio di informazioni a 12 Mbit s con un USB host controller ENTI io ENTO POr3128 and Pos PIPE 1 Pins sharod with GPIO 2 LPC2148 3 USB DMA controller with 8 k of RAM accessibio as gsnoral purpose andor DMA in LPC2148 only Figura 1 5 Schema della scheda LPC2148 Capitolo 2 RobovieMaker2 2 1 Introduzione RobovieMaker2 il software dedicato alla gestione della scheda VS RC003 per il controllo del
94. rova nella prima posizione libera dell array di struct motions Al termine riporta il valore del tempo di esecuzione al valore di default e aggiorna il puntatore alla prossima cella di memoria libera void savePose 1 int i succ motions current type 1 for i 0 i lt INFO NUM i motions current info i actualPosition il char audioPwd 30 X Voice Files NN if strcmp audio 0 1 strcat audioPwd audio strcat audioPwd wav strcpy motions current sound audioPwd 52 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO strcpy audio succ current 1 motions current next1 succ current actualPosition time 50 Le funzioni saveCalculation e savelf sono stati realizzati per memorizzare rispettivamente i blocchi di calcolo e i blocchi di salto condizionato Entrambe sal vano nella prima cella dell array info l identificatore dell operazione nella seconda l indice della variabile e nella terza il valore di confronto In aggiunta nel metodo savelf viene salvato il valore del numero di blocco quando la condizione di salto falsa void saveCalculation int op int index int value int succ motions current type 2 motions current info 1 op motions current info 2 index motions current info 3 value succ current 1 motions current next1i succ currentt void savelf int op int index
95. rsi delle inizializzazioni dei contatori o dei confronti D altra parte in questo software non possibile utilizzare diversi cicli in un movimento finch il primo ciclo non termina cio fino a quando il suo contatore uguale a zero Il ciclo successivo non ripeter le pose ma salter sul ramo di salto Di conseguenza non possono essere realizzati cicli nidificati Il blocco di calcolo serve per eseguire le operazioni con le variabili durante la riproduzione del movimento Si possono realizzare parecchi movimenti avanzati inserendo i blocchi di calcolo Per esempio assegnando un contatore ad un blocco di calcolo diventa possibile creare cicli nidificati Dalla combinazione di un salto condizionato diventa possibile creare diversi cicli in un movimento CALCULATION v 0 0 Figura 2 5 Blocco di calcolo Per inserire un blocco di calcolo si seleziona Motion Add operation block dal men questo verr aggiunto nella Motion Area Si pu modificare il nome del blocco ed il flusso in uscita alla stessa maniera di un blocco posa Nel blocco di calcolo viene visualizzata l operazione che viene eseguita durante il movimento Con un doppio click sul blocco di calcolo si apre la finestra di dialogo dove si possono modificare le preferenze dell operazione da eseguire Diversi calcoli sono disponibili ed in aggiunta possibile assegnare un valore costante ad una variabile risultato in sostituzione di un calcolo Le operazion
96. s i infolgyroX motions i info gyroY motions i info mvPitchL motions i info mvPitchR motions i info 1StepRoll1L motions i infol lStepRollR motions i info rStepRollL motions i info rStepRollR motions i info paceLegL motions i info paceLegR motions i info turnL motions il info turnR motions i info shootAn motions sound break case 2 fprintf fp _MOTION_INFO CALCULATION d 50 a 6 6 a 1 n i i 50 motions i next1 fprintf fp VARCON Ad 4d Ad NnNn motions i info 1 motions i info 2 motions i info 3 break 74 A FLEX amp BISON case 3 fprintf fp _MOTION_INFO IF d 50 a 6 6 a d n i i 50 motions i next2 motions i nexti fprintf fp _MIF a 4d Xa n n motions i info 1 motions i info 2 motions i info 3 break fprintf fp _MOTION_INFO END 11 50 16 46 1 1 n_ENDMOT 50 current Loads from file instructions to build movements void loadFile char fileName FILE ptrFile fopen fileName rb char op 10 char audio2 100 int ti int paraml int tmp 34 while fscanf ptrFile s op EOF if strcmp op POSE 0 fscanf ptrFile d x Ax hx Ax hx hx Ax Ax 4 hx hx Ax LK Ax x LX Ax Ax Ax Ax hx hx AX Ax Ax hx Ax LX Ax hx Ax amp tmp time amp tmp anRollR 1 amp tmp anPitchR amp tmp knPitchR amp tmp thPitch
97. s si occupa di caricare le sequenze di blocchi da un file esterno utilizzando fscanf dalla libreria stdio h di C Ogni azione invoca il metodo loadFi le gi analizzato precedentemente che si occupa della lettura e del trasferimento delle informazioni nell array motions movements GREETINGS 1 loadFile greetings txt 58 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO L azione reset quando invocata riporta tutti i valori contenuti nell array actual Position a quelli di partenza Questi all inizio vengono memorizzati all interno del vettore offs di conseguenza l azione consiste nella copia di offs in actualPosition reset RESET int i for i 0 i lt INFO NUM i actualPosition i offs i Exit infine l azione che conclude l inserimento di istruzioni invocando il me todo toString il traduttore riversa l intero contenuto della struct motions sul file output txt e al termine chiude il programma exit EXIT toString return 0 6 2 4 Macro Per permettere l utilizzo di macro sono state implementate due regole grammaticali e SAVECMD TEXT e EXECCMD TEXT La prima si occupa della definizione della macro salva le istruzioni date in in in put in un file di testo e rinomina il file con lo stesso nome della macro la seconda istruzione si occupa dell esecuzione della macro imposta le due variabili d ambiente
98. sempre pi anche nell ambito della didattica si pensato quindi di sviluppare un progetto da mettere al servizio dell insegnamento Il traduttore stato creato per ridurre la distanza tra didattica e robotica e per permettere a persone che non possiedono delle competenze specifiche di utilizzare senza difficolt un robot umanoide di ultima generazione La prima riflessione riguarda la necessit di far capire al robot un linguaggio naturale cio di alto livello utilizzato normalmente per impartire comandi si reso quindi necessario comprendere come tradurre un istruzione nei corrispondenti comandi di basso livello Per la realizzazione sono stati utilizzati gli strumenti Flex 8 Bison attraverso i quali stato possibile procedere con l analisi sintattica e con l analisi semantica delle istruzioni di alto livello in modo da tradurle in istruzioni per il robot umanoide Robovie X Le istruzioni che il traduttore in grado di riconoscere e successivamente di ela borare riguardano il movimento di uno o pi parti del corpo sia in contemporanea che non nella frase pu essere specificato il tempo di transizione tra la posizione iniziale e quella finale e anche il suono da riprodurre durante il movimento inoltre possibile impartire dei comandi predefiniti ed previsto anche l utilizzo di cicli annidati La struttura del file generato dal traduttore stata analizzata mediante un lavoro di reverse engineering nel quale s
99. sizione iniziale BOOL initMotors bool toReturn motorParameter contiene la posizione del motore come offset esadecimale WORD motorParameter i 0 while i lt MAX_BUF_SIZE toRobot i 0x00 LA toRobot 1 0x55 toRobot 2 0x01 toRobot 3 OxEO toRobot 4 0x09 toRobot 5 0xF8 toRobot 6 0x02 toRobot 7 0x01 bastano questi parametri per accenderlo toRobot 10 Ox8A toRobot 11 OxEC toRobot 12 OxOF toRobot 13 OxC1 toRobot 14 OxEO toRobot 15 0x01 toRobot 16 0x82 toRobot 17 0x02 toRobot 18 0x86 toRobot 19 0x7C toRobot 20 0x80 toRobot 21 0x81 toRobot 22 0x5e toRobot 23 0x02 toRobot 24 0x80 toRobot 26 0x18 toRobot 30 toRobot 31 OxD9 toRobot 32 OxCE toRobot 33 0x1D toRobot 42 0x52 toRobot 43 0x26 toRobot 44 0x32 toRobot 45 OxE2 il robot toReturn rcWrite toRobot BYTES_TO_WRITE amp bytesWritten i 0 while i lt MAX_BUF_SIZE toRoboti i 0x00 itt con toRoboti 3 comunico la posizione iniziale ogni parametro per i motori una WORD 16 bit devo invertirne l ordine in modo che buffer i 158 e buffer i 1 msB toRobot1 1 0x55 toRobot1 2 0x03 ONLINEMODE amp RCCOM 95 toRobot1 3 toRobot1 4 toRobot1 6 toRobot1 7 toRobot1 8 toRobot1 9 toRobot1 10
100. so l interno verso l esterno in avanti e indietro Seguendo la sintassi della lingua inglese questa specifica di movimento viene inserita come ultimo parametro della frase Pertanto i vocaboli utilizzati sono 4 2 I COMANDI 29 dentro Inside verso l interno inward fuori outside verso l esterno outward avanti front in avanti forward dietro back indietro backward destra right verso destra rightward sinistra left verso sinistra leftward Per unire le parole chiave finora analizzate in modo da produrre una frase di senso compiuto sono necessarie delle ulteriori specifiche e Lato il robot formato da 16 servomotori simmetrici tra loro posizionati 8 sul lato destro e altrettanti sul lato sinistro Diventa di fondamentale importanza al fine di identificare univocamente ogni singolo giunto determinare su quale lato si trova il servomotore che si intende azionare e Preposizione si scelto di effettuare una distinzione tra la preposizione di e la preposizione a che sono le uniche utilizzate Questo serve per poter capire se l utente vuole posizionare l arto ad una determinata angolazione partendo dalla posizione attuale oppure se l arto deve essere spostato ad un angolo preciso indipendentemente dalla posizione corrente che occupa e Numero rappresenta il valore numerico all interno di un comando e Gradi indica l unit di misura del valore inserito nel campo Numero Di norma r
101. sociata alla definizione dell espressione regolare corrispondente Nel caso dello sviluppo di un programma traduttore l a zione che deve essere eseguita dopo il riconoscimento di una stringa quella di ritorno di un elemento terminale o token I token sono la rappresentazione numerica delle parole chiave riconosciute che vengono utilizzate sotto la forma numerica per semplificare il processo di traduzione Il valore numerico del token ed il tipo che 22 3 FLEX amp BISON esso rappresenta sono contenuti in una tabella presente in un header file che viene generato durante la compilazione di un file di specifiche Bison Il file di input in Flex costituito da tre sezioni separate da una linea contenente solo definizioni regole codice utente La sezione delle definizioni contiene le dichiarazioni delle definizioni di nomi semplici per semplificare le specifiche dello scanner e le dichiarazioni delle condizioni di inizio Le definizioni dei nomi hanno la forma nome definizione nome una parola che inizia con una lettera con un trattino basso 57 seguiti da zero o da pi lettere cifre o trattino L inizio di una definizione viene considerato come il carattere che non sia uno spazio bianco mentre la fine corrisponde alla fine della riga La definizione pu essere successivamente essere riferita utilizzando il nome che in questo modo diventa una definizione Per esempio DIGIT
102. struzioni ottenendo come risultato l unione di tutte le cose I movimenti che sono gi caricati nel traduttore sono i seguenti fai intero passi avanti fai intero passi indietro fai intero passi verso destra fai intero passi verso sinistra walk number step ahead walk number step back walk number step rightward walk number step leftward balla dance inchino greetings sbadiglia yawn alzati da pancia in su getting up from face up alzati da pancia in su getting up from face down front flip back flip capirola avanti capirola indietro 4 9 Attivare la modalit real time Attivando la modalit real time se il robot connesso con il cavo USB le istruzioni in input al traduttore vengo eseguite in tempo reale dall umanoide Per avviare questa modalit operativa sufficiente collegare il Robovie X e assicurasi che l interruttore sia nella posizione ON e eseguire il comando online Prima di chiudere il programma e scollegare l umanoide opportuno terminare la connessione con il comando offline 34 4 INTERPRETAZIONE DEL LINGUAGGIO PSEUDO NATURALE 4 10 Un esempio Qui sotto viene riportato un esempio complesso di input che racchiude alcune le funzionalit del traduttore e nella pagina successiva il relativo file di comandi generato turn right arm at 180 degrees outward playing Other Hello reset repeat 3 times move head at 45 deg
103. t return SECTION Direzione anche per la specifica del verso del movimento si scelto di un token di tipo numerico In questo caso per gli schemi delle regole risultano pi complessi perch per un azione possono corrispondere parole diverse dentro e verso dentro inside e inward hanno lo stesso significato e restituiscono il token TO con lo stesso valore forward front yylval number 0 return TO back ward yylval number 1 return TO 1 yylval number 2 return TD out side yylval number 3 return TO rightward yylval number 4 return leftward yylval number 5 return TD L utimo gruppo di parole per le quali si scelto di utilizzare la conversione dalla parola ad un numero riguarda aumenta decrementa e imposta Questi tre vocaboli vengono restituiti con i valori 0 1 e 2 nel token SIGN increase yylval number 0 return SIGN decrease yylval number 1 return SIGN set yylval number 2 return SIGN Le altre regole hanno uno schema o l azione corrispondente meno complesso di quelle appena presentate Tuttavia meritano una particolare attenzione la regola che individua le preposizioni Il pattern restituisce nel token OFFS uno quando riconosce la parola of e zero quando individua la parola at o to ofl at to yylval number strcmp yytext of return OFFS Il token DEGREE viene utilizzato sia per c
104. te nel capitolo pre cedente senza passare per il RobovieMaker 2 la realizzazione dei file di comandi risulta notevolmente facilitata 5 2 Analisi del protocollo di comunicazione Le funzioni utilizzate sono state ricavate mediate un processo di reverse engineering disassemblando e studiando del codice della libreria rclib dll utilizzata del program ma Robovie Maker per il robot VS RC003 umanoide della generazione precedente al Robovie X Le funzioni ricavate per il VS RC003 sono state adattate e rese compatibili al Robovie X rendendo possibile l mplementazione della parte traduttore che comunica con il robot contenuta nel file reCom c Tuttavia per capire cosa inviare al robot stata necessaria una fase di sniffing e analisi dei dati scambiati tra il Robovie X e il software RobovieMaker2 L analisi dei pacchetti catturati ha permesso di comprendere come sono struttu rate le informazioni in questi ultimi e di conseguenza di sviluppare le funzioni che preparano i pacchetti in modo che il robot possa essere comandato Questa parte di codice stata implementata nel file OnlineMode c Si elenca ora le quattro fasi principali in cui avviene la comunicazione comando dell umanoide 40 5 CONTROLLO IN TEMPO REALE Apertura della connessione tra Windows e umanoide e Inizializzazione dell umanoide e accensione dei servomotori e Creazione e invio dei pacchetti contenenti le istruzioni per il Robovie x e Spegnimento e chi
105. terpretazione del linguaggio pseudo naturale Al Jntroduzione 2204 a A ee E k ey U AD nieo mand VII IX 10 10 11 12 16 17 18 18 19 19 21 21 21 24 45 ASUONI af subir Sei sei 44 Velocit dei movimenti 4 5 Pi azioni contemporaneamente yo ret bok oar eto Anar 4 7 Creare comandi personalizzati 54 er 4 7 1 Un esempio di macro 48 Movimenti 4 9 Attivare la modalit real time 410 DIO kM S Z SX ao e Pc ap ene ee t LIL Putra comandi tire Controllo in tempo reale Db Entro x ated ete gore bad a 6 Dei 5 2 Analisi del protocollo di comunicazione 5 3 Connessione al Robovie X 5 4 Scambiare informazioni con umanoide 5 5 Struttura dei pacchetti ft paure oi 420 5 5 1 nizializzazione 5 5 2 Accendere e spegnere i servo motori 5 5 3 Esecuzione di una Realizzazione del traduttore Manuale Tecnico tia Lace a LR RTS DB sodes t Ia E da Ol Definizioni s n Rx pe Som Se ae Oe D L2 Regole a rh dod SEL Ead 02 NIVp
106. tion joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 factualPosition joint degToOffset 5 offs joint else if 7 1 actualPosition joint degToO0ffset 5 offs joint break case 5 if 4 if 7 0 actualPosition joint degTo0ffset 5 else if 7 1 actualPosition joint degTo0ffset 5 else if 7 0 actualPosition joint degToO0ffset 5 offs joint else if 7 1 actualPosition joint degToOffset 5 offs joint 1 break case 6 if 4 2 BISON 79 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToOffset 5 offs joint else if 7 3 actualPosition joint degToOffset 5 offs joint 1 break case 7 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToOffset 5 offs joint else if 7 3 actualPosition joint degToOffset 5 offs joint break case 8 if 4 if 7 2 actualPosition joint degTo0ffset 5 else if 7 3 actualPosition joint degTo0ffset 5 else if 7 2 actualPosition joint degToOffset 5 offs joint else if 7 3
107. toRobot toRobot toRobot 10 11 12 13 14 15 16 17 18 19 20 21 0 00 0x55 0 01 OxEO 0x09 OxF8 0x02 0x00 0x00 0x00 0x00 Ox8A OxEC OxOF 0x21 OxEO 0x01 0x82 0x02 0x86 0 7 0x80 BYTES TO WRITE BYTES TO WRITE BYTES TO WRITE BYTES TO WRITE amp bytesWritten amp bytesWritten amp bytesWritten amp bytesWritten ONLINEMODE amp RCCOM 97 toRobot 22 0 81 toRobot 23 Ox5E toRobot 24 0 02 toRobot 25 0 80 toRobot 26 0 00 toRobot 27 0 18 toRobot 28 0 00 toRobot 29 0 00 toRobot 30 0 00 toRobot 31 OxAE toRobot 32 OxD9 toRobot 33 OxCE toRobot 34 Ox1D toRobot 35 0 00 toRobot 36 0 00 toRobot 37 0 00 toRobot 38 0 00 toRobot 39 0 00 toRobot 40 0 00 toRobot 41 0 00 toRobot 42 0 00 toRobot 43 0 52 toRobot 44 0 26 toRobot 45 0x32 toRobot 46 OxE2 toReturn rcWrite toRobot BYTES_TO_WRITE amp bytesWritten return toReturn Listing A 7 onlineMode h include lt windows h gt include lt stdbool h gt bool isOnline bool goOnline bool go0ffline bool execPose WORD actualPosition Listing A 8 onlineMode c include lt stdio h gt include lt string h gt include onlineMode h include move h ifde
108. usura della connessione con il robot 5 3 Connessione al Robovie X Windows rileva il dispositivo come HID Human Interface Device Gli header che contengono i prototipi delle funzioni necessarie per interagire con i dispositivi HID sono hidsdi h e setupapi h le relative librerie statiche sono libhid e libsetupapi La connessione si effettua con la chiamata della funzione BOOL rcOpen che ha il compito di individuare il robot tra i vari HID collegati al pc e di aprire la connessione creando un Handle 5 4 Scambiare informazioni con l umanoide La comunicazione avviene attraverso dei blocchi composti da pacchetti della dimen sione standard di 64 Byte se il blocco da pi grande si divide l informazione in pi pacchetti fino a un massimo di 5 importante far notare che i byte all interno del pacchetto devo avere una co difica Little Endian quindi se si decide di inviare il valore esadecimale OxXXY Y all interno del pacchetto deve essere scritto nell ordine OxYY 0xXX in due byte consecutivi 00 01 02 03 04 05 06 07 08 09 OA OB OC OD OE OF 10 11 12 13 14 15 16 17 18 19 1 1 ID IE IF 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Tabella 5 1 Pacchetto generico da 64 Byte ogni cella contiene 8bit 5 5 STRUTTUR
109. uto in ingresso nella posizione corretta dei tre array toRobot scambiando sempre i byte pi significativi con i meno significativi ricordando quanto detto nel capitolo 5 bool execPose WORD actualPosition 1 bool toReturn false TIME toRobot3 17 BYTE actualPosition 0 HEAD_YAW toRobot1 59 BYTE actualPosition 1 toRobot1 60 actualPosition 1 gt gt 8 EYE_LED_L toRobot1 31 BYTE actualPosition 2 toRobot1 32 actualPosition 2 gt gt 8 ANKLE_ROLL_R toRobot1 7 BYTE actualPosition 19 toRobot1 8 actualPosition 19 gt gt 8 NOICE toRobot2 5 BYTE actualPosition 20 toReturn doMovements return toReturn 64 6 REALIZZAZIONE DEL TRADUTTORE MANUALE TECNICO 6 7 Istruzioni per la compilazione Per compilare i file e y necessario aver installato in Windows gli strumenti Flex Bison e l ambiente di sviluppo MinGW che include il noto compilatore open source gcc e i necessari header file e librerie Le istruzioni necessarie sono le seguenti flex mylexer 1 bison d myparser y gcc lex yy c myparser tab c move c onlineMode c rcCom c o VX Translator exe Il primo comando compila mediante Flex il file di specifiche mylexer l L output di questa compilazione il file lex yy c che il file scritto nel linguaggio C all interno del quale contenuta la funzione yylex che ha il compito di eseguire l an
110. x00 0x28 0 0 OxCO 0 01 Ox2E 0x02 OxEO 0x00 0x04 0x02 OxOE 0 04 OxCO 0 05 0 04 0 10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 42 5 CONTROLLO IN TEMPO REALE 0x55 0x01 OxEO 0x00 0 10 0 04 0x00 0x0B 0x20 0x00 0x8A 0 0x06 Ox19 OxEO 0x01 0 0 0x40 0x00 0x00 0x2E 0x02 OxEO 0x00 0x04 0x02 0x0E 0x04 OxCO 0x05 0 04 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 5 5 2 Accendere e spegnere i servo motori 0x55 0x01 0 0 0x00 0x10 0x04 0x00 0x0B 0x20 0x00 0 8 OxEC 0x06 0x09 0 0x09 0x02 0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0 00 0 00 0 00 0 00 OxOO 0 00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0 00 0 00 0x00 OxOO 0 00 Tabel

Download Pdf Manuals

image

Related Search

Related Contents

Instruction Manual Manuel d`instruction Manual de Instrucciones  取扱説明書 液晶カラーモニター LL  Mode d`emploi Istruzioni per l`uso Bedienungsanleitung  Philips Disposable dust bag  MANUAL DE INSTRUÇÕES - UTAX GmbH    Descargar libros de donación  Notice d`Utilisation Machine à Popcorn F-902    Maytag MVWB835DW Use and Care Manual  

Copyright © All rights reserved.
Failed to retrieve file