Home
Robótica Asistencial - e-Archivo Principal
Contents
1. II portCHAR lis bus select voi d void lis bus unselect voi d uint8 t lis perror void portCHAR lis init voi d uint8 t lis read reg uint8 t addr portCHAR lis write reg uint8 t addr uint8 t regval portCHAR lis power up void portCHAR lis power down void portCHAR lis SetFilterDataSelection enum filter mode enum hpc hpc target portCHAR lis SetScale enum scale scale trg portCHAR lis SetDataAlignmentSelection enum das das trg portCHAR lis SetDecFactor enum data rate samples drs uintl6 t lis read x voi d uintl6 t lis read y void uintl6 t lis read z voi d uintl6 t lis read xyz b uint8 t buf XYZ BUF 5 Fendif LI S3LVO2DRI VER H 125 lis3102 driver c l x Accelerometer driver written by Antti Liesj rvi i include i53l v02 driver h include 2c h include rprintf h A O XA XK XK KH KH KH gt p Initializes the accelerometer n case of problems with the initialization the function sets the lis errno variable with the corresponding error code Vreturn pdTRUE correct initialization Vreturn pdFALSE problems with the initialization rtCHAR lis init void Initialize control registers NI NI PD1 1 1 PDOz1 device ON DF1 0 I DF0z0 40Hz data rate ST 0 Self test OFF Zenzl Enable axis Z Yenzl Enable axis Y Xen 1 Enable axis X I CTRL_REG2 21h I FS 0 Scale 2g I BDU 0 Block Data Update enabl
2. Position absolute drive write param32 CODE MODE TYPE CODE CPA Sets command position 5867580 drive write param32 CODE CPOS 5867580 Sets position mode 3 drive write param32 CODE MODE TYPE CODE PP3 IT Keep position and speed reference drive write param32 CODE MODE TYPE CODE TUMIJ Start motion drive send command CODE UPD if button down portA BUTTON TIGHT LOOSE 101 drive send command CODE STOP goto tight break else if button down portA BUTTON drive send command CODE STOP goto home else if button down portA BUTTON BED drive send command CODE STOP goto bed if button down portA BUTTON MANUAL drive send command CODE STOP goto manual break if drive read param32 ASK APOS drive read param32 ASK_CPOS goto ti ght Check VR commands switch VRorder case VR MOVE LEFT drive send command CODE STOP goto moving left break case VR MOVE RI GHT drive send command CODE STOP goto moving right break case VR STOP drive send command CODE STOP goto auto break case VR TI GHTEN drive send command CODE STOP goto tight break case VR GO HOME drive send command CODE STOP goto home break case VR GO TO BED drive send command CODE STOP goto bed 102 break else drive send command CODE STOP goto auto break break c
3. State STATE MANUAL TI GHTENI NG return 0 Go to MANUAL LOOSENING state uint8 t goto manual loose rprintf MANUAL LOOSENING1 rin led on LED ACTI ON led off LED READY State STATE MANUAL LOOSENI NG return 0 Go to PUSH LEFT SERVO state uint8 t goto push left rprintf PUSHI NG LEFT r n led on LED ACTI ON led off LED READY State STATE PUSH LEFT return 0 Go to PUSH RIGHT SERVO state uint8 t goto _push_right rprintf PUSHING RIGHT r n 91 ed on LED ACTI ON led off LED READY State STATE PUSH RI GHT return 0 Go to MOVING RIGHT Voice recognition only state uint8 t goto moving right rprintf MOVING RIGHT r n led on LED ACTI ON led off LED READY state STATE MOVI RI GHT return 0 Go to MOVING LEFT Voice recognition only state uint8 t goto moving left rprintf MOVING LEFT r n led on LED ACTI ON led off LED READY state STATE MOVI NG LEFT return 0 Interrupt driven state machine ruling the system I t is a large switch loop checking the current state of the system first then checks the 1 0 ui nt8 t state machine switch state I First state of the state machine Initializes the drive controller case STATE INIT DRIVE rprintf I NIT DRI VEL rin drive init wait 2 seconds for initializing drive while time 32000 ti mer
4. Es tambi n importante remarcar que los valores umbral definidos para el aceler metro son bastante estrictos Una inclinaci n leve de la barra puede prevenir al sistema de llevar a cabo cualquier orden de movimiento Aunque por regla general este es un efecto deseado a veces provoca que el soporte se detenga en la mitad de su trayectoria como por ejemplo si est movi ndose desde Home a Chair lo cual es un efecto negativo en el modo manual 6 2 Probando el reconocimiento de voz En este proyecto se ha implementado reconocimiento de rdenes por voz Se hace necesario por tanto determinar su funcionalidad Tras realizar las pruebas en el rango de 2 metros desde el micr fono pueden extraerse las siguientes conclusiones E reconocimiento es preciso no se producen falsos reconocimientos Esto es especialmente importante para la palabra de disparo para que no sea reconocida en una conversaci n normal Tasa de reconocimiento aproximada del 90 cuando el soporte est est tico Los patrones de reconocimiento son bastante estrictos por lo que las instrucciones no son siempre reconocidas 45 La tasa de reconocimiento disminuye cuando el soporte se est moviendo debido al ruido generado por los dos motores durante su funcionamiento y la cercan a del micr fono a los mismos Este problema puede ser solventado parcialmente si se habla m s alto La tasa de reconocimiento disminuye de manera dr stica si el usuar
5. include rprintf h include canproto h include voicerecon h void init void unsigned char VRorder volatile uint8 t canstate volatile uint8 t state volatile uint8 t next state 1D of the MI CROController define CANID 2 int main void I CAN initialization caninit Digital init sei while 1 1 0 initialization Starting voice recognition subroutine VRorderzvoicerecognition return 0 but 83 void init void Start Ti mer ti mer start Port A BUTTONS initialization Buttons on terminal blocks DDRA 0x00 Data direction INPUT PORTA OXFF llactivate the pull up resistor for buttons Port B MOTOR initialization DDRB OxFF i data direction OUTPUT cbi PORTB PB4 PB4 0C4 OC2A PWM output cbi MOTOR PORT MOTOR DIRECTION PB5 0C3 motor direction sbi MOTOR PORT MOTOR ENABLE PB6 0C2 enable Port C LEDS initialization DDRC OxFF data direction OUTPUT PORTC 0x00 LEDS are grounded 0 means off I Port D initialization PORTD 0x00 DDRD 0x00 li Port E initialization DDRE 0x00 PORTE OxFF l activate the pull up resistor for buttons llinitialization of the PCB buttons and LED Set output direction for led see AT90CAN128 datasheet page 66 sbi STATUSLED_ DIRECTION STATUSLED sbi STATUSLED_PORT STATUSLED p Port F initialization DDRF OxFF PORTF 0x00
6. Available states in the state machine define STATE NONE 0 define STATE LEFT 1 define STATE RIGHT 2 define STATE MANUAL 3 define STATE AUTO 4 define STATE TI GHTENED 5 define STATE TIGHTENING 6 define STATE LOOSENING 7 define STATE HOME 8 define STATE BED 9 define STATE CHAIR 10 86 define define define define define define define define define define define define define define define define TATE_AT_HOME 11 TE NOT READY 12 TE INIT DRIVE 13 ATE MANUAL TI GHTENI NG 14 TE MANUAL LOOSENING 15 TE PUSH LEFT 16 TE PUSH RIGHT 17 TATE MOVING LEFT 18 TATE MOVING RIGHT 19 1 1 gt gt 1 gt Cn Cn Cn Cn UN UN UN UN UN 1 1 gt gt NEXT STATE NONE 0 NEXT STATE HOME 1 NEXT STATE BED 2 NEXT STATE CHAIR 3 NEXT STATE MANUAL 4 NEXT STATE AUTO 5 5 STATE NOT READY 6 Definitions to use in combination with is straight define define define define define int8 t int8 t int8 t int8 t ox c c uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t uint8 t gendi f STATI C 0 MOVING LEFT 1 MOVI NG RIGHT 2 PUSHI NG LEFT 3 PUSHI NG RIGHT 4 button changedA uint8 t button button changedE ui nt8 t button button down portA ui nt8 t button button down portE ui nt8 t button goto none goto auto goto manual goto left goto ri
7. Sistema de movimiento mejorado Computaci n distribuida Capacidad de giro Control asistido mejorado Brazo rob tico o asistido 4 1 Mejoras a realizar en este proyecto Cambios en el c digo original y mejoras sobre el mismo La escritura de tal cantidad de c digo sin errores es una tarea realmente complicada para una s la persona Habitualmente el c digo creado tiene un gran potencial de optimizaci n y mejoras en su funcionamiento que un programador ajeno al c digo inicial puede detectar de una manera relativamente sencilla Por ello a la vez que he trabajado sobre otras mejoras partes del c digo se han cambiado as como algunas estructuras y algoritmos que han sido simplificados tratando de mantener compatibilidad y coherencia con el resto del sistema Hacer funcionar el aceler metro correctamente En el uso del aceler metro es donde se producen la mayor cantidad de errores del sistema ya que no parece que est funcionando apropiadamente durante las pruebas iniciales Este es un problema por tanto que debe ser atajado en este proyecto para que el soporte no trate de tensarse o moverse cuando est inclinado en alguna direcci n ya que puede ser peligroso incluso para el propio soporte 23 Detecci n de colisiones b sica Tal y como se encuentra en prototipo en este punto el soporte se mueve en el momento en que recibe una orden del mando de control Este movimiento tratar de llevarse a cabo incluso aunque
8. VR instruction Move left The support will only stop if MANUAL mode is selected it is given a different VR or AUTO instruction or it reaches the boundaries case STATE MOVING LEFT if is straight MOVI NG LEFT II set speed mode 1 drive write param32 CODE MODE TYPE CODE SP1 II set command speed to the LEFT drive write paramf CODE CSPD 80 start motion drive send command CODE UPD check if home bed or chair is pressed or manual mode if button down _portA BUTTON MANUAL drive send command CODE STOP goto none break else if button_down_portA BUTTON HOME VRorder VR_GO_HOME l start to move the ceiling motor to position HOME drive send command CODE STOP goto home break else if button down portA BUTTON BED VRorder VR_ GO TO BED listart to move the ceiling motor to position BED drive send command CODE STOP goto bed break else if button down portA BUTTON CHAI R VRorder VR_GO_TO_CHAIR start to move the ceiling motor to position CHAIR drive send command CODE STOP goto chair break else if VRorder VR_ MOVE RI GHT drive send command CODE STOP goto moving right break If VR or manually order to start tightening stop the ceiling motor and start tightening else if VRorder VR_TIGHTEN button_down_portA BUTTON TIGHT LOOSE drive send command CODE STOP goto tight break 96 If VR ordered to stop or
9. Xx acceleration x y acceleration y z acceleration z 110 voicerecon h ifndef VOI CERECON define VOI CERECON H The following definitions help to work with the VRBot module environment Further details of the VRbot commands and responses can be found in the Appendix C of this project define VR_START_RECOGNITI ON d define VR MOVE LEFT A define VR MOVE RIGHT B define VR STOP C define VR TI GHTEN D define VR GO HOME E define VR GO TO BED F define VR GO TO CHAIR G define VR ACK define VR START RECON d define VR TRIGGER RECON define VR ORDER RECON B define VR TI t define VR RECON OK r define VR ASK ID x define VR IDO A define VR WAKE b define VR LANGUAGE SET define VR ENGLISH A define VR OK o define VR THREE SECONDS F define VR SET TI MEOUT o define VR SET RECOG LEVEL v define VR SD EASY B rri unsigned char voicerecognition void int VRinitialization voi d unsigned char Sendinstruction unsigned char instruction unsigned char response int data void GetInstruction unsi gned char response endif VOICERECON IH voicerecon c l x the subroutines managing VRbot module are here include voicerecon h include uart2 h include rprintf h unsigned char response unsigned char voicerecognition void int data 0 response 0 static int initOK Run initialization subroutine until the devic
10. conf 0x80 1XXX XXXX break default conf2 conf lis write reg CTRL REG2 ADDR MSK conf2 return pdTRUE portCHAR lis SetDataAlignmentSelection enum das das trg uint8 t conf conf 2 conf lis read reg CTRL REG2 ADDR MSK if conf pdFALSE debug SET SCALE could not get the bus n return pdFALSE else I Modify only the deci mation factor bits in the control register switch das trg case BITS 12 RJ conf2 conf OxFE XXXX XXX0 break case BITS 16 L conf2 conf 0x01 XXXX XXXI break default conf2 conf lis write reg CTRL REG2 ADDR MSK conf 2 return pdTRUE uintl6 t lis read x void unsigned char recvdata 2 unsigned char senddata READ WO AUTO I NCREMENT MSK OUTX L ADDR MSK mode addr i2c send byte LIS ADDR senddata i2c receive LI S ADDR 2 recvdata lli2c transfer LI S ADDR 1 amp senddata 2 recvdata return recvdata 0 recvdata 1 4 uintl6 t lis_read_y void unsigned char recvdata 2 unsigned char senddata READ WO AUTO INCREMENT MSK OUTY L ADDR MSK mde addr 128 i2c send byte LIS ADDR senddata i2c receive LI S ADDR 2 recvdata lli2c transfer LI S ADDR 1 amp senddata 2 recvdata return recvdata 0 recvdata 1 4 uintl6 t lis read z void unsigned char recvdata 2 unsigned char senddata READ WO AUTO INCREMENT MSK OUTZ L ADDR MSK I mode addr i2c send byte L
11. ti mer ms 0 ti mer void timer start ti mer ms 0 timer 0 uint16 t time 118 return ti mer Control Register TCCROA bits 1024 prescaler 16khz CS02 501 CS00 1 0 1 Normal mode WGM01 0 0 Register TIMSKO Enable Interrupt bit TOLEO void init interrupt TimerO is used as an interrupt source at 16kHz frequency TIMSKO 0 TCCROA 0 sbi TIMSKO TOI EO sbi TCCR0A C502 sbi TCCR0A CS00 sec counter 0 interrupt counter 0 Scaler 0 sell Interrupt frequency 16KHz ISR TI MERO vect ti mer run if scaler 16 Calling state machine function at 1ms intervals state machi ne scaler 0 scaler 119 slidepotentiometer h ifndef SLIDEPOTENTI OMETER define SLI DEPOTENTI OMETER void init potentiometer voi d int is steady voi d void readPotenti ometerVal ue void fendi f slidepotentiometer c In this file all 3 A 3 XK gt include lt avr io h gt include a2d h include i nttypes h include motor h include uart2 h include rprintf h define LIMIT VALUE 980 uintl6 t result u08 potentio tick 0 void init potentiometer void conversion is Slow and this cal the sliding potentiometer routines are defined The slide potentiometer is attached to the string in the tightening motor and measures if it is steady enough when tighte
12. 0xCF 0x20 XX10 XXXX break case HZ 2560 conf2 conf 0x30 XX11 XXXX break default conf2 conf lis write reg CTRL REGI ADDR MSK conf2 return pdTRUE portCHAR lis SetFilterDataSelection enum filter mode f mode 126 enum hpc hpc target uint8 t conf 0 conf 0 conf lis read reg CTRL REG3 ADDR MSK if conf pdFALSE debug SET FILTER could not get the bus n return pdFALSE else switch f mode case FILTER DISABLED conf2 conf OxEF XXX0 XXXX break case FILTER ENABLED conf2 conf 0x10 XXX1 XXXX break default conf2 conf switch hpc target case HPC 512 conf2 conf2 OxFC XXXX XX00 break case HPC 1024 conf2 conf2 0xFC 0x01 XXXX XX01 break case HPC 2048 conf2 conf2 0xFC 0x02 II XXXX XX10 break case HPC 4096 conf2 conf2 0x03 XXXX XX11 break default break lis write reg CTRL REG3 ADDR MSK conf2 lis read reg HP FILTER RESET MSK Reset the contents of the internal filter return pdTRUE portCHAR lis SetScale enum scale scale trg uint8 t conf conf 2 conf lis read reg CTRL REG2 ADDR MSK if conf pdFALSE debug SET SCALE could not get the bus n return pdFALSE else I Modify only the deci mation factor bits in the control register switch scale trg case G2 conf2 conf 0x7F 0XXX XXXX break case G6 127 conf2
13. 5 Implementaci n de las mejoras 5 1 Optimizaci n y mejoras sobre el c digo original 5 1 1 Preparaci n del c digo original 5 1 1 1 Renombrado de ficheros 5 1 1 2 Borrado de c digo redundante 5 1 1 3 Tensi n en el modo autom tico 5 1 2 Control manual de la tensi n 5 1 3 Pruebas con el aceler metro Funcionalidades b sicas 5 1 4 Mejoras sobre el aceler metro Detecci n de colisiones 5 1 5 Desarrollos adicionales con el aceler metro Control asistido 5 2 Reconocimiento de voz 5 2 1 Elecci n del modulo de reconocimiento de voz 5 2 2 Principales caracter sticas de VRbot 5 2 3 Conectando VRbot a un PC 5 2 4 Pruebas y entrenamiento del modulo con VRbot GUI 5 2 5 Monitorizando el modulo con HyperTerminal 5 2 6 Programaci n de VRbot utilizando un PC 5 2 7 Conexi n de VRbot y configuraci n del sistema final 5 2 8 Implementaci n de las rdenes por reconocimiento de voz en el c digo del sistema 5 2 9 Funcionamiento del sistema final 6 Pruebas finales 6 1 Pruebas sobre los modos manual y autom tico 6 2 Pruebas sobre el reconocimiento de voz 6 3 Problemas de inicializaci n 7 Conclusiones y desarrollos futuros 8 Documentaci n adjunta en el DVD 9 Referencias Ap ndices A Carga del c digo en el microcontrolador Software necesario y Bootloader B Makefile del programa C Protocolo serie de VRbot C Ejemplo de programaci n del puerto serie en C C D C digo final
14. rica de comunicaci n RS 232 con conector DB9 debe ser usada para su comunicaci n con un PC Para la alimentaci n de ambos m dulos deber usarse una fuente de alimentaci n de 5V DC Informaci n detallada sobre la comunicaci n en serie del m dulo puede encontrarse en su hoja de caracter sticas 7 5 4 Diagrama de puertos del modulo de VRbot 5 5 Placa externa RS 232 VRbot Host MCU 5 6 Diagrama de conexiones Par metros de comunicaci n a trav s del Puerto serie Velocidad de transmisi n en BD 9600 defecto 19200 38700 57600 115200 8 Bits de datos Sin paridad 1 bit de parada Sin control de flujo Puesto que el microcontrolador AT90CAN128 tiene por defecto estos m smos par metros para la comuniaci n en seroe no debemos reconfigurar ni cambiar nada para conectar ambos sistemas No obstante estos par metros deben tenerse en cuenta a la hora de conectar y realizar pruebas con el modulo al conectarlo a un PC 37 5 2 4 Realizaci n de pruebas sobre el modulo con VRbot GUI Con el modulo apropiadamente conectado al PC a trav s del Puerto serie su interfaz gr fica de usuario o GUI descargable desde la web del proveedor ya puede ser usada Por tanto abrimos el programa y pulsamos connect Puede tambi n descargarse un tutorial detallado sobre como ense ar y entrenar rdenes al m dulo 8 El modulo puede reconocer dos tipos de palabras rdenes independientes del usuario SI y rde
15. rprintf ERROR Could not set SD recognition level to easy n init OK 0 else rprintf Set SD recognition level to easy n Ro Checking if the device has been initialized properly if initOK 1 init OK 2 rprintf Device initialized n else rprintf DEVICE NOT INI TI ALI ZED n rprintf Init ok d n init OK return init OK Sendinstruction unsigned char instruction unsigned char response int data instruction Command byte sent to the device through the serial port i data Byte read fromthe serial port buffer 1 if nothing is read from the E serial port response Valid response from the device This function sends an instruction to the device and then waits for response from it unsigned char Sendinstruction unsigned char instruction unsigned char response int data uartlSendByte instruction while data 1 data 0 data uartl1GetByte responsezdata return response 114 motor h ifndef MOTOR H define MOTOR H void tighten void loosen void stop tightening motor void init pwm fendi f motor c Pin 4 Motor power PWM could be used here Pin 5 Motor direction 1 Tighten 0 Loosen Pin 6 Motor enable 3 A XK XK 3 3 gt include lt avr io h gt include util h include motor h include global h include leds h Ti mer 2 Register TCCR2A Force output FOC2A 1 Fast PWM m
16. se puede verificar su correcta detecci n utilizando el programa VRbot GUI Es momento entonces de supervisar la el funcionamiento del m dulo Las rdenes usadas para el trabajo con el dispositivo son rdenes en ingles pero los grupos de palabras 2 y 3 han sido utilizados para los idiomas fin s y espa ol respectivamente Estos grupos de palabras han sido tambi n probados Por tanto las rdenes ense adas al modulo finalmente han sido las siguientes Wordset 1 Wordset 2 Wordset 3 o Left Vasemmalle lzquierda 1 Right Oikealle Derecha 2 Go home Kotiin A casa 3 Go to bed S nkyyn A la cama 4 Goto chair Puolille A la silla 5 Tighten Kiristys Tensar 6 Stop Seis Para Durante la realizaci n de este proyecto solo se ha usado el wordset 1 No obstante es realmente f cil el uso de los wordsets 2 y 3 tambi n De hecho podr a a adirse un selector de idioma al sistema 39 5 2 5 Probando y monitorizando el modulo con HyperTerminal En esta secci n se detalla c mo monitorizar la operaci n del dispositivo utilizando una conexi n por puerto serie El programa que ha sido usado para la lectura del puerto seria ha sido HyperTerminal descargable desde la p gina web http www hilgraeve com htpe download html Para la supervisi n del modulo a trav s del Puerto serie debemos entender c mo funciona en realidad Se incluye documentaci n y ejemplos del protocolo usado por VRbot en el documento adjunto 9 que tambi n pued
17. 2 2 6 Mando de control mando de control es usado para proporcionar las instrucciones binarias adecuadas para poder hacer funcionar al soporte Estas rdenes son le das por el microcontrolador que en respuesta manda las se ales adecuadas al controlador del motor Cada uno de los botones del mando de control est conectado a un pin de uno de los puertos I O digitales del microcontrolador Botones usados en el mando de control ver figuras 2 5 2 6 y 2 7 Interruptor On Off Enciende o apaga el dispositivo Interruptor Auto Man Selector de modo entre los modos manual y autom tico Bot n Vasen Oikea Left Right Movimiento a izquierda derecha en el modo manual Koti Home Movimiento hasta la posici n Home en el modo autom tico Sanky Bed Movimiento hasta la posici n Bed en el modo autom tico 18 Tuoli Chair Movimiento hasta la posici n Chair en el modo autom tico Kiristys Tightening Tensi n Extensi n en cualquiera de los dos modos El mando de control tiene tambi n 2 LEDs ver figura 2 6 controlados mediante salidas digitales del microcontrolador LED rojo LED de espera encendido cuando el sistema espera una instrucci n LED amarillo LED de acci n encendido cuando el sistema ejecuta una acci n 2 5 2 6 y 2 7 Mando de control Vistas laterales y frontal 2 2 7 Bater a y fuente de alimentaci n El soporte es alimentado por una bacteria de 12V adosada a la barra Es
18. ERROR read command data SEND training RECEIVE A extract training count 2 for a completely trained command tr count training AND 7 4 extract flags for conflicts SD or SI tr flags training AND 24 read index of conflicting command same group if any SEND conflict RECEIVE A read label length SEND length RECEIVE A read label text FOR i 0 TO length 1 SEND Y 2 label i RECEIVE decode digits IF label i THEN SEND label i RECEIVE A OQ END IF NEXT 73 Built in Command Sets In the tables below a list of all built in commands for each supported language along with group index trigger or wordset command index and language identifier to use with the communication protocol L opo o 2 1 English US German oo robot mee exp roboter O paci n azione 77 yay aktion a a in vt ns 3 m es nee e s sem op temo 3 ew ee atc wm 0 wh Tasa eyy 31 ue ee Ap ndice D Ejemplo de programaci n del puerto serie en C C Este c digo de ejemplo ha sido usado para realizar las pruebas de programaci n en serie a trav s de un PC del m dulo de reconocimiento de voz VRbot Hace uso de dos librer as de licencia GPL rs 232 c y rs 232 h desarrolladas por Teunis van Beelen Este pro
19. SV command data label and training Group index 0 trigger 1 15 generic 16 password Command position 0 31 Expected replies STS_DATA A m 6Dh Request bit mask of non empty groups Expected replies STS MASK r 72h Reset all commands and groups R 52h Confirmation character Expected replies STS SUCCESS 64 x 78h Request firmware identification Expected replies STS ID y 79h Set transmit delay Time 0 10 0 10 ms 11 19 20 100 ms 20 28 200 1000 ms 1 Speed mode 1 115200 2 57600 3 38400 6 19200 12 9600 Expected replies STS_SUCCESS Status Details Replies to commands follow this format Please note that numeric arguments of status replies are mapped to upper case letters see the related section k 6Bh Mask of non empty groups 1 8 values that form 32 bit mask LSB first In reply to CMD MASK SD c 63h Count of commands In reply to CMD COUNT SD w 77h Wake up back from power down mode In reply to Any character after power on or sleep mode 65 s 73h Recognised SI word or Training similar to SI word Word index 0 31 m 6Dh Memory full error x 78h Provide firmware identification Version identifier 0 In reply to CMD ID le te 65h Signal recognition error d 4 bit values that form 8 bit error code 80h N
20. Transmitter Dispositivo en una computadora o modulo que transforma informaci n en serie a paralelo y viceversa 10 Listado de figuras Poblaci n con m s de 65 a os de edad Prototipo original del soporte rob tico Esquem tico del hardware y comunicaciones del prototipo Detalle de la parte superior trasera del soporte Detalle de la parte superior delantera del soporte Mando de control Frontal Mando de control Lateral 1 Mando de control Lateral 11 Pines de la fuente de alimentaci n Recargando Posici n Home Pines de la fuente de alimentaci n Descargando Diagrama de flujo del modo manual del prototipo 1 1 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 1 3 2 Diagrama de flujo del modo autom tico del prototipo 3 3 Diagrama de flujo de la rutina de inicializaci n del prototipo 4 1 Estructura alternativa para el soporte rob tico 4 2 Capacidad de rotaci n y brazo asistido en el soporte rob tico 5 1 Diagrama de flujo del modo manual 5 2 Diagrama de flujo del modo autom tico 5 3 Paquete de VRbot 5 4 Diagrama de puertos del modulo de VRbot 5 5 Placa RS 232 externa 5 6 VRbot Diagrama de conexi n con la placa RS 232 externa 5 7 VRbot Diagrama de conexiones con la placa base del microcontrolador A 1 Localizaci n de los botones Reset y Loader en la PCB del microcontrolador 11 12 1 Introducci n 1 1 Nuestro Futuro Antes
21. addresses of certain registers They should both be placed in the MSbyte The LSbyte is the data define WHO AM ADDR MSK 0x0F defi ne CTRL REGI ADDR MSK 0x20 defi ne CTRL REG2 ADDR_ MSK 0x21 define CTRL REG3 ADDR MSK 0x22 defi ne HP FILTER RESET MSK 0x23 define OUTX L ADDR MSK 0x28 define OUTX H ADDR MSK 0x29 define OUTY L ADDR MSK 0x24 define OUTY H ADDR MSK 0x2B define OUTZ L ADDR MSK 0x2C define OUTZ H ADDR MSK 0x2D define READ WO AUTO NCREMENT MSK 0x80 define READ AND AUTO INCREMENT MSK OxCOU define WRITE WO AUTO INCREMENT MSK 0x00 define WRITE_AND_AUTO_INCREMENT_MSK 0x40 define DATA RATE 40HZ MSK 0x00 define DATA RATE 16047 MSK m define DATA RATE 640HZ MSK 0x80 define DATA RATE 2560HZ MSK 0xC 0000 0000 0100 0000 1000 0000 1100 0000 Se enum data rate samples HZ 40 HZ 160 HZ 640 2560 enum hpc HPC 512 HPC 1024 HPC 2048 HPC 4096 122 enum scale G2 G6 enum nbits BITS 12 BITS 16 enum das BITS 12 RJ BITS 16 LJ enum filter mode FILTER ENABLED FILTER DISABLED typedef struct accel data uint8 t xh xl yh yl zh zl accel data Buffer size for storing accelerometers data in a buffer instead of lla structure define XYZ BUF SIZE 10 6 bytes plus the end of packet Error codes define LIS OK 0 define LIS ERROR BUS BUSY 1 define pdFALSE 0 define pdTRUE 1 Hlc Function 8 0
22. al modo autom tico pero no era el caso Esto creaba la problem tica adicional de no ser capaces de control el sistema en modo autom tico si estaba el soporte previamente tensado en el modo manual 3 2 Diagrama de flujo del modo autom tico del prototipo 3 3 Modos manual y autom tico Ambos modos trabajan en conjunci n con el aceler metro Durante el movimiento la tensi n o la intenci n de llevarlos a cabo el sistema lee continuamente los valores del aceler metro y si stos superan los valores predefinidos para el movimiento las instrucciones son ignoradas y los movimientos no son realizados El prop sito de esto es que el soporte solo se mueva tense cuando su posici n sea la vertical y que por tanto no est inclinado en direcci n alguna Esta funcionalidad pese a estar implementada en el c digo no funcionaba correctamente El soporte pod a estar inclinado en cualquier direcci n incluso si era agitado violentamente Otro defecto presente en el prototipo era la asimetr a en su movimiento La velocidad a la que se tensa destensa y se mueve hacia la izquierda derecha no es la misma Adicionalmente cuando la barra se contrae destensando el soporte no alcanza la posici n original qued ndose ligeramente m s extendida cada vez En cualquier caso este fallo parece ser m s un defecto del propio motor que de la programaci n del prototipo como pruebas posteriores permitieron determinar Es preciso mencionar tambi n
23. c digo nuevo y parece estar relacionado con el protocolo de comunicaci n 12C o bien con el driver del aceler metro LIS3LV02 usado ya que este driver ha sido modificado Este error se soluciona autom ticamente si el sistema es apagado y encendido de nuevo El programa no siempre ejecuta el bucle whi e 1 en la funci n mai n al principio Es un error extra o pues en mai n los motores as como la m quina de estados son inicializados El sistema entonces comienza su operaci n normal pero puesto que la rutina correspondiente al reconocimiento de voz tiene lugar dentro del bucle whi e 1 dentro de mai n no llega a funcionar Es a n m s extra o cuando durante la operaci n normal el sistema entra de repente en el bucle y el reconocimiento de voz empieza Esto sucede de manera aleatoria a veces comenzando a los pocos segundos mientras que otras veces tarda entre uno y dos minutos Se ha probado a usar el sistema sin interrupciones y por tanto sin m quina de estados y con interrupciones a diferentes frecuencias para determinar si el error se debe a la sobresaturaci n del microcontrolador pero el problema sigue sucediendo Este error no sucede si el c digo se acaba de cargar y el sistema no se reinicia pero esto crea un conflicto con el error del aceler metro previamente comentado 46 7 Conclusiones y desarrollos futuros Conclusiones Tal y como muestran las pruebas finales se han realizado numerosas mejoras so
24. cantidad de posibles desarrollos y avances tecnol gicos en este campo y futuros avances e investigaciones permitir n desarrollar a n m s 1 3 Autom tica tecnolog a y asistencia para ponerse en pie levantarse Uno de los problemas que habitualmente sufren las personas de avanzada edad es la de levantarse cuando est n sentados o tumbados Este proyecto es el primero centrado en solventar dicho problema Ofrecer asistencia a personas ancianas o con discapacidades f sicas que tienen dificultades para ponerse en pie Este proyecto ya fue comenzado por Teemu Kuusisto como parte de su Master s Thesis en el departamento de Autom tica y Sistemas de la Helsinki University of Technology Por tanto en el momento de iniciar ste proyecto un primer prototipo ya estaba dise ado y construido pero su software inacabado Por tanto el prop sito principal de este proyecto es el de mejorar el c digo del software del prototipo solucionando errores y a adiendo funcionalidades al mismo Tras el trabajo realizado en este proyecto el prototipo deber a estar un paso m s cerca de poder ser un producto acabado que con futuros desarrollos especialmente en la etapa de dise o podr a ser usado en un entorno real 14 2 Descripci n del prototipo de soporte rob tico En este Proyecto Fin de Carrera se realizan mejoras sobre un sistema de soporte rob tico no finalizado Este prototipo fue dise ado por Teemu Kuusisto en su PFC Por ello antes de
25. comentado 53 61 75 81 T rminos y Acr nimos D Anal gico a Digital Referente a la conversi n de se ales anal gicas en se ales digitales AC Alternate Current Corriente el ctrica que invierte peri dicamente la direcci n de su flujo AR Assistive Robotics Robots que asisten a las personas con discapacidades f sicas a trav s de interacci n f sica AVR AVR es una arquitectura tipo Harvard de 8 bit RIDC de microcontroladores en un s lo chip que fue desarrollada por Atmel en 1996 AVR fue una de las primeras familias de microcontroladores con la capacidad de usar memoria flash para el almacenamiento de programas en un s lo chip C C Ampliamente usado se trata de un lenguaje de programaci n procedural de uso general usado tanto en sistemas operativos como en aplicaciones C es simplemente una evoluci n de C CAN Controller Area Network Interfaz perif rico dise ado para su uso en aplicaciones de automoci n industrial CANbus Protocolo del bus de comunicaci n del Controller Area Network CAN CPU Central Processing Unit Parte central de una computadora que realice las principales funciones de procesamiento DB9 Tipo de conector usado de manera habitual para la comunicaci n en serie de ordenadores utilizando RS 232 DC Direct current Corriente el ctrica fluyendo en una nica direcci n GUI Graphical User Interface Interfaz entre el usuario y el sistema inform tico o aplicaci n basa
26. compilar el programa debe usarse el fichero makefile incluido en el ap ndice B S lo aquellos ficheros desarrollados y escritos por estudiantes de la Universidad Alvar Aalto para este proyecto se han incluido en este documento El resto de ficheros son gen ricos y de prop sito general no desarrollados para este proyecto en particular y pueden obtenerse de Atmel directamente son GNU File name Functions Devices managed Programmer a2d c h Analog to digital conversion libraries P S accelerometer c h Accelerometer control routines T K amp J L avrlibdefs h Definitions and macros for Atmel AVR series P S avrlibtypes h Type definitions for Atmel AVR series P S buffer c h Buffer libraries used by the UARTs P S buzzer c h Buzzer not used T K can drv c h CAN drivers for Atmel AT90CAN series Atmel can lib c h CAN function libraries for Atmel AT90CAN series Atmel canproto c h Modified CAN libraries for additional functions J A config h General system definitions T K global h Includes and definitions for Atmel AVR series P S i2c c h 12C protocol for Atmel AVR series P S i2cconf h 12C protocol for Atmel AVR series P S interrupts c h Interrupt for the state machine subroutine T K leds c h LEDs of the control pad T K lis3102 c h Accelerometer drivers for Atmel AVR series P S lis3102 driver c h Modified and improved accelerometer drivers A L main c Main routine T K amp J L motor c h Tightening Loo
27. cuando el soporte se mueve hacia la izquierda derecha en los dos modos stos valores son diferentes dependiendo del sentido del movimiento pero independientes como es l gico de que el modo sea manual o autom tico Con estos nuevos valores se definen nuevos l mites para la funci n is straight cuando el soporte se mueve en alguna de las dos direcciones Por tanto la funci n debe conocer tambi n el sentido del movimiento ya sea izquierda derecha o est tico para poder asignar los l mites adecuados para el aceler metro Necesitamos por tanto que is straight lea el tipo de movimiento del sistema Para conseguir esto la funci n leer un argumento que le proporcionar la m quina de estados Ser por tanto is straight int state Siendo los definidos los valores para state como 1 Movi ndose hacia la izquierda state MOVING LEFT 2 Movi ndose hacia la derecha state MOVING RIGHT 0 Resto de situaciones state STATIC Esto es algo realmente f cil de implementar en el modo manual puesto que todos los estados llamar n a la funci n is strai ght STATI C salvo STATE LEFT y STATE RIGHT que llamar n a las funciones is straight MOVING LEFT yis straight MOVING RIGHT El modo autom tico es en cambio algo m s complejo Puesto que las posiciones Home 32 Bed y Chair est n definidas sabemos que cuando el bot n Home sea presionado el soporte se mover hacia la izquierda independientemente
28. de su posici n original luego realizar la llamada a la funci n is straight MOVING LEFT Tambi n sabemos que cuando se presiones Chair el soporte se mover hacia la izquierda llamando a la funci n is strai ght MOVI NG RI GHT pero el movimiento cuando el soporte se encuentra en la posici n Bed no es tan simple Por tanto para dicha posici n es necesario implementar un algoritmo que identifique la direcci n del movimiento Para una correcta llamada a is _straight movement el estado del sistema es almacenado en una variable adicional Este estado no es el mismo que el de la m quina de estados su no uno especial que almacena el valor de algunos estados previos Por ejemplo cuando el soporte vaya desde la posici n Home hasta Bed el valor almacenado ser STATE y cuando vaya de Chair a Bed el valor ser STATE CHAIR Por tanto comparando el valor STATE BED con el estado previo se puede identificar el sentido del movimiento Este estado no se salva cuando el soporte est tens ndose o destens ndose por lo que el valor ser siempre STATE CHAIR o STATE pero se reinicializar si cambiamos al modo manual Estas modificaciones en el c digo logran hacer funcionar correctamente las rutinas de detecci n de colisiones Es necesario aclarar no obstante que dada la elevada sensibilidad del aceler metro los valores le dos por el mismo cambian constantemente Por ello los l mites estab
29. dulo m s evolucionado Correcci n de los errores de inicializaci n comentados en la secci n 6 3 No son aceptables en un sistema comercial Desarrollos futuros El prototipo sigue estando en una etapa prematura de desarrollo Todav a se requiere una gran cantidad de trabajo en mejoras adicionales as como en mejorar las ya implementadas En este momento la utilidad del soporte rob tico es limitada y ciertamente se necesita una gran labor de pulido tanto est tica como funcional antes de que pueda salir de la etapa de desarrollo y llegar al mercado No obstante el claro que una evoluci n del soporte rob tico de apoyo ser a bienvenido en hospitales centros de asistencia y hogares privados Se espera que el campo de la Rob tica Asistida Social alcance el mercado masivo en el futuro Es importante por tanto el desarrollo continuo de nuevos robots y dispositivos para poder competir en el mercado La versatilidad aceptaci n por parte de los usuarios y los costes de producci n de estos productos ser n la clave para futuros desarrollos 47 48 8 Documentaci n adjunta en el DVD 1 Hoja de caracter sticas del M dulo de Control Inteligente PI M3605 2 Gu a de usuario del PIM3605 3 Hoja de caracter sticas del microcontrolador AT90CAN128 4 Hoja de caracter sticas del aceler metro LIS3L02 5 C digo fuente del prototipo original 6 Cargando el c digo en el microcontrolador Bootloader 7 Hoja de carac
30. estructura en forma de p rtico est dise ada para soportar el peso de la barra as como de hacerla estable Tiene un ra l a lo largo de su parte superior por el cual el soporte se desplaza Sobre este rail se han definido arbitrariamente 3 posiciones virtuales que se corresponden con Casa izquierda de la estructura Cama posici n central y Silla derecha 2 2 2 Motores Todos los movimientos realizados por el soporte son provocados por la acci n de 2 motores independientes de corriente continua Uno de los motores mueve la barra a lo largo del ra l mientras que el otro se encarga de su extensi n y por tanto tensi n y acortamiento relajaci n El motor que mueve la barra hacia la izquierda derecha a trav s del ra l est controlado y monitorizado por el M dulo de Control Inteligente PIM3605 de Technosoft comunic ndose a trav s de CANbus La tensi n de la barra es controlada de manera directa por el microcontrolador central utilizando sus salidas digitales Puede encontrarse m s informaci n sobre ste controlador en su hoja de caracter sticas 1 y gu a del usuario 2 Movement Motor 12C Protocol zx o Tightening Motor Digital Outputs 2 2 Esquema de las comunicaciones y hardware del prototipo 16 2 2 3 Microcontrolador AT90CAN128 de Atmel El AT90CAN128 es un microcontrolador de 8 bits de uso general con diversas implementaciones y a adidos que permiten me
31. goto bed if button down portA BUTTON MANUAL drive send command CODE STOP 98 goto manual break else if button down portE AT HOME drive send command CODE STOP at home break Check VR commands switch VRorder case VR MOVE LEFT drive send command CODE STOP goto moving left break case VR MOVE RIGHT drive send command CODE STOP goto moving right break case VR STOP drive send command CODE STOP goto auto break case VR TI GHTEN drive send command CODE STOP goto ti ght break case VR 60 TO CHAIR drive send command CODE STOP goto chair break case VR GO TO BED drive send command CODE STOP goto bed break else drive send command CODE STOP goto_auto break break Auto instruction Go to bed The support will move to the defined bed 99 position it will stop if another valid instruction buttons or commands is given case STATE BED if previous state STATE HOME directi on MOVI RI GHT else if previous state STATE CHAI R directi onzMOVI NG LEFT else di recti onzSTATI C if is straight direction Position absolute drive write param32 CODE MODE TYPE CODE CPA Sets command position 3520548 drive write param32 CODE CPOS 3520548 l Sets position mode 3 drive write param32 CODE MODE TYPE CODE PP3 Keep position and speed refere
32. message 1 uint8 t address gt gt 8 message 2 int8 t value value gt gt 8 message 3 value value 8 message 4 uint8 t value value gt gt 8 message 5 uint8 t value l message 4 int8 t value val 1862258 message 5 value val ue gt gt 8 message 2 uint8 t value 134 val ue gt gt 8 message 3 z uint8 t value ret CANSendMessage MCASK ID message 6 0 return ret Fixed point byte order differs from 32bit integer uint8 t drive write paramf uint16 t address int32 t value int32 t ret intl16 t value ret lt lt 16 value gt gt 16 ret value drive write param32 address ret return 0 Ask for parameters of drive 1 from specified drive memory address Returns the read value TODO Doesn t handle CAN errors correctly j int16 t drive read param uint16 t address int16 t ret ui nt8 t message 6 POSERR 121 04 BO 20 00 2A 02 162 04 08 2A 02 FF FF ask position error message 0 uint8 t ASKOPCODE message 1 uint8 t ASKOPCODE gt gt 8 message 2 uint8 t MCUID lt lt 4 message 3 uint8 t 0x00 message 4 uint8 t address message 5 uint8 t address gt gt 8 ret CANSendMessage MCASK ID message 6 0 Wait until the transfer is completed and release mob while 1 Uint8 t status can get status amp ask cmd if status CAN STATUS COMPLETED whil
33. o tutorial sobre c mo descargar el c digo escrito en el microcontrolador utilizando una conexi n en serie A 1 Software necesario Para poder programar el microcontrolador es necesario obtener ciertos paquetes de software primero listados a continuaci n Linux OS Eclipse C C IDE AVR Eclipse Plug In AVRdude Linux Unix OS Este proyecto se ha desarrollado utilizando el sistema operativo Linux Ubuntu 9 04 pero cualquier distribuci n basada en Debian deber a servir tambi n Probablemente funcione bajo otros sistemas operativos pero no han sido probados AVRdude AVRdude es un paquete de software GPL que permite a los ordenadores funcionando bajo sistemas operativos Linux Windows la carga descarga de c digo a diversos dispositivos electr nicos Para poder instalarlo bajo Linux Ubuntu debe introducirse el siguiente c digo en la consola se requieren permisos de administrador user user pc sudo apt get install avrdude Eclipse C C IDE Eclipse C C IDE es una ponderosa herramienta de desarrollo GPL para programadores capaz de gestionar y depurar proyectos de gran escala con facilidad El programa puede descargarse desde su pagina oficial http www eclipse org cdt AVR Eclipse Plug In Para que Eclipse reconozca las librerias e instrucciones usadas por AVR es necesario descargar el AVR Eclipse plug in Instrucciones detalladas sobre como conseguir el plug in pueden encontrarse en la pagina http avr ecli
34. productos pidiendo informaci n sobre productos a las tiendas se escogi el m dulo de reconocimiento de voz VRbot de VeeaR http www vee ar com 35 5 2 2 Caracter sticas del modulo VRbot VRbot es un modulo de reconocimiento de voz simple peque o y poco costoso dise ado para trabajar con robots en especial con la serie Robonova Se comunica con otros dispositivos mediante una UART Principales caracter sticas 26 rdenes integradas independientes del usuario Speaker Independent commands SI preparadas para dar rdenes simples Actualmente soportan ingl s EEUU alem n italiano y japon s e Hasta 32 rdenes definidas por el usuario Speaker Dependet commands SD Palabras de disparo rdenes y contrase as de voz e Interfaz gr fica de usuario f cil de usar para programar las rdenes de voz e El m dulo puede usarse sobre cualquier sistema con una mediante una interfaz alimentada entre 3 3 y 5V e Protocolo serie para el acceso y programaci n del modulo operando entre 9600bps y 115000bps Hardware incluido en el paquete eVRbot PCB eMicr fono eCables para la comunicaci n en serie 5 3 Paquete de VRbot 36 5 2 3 Conexi n de VRbot a un PC Para comenzar con las pruebas del modulo de VRbot debe conectarse primeramente a un PC Puesto que est espec ficamente dise ado para ser usado con los la serie de robots Robonova y stos no se usan en el proyecto una placa externa gen
35. state machine c C digo en una fuente diferente Ej is straight int state Estados Argumentos en may sculas Ej STATE MOVE RIGHT Antes de desarrollar la implementaci n de las mejoras desarrolladas es conveniente mostrar un diagrama de flujo que muestre el funcionamiento buscado para el sistema final Estos diagramas permiten entender de forma m s completa los objetivos a desarrollar vi ndolos en su contexto de operaci n En estos diagramas de flujo los estados son representados por rect ngulos mientras que las flechas indican las rdenes que permiten la transici n entre diferentes estados Rutina de inicializaci n Esta rutina ya estaba implementada adecuadamente en el prototipo El estado NOT READY destensa por completo el soporte y lo mueve a la posici n Home Durante el estado temporal NONE se realice la lectura del interruptor que indica el modo de traba de modo que el sistema autom ticamente tome el estado AUTO o MANUAL Finalmente el sistema quedar a la espera de las siguientes rdenes Ver figura 3 3 Modo manual Los estados disponibles desde el modo manual pueden verse en el diagrama de estados de la figura 5 1 Puesto que la mayor a de estados funcionan nicamente mientras determinado bot n del mando de control es presionado o el soporte inclinado se debe retornar siempre hacia el modo de espera manual para que se puedan aceptar instrucciones adicionales Esto se representa en el diagrama mediant
36. t rminos de capacidad de procesamiento y el chip ya est actualmente saturado a la hora de realizar algunas tareas por ejemplo en la conversi n A D para el uso del potenci metro deslizante Por ello debe a adirse un modulo adicional que realice estos c lculos Antes de elegir ning n componente debemos hacer un peque o estudiar las caracter sticas que debe tener el m dulo a adido as como las limitaciones impuestas por nuestro sistema El m dulo debe ser capaz de sustituir el mando de control por tanto s lo necesita reconocer unas pocas palabras no muchas m s que botones en el mando En consecuencia no se requiere un moderno complejo y caro sistema de reconocimiento de voz Una soluci n simple y barata deber a servir Una vez definidas las caracter sticas requeridas por el modulo debemos considerar las limitaciones que tenemos a la hora de implementarlo en nuestro sistema Estas limitaciones se reducen pr cticamente al abanico de conexiones disponibles que nos permite nuestro microcontrolador Adem s de sus puestos I O digitales el microcontrolador AT90CAN128 tiene 2 puertos serie uno de los cuales se usa para su programaci n y pruebas pero el otro queda accesible Por tanto la conexi n puede hacerse bien sea usando las entradas y salidas digitales de los puertos del microcontrolador o bien mediante comunicaci n en serie Tras la b squeda de informaci n en Internet y obtener informaci n detallada sobre varios
37. trata b sicamente de una m quina de estados dirigida por interrupciones siendo programada la m quina de estados en los ficheros statemachine c y statemachine h y las interrupciones en interrupts c y interrupts h La m quina de estados tiene definidos estados para todas y cada una de las acciones que el soporte puede realizar Es por ello que numerosas veces en esta secci n se har referencia a dicha m quina de estados y sus estados 5 1 1 Preparaci n del c digo original Tras estudiar en profundidad el c digo y con objeto de familiarizarnos con l comenzamos con 3 tareas simples Primero renombrando los ficheros del idioma Fin s al Ingl s Segundo con un borrado de c digo redundante y tercero reescribiendo la funci n de tensado destensado para el modo manual 5 1 1 1 Renombrado de ficheros Muchos de los ficheros originales ya ten an nombres en ingles puesto que son extractos de c digo fuente con licencia GPL que se usan directamente para controlar y configurar el hardware del sistema No obstante todos aquellos ficheros escritos por Teemu Kuusisto el creador del prototipo tienen nombres en fin s A continuaci n se incluye la lista de ficheros renombrados tanko c gt main c napit c statemachine c napit h gt statemachine h moottori c gt motor c moottori h gt motor h ledit c leds c ledit h leds h keskeytys c interrupts c keskeytys h interrupts h liukupotentiometri c slidep
38. 22 X TEKNILLINEN KORKEAKOULU TEKNISKA HOGSKOLAN HELSINKI UNIVERSITY OF TECHNOLOGY Jorge Latorre de la Calle Rob tica Asistencial Soporte Rob tico de Apoyo Proyecto Fin de Carrera en Ingenier a Industrial Espoo Diciembre de 2009 Supervisor Panu Harmo MSc Resumen del Proyecto Fin de Carrera Autor Jorge Latorre de la Calle T tulo original Assistive Robotics and Getting Up Support pole Helsinki University of Technology Departamento Automation and Systems Technology Profesorado AS 84 Automation Technology Fecha Diciembre de 2009 Lugar Espoo Este trabajo forma parte del proyecto Yl mummo Heilahtaa Mide Technology Project for Students Supervisor Master of Science Panu Harmo Este proyecto trabaja sobre el prototipo de soporte rob tico desarrollado originalmente por el estudiante Teemu Kuusisto en su Master s Thesis El prototipo consiste en una barra con una agarradera que se mueve sobre un rail situado en el techo de su estructura de pruebas Este soporte puede extenderse y contraerse entre el suelo y el techo Cuando est totalmente extendido tensado puede usarse como soporte para ayudar a ponerse en pie de sus usuarios desde sillas camas etc Un mando de control permite al usuario determinar el movimiento y tensi n del soporte Se realizan mejoras sobre el c digo original corrigiendo errores de software y a adiendo funcionalidades adicionales como detecci n de colisiones y control asistido b si
39. 396 en Europa y del 1596 en EEUU 1 2 Rob tica Asistencial Social Por todo el mundo la poblaci n de mayor edad as como de aquellos que presentan alg n tipo de discapacidad han expresado sus preferencias e ilusiones de poder vivir de la manera m s independiente posible en sus respectivas comunidades Habitualmente hacen uso de dispositivos tecnol gicos que les permiten realizar sus actividades en el d a a d a de manera normal Actualmente ning n gobierno en el mundo puede satisfacer todas las demandas ni proveer de todos los servicios requeridos por este gran segmento de la p oblaci n Es por ello que la ingenier a y automatizaci n recogen este testigo actuando como un servicio social l La informaci n usada para la escritura de los p rrafos 1 1 y 1 2 ha sido extraida del libro The Engineering Handbook of Smart Technology for Aging Disability and Independence Helal Mokhtari and Abdulrazak 2008 2 Las definiciones usadas en el p rrafo 1 2 se han obtenido de Defining Socially Assistive Robotics David Feil Seifer and Maja J Mataric Interaction Laboratory University of Southern California In proceedings of the 2005 IEEE 9th International Conference on Rehabilitation Robotics June 28 July 1 2005 Chicago IL USA 13 La Rob tica Asistencial Social o SAR por sus siglas en ingl s es una respuesta a estos problemas Los robots SAR se definen como una intersecci n entre la Rob tica Asistida AR en i
40. 70 motion is completed define CODE SAP 0x8400 sets actual position to the command value define CODE MODE TYPE 0x5909 command mode type define CODE CPA 0x2000FFFF absolute define CODE CPR 0x0000DFFF relative define CODE TUMO 0x0000BFFF define CODE TUMI 0x4000FFFF keep position and speed reference define CODE 551 Ox8301BBC1 speed mode 1 define CODE PP3 0x8701BFC1 position mode 3 define CODE 0X8501BDCl position mode 1 define ACC 01 0x0000199A value of acceleration 0 1 define ACC 03 0x00004CCD value of acceleration 0 3 define ACC 1 0x00010000 value of acceleration 1 130 define ASK APOS 0x0228 llask actual position define ASK ASPD 0x022C llask actual speed define ASK CPOS 0x029 llask command position define ASK POSERR 0x022A llask position error Memory addresses of variables Structure for received CAN message data typedef struct canmess uint8 t request uint8 t data 8 uint8 t dlc CANmessage Function prototypes int cani nit voi d int canrxconfig voi d int CANSendMessage uintl16 t id uint8 t data uint8 t len uint8 t irq int CANconfi gRX st cmd t cs uintl6 t id can cmd t cmd uint8 t buffer uint8 t len uint8 t irq lluint8 t get can message ui nt8 t id void handle can messages uint8 t drive write param uint16 t address intl6 t value uint8 t drive write param32 uintl6 t address int32 t value uint8 t drive write paramf uint16 t
41. BUTTON UP loosen else goto manual stop tightening motor break Tighten the support pole while the Manual Tightening button is pressed and the pole is not steady case STATE MANUAL TI GHTENI NG if is straight STATI C amp amp button down portA BUTTON DOWN ti ghten if is steady 105 goto ti ghtened stop tightening motor break else goto manual stop tightening motor break If the pole is leaned to the left move it case STATE PUSH LEFT if is straight PUSHING LEFTJ amp G amp drive read param32 ASK APOS lt 1000 Set speed mode 1 drive write param32 CODE MODE TYPE CODE 5 1 Set command speed to the LEFT drive write param CODE CSPD 60 Start motion drive send command CODE UPD else Button is not pressed anymore the support is no straight or jt has reached the end STOP the ceiling motor drive send command CODE STOP goto manual break break I If the support is leaned to the right move it case STATE PUSH RI GHT if is straight PUSHI NG RIGHT amp amp drive read param32 ASK APOS gt 6250000 Set speed mode 1 drive write param32 CODE MODE TYPE CODE 5 1 Set command speed to the RIGHT drive write paramf CODE CSPD 60 Start motion drive send command CODE UPD else Button is not pressed anymore the support is no straight or it has reached the end STOP the ceiling motor d
42. Data direction INPUT cbi POTENTI OMETER DDR POTENTI OMETER sbi POTENTI OMETER PORT POTENTI OMETER Port G initialization PORTG OxFF DDRG OxFF TCCRIA 0 TCCR1B 0 TCCRIC 0 TCCR2A 0 llinit pwm Pulse Width Modulation is not being used in this version Initializing both UARTs uartinit 84 UARTO used for rprintf function rprintfinit uartOSendByte Initialization of the potentiometer interrupts and accelerometer init potentiometer init_interrupt i2clnit lis init lis power up Initialization of the states in statemachi ne c next state 0 goto init dri ve 85 statemachine h ifndef STATEMACHI NE H define STATEMACHI NE H Buttons in A port I BLACK wire 1 define BUTTON CHAIR 0 I GRAY WIRE 1 define BUTTON BED 1 define BUTTON DOWN 1 BLUE WIRE 1 define BUTTON HOME 2 define BUTTON UP 2 YELLOW WI RE 1 define BUTTON RIGHT 3 RED WIRE 1 define BUTTON LEFT 4 RED WI RE 2 define BUTTON AUTO 5 II YELLOW wire 2 define BUTTON MANUAL 6 I GREEN WI RE 2 define BUTTON TIGHT LOOSE 7 Buttons in E port I GREY WIRE 3 define AT HOME 6 Button on the oli mex board define ONBOARDBUTTON 5 Port A buttons define BUTTON PINA define BUTTON PORTA PORTA define BUTTON DDRA DDRA Port E buttons define BUTTON PORTE PORTE define BUTTON PINE PINE define BUTTON DDRE DDRE
43. ED goto bed break if next state NEXT STATE CHAIR goto chair break if next state NEXT STATE MANUAL goto manual break if next state z NEXT STATE AUTO goto auto break if next state NEXT STATE NOT READY goto not ready break break break case STATE GHTENED if VRorder VR_GO_HOME button down portA BUTTON HOME amp amp auto or manual state 1 104 next state NEXT STATE HOME goto loose break if VRorderz VR 60 TO BED button down portA BUTTON BED amp amp auto or manual state 1 next state NEXT STATE BED goto loose break if VRorderzzVR 60 TO CHAIR button down portA BUTTON CHAIR amp amp auto or manual state 1 next state NEXT STATE CHAIR goto loose break if button down portA BUTTON UP J amp amp auto or manual state 2 goto manual tight if VRorderzzVR GHTEN amp amp auto or manual state 1 next state NEXT STATE AUTO goto loose break if button_down_portA BUTTON_TIGHT_LOOSE if auto or manual state next state NEXT STATE AUTO goto loose break else if auto or manual state 2 next state NEXT STATE MANUAL goto loose break break Loose the support pole while the Manual Loosening button is pressed case STATE MANUAL LOOSENING if is stralght STATI C amp amp S button down portA
44. FLAGS c lt rprintf o rprintf c CC S INCLUDES CFLAGS c lt buffer o buffer c CC INCLUDES CFLAGS c lt canproto o canproto c CC INCLUDES CFLAGS c lt can_lib o can lib c CC INCLUDES CFLAGS c lt can drv o can drv c CC INCLUDES CFLAGS c lt voicerecon o voicerecon c CC INCLUDES CFLAGS c lt Li nk TARGET 0BJ ECTS CC LDFLAGS 0BJECTS LINKONLYOB ECTS LIBDIRS LIBS o TARGET hex TARGET avr objcopy O ihex S HEX FLASH FLAGS lt 0 eep TARGET avr obj copy HEX EEPROM FLAGS O ihex lt 0 exit 0 lss TARGET avr objdump h S lt gt size TARGET Qecho Qavr size C mcu MCU TARGET Clean target PHONY clean clean rm rf 0BJECTS main elf dep main hex main eep main lss main map 34 Other dependencies include shell mkdir dep 2 gt dev null wildcard dep 59 60 Appendix B VRbot Communication Protocol Protocol and Interface Basics Communication with the VRbot module uses a standard UART interface compatible with 3 3 5V TTL logical levels according to the powering voltage VCC A typical connection to an MCU based host The initial configuration at power on is 9600 baud 8 bit data No parity 1 bit stop The baud rate can be changed later to
45. IS ADDR senddata i2c receive LI S ADDR 2 recvdata lli2c transfer LI S ADDR 1 amp senddata 2 recvdata return recvdata 0 recvdata 1 4 The same than lis read xyz but puts the results in a buffer ready to be sent uintl6 t lis read xyz b uint8 t buf XYZ BUF SIZE i2c send byte LI S ADDR READ WO AUTO I NCREMENT MSK OUTX L ADDR MSK mode addr i2c receive LIS ADDR 6 buf return pdTRUE 129 canproto h ifndef CANPROTO H define CANPROTO H 8i nclude config h include can lib h I amp include controller h Flags define CANBUFFER SIZE 10 ll Size of the data buffer where received CAN messages are stored Message numbers define MCASK 0 Number for asking data from motion controller define MCWRITE 1 CAN message IDs define ASKDATA ID 0b00100100000 define REPLYDATA ID 0500101100000 define MCASK ID ASKDATA I D MCI D define MCUREPLY I D REPLYDATA I D MCUI D I Operation codes define ASKOPCODE 0xB004 define ASKLONGOPCODE 0xB005 define CODE RESET 0x0402 I reset define CODE ENDINIT 0x0020 endinit define CODE AXI SON 0x0102 axison define CODE CACC 0x24A2 l command acceleration define CODE CSPD 0x24A0 command speed define CODE CPOS 0x249E l command position define CODE UPD 0x0108 l update immediately define CODE STOP 0x0184 stop 2 motion define CODE WAIT 0x0804 I wait define CODE FAULTRESET 0x1C04 reset faults define CODE MC 0x0F
46. LAGS R eeprom HEX EEPROM FLAGS j eeprom HEX EEPROM FLAGS set section flags eeprom alloc load HEX EEPROM FLAGS change section ma eeprom 0 no change warni ngs Objects that must be built in order to link OB ECTS main o statemachine o leds o interrupts o motor o slidepotentiometer o accelerometer o lis3lvO2_driver o a2d 0 2c o uart2 o rprintf o buffer o can drv o can lib o canproto o voicerecon o 84 Objects explicitly added by the user LI NKONLYOBJ ECTS 57 Build all TARGET main hex main eep main lss size flash main hex avrdude c avr911 P COMI b 115200 p at90can128 U flash w mai n hex flashlinux avrdude c avr911 P dev ttyUSB1 b 115200 p at90can128 U flash w mai n hex Compile main o main c CC INCLUDES CFLAGS c lt statemachine o statemachine c CC INCLUDES CFLAGS c lt leds o leds c CC INCLUDES CFLAGS c lt interrupts o interrupts c CC S INCLUDES CFLAGS c motor o motor c CC S INCLUDES CFLAGS c lt slidepotentiometer o slidepotentiometer c CC INCLUDES S CFLAGS c lt accelerometer o accelerometer c CC INCLUDES CFLAGS c lt lis31v02 driver o lis3l v02 driver c CC S INCLUDES CFLAGS c lt a2d 0 a2d c CC INCLUDES S CFLAGS c lt i2c 0 CC INCLUDES CFLAGS c fgnu89 inline lt vart2 o uart2 c CC S INCLUDES C
47. ORTE define STATUSLED DIRECTION DDRE endi f leds c x Functions used to manage the LEDs in the control pad include lt avr io h gt include util h 8i nclude 374 include i2cconf h 8i nclude 2c h include 53 02 driver h include slidepotentiometer h include accelerometer h include interrupts h include leds h include global h void led on uint8 t led sbi LED PORT led void led off uint8 t led cbi LED PORT led uint8 t led is on uint8 t led return LED PORT 1 lt lt led 117 interrupts h ifndef SUSPENSION H define SUSPENSION H Initialize interrupt void init interrupt Start timer void timer run Reset timer void timer start Return value of timer uintl6 t ti me endi f interrupts c In this file a system interruption is configured to call state machi function at a 1KHz frequency include lt avr io h gt include lt avr interrupt h gt include motor h include statemachi ne h 8i nclude leds h include slidepotentiometer h include accelerometer h include util h include interrupts h include rprintf h include global h uint8 t scaler uintl6 t interrupt counter volatile uint8 t sec counter volatile uint8 t sec max volatile uint8 t ti mer ms volatile ui nt 32 t timer void timer run ti mer ms if timer ms 10
48. OTA otherwise see FluentChip error codes In reply to CMD RECOG SI CMD RECOG SD CMD TRAIN SD v 76h Invalid command or argument In reply to Any invalid command or argument i 69h Interrupted recognition In reply to CMD BREAK while in training or recognition 66 64h Provide command data Training information 0 7 training count 8 SD SV conflict 16 SI conflict 2 Conflicting command position 0 31 Length of label 0 31 4 5 Text of label ASCII characters from A to In reply to CMD_DUMP_SD OK or no errors status In reply to CMD_BREAK CMD_DELAY CMD_BAUDRATE CMD_TIMEOUT CMD_KNOB CMD_LEVEL CMD_LANGUAGE CMD_SLEEP CMD_GROUP_SD CMD_UNGROUP_SD CMD_ERASE_SD CMD_NAME_SD CMD_RESETALL r 72h Recognised SD SV command or Training similar to SD SV command Arguments Mapping These are the characters used to represent integer values in the range 1 to 31 for command or status arguments Minimum argument value 1 60h Maximum argument value 31 A 41h Zero argument value 0 20h Read more status arguments Communication Examples These are some examples of actual command and status strings exchanged with the VRbot module by host programs and the expected program flow with pseudo code sequences The pseudo instruction SEND transmits the specified character to the module
49. Probando los modos manual y autom tico Todas las mejoras implementadas en ambos modos funcionan correctamente En el modo manual el control manual de la tensi n el control asistido y la detecci n de colisiones han sido implementadas satisfactoriamente En el modo autom tico se han a adido las funcionalidades de tensar destensar el soporte y la detecci n de colisiones Adem s los movimientos ahora pueden ser detenidos si el usuario lo requiere por lo que no es necesario que el soporte finalice una instrucci n para que pueda recibir la siguiente orden Uno de los errores del prototipo original no ha podido ser resuelto El movimiento durante la tensi n destensi n sigue siendo asim trico La barra se extiende y queda firme correctamente pero al contraerse no recupera su posici n original Debe usarse el modo manual para contraer la barra hasta su posici n original Este problema ha sido estudiado a fondo pero no puede solucionarse nicamente con un cambio en el c digo pues el error viene dado por un funcionamiento err neo del motor motor ha sido testado con una fuente DC y monitorizado mediante el uso de pol metros y osciloscopios y no funciona correctamente Cuando el soporte est destens ndose no lo hace completamente incluso aunque el motor reciba la se al apropiada La mayor parte de las veces se necesitan varios pulsos en la se al para conseguirlo es decir destensar un poco parar destensar otro poco pasar etc
50. THEN OK ELSE ERROR 68 Recognition of a built in SI command start recognition in wordset 1 SEND i SEND B wait for reply if 5s timeout has been set wait for max 6s then abort otherwise trigger recognition could never end result RECEIVE IF result s THEN successful recognition ack and read result SEND Y command RECEIVE A 4 perform actions according to command ELSE IF result t THEN timed out no word spoken ELSE IF result e THEN i error code ack and read which one SEND error RECEIVE A 16 SEND Y error error RECEIVE A perform actions according to error ELSE invalid request or reply ERROR END IF 69 Adding a new SD command f insert command 0 in group 3 SEND g SEND D SEND A IF RECEIVE o THEN OK ELSE ERROR set command label to ARDUINO 2009 SEND g SEND D SEND A SEND M 4 name length 12 characters SEND A SEND R SEND D SEND U SEND I SEND N SEND O SEND 7 encode each digit with a prefix followed by the digit mapped to upper case letters SEND SEND C SEND SEND A SEND SEND A SEND SEND J IF RECEIVE o THEN OK ELSE ERROR 70 5 Training an SD command repeat the whole training procedure twice for best results train command 0 in group 3 SEND t SEND D SEND A 4 wait for reply default timeout is 3s wait for max 1
51. a mucho m s elegante y precisa la adici n de 3 Informaci n adicional sobre el proyecto Ceilbot puede encontrarse en http autsys tkk fi en Ceilbot 23 m dulos espec ficos de hardware para esta tarea Brazo rob tico asistido Una vez todos los desarrollos previos hubieran sido implementados una funcionalidad que realmente ayudar a al p blico objetivo ser a la adici n de un brazo rob tico o asistido a la estructura del soporte El soporte est dise ado para ayudar a los usuarios a levantarse y moverse a trav s de la casa pero no sirve de gran ayuda si el usuario debe agacharse para coger algo que est en el suelo Esta tarea es adem s ciertamente dura para las personas de avanzada edad Por ello la adici n de un brazo rob tico asistido o no seg n decisi n de dise o ayudar a a los usuarios en situaciones que realizan diariamente 4 1 Alternativa al movimiento 4 2 Capacidad de giro por el techo 26 5 Implementaci n de las mejoras En esta secci n se implementar n todas las mejoras y funcionalidades adicionales listadas en la secci n 4 1 Posteriormente todas estas mejoras ser n probadas y evaluadas A lo largo de esta secci n se har n numerosas referencias a ficheros extractos de c digo as como estados y o funciones y argumentos Para facilitar la identificaci n de todas estas referencias el formato de escritura usado para cada una de ellas ser el siguiente Ficheros en cursiva Ej
52. address int32 t value uint8 t drive send command ui nt 16 t code int16 t drive read param uintl16 t address int32 t drive read param32 ui nt 16 t address void drive init fendif CANPROTO H 131 canproto c 1 22 1 2009 Johannes Aalto Modified CAN prototype model for using Microcontroller as a CAN master and a Slave motor controller s include lt avr io h gt include avr interrupt h include i nttypes h gt include util delay h gt 8i nclude canproto h include can drv h include can lib h 8i nclude global h include rprintf h include statemachi ne h static st cmd t ask cmd static ui nt8 t ask data 8 lIstatic st cmd t req 16 global pointers to received messages x Initializes the CAN module param none Qreturn 0 int caninit void can init 0 Initialize CAN controller parameter has no effect on fixed IT baudrate CANGIE 0x3A Enable CAN interrupts receive transmit and errors canrxconfig Initialize CAN messages to be received return 0 Prepares the CAN message objects for reception Qparam none preturn 0 l int canrxconfig void Prepares a CAN message object for reception Qparam cs pointer to the structure for message object information Qparam id standard 11 bit id of the message to be received param command driver command that defines type of reception Qparam pointer to the buf
53. and CODE STOP goto moving left break 97 If VR or manually order to start tightening stop the ceiling motor and start tightening else if VRorder VR_TIGHTEN button_down_portA BUTTON TIGHT LOOSE drive send command CODE STOP goto tight break If VR ordered to stop or it reaches the limits stop the ceiling motor else if drive read param32 ASK APOS lt 6250000 VRorderzzVR STOP drive send command CODE STOP goto auto break else The support is leaned don t move drive send command CODE STOP goto auto break break Auto instruction Go home The support will move to the defined home position it will stop if another valid instruction buttons or VR commands is given case STATE HOME previous state state if is straight MOVI NG LEFT Position absol ute drive write param32 CODE MODE TYPE CODE CPA Sets command position 0 drive write param32 CODE CPOS 1000 Sets position mode 3 drive write param32 CODE MODE TYPE CODE PP3 Keep position and speed reference drive write param32 CODE MODE TYPE CODE TUMI Start motion drive send command CODE UPD if button down portA BUTTON TIGHT LOOSEJ drive send command CODE STOP goto tight break else if button down portA BUTTON CHAIR drive send command CODE STOP goto chair else if button down portA BUTTON BED drive send command CODE STOP
54. anual state 2 uint8 t auto_or_manual_state 0 Returns the nonzero if specified button is pressed Uint8 t button down portA uint8 t button return BUTTON PI NA 1 lt lt button cow int8 t button down portE uint8 t button return BUTTON PINE 1 lt lt button Below are defined al the LEDs in the control pad Go to NONE state uint8 t goto none led on LED READY led on LED ACTI ON State STATE NONE return 0 Go to AUTO state uint8 t goto auto auto or manual state 1 rporintf AUTO rin led on LED READY led off LED ACTI ON state STATE AUTO return 0 Go to MANUAL state uint8 t goto manual auto or manual state 2 rprintf MANUAL rin led on LED READY led off LED ACTION state STATE MANUAL return 0 Go to LEFT state uint8 t goto left rprintf MOVING LEFT r n led on LED ACTI ON led off LED READY state STATE LEFT return 0 Go to RIGHT state uint8 t goto right rprintf MOVING RIGHT r n ed on LED ACTI ON led off LED READY State STATE RI GHT return 0 D Go to TI GHTENI NG state uint8 t goto tight timer start rprintf TI GHTENI NGL rin led on LED ACTI ON the functions that make transitions between states and contro 89 led off LED READY State STATE TIGHTENING return 0 o Go to TIGHTENED state uint8 t goto tighte
55. ase STATE AT HOME if drive read param32 ASK APOS drive read param32 ASK_CPOS Wait until actual speed 0 while drive read param32 ASK ASPD 0 Reset faults drive send command CODE FAULTRESET l Set actual position 0 drive write param32 CODE SAP 0 Update drive send command CODE UPD goto auto break else drive send command CODE FAULTRESET goto auto break break Tighten the support pole until it is steady and go to state TI GHTENED The operation cannot be stopped case STATE TI GHTENI NG if is stralght STATIC ti ghten tightening time ti me loosening ti me tightening time 5 if button down portA BUTTON TIGHT LOOSE 115 straight STATIC if auto or manual state next state NEXT STATE AUTO stop ti ghtening motor goto loose break else if auto or manual state 2 next state NEXT STATE MANUAL stop ti ghtening motor goto loose break 103 if is steady goto ti ghtened stop ti ghtening motor break else drive send command CODE STOP goto auto break break Loosen the support pole a fixed time 5 seconds more than the tightening t i me case STATE LOOSENING loosen loosening ti me rprintf TIME d r n loosening ti me if loosening time 0 stop tightening motor if next state NEXT STATE HOME goto home break if next state NEXT STATE B
56. bi n permitir a la implementaci n de mejoras adicionales como la habilidad de llamar al soporte si ste se encuentra en otra habitaci n Capacidad de giro En su actual estado de desarrollo el soporte rob tico se mueve sobre el ra l en una posici n fija no puede rotar sobre s mismo ni sobre el ra l Esto implica que la manila se encuentra siempre en la misma direcci n Aunque no sea algo totalmente obligatorio ser a realmente til que se implementara un sistema de movimiento mejorado que dotara al soporte de la capacidad de rotar en un arco completo de 3609 Esta funcionalidad facilitar a en gran medida su facilidad de uso por parte de los usuarios haci ndolo m s c modo Con la estructura actual del prototipo esto no puede hacerse por lo que deber a mejorarse Ver figura 4 2 Control asistido mejorado En este proyecto se implementa control asistido en el prototipo en su forma m s b sica pero dicho control est muy limitado por su propio dise o Se est usando un aceler metro para detector si el soporte est siendo empujado o no Pese a que esto es funcional implica que el usuario debe inclinar la barra en la direcci n en que desea mover el soporte Adicionalmente el mismo aceler metro se usa para la detecci n de colisiones por lo que determinar si la causa de dicha inclinaci n es debida a un obst culo en la trayectoria o a que el usuario lo est empujando es ciertamente complejo y no demasiado fiable Ser
57. bre el sistema original No obstante mejoras adicionales ser an necesarias para que el prototipo funcionara correctamente en esta etapa de desarrollo Reemplazo del motor de tensado destensado Este motor no est funcionando adecuadamente y no es seguro para el soporte rob tico el seguir us ndolo problema no puede ser solucionado completamente mediante software Adem s este motor es relativamente ruidoso creando un conflicto con el reconocimiento de voz adem s de no ser agradable para el usuario El problema del ruido est tambi n presente en el otro motor Respuesta sonora en el reconocimiento de voz Actualmente se necesita un PC para monitorizar la operaci n del reconocimiento de voz usuario desconoce si la palabra de disparo o cualquier otra instrucci n ha sido reconocida a menos que un PC no est siendo usado a menos que ambas palabas sean reconocidas y el resultado visible Esto no es aceptable fuera del entorno de desarrollo y pruebas Considerar un sistema de reconocimiento de voz mejorado o integrar una funci n para poder ense ar el reconocimiento de voz desde el propio soporte El dispositivo tiene una gran tasa de error reconociendo las palabras de otros usuarios Este problema solo es visible en las instrucciones SD y no en las SI por lo que es probable que en el futuro tras una actualizaci n de firmware el comportamiento del m dulo mejore Si esto no sucede ser a recomendable el uso de un m
58. break 94 else if VRorderzzVR MOVE RIGHT goto moving right break else if button down portA BUTTON TIGHT LOOSE VRorder VR_TIGHTEN goto tight break break Moving left in manual mode while Left button is pressed and the movement limits not reached case STATE_LEFT if is straight MOVI NG LEFT II set speed mode 1 drive write param32 CODE MODE TYPE CODE SP1 II set command speed to the LEFT drive write paramf CODE CSPD 80 listart motion drive send command CODE UPD if button down portA BUTTON LEFT button down portE AT HOME drive read param32 ASK APOS 1000 button is not pressed anymore STOP the ceiling motor drive send command CODE STOP goto manual break else drive send command CODE STOP goto manual break break Moving right in manual mode while Right button is pressed and the movement limits not reached case STATE RI GHT if is_straight MOVING RIGHT set speed mode 1 drive write param32 CODE MODE TYPE CODE SP1 set command speed to the RIGHT drive write paramf CODE CSPD 60 lIstart motion drive send command CODE UPD if button down portA BUTTON RIGHT drive read param32 ASK APOS lt 6250000 button is not pressed anymore STOP the ceiling motor drive send command CODE STOP goto manual break 95 else drive send command CODE STOP goto manual break break
59. co Finalmente se afiade al sistema un modulo de reconocimiento de voz permitiendo al usuario manejar el soporte rob tico sin necesitar el mando de control Palabras clave Dispositivos asistivos Rob tica Asistencial Social cuidado de personal de avanzada edad y o con discapacidad f sica reconocimiento de voz automatizaci n ponerse en pie Antes de empezar con el proyecto en s mismo me gustar a dar las gracias a todos aquellos que me han ayudad guiado o simplemente hecho re r en los momentos m s duros A todos aquellos que en definitiva me han permitido escribir este mismo proyecto Sin ellos no hubiera sido lo mismo Gracias a Panu Harmo por introducirme en el campo de la rob tica asistida permitirme trabajar en este proyecto y guiarme durante todo el proceso y por supuesto por hacer m s c lida mi estancia en la universidad Anja H nninen por ayudarme con todo el papeleo y burocracia que una beca de este estilo conlleva por aguantarme y darme consejos para poder quedarme en Finlandia Me sent realmente un miembro m s del departamento no s lo un visitante o estudiante de intercambio Johannes Aalto por ayudarme con todos los problemas t cnicos del proyecto especialmente durante las primeras semanas y tambi n en algunos momentos de falta de lucidez en las ltimas Jos Vallet por darme fuerza para perseguir mis objetivos y ayudarme a entender el estilo de vida Fin s A todos aquellos amigos que ha
60. d configures some features of the VRbot module void initialization unsigned char buf int response i i 0 Opening COM port 0 and establishing the parameters of the serial port communication as 8 bit data 1 bit stop no parity 9600bd no flow control printf Opening COM 0 n OpenComport 0 9600 printf Initializing device n Waking up device from low power saving mode while buf OK Sendi nstruction WAKE buf if i gt 5 printf ERROR Failed to initialize device n break itt Ask firmware ID It has to be 0 Sendi nstructi on ASK ID buf if buf ASK ID printf ERROR Cannot read device ID n Send ack and read status expecting D 0 Sendinstruction ACK buf if buf 190 printf ERROR Device ID doesn t match n else Set language for Speaker Independent instructions English SendByte 0 LANGUAGE SET Sendinstruction ENGLISH buf printf Device identified n if buf OK printf ERROR Could not set default language for built in instructions English n else printf Language set English n Set timeout 5 seconds SendByte 0 SET TI MEOUT Sendi nstruction FIVE SECONDS buf if buf OK printf ERROR Timeout not set n printf Ti meout set 5 seconds n printf Device initialized n Sendinstruction unsigned char instruction unsigned char buf instruction Command byte
61. de adentrarnos en explicaciones complejas sobre el proyecto es necesario echar un vistazo a las estimaciones que se tienen sobre el futuro de la poblaci n mundial La siguiente tabla muestra la poblaci n mayor de 65 a os edad que coincide con la de jubilaci n en muchos pa ses en relaci n al resto regi n por regi n Figura 1 1 Region Asia North Africa Near East Sub Saharan Africa Europe North America Latin America Caribbean Oceania 1 1 Poblaci n mayor de 65 a os Instituto de estad stica de EEUU 2000 Tal y como se muestra en la figura la poblaci n mundial de una edad superior a 65 afios se va a duplicar en tan s lo 30 a os La poblaci n de mayor edad superior a 85 a os es el segmento que m s r pidamente est creciendo tanto en Europa como en Norteam rica Aunque esto es en realidad una buena se al indicativo directo de la mejora del nivel de vida es tambi n la causa de un problema social que ha de ser soliviantado As pues hay una fuerte correlaci n entre la discapacidad f sica y la edad Se estima que al menos el 62 de los ancianos mayor de 85 a os tienen grandes dificultades a la hora de realizar una o varias tareas cotidianas diariamente Aproximadamente el 1096 de la poblaci n mayor de 65 afios tiene problemas cognitivos que a su vez se asocian a problemas funcionales Por consiguiente el n mero de personas con alg n tipo de discapacidad se estima cercano al 1
62. do en la presentaci n de la informaci n de manera gr fica en lugar de texto GPL General Public License Tipo de licencia de software libre de uso m s habitual I O Input Output El acto de mover informaci n a o desde un computador o m dulo 12C Inter Integrated Circuit Bus multi maestro de tipo serie usado para la adici n de perif ricos simples y de baja velocidad a una placa base sistema integrado o tel fono m vil IDE Integrated Development Environment o Entorno de Desarrollo Integrado Se trata de una aplicaci n de software que proporciona una gran cantidad de ventajas y facilidades a los programadores en su trabajo de desarrollo de software OS Operative System Sistema Operativo PC Personal Computer Computadora dise ada para ser usada por un nico usuario a la vez PCB Printed Circuit Board Placa dise ada para el soporte sujeci n y conexi n el ctrica de los componentes electr nicos de un modulo o sistema ROM Read Only Memory Memoria no vol til de un sistema electr nico en la cual los programas y sistema operativo son almacenados RS 232 Interfaz est ndar para la comunicaci n en serie de dispositivos electr nicos SAR Socially Assistive Robotics Intersecci n entre la Rob tica Asistida AR y la Rob tica Social Interactiva SIR SIR Socially Interactive Robotics Robots cuyo prop sito es el desarrollo de alguna forma de interacci n humano robot UART Universal Asynchronous Receiver
63. e can cmi amp ask cmd CAN CMD ACCEPTED break else if status CAN STATUS ERROR CANSTMOB CANSTMOB OXOF clear mob errors while can cmd amp ask cmd CAN CMD ACCEPTED break else ret ask data 5 ret lt lt 8 ret ask data 4 1 rprintful6 ret return ret Ask for parameters of drive 1 from specified drive memory address Returns the read val ue TODO Doesn t handle CAN errors correctly int32 t drive read param32 ui nt 16 t address int32 t ret uint8 t message 6 POSER ask posi message message message message message message R t 0 1 2 3 4 5 121 04 BO 20 00 2A 02 162 04 08 2A 02 FF FF ion error uint8 t ASKLONGOPCODE uint8 t ASKLONGOPCODE gt gt 8 uint8 t MCUID lt lt 4 uint8 t 0x00 uint8 t address uint8 t address 8 ret CANSendMessage MCASK ID message 6 0 Wait until the transfer is completed and release mob while 1 Uint8 t status can get status amp ask cmd if status CAN STATUS COMPLETED while can cmi amp ask cmd CAN CMD ACCEPTED break else if status CAN STATUS ERROR CANSTMOB CANSTMOB 0x0F clear mob errors while can_cmd Sask_cmd CAN CMD ACCEPTED break else ret uint8 t ask data 7 ret lt lt 8 ret ui nt8 t ask data 6 ret 8 ret uint8 t ask data 5 ret lt lt 8 r
64. e MIN X PUSH LEFT 4065 define MAX X PUSH LEFT 20 define MIN X PUSH RIGHT 80 define MAX X PUSH RIGHT 220 int mn x int max x Tacceleration acceleration int iz0 Auxiliar variable used when monitoring accelerometer values using readAcceleration function Il Accelerometer initialization subroutine void initAcc i2clnit lis_init lis power up 108 Read each axis values using 126 protoco cw cw intl6 t getX return lis read x int16 t getY return lis read y int16 t getZ return lis read z Read and save accelerometer values using 12C bus void readAcceleration void unsigned char buffer XYZ BUF SIZE lis read xyz b buffer acceleration x buffer 0 buffer 1 4 acceleration y buffer 2 buffer 3 4 acceleration buffer 4 buffer 5 lt lt 4 Printing for testing purposes only x 3 3 A KA 3 A KH XK 3 if i 10 rprintf x d t t y d t t z d r n acceleration x acceleration y acceleration z Pal i t is straight int state State Argument given by state machine routine indicating the movement of the support pole 0 Static 1 Moving left 2 Moving right 3 Pushed left 4 Pushed right This function reads the accelerometer values and compares them with the defined limts for the support in its current state of m
65. e descargarse desde la p gina web del proveedor VRbot se comunica a trav s del Puerto serie de manera bastante sencilla Lee caracteres simples que toma como instrucciones y devuelve tambi n caracteres simples como respuesta A continuaci n se indican algunas de las salidas y entradas usadas por el m dulo y que se requieren para la realizaci n de pruebas Entradas Introducidas en una sesi n de consola de HyperTerminal b Instrucci n que despierta al modulo de su estado original de bajo consume Si el dispositivo no es despertado no aceptar ninguna orden adicional i Preparar al dispositivo para el reconocimiento de ordenes predefinidas SI d Preparar al dispositivo para el reconocimiento de rdenes ense adas al mismo SD A B Z Las letras may sculas son usadas por el modulo a modo de n meros siguiendo la siguiente regla A 0 B 1 C 2 etc Barra espaciadora Para pedirle al m dulo una respuesta referente a la instrucci n previa Salidas Le das desde la sesi n de consola de HyperTerminal w Dispositivo despierto o Instrucci n aceptada v Instrucci n no v lida A B Z N meros de manera an loga a las entradas r Instrucci n reconocida satisfactoriamente e Error El dispositivo detecta una instrucci n pero no puede identificarla con exactitud t Tiempo de espera agotado Se al de salida si para el tiempo de espera definido 5 segundos por defecto ninguna
66. e erguido y est tico son sobrepasados S lo si los valores del eje Y detectan una variaci n significativa el sistema alcanzar uno de estos dos estados Estos dos estados llamar n entonces a las funciones is straight PUSHING LEFT is strai ght PUSHI NG RIGHT que tienen definidos valores umbral diferentes para el aceler metro Mientras los valores le dos por el aceler metro se encuentren dentro de estos l mites el soporte continuar su movimiento Estos valores umbral se han obtenido mediante pruebas de car cter iterativo para que el soporte se mueva nicamente si es empujado Un efecto colateral que aparece tras la implementaci n de esta funcionalidad es que mejora la operaci n de la detecci n de colisiones Esto es as porque siempre que un obst culo es detectado el soporte se detiene en este momento determinar que est siendo empujado por el obst culo y por tanto se mover en direcci n opuesta al mismo Esta acci n no lo separar totalmente del obst culo pero s que disminuir la carga sobre el mismo 34 5 2 Reconocimiento de voz La implementaci n de reconocimiento de voz al sistema se corresponde con la parte m s compleja de todas las mejoras realizadas sobre el sistema 5 2 1 Elecci n del modulo de reconocimiento de voz Tras un estudio detallado sobre la materia qued claro que el microcontrolador AT90CAN128 no era capaz de realizar la tarea El reconocimiento de voz es bastante exigente en
67. e flechas bidireccionales Aquellos estados a adidos sobre el prototipo original est n coloreados en verde mientras que aquellos que ya estaban presentes se indican en azul Modo autom tico El modo autom tico es similar al modo manual La principal diferencia es que las transiciones entre estados no deben pasar por un estado de espera Ver figura 5 2 Todos los estados pueden ser activados utilizando indistintamente el mando de control o el reconocimiento de voz salvo MOVING_LEFT y MOVING_RIGHT que nicamente pueden ser activados por reconocimiento de voz El esquema de comunicaci n a modo de bus lineal entre estados indica que el sistema puede pasar de uno de los estados a otro sin pasar por el estado de espera De manera id ntica al diagrama del modo manual los estados coloreados en verde son aquellos a adidos sobre el prototipo original y 27 los azules aquellos que ya exist an previamente 5 1 Diagrama de flujo del modo manual 5 2 Diagrama de flujo del modo autom tico 28 5 1 Optimizaci n y mejoras sobre el c digo original Antes de la adici n de m dulos de hardware adicionales sobre el prototipo se realizaron ciertos cambios y depuraciones sobre el c digo original Dichos cambios se describen en esta secci n y se listan por orden cronol gico Cuando un cambio se indica despu s de otro es que tuvo lugar m s adelante en el tiempo NOTA La rutina principal que gestiona el soporte ese
68. e is initialized properly while ini tOK 22 initOKzVRi nitialization Asking for the trigger word Wordset 4 in VRbot x rprintf Trigger Word uartlSendByte VR START RECON response Sendi nstruction VR TRIGGER RECON response data rprintf Response c response Testing purposes If the trigger word is recognized start command recognition jf not print a message error or timeout if response VR_ RECON OK Asking for commands Wordset 1 in VRbot rprintf ACCEPTED Instruction uartlSendByte VR START RECON response Sendi nstruction VR ORDER RECON response data rprintf Response c response Testing purposes if responsezzVR RECON OK response Sendinstruction VR ACK response data rprintf Response c n response Testing purposes else if responsezzVR TIMEOUT rprintf Ti meout 1n else rprintf Recognition failed n else if responsezzVR TI MEOUT rprintf Timeout n else rprintf Recognition failed n return response 112 Initialization of VRbot module int VRinitializati on void English n unsigned char response 0 int i20 int ini tOKz1 int data 0 rprintf Initializing device n Waking up device from low power saving mode I while response VR_0K 68 1 101 response Sendinstruction VR_WAKE response data if i 100 rp
69. ean arreglados es necesario apagar el dispositivo y reiniciarlo no s lo resetearlo presionando el boto Reset en la PCB 55 Monitorizando el soporte rob tico Puede monitorizarse el funcionamiento del programa a trav s de una consola que nos muestre el puerto serie Para ello introducir el siguiente comando en la consola user user pc screen dev ttyUSB1 HELLO Initializing device INIT DRIVE INIT DRIVE OK NOT TIGHTENED GOI NG HOME AT HOME AUTO 56 Ap dice B Makefile del programa Este fichero makefile fue creado originalmente por Teemu Kuusisto siendo modificado en este proyecto para que se adec e a la adici n de nuevos ficheros as como el renombramiento de otros tantos dde Makefile for the support pole project dde 34 General Flags PROJECT main MCU at90can128 TARGET mai n elf CC avr gcc avr gcc exe FCPU 16000000 Options common to compile link and assembly rules COMMON mmcu MCU DF CPU S FCPU UL Compile options common for all C compilation units CFLAGS COMMON CFLAGS Wall gdwarf 2 std gnu99 Os funsigned char funsigned bitfields fpack struct fshort enums CFLAGS MD MP MT F o MF dep F d Assembly specific flags ASMFLAGS COMMON ASMFLAGS CFLAGS ASMFLAGS x assembler with cpp Wa gdwarf2 Linker flags LDFLAGS COMMON LDFLAGS WI Map main map Intel Hex file production flags HEX FLASH F
70. ed BLE 0 little endian mode BOOT 0 No reboot memory content Data ready on pad DRDY 0 Disable Data Ready Generation I1 SI M 0 Serial mode interface to 4 wire SPI mode DAS 1 Data alignment 16 bit left justified CTRL_REG3 22h ECK 0 external clock disabled HPDD 0 High pass filter for direction detection disabled HPF F 0 High pass filter for free fall disabled I FDS 0 Filtered data section bypassed IT res Ilres CFS1 0 CFS0z0 High pass filter Cut off frequency selection to 512 lis write reg CTRL REGI ADDR MSK 0xC7 lis write reg CTRL REG2 ADDR MSK 0x41 124 lis write reg CTRL REG3 ADDR MSK 0x00 I lis errnozLlI S OK return pdTRUE Reads a single register from the accelerometer x param address of the register to read return the value of the register read return OxFF in case of error x n case of error the function sets the lis errno variable with the corresponding error code uint8 t lis read reg uint8 t addr unsigned char regval i2c send byte LIS ADDR READ WO AUTO I NCREMENT MSK addr mode addr i2c receive byte LIS ADDR amp regval return regval Writes a single register of the accelerometer param address of the register to write param value to be written in the register Vreturn pdTRUE if success Vreturn pdFALSE if error x 3 XK XK 3 5 gt n case of error the function set
71. empezar a detallar las mejoras que se han realizado sobre el modelo original se hace necesario detallar las caracter sticas constructivas y funcionales del mismo 2 1 Esquema del prototipo El soporte rob tico original es b sicamente una barra con una manila que se mueve a lo largo del techo siguiendo un camino fijado a lo largo de un ra l Esta barra es retractile lo que le permite alargarse y acortarse en un determinado punto de su trayectoria tens ndose y destens ndose entre el techo y el suelo De esta manera cuando est extendida act a como un soporte robusto que puede se puede usar para levantarse y cuando se desplaza puede usarse tambi n como soporte y gu a en el movimiento Inicialmente el movimiento por el techo se hace a trav s de un rail recto y las rdenes de control se ejecutan a trav s de un mando de control unido al soporte El prototipo as como sus diferentes partes pueden verse en la siguiente figura 2 1 Ceiling Rail Power Supply Motor Battery Accelerom eter Microcontroller Motor Controller Handle Control Pad Frame of the test bed 2 1 Soporte rob tico sobre estructura de pruebas 15 2 2 Descripci n del hardware En esta secci n se revisar los principales componentes usados para la construcci n del prototipo con el objetivo de poder comprender mejor su funcionamiento 2 2 1 Barra del soporte y estructura de pruebas Tal y como se muestra en la figura 2 1 la
72. esto que los usuarios no tienen porque ver o saber siquiera d nde se encuentra el mando El objeto es por tanto que el soporte pueda ser controlado mediante rdenes vocales exclusivamente si as se desea Control asistido b sico Deshacerse del mando de control y desarrollar un interfaz de control m s f cil simple y c mo de usar es uno de los principales objetivos de este proyecto En conjunci n con el reconocimiento de voz se implementar otro tipo de control que es adem s relativamente f cil de implementar en su forma m s rudimentaria el control asistido Si el usuario quiere que el soporte se mueva en una direcci n lo nico que deber hacer es empujarlo levemente para que se incline en la direcci n deseada El aceler metro detectar esta inclinaci n y los motores del soporte se activar n para que el soporte comience a moverse 4 2 Otras mejoras fuera del alcance de este proyecto Sistema de movimiento mejorado El dise o b sico sobre ra les para el prototipo es funcional de cara al desarrollo de otras mejoras y realizaci n de pruebas pero necesita ser completamente revisado antes de poder ser 24 implementado de una manera econ mica factible y realista en un hogar Por el momento nicamente funciona en l nea recta pero la habilidad de poder rotar girar y elegir diferentes trayectorias mediante cruces y bifurcaciones deber a ser desarrollada En cualquier caso el movimiento sobre ra les es por defin
73. et uint8 t ask data 4 136 1 rprintful6 ret return ret uint8 t drive send command uint16 t code uint8 t ret 0 uint8 t message 2 I POSERRZ0 121 2A 20 00 00 set position error 0 message 0 uint8 t code message 1 uint8 t code gt gt 8 ret CANSendMessage MCASK ID message 2 0 return ret void drive init drive send command CODE RESET delay ms 500 drive send command CODE ENDI NI T delay ms 500 drive send command CODE AXI SON 137 config h ifndef CONFIG H define CONFIG H define CAN BAUDRATE 250 CAN baudrate baud Used in CAN initialization macros to calculate baudrate define FOSC 16000 Motor Controller ID define MCID 1 I Microcontroller ID define MCUID 2 fendi f util h ifndef UTIL H define UTIL H define cbi A B A amp 1 lt lt B Clear bit B in byte A define sbi A B A 1 B ll Set bit B in byte A fendi f 138
74. etro y el microcontrolador es el protocolo 12C Puede encontrarse m s informaci n en su hoja de caracter sticas 3 Sliding Potentiometer Microcontroller Motor Controller PCB CANbus Communication 2 3 Detalle de la parte superior trasera del soporte rob tico 17 2 2 5 Potenci metro deslizante El soporte puede extenderse y contraerse siendo capaz por tanto de quedarse fijado entre el suelo y el techo en cualquier parte de su trayectoria Cuando el soporte se extiende hasta quedar totalmente tenso debe asegurarse de que el valor de dicha tensi n es lo suficientemente elevado como para que una persona pueda apoyarse en l con seguridad Es aqu donde entra en juego el potenci metro deslizante del que se lee continuamente su resistencia lineal en relaci n al desplazamiento vertical del soporte Cuando el valor de la misma supera cierto valor umbral establecido experimentalmente el motor se detendr pues el soporte estar lo suficientemente tenso Puesto que los valores proporcionados por el potenci metro deslizante son anal gicos es necesario un circuito de acondicionamiento y amplificaci n as como un conversor A D para que el microcontrolador pueda leer este valor a trav s de uno de sus puertos digitales Tightening Motor Left Right Motor Battery Microcontroller PCB Accelerometer Serial Port Communication CANbus Communication 2 4 Detalle de la parte superior delantera del soporte
75. fer where received data can be stored Qparam len number of bytes to be received paramirg interrupt on reception 1 yes preturn 0 int CANconfi gRX st cmd t cs uintl16 t id can cmd t command uint8 t I buffer uint8 t len uint8 t irq 132 CANconfi gRX amp ask cmd MCUREPLY ID CMD DATA MASKED ask data 2 0 return 0 Prepares a CAN message for sending and gives the command to CAN driver Blocks until the transfer is completed Frees the used MOB Qparam id standard 11 bit id of the CAN message param data pointer to the array of data to be send Qparam len number of bytes to be send max 8 return 0 j int CANSendMessage uintl16 t id uint8 t data uint8 t len uint8 t irq st cmd t cs cs cmd CMD TX DATA cs id std id cs dic len cs pt data data cs ctrl ide 0 cs ctrl rtr 0 can cmd amp cs if cs handle lt 8 sbi CANI E2 cs handle irq enable interrupt for the MOb else sbi CANI El cs handle 8 irq Wait until the transfer is completed and release mob while can get status amp cs CAN STATUS COMPLETED return 0 x Prepares a CAN message object for reception Qparam cs pointer to the structure for message object information paramid standard 11 bit id of the message to be received param command driver command that defines type of reception param pointer to the buffer where received data can be stored
76. ght goto tight goto tightened goto loose goto home goto bed goto chair state machi ne at home goto not ready goto init drive goto manual tight goto manual loose goto push left goto push right goto moving right goto moving left 87 statemachine c l x This file contains all the subroutines managing the large state machine of the system state machine int state function is called by an interrupt configured in interrupts c at a frequency of 1KHz approximately x t is the main and most important function in the whole system checks the state of the system inputs and outputs and manages all the user s instructions and system movement j include avr io h gt include statemachine h include leds h include lt util delay h gt include global h include slidepotentiometer h include motor h include accelerometer h include rprintf h include interrupts h include uart2 h include voicerecon h include canproto h I Voice Recognition order from the main routine extern unsigned char VRorder Last state of the buttons 0 if button is down uint8 t button stateA uint8 t button stateE uint8 t buttons changedA uint8 t buttons changedE static int previous state 0 int direction 0 Defines the moving way of the shaft motor int8 t tightening time 0 uint8 t loosening ti me 0 Py Auto state 1 M
77. grama fue compilado ejecutado y probado con Embarcadero RAD Studio 2010 Versi n de prueba sobre el sistema operativo Windows Vista Fichero de cabecera voicerecon h The following definitions help to work with the VRBot module environment Further details of the VRbot commands and responses can be found in e Appendix C of this project define START_RECOGNITION d define TRIGGER A define INSTRUCTI ON B define MOVE LEFT A define MOVE RIGHT B define STOP C define TIGHTEN D define GO HOME E define GO TO BED F define GO TO CHAIR G define CLOSE H define ACK define START RECON d define TRIGGER RECON A define ORDER RECON B define TIMEOUT t define RECON OK r define ASK ID x define 1D0 A define WAKE b define LANGUAGE SET I define ENGLISH A define OK o F 5 define FIVE SECONDS F define SET TI o Declaration of the functions used void initialization unsigned char buf void Sendinstruction unsigned char instruction unsigned char buf int Getl nstructi on unsigned char buf 75 Fichero de c digo voicerecon c include VoiceRecon h include rs 232 h This program has been created as a test of the VRbot module under a PC environment It communicates with the device using the serial port The program asks the user to say the trigger word instruction If the word is not recognized w
78. haya un obst culo en el camino lo cual evidentemente puede ser peligroso Por ello a adir la capacidad de detecci n de colisiones al soporte debe ser una prioridad aunque sta sea rudimentaria Si la barra se encuentra con alg n obst culo que le impide el movimiento en su trayectoria debe detenerse hasta que el obst culo sea retirado Control manual de la tensi n del soporte No estrictamente necesario en el producto final pero si muy til para el desarrollo y pruebas del prototipo es la adici n de un control manual de la tensi n del soporte Es decir la posibilidad de mover el soporte arriba y abajo a petici n del usuario Esto nos permitir adem s solventar parcialmente el movimiento asim trico mencionado con anterioridad a la hora de tensar y destensar el soporte Reconocimiento de voz mando de control es til de de cara a la realizaci n de pruebas y muy r pido de implementar pero no es en cualquier caso el sistema de control ideal para el p blico que finalmente se beneficiar del uso del soporte La gran mayor a de personas de avanzada edad as como discapacitados f sicos no se sentir n c modas lidiando con un mando de control Se necesitan sistemas de control m s f ciles de usar e inocuos que adem s tengan un mayor rango de usuarios potenciales Uno de estos sistemas de control es el reconocimiento de voz La adici n de un modulo de reconocimiento de voz har que el sistema sea m s f cil de usar pu
79. ical para moverse o tensarse Si los valores le dos desde el aceler metro sobrepasan los l mites definidos para la funci n is straight cualquier instrucci n de movimiento ser ignorada Por tanto la impresi n por pantalla de los valores de los 3 ejes del aceler metro y la comprobaci n de los estados que alcanza la funci n is straight as como pruebas iterativas permitieron solucionar el problema Tras esta mejora si el soporte es inclinado levemente aproximadamente 3 grados se detendr Los l mites definidos en este punto han sido definidos a prop sito de manera que restringen en gran medida el movimiento del soporte puesto que su objetivo es trabajar en conjunci n con desarrollos posteriores sobre el control del aceler metro que se detallan en las siguientes secciones NOTA Es preciso indicar que evidentemente los valores proporcionados por el aceler metro dependen de la orientaci n del mismo sobre el soporte Si el modulo de hardware del aceler metro se desplaza hacia otra parte de soporte los valores deber n ser reconfigurados 3l 5 1 4 Mejoras sobre el aceler metro Detecci n de colisiones La rutina de control del aceler metro implementada en la secci n anterior est dise ada en realidad para un soporte est tico es decir cuando el soporte no est movi ndose y recibe alguna instrucci n de movimiento Cuando el soporte se est moviendo los valores le dos desde el aceler metro no son los mism
80. ici n limitado pues impide el libre movimiento libre del soporte al deber seguir el camino marcado por el ra l no siendo posible por tanto cubrir la totalidad del espacio en una habitaci n Un sistema de movimiento m s evolucionado deber a implementarse de cara al futuro Por ejemplo el uso de ruedas entre el suelo y el techo a la vez que dotar a al soporte de un radio de acci n efectivo de 3609 Figura 4 1 Desarrollos sobre diferentes aproximaciones a esta tarea el movimiento de robots por el techo se est n realizando en estos momentos en el departamento de Automatizaci n y Sistema en el proyecto Ceilbot Computaci n distribuida El prototipo funciona actualmente de manera independiente pero cobrar a mayor sentido en una casa totalmente dom tica En este tipo de hogares un ordenador central con un potente procesador de prop sito general realizar a y coordinar a toda la electr nica y comunicaciones Todos los c lculos no directamente relacionados con el control de movimiento m s b sico deber an realizarse en el ordenador central y no en el microcontrolador De este modo el modulo de reconocimiento de voz funcionar a mejor si se implementase en un ordenador central y su informaci n procesada de una manera m s eficiente Lo mismo podr a decirse para el sistema de localizaci n del soporte que es ahora realmente simple pero que debe ser mejorado si el soporte debe moverse por toda una casa de una manera ptima Tam
81. idad fija El bot n Tightening ten a dos usos Cuando el soporte estaba destensado daba las rdenes necesarias al controlador del motor de extender la barra hasta que sta estaba tensa y firme entre el suelo y el techo La detecci n de la tensi n se hace a trav s de la lectura de la resistencia de un potenci metro deslizante adosado a la barra mediante una conversi n A D Si el soporte se encontraba ya totalmente tenso apretar el bot n lo devolv a a su posici n inicial Durante estos movimientos de tensi n destensi n cualquier instrucci n adicional es ignorada no pudi ndose detener el movimiento Una vez el soporte se hallaba totalmente tenso la nica instrucci n permitida es la de destensarse cualquier otra instrucci n es ignorada 3 1 Diagrama de flujo del modo manual en el prototipo 3 2 Modo autom tico Botones usados Home Bed Chair y Tightening Los botones Home Bed y Chair se usan para mover el soporte a los puntos definidos por los estados Home Bed y Chair movimiento solo puede detenerse se si cambia al modo manual pero no en el modo autom tico Por tanto mientras el soporte se desplaza hacia la posici n 21 marcada ninguna otra acci n se llevar a cabo Estas posiciones se han definido en el programa para estar a la izquierda Home centro Bed y derecha Chair del rail El bot n Tightening se supon a debiera funcionar de manera similar
82. ill print the error and if the user does not speak within 5 seconds will print timeout If the word is recognized it will ask for any of the commands If any of the commands is recognized it will print it if not it would be the same as for the trigger word Either way it will start again asking for the trigger word The only way of ending the program is to give it the command close In that case it will close itself int main void char info int i response int close 0 unsigned char buf initialization buf printf nSTARTING RECOGNI TI ON n while close 1 printf Trigger Word SendByte 0 START_RECON Sendi nstruction TRI GGER RECON buf if buf zzRECON OK printf ACCEPTED Instruction SendByte 0 START RECON Sendi nstruction ORDER RECON buf if buf zzRECON OK Sendi nstruction ACK buf close GetI nstruction buf else if buf zzTI MEOUT printf Ti meout n else printf Recognition failed n else if buf TIMEOUT printf Timeout n else printf Recognition failed n Closing COM port 0 to avoid conflicts with other programs that want to use it printf nClosing port 0 Cl oseComport 0 printf CLOSED n printf Exiting program n return 0 initialization unsigned char buf buf Byte read from the serial port 76 This function opens the COM port 0 to establish communication through the serial port an
83. io que da las rdenes es diferente al usuario que ense al m dulo Las instrucciones SD Speaker Dependent son realmente eso dependientes del interlocutor reconocimiento de voz tiene lugar en el modo autom tico pero durante el modo manual se siguen reconociendo palabras Habitualmente esto no es un problema pero si una palabra es reconocida en el modo manual y el usuario cambia al modo autom tico la instrucci n reconocida se llevar a cabo La tasa de reconocimiento mejora si el lenguaje usado es Espa ol o Fin s puesto que son idiomas m s f ciles de pronunciar y con menor propensi n a ser afectados por el idioma original del usuario No puede ignorarse que el modulo fue ense ado y entrenado por una persona espafiola por lo que el acento del ingl s hablado difiere del ingl s hablado por un fin s como por ejemplo todos aquellos que me ayudaron a realizar pruebas sobre el sistema 6 3 Problemas de inicializaci n Durante todo el proyecto se ha detectado un error persistente que ya se encontraba en el prototipo original La inicializaci n del microcontrolador no siempre se hace de manera correcta Hay dos principales problemas que suceden a veces durante la inicializaci n Tras la carga del c digo al microcontrolador el sistema comienza a funcionar autom ticamente pero los valores del eje Y del aceler metro difieren de los valores habituales de funcionamiento Este error sucede cada vez que se carga
84. it reaches the limits stop the ceiling motor else if drive read param32 ASK APOS gt 1000 VRorder VR_STOP drive send command CODE STOP goto auto break else The support is leaned don t move drive send command CODE STOP goto auto break break case STATE MOVI NG RI GHT VR instruction Move right The support will only stop if MANUAL mode is selected it is given a different VR or AUTO instruction or it reaches the boundaries if is straight MOVI RI GHT Set speed mode 1 drive write param32 CODE MODE TYPE CODE 5 1 Set command speed to the RIGHT drive write paramf CODE CSPD 60 Start motion drive send command CODE UPD Check if home bed or chair is pressed or manual mode if button down portA BUTTON MANUAL drive send command CODE STOP goto none break else if button down portA BUTTON HOME VRorder VR_GO_HOME l Start to move the ceiling motor to position HOME drive send command CODE STOP goto home break else if button down portA BUTTON BED VRorder VR_ GO TO BEDJ I Start to move the ceiling motor to position BED drive send command CODE STOP goto bed break else if button down portA BUTTON CHAI R VRorder VR_GO_TO_CHAIR Start to move the ceiling motor to position CHAIR drive send command CODE STOP goto chair break else if VRorder VR MOVE LEFT drive send comm
85. jorar sus capacidades de almacenamiento y comunicaci n Se puede encontrar informaci n m s extensa sobre el microcontrolador en su hoja de caracter sticas 3 Todos los c lculos y tareas de control del prototipo excepto aquellas relacionadas con el motor de desplazamiento por el ra l son realizados en el microcontrolador El software de control implementado es principalmente una m quina de estados actualizada a trav s de interrupciones que controla los estados de las entradas salidas y estados del soporte rob tico Proporciona las rdenes adecuadas al motor de acortamiento extensi n y hace los c lculos y conversiones A D requeridas para ello Adem s se comunica con el resto de elementos del sistema de diferentes modos y usando diferentes protocolos Ver figura 2 2 CANbus para la comunicaci n con el controlador del motor Comunicaci n en serie a trav s de 2 UARTs para la conexi n con el PC para la carga de los datos en la ROM y para tareas de supervisi n Bus 12C para la comunicaci n con el aceler metro Puestos O digitales para la comunicaci n con el mando de control y el potenci metro deslizante 2 2 4 Aceler metro 53102 microchip LIS3L02 es un aceler metro de 3 ejes usado para medir la inclinaci n de la barra del soporte Los valores de cada uno de los 3 ejes son n meros enteros de 12 bits y por tanto con valores entre 0 y 4095 est ndar de comunicaci n entre el aceler m
86. l fichero P gina main c 83 statemachine h 86 statemachine c 88 accelerometer h 107 accelerometer c 108 voicerecon h 111 voicerecon c 112 motor h 115 motor c 115 leds h 117 leds c 117 interrupts h 118 interrupts c 118 slidepotentiometer h 120 slidepotentiometer c 120 lis3IvO2driver h 122 lis3IvO2driver c 124 canproto h 130 canproto c 132 config h 138 util h 138 NOTA Muchos de los comentarios incluidos en el c digo han sido incluidos despu s de que las pruebas finales hayan tenido lugar Cualquier cambio que se haya podido hacer sobre los ficheros tras los ltimos test es nicamente debido a la adici n de comentarios En caso de que aparezca alg n error al compilar y probar este c digo el ltimo c digo probado se incluye en el DVD 12 82 main c define MAIN C l mai n the devices attached to it routine initializes all the 1 0 of the microcontroller as well as The voice recognition routine is executed here the remaining control of the system is done by the interrupt driven x A 3 3 State machine function in statemachine c file include lt avr io h gt include lt avr interrupt h gt include lt util delay h gt include util h include motor h include statemachine h include I eds h include interrupts h include i2c h include lis3lv02_driver h include slidepotentiometer h include a2d h include accelerometer h include uart2 h
87. la rutina de inicializaci n implementada Cuando el dispositivo se enciende no se acepta ninguna orden hasta que el soporte est totalmente contra do destensado y en la posici n home Esta rutina ha sido probada varias veces y funciona correctamente 3 3 Diagrama de flujo de la rutina de inicializaci n del prototipo 22 4 Ideas para la mejora del sistema El prototipo y su estructura son totalmente funcionales pero hay un gran margen para la mejora y adici n de funcionalidades que de hecho deben ser implementadas para poder cumplir con las expectativas Esto es todav a se requiere una gran cantidad de trabajo para que pueda suponer una ayuda real a personas de avanzada edad o con discapacidad f sica No obstante la mayor parte de estas mejoras est n fuera del alcance de este proyecto Las mejoras realizadas en este proyecto se hacen sobre el hardware disponible tan solo con alguna peque a adici n en forma de m dulos a adidos al prototipo original pero sin modificar en ning n caso la estructura b sica del mismo A continuaci n se detallan ideas sobre c mo podr a mejorarse el sistema que m s tarde dividiremos en 2 categor as aquellas mejoras que se realizan en este proyecto y aquellas que no Cambios en el c digo original y mejoras sobre el mismo Hacer funcionar el aceler metro adecuadamente Detecci n de colisiones b sica Control manual de la tensi n del soporte Reconocimiento de voz Control asistido b sico
88. lecidos para la detecci n de colisiones no pueden ser demasiado estrictos por lo que el soporte s lo detecta obst culos si se inclina algo m s de 2 3 grados momento en el que detiene su movimiento 33 5 1 5 Desarrollos adicionales con el aceler metro Control asistido El objetivo es ahora la implementaci n de un control asistido en su forma m s b sica Esto es si el soporte es inclinado en una determinada direcci n por el usuario no ser necesario el uso del mando de control puesto que el soporte se mover autom ticamente en la direcci n inclinada L gicamente esta funcionalidad s lo ser implementada en el modo manual Puesto que el prototipo no dispone de ning n sensor que le permita detectar si est siendo empujado o sometido a alguna presi n esta funcionalidad est basada en una modificaci n del algoritmo de detecci n de obst culos Si el soporte se encuentra en el modo manual y est parado leer constantemente el eje Y del aceler metro paralelo al eje de la barra Si detecta una inclinaci n apreciable del eje proceder a dar las rdenes adecuadas al motor para que mueva al soporte en la direcci n indicada Es similar a la modificaci n anterior pero con un ligero cambio en los valores umbral del aceler metro Dos estados nuevos se afiaden a la m quina de estados STATE PUSH LEFT y STATE PUSH RIGHT nicamente podr n ser alcanzados si en el modo manual los l mites definidos para un soport
89. n estado ah al otro lado del pasillo a un viaje de autob s o en el otro extreme de la l nea por tel fono Skype d ndome calor en los peores momentos y compartiendo mi felicidad en los mejores Helsinki University of Technology el Departamento de Sistemas y Autom tica y la Universidad Carlos III de Madrid por permitirme vivir la experiencia Erasmus Descubrir un pa s y una cultura totalmente nuevos para m finalizar mis estudios en el extranjero en una gran universidad y conocer a tanta gente inolvidable en el proceso Finlandia y los Fineses por recibirme con los brazos abiertos y ser un pa s y una gente tan maravillosa Es una pena que no haya podido estar aqu por m s tiempo Pero estoy seguro de que volver alg n d a de una u otra forma Lo prometo ndice T rminos y acr nimos Lista de figuras 1 Introducci n 2 Descripci n del prototipo de soporte rob tico existente 2 1 Esquema del prototipo 2 2 Descripci n del hardware 2 2 1 Barra del soporte y estructura de pruebas 2 2 2 Motores 2 2 3 Microcontrolador Atmel AT90CAN128r 2 2 4 Aceler metro LIS3L02 2 2 5 Potenci metro deslizante 2 2 6 Mando de control 2 2 7 Bater a y fuente de alimentaci n 3 Pruebas iniciales con el soporte rob tico 3 1 Modo manual 3 2 Modo autom tico 3 3 Modos manual y autom tico 4 Ideas para la mejora del sistema 4 1 Mejoras realizadas en este proyecto 4 2 Otras mejoras
90. n un PC rs232 c y rs232 h El fichero de cabecera rs232 h contiene todas las definiciones necesarias usadas por el c digo fuente rs232 c Las funciones usadas del c digo contenido en rs232 c son las siguientes int OpenComport int comport number int baudrate Abre el puerto COM n mero comport number baudrate est expresado en baudios por segundo Ej 115200 Devuelve 1 en caso de error int PollComport int comport number unsigned char buf int size Toma caracteres del puerto serie comport number es que existen buf es un puntero al buffer y size el tama o del buffer en bytes int SendByte int comport number unsigned char byte Env o de un byte a trav s del puerto serie comport number Devuelve 1 en caso de error void CloseComport int comport number Cierra el puerto serie comport number Con el uso de estas 4 funciones podemos realizar nuestra programaci n a trav s del puerto serie programa creado es una simulaci n de la operaci n normal del soporte modulo tratar constantemente de reconocer la palabra de disparo con un tiempo de espera de 5 segundos Si la palabra es reconocida esperar entonces al reconocimiento de alguna de las instrucciones que tiene almacenadas El dispositivo imprimir por pantalla todas sus respuestas preguntando por palabras de disparo rdenes reconocidas y errores pero de una manera m s agradable que la definida por defecto no nicamente con carac
91. nce drive write param32 CODE MODE TYPE CODE TUMI Start motion drive send command CODE UPD if button down portA BUTTON TIGHT LOOSEJ drive send command CODE STOP goto ti ght break else if button down portA BUTTON drive send command CODE STOP goto home else if button down portA BUTTON CHAIRJ drive send command CODE STOP goto chair if button down portA BUTTON MANUAL drive send command CODE STOP goto manual break VR if drive read param32 ASK APOS drive read param32 ASK_CPOS goto ti ght break Check VR commands switch VRorder case VR MOVE LEFT drive send command CODE STOP goto moving left break case VR MOVE RIGHT 100 drive send command CODE STOP goto moving right break case VR STOP drive send command CODE STOP goto auto break case VR TI GHTEN drive send command CODE STOP goto ti ght break case VR GO HOME drive send command CODE STOP goto home break case VR GO TO CHAIR drive send command CODE STOP goto chair break else drive send command CODE STOP goto auto break break Auto instructions Go to chair The support will move to the defined chair position it will stop if another valid instruction buttons or VR commands is given case STATE CHAIR previous state state if is straight MOVI NG RIGHT
92. ned rprintf TIGHTENED r n led of f LED ACTION led on LED READY State STATE TI GHTENED return 0 exem Go to LOOSENING state uint8 t goto loose ti mer start rprintf LOOSENI NGi rin ed on LED ACTI ON led off LED READY State STATE LOOSENI NG return 0 Go to HOME state el uint8_t goto home rprintf GOING HOME rin ed on LED ACTI ON ed off LED READY State STATE HOME return 0 Fo Go to BED state uint8 t goto bed rprintf GOING TO THE BED r n led on LED ACTI ON led off LED READY state STATE BED return 0 o Go to CHAIR state i uint8 t goto chair rprintf GOING TO THE CHAIR r n led on LED ACTI ON led off LED READY state STATE CHAIR return 0 PP tates Go to AT HOME state uint8 t at home rprintf AT HOME rin led_on LED_ACTION 90 led on LED READY State STATE AT HOME return 0 o Go to NOT READY state i uint8 t goto not ready ti mer start led on LED ACTI ON led on LED READY state STATE NOT READY return 0 Po Go to INIT DRIVE state sl uint8 t goto init drive ti mer start rprintf HELLO r n led on LED ACTI ON led on LED READY state STATE INIT DRIVE return 0 l Y lake Go to MANUAL TIGHTENING state 2 uint8 t goto manual tight rprintf MANUAL TI GHTENING r n led on LED ACTI ON led off LED READY
93. nes dependientes del usuario SD Las rdenes SI se corresponden con patrones de reconocimiento de voz integrados en el firmware del dispositivo A lo largo del tiempo el proveedor ir actualizando dichos patrones para a adir m s rdenes SI y m s idiomas En este momento existen 25 rdenes SI en 4 lenguajes diferentes Ingl s alem n italiano y japon s En cualquier caso ste tipo de rdenes no van a ser usadas en el proyecto ya que est n preparadas para el trabajo con los robots Robonova pero no son adecuadas para nuestro sistema Las rdenes SD son en cambio rdenes que deben ser ense adas al modulo y son por tanto independientes del idioma Este tipo de rdenes son las usadas en el proyecto Tanto las rdenes SI como SD se dividen en dos categor as palabras de disparo y rdenes Las palabras de disparo se usan para preparar al m dulo para la recepci n de una orden No son intr nsecamente necesarias pero s tiles para evitar el reconocimiento de palabras cuando no se necesitan El uso habitual de las palabras de disparo es el de tener al m dulo tratando sistem ticamente de reconocerlas para en caso afirmativo empezar con el reconocimiento de rdenes Las palabras de disparo usan tambi n patrones de reconocimiento distinto ya que el m dulo es mucho menos restrictivo en su reconocimiento que para las rdenes A la hora de gestionar las instrucciones y rdenes con VRbot GUI stas se dividen en Grupo
94. ngl s aquellos robots que asisten a las personas con discapacidades f sicas a trav s de una interacci n f sica y la Rob tica Social Interactiva o SIR robots cuya principal tarea es la de realizar alg n tipo de interacci n social Humano Robot Los robots SAR comparten con los robots AR la meta de proporcionar asistencia a usuarios humanos pero al igual que los SIR esta asistencia se hace a trav s de interactuar socialmente Para los SAR la meta es el desarrollo efectivo y cercano de la interacci n con el usuario humano con el prop sito de proporcionarle una asistencia significativa en la rehabilitaci n aprendizaje convalecencia etc Las principales caracter sticas de la SAR son las siguientes Fiabilidad y seguridad Los factores primordiales en la interacci n con humanos Los errores no son tolerables porque pueden causar da os a sus usuarios nterfaz de usuario Sencilla accesible y personalizada Infraestructura mec nica ergon mica Deben ser f cilmente trasladables Hardware y Software Sistemas operativos en tiempo real algoritmos y arquitecturas de software dise adas para controlar la estructura met lica adecuadamente Adem s de todas estas caracter sticas la aceptaci n de los robots y dispositivos SAR es el factor m s importante de todos Deben ser f ciles de usar no intrusivos y sentirse parte del entorno Este proyecto trabaja sobre el campo de los robots SAR Como puede imaginarse hay una gran
95. ni ng a2d c max value is 1024 blocks until the value is ready This shouldn t be run inside an interrupt a2dinit Initialize potentiometer int is steady voi d Read analog value from A D channel 7 Result is 10 bit integer Analog to Digital l1 result a2dConvert10bit 0 if result LIMIT VALUE return 1 else return 0 void readPotenti ometerVal ue voi d 120 result a2dConvert10bit 0 Printing for testing if potentio tick 160000 0 rprintf POTENTI OMETER d r n result potentio tick 121 lis3102 driver h ifndef LIS3LVO2DRI VER define LI S3LVO2DRI VER include i nttypes h gt l t Converted to use i2c bus not tested yet probably not yet working x The id for the micro bus Note that in the bus select function the CS lines will be set to this number and in the bus unselect they will all be put to 0 As we don t use a decoder yet we connect the CS3 bus line to the Chip Select input of the accelerometer As this input is active low the number 7 selects puts to 0 the CS3 signal only and therefore enables the accelerometer This is a temporary trick unti we put a decoder for the CS bus lines define LIS BUS ID 7 define LIS BUS ID 8 define LIS ADDR 0x3a define portCHAR unsigned char The following defines are byte bit masks to select read write operations with without address autoincrement l and the
96. ode WGM21 0 3 COM2A1 0 3 3 3 3 XK 3 XK 9 gt gt Pulse Width Modulation is not in use in this version void init pwm TCCR2A 0 sbi TCCR2A FOC2A Force output compare match Fast pwm mode TCCR2A WGM21 TCCR2A WGM20 c Cc 8 prescaler sbi TCCR2A CS21 In this file the control routines for using the tightening motor are defined The motor is connected to pins 4 5 and 6 of B port of the microcontroller Setting the COM2A1 0 bits to two will produce a non inverted PWM 8khz CS22 CS21 CS20 0 1 0 cl kT2S 8 From prescaler 115 Non inverted mode only when the motor is running sbi TCCR2A COM2A1 I Set output power max OxFF OCR2A OxFF void tighten Sbi MOTOR PORT MOTOR DI RECTI ON Set direction Tightening sbi PORTB PB4 Instead of PWM full power void loosen cbi MOTOR PORT MOTOR DI RECTI ON Set direction Loosening sbi PORTB PB4 Instead of PWM full power void stop tightening motor cbi PORTB PB4 Turn off power 116 leds h ifndef LEDS H define LEDS H Set specified led on void led on uint8 t led I Set specified led off void led off uint8 t led Return non zero if specified led is on uint8 t led is on uint8 t led define LED PORT PORTC define LED ACTI ON 1 define LED READY 0 I Status led on the Olimex board define STATUSLED 4 define STATUSLED PORT P
97. ommand is ignored by the module without further notification and the host can start sending another command The module automatically goes to lowest power sleep mode after power on To initiate communication send any character to wake up the module 61 Command Details Format of command strings accepted by the module Please note that numeric arguments of command requests are mapped to upper case letters see the related section k 6Bh Set SI knob to specified level Confidence threshold level 0 4 0 loosest more valid results 2 typical value default 4 tightest fewer valid results NOTE knob is ignored for trigger words Expected replies STS SUCCESS v 76h Set SD level 1 Strictness control setting 1 5 1 easy 2 default 5 hard A higher setting will result in more recognition errors Expected replies STS SUCCESS 1 6Ch Set SI language b 62h Abort recognition in progress if any or do nothing Known issues In firmware ID 0 any other character received during recognition will prevent this command from stopping recognition that will continue until timeout or other recognition results Expected replies STS SUCCESS STS INTERR s 73h Go to the specified power down mode Sleep mode 0 8 0 wake on received character only 1 wake on whistle or received character 2 wake on loud sound or received character 3 5 wake on double clap wi
98. operate in the range 9600 115200 baud The communication protocol only uses printable ASCII characters which can be divided in two main groups Command and status characters respectively on the TX and RX lines chosen among lower case letters Command arguments or status details again on the TX and RX lines spanning the range of capital letters Each command sent on the TX line with zero or more additional argument bytes receives an answer on the RX line in the form of a status byte followed by zero or more arguments There is a minimum delay before each byte sent out from the VRbot module to the RX line that is initially set to 20 ms and can be selected later in the ranges 0 9 ms 10 90 ms 100 ms 1 s That accounts for slower or faster host systems and therefore suitable also for software based serial communication bit banging The communication is host driven and each byte of the reply to a command has to be acknowledged by the host to receive additional status data using the space character The reply is aborted if any other character is received and so there is no need to read all the bytes of a reply if not required Invalid combinations of commands or arguments are signaled by a specific status byte that the host should be prepared to receive if the communication fails Also a reasonable timeout should be used to recover from unexpected failures If the host does not send all the required arguments of a command the c
99. oporte rob tico por lo que finalmente podemos a adir la capacidad del reconocimiento de voz al sistema Para establecer una separaci n l gica entre los modos manual y autom tico el reconocimiento de voz solo se implementar en el modo autom tico y trabajar en conjunci n con el mando de control en este modo c digo es similar al usado en el ejemplo para PC mostrado en la secci n 5 2 6 y el algoritmo usado ser el siguiente 1 Inicializaci n del modulo de VRbot cuando el sistema principal es encendido 2 En la rutina principal proporcionar las rdenes adecuadas para que el m dulo trate de reconocer la palabra de disparo continuamente Mientras hace esto el modo autom tico funciona de la manera habitual mediante el uso del mando de control 3 Si el sistema se encuentra en modo autom tico y la palabra de disparo es reconocida el m dulo esperar entonces una instrucci n v lida Si la instrucci n no es reconocida volver al punto 2 4 Si la orden es identificada la acci n pedida se lleva a cabo Independientemente de la orden reconocida volver al paso 2 5 2 9 Funcionamiento del sistema final El algoritmo implementado previamente en 5 2 8 es funcional No obstante deben realizarse cambios en el sistema de reconocimiento de voz para que su funcionamiento sea m s seguro Al realizar los primeros ensayos sobre el sistema completo sali a la luz un defecto funcional del m dulo de reconocimiento de voz Los pa
100. os por lo que los estrictos l mites definidos para el soporte est tico no son adecuados deteniendo continuamente el soporte Es necesario por tanto mejorar la funci n is straight tal que pueda identificar si el soporte se mueve hacia la izquierda o derecha Adicionalmente a la vez que realizamos estos cambios se implementa una detecci n de colisiones rudimentaria El objetivo es por tanto que el soporte se mueva conociendo la direcci n que esta siguiente y que si se encuentra con alg n obst culo en su trayectoria que le impida su movimiento se detenga evitando posibles problemas y o dafios Esto se hace posible porque cuando la barra entra en contacto con un obst culo tratar de seguir su movimiento por lo que se inclinar en direcci n al sentido de su movimiento El aceler metro detectar esta inclinaci n y la funci n is straight evitar que el soporte contin e su movimiento Los siguientes cambios de c digo tratan de implementar la detecci n de colisiones tanto en el modo manual como en el autom tico Los valores l mite definidos para el aceler metro cuando el soporte se desplaza ser n asim trico dependiendo de la direcci n del movimiento ya sea izquierda o derecha Por tanto cambios en el c digo y definiciones adicionales son requeridos para la funci n is strai ght Estos cambios son diferentes para los modos autom tico y manual El primer paso que se tom fue el de leer los valores del aceler metro
101. otar al soporte de la habilidad de moverse hacia arriba y abajo cuando se daban las rdenes apropiadas tensando y destensando el soporte manualmente Puesto que el mando de control ya no ten a m s botones disponibles se usaron para este prop sito los botones Home y Bed como si fueran los botones manual tightening y manual loosening Estos botones no eran usados en el modo manual nicamente en el autom tico por lo que no se genera en el proceso ninguna incompatibilidad u error La posici n relativa de dichos botones en el mando nos permite recordar su funci n La m quina de estados que gobierna el sistema ya tiene definidos estados para la tensi n y destensi n pero stos ignoran cualquier orden mientras llevan sus acciones a cabo Por ello dos nuevos estados han sido creados STATE MANUAL TIGHTENING y STATE MANUAL LOOSENING En STATE MANUAL TIGHTENING la barra se extiende movi ndose hacia abajo tensando el soporte mientras el bot n manual tightening est presionado En STATE MANUAL LOOSENING se realice la acci n contraria movi ndose la barra hacia arriba destensando el soporte mientras el bot n manual loosening se mantenga presionado Estos estados son similares a los estados STATE LEFT y STATE RIGHT del modo manual que mueven el soporte hacia la izquierda derecha cuando el bot n apropiado es presionado Para prevenir accidentes o un funcionamiento err neo se hace necesario leer los valores del potenci me
102. otentiometer c liukupotentiometri h slidepotentiometer h summeri c gt buzzer c summeri h buzzer h El fichero Makefile tambi n se cambia en concordancia 29 5 1 1 2 Borrado de c digo redundante c digo original utilizaba dos ficheros de c digo C diferentes para el control del aceler metro con sus respectivos ficheros de cabecera asociados Puesto que esto no es necesario dichos ficheros fueron integrados en uno s lo En consecuencia los ficheros accelerometerc y kiihtyvyysanturi c pasan a formar parte de accelerometer c igualmente para sus ficheros de cabecera Esto nos genera c digo redundante con funciones de nombres diferentes pero mismo prop sito por lo que son borradas y las llamadas a las mismas revisadas 5 1 1 3 Tensi n en el modo autom tico sta funcionalidad estaba ausente en el prototipo original Los estados que gestionan la tensi n destensi n del soporte STATE TIGHTENING STATE TIGHTENED y STATE LOOSENINC estaban preparados para trabajar en los estados manual y autom tico pero no suced a lo mismo con los estados que gestionaban el modo autom tico STATE AUTO STATE HOME STATE BED y STATE CHAIR La soluci n fue por tanto la de a adir c digo adicional en estos estados de manera similar al que ya exist a para los estados del modo manual 5 1 2 Control manual de la tensi n La adici n del control manual de la tensi n requer a ya algo m s de trabajo El prop sito era el de d
103. otra instrucci n es identificada Ejemplo de algoritmo de prueba Apertura y configuraci n de HyperTerminal 1 Abrir el programa HyperTerminal 2 Configurar los par metros de la conexi n del puerto serie tal que coincidan con los indicados en la secci n 5 2 3 3 Conectar el puerto COM adecuado por defecto COM 1 y abrir la consola Despertando al dispositivo 4 Despertar el sistema Para conseguir esto introducir la letra b hasta que la salida del m dulo sea o indicando que est preparado 5 Si el modulo no ha sido previamente con VRbot GUI la primera respuesta que deber a proporcionar es w indicando que se ha despertado y posteriormente o Si el m dulo ya estaba activo Ej Ya se hab a usado con VRbot GUI su respuesta ser directamente o waken up 40 Probando una instrucci n SD Ejemplo Instrucci n GO HOME 6 Presionar d No habr respuesta el dispositivo se prepara para el reconocimiento de rdenes SD 7 Presionar B n mero del Wordset en que la instrucci n a reconocer est localizada Como ya se ha explicado los n meros son A 0 B 1 C 2 Puesto que la instrucci n GO HOME est en el Wordset 1 presionamos B 8 Pronunciar la instrucci n antes de que el tiempo de espera se sobrepase 5 segundos 9 Esperar a la respuesta del sistema 10 Existen 3 posibles respuestas Tiempo de espera agotado e Error Error en el reconocimiento o resultados ambiguos r Instr
104. ovement As the movement is only in one direction left or right only the value of X axis parallel to the rail has to be modified Returns 1 if the pole is straight enough Movement commands or if in manua mode is pushed Servo control Returns otherwise int is straight int state readAcceleration Defining the trigger values for the accelerometer switch state case 0 mn x MIN X max x MAX X 109 break case 1 mn x MIN X LEFT max x MAX X LEFT break case 2 min x MIN X RIGHT max x MAX X RI GHT break case 3 mn x MIN X PUSH LEFT max x MAX X PUSH LEFT break case 4 min x MIN X PUSH RIGHT max x MAX X PUSH RI GHT break Determining the state of the support Pushed left has to be separated NI because of the nature of its X axis values if state 3 if acceleration x gt min x acceleration x lt max x amp amp acceleration y gt MIN Y acceleration y lt MAX YJ 68 acceleration z gt MIN Z acceleration z lt MAX Z return 1 else return 0 else if acceleration x gt min x amp amp acceleration x lt max_x amp amp acceleration y gt MIN Y acceleration y lt MAX Y amp amp acceleration z gt MIN Z acceleration z lt MAX Z return 1 else return Save accelerometer values in memory void tellAcceleration uint16 t x uintl16 t y uint16 t z
105. param len number of bytes to be received paramirg interrupt on reception 1zyes Qreturn 0 int CANconfigRX st cmd t cs uint16 t id can cmd t command uint8 t buffer uint8 t len uint8 t irq cs gt cmd command CS id ext 0 cs id std id cs dlc len Cs pt data buffer U cs ctrl ide 0 133 Ccs ctrl rtr 0 while can cmd cs CAN CMD ACCEPTED if cs handle 8 sbi CANI E2 cs handle irg Enable interrupt for the MOD else sbi CANI El cs handle 8 irq return 0 Write one parameter to drive 1 into specified drive memory address Doesn t handle CAN errors correctly uint8 t drive write param uint16 t address intl6 t value uint8 t ret 0 uint8 t message 4 POSERR 0 121 2A 20 00 00 set position error 0 message 0 message 1 messagel 2 message 3 uint8 t address uint8 t address gt gt 8 uint8 t value uint8 t value gt gt 8 ret CANSendMessage MCASK ID message 4 0 return ret Write one parameter to drive 1 into specified drive memory address Doesn t handle CAN errors correctly uint8 t drive write param32 uintl6 t address int32 t value uint8 t ret 0 uint8 t message 6 POSERR 0 121 2A 20 00 00 set position error 0 In each 2 byte field LSB is sent first In 4 byte field the More significant 2 bytes are sent first message 0 uint8 t address
106. pse sourceforge net wiki index php The AVR Eclipse Plugin A 2 Bootloader El microcontrolador y su PCB tienen un Bootloader integrado Con este Bootloader y junto con las herramientas de software listadas previamente cualquier c digo podr ser descargado en el 53 microcontrolador Para ello deben seguirse los siguientes pasos Compilar el programa con make Pese a que el programa ha sido escrito con Eclipse para compilarlo debemos utilizar la consola de Linux Debe escribirse un complejo fichero makefile y tras esto compilar el programa ejecutando el comando make en la consola Cuando se ejecute se obtendr informaci n acerca de la memoria usada en el dispositivo Ver a continuaci n userfuser pc climbsupportpole make Informaci n acerca de la compilaci n errores avisos etc AVR Memory Usage Device at90can128 Program 17236 bytes 13 2 Full text data bootloader Data 397 bytes 9 7 Full data bss noinit El fichero makefile de este proyecto se incluye en el Ap ndice B Para entender c mo ha de ser escrito este fichero preparado para su uso con AVRdude es recomendable la lectura de la gu a de usuario de AVRdude http www nongnu org avrdude user manual avrdude html Poner el microcontrolador en modo Bootloader Para cargar el c digo al microcontrolador es necesario que ste este en modo Bootloader En la PCB del microcontrolador pueden verse dos botones
107. rintf ERROR Failed to initialize deviceln init OK 0 i Ro Ask firmware ID rprintf Response c n response response Sendinstruction VR_ASK ID response data rprintf Response c n response if response VR ASK ID rprintf ERROR Cannot read device I D n init OK 0 Fo Send ack and read status expecting IDz0 response Sendinstruction VR_ACK response data rprintf Response c n response if response VR_1D0 rprintf Device 1D c n response rprintf ERROR Device ID doesn t match n i ni tOKz0 else rprintf Device identified n Set language for built in system instructions English uartlSendByte VR LANGUAGE SET response Sendinstruction VR_ENGLISH response data rprintf Response c n response if response VR OK rprintf ERROR Could not set default language for built in instructions i ni tOK 0 else rprintf Language set English n Set ti meout 3 seconds uartlSendByte VR SET TI MEQUT 113 response Sendinstruction VR THREE SECONDS response data if response VR OK rprintf ERROR Timeout not set n init OK 0 else rprintf Timeout set 3 seconds n Set SD recognition level to easy uartlSendByte VR SET RECOG LEVEL response Sendinstruction VR SD EASY response data rprintf Response c n response if response VR OK
108. rive send command CODE STOP goto manual break break return 0 106 accelerometer h ifndef ACCELEROMETER H define ACCELEROMETER H void readAcceleration void int is straight int state void tellAcceleration ui nt 16 t x uintl16 t y uint16 t z typedef struct uintl6 t x uintl6 t y uintl6 t z Taccelerati on void initAcc void accTOverflow uint16 t getX uint16 t getY uint16 t getZ endif ACCELEROMETER H 107 accelerometer c In this file all the accelerometer routines are defined Leaning control collision detection and servo control include global h include lt avr interrupt h gt include lt avr pgmspace h gt include accelerometer h include lis3lv02_driver h include 2c h include leds h include timer h include rprintf h include statemachi ne h Definition of the trigger values of the accelerometer and used to determine if the pole is straight enough for continuing its move or if it is being pushed x Accelerometer values are 12 bit integers 0 4095 j l Static val ues define MIN X 10 define MAX X 100 define MIN Y 40 define MAX Y 100 define MIN Z 4075 define MAX Z 20 X axis values when the support pole is moving leftwards rightwards or being pushed X axis is parallel to the support rail define MIN X LEFT 10 define MAX X LEFT 100 define MIN X RIGHT 1 define MAX X RIGHT 100 defin
109. run rprintf I NIT DRIVE OK r n goto not ready break Loosen the support and going home case STATE NOT READY loosen wait 10 seconds while time lt 64000 ti mer run rprintf NOT GHTENED r n and 92 rprintf GOING HOME r n defines acc drive write param32 CODE CACC ACC_1 set speed mode 1 drive write param32 CODE MODE TYPE CODE 5 1 l set command speed to the LEFT drive write paramf CODE CSPD 80 start motion drive send command CODE UPD s until at home while button down portE AT HOMEJ II stop ceiling motor drive send command CODE STOP l reset faults drive send command CODE FAULTRESET set actual position 0 drive write _param32 CODE_ SAP 0 rprintf AT HOME r n goto none break break Checking mode switch and configuring the motor case STATE NONE if button down portA BUTTON MANUAL reset faults drive send command CODE FAULTRESET defines acc drive write param32 CODE CACC ACC_1 update val ues drive send command CODE UPD goto manual break else if button down portA BUTTON AUTO reset faults drive send command CODE FAULTRESET defines acc drive write param32 CODE CACC ACC 01 defines speed drive write paramf CODE CSPD 130 update val ues drive send command CODE UPD a ee A S goto_auto break break Manual state Buttons
110. s de palabras Wordsets El grupo de palabras 0 Wordset 0 se reserve para las palabras de disparo mientras que los grupos del 1 al 15 se reservan para las rdenes A continuaci n se detallan las palabras que han sido ense adas al m dulo indicadas en may sculas Wordset 0 INSTRUCTION Esta es la palabra de disparo Si el usuario quiere que el m dulo reconozca cualquiera de las otras palabras deber decir primero esta palabra Instruction para posteriormente pronunciar cualquiera de las otras Es importante destacar que dadas las limitaciones del m dulo una pausa aproximada de 2 segundos es necesaria entre las dos palabras Wordset 1 Orden 0 LEFT Cuando esta orden es recibida el soporte deber a moverse hacia la izquierda parando nicamente si recibe otra orden o llega al final del ra l Orden 1 RIGHT Similar a LEFT pero movi ndose hacia la derecha 38 Orden 2 GO HOME Misma funci n que el bot n Home en el mando de control Orden 3 GO TO BED Misma funci n que el bot n Bed en el mando de control Orden 4 GO TO CHAIR Misma funci n que el bot n Chair en el mando de control Orden 5 TIGHTEN Misma funci n que el bot n Tighten en el mando de control Orden 6 STOP Orden necesaria para la parada del soporte cuando se est moviendo puesto que las acciones se ejecutan de manera autom tica hasta su finalizaci n si otra orden no es reconocida Tras la ensefianza de estas palabras
111. s more then abort result RECEIVE IF RECEIVE THEN training successful OK ELSE IF result r THEN training saved but spoken command is similar to another SD command read which one SEND command RECEIVE A may notify user and erase training or keep it ELSE IF result s THEN training saved but spoken command is similar to another SI command always trigger may skip reading SEND command RECEIVE A may notify user and erase training or keep it ELSE IF result t THEN timed out no word spoken or heard ELSE IF result e THEN error code ack and read which one SEND error RECEIVE A 16 SEND error error RECEIVE A perform actions according to error ELSE invalid request or reply ERROR END IF 71 6 Read used command groups request mask of groups in use SEND m IF NOT RECEIVE k THEN ERROR read in SEND mask SEND mask SEND mask SEND mask 7 Read how mask to 32 bits variable chunks of 4 bits each RECEIVE A mask RECEIVE A 2 mask RECEIVE A 2 mask RECEIVE A 23 many commands in a group request command count of group 3 SEND SEND D IF NOT RECEIVE c THEN ERROR ack and read count SEND count RECEIVE A 72 Read a user defined command dump command 0 in group 3 SEND p SEND D SEND A IF NOT RECEIVE d THEN
112. s the lis errno variable with the corresponding error code l port CHAR lis write reg uint8 t addr uint8 t regval unsigned char table 2 table 0 table 1 addr WRITE WO AUTO NCREMENT MSK regval i2c send LIS ADDR 2 table return pdTRUE portCHAR lis power down void uint8 t conf Read the actual configuration conf lis read reg CTRL REGI ADDR MSK if conf pdFALSE debug POWER DOWN could not get the bus n 125 return pdFALSE else I Modify only the power down bits in the control register lis write reg CTRL REGI ADDR MSK conf 0x3F 0011 1111 return pdTRUE portCHAR lis_power_up void uint8 t conf conf lis read reg CTRL REGI ADDR MSK if conf pdFALSE debug POWER UP could not get the bus n return pdFALSE else I Modify only the power down bits in the control register lis write reg CTRL REGI ADDR MSK conf 0xC0 1100 0000 return pdTRUE portCHAR lis_SetDecFactor enum data rate samples drs Data Rate Samples uint8 t conf conf2 0 conf lis read reg CTRL REGI ADDR MSK if conf pdFALSE debug SET DEC FACTOR could not get the bus n return pdFALSE else II modify only the decimation factor bits in the control register switch drs case HZ 40 conf2 conf OxCF XX00 XXXX break case HZ 160 conf2 conf 0xCF 0x10 XX01 XXXX break case HZ 640 conf2 conf
113. sening motor T K rprintf c h rprintf function for Atmel AVR series P S slidepotentiometer c h Sliding potentiometer T K statemachine c h State machine of the system program T K 8 J L timer c h System timer function libraries P S uart c h UART driver for Atmel AVR series P S uart2 c h UART driver for Atmel AVR series P S util h Standard useful definitions T K Filenames Los ficheros usados se dividen en ficheros de c digo C c y ficheros de cabecera h La mayor a de los ficheros son de c digo C con sus respectivos ficheros de cabecera de ah la notaci n C Lh 81 Programadores A L Antti Liesj rvi Estudiante de la Universidad Alvar Aalto University Departamento de Autom tica y Sistemas Atmel Ficheros de Atmel sobre el bus de comunicaci n CAN con copyright J A Johannes Aalto Estudiante de la Universidad Alvar Aalto University Departamento de Autom tica y Sistemas J L Jorge Latorre Estudiante de la Universidad Carlos Ill de Madrid Estudiante de intercambio en la Universidad Alvar Aalto University Departamento de Autom tica y Sistemas Escritor de ste proyecto fin de carrera T K Teemu Kuusisto Estudiante de la Universidad Alvar Aalto University Departamento de Autom tica y Sistemas Creador del prototipo original de soporte rob tico P S Pascal Stang Autor de los ficheros de Atmel bajo licencia GNU Lista de ficheros incluidos en este proyecto Nombre de
114. sent to the device through the serial port buf Byte read from the serial port buffer This function sends an instruction to the device and then waits for response from it yy void Sendinstruction unsigned char instruction unsigned char buf int response 0 SendByte 0 instruction while response 1 responsezPollComport 0 buf 1 Getinstruction unsigned char buf buf Byte read from the serial port buffer This function gets the byte read from the device and translates the response to a more friendly language Always returns zero save if the instruction close is given n that case it will return one and the main routine will end int Getl nstruction unsigned char buf int close 0 switch buf case MOVE LEFT printf MOVING LEFT n break case MOVE RIGHT printf MOVING RIGHT n break case STOP printf STOP n break case TI GHTEN printf TI GHTEN n break case 00 HOME printf GOING HOME n break case 00 TO BED printf GOING TO BED n break case GO_TO_CHAIR printf GOING TO CHAI Rin break case CLOSE close l break default return close 78 79 80 Ap ndice E C digo implementado en el sistema final En este ap ndice se incluye el c digo usado en el sistema final En la tabla a continuaci n se muestran los ficheros utilizados por el sistema as como una breve descripci n y el nombre de su sus programadores Para
115. t pdf SGSThomson Microelectronics LI S3L02 html 09 01 2010 8 Proyecto Ceilbot http autsys tkk fi en Ceilbot 09 01 2010 9 P gina web de VeeaR http vee ar com 09 01 2010 10 Informaci n y hoja de caracter sticas de VRbot http www veear eu Products VRbot aspx 09 01 2010 11 VRbot GUI Descarga http www veear eu LinkClick aspx fileticket KZULbeOgvCM 3d amp tabid 220 amp mid 626 09 01 2010 12 Gu a de usuario de VRbot Descarga http www veeareu LinkClick aspx fileticket VowGK1u9rRc 3dGtabid 2206mid 620 09 01 2010 13 Protocolo de comunicaci n de VRbot Descarga http www veeareu LinkClick aspx fileticketzg hfDIDWpC8 3d amp tabid 220 amp mid 626 09 01 2010 51 Protocolo de comunicaci n en serie http en wikipedia org wiki Serial port 09 01 2010 HyperTerminal http www hilgraeve com htpe download html 09 01 2010 Librer as RS 232 C C http www teuniz net RS 232 09 01 2010 AVRdude http www bsdhome com avrdude 09 01 2010 Eclipse C C IDE http www eclipse org 09 01 2010 AVR Eclipse plug in http avr eclipse sourceforge net wiki index php The_AVR_Eclipse Plugin 09 01 2010 Embarcadero RAD Studio 2010 https downloads embarcadero com free rad studio 09 01 2010 A book on C Kelley and Pohl 1990 52 Ap ndice A Carga del c digo en el microcontrolador Software necesario y Bootloader Este ap ndice es un peque
116. ta bater a se recarga cuando el soporte se halla en la posici n Home Esto es posible gracias a la acci n de dos pines a una diferencia de potencial de 12V DC localizados al final del ra l Cuando el soporte se encuentra en la posici n Home hace contacto con dichos pines ver figuras 2 8 y 2 9 Es muy importante entonces dejar siempre el soporte en la posici n home al apagarlo para evitar una posible descarga total de la bater a 2 8 Recargando Posici n Home 2 9 Descargando 19 20 3 Pruebas iniciales con el soporte rob tico Tras estudiar los fundamentos de la estructura del prototipo de trabajo y su hardware se realizaron las primeras pruebas para comprobar su funcionamiento prop sito de estas primeras pruebas por tanto es el de determinar las funcionalidades capacidades limitaciones y errores de dise o del prototipo Previamente a la realizaci n de estas pruebas se hace necesario el estudio minucioso del c digo original implementado en el microcontrolador 5 Como puede verse en el propio mando de control el prototipo puede alternar entre dos modos principales Autom tico y Manual Cada uno de estos dos modos determina las acciones a realizar por el prototipo y los botones del mando que podr n usarse 3 1 Modo manual Botones usados Left Right y Tightening Mientras son pulsados los botones Left y Right mueven el soporte hacia la izquierda y derecha sobre el ra l a una veloc
117. ter sticas de VRbot 8 Gu a de usuario de VRbot 9 Protocolo serie de VRbot 10 Librer as para la programaci n del puerto serie 11 Ejemplo de programaci n del puerto serie 12 C digo fuente final usado en los test finales 13 C digo fuente final comentado 14 Presentaci n en video del soporte rob tico 15 VRbot GUI 1 1 3 16 HyperTerminal Private Edition 6 3 Tambi n en los ap ndices 49 50 9 Referencias 1 The Engineering Handbook of Smart Technology for Aging Disability and Independence Helal Mokhtari and Abdulrazak 2008 2 Defining Socially Assistive Robotics David Feil Seifer and Maja J Mataric Interaction Laboratory University of Southern California In proceedings of the 2005 IEEE 9th International Conference on Rehabilitation Robotics June 28 July 1 2005 Chicago IL USA http cres usc edu pubdb html files upload 442 pdf 09 01 2010 3 P gina web de Technosoft http www technosoftmotion com index php 09 01 2010 4 Informaci n hoja de caracter sticas y gu a de usuario del 3605 http www technosoftmotion com products OEM PROD PIM3605 htm 09 01 2010 5 P gina web de Atmel http www atmel com 09 01 2010 6 Informaci n y hoja de caracter sticas del AT90CAN128 http www atmel com dyn Products product card asp part id 3388 09 01 2010 7 Hoja de caracter sticas del LIS3L02 http www chipdocs com datasheets datashee
118. teres simples Este ejemplo de programaci n se incluye en el ap ndice D y como anexo 11 42 5 2 7 Conexi n de VRbot y configuraci n del sistema conjunto Hemos conseguido programa a trav s del Puerto serie y el modulo funciona por lo que es momento de conectar VRbot al soporte rob tico para a adir la capacidad de reconocimiento de voz Puesto que la UARTO est siendo usada para la programaci n depuraci n y supervisi n del sistema el m dulo VRbot estar conectado a la UART1 del AT90CAN128 tal u como se muestra en la figura 5 7 C000 Fa ANS f Z1d5 a 88 Jc1 5 7 Diagrama de conexiones VRbot PCB Una vez se han hecho todas las conexiones debe prepararse al microcontrolador para leer la UART1 en cualquier momento por lo que sta debe ser configurada de manera an loga a la UARTO Esto puede hacerse f cilmente desde el c digo fuente de main c Es recomendable exportar el c digo ya desarrollado en la secci n 5 2 6 y probarlo en el entorno del microcontrolador Por supuesto todas las librer as y funciones previamente usadas en los ficheros rs232 c and rs232 h deber n sustituirse por aquellas que configuran el puerto serie del microcontrolador esto es los ficheros uart c uart h uart2 c y uart2 h 43 5 2 8 Implementaci n del reconocimiento de voz en el sistema completo En la anterior secci n logramos que VRbot funcionara satisfactoriamente en conjunci n con el microcontrolador del s
119. th varying sensitivity or received character 6 8 wake on triple clap with varying sensitivity or received character Expected replies STS SUCCESS 62 6Fh Set recognition timeout Timeout 1 default 0 infinite 1 31 seconds Expected replies STS SUCCESS i 69h Activate SI recognition from specified wordset Wordset index 0 3 Expected replies STS SIMILAR STS TIMEOUT STS ERROR t 74h Train specified SD SV command 1 Group index 0 trigger 1 15 generic 16 password 2 Command position 0 31 Expected replies STS SUCCESS 5 5 RESULT STS SIMILAR STS TIMEOUT STS ERROR g 67h Insert new SD SV command Group index 0 trigger 1 15 7 generic 16 password 2 Position 0 31 Expected replies STS SUCCESS STS OUT OF MEM 75h Remove SD SV command Group index 0 trigger 1 15 generic 16 password Expected replies STS SUCCESS 64h Activate SD SV recognition Group index 0 trigger 1 15 generic 16 password Expected replies STS_RESULT STS_SIMILAR STS_TIMEOUT STS_ERROR 63 e 65h Erase training of SD SV command oup index 0 trigger 1 15 generic 16 password n 6Eh Label SD SV command Group index 0 trigger 1 15 generic 16 password Command position 0 31 Length of label 0 31 Expected replies STS COUNT p 70h Read SD
120. tro deslizante a la vez que el soporte est tens ndose manualmente de manera similar al estado en que se tensa autom ticamente STATE TIGHTENING No hay necesidad de a adir un l mite cuando la barra se contrae puesto que cuando el l mite superior es alcanzado el motor se detiene autom ticamente 30 Es importante recalcar que en este punto del proyecto es decir el momento en que el control manual ha sido implementado con el objeto de poder realizar pruebas y ganar familiaridad con el c digo del sistema el aceler metro a n no funciona correctamente Por tanto es todav a posible tensar el soporte aunque no se encuentre en posici n totalmente vertical Esta problem tica ser solucionada en la siguiente secci n 5 1 3 Pruebas con el aceler metro Funcionalidad b sica Durante la realizaci n de las primeras pruebas qued claro que el aceler metro no estaba funcionando apropiadamente La barra pod a moverse violentamente en cualquier direcci n sin afectar en modo alg n el funcionamiento del soporte Tras examinar el c digo y realizar algunas pruebas imprimiendo por pantalla los valores de los ejes X Y y Z del aceler metro la causa del error sali a la luz No estaba funcionando dados los valores umbral excesivamente permisivos definidos en la funci n que controlan el aceler metro sta funci n is straight implementada en el c digo original determina si el soporte est lo suficientemente erguido vert
121. trones para las palabras de disparo eran demasiado permisivos Esto genera un problema porque provoca un gran n mero de falsos reconocimientos para estas palabras Esto es el usuario pronuncia la palabra funci n y la palabra de disparo instrucci n es reconocida por el sistema Esta problem tica no puede ser solucionada mediante un cambio en el c digo ni en la configuraci n del m dulo contrario que para los otros grupos de rdenes no es posible cambiar la permisividad de los patrones de reconocimiento para las palabras de disparo La soluci n a este problema fue la de ense ar la palabra instrucci n al modulo y asignarla a uno de los grupos de palabras de rdenes pero en un grupo distinto al resto en el grupo 4 De este modo el sistema estar continuamente pidiendo rdenes del grupo 4 siendo su nica palabra instrucci n En caso de que el reconocimiento sea exitoso esperar entonces a que la siguiente palabra pertenezca al grupo 3 rdenes en Espa ol Puesto que los patrones reconocimiento para las instrucciones SD est n configurados a hard los falsos reconocimientos desaparecen 44 6 Pruebas finales Una vez hemos desarrollado todas las mejoras debemos someter el sistema final a una serie de pruebas para determinar si este proyecto ha cumplido su prop sito inicial de mejora del prototipo original Todas y cada una de las funciones y arreglos realizados han sido testeadas exhaustivamente 6 1
122. ucci n reconocida las palabras se corresponden con los patrones definidos para alguna de las instrucciones definidas en el Wordset 1 11 Si la instrucci n reconocida es t o e volver al paso 6 Si la respuesta obtenida fue r presionar la barra espaciadora 12 dispositivo mostrar el n mero correspondiente a la instrucci n reconocida para el Wordset definido Si reconoce adecuadamente la instrucci n GO HOME la respuesta debiera ser C u orden 2 del Wordset 1 Las instrucciones ya incluidas en el dispositivo SI pueden probarse presionando i en lugar de d en el paso 6 El lenguaje por defecto para estas instrucciones es el ingl s modulo puede ser configurado ensefiado y probado siguiendo este procedimiento 41 5 2 6 Programando VRbot utilizando un PC Hasta ahora ya hemos podido comprobar c mo funciona VRbot utilizando el puerto serie El siguiente paso es el de crear un programa en C C que nos permita probar el conjunto de VRbot aplicaci n La mayor traba para conseguir este objetivo es la programaci n del puerto serie en si Para lograrlo se descarg c digo fuente de licencia GPL con las librer as y funciones pertinentes para poder programar tanto en entornos Linux como Windows con el mismo c digo fuente Este c digo pudo encontrarse en la p gina web http www teuniz net RS 232 Se requieren 2 ficheros en este proyecto para conectar programar y probar VRbot utilizando el puesto serie co
123. usados para este prop sito Reset y Loader Ver figura A 1 Para poner el microcontrolador en modo Bootloader han de seguirse los siguientes pasos en un orden estricto 1 Presionar y mantener presionado el bot n Reset 2 Presionar y mantener presionado el bot n Loader 3 Soltar el bot n Reset 4 Soltar el bot n Loader Tras hacer esto el microcontrolador entrar en modo Bootloader y el c digo podr ser cargado 54 Reset Button nnntittrra Loader Button A 1 Localizaci n del los botones Reset y Loader en la PCB del microcontrolador Cargando el c digo Cuando el dispositivo se halla en el modo Bootloader para cargar el c digo es necesario conectar la PCB al PC usando un conector en serie la PCB tiene un conector DB9 para ello e introducir el siguiente comando en la consola este c digo se incluye tambi n en el fichero makefile userQuser pc avrdude c avr911 P dev ttyUSB1 b 115200 p at90can128 U flash w mai n hex i AVRdude deber a mostrar informaci n relativa al programa a cargar Connecting to programmer Found programmer Id AVRBOOT type 5 Informaci n sobre el proceso de descarga avrdude verifying avrdude 17108 bytes of flash verified avrdude done Thank you Reseteando el microcontrolador Tras la carga del c digo el sistema comenzar su funcionamiento pero hasta que los errores de inicializaci n listados en la secci n 6 3 s
124. used Left Right Tighteni ng Manual Tighteni ng 93 and Manual Loosening It also checks accelerometer values for servo control case STATE MANUAL previous state state Check if any of the listed buttons are pressed and go to the desired state if button down portA BUTTON LEFTJ goto left break else if button down portA BUTTON RI GHT goto right break else if button down portA BUTTON TI GHT LOOSEJ goto ti ght break else if button down portA BUTTON AUTO goto none break else if button down portA BUTTON UP goto manual loose break else if button down portA BUTTON DOWN goto manual tight break Check if it is being pushed servo control else if is straight PUSHI NG LEFT goto push left break else if is straight PUSHI RIGHT goto push right break break Auto state Buttons used Home Bed Chair and Tightening I t also checks voice recognition commands VRorder case STATE AUTO if button down portA BUTTON MANUAL goto none break else if button down portA BUTTON HOME VRorderzzVR GO HOME goto home break else if button down portA BUTTON BED VRorder VR_ GO TO BED goto bed break else if button down portA BUTTON CHAI R VRorder VR_GO_TO_CHAIR goto chair break else if VRorderzzVR MOVE LEFT goto moving left
125. while RECEIVE waits for a reply character a timeout is not explicitly handled for simple commands but should be always implemented if possible Also the OK and ERROR routines are not explicitly defined since they are host and programming language dependent but appropriate code should be written to handle both conditions Lines beginning with a sharp character are comments Please note that in a real programming language it would be best to define some constants for the command and status characters as well as for mapping numeric arguments that would be used throughout the program to minimize the chance of repetition errors and clarify the meaning of the code See the header file protocol h for sample definitions that can be used in a C language environment Here below all the characters sent and received are written explicitly in order to clarify the communication protocol detailed in the previous sections 1 Recommended wake up procedure wake up or interrupt recognition or do nothing use a timeout or max repetition count DO SEND b LOOP UNTIL RECEIVE 2 Recommended setup procedure 4 ask firmware id SEND x IF NOT RECEIVE x THEN ERROR send ack and read status expecting id 0 SEND IF RECEIVE A THEN OK ELSE ERROR set language for SI recognition Japanese SEND 1 SEND C IF RECEIVE o THEN OK ELSE ERROR set timeout 5 seconds SEND o SEND F IF RECEIVE o
Download Pdf Manuals
Related Search
Related Contents
ROTEX-SOLARIS-6 menu “impostazioni“ - PowerAiD.it PowerAiD.it F Series User Manual_robot_ Q-See QSWLOC Technical Manual KitchenAid KFDD500ESS Use and Care Manual a lire avant toute utilisation d`un jeu video par vous A REGULAÇÃO DAS PROFISSÕES E O CONTROLE JUDICIAL Willkommen 1 Benutzerhandbuch für SnagIt Add-ins Copyright © All rights reserved.
Failed to retrieve file