Control Maxon Matlab
Control Maxon Matlab
articulaciones de un exoesqueleto
Agradecimientos
Agradecer al Dr. Javier Molina Vilaplana su tiempo y dedicacion como director de este pro-
yecto, as como sus consejos, apoyo y motivacion recibida durante el proyecto. Agradecer tam-
bien al departamento de la Universidad Politecnica de Cartagena de Ingeniera de Sistemas y
Automatica, a todo su personal y en especial al Dr. Jorge Feliu Batlle por su colaboracion.
Por ultimo, y no menos importante, agradecer a todas aquellas personas que me han ayu-
dado tanto personal como profesional y que es imposible mencionar a todas, ya que han sido
numerosas las personas que de alguna forma u otra me han apoyado en este proyecto. De todas
estas personas, agradecer en especial a la Ingeniera Industrial Dona Esther Conesa Garca, por
su incansable apoyo y comprension durante todos los anos de formacion, y en especial durante
la realizacion de este proyecto.
3. Resultados 55
3.1. Conexion y Comunicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2. Sintonizacion de PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.3. Movimiento de un motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.4. Movimiento simultaneo de dos motores . . . . . . . . . . . . . . . . . . . . . . . 66
3.5. Movimiento independiente de dos motores . . . . . . . . . . . . . . . . . . . . . 71
3.6. Movimiento de cadera y rodillas . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.7. Modelo propuesto para la simulacion del Exoesqueleto . . . . . . . . . . . . . . 77
3.8. Problemas y limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.9. Mejoras propuestas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.10. Trabajos futuros respecto a algortmos de control . . . . . . . . . . . . . . . . . 85
4. Anexos 87
4.1. Flujograma de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2. Algortmo de programacion en Matlab . . . . . . . . . . . . . . . . . . . . . . . 89
4.3. Algortmo de programacion en Simulink . . . . . . . . . . . . . . . . . . . . . . 92
4.4. Hojas de caractersticas Maxon . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Comunicacion y control de las articulaciones de un exoesqueleto
Indice de figuras
1. Prototipo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2. Engranaje conico helicoidal 3:1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3. Modos de operacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4. Perfil de posicion, Trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5. Perfil de posicion, Senoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6. Perfil de velocidad, Trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
7. Perfil de velocidad, Senoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8. Homing Mode, Trapezoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
9. Homing Mode, Senoidal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
10. Interpolated Position Mode, Ejemplo de interpolacion. . . . . . . . . . . . . . . 36
11. Master Encoder Mode, Ejemplo de funcionamiento. . . . . . . . . . . . . . . . . 37
12. Step Direction Mode, Ejemplo de funcionamiento. . . . . . . . . . . . . . . . . . 37
13. Tipos de datos, Descripcion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
14. Ejemplo de la clase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
15. Rutina de funcionamiento en Matlab. . . . . . . . . . . . . . . . . . . . . . . . . 42
16. Diagrama de bloques generico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
17. Condiguracion Level-2 Matlab S-Function. . . . . . . . . . . . . . . . . . . . . . 51
18. Diagrama de bloques generico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
19. Rutina de operacion completa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
20. Parametros del bloque S-Function. . . . . . . . . . . . . . . . . . . . . . . . . . 53
21. Esquema de funcionamiento PID . . . . . . . . . . . . . . . . . . . . . . . . . . 58
22. Respuesta con controlador P=520, I=12 y D=3. . . . . . . . . . . . . . . . . . . 61
23. Respuesta con controlador P=520, I=100 y D=100. . . . . . . . . . . . . . . . . 62
24. Respuesta con controlador P=1000, I=100 y D=100. . . . . . . . . . . . . . . . 62
25. Modelo de 1 motor en Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
26. Movimiento de un Motor ante un tren de pulsos. . . . . . . . . . . . . . . . . . . 64
27. Movimiento de un Motor ante un escalon. . . . . . . . . . . . . . . . . . . . . . 65
28. Diagrama de bloques de dos motores simultaneos. . . . . . . . . . . . . . . . . . 66
29. Parametros de entrada del bloque motor. . . . . . . . . . . . . . . . . . . . . . . 67
30. Movimiento de dos motores de forma simultanea. . . . . . . . . . . . . . . . . . 67
31. Movimiento de dos motores de forma simultanea con carga. . . . . . . . . . . . . 68
32. Parametro de configuracion del tipo de motor. . . . . . . . . . . . . . . . . . . . 69
El prototipo a controlar simula el tren inferior de un ser humano, este prototipo incluye las
articulaciones de la cadera, rodillas y tobillos. Este proyecto esta orientado a personas mayores
y rehabilitacion, por lo tanto, el prototipo tiene que ser capaz de realizar movimientos basicos
para los seres humanos.
En segundo lugar se tiene que realizar una comunicacion completa en la que se habilite el
controlador. Para poder habilitar el controlador se necesita configurar cada uno de sus parame-
tros, as como el modo de funcionamiento, sensores, motores... Para toda esta parametrizacion
se tiene que realizar una o varias clases con todas las propiedades necesarias, de esta forma se
podra modificar todo de una forma mas sencilla y eficaz.
Para realizar el control del exoesqueleto se tienen que estudiar cada uno de los modos de
operacion disponible posibles y elegir el que mas se adecue a el criterio establecido. Una vez
elegido el modo de operacion, para el control, se va a usar el controlador interno PID que
dispone el controlador. La sintonizacion de este PID se llevara a acabo de forma teorica y
experimental en vaco, y se comprobara con carga.
Para una simulacion completa se necesita realizar un diagrama de bloques en Simulink. Para
la simulacion de las articulaciones se va a proporcionar una entrada de posicion en grados. El
diagrama de bloques tiene que estar optimizado para que se puedan anadir y quitar motores
de una forma facil y rapida, sin necesidad de reprogramar todo el codigo. Para el analisis de
resultados se dispondra de una salida en tiempo real que comparara la posicion objetivo con
la posicion real frente a un tiempo. En el diagrama de bloques se ha de ser capaz de poder
modificar parametros de los motores, tipos de motor e identificadores de cada controlador.
Para el proyecto se va a usar el prototipo inicial del proyecto EXOLEGS, esto no quiere decir
que esta configuracion sea la definitiva, por tanto, como objetivo principal de este proyecto, se
plantea una rutina de comunicacion en Simulink capaz de realizar labores de control y analisis
de la respuesta del exoesqueleto ante diferentes entradas. Este modelo tiene que ser capaz de
mediante parametros modificar los diferentes cambios que se puedan realizar en el prototipo
del exoesqueleto final, relacion de transmision, cambios de motor, cambios de identificadores...
6. Problemas y mejoras
1. Introduccion
1.1. Exoesqueletos
Los exoesqueletos tienen el objetivo de maximizar las habilidades fsicas del ser humano,
dotandolo de una gran fuerza, capaz de levantar hasta 10 veces su peso. El concepto de los
exoesqueletos viene desarrollandose desde hace mas de 30 anos, en sus inicios fueron disenados
para uso industrial y con el paso del tiempo fueron evolucionando hasta llegar a lo que se
conoce actualmente. A pesar de que muchos de estos trajes roboticos son disenados para uso
militar, tambien existen empresas dedicadas a la fabricacion de exoesqueletos aplicados a la
rehabilitacion. En el siguiente artculo se hara un pequeno recorrido historico y se conocera
alguno de estos trajes, desde el primer prototipo hasta algunos de los mas avanzados.
Las aplicaciones de los exoesqueletos para personas pueden dividirse en tres importantes
grupos:
Exoesqueletos para rehabilitacion de personas que han sufrido accidentes o padecen en-
fermedades que pueden mejorar los sntomas con ejercicios controlados.
Exoesqueletos para hacer que una persona en buen estado fsico pueda realizar un mayor
esfuerzo (por ejemplo, exoesqueletos militares o prototipos ideados para que un trabajador
pueda portar pesos mayores durante la jornada laboral).
Exoesqueletos para ayudar a personas a llevar una vida menos dependiente. En este caso
estan las personas con movilidad reducida, ya sea por accidentes que les han quitado la
movilidad de sus extremidades, por enfermedades cronicas o por los efectos de la edad,
ancianos que ven reducidas sus capacidades fsicas.
A pesar de que durante el uso de exoesqueletos con los fines del primer grupo, rehabilitacion,
y del ultimo, servir de proporcionar movilidad a personas, se realiza un ejercicio que puede
mejorar la movilidad y la forma fsica del usuario, hay que realizar una separacion entre ambas.
Esta separacion se ha hecho teniendo en cuenta que el primer grupo son situaciones transitorias
con un tiempo relativamente corto del uso del exoesqueleto (con un horario diario o semanal
fijado hasta que la persona es capaz de volver a la normalidad tras la rehabilitacion), y el ultimo
grupo se ha considerado un uso cotidiano (sin horario fijo, estando el exoesqueleto a disposicion
de la persona para su uso privado) debido al caracter cronico de la enfermedad o debido al
estado y edad de la persona.
En este caso, el proyecto EXOLEGS esta centrado en exoesqueletos para personas ancianas,
con baja movilidad y que la ayuda de un exoesqueleto les ayudara a llevar una vida lo menos
dependiente posible.
Desde el nacimiento hasta las ultimas horas de vida, es a traves del cuerpo y del movimiento
la manera mediante la cual interaccionamos constantemente con nuestro entorno. Cuerpo y
movimiento son dos terminos estrechamente relacionados entre s. El movimiento garantiza
el correcto funcionamiento del organismo y a su vez, un cuerpo sano es base fundamental
para el movimiento libre. La realizacion de actividad fsica sistematica y controlada es una
clara herramienta de influencia positiva para preservar, conservar y promocionar los multiples
factores que intervienen en el mantenimiento de un cuerpo sano a lo largo de los anos.
Se aconseja la practica regular de ejercicio fsico en mayores de 65 anos, dado que esto conlleva
efectos beneficiosos sobre la diabetes, la hipertension, las cadas, el nivel de independencia, los
niveles de colesterol y la enfermedad coronaria, entre otras patologas.
Un exoesqueleto puede proporcionar a determinadas personas parte de esa movilidad extra
que necesitan para salir de ese anquilosamiento muscular y fsico, reactivar el movimiento,
caminar mas a menudo (realizando un menor esfuerzo) realizar tareas cotidianas simples. De
esta forma realizar estas tareas cotidianas es realizar ejercicios leves que conllevan a una mejora
en la condicion fsica de la persona. Los movimientos realizados en las extremidades inferiores
con ayuda del exoesqueleto y los realizados en las extremidades superiores debido a que ahora
si pueden desplazarse con facilidad para realizar tareas, as como la actividad en el tronco de
la persona son ejercicios que antes de usar el exoesqueleto no se realizaban porque eran muy
costosos, o si se realizaban podran dar lugar a lesiones, y ahora ayudan a una mejora continua
en la persona.
Ventajas del uso de exoesqueletos en personas mayores.
Ya se han comentado en el parrafo anterior muchas de las ventajas que tiene el uso de
exoesqueletos, as, se pueden resumir en los siguientes puntos:
La menor dependencia y el ejercicio fsico crea una seguridad en la persona que le ayuda
a mejorar su estado psicologico.
Tipos de exoesqueletos hay diversos, ya que se puede robotizar cualquier parte del cuerpo
humano de forma mecanica, pero este proyecto tiene como interes el tren inferior del cuerpo
humano. En el tren inferior se encuentran la cadera, las rodillas y los tobillos. Para realizar una
evolucion de los exoesqueletos nos centraremos en los que mas se asemejan a este proyecto, es
decir, aquellos que estan enfocados al tren inferior humano, y orientados a la rehabilitacion.
Proyecto Hardiman
En la decada de los 60, Ralph Mosher, ingeniero de General Electric diseno un traje roboti-
co capaz de potenciar la fuerza humana, brindandole al usuario la posibilidad de cargar hasta
1500 kilogramos sin mayor dificultad. Hardiman fue el primer proyecto serio de un exoesqueleto
robotico y el mas ambicioso de General Electric y digno de admiracion para la epoca en que fue
creado. General Electric tena grandes expectativas para el proyecto Hardiman, pues esperaba
que fuera utilizado a bordo de portaaviones para la carga de bombas, construccion submarina,
en centrales nucleares, y en el espacio exterior. Lamentablemente el proyecto fracaso, la incon-
trolable violencia de sus movimientos la ineficiencia de sus piernas que componan la base del
traje no permitieron que llegara a tener un desarrollo optimo. Al fracasar el proyecto Hardi-
man decidieron reducir medidas y crearon un brazo robotico. Esta especie de guante bionico
era capaz de levantar hasta 340 kilogramos de peso. Ironicamente, este guante bionico pesaba
el doble de lo que poda levantar, 680 kilos. No, no era muy util, as que la investigacion fue
cancelada.
Lifesuit
En 1986 Monty Reed, comenzo a trabajar en un traje robotico que puediera ser utilizado
como herramienta de rehabilitacion. El traje pesaba unas 75 libras, era una combinacion de una
mochila y un paquete de cohetes y tanques de buceo. En los ultimos 20 anos Monty Reed ha
destinado su propio dinero al desarrollo e investigacion de un exoesqueleto capaz de devolverle
la habilidad de caminar incluso a personas con cuadriplejia. Hasta el momento se han creado
varias versiones del Lifesuit obteniendo muy buenos resultados, actualmente el LIFESUIT 14
tienen la capacidad de caminar una milla llevando un peso extra de 92 kilogramos.
HAL de Cyberdyne
Ekso Bionics
EKSO es un traje bionico portatil que permite a las personas con limitaciones en las ex-
tremidades inferiores ponerse de pie y caminar por un terreno natural, proporcionan un apoyo
completo al suelo. La accion de caminar es posible cuando los sensores del exoesqueleto detectan
peso, entonces se inicia la accion de caminar. Todo el peso y las acciones de las extremidades
deficientes son realizadas por motores alimentados con baterias. Este exoesqueleto proporciona
la posibilidad de ponerse de pie y caminar para personas con discapacidad total. Ayuda a los
pacientes volver a aprender los patrones de pasos adecuados.
EKSO es un exoesqueleto para su uso bajo supervision medica por individuos con diferentes
niveles de paralisis o hemiparesia debida a enfermedades neurologicas como el ictus, lesion de
la medula espinal o enfermedad, lesion cerebral traumatica y mas. Con el alta medica, por
lo general facilita el caminar de las personas con una amplia gama de habilidades motoras y
tamanos. Todo el mundo medicamente tratado que ha pasado el examen fsico ha caminado en
su primera sesionDisenado para la utilidad y facilidad de uso en un entorno clnico
Rex Bionics
REX tambien limita la carga sobre los terapeutas durante la manipulacion manual y reduce
la cantidad de ayuda necesaria para ayudar a los pacientes que se someten a terapia de [Link]
personas en silla de ruedas se encuentran en riesgo de padecer numerosas complicaciones medicas
por largos periodos de estar sentado, por lo que este dispositivo les permite pasar mas tiempo
de pie, caminar y hacer ejercicio. REX puede ofrecer beneficios significativos para la salud. Un
programa de ensayos clnicos esta actualmente en curso para evaluar estos beneficios potenciales
para la salud de las personas.
Cyberdyne
El modelo de Cyberdine se llama HAL. Las principales causas de las discapacidades de las
extremidades inferiores son trastornos del sistema muscular y nervioso cerebral. En esos ca-
sos, el cerebro no puede utilizar las vas neurales ordinarios y no puede ordenar de mover las
piernas. HAL para uso medico mueve las piernas del usuario de acuerdo con la intencion del
usuario, Quiero caminar..O Quiero estar de pie., Y permite la retroalimentacion oportuna
de los sentimientos , que poda caminar. .oYo podra ponerse de pie. . En consecuencia, esto
acelera el aprendizaje por el cerebro. HAL para uso medico es el unico dispositivo de recupe-
racion robotico que puede ensenar el cerebro como mover las piernas. Este dispositivo se puede
aplicar a personas que sufren de lesiones de la medula espinal, lesiones cerebrales traumaticas,
enfermedades cerebrovasculares, enfermedades del cerebro y del sistema neuromuscular, etc.
Cuando una persona se mueve, el cuerpo enva diferentes senales desde el cerebro a los
musculos a traves de nervios. Esas senales aparecen en la superficie de la piel como senales
bio-electrica [BES]. HAL lee el Modelo BES del usuario, por lo tanto compensa la fuerza
muscular de las extremidades inferiores y el o ella ayuda a caminar, pararse, y sentarse de
forma autonoma.
1.2. EXOLEGS
La mayora de las personas de edad sufren de leve a grados agudos de la degeneracion fsica
y cognitiva. El caracter progresivo de estos trastornos a menudo conduce a la perdida de la
independencia que afecta la calidad de vida. Sin embargo, se ha demostrado que la movilidad
fsica y el ejercicio cardiovascular mejora directamente las capacidades cognitivas humanas. Por
lo tanto, esta propuesta va a desarrollar una gama de soluciones de asistencia activa exoes-
queleticas de miembros inferiores (Basic, Standard y Deluxe) para proporcionar la movilidad
interior y exterior para ayudar a las personas mayores a mantener y mejorar los niveles de
actividad fsica para una vida plena, activa e independiente.
Los requisitos de movilidad demandados al exoesqueleto para que las personas de edad avan-
zada puedan llevar a cabo sus actividades cotidianas de una manera independiente son los
siguientes:
Movilidad interior: mover libremente dentro de espacios cerrados que dan un valor anadi-
do considerable sobre sillas de ruedas, sea capaz de realizar maniobras de sentarse y
levantarse, subir y bajar escaleras, pasar por encima de objetos, caminar recto.
Movilidad al aire libre: caminar sobre diferente tipo de superficies y sobre superficies
irregulares, evitar el trafico cruzando las carreteras, poder acceder al transporte publico,
usar escaleras mecanicas.
Objetivos
EXOLEGS tiene como finalidad el desarrollo de exoesqueletos de movilidad corporal del tren
inferior para ayudar a las personas a realizar tareas normales de la vida diaria. Los movimientos
incluyen tareas como levantarse, sentarse, caminar en lnea recta en terreno plano, pasar por
encima de los objetos, caminar sobre terreno blando y desigual, subir y bajar escaleras, etc.
En el proyecto EXOLEGS, se desarrollaran marcos teoricos y modulares capaces de realizar
prototipos de dispositivos que pueden ser utiles para ayudar a la movilidad humana. Existiran 3
tipos de exoesqueletos: Basic, Standard y Deluxe, que seran disenados, desarrollados y probados
en los siguientes pases de la Union Europea: Suecia, Alemania, Espana, Reino Unido y Suiza.
La clave del exito de adopcion de las soluciones EXOLEGS se basan en los sistemas de
seguridad (cumpliendo con existente y las normas de seguridad ISO / IEC emergentes), inspira
confianza en el usuario y siendo accesible a traves de un modelo de negocio adecuado (alquiler,
arrendamiento, uso de varias personas, prescripcion, etc.). El proyecto EXOLEGS tendra en
cuenta todas estas cuestiones en el plan de trabajo detallado.
1.2.1. Prototipo
Para conseguir el objetivo de este proyecto se cuenta con un prototipo previamente fabricado.
El prototipo ha sido disenado y dimensionado en Espana. Este prototipo cuenta con el tren
inferior completo de una persona humana. Tanto el hadware de control como el prototipo ha
sido construido y escogido previamente a este proyecto.
En la parte referente a los actuadores y sensores se observa que hay 6 motores. Cada motor
cuenta de forma integrada con un encoder y una reductora, y de forma externa y de union
con las extremidades con un engranaje conico reductor. Todos los sensores integrados son los
mismos para todos los motores. En la zona de la cadera se encuentra un motor de 70W de la
marca Maxon, y para la zona de las articulaciones de la rodilla y tobillo, se encuentran unos
motores de 100W de la marca Maxon.
Figura 1: Prototipo.
1.2.2. Motores
MotorType = 10 MotorType = 10
NbOfPolePairs = 8 NbOfPolePairs = 7
1.2.3. Sensores
SensorType = 2
EncoderResolution = 1024
1.2.4. Engranajes
Cada uno de los motores, aparte del sensor, lleva integradas unas reductoras, las cuales
se encargan de transmitir el par y de hacer mas sencillo su control y precision reduciendo la
velocidad.
Como union de los actuadores con las articulaciones, se encuentran unos engranajes conicos
helicoidales integrados en la estructura. Estos engranajes se tratan como una reductora 3:1 la
cual se encarga de transmitir el par de la reductora planetaria de cada motor y de reducir la
velocidad aun mas.
1.3. Hadware
1.3.1. CPU
Como CPU y para realizar los ensayos, se ha utilizado un ordenador de sobremesa con
Windows 7, el cual es capaz de mover el software necesario para el control en tiempo real del
prototipo. En el proyecto real este ordenador no es un sobremesa, se trata de un miniordenador
con un sistema operativo basado en software libre (linux).
Para la alimentacion de las controladoras y los motores se usan dos fuentes de alimentacion
diferentes. Para los motores de menor potencia que son los de la cadera (EC45) se dispone de
una fuente para ellos que suministrara 24V y 2A. Para la articulacion de las rodillas y tobillos se
dispone de una fuente capaz de suministrar mas potencia ya que cada motor tiene una potencia
de 100W.
1.3.4. Controlador
1.4. Software
Para la realizacion de este proyecto se han usado dos software diferentes. En primer lugar,
para el testeo y correcta configuracion de las controladoras y motores, se ha usado un software
proporcionado por el fabricante, Epos Studio. Este software permite conectar y trabajar de
manera inmediata con los motores. En segundo lugar, para la realizacion del proyecto, obtencion
de datos, control y operacion, se ha usado el lenguaje Matlab en el entorno de programacion
de Matlab. Para realizar pruebas a tiempo real se ha optado por el modulo de Matlab que se
llama Simulink, el cual se trata de un entorno de programacion mediante bloques que permite
simulaciones dinamicas
En primer lugar, para la utilizacion de este software es necesario tener conectadas y correc-
tamente alimentados los controladores, motores y sensores. En este proyecto solo se ha usado
este software para testear el funcionamiento de los motores y para adquirir parametros de
configuracion que no venan dados en ninguna gua.
Este software permite conectar todas los controladores a la vez y mediante diferentes proto-
colos de comunicacion, el software se adapta al protocolo de comunicacion que hayamos elegido.
Una vez creado el proyecto, el software muestra un esquema de conexion donde pone los iden-
tificadores y puertos de conexion de cada uno de los controladores, de esta forma se sabra en
que puerto esta conectado cada uno y el identificador de nodo que tenga cada controlador si se
trabaja con el protocolo de comunicacion CANOpen.
Para poder realizar correctamente el testeo del montaje en cuestion, se puede hacer con
cualquier modo de operacion que se estime oportuno. En los diferentes modos de operacion
se pueden modificar diferentes parametros. Por ultimo este software tiene una aplicacion que
permite sintonizar de manera automatica el controlador PID de la controladora mas adecuado.
1.4.2. Matlab
El paquete Matlab dispone de dos herramientas adicionales que expanden sus prestaciones,
Simulink y [Link] permite una programacion basada en bloques para simulaciones
dinamicas, y Guide permite la creacion de interfaces de usuario de manera sencilla. Ademas, se
pueden ampliar las capacidades de Matlab con las cajas de herramientas (toolboxes), y las de
Simulink con los paquetes de bloques (blocksets).
2.1. Comunicacion
En este apartado, se va a desarrollar la rutina creada para una comunicacion exitosa entre el
controlador y el software de control. Para realizar la conexion, se va a necesitar una biblioteca
especfica para aprovechar al maximo nuestro hadware. Se presento un primer problema, y fue
que no haba unos drivers especficos para Matlab, nuestro software de control. Una solucion
fue contactar con una persona que modifico los drivers para adaptarlos a Matlab. Una vez que
se ha cargado la librera satisfactoriamente, se podra empezar a comunicar con el hadware, pero
antes de utilizarlo hay que configurarlo, ya que este hadware tiene diferentes parametros para
segun el motor y sensores a los que este conectado.
El archivo Definitions.h se usa para poder cargar la librera. Este archivo se encarga de
compatibilizar las funciones de la librera y definir los tipos de datos que se estan usando. Este
archivo se tuvo que modificar debido a una incompatibilidad en el tipo de dato. Se modifico
un tipo de dato que no se reconoca, por uno equivalente reconocido por nuestro software. Se
definieron estos datos nuevamente y se soluciono el error de comunicacion.
A la hora de cargar la librera en Matlab mostraba una serie de errores, los cuales no permitan
cargar la librera. Eran numerosos errores, pero analizando, se observo que se trataba en todos
los casos del mismo tipo de error. El error consta de una incompatibilidad de matlab con el
tipo de dato int8 e int8Ptr. Estos tipos de datos corresponden en su equivalente matlab al
tipo de dato int8 e int8* . A continuacion se muestra la solucion propuesta, la cual funciona de
forma correcta y permite cargar la librera sin errores.
Con esta modificacion, se tiene una librera compatible con Matlab, que servira para comu-
nicarse con la controladora.
Una vez se ha cargado la librera, se tendra que configurar el controlador para nuestros
elementos de sensorizacion y motores. Para que el control sea optimo se tendra que parametrizar
y configurar el controlador de la siguiente manera, y con el siguiente orden:
Habilitar controlador
Todas estas rutinas, se desarrollaran mas adelante, en un apartado especfico para la rutina
de conexion. Si toda esta configuracion se ha llevado a cabo sin ningun error, se tendra el
controlador conectada al software, con el cual se podra controlar los motores y recibir la posicion
de las articulaciones en cada instante de tiempo. Para concluir con la comunicacion, se tendra
que realizar una desconexion exitosa, para no tener problemas de conexion en un futuro. Para
realizar la desconexion, se realizara en el siguiente orden.
Deshabilitar controlador
Desconectar dispositivos
El controlador dispone de diferentes modo de operacion, con los cuales se puede establecer
un modo de trabajo del motor que mas se adapte a el objetivo. Existen varios modos de
operacion, cada uno tiene unos parametros prioritarios de funcionamiento, por lo tanto, se
tendra una variedad de modos de operacion para escoger el que mas se ajuste. A continuacion
se desarrolla en una tabla los diferentes modos de operacion, y sus valores para seleccionarlos
en el controlador cuando se esta configurando.
Como se dispone de estos dos tipos de perfil para generar la trayectoria, se tendra que
decidir cual es el mejor para cada uno de los movimientos. Para realizar unos movimientos lo
mas natural posible, necesitaremos un perfil de velocidad acampanado, de forma que no acelere
de forma lineal, y que cuando vaya a llegar a la posicion vaya cada vez mas lento. En funcion
de estas premisas, y analizando el comportamiento de los perfiles Trapezoidal y Senoidal, se
elegira para los movimientos un perfil Senoidal.
Se observa, que para establecer nuestro perfil de posicion, se exige una serie de parame-
tros. Estos parametros se podran modificar en cualquier momento, sin necesidad de apagar la
controladora. Los parametros con los cuales se puede trabajar son:
Perfil de Velocidad
Perfil de Aceleracion
Perfil de Deceleracion
Mediante el Perfil de Velocidad, se puede modificar la velocidad con la que se quiere mover
la articulacion, medidas en rpm. Mediante el perfil de Aceleracion y Deceleracion, se establecen
los parametros para generar dichas trayectorias, limitando dichas trayectorias a los valores
establecidos.
Se puede observar en las siguientes figuras de los perfiles, que el perfil que mejor se adapta a
unos movimientos naturales de las articulaciones, sigue siendo el perfil Senoidal.
Para la configuracion de las trayectorias de velocidad, se exige una serie de parametros. Estos
parametros se podran modificar en cualquier momento, sin necesidad de apagar la controladora.
Los parametros con los cuales se puede trabajar son:
Perfil de Aceleracion
Perfil de Deceleracion
Homing Mode
El modo de operacion de Interpolacion, funciona como su propio nombre indica, con un meto-
do que interpola dos puntos dados, los cuales proporcionan informacion de posicion, velocidad
y tiempo. Con estos datos se genera una trayctoria para un tercer punto, a continuacion se
presenta una imagen como ejemplo de funcionamiento.
Position Mode
Velocity Mode
Current Mode
En este apartado, se va a tratar la creacion de un objeto, cuyas propiedades sean los parame-
tros necesarios para el buen funcionamiento de el exoesqueleto. Para la descripcion de nuestro
objeto, se va a analizar el tipo de datos necesario para el funcionamiento con la librera, se
describira cada una de las variables creadas, y por ultimo se creara una clase con todas estas
propiedades y su constructor.
En este apartado, se va a definir los tipos de datos que el controlador utiliza. Para un buen
funcionamiento se necesita que los tipos de datos que estan declarados en la librera, sean los
mismos tipos que se le ofrezcan para la configuracion. Como se ha comentado en el apartado
de Comunicacion, se ha tenido que realizar la conversion a su equivalente de un tipo de dato,
ya que este tipo de dato no era compatible con nuestro software, y por tanto se ha hecho su
equivalencia de forma satisfactoria.
A continuacion se presenta una tabla con los tipos de datos necesarios, y con los rangos
de valores que son compatibles, esto hay que tenerlo en cuenta a la hora de darle valor a las
variables.
Como se puede ver, en la tabla se especifica cada rango de valores, y tambien se tendra
en cuenta sus equivalentes sin signo, es decir los tipos de datos unsigned, que se escriben de
la siguiente forma(ulong, uint...). Con toda esta informacion ya se podra configurar de forma
correcta los valores de las variables, para tener una coherencia con los tipos de datos de la
librera.
Para una correcta configuracion y comunicacion, el objeto creado tiene que tener una serie
de propiedades, las cuales tienen que ser compatibles con los tipos de datos de la librera, y
crearemos tantas propiedades como parametros a modificar se deseen.
Dll Archivo [Link], librera donde estan configuradas todas las funciones
de la controladora.
Header Archivo Definitions.h, necesario para definir los tipos de datos de la li-
brera.
ReturnValue Propiedad que sirve para comprobar que una instruccion se ha hecho
de forma correcta, ya que si se hace de forma incorrecta da un valor diferente.
PortName Esta propiedad sirve para identificar, de forma unica el puerto al que
esta conectado cada controlador, (USB0, USB1,...).
NodeId Esta propiedad nos identifica el nodo al que esta conectado la controla-
dora.
2. Propiedades de Configuracion. Estas propiedades son las mnimas necesarias para poder
configurar el controlador y poder usarlo.
pMode Esta propiedad recibe el valor del modo de operacion con el cual esta
configurado.
Se usara Matlab para el control del exoesqueleto, y esto quiere decir que la programacion
sea orientada a objetos, y por tanto la necesidad de usar una clase es para la definicion de
propiedades, metodos y eventos.
Para que todas las propiedades o variables descritas antes sean faciles de asignar, se creara
una clase en Matlab. Se creara una clase class epos de tipo handle, la cual tendra todas las
propiedades anteriormente descritas, de esta forma, se podran crear diferentes objetos para las
diferentes controladores con las mismas propiedades, simplemente variando el objeto.
Nuestra utilidad para usar la clase, es crear un constructor que cree un objeto con todas
estas propiedades. De esta forma en nuestra rutina para conectar diferentes controladoeas, y
como veremos mas adelante, con las mismas lneas de codigo y funciones, y solo variando unas
propiedades se podra controlar cualquier numero de motores y configurar sus controladores.
2.4. Matlab
Para realizar una buena conexion y comunicacion con el Hadware, se necesita seguir un orden
a la hora de su configuracion. En primer lugar se necesita cargar la librera para la comunicacion
con el Hadware, en segundo lugar se necesita la configuracion de motores, sensores y parametros
de operacion lmite, y por ultimo, si todo ha salido de forma satisfactoria se habilitara el
controlador para poder realizar movimientos y control. Por tanto, para una buena rutina se
tendra que seguir estos pasos de forma rigurosa, de no ser as, la configuracion y el control
puede ser erroneo.
1. Parametrizacion de la conexion.
3. Habilitar controlador.
Parametrizacion de la conexion
En esta parte, se va a desarrollar cada una de las instrucciones necesarias para la comunica-
cion, as como su orden de ejecucion para que todo funcione de forma correcta.
2. OpenDevice. En esta parte, ya se pasa a las funciones de la librera para la conexion con el
controlador. En la funcion OpenDevice, lo que se hace es abrir el puerto para una primera
configuracion del controlador. Para que esta funcion funcione de forma correcta se necesita
que sus parametros de entrada esten definidos de forma correcta. Estos parametros son:
DeviceName
ProtocolStackName
InterfaceName
PortName
Baudrate
Timeout
4. ClearFault. Esta funcion, aunque no necesaria, es muy importante ponerla en esta posi-
cion de la rutina de comunicacion, debido a que si hubiera algun error guardado en la
controladora, esta funcion lo quitara y nos dejara trabajar, de lo contrario, el control
queda bloqueado. Los parametros de entrada de esta funcion son:
NodeId
NodeId
NodeId
VelDimension
VelNotation
En esta parte, se establecera el tipo de motor y sensor que estamos utilizando, as como sus
caractersticas. Tambien se establecera los parametros lmite de operacion. Las caractersticas
del motor y del sensor, se encontraran en el catalogo del fabricante. En esta parte, es donde se
van a modificar los parametros en el caso de que se modifiquen los motores o sensores, se tienen
dos clases preparadas con las configuraciones para los motores EC45 y EC60. Para realizar todo
esto se procedera con las siguientes instrucciones:
1. SetMotorType. Esta funcion permite establecer de que tipo es el motor el cual se esta
usando, ya que el fabricante dispone de tres tipos de motores. En este caso se usara el
tipo 10, que corresponde con un motor EC senoidal conmutado. Los parametros para esta
funcion son:
NodeId
MotorType
NodeId
NominalCurrent
MaxOutputCurrent
ThermalTimeConstant
NbOfPolePairs
3. SetSensorType. Como se ha hecho anteriormente con el motor, ahora con esta funcion
se establecera el tipo de sensor que tenemos montado. Se puede elegir entre 5 tipos de
sensores diferentes, pero en este caso, se esta utilizando un sensor incremental de dos
canales. Los parametros de entrada de esta funcion son:
NodeId
SensorType
NodeId
EncoderResolution
InvertedPolarity
NodeId
MaxAcceleration
NodeId
MaxFollowingError
NodeId
MaxProfileVelocity
NodeId
Mode
Habilitar controlador
Por ultimo, para acabar con la rutina de comunicacion, solo queda habilitar la controladora
para poder acceder al control del exoesqueleto. La controladora no se va a poder habilitar si
no se han hecho correctamente los pasos anteriores. Si toda lo configuracion ha sido correcta se
procedera a habilitar la controladora con la siguiente instruccion:
NodeId
En esta fase, se va a desarrollar las funciones que se han utilizado para activar un modo
de operacion, para mover las articulaciones y para la recepcion de datos del sensor. En los
modos de operacion se podran modificar sus parametros cada vez que se desee realizar un
movimiento. En este caso, se podra modificar la trayectoria del perfil de posicion en cada
movimiento, modificando as su velocidad, aceleracion... En la rutina de operacion, se podran
activar diferentes modos de operacion, pero los parametros de cada modo de operacion, solo se
podran cambiar siempre que el modo este activado.
En esta parte se va a desarrollar la funcion utilizada para la activacion del modo de operacion.
En este caso, al querer trabajar con el modo de operacion de perfil de posicion, se tendra una
funcion especfica para activar este modo. Para cada modo de operacion se dispone de una
funcion especfica de cada uno par la activacion de este.
NodeId
Movimiento de articulaciones
NodeId
ProfileVelocity
ProfileAcceleration
ProfileDeceleration
2. SetObject. Esta funcion sirve para modificar cualquier objeto de la controladora, en es-
te caso la usaremos para modificar el perfil de trayectoria, para que sea senoidal. Los
parametros de entrada de la funcion son:
NodeId
ObjectIndex
ObjectSubIndex
pData
NbOfBytesToWrite
NodeId
TargetPosition
Absolute
Inmediately
En la parte de recepcion de datos del sensor, se realiza de forma simple mediante una funcion.
La lectura se recibe en pasos, por lo tanto si se esta trabajando en otra unidad, se tendra que
convertir para que sea coherente con el proyecto. La funcion usada para la lectura del encoder
es:
1. GetPositionIs. Esta funcion es la encargada de la lectura de los datos del encoder, estos
datos vienen predefinidos por los parametros de configuracion del encoder. Los parametros
de entrada de la funcion son:
NodeId
PositionIs
Por ultima, y para finalizar la conexion y comunicacion de forma exitosa, se necesita una
buena rutina de desconexion, la cual se tiene que hacer de forma ordenada y secuencialmente,
de esta forma se asegurara una buena desconexion. En primer lugar se deshabilitara la contro-
ladora, des pues se preocedera al cierre de la comunicacion con el ordenador y por ultimo se
quitara la librera de la memoria del ordenador.
Deshabilitar controladora
1. SetDisableState.
Desconexion de dispositivos
1. CloseDevice.
2. CloseAllDevices.
Quitar libreria
Por ultimo, para finalizar la conexion se quitara de memoria la librera mediante una funcion
de Matlab. Esta funcion es unloadlibrary, y como parametro sera la librera que se esta usando.
2.5. Simulink
Source. Este bloque sirve para darle una entrada al sistema de control, es decir, para
decirle a que posicion se desea que vaya el motor. El bloque de Source en este caso,
principalmente sera un tren de pulsos, que se modificara de tal forma, para ver la reaccion
de los motores ante entradas muy dispares, y para de esta forma, poder sintonizar los
valores del controlador de una forma coherente.
Gain. Este bloque representa una ganancia, principalmente se pone este bloque para
controlar mediante este parametro una constante proporcional. En este caso este bloque
se usa para la direccion de los motores, es decir, para que todos los motores tengan el
mismo sistema de giro, simplificando al maximo la rutina de control y operacion.
Level-2 Matlab S-Function. Este bloque, sera el mas importante de todos, ya que per-
mitira la inclusion de script de Matlab en el diagrama de bloques. Este bloque crea una
instancia al modelo, en la cual se puede introducir parametros. Para su utilizacion, el blo-
que tiene que estar configurado con el nombre del script, y con los parametros necesarios
de configuracion.
El diagrama de bloques para este proyecto, sera muy similar al planteado en el apartado
anterior, anadiendo un bloque mas, que sera el que gestione la conexion con la librera. Se va
a desarrollar el modelo para 1 motor, el cual sera el siguiente:
Como se puede apreciar en el diagrama de bloques, se tienen dos partes diferenciadas, pero
que a su vez dependen entre s. Se tendra una primera parte que es un bloque aislado del resto,
Cargar Libreria
En primer lugar, lo que se tiene que asegurar es que se haya cargado la librera antes de que
la rutina de comunicacion funcione, y por eso se tratara de forma independiente de la rutina de
comunicacion. Para hacer la carga de la librera y que esta condicione al resto, se va ha crear
una variable global, que se va a encargar de que si la librera esta cargada funcione el modelo,
y si no, que emita un error, o que hasta que no se cargue no funcione.
Esta funcion, principalmente lo que hace, es cargar la librera con la funcion de Matlab
loadlibrary, y cuando se ejecute, se comprobara mediante la funcion libisloaded que la librera
esta correctamente cargada. Una vez comprobada la carga de la librera, la variable global
gLibraryLoad, se establecera a 1(si ha fallado), o a 2(Si esta cargada correctamente). Por
ultimo para hacerlo de una forma mas visual, mientras la librera este sin cargar, el fondo del
bloque estara de color rojo, y en el momento que se cargue se pondra de color verde, de esta
forma, se podra saber de forma visual si la librera esta cargada o no.
(a) Librera sin car- (b) Cargando Li- (c) Librera carga-
gar brera da
Rutina de Operacion
control y desconexion. Esta rutina esta controlada principalmente por el bloque y el script
motor.m. Este bloque tiene unos parametros de configuracion, los cuales son el puerto al que
esta conectado la controladora, y el tipo de motor. Con estos parametros se permite crear un
objeto, el cual tiene las propiedades de ese motor y la comunicacion se va ha hacer en ese
puerto. Para habilitar las tareas de comunicacion y configuracion de la controladora, como se
ha mencionado anteriormente, se dispone de una variable global de control gLoadLibrary, la
cual se encarga de asegurar que la librera este cargada. Si la librera esta cargada, se dispone
a realizar el protocolo de comunicacion y configuracion de la controladora. Este protocolo se
divide en varias partes: comunicacion, configuracion de motores, sensores y parametros lmite,
y por ultimo la habilitacion de la controladora.
Para el movimiento del motor, necesitamos que nos lo habilite la variable gEposConnected.
Esta variable se tratara como una propiedad del objeto, teniendo cada objeto creado su propia
variable de control. Una vez que la variable nos habilita el movimiento del motor, se procedera
a leer la posicion en la que se encuentra, y si es diferente de la que se desea, se movera el motor,
teniendo esta rutina en un script llamado movements.m. En esta rutina de movimiento, se
establecera una conversion de grados a pasos del motor, se establecera la velocidad y acelera-
cion, con la que se creara una trayectoria. Se configurara para tener una trayectoria o de tipo
trapezoidal o de tipo senoidal, y una vez configurado se procedera al movimiento, configurando
este en coordenadas absolutas o relativas, y si queremos el movimiento instantaneo o esperamos
a que acabe el movimiento [Link] de realizar el movimiento, se leera la posicion en
la que se encuentra el motor en cada instante de tiempo, pudiendo mediante esta senal, actuar
y hacer acciones de control del tipo PID.
Despues de realizar toda la rutina de operacion necesaria, se procede con la rutina de des-
conexion, la cual, en un orden secuencial, deshabilita la controladora, cierra conexion con los
diferentes dispositivos conectados al puerto, y por ultimo quita la librera de memoria. Despues
de toda esta rutina, el exoesqueleto esta preparado para una nueva rutina de operacion.
3. Resultados
Como primera parte del proyecto, se pidio una conexion y comunicacion entre las controla-
doras y el software Matlab. Para ello se ha implementado un protocolo de comunicacion antes
descrito, en el cual se establece una conexion mediante USB entre las controladoras y Matlab
o Simulink.
Esta primera parte consiste en realizar una conexion entre Matlab con las controladoras, ya
que no se dispone de drivers para este software. Para realizar la conexion se ha partido de
un archivo .DLL modificado para C++ y de un archivo Definitions.h, estos archivos fueron
proporcionados por una persona que realizo la conexion con Matlab y estas controladoras. Los
archivos fueron probados y no funcionaron ya que no estaban correctamente configurados y
los tipos de datos no eran validos para Matlab. Se modifico el archivo Definitions.h haciendo
compatible la librera para Matlab. Una vez conseguida una librera valida para la conexion
con Matlab se procede a establecer un protocolo de conexion y comunicacion.
Para terminar con la comunicacion, es necesario realizar una desconexion de forma correcta
para evitar posibles fallos en una comunicacion futura. Para realizar una desconexion exitosa, en
primer lugar hay que deshabilitar la controladora, en segundo lugar se cerrara la conexion con
los puertos USB usados, y por ultimo quitaremos la librera de memoria de nuestro ordenador.
Por este orden y de esta forma se procede a una correcta desconexion de la controladora con
Matlab.
El algoritmo del control PID consiste de tres parametros distintos: el proporcional, el integral,
y el derivativo. El valor Proporcional depende del error actual. El Integral depende de los errores
pasados y el Derivativo es una prediccion de los errores futuros. La suma de estas tres acciones
es usada para ajustar al proceso.
Un actuador, Motor.
En este caso, se tendra como esquema de control, un bucle situado dentro de la controladora,
la cual lleva implementado un PID que se encarga del control. Para configurar este PID se hace
antes de su funcionamiento. El funcionamiento del PID dentro de la controladora solo se puede
aplicar en el modo de operacion de perfil de posicion, ya que para otros modos de operacion
lleva implementado otro tipo de controlador. En el interior del controlador, se interpreta la
senal del encoder, y se contrasta con la senal final, de esta forma se tiene la senal de error, que
es procesada mediante el PID, y este se encarga de enviar las condiciones de trabajo hacia el
motor. Para la sintonizacion del PID, se ha hecho de forma teorica y luego se ha optimizado
de forma emprica.
4. Trazar una recta en el punto de maxima pendiente tangente a la curva y sacar los parame-
tros caractersticos cuando esta corte a y0 e y
0 =1; 0 =2600; 0 =6
Una vez realizados todos los calculos necesarios, los parametros teoricos del PID son:
Para el sintonizado experimental del PID se partira de los parametros calculados anterior-
mente. El criterio a seguir es la suavidad en la respuesta y el tiempo mnimo de establecimiento.
Para conseguir los valores optimos se va a seguir una pruba de un tren de pulsos en el cual se
le aplicara una carga, y se vera la reaccion del controlador.
En la figura 22 se observa que se tiene una respuesta correcta ante una entrada de pulsos,
pero tambien se observa que no es una respuesta muy suavizada, por lo tanto, se optimizaran
los parametros del PID para conseguir que la respuesta a esta entrada sea lo mas suavizada
posible y lo mas exacta posible. A continuacion se realizaran unas pruebas para conseguir los
parametros optimos.
En la figura 23 se observa una respuesta ante la misma entrada de pulsos y la misma ganancia
mas suavizada, esto se debe a que se han modificado los valores del parametro integrador y del
parametro derivativo. Tambien se observa que se necesita una mejor respuesta y para ello se va
a modificar el parametro proporcional.
Para realizar el movimiento del motor, se ha hecho mediante codigo en Matlab y Simulink.
La diferencia entre ambos, pese a ser el mismo lenguaje de programacion, es que Simulink no
acepta todas las palabras reservadas e instrucciones de Matlab, y esto hay que adaptarlo a
el diagrama de bloques de Simulink. Basicamente, para poder mover y controlar un motor, el
procedimiento seguido es el siguiente:
Velocidad
Aceleracion
Una opcion muy interesante, es la de poder cambiar el perfil de trayectoria creada, y se puede
elegir entre seonidal o trapezoidal. Para realizar movimientos de una forma mas realista, se elige
una trayectoria senoidal,ya que el perfil de la velocidad es maximo en el recorrido, y mnimo
en los extremos. Una vez configurado todo, se realizara el movimiento del motor, y para ello
vamos a usar el siguiente modelo en Simulink:
Como se puede observar en el modelo de Simulink, se dispone de varios bloques en los que se
realizaran todas las tareas anteriormente descritas. Para visualizar los datos se usara el bloque
LECTURA, que mostrara la posicion demandada y la leda por el encoder en cada momento.
Para realizar las pruebas, se va a someter al motor a un movimiento de 0-27 grados, en los que
se va a generar un tren de pulsos y se vera el comportamiento del mismo.
Para realizar el control sobre dos motores de forma simultanea, el principal problema que se
encontro fue la sincrona entre ambos para poder realizar todas las tareas de forma simultanea.
Para la realizacion de esta prueba se ha usado el siguiente modelo en Simulink:
entrada para la configuracion de ese hadware. Estos parametros son: el identificador del puerto
al que esta conectado y el tipo de motor que tenemos. Con estos parametros correctamente
configurados, el codigo genera un objeto unico de cada bloque, que a su vez va relacionado con
el identificador del objeto.
Una vez acabada toda la configuracion de las controladoras que se tengan en el modelo de
Simulink, se procedera al movimiento de forma simultanea de todos los motores agregados. Por
ultimo, se procedera a la rutina de desconexion de forma completa llevando a la posicion de
origen a los motores.
Se va a realizar una prueba de l articulacion de la cadera para ver como responde sometido a
carga. La prueba consiste en realizar una serie de movimientos poniendo y quitando una carga
de 5Kg. Los resultados son los siguientes:
Esta grafica correspondiente a la figura 31 es de los motores EC45 sometido a una carga
de 5Kg, pertenecientes a la articulacion de la cadera. En ella se puede observar una respuesta
simultanea de dos motores opuestos entre s, y a pesar de la carga el control de la posicion de
los motores es total. Si analizamos los resultados podemos deducir que se comporta muy similar
a si estuviera trabajando en vaco, por tanto, en la cadera el control de los motores funciona
de forma correcta.
Se va a realizar una conexion, cambiando los parametros para las rodillas, las cuales llevan
incorporados unos motores EC60. Para realizar ese cambio de parametros y como se ha dicho
anteriormente, solo es necesario variar un parametro de entrada en el bloque motor, en nuestro
caso el segundo parametro le pondremos como dato 60.
El ensayo con la articulacion de las rodillas solo se puede hacer con los motores de forma
simultanea, debido a una placa que une la extremidad inferior del exoesqueleto. A la hora de
realizar el ensayo, se ha comprobado que no es capaz de subir por s solo toda la estructura,
sin que alguno de los dos motores entre en una situacion crtica de error.
La figura 33 representa una prueba en vaco de movimiento simultaneo entre los dos motores
de las rodillas. Como se puede observar, y por motivos de diseno del prototipo, estos motores
o esta configuracion de engranajes es incapaz de levantar la estructura, por lo tanto se esta
limitado a la hora de realizar los movimientos y el analisis a no excedernos de 30 grados. Como
se observa en la grafica, cuando la estructura alcanza una amplitud de 28 grados, uno de los
motores falla, provocando el fallo del otro motor debido al peso. Se ha realizado una prueba en
la que se levanta la estructura 45 grados con ayuda humana. Esta ayuda consiste en apoyar a
los motores con una mano en la cadera para que no recaiga todo el peso sobre ellos. Como se
puede observar en la prueba de levantamiento a 45 grados, la prueba ha sido satisfactoria en
cuanto a simultaneidad y comportamiento de motores se refiere.
La figura 34 representa la prueba realizada con ayuda humana del exoesqueleto para poder
realizar movimientos de mas de 28 en los motores de las rodillas. Como se observa, la respuesta
de los motores es totalmente simultanea, de esta forma, podemos afirmar que en un futuro este
algortmo, por su eficacia, sera capaz de realizar tareas de levantarse y sentarse de forma segura.
Para realizar esta prueba, y para comprobar cual es el lmite de la union entre los dos motores
de la cadera, se va a realizar un ensayo, en el cual se le van a dar diferentes posiciones a cada
uno de los motores pero el ensayo se realizara en vaco.
Como se puede observar en la figura 35 los dos motores se mueven de forma independiente
hasta que existe una desviacion maxima entre ambos de 18 grados, por tanto los motores de la
cadera nunca deben de estar desfasados mas de 18 grados, de ser as provocara un error que
nos liberara los motores. Esta prueba se hace ya que a la hora de caminar, la cadera de cada
lado es independiente del lado opuesto, por eso se tiene que comprobar que se puede trabajar
con diferentes posiciones a la vez en ambos lados de la cadera.
ambos es total, y la respuesta a pesar de la diferencia de posiciones dadas es muy eficaz. Esta
prueba se ha realizado para, en un futuro, poder realizar la tarea de caminar, ya que esta
tarea consta de movimientos simultaneos de la cadera pero con diferentes posiciones entre los
diferentes lados.
Una vez realizado este modelo, para poner en funcionamiento y programar el exoesqueleto,
se tienen que estudiar las trayectorias que se desee que realice el exoesqueleto. Para que este
modelo funcione las articulaciones tienen que tener una cierta sinergia entre s, es decir, que
tienen que ser capaces de moverse de forma simultanea o independiente. Como se ha comprobado
anteriormente para los diferentes ensayos, esa sinergia se puede conseguir.
Se ha propuesto este modelo debido a los resultados realizados con el modelo de las articula-
ciones de la cadera y la rodilla trabajando de forma simultanea. Este modelo es similar pero con
una articulacion mas, por este motivo este modelo tiene que funcionar de la misma manera que
el de dos articulaciones completas. El modelo tiene que ser capaz de hacer trabajar de forma
simultanea a las articulaciones, y tambien tiene que ser capaz de hacerlas funcionar de forma
independiente.
En este apartado se van a tratar todos los problemas que han surgido, y las limitaciones que
se han tenido para la correcta realizacion del proyecto. Se han tenido limitaciones de espacio
en la zona de trabajo y de movilidad, as como una limitacion de movimientos por el diseno del
prototipo. Por ultimo y como problema principal, se ha tenido un problema con el derivador
de voltaje que alimenta los motores de los tobillos, los cuales quedaron inutilizados y no se ha
podido probar el exoesqueleto entero.
Otra limitacion relacionada con el espacio, es el cableado, que se situa de forma libre entre
el exoesqueleto y las controladoras. Este cableado es un riesgo de seguridad, debido a que si
en algun momento uno de los cables se queda enganchado en algun sitio, se puede producir la
rotura del mismo o un error en la controladora, el cual nos puede provocar un importante dano
en nuestro prototipo si nos encontramos en ese momento trabajando con el y en movimiento.
Para realizar los movimientos de levantarse, sentarse, andar, ... Se necesita una disponibi-
lidad de capacidad de movimiento del prototipo muy amplia para la realizacion de una forma
natural de todos estos movimientos, la cual este prototipo no cumple de forma natural a ciertos
movimientos.
complejo o diferente, este prototipo nos impedira poder realizar dichos movimientos debido a
su diseno mecanico.
Para intentar solucionar estas limitaciones y problemas, y para optimizar todo el proceso se
proponen una serie de mejoras, las cuales engloban a aspectos como la seguridad para trabajar,
otras opciones de comunicacion posiblemente mas efectivas, ampliacion de sensores para una
mayor seguridad y un nuevo diseno mecanico que permita unos movimientos mas naturales.
Para la mejora del aspecto de seguridad, se propone un banco de pruebas en el que se pueda
trabajar con el exoesqueleto y realizar pruebas sin ningun tipo de limitacion. Para esta mejora
se propone que el exoesqueleto se situe colgado sobre un polipasto. Esta accion permite poder
simular cualquier tipo de movimiento sin riesgo de peligro y con total seguridad.
Para optimizar lo realizado, se propone una comunicacion mediante una red de sensores
CAN. Estas redes son mas factibles debido a que solo se hara una conexion al ordenador, el
cual enviara las ordenes a los diferentes sensores que estan conectados entre s, pero cada uno
es un nodo diferente, pudiendo de esta forma poder intercambiar datos entre ellos y evitar
conexiones independientes de cada controladora por separado. De esta forma se dispondra de
una red interconectada entre s y capaz de interactuar ante cualquier fallo.
Para solucionar este problema se propone implantar algun sistema de seguridad que nos
permita saber la posicion del exoesqueleto de forma exacta. Para ello se propone la implantacion
de una red de encoders absolutos, los cuales nos permitan saber en cada momento en que
posicion estamos, para de esta forma configurar los motores y las trayectorias de forma correcta
y segura antes de cada movimiento. Se proponen los encoders absolutos de la marca Maxon, ya
que son perfectamente compatibles con las entradas de los controladores utilizados.
Para solucionar los problemas de diseno de prototipo se proponen diferentes medidas: reducir
el peso con otro material y reducir angulos entre las extremidades del exoesqueleto.
Para la reduccion de peso del exoesqueleto, se propone la utilizacion de otro tipo de material
mas ligero, pero capaz de resistir la carga para la que el exoesqueleto se necesita. otra medida
para la reduccion de peso es la de la optimizacion del diseno evitando sobredimensionados de
la estructura del exoesqueleto.
Para poder aumentar el rango de movimientos del exoesqueleto, se propone un diseno con
una union entre extremidades circular, lo cual, nos permite unos movimientos practicamente
ilimitados. Como el cuerpo humano tiene unas limitaciones, se propone poner unos sistemas de
seguridad en el lmite de los movimientos naturales, estas medidas de proteccion podran ser
unos interruptores finales de carrera, encoders, o cualquier otro sistema mecanico o electronico
capaz de ofrecer la maxima seguridad.
Como continuacion y finalizacion del proyecto se proponen trabajos futuros con respecto
a algortmos de control de trayectorias. Si se analiza el diagrama de bloques propuesto se
observa que esta preparado para sustituir las entradas a los motores por una funcion que genere
trayectorias. Esta funcion tiene que ser capaz de comunicar todos los motores y condicionar las
entradas de cada uno con respecto a la trayectoria que se vaya a realizar.
Esta trayectoria sera un ejemplo de como afrontar la parte del algortmo de control de
trayectorias. Las trayectorias principales a estudiar seran: Ponerse de pie y sentarse, andar,
subir y bajar escaleras, mantener el equilibrio en plataformas oscilantes, etc.
4. Anexos
%---RUTINA PARA TESTEAR UN MOTOR CONECTADO A USB0, ESTA RUTINA ESTA CONFIGURADA PARA UN
%MOTOR EC45, SI QUEREMOS UN MOTOR EC60 CAMBIAREMOS LA PRIMERA LINEA DE
%CODIGO POR LA SEGUNDA.------------------------------------------------
%--------HABILITAR CONTROLADORA-----------------------
[[Link],[Link], [Link]] = calllib ('EposCmd', 'VCS SetEnableState
[Link], [Link], [Link]);
%-----------------RUTINA DE OPERACION-----------------------
%--------ESTABLECER MODO DE OPERACION-----------------------
[[Link],[Link], [Link]] = calllib ('EposCmd', 'VCS ActivateProfil
[Link], [Link], [Link])
%--------MOVIMIENTO DE ARTICULACIONES-----------------------
[[Link],[Link], [Link]] = calllib ('EposCmd', 'VCS SetPositionPro
%------------RUTINA DE DESCONEXION-----------------------
if cerrar==1
%--------DESHABILITAR CONTROLADORA-----------------------
[[Link],[Link], [Link]] = calllib ('EposCmd', 'VCS SetDisableStat
[Link],[Link], [Link]);
%--------DESCONEXION DE DISPOSITIVOS-----------------------
[[Link],[Link], [Link]] = calllib ('EposCmd', 'VCS CloseDevice',.
[Link], [Link]);
end
Como ejemplos de programacion de simulink se van a poner las paginas de codigo corres-
pondientes a los bloques motor y load library. En estos bloques se realiza toda la accion de
control y comunicacion.
setup(block);
function setup(block)
global gEpos;
global gLibraryLoad;
global gEpos2Conected;
% Register parameters
[Link] = 0;
[Link] = [0 0];
[Link] = 'DefaultSimState';
[Link]('PostPropagationSetup', @DoPostPropSetup);
[Link]('InitializeConditions', @InitializeConditions);
[Link]('Start', @Start);
[Link]('Outputs', @Outputs); % Required
[Link]('Update', @Update);
[Link]('Derivatives', @Derivatives);
[Link]('Terminate', @Terminate); % Required
function DoPostPropSetup(block)
[Link] = 1;
[Link](1).Name = 'x1';
[Link](1).Dimensions = 1;
[Link](1).DatatypeID = 0; % double
function InitializeConditions(block)
global gEpos;
if ~iscell(gEpos)
gEpos = cell(1);
disp('ya es cell por Conf');
end %Fin de inicializar condiciones
function Start(block)
global gLibraryLoad;
set param('exoconencoderintegrator/CargarDLL','BackgroundColor','white')
[notfound, warnings]= loadlibrary ('EposCmd', 'Definitions.h');
gLibraryLoad = libisloaded('EposCmd')+1;
set param('exoconencoderintegrator/CargarDLL','BackgroundColor','green')
[Link](1).Data = 0;
%OUTPUTS
function Outputs(block)
[Link](1).Data;
function Update(block)
[Link](1).Data = 1;
function Derivatives(block)
function Terminate(block)
pause(2);
unloadlibrary EposCmd;
set param('exoconencoderintegrator/CargarDLL','BackgroundColor','red')
function motor(block)
setup(block);
function setup(block)
% Register parameters
[Link] = 2;
[Link] = [0 0];
[Link] = 'DefaultSimState';
[Link]('PostPropagationSetup', @DoPostPropSetup);
[Link]('InitializeConditions', @InitializeConditions);
[Link]('Start', @Start);
[Link]('Outputs', @Outputs); % Required
[Link]('Update', @Update);
[Link]('Derivatives', @Derivatives);
[Link]('Terminate', @Terminate); % Required
function DoPostPropSetup(block)
[Link] = 1;
[Link](1).Name = 'x1';
[Link](1).Dimensions = 1;
[Link](1).DatatypeID = 0; % double
[Link](1).Complexity = 'Real'; % real
[Link](1).UsedAsDiscState = true;
function InitializeConditions(block)
global gEpos
if [Link](2).Data==60
epos=class epos60;
[Link] =[Link](1).Data;
[Link] = USBPortName([Link]);
[Link] = [Link](1).Data+1;
end
%% FIN DE LA ASIGNACION DE MOTOR EC45 O EC60
if ~iscell(gEpos)
gEpos = cell(1);
disp('ya es cell por READ');
end
gEpos{[Link](1).Data+1} = epos;
gEpos{[Link](1).Data+1}
function Start(block)
function Outputs(block)
global gEpos;
global gLibraryLoad;
if (gEpos{[Link](1).Data+1}.Connected==1)
library epos ('get position is', '', gEpos{[Link](1).Data+1});
% OBTENER POSICION DEL SENSOR
if(gEpos{[Link](1).Data+1}.PositionIs ~= [Link](1).Data)
%fprintf('\n( %s, %i, %i)',gEpos{[Link](1).Data+1}.PortName,...
%gEpos{[Link](1).Data+1}.TargetPosition,
gEpos{[Link](1).Data+1}.PositionIs); %MOSTRAR POSICION
gEpos{[Link](1).Data+1}.TargetPosition = [Link](1).Data;
% NUMERO DE PASOS O POSICION ABSOLUTA
movements ('move to position', 'Moviendo', gEpos{[Link](1).Data+1});
% MOVER EL MOTOR
%pause(0.5);
movements ('get position is', '', gEpos{[Link](1).Data+1});
% OBTENER POSICION DEL SENSOR
if(gEpos{[Link](1).Data+1}.ReturnValue~=0)
gEpos{[Link](1).Data+1}.Connected=1;
disp('CORRECTO');
else
disp('ERRORR');
end
end
function Update(block)
function Derivatives(block)
function Terminate(block)
global gEpos;
gEpos{[Link](1).Data+1}.TargetPosition = 0;
% MOVER EL MOTOR
movements ('move to position', 'Moviendo al origen por movements',
gEpos{[Link](1).Data+1});
library epos ('disable', 'Deshabilitando...', gEpos{[Link](1).Data+1});
M 1:2
Programa Stock Referencia
Programa Estndar
Programa Especial (previo encargo)
IP 54* IP 00
M 1:2.5
Programa Stock Referencia
Programa Estndar
Programa Especial (previo encargo)
maxon sensor
Canal A
Desfase
90e
Canal B
s3 s4 s1 s2 s 1..4 = 90e
s < 45e
maxon gear
Juego radial a 12 mm de la brida mx. 0.06 mm
Juego axial con carga axial < 5 N 0 mm
> 5 N mx. 0.3 mm
Mx. carga axial admisible 200 N
Mx. fuerza adm. en acoplamientos a presin 500 N
Sentido de giro, entrada/salida =
Mx. velocidad de entrada en continuo 6000 rpm
Rango de temperatura aconsejado -15+80C
Rango de temp. extendido opcional -40+100C
Nmero de etapas 1 2 3 4
Mx. carga radial adm. a 12 mm
de la brida 420 N 630 N 900 N 900 N
M 1:4
Programa Stock Referencia
Programa Estndar
Programa Especial (previo encargo)
223080 223083 223089 223094 223097 223104 223109
Datos del Reductor
1 Reduccin 3.5:1 12:1 43:1 91:1 150:1 319:1 546:1
2 Reduccin absoluta 7
2 49
4 343
8 91 2401
16 637
2 546
10 Momento de inercia gcm2 20.7 17.6 17.3 16.7 17.3 16.8 16.4
3 Dimetro mx. del eje del motor mm 10 10 10 10 10 10 10
Referencia 223081 223084 223090 223095 223099 223105 223110
1 Reduccin 4.3:1 15:1 53:1 113:1 186:1 353 :1 676:1
2 Reduccin absoluta 13
3 91
6 637
12 338
3 4459
24 28561
81 676
10 Momento de inercia gcm2 12 16.8 17.2 9.3 17.3 9.4 9.1
3 Dimetro mx. del eje del motor mm 8 10 10 8 10 8 8
Referencia 223085 223091 223096 223101 223106 223111
1 Reduccin 19:1 66:1 126:1 230:1 394:1 756:1
2 Reduccin absoluta 169
9 1183
18 126 8281
36 1183
3 756
10 Momento de inercia gcm2 9.5 16.7 16.4 16.8 16.7 16.4
3 Dimetro mx. del eje del motor mm 8 10 10 10 10 10
Referencia 223086 223092 223098 223102 223107 223112
1 Reduccin 21:1 74:1 156:1 257:1 441:1 936:1
2 Reduccin absoluta 21 147
2 156 1029
4 441 936
10 Momento de inercia gcm2 16.5 17.2 9.1 17.3 16.5 9.1
3 Dimetro mx. del eje del motor mm 10 10 8 10 10 8
Referencia 223087 223093 223103 223108
1 Reduccin 26:1 81:1 285:1 488:1
2 Reduccin absoluta 26 219727 1537954 43949
10 Momento de inercia gcm2 9.1 9.4 16.7 9.4
3 Dimetro mx. del eje del motor mm 8 8 10 8
4 Nmero de etapas 1 2 3 3 4 4 4
5 Mx. par en continuo Nm 4 15 30 30 30 30 30
6 Mx. par admisible de forma intermitente Nm 6 22.5 45 45 45 45 45
7 Mx. rendimiento % 91 83 75 75 68 68 68
8 Peso g 460 620 770 770 920 920 920
9 Holgura media en vaco 0.6 0.8 1.0 1.0 1.0 1.0 1.0
11 Longitud reductor L1 mm 49.0 65.0 78.5 78.5 92.0 92.0 92.0
maxon gear
Juego radial a 12 mm de la brida mx. 0.06 mm
Juego axial con carga axial < 5 N 0 mm
> 5 N mx. 0.3 mm
Mx. carga axial admisible 150 N
Mx. fuerza adm. en acoplamientos a presin 300 N
Sentido de giro, entrada/salida =
Mx. velocidad de entrada en continuo 8000 rpm
Rango de temperatura aconsejado -40+100C
Nmero de etapas 1 2 3 4
Mx. carga radial adm. a 12 mm
de la brida 120 N 240 N 360 N 360 N
M 1:4
Programa Stock Referencia
Programa Estndar
Programa Especial (previo encargo)
203113 203115 203119 203120 203124 203129 203128 203133 203137 203141
Datos del Reductor
1 Reduccin 3.5:1 12:1 26:1 43:1 81:1 156:1 150:1 285:1 441:1 756:1
2 Reduccin absoluta 7
2 49
4 26 343
8 2197
27 156 2401
16 15379
54 441 756
10 Momento de inercia gcm2 14 15 9.1 15 9.4 9.1 15 15 14 14
3 Dimetro mx. del eje del motor mm 10 10 8 10 8 8 10 10 10 10
Referencia 203114 203116 260552* 203121 203125 260553* 203130 203134 203138 203142
1 Reduccin 4.3:1 15:1 36:1 53:1 91:1 216:1 186:1 319:1 488:1 936:1
2 Reduccin absoluta 13
3 91
6 36
1 637
12 91 216
1 4459
24 637
2 4394
9 936
10 Momento de inercia gcm2
9.1 15 5.0 15 15 5.0 15 15 9.4 9.1
3 Dimetro mx. del eje del motor mm 8 10 4 10 10 4 10 10 8 8
Referencia 260551* 203117 203122 203126 203131 203135 203139 260554*
1 Reduccin 6:1 19:1 66:1 113:1 230:1 353 :1 546:1 1296:1
2 Reduccin absoluta 6
1 169
9 1183
18 338
3 8281
36 28561
81 546 1296
1
10 Momento de inercia gcm2 4.9 9.4 15 9.4 15 9.4 14 5.0
3 Dimetro mx. del eje del motor mm 4 8 10 8 10 8 10 4
Referencia 203118 203123 203127 203132 203136 203140
1 Reduccin 21:1 74:1 126:1 257:1 394:1 676:1
2 Reduccin absoluta 21 147
2 126 1029
4 1183
3 676
10 Momento de inercia gcm2 14 15 14 15 15 9.1
3 Dimetro mx. del eje del motor mm 10 10 10 10 10 8
4 Nmero de etapas 1 2 2 3 3 3 4 4 4 4
5 Mx. par en continuo Nm 3.0 7.5 7.5 15.0 15.0 15.0 15.0 15.0 15.0 15.0
6 Mx. par admisible de forma intermitente Nm 4.5 11.3 11.3 22.5 22.5 22.5 22.5 22.5 22.5 22.5
7 Mx. rendimiento % 90 81 81 72 72 72 64 64 64 64
8 Peso g 260 360 360 460 460 460 560 560 560 560
9 Holgura media en vaco 0.6 0.8 0.8 1.0 1.0 1.0 1.0 1.0 1.0 1.0
11 Longitud reductor L1 mm 41.0 55.5 55.5 70.0 70.0 70.0 84.5 84.5 84.5 84.5
*no combinacin con motor EC 45 (150 W y 250 W)
Referencias
[1] Fundamentos de Robotica. Antonio Barrientos. MCGraw-Hill
[3] Karlj, A.R. and Bajd, T. (1989). Functional electrical stimulation: standing and walking
after spinal cord injury. Boca Raton, Fla : CRC Press, c1989
[4] Robotica: control, deteccion, vision e inteligencia. K.S. Fu, R.C. Gonzalez y C.S.G. Lee.
McGraw-Hill