Full text
Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Diseño y control de una prótesis de mano de bajo coste Autor: Federico Vaz Fernández Tutores: Juana María Mayo Núñez y Joaquin Ojeda Granja Dpto. Ingeniería Mecánica y Fabricación Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020
Trabajo Fin de Grado Grado en Ingeniería Electrónica, Robótica y Mecatrónica Diseño y control de una prótesis de mano de bajo coste Autor: Federico Vaz Fernández Tutores: Juana María Mayo Núñez y Joaquin Ojeda Granja Catedrática de universidad y profesor contratado doctor Dpto. Ingeniería Mecánica y Fabricación Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2020
Trabajo Fin de Grado: Diseño y control de una prótesis de mano de bajo coste Autor: Federico Vaz Fernández Tutores: Juana María Mayo Núñez y Joaquin Ojeda Granja El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha:
Agradecimientos Quiero aprovechar estas líneas para agradecerle a toda mi familia por el cariño, paciencia y apoyo que han tenido conmigo durante los duros años de carrera. Sobre todo, quisiera agradecerle a mi abuelo Agustín Fernández el iniciarme de pequeño en el mundo de la mecánica y electrónica. Sin él, no estaría donde estoy a día de hoy. He de agradecerles a mis amigos de la carrera, pues sin la ayuda y apoyo de ellos, la carrera no habría sido tan maravillosa experiencia. Además, he de agradecer a mis amigos de Huelva, pues sin la felicidad que estos me aportan no podría aguantar la carga de trabajo de la carrera. También he de agradecerle a mis tutores Juana María Mayo Núñez y Joaquín Ojeda Granja por su ayuda y atención, sobre todo con la situación de cuarentena que envuelve a todo el trabajo, siendo un trabajo mayormente práctico. Sin su ayuda no podría haber hecho nada de este. Del mismo modo, todo el profesorado que he tenido en la carrera merece mi más sincero agradecimiento por su docencia. Desde todo mi corazón, gracias a todos. Federico Vaz Fernández Sevilla, 2020 I
Resumen Este proyecto muestra el desarollo y control de una prótesis de bajo coste para la mano derecha. Comienza con la impresión 3D de la prótesis, con diferentes materiales y perfiles de impresión. En primer lugar, se describen las impresoras utilizadas para la impresión así como el programa para crear los archivos que utilizarán. Seguidamente, se detallan los perfiles de impresión para cada material y pieza, finalizando con un breve análisis mecánico de la prótesis donde se comparará a una mano biológica en cuanto a grados de libertad. En segundo lugar, se estudiará el uso de dos sensores EMG completamente diferentes, uno de muy bajo coste y otro de alta precisión. El primero consiste en la medida EMG de un músculo junto a un posterior procesamiento de esta medida, resultando en una señal apta para microcontroladores con entradas analógicas, mientras que el segundo ofrece una señal completamente fiel a la medida EMG del sensor. En tercer lugar, puesto que los sensores adquieren medidas de músculos cercanos a donde esté colocado, ha de separarse cuándo hay intención de movimiento para un dedo o no. Es por ello que se propone un método de clasificación para las señales EMG del brazo, realizado con el sensor de alta precisión, pero extrapolable para varios sensores de baja precisión. A continuación, se incluye el diseño e impresión de un antebrazo para que la prótesis impresa se pueda ajustar a las necesidades del sujeto. En este antebrazo se incluyen el microcontrolador, el sensor, las baterías y los actuadores del sistema, de manera que el antebrazo proteja a todos los elementos de colisiones internas y externas. Además, se describen los modos de funcionamiento programados para la actuación de la prótesis. El primero de estos consiste en controlar todos los dedos simultáneamente en función de si se detecta entrada del sensor EMG por encima de un valor umbral, mientras que el segundo propone manejar cada dedo mediante un contador de pulsos en un intervalo de tiempo. Finalmente, se incluye un análisis de los costes de producción del proyecto, tanto de la prótesis como de la electrónica que se incluye. III
XÍndice 4 Sensor EMG Trigno 23 4.1 Software de Delsys 23 4.1.1 Trigno Analog Output 23 4.1.2 EMGworks Acquisition 23 4.1.3 EMGworks Analysis 24 4.2 Medidas EMG del antebrazo 24 4.2.1 Localización de sensores en el antebrazo 25 4.2.2 Gráficas de medidas de cada sensor 25 4.3 Conclusión 27 5 Clasificación movimientos 29 5.1 Características típicas 29 5.1.1 Valor eficaz (RMS) 29 5.1.2 Valor medio absoluto (MAV) 30 5.1.3 Frecuencia media y mediana (MEF, MDF) y densidad espectral (PSD) 31 5.2 Driscriminante lineal 32 5.2.1 Pulgar 32 5.2.2 Índice y corazón 34 5.2.3 Anular y meñique 37 6 Diseño del antebrazo 39 6.1 Armazón para servomotores 39 6.2 Antebrazo 42 6.3 Elementos del antebrazo 43 7 Modos de funcionamiento de la prótesis 45 7.1 Agarre completo 45 7.2 Movimiento por pulsos 47 7.3 Autocalibración 49 8 Coste de la prótesis 51 9 Conclusiones y futuras líneas de trabajo 53 9.1 Conclusiones 53 9.2 Futuras líneas de trabajo 54 Apéndice A Códigos 57 Índice de Figuras 71 Índice de Tablas 73 Índice de Códigos 75 Bibliografía 77
Notación CNC control numérico por computador PLA ácido poliláctico PVA acetato de polivinilo ABS acrilonitrilo butadieno estireno TPE elastómero termoplástico GDL grado de libertad EMG electromiografía, electromiográfica sEMG electromiografía, electromiográfica en superficie MDF modelado por deposición fundida CMRR rechazo al modo común STL archivo de objeto 3D RMS valor cuadrático medio (del inglés root mean square) MAV valor medio absoluto (del inglés medium absolute value) MDF frecuencia mediana MEF frecuencia media PSD densidad espectral de potencia (del inglés power spectral density) CAD diseño asistido por computador (del inglés computer assisted design) PCB circuito impreso OPAM amplificador operacional (del inglés operational amplifier) PWM modulación por ancho de pulsos (del inglés Pulse-Width Modulator) XI
1 Introducción La ingeniería siempre ha buscado satisfacer necesidades y resolver problemas de la sociedad. Es por ello que han surgido a lo largo de los años ramas de la ingeniería aplicadas a las ciencias de la salud, como la ingeniería genética, la ingeniería biomédica o la ingeniería biónica. Esta última engloba a dos ramas, una con el fin de simular el comportamiento de seres vivos, y otra con el fin de combinar biología y electrónica para mejorar las capacidades de los seres vivos [1]. La ingeniería biónica combina disciplinas como mecatrónica, robótica y biología. Este trabajo es un claro ejemplo de la aplicación conjunta de estas ramas de conocimiento, centrándose en especial en la mecatrónica y adquisición de señales. 1.1 Motivación y Necesidad El número de personas con miembros amputados crece año tras año, ya sea por enfermedades tales como diabetes, por accidentes de diversos tipos, por herencia o por guerras. Se estima que el 30% de las personas que sufren de esta discapacidad parcial padecen depresión y problemas de ansiedad, y que el coste de los cuidados y salud se duplica con respecto a una persona sin esta discapacidad, llegando a costar el total de pacientes en un año tan sólo en Estados Unidos (185000 pacientes) unos 8 billones de dólares al año[2]. Figura 1.1 prótesis de codo, antebrazo y mano conectada a sensores mioeléctricos. fuente: www.cnrs.fr. 1
2Capítulo 1. Introducción Además, el porcentaje de miembros superiores, según diferentes estudios, suele rondar entre el 27% y 56% [ 3 ], mientras que las prótesis de miembros inferiores ocupan entre el 49% y 95% [ 3 ] de los casos. Según la OMS [ 4 ], se estima que el 0.5% de la población mundial tiene necesidad de prótesis, por lo que estima que en África, Asia y Latinoamérica, habría unos 25 millones de personas que no tendrían esta necesidad solventada. Es por ello que surge la motivación por parte de numerosos grupos de investigación y empresas para desarrollar prótesis que satisfagan esta necesidad, minimizando el coste para que pueda expandirse por todo el mundo, mediante impresión 3D o diversos usos de materiales. Es aquí donde se encuentra mi motivación personal por el trabajo, pues me gustaría aplicar los conocimientos de la carrera para ayudar al máximo número de personas posibles, y este campo es seguramente uno de los más adecuados para ello. Además, resulta bastante útil que la prótesis esté actuada. Aunque por ahora no se consiga la funcionalidad completa de una mano biológica, es conveniente que la prótesis permita agarrar objetos, utilizar herramientas, aguantar un determinado peso y tener un tamaño similar al miembro original. 1.2 Objetivo y metodología El objetivo de este trabajo es la correcta impresión, estableciendo unos perfiles adecuados para conseguir imprimir una prótesis de mano de diversos materiales con un coste muy bajo y la sensorización y actuación sobre esta, tal que se puedan mover los dedos para agarrar objetos. La prótesis será actuada mediante servomotores que tirarán de unos hilos de nylon atados a las puntas de los dedos, por lo que la fuerza que se podrá ejercer sobre los objetos dependerá directamente del par que nos ofrezcan estos motores. Dichos motores se activarán mediante señales electromiográficas de los músculos del antebrazo, aunque pueden ajustarse a cualquier músculo y necesidad. Se compararán los resultados obtenidos con sensores de alta precisión delsys ® trigno system frente a los obtenidos con un dispositivo amplificador y rectificador básico. La adquisición de dichas señales se realizará con sensores de superficie, por lo que las interferencias entre músculos han de tenerse en cuenta. Para ello se realizará un clasificador lineal que identifique y clasifique los movimientos, aunque no se llegue a implementar en la versión final del trabajo. Para tener un uso cómodo, es necesario diseñar e imprimir un elemento que albergue los motores, el microprocesador (arduino nano), baterías y demás elementos electrónicos de manera que no estorben al usuario. Para el diseño se usará el programa SolidWorks®. Finalmente, se hará un estudio de los costes de la prótesis con objeto de apreciar la rentabilidad para una empresa al implementar este tipo de proyectos.
1.3 Estado del Arte 3 1.3 Estado del Arte 1.3.1 Breve historia de las prótesis Se ha descubierto, gracias a la momia de un sacerdote egipcio [ 5 ], que las primeras prótesis datan del milenio 1 a.C. siendo esta un dedo del pie, sin funcionalidad aparente salvo la estética. Hay hallazgos de una prótesis de la mitad inferior de la pierna que data del año 300 a.C. aproximadamente, fabricada con madera, hierro y bronce, capaz de permitir andar a una persona. También data del 210 a.C. aproximadamente una prótesis de brazo capaz de soportar el peso de un escudo. No fue hasta el Renacimiento que comenzó a desarrollarse la funcionalidad y diseño de estas, creando dedos articulables que podían fijarse con ayuda de la otra mano, permitiendo al usuario coger objetos y tener una limitada maniobrabilidad. Una figura importante fue Ambrosio Paré, uno de los cirujanos más importantes de la historia, que diseñaba y construía prótesis para los heridos en guerra del siglo XVI. Llegó a diseñar una prótesis de pierna con la rodilla flexionable y con posibilidad de fijar el pie de esta, siendo el primero en darle utilidad práctica a estas. En los siglos posteriores, hubo numerosas mejoras tanto en el manejo, calidad y utilidad de las prótesis como en técnicas de amputación que permitiesen mejor control de las prótesis. Además, se desarrolló bastante el aspecto de estas, añadiendo materiales y funcionalidades que lograsen unas prótesis más naturales y ligeras. La guerra civil estadounidense supuso un avance en cuanto a los materiales de los que se fabricaban las prótesis, la alta demanda supuso cambiar a prótesis de madera y añadir mecanismos a estas. Desde entonces, no hubo mejoras notables hasta la Segunda Guerra Mundial, donde el gobierno de Estados Unidos decidió cambiar parte de la inversión en armamento por la prostética, añadiendo plástico a los materiales [ 6 ]. Por último, se ha añadido electrónica y microprocesadores a las prótesis de manera que los pacientes puedan recuperar no solo el aspecto sino el estilo de vida. 1.3.2 Actualidad En el presente, la investigación en el campo de la ingeniería biónica toma varias vertientes: •Mecánica : Centrada tanto en el diseño y desarrollo de modelos de prótesis y los estudios sobre esta, como la resistencia que oponen sus materiales a esfuerzos y otros experimientos mecánicos. España cuenta con varios departamentos de nuestras universidades que trabajan en este campo a fondo, como el departamento de ingeniería mecánica de la Universidad Jaume I de Castellón, que ha permitido usar su modelo IMMA hand 1.2 [7] para este proyecto. •Elecrónica : Estudia la adquisición de las señales EMG, su tratamiento y su digitalización en microprocesadores modernos. Además, suelen combinarse otros sensores tales como acelerómetros y giróscopos para mejorar la precision de las medidas de los sensores EMG. Normalmente los departamentos que trabajan en este campo suelen trabajar conjuntamente con el control de esta. Algunos de los avances más novedosos en este campo son la detección de movimiento voluntario, el mantener una postura fija cuando se desee y la clasificación de movimientos en tiempo real mediante patrones. •Control : Trabajan con prótesis completamente actuadas o subactuadas, con casos de hasta un actuador por articulación de la mano, siendo investigaciones muy costosas pero bastante importantes para el desarrollo de estas. Además, se suele estudiar junto a este caso los modelos
4Capítulo 1. Introducción dinámicos de la mano. Destaca entre numerosos departamentos el Instituto de Biorobótica de Santa Ana, en Pisa. Figura 1.2 prótesis IMMA hand. fuente: System for the experimental evaluation of anthropomorphic hands. Application to a new 3D-printed prosthetic hand prototype. 2017. Figura 1.3 prótesis OLYMPIC hand. [8].
2 Impresión 3D de la prótesis Para la fabricación de la prótesis se han utilizado técnicas de impresión 3D de modelado por deposición fundida, cuyas ventajas frente a otras técnicas, como la impresión 3D por fotopolimerización, son notables en cuanto a costes. La técnica por deposición fundida consiste en añadir capas de material, una encima de otra, hasta obtener una pieza completa. Las capas se componen de un filamento de material que, al llegar a la boquilla a una temperatura mayor de la fusión del material, crea pequeños hilos de material [ 9 ]. Para mover dicha boquilla se dispone de un servomotor por cada eje XYZ, variando la disposición de los servomotores según el fabricante. 2.1 Impresoras Utilizadas 2.1.1 Ultimaker 3 extended La impresora Ultimaker 3 extended es uno de los modelos que dispone Ultimaker, una de las más famosas empresas del sector. Es una impresora de uso profesional que cuenta con dos motores extrusores situados detrás, es decir, puede imprimir con dos materiales simultáneamente. Además, cuenta con un volumen de 215x215x300 mm y una velocidad máxima de 300 mm/s. Una característica de esta impresora es que imprime de arriba a abajo, es decir, la plataforma donde depositamos el material baja a medida que este se deposita, de manera que el movimiento en eje z está asociado a esta plataforma y los desplazamientos en el plano XY se controlan desde dos ejes que atraviesan la zona de los extrusores. Figura 2.1 Ultimaker 3 extended. fuente: 3dnatives.com. 5
6Capítulo 2. Impresión 3D de la prótesis 2.1.2 Creality ender 3 Creality fabrica impresoras de bajo coste y de uso personal. Cuenta con solo un extrusor, únicamente imprime con polímeros. Frente a la Ultimaker 3 extended, esta cuenta con tan solo un volumen de 220x220x250 mm y velocidad máxima de 180 mm/s, lo cual la sitúa muy por debajo de la Ultimaker 3 extended en cuanto a prestaciones, pero teniendo un coste considerablemente menor. Además, la distribución de los servomotores es diferente, en este caso la plataforma es la que recibe el movimiento del eje Y, mientras que X y Z se asocian al movimiento del extrusor. Figura 2.2 Creality ender 3. fuente:3dnatives.com. 2.2 Ultimaker Cura La impresora recibe un archivo de tipo .gcode, que consiste en un conjunto de órdenes CNC, coordenadas para cada eje y extrusor, los cuales la impresora se encarga de convertir en pasos para los servomotores. Para generar ese archivo, se necesita un programa que permita transformar un objeto 3D .stl en ese conjunto de instrucciones. Este tipo de programas son denominados slicer, puesto que "rebanan" la pieza en capas. De entre todos los programas que hay con este propósito, se ha elegido Cura (de Ultimaker) por ser de los más utilizados en el mercado y compatible con la mayoría de impresoras y estar familiarizado previamente con su entorno de trabajo. El entorno de Cura cuenta con la representación del espacio exacto de impresión, de manera que al situar una pieza se pueda preveer dónde se situará esta dentro de la impresora. Además, para editar la impresión, permite desplazarla, modificar su tamaño, girarla y crear soportes o eliminarlos, voluntariamente. Por otro lado, permite modificar los ajustes de la impresión con los denominados "perfiles de impresión" y, una vez listos, permite tener una vista preliminar de la pieza a imprimir. En esta vista se puede apreciar capa por capa lo que extruirá la impresora.
2.3 Modelo de la prótesis 7 Figura 2.3 Entorno de Ultimaker Cura.. 2.3 Modelo de la prótesis El modelo de la prótesis está creado por Inmaculada Llop-Harillo de la Universitat Jaume I. Se ha decidido utilizar este modelo por las consideraciones que ha tenido la autora para representar un modelo similar a una mano humana estándar y por los buenos resultados que ofrece para diferentes funciones [ 10 ]. El modelo se caracteriza además por contraerse tirando de la última falange de los dedos mediante un hilo (ya sea de plástico o metálico) que es conducido por un pequeño agujero que atraviesa los dedos y la palma, y extenderse gracias a las juntas que unen los dedos. Figura 2.4 Piezas que componen la prótesis. fuente: proyecto DEVALHAND.
14 Capítulo 3. Sensor EMG de Bajo coste Puede ser alimentado desde ±2.3 hasta ±18 voltios. En este caso, tal y como recomienda el fabricante, se alimenta a ±9 V. Además, se puede añadir una resistencia R G para controlar la ganancia que ofrece el amplificador, siguiendo: G=1+(49.4kΩ/RG)≈207 (3.1) El resultado de la medida es MEASURE. Figura 3.2 Etapa de medida. 3.1.2 Etapa de rectificación Para que la señal pueda leerse en Arduino, es necesario que sea positiva. Por ello, se necesita una etapa que transforme la señal original medida y amplificada por la etapa de medida en una señal cuyos valores sean mayores o iguales a cero. Figura 3.3 Etapa de rectificación. 3.1.3 Etapa de filtrado Un filtro analógico es un elemento electrónico que modifica las componentes frecuenciales de una señal analógica en función de su frecuencia. Para reducir el ruido de la señal, se necesita un filtro analógico que deje pasar únicamente bajas frecuencias.
3.2 Medidas con Arduino 15 La función de transferencia del filtro es: H(jw) = −R13/R2 R13C4jω+1(3.2) Midiendo la capacidad del condensador, se obtienen 47 nanofaradios. Por lo que a 1/R 13 C 4 se calcula la frecuencia de corte, con un valor de 42 Hz aproximadamente. Figura 3.4 Etapa de filtrado. 3.1.4 Etapa de amplificación En el caso de la versión del circuito, el potenciómetro mostrado en la imagen ha sido reemplazado por una resistencia de 20 kΩ. Con esta amplitud, junto a la ganancia en el amplificador de instrumentación, la señal alcanza un rango que la entrada analógica de Arduino puede medir, es decir, entre 0 y 5 voltios. Si se multiplican ambas ganancias, se obtiene que la ganancia total del sensor adquiere un valor de 5000 aproximadamente. Figura 3.5 Etapa amplificadora. 3.2 Medidas con Arduino Para medir el sensor, se ha utilizado la entrada analógica de Arduino, la cual tiene una tasa máxima de 10000 medidas por segundo. Es por ello que, para la comunicación con el ordenador, se ha
16 Capítulo 3. Sensor EMG de Bajo coste decidido usar comunicación serie a 9600 baudios, perdiendo pocas medidas, pero sin duplicar la cantidad de datos transmitidos. Figura 3.6 Sensor EMG. La distribución general de los electrodos será uno en una zona no muscular, como podría ser el codo, para tomar referencia de potencial, y dos sensores en el músculo a medir, uno en la mitad de este y otro al final del músculo siguiendo la dirección longitudinal de este. 3.2.1 Colocación de sensores Las medidas se obtendrán principalmente de los músculos flexor común superior e inferior del antebrazo, aunque al ser sensores sEMG, el segundo será de difícil acceso. Además, para la medida del pulgar, se usará el músculo abductor largo del pulgar. Aunque solo se disponga de un sensor, se realizarán medidas para cada dedo, seleccionando las zonas apropiadas de estos músculos para tener la mayor amplitud posible con este sensor en la señal. El electrodo de color rojo ha de situarse sobre el músculo a medir, mientras que el electrodo verde tiene como propósito mejorar la medida, y el amarillo tomar una referencia. Realmente, solo dos serían necesarios, pero la precisión al añadir un segundo electrodo de medida aumenta con creces. Los electrodos también pueden ser situados en diferentes músculos, llegando a tener señales de mayor amplitud en músculos de mayor tamaño. Realmente, el músculo encargado de la flexión de los dedos es común para estos, siendo complicado saber cuándo se flexiona uno u otro. Aun así, pese a ser un único músculo, hay zonas de este que se contraen más o menos en función del dedo deseado a contraer o extender, y diferentes terminaciones de este músculo para cada tendón [17]. Por ello, se colocan aproximadamente los electrodos sobre estas zonas en función de cada dedo. El dedo índice y el dedo meñique corresponden a la zona interior de este músculo, por lo que son considerablemente más difíciles de leer. Para el pulgar, como el abductor está en la palma de la mano, ha de medirse el abductor largo, un músculo pequeño y de difícil acceso que se extiende por el radio.
3.2 Medidas con Arduino 17 (a) pulgar. (b) índice. (c) corazón. (d) anular. (e) meñique. Figura 3.7 Posicionamiento de sensores. Hay numerosos estudios sobre la colocación de los electrodos para obtener diferentes resultados, pero no es el tema central de este trabajo. En este caso se ha optado por seguir la colocación de los electrodos, reduciendo el número a 5 posiciones, basándose en el artículo [ 18 ] para la situación de los electrodos de medida, y utilizando el codo como referencia. 3.2.2 Gráficas de medidas Las señales EMG que se mostrarán a continuación son el resultado de la medida ya procesada por el sensor, es decir, amplificadas varios órdenes de magnitud, filtradas y rectificadas. Sin embargo, para tener mayor claridad de estas o trabajar fácilmente, podemos aplicar filtros más estrictos en frecuencia. El movimiento realizado consiste en contraer y relajar suavemente el bíceps, con bastante intensidad en la contracción. Observando la gráfica 3.8, podría establecerse como caso general que, a partir de un valor de 100 en la entrada analógica filtrada, el músculo estaría contraído, o que, si se alcanzasen picos de 300 en la señal sin filtrar, habría contracción igualmente. Para las pruebas se ha contado con la ayuda de dos sujetos para realizar medidas EMG en sus antebrazos. De este modo se puede apreciar la diferencia de resistencia eléctrica de cada individuo, que depende de muchos factores, como las diferencias entre las características de los músculos (grosor, longitud) y antebrazos [19].
18 Capítulo 3. Sensor EMG de Bajo coste Figura 3.8 Gráfica medida EMG bíceps. Filtro a 1 Hz en rojo. En todas las señales de cada dedo se ha seguido el patrón de contracción durante un pequeño periodo de tiempo, contracción algo más duradera y repeticiones de contracciones pequeñas. Sujeto 1 Figura 3.9 puño contraído y relajado en intervalos largos. Tal y como puede observarse en la figura 3.10, ante picos de fuerza se producen picos de intensidad, mucho más destacados en intervalos cortos. Esto implica que ante medidas de señales
3.2 Medidas con Arduino 19 Figura 3.10 puño contraído y relajado en intervalos muy cortos. de contracciones mantenidas no se actuará fielmente según la intensidad del pulso, mientras que al reconocer pequeños impulsos, podría crearse un código de contracciones para mover cada dedo con un solo sensor. En el caso de contraer dedos, tal y como se ha mencionado, la señal del pulgar y del índice son considerablemente peores, pues tienen peor acceso que el resto. Esto se aprecia debidamente al comparar las figuras 3.13a y 3.13b con el resto. Sujeto 2 Figura 3.11 puño contraído y relajado en intervalos largos.
20 Capítulo 3. Sensor EMG de Bajo coste Figura 3.12 puño contraído y relajado en intervalos muy cortos. La calidad de la señal se verá siempre alterada por diversos factores, entre ellos, el ruido introducido por los componentes electrónicos del sensor y electrodos, el ruido electromagnético ambiental de las fuentes de corriente a 60 Hz o la adquisición de datos de otros músculos no deseados. Además, los OPAM del sensor introducen una tensión de offset dependiente de la temperatura que se amplificará en las etapas del sensor [19]. Comparando las gráficas de ambos sujetos, se observa que no comparten el mismo "offset" al relajar los músculos, y que la amplitud máxima de la señal EMG de cada uno varía con creces. Es por esto que es estrictamente necesario hacer un estudio electromiográfico a un paciente para poder establecer límites para determinar si hay intención de movimiento o no, o diseñar un método que automatice este procedimiento. Por ejemplo, en el caso del sujeto 1, dado que, como se aprecia en 3.9, al relajar la mano se mide en la entrada analógica de Arduino unos 0.5 V (100) mientras que, al contraerla se aprecian picos que saturan en 5 V (1024). Es por ello que, se necesitaría establecer un valor para discriminar entre intención de cerrar el puño o no por encima de los 0.5 V. Apreciando la figura 3.9, un valor lógico resultaría 1 V (200). Sin embargo, observando 3.11, este valor podría mantenerse en 0.5 V (100), pues apenas llega a 0.2 V el valor que mide el sensor cuando se relajan de los músculos del antebrazo. En el apéndice A, concretamente en el código A.1, se muestra el código utilizado para la adquisición de medidas, que, junto con putty para leer el puerto serie y guardar los logs de este en un archivo .txt, se representa en matlab con el código A.3. Para el filtro, por la necesidad de que la caída de la ganancia tras la frecuencia de corte sea rápida, se requiere un orden relativamente alto. En este apartado se han utilizado sensores de bajo coste y por ende bajas prestaciones, sin embargo, para comprobar su validez se compararán con unos sensores de gran precisión expuestos en el siguiente capítulo.
3.2 Medidas con Arduino 21 (a) pulgar. (b) índice. (c) corazón. (d) anular. (e) meñique. Figura 3.13 Gráficas de cada dedo del sujeto 1.
22 Capítulo 3. Sensor EMG de Bajo coste (a) pulgar. (b) índice. (c) corazón. (d) anular. (e) meñique. Figura 3.14 Gráficas de cada dedo del sujeto 2.
4 Sensor EMG Trigno Con objetivo de apreciar el verdadero alcance del sensor EMG utilizado en la prótesis, se realiza la comparativa al sensor TRIGNO ™ Wireless Sensor. Este sensor pertenece a la compañía DELSYS ® . La gama de sensores EMG que ofrece esta compañía es amplia, variando desde sensores individuales cableados hasta sistemas de sensores inalámbricos, como el que se dispone en el laboratorio de ingeniería mecánica y que se ha usado en este proyecto. La comparativa de ambos sensores resulta interesante para observar la calidad de la señal medida mediante un sensor de 20 € - 30 € frente a un sistema de 20000 € . Claramente, ambos tienen diferente alcance, los sensores de Delsys cuentan con una precisión mucho mayor, y están acompañados de un software diseñado por ellos cuyas funciones sobrepasan este proyecto, dándoseles uso en aplicaciones médicas. La versión que se encuentra en el laboratorio incluye 16 sensores EMG que a su vez contienen, cada uno, un acelerómetro de 3 ejes, conectados a una antena de la base. Sin embargo, las nuevas versiones que han comercializado contienen además conexiones wifi y bluetooth para cada sensor, de manera que pueden monitorizarse desde cualquier dispositivo. Para este capítulo se utilizará el software de Delsys para tratar las señales EMG obtenidas por los sensores, llegando a utilizarse cinco sensores simultáneamente. 4.1 Software de Delsys Para este apartado se han utilizado los siguientes programas. 4.1.1 Trigno Analog Output Trigno Analog Output ayuda al usuario a emparejar los sensores al PC, dando información sobre el estado de estos tales como la batería o la calidad de la señal que llega. Para conectar un sensor hay que encenderlo (mantener pulsado su único botón) y una vez encendido, acceder al modo emparejamiento (mantener pulsado hasta que parpadee su luz verde). 4.1.2 EMGworks Acquisition EMGworks es el programa facilitado por la compañía para adquirir y visualizar la señal leída por los sensores. Permite crear perfiles con diferentes configuraciones de sensores, usuarios, y establecer un orden de tareas para trabajar sobre los sensores, siendo el total del proceso monitoreado tanto para la realización de las tareas como para la colocación de los sensores. Las tareas que se han trabajado para este proyecto son: •Plot and Store: Permite visualizar la señal sin procesar y almacenarla si se desea. • MVC (EMG RMS): Realiza y muestra el valor eficaz de la onda que mide mientras la adquiere. 23
30 Capítulo 5. Clasificación movimientos Es un valor de mucho interés en casos de una sola característica, pues permite establecer un valor discriminante con facilidad 5.2. Los resultados del valor RMS como característica suelen rondar el 88% [24] o incluso más cuando se combina junto a otras características. Además, como se puede apreciar en 5.3, pese a tener menos amplitud que la onda original, no dista de la forma rectificada que tendría la onda. Figura 5.2 RMS de señal EMG . Gráfica de EMGworks Analysis. Figura 5.3 Señal EMG sin procesar con RMS sobrepuesto. Gráfica de EMGworks Analysis. 5.1.2 Valor medio absoluto (MAV) El valor medio absoluto de una onda se define por sí mismo, consiste en calcular la media integral de tamaño N de los valores absolutos de la onda. MAV =1 N N−1 ∑ n=1 ωn|x|(5.2) Además, se suelen añadir a este cálculo ventanas ωn como función a trozos para ponderar más los valores centrales al punto de la ventana. Tal y como se aprecia en 5.4, el resultado tiene forma muy similar al cálculo de RMS de la onda, sin embargo se aprecia menor amplitud en este caso. De hecho, según [ 24 ], los resultados que se obtienen al aplicar el MAV son muy similares, pero levemente menores, a los resultados de tratar al RMS como característica única. Esto es debido a la pérdida de amplitud de una señal con respecto a la otra. Un cálculo muy común es el iEMG, la integral de los valores absolutos de la onda, pero no se entra en detalle por ser muy similar al MAV.
5.1 Características típicas 31 Figura 5.4 MAV de Señal EMG. Gráfica de EMGworks Analysis. 5.1.3 Frecuencia media y mediana (MEF, MDF) y densidad espectral (PSD) En el dominio frecuencial pueden obtenerse características tales como la frecuencia media 5.5a 5.5b o mediana 5.5c 5.5d o la densidad espectral. Las dos primeras permiten conocer los valores medios y medianos de la onda para intervalos de tiempo, de tal manera que reúne la media o mediana de un número N de datos y lo mantiene durante ese periodo. (a) MEF de Señal EMG ventana 0.1s. (b) MEF de Señal EMG ventana 1 s. (c) MDF de Señal EMG ventana de 0.1s. (d) MDF de Señal EMG ventana 1 s. Figura 5.5 Media y mediana de frecuencia. Gráficas de EMGworks Analysis. La densidad espectral de una onda muestra la distribución de los valores de esta en frecuencia. Es similar a un histograma de frecuecias, pero sin tener en cuenta la frecuencia como tal sino la potencia de la onda. En 5.6 se observa cómo una señal EMG sin filtrar tiene su máximo de componentes frecuenciales en torno a los 100 Hz, con gran parte de su espectro en aún mayor frecuencia. Cuando el sensor del capítulo 3 filtra a 50 Hz, gran parte del espectro se ve filtrado, por lo que obtenemos una muy pequeña proporción de este. La PSD sin embargo solo ofrece un 75% de fiabilidad, muy inferior a los resultados de MAV y RMS.
32 Capítulo 5. Clasificación movimientos Figura 5.6 PSD de Señal EMG. Gráfica de EMGworks Analysis. 5.2 Driscriminante lineal Puesto que para discriminar entre tipos de movimientos mediante amplitud sólo habría confusión entre meñique y anular y entre índice y corazón, realizar dos discriminantes lineales de dos dimensiones (dos características) debe ser suficiente. Los discriminantes lineales ofrecen gran sencillez en estos casos, pese a ser poco generales. Consisten en una recta que separe clases según características, expresada como función discriminante lineal. Como característica para discriminar, se elige el valor MAV de la señal. Dicho valor se puede calcular en matlab según el código 5.1. Código 5.1 Código de matlab para calcular MAV. L=200; %L numero de muestras para cada calculo de MAV for j = 1:size(file(:,2))-L sum = 0; for i = 1:L sum = sum + abs(file(i+j-1,2)); end MAV(j+L/2) = sum/L; end Para este apartado se han recolocado los sensores de manera que se aislen pulgar, índice y corazón, y anular y meñique. 5.2.1 Pulgar El caso del pulgar es bastante simple, pues al no tener apenas ruido por otros músculos, basta con clasificar si hay intención de movimiento en este o no, resultando en dos clases (contracción pulgar o extensión pulgar) según una sola característica (MAV pulgar). Para ello se han extraído muestras de varias pruebas, creando un conjunto de datos con contracciones y relajaciones. Tras analizar 5.8, claramente se puede establecer 0.2 ·10−4 como valor límite entre las dos clases. Para este conjunto de 170 muestras, la discriminación es perfecta y simple. Sin embargo, si se aumenta el número de muestras analizadas hasta diez veces más, se obtiene que las clases no están tan separadas, y que ciertas muestras de cada clase se mezclan en la otra 5.9.
5.2 Driscriminante lineal 33 (a) Pulgar. (b) Índice y corazón. (c) Anular y meñique. Figura 5.7 Colocación de los sensores. Figura 5.8 MAV de muestras de señales EMG del pulgar (170 muestras). Figura 5.9 MAV de muestras de señales EMG del pulgar (1700 muestras). En concreto, se observan 5 muestras mal clasificadas 5.10, pero realmente son 6 muestras erróneas según el algoritmo desarrollado 5.2, lo que equivale (a falta de probar más conjuntos de muestras) a un 0.35% de muestras mal clasificadas, o lo que es lo mismo, un 99.65% de fiabilidad. Figura 5.10 MAV de muestras de señales EMG del pulgar (1700 muestras) con zoom. Código 5.2 Código de matlab para clasificaciones erróneas. mal_clasificadas = 0; valor_threshold = 0.00002; for m = 2:length(conjunto_datos) if(conjunto_datos(m) < valor_threshold) mal_clasificadas = mal_clasificadas+1; end end
34 Capítulo 5. Clasificación movimientos 5.2.2 Índice y corazón Para el caso de dos dedos o, equivalentemente, dos características se requieren 4 clases, correspondiendo cada una a cada estado de cada dedo. Este caso es más complicado que la discriminación del pulgar por tratarse de señales que se contaminan entre ellas. Las funciones de decisión en casos bidimensionales consisten en rectas que separan el plano formado por las dos características a tratar. Para este caso, esas características son el MAV del sensor asociado al dedo índice y el MAV del sensor asociado al dedo corazón. Es por ello que la dificultad reside en encontrar rectas que separen adecuadamente los elementos en las diferentes clases. Se diferencian cuatro clases: •C0: ambos dedos relajados. •C1: contracción del dedo índice. •C2: contracción del dedo corazón. •C3: contracción de ambos dedos. Para un primer estudio, se seleccionan 341 muestras de clases conocidas, y se representan en el plano según estas características 5.11. Figura 5.11 Representación de medidas según el MAV de ambas. Aunque las clases no estén perfectamente separadas, se puede intuir la forma que tendrían las rectas que separasen a estas. El caso de separar las tres diferentes contracciones de la relajación es sencillo, si se traza una recta que vaya desde [0.3, 0] a [0, 0.3] 10−4 pueden diferenciarse perfectamente. Para ello se necesita transformar dicha recta, agrupando las dos características en un vector, para evaluar dichas funciones de decisión rápidamente. Es un proceso que se hará para cada punto. La recta se transforma tal que: x2=mx1+n⇒x2=−x1+0.00003 ⇒1 1x1 x2−0,00003 =0(5.3) Con ello, se definen:
5.2 Driscriminante lineal 35 nT=−1 1(5.4) ρ=−0.00003 (5.5) w=n −ρ(5.6) f d1(x) = wTxAmpliado (5.7) Siendo xAmpliado =x1x210y w el vector de pesos [27] [28]. Si se sustituye cada muestra que se obtenga en f d1(x) se obtendrán valores que, de ser positivos, corresponderán a esa clase según el clasificador diseñado. Por ejemplo, si se sustituye el punto (0,0) obtendríamos que la función de decisión devuelve 0.00003, por lo que dicho punto correspondería a la clase 0, es decir, a la extensión o relajación de ambos dedos. Con el mismo procedimiento, se obtienen las siguientes vectores de pesos para las clases 1, 2 y 3. w2= 1 −2 0 w3= 9 5 −1 0 (5.8) Representando dichas rectas, el plano queda distribuído según 5.12. Figura 5.12 Funciones de decisión. Según el algoritmo programado A.4, de las 172 muestras de contracciones, tan solo 13 están mal clasificadas (figura 5.13), lo que equivale a un 92.44% de fiabilidad del clasificador (sin contar éxitos al clasificar la clase 0, que es un 100% de éxitos), un resultado eficiente que cumple con lo observado en estudios como [24] a falta de probar en más muestras. Para hacer un análisis más exhaustivo, el número de muestras se amplia a 1700 aproximadamente. En este caso, incluso algunos de los elementos de la clase cero se pueden encontrar fuera de esta.
36 Capítulo 5. Clasificación movimientos Figura 5.13 Muestras clasificadas por el algoritmo, con marcas para muestras mal clasificadas. Pese a ello, la fiabilidad solo baja hasta el 92.25%, lo que sigue siendo un resultado muy eficiente. Tal y como se puede observar en 5.14, la mayoría de fallos se concentran en la frontera entre clases, por lo que mejorando la función de decisión o realizando la discriminación con métodos probabilísticos podría mejorarse la clasificación de estos. Figura 5.14 Muestras (1700) clasificadas por el algoritmo, con marcas para muestras mal clasificadas.
5.2 Driscriminante lineal 37 5.2.3 Anular y meñique Siguiendo con el mismo procedimiento que el subapartado anterior, se procede a diferenciar entre ambos dedos, pues el ruido que generan uno a otro impide tratarlos por separados. Tras analizar otras 170 muestras, se determinan las funciones de decisión según los vectores de pesos: w1= 0.2 −1 0.00002 (5.9) w2= 0.3 1 0.000008 (5.10) w3= 2.9 −1 0.0000544 (5.11) Con ello se logra un 90.11% de fiabilidad, algo más bajo que en el caso anterior, pero igualmente del orden de los estudios de los que se parte. Si se aumentan las muestras a 1700 (realmente serían 3400 aproximadamente, pero obviamos la clase 0 por ser mucho más fiable que el resto), se observa que el porcentaje crece al 92.84%, lo que mejora aún el resultado anterior. Figura 5.15 Funciones de decisión.
38 Capítulo 5. Clasificación movimientos Figura 5.16 Muestras clasificadas por el algoritmo, con marcas para muestras mal clasificadas. Figura 5.17 Muestras (1700) clasificadas por el algoritmo, con marcas para muestras mal clasificadas.
6 Diseño del antebrazo El modelo de prótesis del capítulo 2 incluye una ranura en la palma de la mano para ensamblar otra pieza que se una a esta. Es por ello, y por la necesidad de crear una pieza que mantenga los servomotores que traccionarán los hilos, junto a las baterías y el microprocesador y el sensor EMG, que se realiza el diseño de un "antebrazo" que albergue estos elementos. El diseño de este antebrazo contará con tres piezas, un armazón que mantenga cada motor alineado con la salida del hilo del dedo corresponciente, a la vez que se introduce en la ranura de la palma de la mano, y una carcasa para el antebrazo dividida en dos partes, donde se incluirá la pieza anterior, de manera que una de estas guarde las baterías, el microprocesador y el sensor EMG y la otra mantenga el chasis de los servomotores libre de colisiones con el resto de elementos. Para el diseño de las piezas se ha utilizado SolidWorks ® , un software CAD (diseño asistido por computadora) para diseños mecánicos que croquiza, acota y modela [ 29 ]. Se ha decidido usar SolidWorks por ser un CAD de gran relevancia en la industria actual, aunque podría haberse sustituido perfectamente por CATIA, que es de uso más extendido en la escuela. 6.1 Armazón para servomotores Figura 6.1 Captura de SolidWorks. Croquización de la pieza a introducir en la mano. 39
46 Capítulo 7. Modos de funcionamiento de la prótesis if (indice >= numero_medidas) { indice = 0; } // por errores de calculo a veces llega a negativo if (total < 0) { total = 0; } // Calculo del MAV. Como la medida analogica de arduino es absoluta, // no ha de hacerse otra vez MAV = total / numero_medidas; En el código, medidas[] es un vector de longitud determinada donde se va almacenando cada muestra que se lee en arduino. Estas muestras se van acumulando en una variable total, restándole el valor almacenado previamente en el índice de medidas[] correspondiente y incluyendo en este el nuevo valor medido, recorriendo constante el vector. Para cada iteración, se calcula el MAV simplemente dividiendo la variable total entre el numero de medidas, que es el tamaño del vector medidas[]. Para programar en arduino con los 6 sensores, se ha utilizado la librería <Servo.h> propia de este. Dicha librería permite utilizar hasta 12 servos modificando las salidas digitales para poder utilizarlas como PWM. Tras la declaración e inicialización de todos los servomotores y variables, se controlan a todo o nada en función de si se ha superado el umbral en un determinado intervalo de tiempo. Si se observan las imágenes del capítulo 3 donde se contraía el puño en ambos sujetos con detalle, se puede observar que las muestras que tienen un valor alto son picos relativos cuyas muestras inmediatamente circundantes tienen un valor muchísimo mas bajo, y no se dan dichos picos en intervalos fijos. Una solución propuesta para ello resulta realizar un bucle do while en el cual se entre si se supera un determinado valor, y del cual no se pueda salir si en un intervalo timeout se ha vuelto a alcanzar este valor. Dicho código es 7.2. Código 7.2 Código de arduino para modo de funcionamiento inicial. unsigned long timeout = 300; //300 ms va bien unsigned long time_act = millis(); //posicion relajada por defecto servo_1.write(1); servo_2.write(1); servo_3.write(1); servo_4.write(179); servo_5.write(179); servo_6.write(179); if (valor_sensor > 200){ //si supera valor en la entrada analogica do { servo_1.write(179); //todo o nada, si se supera min, se contrae completamente servo_2.write(179); servo_3.write(179); servo_4.write(1); servo_5.write(89);
7.2 Movimiento por pulsos 47 servo_6.write(89); valor_sensor = analogRead(sensor_1); if (valor_sensor > 200){ //si se detecta un solo pico por encima del valor min, se resetea timeout time_act = millis(); } } while (millis() - time_act < timeout); //mientras no se supere el timeout } La prueba de qué intervalo utilizar y qué valor tomar como umbral ha de realizarse para cada sujeto y, en este caso, se realizó gracias al monitor serie de arduino. En este caso se puede apreciar que el valor umbral se ha establecido en 200 y que el timeout en 300 milisegundos. El valor de timeout podría ser menor, permitiendo mayor velocidad para extender los dedos, pero no se considera necesaria la velocidad en ese aspecto y podría ayudar a no extender la mano involuntariamente. También se puede observar que, dada la distribución de los servomotores en el antebrazo, las posiciones iniciales y finales difieren entre estos, además de que los servomotores utilizados no son exactamente el mismo modelo en todos los dedos y que el pulgar consta de dos servomotores que no pueden alcanzar los 180 grados por el pequeño recorrido que realiza el pulgar. 7.2 Movimiento por pulsos Como opción para el movimiento de dedos individualmente, se incluye un método que mueva un determinado dedo según el número de pulsos que se dé con el músculo flexor del antebrazo en un determinado intervalo de tiempo. Para facilitar los movimientos, se incluye la opción de contraer y extender todos los dedos. Una clara ventaja de esto, además de poder mover cada dedo, es la facilidad para fijar una postura sin esfuerzo para mantenerla, dado que en el caso anterior, para cerrar la mano había que mantener contraído el músculo flexor del antebrazo. Para ello se va a tratar cada dedo con dos estados (extendido y contraído) de manera que los pulsos correspondientes a cada dedo cambien este, y con un solo pulso se pueda cambiar el estado de todos los dedos a la vez. El número de pulsos correspondiente a cada acción se muestra en la tabla 7.1. Tabla 7.1 Número de pulsos por acción. dedo nºde pulsos pulgar 2 índice 3 corazón 4 anular 5 menique 6 Todos 1 El código en este modo consiste en el cálculo del MAV en cada iteración del loop, tal y como se expuso en el código 7.1, seguido del código 7.3 cuando detecte que se ha superado el límite establecido. Una vez detectado, se seguirán tomando medidas y calculándose el MAV durante un determinado timeout. Dicho timeout se reseteea si vuelve a superarse el límite una vez se haya
48 Capítulo 7. Modos de funcionamiento de la prótesis dejado de superar. Siempre que se detecte un nuevo pulso, la variable posicion se incrementa en uno, llevando así la cuenta de pulsos que se dan para poder actuar en funcion de estos. Código 7.3 Código de arduino para detectar pulsos. if (MAV > limite) { //si supera valor en la entrada analogica (200 es aceptable) do { if (posicion == 0) { posicion = 1; } total = total - medidas[indice]; medidas[indice] = analogRead(sensor); total = total + medidas[indice]; indice = indice + 1; if (indice >= numero_medidas) { indice = 0; } if (total < 0) { total = 0; } MAV = total / numero_medidas; if (MAV > limite) { if ( MAV1<= limite) { //si se detecta un solo pico por encima del valor min, se resetea timeout time_act = millis(); posicion = posicion + 1; delay(500); } } MAV1 = MAV; //actualiza MAV_ant } while (millis() - time_act < timeout); //mientras no se supere el timeout } Tras calcular posicion en el bucle anterior, se pasa a un switch case que dependa de posición, donde en función del valor de esta, se cambia el estado del dedo correspondiente o, en caso de valer 1, todos los dedos. Un código del dedo pulgar como ejemplo se muestra en 7.4. Código 7.4 Código de arduino para cambiar estados. case 2: // 2 pulsos: cambia estado pulgar if (dedo_pulgar == 0) { dedo_pulgar = 1; } else { dedo_pulgar = 0; } posicion = 0; break;
7.3 Autocalibración 49 Tras cambiar el estado del dedo (1 contraído, 0 relajado) se da valor nulo a posicion para no cambiar más estados hasta que el bucle para detectar pulsos cambie dicho valor. Una vez terminado el switch case se procede con una serie de bucles if a actuar sobre los servomotores en función de los estados de cada dedo. Se muestra en el ejemplo 7.5 el caso del pulgar, pues las posiciones iniciales y finales ya han sido mostradas en 7.2. Código 7.5 Código de arduino para actuar sobre servomotores. if (dedo_pulgar == 1) { // contrae servo_6.write(89); servo_5.write(89); } else { // relaja servo_6.write(179); servo_5.write(179); } 7.3 Autocalibración Tal y como se ha expresado en los dos anteriores modos, la determinación del umbral para contracción de los dedos se realiza para cada cliente, pero con un pequeño cálculo basado en el MAV (o en su defecto podría ser la amplitud o picos) puede determinarse un valor válido para determinar si hay intención de movimiento o no. El código consistiría en comprobar en bucle durante un determinado tiempo (tiempo calibrar en el código) desde que comience el bucle loop, para que solo se dé durante la primera ejecución del bucle. En caso de utilizar el MAV como característica, ha de calcularse este en cada iteración del bucle do while. Tras ello, se comprueba si se ha superado el valor máximo hasta esta iteración y, en caso de superarse, se sustituye por el nuevo valor. Código 7.6 Código de arduino para calibrar con MAV. if (millis() - time_init < tiempo_calibrar) { do { //Calculo de MAV total = total - medidas[indice]; medidas[indice] = analogRead(sensor); total = total + medidas[indice]; indice = indice + 1; if (indice >= numero_medidas) { indice = 0; } MAV = total / numero_medidas; //actualiza maximo si se da if (MAV > MAV_max_calib) { MAV_max_calib = MAV; delay(1); }
50 Capítulo 7. Modos de funcionamiento de la prótesis //establece el limite en el maximo detectado limite = MAV_max_calib; delay(1); } while (millis() - time_init < tiempo_calibrar); } El tiempo de calibración se ha establecido en 5 segundos, y durante este tiempo se almacenan valores máximos, por lo que sería necesario ejercer fuerza moderada en el brazo para establecer un límite consistente, pero no imposible de alcanzar. Para el caso de la autocalibración en el primer modo mostrado, solo basta con realizar este mismo bucle sin el cálculo del MAV. Código 7.7 Código de arduino para calibrar con MAV. if (millis() - time_init < tiempo_calibrar) { do { valor_sensor = analogRead(sensor_1); //actualiza maximo si se da if (valor_sensor > valor_sensor_calib) { valor_sensor_calib = valor_sensor; delay(1); } //establece el limite en el maximo detectado limite = valor_sensor_calib; Serial.println(limite); delay(1); } while (millis() - time_init < tiempo_calibrar); }
8 Coste de la prótesis Pese al análisis y clasificación de los sensores de alta presición de Trigno, el objetivo de este proyecto es realizar una prótesis minimizando el coste en medida de lo posible. Por ello, en el producto final no se incluyen estos, sino un sensor EMG que podría producirse en serie por minimizar aún más los costes. Tabla 8.1 costes de cada pieza de la prótesis. gramos minutos coste plastico(€) coste energia(€) coste total (€) pulgar 1 9 128 0,27 0,06600533 0,33600533 pulgar 2 4 76 0,12 0,03919067 0,15919067 indice 1 8 115 0,24 0,05930167 0,29930167 indice 2 4 58 0,12 0,02990867 0,14990867 indice 3 2 45 0,06 0,023205 0,083205 corazon 1 7 108 0,21 0,055692 0,265692 corazon 2 4 57 0,12 0,029393 0,149393 corazon 3 2 39 0,06 0,020111 0,080111 anular 1 6 86 0,18 0,04434733 0,22434733 anular 2 3 51 0,09 0,026299 0,116299 anular 3 2 38 0,06 0,01959533 0,07959533 meñique 1 4 66 0,12 0,034034 0,154034 meñique 2 2 34 0,06 0,01753267 0,07753267 meñique 3 1 29 0,03 0,01495433 0,04495433 mano 1 11 164 0,385 0,08456933 0,46956933 mano 2 93 725 2,79 0,37385833 3,16385833 juntas 16 532 0,8 0,27433467 1,07433467 yema 1 3 159 0,09 0,081991 0,171991 yema 2 1 56 0,03 0,02887733 0,05887733 yema 3 1 59 0,03 0,03042433 0,06042433 yema 4 1 60 0,03 0,03094 0,06094 yema 5 1 34 0,03 0,01753267 0,04753267 almohadillas 9 256 0,27 0,13201067 0,40201067 armazón 36 254 1,08 0,13097933 1,21097933 antebrazo 1 85 377 2,55 0,19440633 2,74440633 antebrazo 2 101 468 3,03 0,241332 3,271332 Para la impresión de la prótesis se han utilizado, en su versión final, únicamente PLA y filaflex, teniendo un precio por kilogramo, respectivamente, de 31.93 € y 52 € . El precio de estos materiales 51
52 Capítulo 8. Coste de la prótesis puede variar según marcas, este es el precio de los materiales usados en la prótesis del proyecto. Sin embargo, este precio podría reducirse casi a la mitad si se utilizasen diferentes marcas. Para cada elemento de la prótesis se ha calculado su coste en material, simplemente calculando su peso por el coste de material, y su coste eléctrico, mediante el consumo medio de las impresoras (221 W). Para los elementos del sensor se ha buscado el precio de cada componente por páginas como mouser, texas instruments o RS components, y el precio adoptado ha sido el de bobinas de 1000 elementos, por lo que el precio va orientado a la producción de un gran número de dispositivos. Para resistencias y condensadores, como sus valores son diferentes, su precio no es exactamente el mismo, sin embargo, apenas difieren, por lo que se ha optado por tomar un precio medio para este caso. Tabla 8.2 Costes de los componentes del sensor. unidades precio unitario (€) total (€) AD 1 2,75 2,75 OPAM (encapsulado de 4) 1 0,09 0,09 resistencias 10 0,02 0,2 conector mini-jack 1 1,44 1,44 condensadores 5 0,05 0,25 diodo 2 0,05 0,1 total 4,83 € Sin embargo a este precio de componentes habría que añadir el coste de los electrodos, los cables de estos, la PCB y el ensamblaje de la PCB. Aun siendo un coste diez euros menor al sensor completo, como en este trabajo se ha utilizado el sensor ya ensamblado, se tendrá en cuenta para el coste final sólo el coste del sensor ya ensamblado. Tabla 8.3 Coste total. ATMEGA328 2 € batería 5V recargable 10,8 € sensor EMG 14,49 € 2 baterías 9V recargables 3,13 € prótesis completa 14,955826 € 6 servomotores 5,16 € total 49,605826 € El cálculo de los costes de la prótesis se ha realizado únicamente para los costes materiales de esta, sin embargo, el coste de la prótesis para una empresa tendría muchísimos más factores y un plan avanzado de costes que, al no ser objetivo del trabajo, no se realizará.
9 Conclusiones y futuras líneas de trabajo 9.1 Conclusiones La prótesis IMMA es una gran aproximación a una mano humana, con más restricciones cinemáticas que esta, pero sin perder apenas funcionalidad. Sin embargo, solo ofrece la posibilidad de controlarla mediante seis actuadores mediante hilos, perdiendo el control sobre cada articulación. Esto es en parte beneficioso para nuestro caso, pues no es tan interesante la posibilidad de mover cada falange por separado sino poder actuar sobre la mano como tal mediante pocas señales de control. Dicho de otro modo, al disponer de un solo sensor EMG, ampliable a 5, no tiene especial interés la posibilidad de actuar sobre cada uno de los 15 grados de libertad que dispone la prótesis IMMA. El sensor EMG implementado en la versión actual del trabajo es un sensor de bajo coste y de poca precisión, como ya se detalló en el capítulo 3. Esto implica que no se podría realizar un control proporcional a la entrada, proporcional a la medida de este sensor, pues pese a filtrarse, se aprecia que al mantener la contracción, la señal oscila, lo que impediría mantener la prótesis fija en una posición determinada. Si se disponiese de mayor presupuesto para la prótesis, se podría estudiar el uso de sensores trigno conectados mediante bluetooth a un microcontrolador, pudiendo no depender de cables y facilitando mucho el control gracias a la gran precisión que estos ofrecen. El clasificador lineal implementado parte de unas medidas excelentes, por lo que, de usarse para clasificar mediante cinco sensores EMG de baja precisión, podría degradar mucho su fiabilidad. O bien habría que hacer un segundo estudio para un clasificador con cinco sensores EMG de baja precisión, siguiendo las mismas pautas que se han seguido para realizar el clasificador del apartado 5, o bien afinar el clasificador actual para las medidas que estos sensores ofrecerían. En cuanto al control que se puede realizar actualmente, ha de puntualizarse que al ser todo-nada y en bucle abierto, al agarrar objetos muy grandes podrían quemarse los motores, pues al darle un pulso PWM para rotarlo completamente, si está obstruído el dedo, el motor consumirá mayor corriente hasta que consiga rotar, bien restándole corriente al microcontrolador implicando el reinicio del sistema, o bien obteniendo mayor corriente que la máxima soportada, pudiendo derivar en la pérdida de dicho servomotor. Es por ello que las pruebas realizadas son únicamente en objetos de pequeño tamaño. 53
54 Capítulo 9. Conclusiones y futuras líneas de trabajo Además, precisamente por la misma razón, la prótesis no aplica mucha fuerza para agarrar objetos, pues a mayor presión, mas par realizan los motores, y si se supera el par máximo para estos, comenzará a consumir más potencia, solicitando más corriente a las baterías. Bajo pocas pruebas, la prótesis como tal resiste adecuadamente a diversos esfuerzos, siendo en primer lugar los tendones el primer elemento en ceder (por una leve elasticidad del material), seguido de los servomotores de bajo coste y bajas prestaciones. Los motores solo cederán en el caso explicado en el párrafo anterior, ya sea por reinicio del controlador o por fallo de estos. Con respecto a los modos de funcionamiento que ofrece la versión actual, el modo que funciona por impulsos es mucho más fiable que el otro debido a que los sensores reaccionan mejor a impulsos frente a mantener contracciones. Si agarrando un objeto, el sensor da un pico de señal menor al límite establecido, que puede darse por la oscilación de valores en el sensor, la mano se abriría una cantidad de tiempo establecida por timeout, cerrándose justo después pero habiendo soltado el objeto agarrado. De ser este el caso, la mejor solución es aumentar timeout hasta que se minimice la pérdida de picos, derivando en mayor retardo para abrir y cerrar la mano. Para el caso de funcionamiento mediante pulsos, el único problema posible sería la detección de pulsos no voluntarios, es decir, que levemente se supere el límite establecido inconscientemente, aumentando en uno los pulsos medidos, implicando el cambio de estado de un dedo no deseado, o, de solo detectar uno, la mano entera. Este problema no es tan usual como el anterior, pero sigue siendo igualmente un gran inconveniente no solucionado. 9.2 Futuras líneas de trabajo Todos los objetivos iniciales del trabajo se han cumplido, sin embargo, hay muchos aspectos del trabajo que pueden ser mejorados aprovechando que la prótesis ya está impresa. En primer lugar, la implementación de los sensores Trigno no se ha llevado a cabo, una gran modificación de este trabajo sería conseguir conectar los sensores Trigno al microcontrolador de la prótesis, pudiendo conectar varios e implementar el sistema de clasificación desarrollado en el trabajo, pese a no poder considerarse entonces una prótesis de bajo coste. Otra posible mejora sería diseñar un sensor EMG según los elementos del capítulo 3 de este trabajo, de manera que puedan diseñarse 5 sensores y lograr controlar cada dedo con cada sensor, adaptando el sistema de clasificación diseñado a estos nuevos sensores. Además, podrían realizarse ensayos mecánicos a la prótesis, imprimiendo varias de estas, para comprobar los límites que ofrece la prótesis como tal, incluyendo o no la electrónica que esta conlleva para comprobar los pares reales que ofrecen los motores o la fuerza máxima que puede aplicar cada dedo. Para poder controlar la prótesis en bucle cerrado, podrían implantarse sensores piezoeléctricos en las yemas de los dedos, entre las piezas de PLA y filaflex, de manera que se pudiese realimentar los esfuerzos en esta zona para ajustar la presión deseada en el agarre. Es estrictamente necesario para poder realizar operaciones con mayor precisión desarrollar este aspecto, o bien dotar a los sensores de muchisima más precisión y rapidez en el microcontrolador como para que el usuario sea capaz de poder aplicar la presión deseada en el agarre sin depender de dichos sensores piezoeléctricos.
9.2 Futuras líneas de trabajo 55 Una característica común de otros trabajos actuales similares a este supone el desarrollo de redes neuronales para construir un modelo que sirva como clasificador. No se ha realizado en este trabajo por la facilidad con la que se separaban las muestras de los sensores Trigno, pero de utilizarse varios sensores EMG básicos, muy probablemente sea necesaria esta característica por el ruido que estos implican.
62 Appendix A. Códigos if clase == 1 plot (x1, x2, ’r.’); end if clase == 2 plot (x1, x2, ’b.’); end if clase == 3 plot (x1, x2, ’g.’); end if(clase ~= clase_original) mal_clasificadas = mal_clasificadas+1; plot (x1, x2, ’y*’); end end mal_clasificadas figure(2); plot(MAVind_sampled(2:end),abs(ind_cor_sampled(2:end)),’r.’, ’MarkerSize ’,20);hold on; plot(abs(cor_ind_sampled(2:end)),MAVcor_sampled(2:end),’g.’, ’MarkerSize ’,20);hold on; plot(MAVambos_ind_sampled(2:end),MAVambos_cor_sampled(2:end),’b.’, ’ MarkerSize’,20);hold on; plot(MAVninguno_ind_sampled(2:end),MAVninguno_cor_sampled(2:end),’k.’, ’ MarkerSize’,20);hold on; legend(’índice’,’corazón’,’ambos’,’ninguno’); lim=axis; fplot(@(x)-x + 0.00003,’HandleVisibility’,’off’); fplot(@(x)0.5*x,’HandleVisibility’,’off’); fplot(@(x)2*x,’HandleVisibility’,’off’); axis(lim); grid; xlabel(’índice’); ylabel(’corazon’); Código A.5 Código de arduino para modo de agarre completo. #include <Servo.h> // Incluimos la biblioteca Servo // Definimos los servos que vamos a utilizar Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4; Servo servo_5; Servo servo_6;
63 int sensor_1 = A0; // Pin usado para conectar el sensor int valor_sensor; // Esta variable definirá la posición del servo // valor a partir del cual se actuará int limite; //valores para temporizadores unsigned long time_init; unsigned long tiempo_calibrar = 5000; int valor_sensor_calib = 0; void setup() { servo_1.attach(4); // Definimos el pines de señal para el servo servo_2.attach(5); servo_3.attach(6); servo_4.attach(7); servo_5.attach(8); servo_6.attach(9); Serial.begin(9600); time_init = millis(); // indica fin setup } void loop() { //calibracion: define valor limite if (millis() - time_init < tiempo_calibrar) { do { valor_sensor = analogRead(sensor_1); //actualiza maximo si se da if (valor_sensor > valor_sensor_calib) { valor_sensor_calib = valor_sensor; delay(1); } //establece el limite en el maximo detectado limite = valor_sensor_calib; Serial.println(limite); delay(1); } while (millis() - time_init < tiempo_calibrar); } valor_sensor = analogRead(sensor_1); // leemose valor de entrada analogica (valor entre 0 y 1023) unsigned long timeout = 300; //300 ms va bien unsigned long time_act = millis(); servo_1.write(1); //posicion relajada por defecto servo_2.write(1); servo_3.write(1); servo_4.write(179); servo_5.write(179); servo_6.write(179);
64 Appendix A. Códigos if (valor_sensor > limite) { //si supera valor en la entrada analogica (200 es aceptable) do { servo_1.write(179); //todo o nada, si se supera min, se contrae completamente servo_2.write(179); servo_3.write(179); servo_4.write(1); servo_5.write(89); servo_6.write(89); valor_sensor = analogRead(sensor_1); if (valor_sensor > limite) { //si se detecta un solo pico por encima del valor min, se resetea timeout time_act = millis(); } } while (millis() - time_act < timeout); //mientras no se supere el timeout } Serial.println(valor_sensor); } Código A.6 Código de arduino para modo por impulsos. #include <Servo.h> // Incluimos la biblioteca // numero de muestras en sumatorio de MAV const int numero_medidas = 50; Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4; Servo servo_5; Servo servo_6; int medidas[numero_medidas]; // medidas para MAV int indice = 0; // indice para sumatorio int total = 0; // max de sumatorio int MAV = 0; // MAV int MAV1; // MAV anterior int sensor = A0; // para elegir dedos int posicion = 0; // para estados de dedos int dedo_pulgar = 0; int dedo_indice = 0;
65 int dedo_corazon = 0; int dedo_anular = 0; int dedo_menique = 0; int MAV_max_calib = 0; int limite; unsigned long time_init; unsigned long tiempo_calibrar = 5000; unsigned long timeout = 1000; // 300 ms va bien unsigned long time_act; void setup() { Serial.begin(9600); servo_1.attach(4); servo_2.attach(5); servo_3.attach(6); servo_4.attach(7); servo_5.attach(8); servo_6.attach(9); // inicializar vector de medidas (sumatorio) a 0: for (int ind_cero = 0; ind_cero < numero_medidas; ind_cero++) { medidas[ind_cero] = 0; } analogRead(sensor); // estabiliza la adquisicion a los 5 segundos delay(5000); time_init = millis(); } void loop() { // calibracion if (millis() - time_init < tiempo_calibrar) { do { //Calculo de MAV total = total - medidas[indice]; medidas[indice] = analogRead(sensor); total = total + medidas[indice]; indice = indice + 1; if (indice >= numero_medidas) { indice = 0; } MAV = total / numero_medidas; //actualiza maximo si se da if (MAV > MAV_max_calib) { MAV_max_calib = MAV; delay(1);
66 Appendix A. Códigos } //establece el limite en el maximo detectado limite = MAV_max_calib; Serial.println(limite); delay(1); } while (millis() - time_init < tiempo_calibrar); } // Para realizar MAV continuo, se calculan con las ultimas x muestras, // por lo que en cada punto se resta la muestra que salga de la ventana // y se añade la nueva total = total - medidas[indice]; //medida unitaria medidas[indice] = analogRead(sensor); // añadimos la medida al total total = total + medidas[indice]; // aumentamos indice indice = indice + 1; // para reiniciar indice del vector if (indice >= numero_medidas) { indice = 0; } // no va a suceder, pero por si acaso if (total < 0) { total = 0; } // Calculo del MAV. Como la medida analogica de arduino es absoluta, // no ha de hacerse otra vez MAV = total / numero_medidas; MAV1 = MAV; Serial.println(MAV); delay(1); // detectar con timeout el numero de pulsos, de manera que cuando detecte // pulso reinicie timeout, y cuando no reciba pulso en timeout para de // modo adquisicion a actuar. Tras ello, vuelve a esperar que haya pulso // para adquirir mas pulsos. time_act = millis(); if (MAV > limite) { //si supera valor en la entrada analogica (200 es aceptable)
67 do { if (posicion == 0) { posicion = 1; } total = total - medidas[indice]; medidas[indice] = analogRead(sensor); total = total + medidas[indice]; indice = indice + 1; if (indice >= numero_medidas) { indice = 0; } if (total < 0) { total = 0; } MAV = total / numero_medidas; Serial.println(MAV); if (MAV > limite) { if ( MAV1<= limite) { //si se detecta un solo pico por encima del valor min, se resetea timeout time_act = millis(); posicion = posicion + 1; delay(500); } } MAV1 = MAV; //para no volver a entrar en siguiente iteracion } while (millis() - time_act < timeout); //mientras no se supere el timeout } // switch case para cambiar de estados los dedos según el resultado // del anterior do while en posicion switch (posicion) { case 0: break; case 1: // 1 pulso: mano completa, cambia cada dedo if (dedo_pulgar == 0) { dedo_pulgar = 1; } else { dedo_pulgar = 0; } if (dedo_indice == 0) { dedo_indice = 1; } else { dedo_indice = 0; } if (dedo_corazon == 0) { dedo_corazon = 1;
68 Appendix A. Códigos } else { dedo_corazon = 0; } if (dedo_anular == 0) { dedo_anular = 1; } else { dedo_anular = 0; } if (dedo_menique == 0) { dedo_menique = 1; } else { dedo_menique = 0; } posicion = 0; break; case 2: // 2 pulsos: cambia estado pulgar if (dedo_pulgar == 0) { dedo_pulgar = 1; } else { dedo_pulgar = 0; } posicion = 0; break; case 3: // 3 pulsos: cambia estado indice if (dedo_indice == 0) { dedo_indice = 1; } else { dedo_indice = 0; } posicion = 0; break; case 4: // 4 pulsos: cambia estado corazon if (dedo_corazon == 0) { dedo_corazon = 1; } else { dedo_corazon = 0; } posicion = 0; break; case 5: // 5 pulsos: cambia estado anular if (dedo_anular == 0) { dedo_anular = 1; } else { dedo_anular = 0; } posicion = 0;
69 break; case 6: // 6 pulsos: cambia estado meñique if (dedo_menique == 0) { dedo_menique = 1; } else { dedo_menique = 0; } posicion = 0; break; } // actuar sobre los servomotores correspondientes if (dedo_pulgar == 1) { // contrae servo_6.write(89); servo_5.write(89); } else { // relaja servo_6.write(179); servo_5.write(179); } if (dedo_indice == 1) { // contrae servo_4.write(1); } else { // relaja servo_4.write(179); } if (dedo_corazon == 1) { // contrae servo_3.write(179); } else { // relaja servo_3.write(1); } if (dedo_anular == 1) { // contrae servo_2.write(179); } else { // relaja servo_2.write(1); } if (dedo_menique == 1) { // contrae
70 Apéndice A. Códigos servo_1.write(179); } else { // relaja servo_1.write(1); } }
Índice de Figuras 1.1 prótesis de codo, antebrazo y mano conectada a sensores mioeléctricos. fuente: www.cnrs.fr 1 1.2 prótesis IMMA hand. fuente: System for the experimental evaluation of anthropomorphic hands. Application to a new 3D-printed prosthetic hand prototype. 2017 4 1.3 prótesis OLYMPIC hand. [8] 4 2.1 Ultimaker 3 extended. fuente: 3dnatives.com 5 2.2 Creality ender 3. fuente:3dnatives.com 6 2.3 Entorno de Ultimaker Cura. 7 2.4 Piezas que componen la prótesis. fuente: proyecto DEVALHAND 7 2.5 Resultado de la impresión 10 2.6 Huesos y articulaciones de la mano, incluyendo músculos interóseos [12] 11 2.7 Esquema para modelo D-H [15] 12 3.1 Señal EMG sin procesar. [16] 13 3.2 Etapa de medida 14 3.3 Etapa de rectificación 14 3.4 Etapa de filtrado 15 3.5 Etapa amplificadora 15 3.6 Sensor EMG 16 3.7 Posicionamiento de sensores 17 3.8 Gráfica medida EMG bíceps. Filtro a 1 Hz en rojo 18 3.9 puño contraído y relajado en intervalos largos 18 3.10 puño contraído y relajado en intervalos muy cortos 19 3.11 puño contraído y relajado en intervalos largos 19 3.12 puño contraído y relajado en intervalos muy cortos 20 3.13 Gráficas de cada dedo del sujeto 1 21 3.14 Gráficas de cada dedo del sujeto 2 22 4.1 Señal EMG recibida por el sensor trigno sin procesar 24 4.2 Señal EMG recibida por el sensor trigno sin procesar 25 4.3 Colocación de los sensores en el antebrazo 25 4.4 Medidas EMG de sensores Trigno 26 4.5 Señal obtenida al mover el dedo anular medida en el sensor de anular (arriba) y meñique(abajo) 27 4.6 RMS del sensor meñique 27 5.1 Señal EMG sin procesar obtenida del antebrazo. Gráfica de EMGworks Analysis 29 5.2 RMS de señal EMG . Gráfica de EMGworks Analysis 30 71
78 Bibliografía [12] R. J. Schwarz and C. Taylor, “The anatomy and mechanics of the human hand,” Artificial limbs, vol. 2, no. 2, pp. 22–35, 1955. [13] A. Arjun, L. Saharan, and Y. Tadesse, “Design of a 3D printed hand prosthesis actuated by nylon 6-6 polymer based artificial muscles,” IEEE International Conference on Automation Science and Engineering, vol. 2016-Novem, no. c, pp. 910–915, 2016. [14] A. Barrientos, L. F. Peñin, C. Balaguer, and R. Aracil, Fundamentos de robótica. McGraw-Hill Madrid, 2007, vol. 2. [15] F. Alkhatib, E. Mahdi, and J. J. Cabibihan, “Design and analysis of flexible joints for a robust 3d printed prosthetic hand,” IEEE International Conference on Rehabilitation Robotics, vol. 2019-June, pp. 784–789, 2019. [16] E. F. Shair, A. R. Abdullah, T. N. S. Tengku Zawawi, S. Ahmad, and S. Salleh, “Autosegmentation analysis of emg signal for lifting muscle contraction activities,” Journal of Telecommunication, Electronic and Computer Engineering (JTEC), vol. 8, pp. 17–22, 10 2016. [17] K. T. Reilly and M. H. Schieber, “Incomplete functional subdivision of the human multitendoned finger muscle flexor digitorum profundus: an electromyographic study,” Journal of neurophysiology, vol. 90, no. 4, pp. 2560–2570, 2003. [18] C. Cipriani, C. Antfolk, M. Controzzi, G. Lundborg, B. Rosen, M. C. Carrozza, and F. Sebelius, “Online myoelectric control of a dexterous hand prosthesis by transradial amputees,” IEEE Transactions on Neural Systems and Rehabilitation Engineering, vol. 19, no. 3, pp. 260–270, 2011. [19] S. Micera, J. Carpaneto, and S. Raspopovic, “Control of hand prostheses using peripheral information,” IEEE Reviews in Biomedical Engineering, vol. 3, pp. 48–68, 2010. [20] J. Fu, L. Xiong, X. Song, Z. Yan, and Y. Xie, “Identification of finger movements from forearm surface emg using an augmented probabilistic neural network,” in 2017 IEEE/SICE International Symposium on System Integration (SII), 2017, pp. 547–552. [21] N. Hogan and R. W. Mann, “Myoelectric signal processing: Optimal estimation applied to electromyography-part i: Derivation of the optimal myoprocessor,” IEEE Transactions on Biomedical Engineering, no. 7, pp. 382–395, 1980. [22] K. Englehart, B. Hudgins, P. A. Parker, and M. Stevenson, “Classification of the myoelectric signal using time-frequency based representations,” Medical engineering & physics, vol. 21, no. 6-7, pp. 431–438, 1999. [23] K. Veer and T. Sharma, “Extraction and analysis of above elbow semg for pattern classification,” Journal of Medical Engineering & Technology, vol. 40, no. 4, pp. 149–154, 2016, pMID: 27004618. [Online]. Available: https://doi.org/10.3109/03091902.2016.1153739 [24] Z. Ju, G. Ouyang, M. Wilamowska-Korsak, and H. Liu, “Surface emg based hand manipulation identification via nonlinear feature extraction and classification,” IEEE Sensors Journal, vol. 13, no. 9, pp. 3302–3311, 2013. [25] A. Phinyomark, S. Hirunviriya, C. Limsakul, and P. Phukpattaranont, “Evaluation of emg feature extraction for hand movement recognition based on euclidean distance and standard deviation,” vol. 2010, 05 2010, pp. 856 – 860.
Bibliografía 79 [26] D. M. Gude, “Automated hand-forearm ergometer data acquisition and analysis system,” Ph.D. dissertation, Kansas State University, 2013. [27] R. O. Duda, Pattern classification, 2nd ed., P. E. Hart and D. G. Stork, Eds. New York [etc: John Wiley and Sons, 2001. [28] M. Ruiz Arahal and M. Vargas Villanueva, Sistemas de Percepción, Tema 4. Universidad de Sevilla. [29] D. S. S. Corporation, “Introducción a Solidworks,” Solidworks, 2015. [Online]. Available: https://my.solidworks.com/solidworks/guide/SOLIDWORKS{_}Introduction{_}ES.pdf [30] “Proveedor de servomotores.” [Online]. Available: https://opencircuit.shop/Product/TowerProSG90-9G-micro-servo-motor-180 [31] C. Cipriani, C. Antfolk, M. Controzzi, G. Lundborg, B. Rosen, M. C. Carrozza, and F. Sebelius, “Online myoelectric control of a dexterous hand prosthesis by transradial amputees,” IEEE Transactions on Neural Systems and Rehabilitation Engineering, vol. 19, no. 3, pp. 260–270, 2011. [32] I. Llop-Harillo and A. Pérez-González, “System for the experimental evaluation of anthropomorphic hands. Application to a new 3D-printed prosthetic hand prototype,” International Biomechanics, vol. 4, no. 2, pp. 50–59, 2017. [Online]. Available: http://doi.org/10.1080/23335432.2017.1364666