162
1.1 ESTRUCTURA DEL PROYECTO i Simulación y Control de un Exoesqueleto Robótico Grado en Ingeniería Robótica Trabajo Fin de Grado Autora: Sheila Sánchez Rodríguez Tutor/es: Jorge Pomares Baeza Junio 2021

Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1.1 ESTRUCTURA DEL PROYECTO

i

Simulación y Control

de un Exoesqueleto

Robótico

Grado en Ingeniería Robótica

Trabajo Fin de Grado

Autora:

Sheila Sánchez Rodríguez

Tutor/es:

Jorge Pomares Baeza

Junio 2021

Page 2: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 3: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Simulación y Control de un Exoesqueleto

Robótico

Autora

Sheila Sánchez Rodríguez

Tutor

Jorge Pomares Baeza

Grado en Ingeniería Robótica

ALICANTE, Junio 2021

Page 4: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 5: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

i

Resumen

En este proyecto, se ha partido del exoesqueleto de Project MARCH para realizar una

serie de mejoras en lo que se refiere al diseño y el control, de forma que sus capacidades de

movimiento sean lo más semejantes posible a la marcha humana.

En el primer lugar se ha llevado a cabo un estudio de los diferentes marcos teóricos que

impulsan este proyecto. Se hacen notable las ventajas de utilizar la robótica de rehabilitación,

se citan los distintos dispositivos de rehabilitación existentes y se realiza un estudio sobre

distintos exoesqueletos vestibles de miembro inferior, mostrando sus características físicas

y técnicas.

Después, se explica en qué consiste la marcha humana, destacando las alteraciones a las

que se puede enfrentar tras sufrir un accidente. Para finalizar este apartado, se mostrará el

marco teórico del control de robots, explicando qué son la cinemática y la dinámica de un

robot, se diferencia el análisis cinemático del análisis dinámico y se hace una distinción entre

los distintos tipos de control dinámico.

Una vez terminado el marco teórico, se formulará toda la metodología sobre sistemas de

control que supone la base de este proyecto, realizando una introducción ROS_Control,

detallando los componentes de un controlador creado en ROS, así como la interconexión de

los mismos y el mecanismo que sigue para su ejecución, ya que supone la base para el

desarrollo del proyecto.

Page 6: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

ii

A continuación, tiene lugar el modelado del exoesqueleto, desde su diseño hasta su

análisis cinemático, su simulación, un análisis del patrón de marcha y una mejora del mismo.

De igual forma, se examina su comportamiento ante distintos obstáculos y terrenos varios,

procediendo a adaptar los patrones de marcha para hacerles frente.

Finalmente, identifica el tipo de control que realiza, se llevan a cabo una serie de mejoras

en el controlador con el objetivo de reducir el error obtenido en la ejecución de la marcha y

se expondrá de forma analítica los pasos seguidos para obtener valores que reduzcan el error.

Page 7: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

iii

Preámbulo: Motivación, justificación y objetivo

general

Siempre he considerado que la robótica es una ciencia que debe orientarse a la mejora de

la calidad de vida de los seres vivos. La robótica médica de rehabilitación, ha sido desde un

principio mi principal campo de interés, ya que siempre lo he considerado una forma directa

de prestar servicio a personas que, por diversas circunstancias, no pueden realizar tareas tan

simples para el ser humano como coger un objeto o caminar. Mediante la robótica de

rehabilitación, es posible brindarles la oportunidad de adquirir las capacidades motoras

necesarias para poder vivir en las mejores condiciones posibles.

Por otro lado, a lo largo de la carrera diversas asignaturas han creado un gran nivel de

interés en mí, como pueden ser el modelado de robots, la ingeniería de control o el control

de robots. Fue cuando cursé esta última, que me puse en contacto con el tutor para establecer

un proyecto en el cual podría unificar mis principales puntos de interés realizando un

modelado, simulación y control de un exoesqueleto robótico.

Tras una investigación inicial, se dio con el grupo Project MARCH, el cual se encarga

cada año de añadir mejoras a su exoesqueleto robótico de miembro inferior. Pude ponerme

en contacto directo con su equipo, el cual me proporcionó una serie de herramientas iniciales

para poder trabajar con su exoesqueleto.

Desgraciadamente, no fue posible probar las mejoras realizadas en el exoesqueleto real,

pero sí se compartió el trabajo realizado con Project MARCH, quienes estuvieron

enormemente agradecidos.

Page 8: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 9: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

v

Agradecimientos

En primer lugar, quisiera agradecer a los profesores que forman parte del grupo de

investigación Human Robotics, haciendo especial mención a Jorge, Carlos y Andrés, por

permitirme adentrarme en el campo de la robótica que tanto me apasiona, por depositar su

confianza en mí y por proporcionarme sus conocimientos en el sector. Quisiera agradecerles

por brindarme tantas oportunidades, acogerme en el grupo y ser profesionales tan humildes.

En segundo lugar, agradecer enormemente a mi pareja y amigos, quienes han sido un

apoyo fundamental durante estos cuatro años, han estado ahí para levantarme, animarme y

hacerme más fuerte frente a todas las adversidades que he ido encontrando por el camino.

Quisiera hacer una mención especial a mis amigos de la carrera, Carmen, Carlos, Adrián,

Ramón y Víctor, quienes me han ayudado en todo momento de dificultad y han logrado que

este tiempo haya sido una de las mejores experiencias de mi vida que nunca olvidaré. El

mayor regalo que me llevo de la universidad, sois vosotros.

En último lugar, y más importante, quisiera agradecer a mi familia su apoyo incondicional

y su confianza depositada en mí. Porque siempre habéis apostado por mí, porque sin vosotros

no habría llegado a donde estoy hoy, porque me habéis hecho fuerte. Siempre estaré ahí para

vosotros, al igual que lo habéis estado siempre para mí, cada vez que el mundo se me venía

encima. Gracias papá, por enseñarme a tener fe y no perder nunca la esperanza. Gracias

mamá, por convertirme en la mujer luchadora que soy. Gracias a ti también Nerea, por

quererme por encima de todo, espero haber sido un buen referente para ti y espero que

llegues muy lejos.

Page 10: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 11: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

vii

A mis padres y mi hermana, quienes

me han convertido en todo lo que soy.

Sin su apoyo, amor y comprensión nada

de esto hubiera sido posible.

Page 12: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 13: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

ix

No te conformes con el mundo que has heredado.

Nunca se ha resuelto un desafío

sin personas que pensasen diferente.

Tim Cook.

Page 14: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 15: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Índice general

1. Introducción .......................................................................................................... 1

1.1 Estructura del proyecto ............................................................................................... 3

2. Estado del arte ....................................................................................................... 7

2.1 ¿Por qué usar robots en rehabilitación? ...................................................................... 7

2.2 Dispositivos robóticos de rehabilitación ..................................................................... 9

2.3 Exoesqueletos vestibles de miembro inferior ........................................................... 13

2.4 La marcha humana .................................................................................................... 18

2.4.1 Alteraciones de la marcha humana tras sufrir un accidente ....................................... 20

2.5 Control de robots ...................................................................................................... 21

2.5.1 Cinemática y control cinemático ................................................................................ 21

2.6.2 Dinámica y control dinámico ..................................................................................... 24

3. Objetivos .............................................................................................................. 27

4. Metodología ......................................................................................................... 29

4.1 Control dinámico multiarticular ................................................................................ 29

4.2 Controladores de posición multiarticulares .............................................................. 30

4.2.1 Control PD .................................................................................................................. 31

4.2.2 Control PID ................................................................................................................ 35

Page 16: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_Control ............................................................................................................ 37

4.3.1 Funcionamiento de los controladores en ROS............................................................ 40

5. Desarrollo ............................................................................................................ 43

5.1 Modelado del exoesqueleto ...................................................................................... 44

5.2 Análisis cinemático .................................................................................................. 52

5.3 Modificación del patrón de marcha .......................................................................... 59

5.4 Introducción de obstáculos ....................................................................................... 66

5.5 Análisis del controlador ............................................................................................ 71

5.6 Modificaciones del controlador ................................................................................ 73

6. Pruebas y experimentación ...................................................................................... 81

6.1 Patrones de marcha ................................................................................................... 81

6.2 Modificación del controlador ................................................................................... 92

7. Conclusiones ............................................................................................................ 103

7.1 Trabajos futuros ...................................................................................................... 104

Bibliografía .................................................................................................................. 107

Lista de Acrónimos y Abreviaturas .......................................................................... 111

A. Anexo I: Código URDF del exoesqueleto creado ................................................ 113

B. Anexo II: Código de configuración de parámetros ............................................. 133

C. Anexo III: Código para establecer el patrón de marcha ................................... 135

Page 17: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Índice de figuras

Fig. 2.1: exoesqueleto anclado ........................................................................................ 11

Fig. 2.2: robot industrial de rehabilitación ...................................................................... 11

Fig. 2.3: dispositivo anclado de efector final .................................................................. 12

Fig. 2.4: exoesqueleto vestible ........................................................................................ 12

Fig. 2.5: exoesqueleto ReWalk ....................................................................................... 13

Fig. 2.6: exoesqueleto Rex .............................................................................................. 14

Fig. 2.7: exoesqueleto HAL ............................................................................................ 15

Fig. 2.8: exoesqueleto H3 ............................................................................................... 16

Fig. 2.9: exoesqueleto HANK ......................................................................................... 17

Fig. 2.10: exoesqueleto MARCH ................................................................................... 18

Fig. 2.11: fases de la marcha ........................................................................................... 19

Fig. 4.1: esquema básico de un controlador multiarticular ............................................. 31

Fig. 4.2: controlador PD de posición multiarticular ....................................................... 32

Fig. 4.3: controlador PID ................................................................................................ 36

Fig. 4.4: estructura de paquetes de ROS. http://wiki.ros.org/Books ............................... 38

Fig. 4.5: esquema interno de ROS_Control. http://wiki.ros.org/ros_control .................. 39

Page 18: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Fig. 5.1: exoesqueleto MARCH en Gazebo ................................................................... 44

Fig. 5.2: agarre del eslabón inferior del exoesqueleto a la pierna del paciente. ............. 47

Fig. 5.3: eslabones de la parte inferior de la pierna del exoesqueleto. ........................... 47

Fig. 5.4: relación padre-hijo de un fichero URDF .......................................................... 48

Fig. 5.5: exoesqueleto creado para la simulación en Gazebo. ........................................ 51

Fig. 5.6: nuevo exoesqueleto con diferentes longitudes de tibias .................................. 52

Fig. 5.7: modelado de una pierna ................................................................................... 53

Fig. 5.8: pasos 1 y 2 del algoritmo DH ........................................................................... 54

Fig. 5.9: pasos 3 y 4 algoritmo DH ................................................................................ 55

Fig. 5.10: pasos 5-7 algoritmo DH ................................................................................. 55

Fig. 5.11: pasos 8 y 9 algoritmo DH .............................................................................. 56

Fig. 5.12: interfaz rqt para mover el exoesqueleto. ........................................................ 61

Fig. 5.13: pie colisionando con el suelo ......................................................................... 61

Fig. 5.14: gráficas de variables articulares en el tiempo para Right_swing ................... 65

Fig. 5.15: simulación de escaleras .................................................................................. 66

Fig. 5.16: patrón subida de escalera con la pierna derecha ............................................ 67

Fig. 5.17: simulación de la rampa................................................................................... 68

Fig. 5.18: patrón subida de rampa con la pierna derecha ............................................... 68

Fig. 5.19: simulación en plano inclinado ........................................................................ 69

Fig. 5.20: patrón balanceo pierna izquierda en un plano inclinado ................................ 70

Fig. 5.21: exoesqueleto sentado en el banco .................................................................. 70

Page 19: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Fig. 5.22: patrón para sentarse ....................................................................................... 71

Fig. 5.23: diagrama de bloques de un control con realimentación. ................................ 73

Fig. 5.24: diagrama de bloques de un control PD de posición. ...................................... 75

Fig. 6.1: articulaciones hip_aa ejecutando el patrón walk. ............................................. 81

Fig. 6.2: articulaciones hip_fe para el patrón walk. ........................................................ 82

Fig. 6.3: articulaciones knee para el patrón walk. .......................................................... 82

Fig. 6.4: articulaciones ankle del patrón walk ................................................................ 83

Fig. 6.5: articulaciones hip_aa para el patrón stairs. ....................................................... 84

Fig. 6.6: articulaciones hip_fee durante el patrón stairs. ................................................ 84

Fig. 6.7: articulación knee para el patrón stairs .............................................................. 85

Fig. 6.8: articulación ankle para el patrón stairs. ............................................................ 85

Fig. 6.9: articulación hip_aa para el patrón ramp. .......................................................... 86

Fig. 6.10: articulación hip_fee para el patrón ramp. ....................................................... 86

Fig. 6.11: articulación knee para el patrón ramp. ........................................................... 87

Fig. 6.12: articulación ankle para el patrón ramp. .......................................................... 87

Fig. 6.13: articulación hip_aa para el patrón tilted_path ................................................ 88

Fig. 6.14: articulación hip_fe del patrón tilted_path. ...................................................... 89

Fig. 6.15: articulación knee para el patrón tilted_path ................................................... 89

Fig. 6.16: articulación ankle para el patrón tilted_path .................................................. 90

Fig. 6.17: articulación hip_aa para el patrón sit. ............................................................. 90

Fig. 6.18: articulación hip_fe para el patrón sit .............................................................. 91

Page 20: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Fig. 6.19: articulación knee para el patrón sit................................................................. 91

Fig. 6.20: articulación ankle del patrón sit ..................................................................... 92

Fig. 6.21: errores primera articulación de la cadera en el patrón walk. .......................... 94

Fig 6.22: errores segunda articulación de la cadera en el patrón walk ........................... 94

Fig. 6.23: errores articulación de la rodilla para el patrón walk. .................................... 95

Fig. 6.24: error articulación del tobillo para el patrón walk. .......................................... 95

Fig. 6.25: errores primera articulación de la cadera para el patrón stairs. ...................... 96

Fig. 6.26: error segunda articulación de la cadera para el patrón stairs. ........................ 97

Fig. 6.27: error articulación de la rodilla para el patrón stairs........................................ 97

Fig. 6.28: error articulación del tobillo para el patrón stairs. ......................................... 98

Fig. 6.29: error primera articulación de la cadera para el patrón sit. .............................. 99

Fig. 6.30: error segunda articulación de la cadera para el patrón sit. ............................. 99

Fig. 6.31: error articulación de la rodilla para el patrón sit. ......................................... 100

Fig. 6.32: error articulaciones del tobillo para el patrón sit .......................................... 100

Page 21: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

Índice de tablas

Tabla 5.1. Parámetros Denavit Hartenberg ..................................................................... 57

Tabla 6.1: gancias para la articulación hip_aa ................................................................ 93

Tabla 6.2: gancias para la articulación hip_fe ................................................................ 93

Tabla 6.3: gancias para la articulación knee ................................................................... 93

Tabla 6.4: gancias para la articulación ankle .................................................................. 93

Page 22: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 23: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

xiv

Índice de códigos

Código 5.1 March_simulation.launch ............................................................................. 45

Código 5.2. March.launch ............................................................................................... 46

Código 5.3 March_world.launch .................................................................................... 46

Código 5.4 Lower_leg link ............................................................................................. 49

Código 5.5 Support link .................................................................................................. 49

Código 5.6 Fixed joint .................................................................................................... 49

Código 5.7 Support inertia .............................................................................................. 50

Código 5.8 Lower_leg inertia ......................................................................................... 50

Código 5.9 Gazebo colours ............................................................................................. 51

Código 5.10 Ejemplo subgait .......................................................................................... 63

Código 5.11 Walk.gait .................................................................................................... 63

Código 5.12 Default.yaml ............................................................................................... 64

Page 24: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 25: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1

1. Introducción

La robótica es una ciencia o rama de la tecnología, que estudia el análisis, diseño,

construcción y aplicación de robots, los cuales, son capaces de desempeñar tareas realizadas

por el ser humano, principalmente laboriosas, repetitivas o peligrosas. Se apoya en diversas

ramas como son la mecánica, la electrónica, el control automático y los sistemas

computacionales. Entre 1960 y 1990 la robótica se centra en aplicaciones industriales,

buscando eficiencia, productividad, seguridad y costes. A partir de 1990, los robots se

extienden a todos los sectores, adquiriendo capacidades muy variadas y convirtiéndose en

sistemas más robustos.

La robótica de servicios surge de la aparición de nuevas necesidades tanto en el ámbito

personal, donde se encuentra la asistencia sanitaria, doméstica o en lugares públicos; como

en el ámbito profesional, en tareas de limpieza, mantenimiento, construcción o medicina. Un

robot de servicios es aquel que opera de forma semi o totalmente autónoma para

proporcionar servicios o tareas útiles para los seres humanos, excluyendo las operaciones de

automatización industrial.

En función de su tarea realizada, un robot de servicio se puede clasificar en robots de

servicio personal o de servicio profesional. Los primeros tienen un uso no comercial, están

orientados a la asistencia de personas y se diferencian en robots médicos, que se usan para

diagnosticar, tratar o rehabilitar pacientes y robots no médicos. Los segundos, son usados en

actividades comerciales y operados normalmente por una persona cualificada.

Page 26: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1. INTRODUCCIÓN

2

En función de su relación con el ser humano, un robot de servicio se puede clasificar en

robots de clase 1, que reemplazan a humanos en entornos sucios, peligrosos o en operaciones

tediosas; de clase 2, que operan cerca de los humanos para aliviar su incomodidad o

incrementar su confort; y robots de clase 3, que operan directamente con humanos.

Los robots de servicio se encuentran en continúa interacción con los seres humanos, por

lo que es importante modelar dicha interacción. Puede ser de tres tipos: física, remota o

social. La interacción remota es el tipo de interacción utilizada en robots de servicio de clase

1, puesto que trabajan en entornos donde el ser humano no puede o no quiere acceder, y su

campo principal de estudio es la teleoperación o telerobótica. En la interacción física, la

seguridad es uno de los factores más importantes, ya que implica un contacto directo de la

persona con el robot. Es el tipo de interacción utilizada en robots de servicio de clase 2 y

más comúnmente en robots de servicio de clase 3. Por último, la interacción social, es la

forma de interacción presente en la robótica humanoide, donde el usuario se relaciona de

forma afectiva, cognitiva y social con un robot. La disciplina principal que estudia el

comportamiento de los robots en relación a su interacción social con el humano se llama

robótica cognitiva, y es utilizada en robots de servicio de clase 2.

La robótica de rehabilitación es uno de los campos de mayor interés en la actualidad,

dentro de la robótica de servicios. Sirve de asistencia al trabajo de los fisioterapeutas

permitiéndoles desarrollar ejercicios de rehabilitación de mayor calidad. Por otro lado, les

otorga la capacidad de obtener un diagnóstico de lesiones con más precisión y controlar con

mayor exactitud la evolución de los pacientes. La rehabilitación y diagnosis de las

extremidades inferiores es muy frecuente y necesaria debido a la gran cantidad de accidentes

a los que están expuestas estas extremidades.

La pérdida de la función muscular puede ser causada por una enfermedad del músculo en

sí (miopatía), una enfermedad del área en la que se encuentran el músculo y el nervio (unión

neuromuscular) o una enfermedad del sistema nervioso. Este último caso puede darse por

daño a nervios (neuropatía), lesión de la médula espinal (mielopatía) o daño cerebral

(accidente cerebrovascular u otra lesión cerebral). Hoy en día, los accidentes

Page 27: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1 INTRODUCCIÓN

3

cerebrovasculares (ACV) representan la primera causa de discapacidad en los países

desarrollados y la tercera causa de muerte en el mundo. La hemiplejia es un trastorno en el

cual el paciente posee la mitad del cuerpo paralizada, y por lo general, es causada por un

ACV. Dada la gran cantidad de enfermedades que pueden causar trastornos en el sistema

neuromuscular, es de vital importancia encontrar soluciones efectivas que disminuyan o

eliminen las limitaciones de movilidad o discapacidad que ocasionan.

Las terapias de rehabilitación, aplicadas principalmente por un fisioterapeuta, son

procedimientos clave para que los pacientes puedan reanudar las actividades de la vida

cotidiana. Existen dos tipos de rehabilitación: pasiva y activa. En la primera, el terapeuta es

el que moviliza las extremidades sin ningún esfuerzo por parte del paciente, es decir, la

persona no tiene fuerza muscular; como, por ejemplo, las personas con hemiplejia. En la

segunda, el individuo puede realizar los ejercicios por sí mismo de forma voluntaria, y en

cuanto a su clasificación se divide en: asistida, libre y resistida.

1.1 Estructura del proyecto

El presente proyecto se divide en varios apartados, en los cuales se realizará un recorrido

a lo largo de todos los temas tratados, con el fin de separarlos de forma clara, lo que facilitará

su estudio, lectura y comprensión.

En el primer capítulo se ha realizado una introducción a la ciencia de la robótica, haciendo

especial hincapié en el área de la robótica de servicios, exponiendo su definición, y sus

diferentes clasificaciones en función de su tarea realizada, la relación con el ser humano y el

tipo de interacción. Posteriormente, esta área se ha centrado en la robótica de rehabilitación,

haciendo presente sus objetivos y sus casos de uso.

En el segundo apartado se llevará a cabo un estudio de los diferentes marcos teóricos que

impulsan este proyecto. Se comenzará haciendo notable las ventajas de utilizar la robótica

de rehabilitación y se continuará citando los distintos dispositivos de rehabilitación

existentes. A continuación, se realizará un estudio sobre distintos exoesqueletos vestibles de

Page 28: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1.1 ESTRUCTURA DEL PROYECTO

4

miembro inferior existentes en la actualidad, mostrando sus características físicas y

técnicas. Después, se explicará en qué consiste la marcha humana, destacando las

alteraciones a las que se puede enfrentar tras sufrir un accidente. Para finalizar este apartado,

se mostrará el marco teórico del control de robots. Se comienza explicando qué son la

cinemática y la dinámica de un robot, resaltando cuáles son las funciones de cada una. A

continuación, se diferencia el análisis cinemático del análisis dinámico y se hace una

distinción entre los controladores dinámicos monoarticulares y los controladores dinámicos

multiarticulares.

En el tercer punto se enumeran los distintos objetivos que pretende lograr este

proyecto, teniendo en cuenta desde el nivel más inferior de entender cómo funciona el

entorno de programación, hasta el nivel más alto del diseño propio, la creación de patrones

propios y la modificación de controladores.

En el cuarto capítulo, se formulará toda la metodología sobre sistemas de control que

supone la base de este proyecto. En primer lugar, se hace una pequeña introducción a ROS

y ROS_Control, explicando su estructura y funcionamiento. Posteriormente, se detallan los

componentes de un controlador creado en ROS, así como la interconexión de los mismos y

el mecanismo que sigue para su ejecución.

En el siguiente punto es donde se explicará todo el desarrollo que ha supuesto este

proyecto, en el que se harán presentes todos los objetivos expuestos con anterioridad. Se

comenzará con el modelado del exoesqueleto, desde su diseño hasta su análisis cinemático.

Seguidamente, tendrá lugar su simulación, un análisis del patrón de marcha y una mejora del

mismo. De igual forma, se examinará su comportamiento ante distintos obstáculos y terrenos

varios, procediendo a adaptar los patrones de marcha para hacerles frente. Finalmente, se

explicará cómo es el funcionamiento del controlador. Se desglosarán las partes del mismo,

según el esquema expuesto en el punto anterior y se identificará el tipo de control que realiza.

Además, se realizarán una serie de mejoras en el controlador con el objetivo de reducir el

error obtenido en la ejecución de la marcha. Se expondrá de forma analítica los pasos

seguidos para obtener valores que minimicen el error articular

Page 29: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

1.1 ESTRUCTURA DEL PROYECTO

5

En el apartado sexto, se mostrarán los resultados obtenidos. Primero, se hará una breve

demostración de que efectivamente el exoesqueleto está siguiendo los nuevos patrones de

marcha diseñados anteriormente para enfrentarse a distintas situaciones. Posteriormente, se

detallarán los resultados obtenidos con el cálculo de nuevos valores de ganancias, mostrando

tanto las especificaciones utilizadas para el cálculo como los resultados gráficos.

En el último capítulo, se realizará una conclusión, en la cual se analizarán los resultados

obtenidos, detallando los objetivos que se han logrado cumplir y las dificultades encontradas

en el desarrollo del presente proyecto. Además, se expondrán una serie de mejoras que se

consideran posibles partiendo de lo que se ha logrado en este proyecto.

Page 30: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 31: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

7

2. Estado del arte

En este segundo capítulo se ponen en manifiesto los conocimientos, investigaciones y

proyectos más recientes, que sirven como base intelectual para el desarrollo del presente

proyecto. Se expondrán las razones por las que utilizar robots en rehabilitación resulta

beneficioso para la recuperación del paciente, así como los distintos tipos de dispositivos

robóticos de rehabilitación que se pueden encontrar. Además, se realizará un análisis de

diversos exoesqueletos vestibles de miembro inferior detallando sus características técnicas

y físicas, de forma que sirvan como base para un futuro diseño.

Por otra parte, se explicará en qué consiste la marcha humana, realizando un recorrido

por cada una de las fases, en las cuales se explicará el posicionamiento de la pierna.

Posteriormente, se hará un estudio de las alteraciones a las que se puede enfrentar la marcha

humana tras sufrir un accidente. Para finalizar este apartado, se mostrará el marco teórico

del control de robots. Se explicará en detalle en qué consiste el control dinámico

multiarticular, sus ventajas frente al monoarticular y los dos tipos que existen de este control.

Además, se explicará de forma analítica el funcionamiento de algunos controladores

específicos y se analizará su estabilidad.

2.1 ¿Por qué usar robots en rehabilitación?

Una persona que padece alguna discapacidad motriz en los miembros inferiores debe estar

sometida a constantes terapias de rehabilitación por un largo periodo de tiempo para poder

recuperar movilidad. Las terapias de rehabilitación son rutinas de ejercicios repetitivos que

tienen lugar bajo la supervisión de un fisioterapeuta.

Page 32: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.1 POR QÚE USAR ROBOTS EN REHABILITACIÓN

8

En ocasiones, dichas terapias son realizadas de manera errónea debido a una escasez de

personal para atender a todos los pacientes o por fatiga del propio terapeuta. Una forma de

poner fin a este problema es mediante el desarrollo de dispositivos robóticos. Son muchos

los investigadores que han demostrado importantes beneficios en el uso de robots durante

las terapias de rehabilitación.

Una de las principales ventajas reside en el hecho de reemplazar el esfuerzo físico del

terapeuta. Utilizando un sistema robótico, la intensidad de los ejercicios permanece

constante ya que la fatiga humana es un factor que desaparece completamente. Además,

reducen de manera considerable el tiempo necesario para la recuperación motriz del paciente

al realizar ejercicios de manera sistemática.

Por otro lado, ofrecen ventajas importantes respecto a la fuerza muscular, el aumento de

las puntuaciones clínicas y un grado mayor de recuperación de la independencia funcional.

Tal y como ha expuesto el doctor Enrique Sainz de Murrieta, especialista en Medicina Física

y Rehabilitación: <<las personas que reciben entrenamiento de la marcha asistida de forma

electromecánica combinada con fisioterapia tras sufrir un ictus, tienen mayores

probabilidades de caminar de forma independiente>>.

También cabe mencionar que el uso de robots facilita el aprendizaje motor. La amplia

variedad de dispositivos y sistemas robóticos existentes han sido creados para facilitar la

adquisición o mejora de habilidades motoras. Están diseñados por expertos y su uso está

respaldado por la evidencia científica; es decir, hay estudios que demuestran su efectividad,

especialmente en participantes con daños neurológicos como personas que han sufrido un

accidente cerebrovascular, con parálisis cerebral infantil, daño cerebral adquirido…

Los dispositivos robóticos están diseñados para obtener métricas más exactas y objetivas

tanto de los procesos como de la síntesis de resultados. Estos datos los utiliza un equipo de

especialistas para diseñar el método más efectivo de abordar el problema e ir reevaluando y

modificándolo de forma permanente y personalizada. Del mismo modo, facilita que los

Page 33: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.1 POR QÚE USAR ROBOTS EN REHABILITACIÓN

9

médicos rehabilitadores y el resto de profesionales involucrados compartan el conocimiento

de los avances mediante el registro de las métricas en bases de datos en caso de necesidad.

En último lugar, es importante destacar que muchos pacientes consideran que los

exoesqueletos son motivadores y emocionantes. Algunos pacientes describen beneficios

psicológicos en el hecho de estar de pie con los compañeros y participar más activamente en

la recuperación de la capacidad de caminar.

Sin embargo, el uso de dispositivos robóticos no sustituye a la terapia tradicional sino que

los robots son complementarios y sirven para potenciar y ampliar las posibilidades

funcionales de los participantes. No se trata de sustituir a los terapeutas humanos sino de

permitir más y mejor terapia complementando la terapia habitual personalizada y única con

terapeuta y paciente, con terapia asistida con robot, donde los profesionales siguen

manejando la máquina, cambiando sus parámetros y adaptándola a las respuestas del

paciente.

Son muchos los fisioterapeutas que apoyan el uso de exoesqueletos en rehabilitación,

aunque sugiriendo ciertas mejoras en el diseño para que sean más seguros y fáciles de

utilizar. Entre estas sugerencias se encuentran reducir el peso y el volumen de los

exoesqueletos, agregar una mayor capacidad de ajuste, mejorar la durabilidad, agregar

controles de una sola mano, optimizar los exoesqueletos para su uso en las escaleras o

terrenos irregulares, y permitir al usuario mantener el equilibrio sin el apoyo del brazo.

2.2 Dispositivos robóticos de rehabilitación

Los robots de rehabilitación cumplen una serie de restricciones biomecánicas que vienen

impuestas por la propia naturaleza dinámica del ser humano. Los dispositivos de

rehabilitación se subdividen en robots vestibles, que permiten realizar un control y una

asistencia directa a las funciones motoras; y robots de efector final, que únicamente controlar

la trayectoria del efector final del paciente, como puede ser la mano, la muñeca, el pie, el

tobillo, etc.

Page 34: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.2 DISPOSITIVOS ROBÓTICOS DE REHABILITAICIÓN

10

Una vez establecido el tipo de control que se desea llevar a cabo, surgen dos alternativas

para el diseño del robot: antropomórfica y no antropomórfica. En la primera la estructura del

robot se adapta al cuerpo humano mientras que la segunda no está sujeta a restricciones

morfológicas, lo que implica un diseño más complejo.

Dependiendo del área del cuerpo que pretendan rehabilitar se pueden diferenciar los

robots de rehabilitación de miembro superior o de miembro inferior. La rehabilitación de un

miembro superior consiste en recuperar la movilidad de brazos y manos, los cuales son muy

complejos y versátiles. Incluyen movimientos de alcance, manipulación, agarre, movimiento

de los dedos o control bimanual, que están asociados a un control cortico-muscular; es decir,

son proyecciones directas del córtex en las motoneuronas. La rehabilitación de un miembro

inferior, se basa en la locomoción, centrándose en el inicio y fin de la marcha y en la

corrección de la misma. Suele ser más sencilla que la de miembro superior y su objetivo

principal es que el paciente pueda deambular sin ayuda externa de muletas, andadores o sillas

de ruedas.

Para ambos miembros, los robots de rehabilitación se pueden clasificar de forma general

en cuatro grandes grupos:

Los exoesqueletos anclados son órtesis complejas cuya base está anclada al techo, pared

o suelo. Permiten una mayor dinámica de movimiento, pero requieren mucho más espacio

para situar el robot. Algunos ejemplos son ARMin III, L-exos, ARMEO POWER (14) para

miembro superior y Lokomat (15), LOPES o KineAssit (16) para miembro inferior.

Page 35: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.2 DISPOSITIVOS ROBÓTICOS DE REHABILITACIÓN

11

(A) miembro superior (B) miembro inferior

Fig. 2.1: exoesqueleto anclado

Los robots industriales para rehabilitación de efector final, fueron de las primeras técnicas

utilizadas y las que menos habilidades funcionales del paciente permiten. Consisten en un

robot de tipo industrial, como puede ser un manipulador, cuyo efector final sostiene al del

paciente y controla su trayectoria. Un ejemplo de este tipo de robots es el UR5 de Universal

Robots (17).

(A) miembro superior (B) miembro inferior

Fig. 2.2: robot industrial de rehabilitación

Los dispositivos anclados de efector final son aquellos cuyo efector final es manejado por

el paciente para realizar las distintas actividades. Son una mejora de los anteriores y han sido

diseñados específicamente para tareas de rehabilitación. Algunos ejemplos de este tipo de

Page 36: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.2 DISPOSITIVOS ROBÓTICOS DE REHABILITACIÓN

12

robots de rehabilitación son Amadeo (18) o MIT Manus para miembro superior y TobiBot

para miembro inferior.

(A) miembro superior (B) miembro inferior

Fig. 2.3: dispositivo anclado de efector final

Los exoesqueletos vestibles son órtesis complejas sin anclajes que tienen un diseño

antropomórfico que se adapta completamente al cuerpo del paciente. Su gran ventaja es que

permiten el movimiento ambulatorio totalmente libre por todo el espacio y una mayor

participación por parte del paciente, de forma que la rehabilitación sea más natural. Algunos

ejemplos son MyoPro (19), de miembro superior y EksoGT, Hank (24), ReWalk (20) , entre

otros, de miembro inferior. En este tipo de dispositivos robóticos entraremos más en detalle

en el siguiente apartado.

(A) miembro superior (B) miembro inferior

Fig. 2.4: exoesqueleto vestible

Page 37: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

13

2.3 Exoesqueletos vestibles de miembro inferior

En este capítulo se analizarán distintos ejemplos de exoesqueletos de miembro inferior,

se evaluarán sus características y finalmente se escogerá uno de ellos para posteriormente

llevar a cabo su simulación y control.

ReWalk (20): se ha desarrollado para su uso en clínicas, donde se puede utilizar para

ejercicios y terapias para sus pacientes. El sistema alimentado por batería está diseñado para

uso durante todo el día e incluye un exoesqueleto ligero y portátil con motores en las

articulaciones de la cadera y la rodilla.

El ReWalker controla los movimientos con ligeros cambios del centro de gravedad del

cuerpo del paciente. El sistema percibe una ligera curva hacia adelante de la parte superior

del cuerpo, lo que inicia el primer paso. El cambio repetido del peso corporal desencadena

una serie de pasos que imitan el movimiento normal de las piernas.

Se puede configurar de forma precisa y específica para el cliente. La interfaz gráfica de

usuario permite al terapeuta ingresar una gran cantidad de parámetros para cada individuo y

adaptarlos continuamente al progreso del entrenamiento.

Fig. 2.5: exoesqueleto ReWalk

Page 38: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.3 EXOESQUELETOS VESTIBLES DE MIEMBRO INFERIOR

14

REX (21) es un dispositivo robótico de rehabilitación diseñado para personas con

problemas de movilidad, incluidos aquellos con discapacidades más graves, ofreciendo una

mejora de la movilidad para una amplia gama de personas.

El movimiento es generado por 10 actuadores lineales de diseño personalizado que

proporcionan la potencia para mover a un usuario de hasta 100 kg. La pelvis de fibra de

carbono proporciona la fuerza y rigidez necesarias para sostener al usuario mientras

minimiza el peso del sistema. La longitud de la pierna del dispositivo se puede ajustar

fácilmente, lo que permite una alineación precisa y exacta con las articulaciones del usuario.

El sistema de control de movimiento personalizado se ha desarrollado para garantizar la

estabilidad en todas las fases del ciclo de movimiento. Tiene una carga suficiente para

aproximadamente dos horas de uso normal.

Fig. 2.6: exoesqueleto Rex

HAL (22): es un dispositivo médico aplicable a pacientes con síntomas de discapacidad

musculoesquelética, que sufren de lesiones de la médula espinal, lesiones cerebrales

traumáticas, enfermedades cerebrovasculares, enfermedades del cerebro y del sistema

neuromuscular, etc. Tiene elementos ajustables al usuario, puede adaptarse a la longitud de

las piernas, el ancho de las caderas y el tamaño de los pies en amplios rangos.

Page 39: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.3 EXOESQUELETOS VESTIBLES DE MIEMBRO INFERIOR

15

Cuando una persona mueve el cuerpo, se envían varias señales desde el cerebro a los

músculos a través de los nervios. Esas señales se filtran en la superficie de la piel como

señales bioeléctricas. HAL lee estas señales del usuario y en consecuencia compensa la

fuerza muscular de las extremidades inferiores y lo ayuda a caminar, ponerse de pie y

sentarse con sus propias piernas.

Con el controlador de HAL, el operador puede manipular todas las operaciones, como el

inicio / parada de la asistencia, la modificación de la configuración y la confirmación de los

estados de movimiento, observando de cerca el movimiento del usuario. La asistencia

personalizada para usuarios individuales hace que el entrenamiento con HAL sea efectivo.

Fig. 2.7: exoesqueleto HAL

H3 (23): emula el proceso de caminar replicando un patrón de marcha predefinido a

través de seis articulaciones accionadas para cadera, rodilla y tobillo en ambas piernas

derecha e izquierda. Por lo tanto, puede ayudar a las personas que han perdido parcialmente

la capacidad de caminar después de sufrir un accidente cerebrovascular, contribuyendo a la

investigación actual sobre neurorrehabilitación. Su estructura principal está compuesta de

acero Inoxidable y aluminio de alta resistencia y tiene un peso aproximado de 14 kg.

Page 40: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.3 EXOESQUELETOS VESTIBLES DE MIEMBRO INFERIOR

16

Por haber sido diseñado específicamente para la investigación, permite la implementación

de algoritmos propios, así como la aplicación de diferentes estrategias de control robótico.

Esto, unido a su capacidad de adaptación a diferentes tamaños, proporciona un amplio

abanico de posibilidades a la hora de realizar una investigación. También tiene una

aplicación de Android como interfaz para operar las funciones básicas del exoesqueleto,

como la velocidad de la marcha, la asistencia del motor o los comandos para levantarse y

sentarse.

Fig. 2.8: exoesqueleto H3

HANK (24) es un exoesqueleto de miembros inferiores destinado a la rehabilitación de

pacientes con lesiones medulares, enfermedades neurodegenerativas o que hayan sufrido

accidentes cerebrovasculares (ictus). Esta solución está compuesta por 6 articulaciones

motorizadas que permiten la recuperación funcional de la marcha y la autonomía personal.

Este dispositivo médico se ajusta a pacientes desde 1.50 - 1.95 metros de altura y hasta

100 kilos de peso, puesto que se adapta a diferentes medidas antropométricas sin la necesidad

de sustituir piezas mecánicas. La autonomía de la batería permite su uso en entornos clínicos

controlados durante 4 horas de marcha continua.

Page 41: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.3 EXOESQUELETOS VESTIBLES DE MIEMBRO INFERIOR

17

Una de las características a mencionar de este producto es el tobillo motorizado, ya que

es necesario para el impulso al comienzo de la fase de balanceo y clave para mantener el

equilibrio.

Fig. 2.9: exoesqueleto HANK

Project MARCH (25) : es un equipo de estudiantes investigadores que cada año elabora

un modelo de exoesqueleto con el fin de mejorar la calidad de vida de las personas con

lesiones de la médula espinal. El exoesqueleto MARCH tiene una altura aproximada de 1.2

m y un peso de aproximadamente 20kg. La batería tiene una capacidad de 160Wh con 48V

y 6Ah, aunque están trabajando para aumentarla hasta 280 Wh. Su estructura junto con sus

articulaciones está compuesta de aluminio recubierto con un material protector de plástico,

y la base que sostiene el pie está hecha de titanio.

Está compuesta de 8 articulaciones controlables, dos para cada lado de la cadera, una para

cada una de las rodillas y para cada uno de los tobillos. La alta velocidad que pueden alcanzar

las articulaciones permite que el exoesqueleto responda rápidamente a la entrada de los

sensores, por lo tanto, caminar se vuelve menos estresante para el paciente. Es posible

monitorear los movimientos del exoesqueleto a través del dispositivo de entrada. Para saber

en qué pie descansa el peso del piloto, utiliza almohadillas de presión que miden la presión

Page 42: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.3 EXOESQUELETOS VESTIBLES DE MIEMBRO INFERIOR

18

ejercida en ocho ubicaciones diferentes del pie, lo que permite una estimación muy precisa

del equilibrio del piloto.

Este exoesqueleto fue el elegido finalmente para realizar la simulación y el control en el

presente trabajo.

Fig. 2.10: exoesqueleto MARCH

2.4 La marcha humana

La marcha humana es un proceso de locomoción en el cual el cuerpo humano se mueve

hacia delante, soportando su peso por ambos miembros inferiores alternativamente. Se

caracteriza por el contacto permanente del individuo con el suelo a través de al menos uno

de sus pies, a diferencia de la carrera. Puede definirse como una sucesión de pasos,

entendiéndose por pasos aquellas acciones y movimientos que se producen entre el apoyo

de talón de un pie y el apoyo de talón del otro pie.

Page 43: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.4 LA MARCHA HUMANA

19

Fig. 2.11: fases de la marcha

En el estudio de la marcha se distinguen cuatro fases, tiempos o momentos, aunque éstos

podrían ser subdivididos. La primera fase, tiempo o momento de la marcha humana, también

denominada «primer apoyo doble», «fase de despegue» o «fase de empuje hacia arriba o de

impulso»; se caracteriza porque la pierna atrasada se inclina hacia delante debido a una

extensión de la cadera. Hacia el final de esta fase el músculo cuádriceps se contrae,

extendiendo prácticamente la rodilla.

La segunda fase, tiempo o momento de la marcha, es también conocida como «fase de

oscilación», «primer apoyo simple», o «fase de aceleración del balanceo». Se caracteriza

porque el miembro inferior atrasado se inclina hacia delante por una extensión de cadera, la

rodilla se flexiona mientras que la articulación tibiotarsiana se flexiona plantarmente. En

ella, el pie que en la fase anterior sólo apoyaba con la punta de los dedos, se despega del

suelo, la rodilla y la cadera se flexionan y todo el miembro inferior se desplaza adelantándose

al resto del cuerpo, siendo ahora la otra pierna la que sostiene todo el peso del cuerpo. En

esta fase es cuando la pierna que está en balanceo alcanza su mínima longitud al producirse

la flexión simultánea de cadera, rodilla y tobillo, que serán mayores cuanto más irregular sea

el terreno para evitar el choque del pie contra el suelo.

La tercera fase, tiempo o momento de la marcha humana también la podemos encontrar

citada como «doble apoyo de recepción o de frenado», «segundo apoyo doble», «fase de

Page 44: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.4 LA MARCHA HUMANA

20

recepción de la carga» o «fase de impacto del talón». Durante esta fase el miembro inferior

ha de medir y regular la progresión hacia delante.

La cuarta fase, tiempo o momento de la marcha también es designada como «apoyo

unilateral», «segundo apoyo simple», «fase media de apoyo» o «fase de postura intermedia».

Durante esta fase el miembro inferior apoyado soporta todo el peso del cuerpo a la vez que

mantiene el equilibrio y permite la traslación del cuerpo hacia delante.

2.4.1 Alteraciones de la marcha humana tras sufrir un accidente

Existen diversos factores que afectan a la marcha humana y su análisis es clave para

determinar su naturaleza y diseñar sistemas para lograr que vuelva a la normalidad (28).

Entre estos factores cabe destacar:

1. Dolor: provoca debilidad muscular, disminución de la velocidad, disminución de la

cadencia, disminución de la longitud de zancada y disminución del tiempo de apoyo.

2. Limitación del movimiento: los tejidos no permiten una movilidad suficiente para

adoptar posturas normales ni los rangos de movimiento necesarios durante la marcha. La

contractura suele ser el motivo más habitual, como consecuencia de una inmovilidad

prolongada o como secuela de una lesión.

3. Debilidad muscular: puede ser debida a una atrofia muscular por desuso o a lesiones

neurológicas.

4. Control neurológico deficitario: se puede presentar en patologías del sistema nervioso

central o periférico, manifestándose en diferentes alteraciones básicas como:

• Espasticidad: por parálisis cerebral, accidente cerebrovascular, traumatismo

craneoencefálico, lesión medular incompleta y esclerosis múltiple.

• Alteraciones de la coordinación: impiden controlar el tiempo y la intensidad de la

acción muscular, produciendo alteraciones de la secuencia de la marcha.

Page 45: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.4.1 ALTERACIONES DE LA MARCHA HUMANA TRAS SUFRIR UN ACCIDENTE

21

• Patrones reflejos primitivos: suponen una alternativa al control voluntario en la

rehabilitación de la marcha, ya que permiten dar pasos mediante la combinación

de un patrón de flexión y extensión.

• Alteración de la propiocepción: impide que el paciente tenga información sobre

la posición articular, así como de la sensación de contacto con el suelo.

Existen varias formas de clasificar las alteraciones de la marcha debidas a patologías. Se

pueden dividir según su etiología, diagnóstico, fase de la marcha alterada o zona anatómica

afectada. Esta última es la más común y recoge cuatro grupos: alteraciones de tobillo,

alteraciones en rodilla, alteraciones en cadera y alteraciones en el plano transverso.

Las alteraciones de tobillo: se manifiestan por una flexión plantar exagerada que afecta

tanto a la fase de apoyo doble como a la fase de apoyo simple; y una flexión dorsal exagerada

que afecta a la oscilación. Las alteraciones en rodilla producen flexión y extensión

exageradas o inadecuadas y las causas son principalmente la debilidad en el cuádriceps, en

los flexores de cadera y en el pie, dolor, contracturas y deformaciones estáticas o dinámicas.

Las alteraciones en cadera afectan a la marcha principalmente por una inadecuada extensión

o una exagerada flexión. Por último, las alteraciones en plano transverso son provocadas por

el desplazamiento hacia delante del cuello del fémur.

2.5 Control de robots

En este apartado se expondrán los conocimientos básicos necesarios para comprender el

funcionamiento del control de robots, comenzando por los términos de análisis cinemático,

cinemática directa e inversa, dinámica, control cinemático y control dinámico.

2.5.1 Cinemática y control cinemático

La cinemática describe el movimiento de los objetos y estudia su trayectoria en función

del tiempo, sin tener en cuenta el origen de las fuerzas y pares que lo motivan o las causas

que lo producen. En un análisis cinemático la posición, velocidad y aceleración de cada uno

Page 46: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.5.1 CONTROL CINEMÁTICO

22

de los elementos del robot son calculados sin considerar las fuerzas que causan el

movimiento (29).

Por tanto, el modelo cinemático de un robot describe la relación entre las posiciones de

las articulaciones que lo conforman y la posición y orientación de su efector final.

El modelo cinemático de un robot es útil para la simulación del movimiento de sistemas

robóticos, la planificación de trayectorias y el diseño de robots, ya que permite el cálculo de

las dimensiones óptimas de los eslabones.

El modelo cinemático se clasifica en modelo cinemático directo y modelo cinemático

inverso. El primero permite obtener la localización del extremo del robot basándose en el

valor de las variables articulares y puede obtenerse mediante relaciones trigonométricas o

mediante el algoritmo de Denavit Hartenberg. Tiene solución única, ya que dado un vector

de variables articulares de un sistema robótico, sólo existe una posición y orientación del

extremo final. El segundo, permite determinar la posición de las articulaciones del robot si

lo que se conoce es la localización del extremo y puede resolverse mediante métodos

algebraicos, geométricos o el desacoplo cinemático de Pieper. Puede presentar diferentes

soluciones, ya que existen diferentes configuraciones del robot para un mismo punto en el

espacio cartesiano o puede que no proporcione ninguna solución ya que estas pueden

encontrarse fuera del espacio de trabajo o causar singularidades.

El control cinemático, alimenta los valores de referencia a las articulaciones encargadas

de llevar a cabo la trayectoria del efector final asignada; es decir, establece cuál es la

trayectoria que debe seguir cada una de las articulaciones a lo largo del tiempo, para lograr

un objetivo establecido (30). La obtención de estas trayectorias está condicionada por las

restricciones físicas de los accionamientos y de algunos de los parámetros de la trayectoria,

como pueden ser la suavidad o la precisión.

El control cinemático se encarga de:

Page 47: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.5.1 CONTROL CINEMÁTICO

23

• Convertir la especificación del movimiento dada en el programa en una

trayectoria analítica en espacio cartesiano,

• Muestrear la trayectoria cartesiana obteniendo un número finito de puntos de

dicha trayectoria (x, y, z, α, β, γ), convertir cada uno de estos puntos en sus

correspondientes coordenadas articulares (q1, q2, q3, q4, q5, q6) utilizando la

transformación inversa.

• Interpolar de los puntos articulares obtenidos, generando para cada variable

articular una expresión qi(t) que pase o se aproxime a ellos, siendo una trayectoria

realizable, cartesiana lo más próxima a la especificada por el usuario

• Muestrear la trayectoria articular para generar referencias al control dinámico

Las trayectorias, pueden dividirse en trayectorias punto a punto, que a su vez pueden ser

eje a eje o de movimiento simultáneo de los ejes; trayectorias coordinadas, en las cuales

todos los ejes finalizan su movimiento a la vez, o trayectorias asíncronas, que permite

conocer la trayectoria del extremo.

La interpolación de trayectorias consiste en la unión de una sucesión de puntos en el

espacio articular por los que han de pasar las articulaciones del robot en un instante

determinado. Es posible utilizar:

• Interpolador lineal, que mantiene misma velocidad durante todo el movimiento

• Ineterpolador polinómico la trayectoria seguida por cada articulación está descrita

por una ecuación que puede ser cúbica, quíntica, etc.

• Interpolador lineal con ajuste parabólico: la trayectoria es simétrica de la forma

parabólica - lineal - parabólica.

Page 48: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.5.1 CONTROL CINEMÁTICO

24

• Interpolación polinómica 4-3-4, la cual divide la trayectoria en tres segmentos

• mediante polinomios de cuarto, tercero y cuarto grado respectivamente.

• Interpolación usando splines, aseguran la continuidad en velocidad para el caso

del splines cúbicos y de aceleración para splines quínticos permitiendo así generar

una trayectoria suave y realista.

2.6.2 Dinámica y control dinámico

En este apartado de definirá el concepto de dinámica, modelo dinámico y control

dinámico, exponiendo su representación analítica y los distintos tipos que se pueden

encontrar, mostrando sus características.

La dinámica establece la relación entre las fuerzas que actúan sobre un cuerpo y el

movimiento que en él se origina. Establece una relación entre la posición, velocidad y

aceleración del robot, las fuerzas y pares aplicados en las articulaciones o en el extremo y

parámetros dimensionales y dinámicos de los eslabones como su longitud, masas e inercias.

Permite la simulación del movimiento del robot, el diseño del mecanismo y selección de los

accionamientos y el desarrollo del control dinámico del robot. Existen diversas formas de

establecer el modelo dinámico de un robot como son el algoritmo de Lagrange o el algoritmo

Newton-Euler (32).

La ecuación del modelo dinámico se representa de forma genérica por:

𝜏 = 𝑀(𝑞)𝑞 ̈ + 𝐶 (𝑞, 𝑞’) 𝑞’ + 𝐺(𝑞) (2.1)

Donde τ es el vector de pares articulares ejercidos en cada articulación del robot, M(q) es

la matriz de inercia del robot, C(q, q) es la matriz de Coriolis que depende tanto de la posición

como de la velocidad actuales del robot, y G(q) es la matriz de gravedad, que indica el efecto

de esta fuerza sobre el robot en una posición determinada q.

Page 49: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

2.5.2 CONTROL DINÁMICO

25

Al igual que la cinemática, el modelo dinámico se puede dividir en directo e inverso. El

modelo dinámico directo obtiene la evolución temporal de las coordenadas articulares del

robot, dado un vector de par/fuerza determinada. Por otro lado, el modelo dinámico inverso

obtiene las fuerzas y pares que intervienen, dada la evolución temporal del robot.

El control dinámico consiste en la reducción del error de posicionamiento, logrando que

las trayectorias seguidas por el robot sean lo más semejantes posible a las calculadas por el

control cinemático. Por tanto, necesita tener conocimiento sobre el modelado cinemático y

dinámico del robot, ciertos algoritmos de control y análisis de la estabilidad.

Los controladores dinámicos pueden dividirse en controladores dinámicos

monoarticulares o controladores dinámicos multiarticulares. Los primeros, consideran cada

articulación como un sistema de control independiente que trata de seguir una determinada

trayectoria articular. A menudo se emplean dos bucles de control anidados: un bucle externo

que mantiene la posición y determina la velocidad articular necesaria para minimizar el error

de posición, y un bucle interno que se encarga de mantener la velocidad articular establecida

por el bucle externo. En cuanto a los segundos, surgen con el objetivo de mejorar el

desempeño de los primeros cuando el robot describe trayectorias rápidas o con gran

precisión. En estos casos, los efectos de acoplamiento entre las articulaciones de un robot

son más notables y se hace necesario definir un controlador multivariable que genere

directamente los pares para todas las articulaciones teniendo en cuenta los posibles pares de

acoplamiento entre las articulaciones. Pueden dividirse en controladores de posición puros,

que buscan alcanzar una configuración articular deseada y controladores de seguimiento, los

cuales se emplean cuando se quiere seguir una trayectoria articular deseada.

En este proyecto, se ha empleado un controlador dinámico multiarticular, dada la

necesidad de una gran precisión en la ejecución de cada una de las trayectorias impuestas

para cada articulación que conforma el exoesqueleto.

Page 50: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 51: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

27

3. Objetivos

El objetivo principal de este TFG es la simulación y el control de un exoesqueleto de

piernas orientado a la rehabilitación. La rehabilitación es un tema actual de investigación y

requiere tanto un buen diseño del dispositivo robótico, como un control eficiente que

garantice un tratamiento correcto y la seguridad del paciente.

El primer objetivo que plantea este proyecto es el diseño de un exoesqueleto robótico de

piernas, para lo cual en primer lugar se realiza un análisis de los exoesqueletos existentes en

la actualidad para observar qué características son susceptibles de mejora. Se ha

seleccionado como base el exoesqueleto MARCH, que está en constante mejora por un

equipo de investigación por parte de los estudiantes, debido a que su modelo está

implementado en ROS, y es posible utilizarlo como base para un nuevo diseño.

El segundo objetivo planteado es la mejora del patrón de marcha del exoesqueleto con el

fin de lograr una marcha más semejante a la marcha humana, mejorar la estabilidad y la

capacidad de movimiento. Para ponerlo a prueba, se incluyen distintos obstáculos en el

entorno simulado, evaluando los patrones de marcha necesarios para hacerles frente.

El tercer y último objetivo consiste en el análisis del controlador PID actual, y la

utilización distintas técnicas para obtener el valor dichas ganancias, de forma que se logre

un mejor comportamiento del controlador. Para ello se utiliza ROS Control, un conjunto de

paquetes destinados a la implementación de controladores.

Estos tres objetivos, implican subobjetivos:

• Evaluar las características deseables en un exoesqueleto.

Page 52: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

3. OBJETIVOS

28

• Comprender la estructura de los paquetes de MARCH, modelado, simulación,

patrones de marcha, controladores, etc.

• Diseñar un exoesqueleto.

• Realizar un análisis cinemático.

• Crear patrones de marcha.

• Poner a prueba el comportamiento en distintos entornos.

• Aprender la estructura y funcionamiento de ROS Control.

• Analizar el controlador por defecto del exoesqueleto.

• Ajustar valores del controlador.

• Realizar una comparativa de los valores de control.

Page 53: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

29

4. Metodología

En este apartado se explicará de manera analítica las bases matemáticas del controlador

utilizado en el presente proyecto, exponiendo las ecuaciones de control y analizando su

estabilidad en bucle cerrado.

Se explicará en primer lugar el tipo de control dinámico en el que se basan, situándolos

dentro de una clasificación, y se indicará en detalle el desarrollo matemático hasta la

obtención de una expresión analítica general.

4.1 Control dinámico multiarticular

Este tipo de controlador se diferencia principalmente del controlador monoarticular, por

el hecho de que no precisa un doble bucle para la acción de control. La referencia del

controlador es la posición o trayectoria deseada. La acción de control genera directamente

los pares articulares a aplicar a todos y cada uno de los actuadores del robot.

Los controladores multiarticulares surgen con el objetivo de mejorar el desempeño de los

controladores monoarticulares cuando el robot describe trayectorias rápidas o con gran

precisión. En estos casos, los efectos de acoplamiento entre las articulaciones de un robot

son más notables y se hace necesario definir un controlador multivariable que genere

directamente los pares para todas las articulaciones teniendo en cuenta los posibles pares de

acoplamiento entre las articulaciones. Pueden clasificarse en:

Page 54: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.1 CONTROL DINÁMICO MULTIARTICULAR

30

Controladores de posición puros o de regulación: 𝑞𝑑(𝑡) = 𝑞𝑑, es un vector constante. Por

lo tanto, estos controladores se emplean cuando se quiere alcanzar una configuración

articular deseada que no varía en el tiempo.

Controladores de seguimiento: 𝑞𝑑(𝑡) es un vector variable con el tiempo. Por lo tanto,

estos controladores se emplean cuando se quiere seguir una trayectoria articular deseada; es

decir, la configuración articular varía con el tiempo.

En este proyecto, se emplea un controlador de posición puro, al cual se le indican una

serie de posiciones articulares que deben alcanzarse en un tiempo determinado.

4.2 Controladores de posición multiarticulares

Si se considera un robot de n grados de libertad con eslabones rígidos, sin fricción en sus

uniones su modelo dinámico puede expresarse de la siguiente manera:

𝑀(𝑞)𝑞̈ + 𝐶(𝑞, 𝑞 )𝑞 + 𝑔(𝑞) = 𝜏 (4.1)

En esta expresión �̈� ∈ ℜ𝑛×1 son las aceleraciones articulares, 𝑀(𝑞) ∈ ℜ𝑛×𝑛 es la matriz

de inercia simétrica y definida positiva, 𝐶(𝑞, 𝑞 )∈ ℜ𝑛×1 representa el vector de fuerzas

centrípetas y de Coriolis, y 𝑔(𝑞) es el vector de fuerzas gravitacionales. Finalmente, 𝜏 ∈

ℜ𝑛×1 es el vector de pares articulares.

El modelo dinámico de un manipulador puede expresarse en términos de variables de

estado tomando como vector de estados la posición y velocidad articular [𝑞𝑇𝑞 𝑇]𝑇. En este

caso, el modelo dinámico de un robot de n grados de libertad puede expresarse de la siguiente

manera:

𝑑

𝑑𝑡 (

𝑞 𝑞 ) = [

𝑞

𝑀(𝑞)−1[𝜏(𝑡) − 𝐶𝑞 (𝑞, 𝑞 )𝑞 − 𝑔(𝑞) ] (4.2)

Page 55: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2 CONTROLADORES DE POSICIÓN

31

El objetivo del control de posición puro es determinar los pares articulares 𝝉 necesarios

para 𝑙𝑖𝑚 𝑡 → ∞ 𝑞(𝑡) = 𝑞𝑑 , donde 𝑞𝑑es un vector constante que representa la posición

deseada a alcanzar. Es decir, el controlador definido debe asegurar que la posición articular

del robot alcance la configuración deseada (que no depende del tiempo en los controladores

puros de posición).

El objetivo del control de posición, siendo el nuevo vector de estado [�̃�𝑇 𝑞 𝑇]𝑇, puede

reformularse como 𝑙𝑖𝑚 𝑡 → ∞ 𝑞 (𝑡) = 0, donde 𝑞 = 𝑞𝑑 − 𝑞 ∈ ℝ𝒏 son los errores de

posición articular. Por lo tanto, si se considera como vector de estado el error articular y la

velocidad articular, el objetivo se planteará como la reducción progresiva del error articular

hasta su anulación.

Sea cual sea el vector de estados escogido, la ley de control generará los pares articulares

a partir de información interna del robot, 𝑞, 𝑞 , 𝑞̈, el modelo dinámico del mismo

𝑀(𝑞), 𝐶(𝑞, 𝑞 ), 𝑔(𝑞) y la configuración articular deseada a alcanzar, 𝑞𝑑 (ver Figura 1). Por

lo tanto:

𝜏 = 𝜏(𝑞, 𝑞 , 𝑞 ̈, 𝑞𝑑 , 𝑀(𝑞), 𝐶(𝑞, 𝑞 ), 𝑔(𝑞)) (4.3)

Fig. 4.1: esquema básico de un controlador multiarticular

4.2.1 Control PD

La acción de control de un regulador PD se corresponde con la siguiente expresión:

Page 56: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.1 CONTROLADOR PD

32

𝜏 = 𝐾𝑝𝑞 + 𝐾𝑣𝑞 (4.4)

donde 𝜏 son los pares a aplicar a cada una de las n articulaciones, 𝑞 es la derivada respecto

al tiempo del error articular, 𝐾𝑝,𝐾𝑣 ∈ ℝ𝑛𝑥𝑛 son matrices ambas definidas positivas.

En la siguiente figura se representan de forma gráfica los distintos componentes del

controlador PD:

Fig. 4.2: controlador PD de posición multiarticular

El comportamiento en bucle cerrado puede obtenerse al igualar el modelo dinámico del

robot a la acción de control del regulador, obteniendo la siguiente expresión:

𝑀(𝑞)𝑞̈ + 𝐶(𝑞, 𝑞 )𝑞 + 𝑔(𝑞) = 𝐾𝑝𝑞 + 𝐾𝑣𝑞 (4.5)

A continuación, se va a obtener el modelo dinámico en bucle cerrado en representación

de estados considerando como vector de estados [�̃�𝑇 𝑞 𝑇]𝑇. Asumiendo 𝑞𝑑 , constante, se

obtiene 𝑞 = −𝑞 .

Page 57: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.1 CONTROLADOR PD

33

Además, la aceleración articular puede obtenerse de la expresión del comportamiento en

bucle cerrado, de forma que:

�̈� = 𝑀(𝑞) − [𝐾𝑝𝑞 − 𝐾𝑣𝑞 − 𝐶(𝑞, 𝑞 )𝑞 − 𝑔(𝑞)] (4.6)

Por lo tanto, el comportamiento en bucle cerrado en representación de estados se puede

representar de la siguiente manera:

𝑑

𝑑𝑡 ( 𝑞

𝑞 ) = (

𝑞

𝑀(𝑞𝑑 − �̃�)−1[𝐾𝑝𝑞 − 𝐾𝑣𝑞 − 𝐶𝑞 (𝑞𝑑 − 𝑞 , 𝑞 )𝑞 − 𝑔(𝑞𝑑 − 𝑞 )) (4.7)

La estabilidad del robot, dependerá de si se tiene en cuenta el efecto de la gravedad o si por

el contrario se considera despreciable.

4.2.1.1 Control PD sin términos de gravedad

La ausencia de gravedad puede producirse en determinados robots en los que la gravedad

actúe sobre los apoyos del robot, y, por lo tanto, el término de gravedad del robot puede

considerarse como despreciable. En este caso, el modelo dinámico del robot viene dado por:

𝑀(𝑞)𝑞 ̈ + 𝐶(𝑞, 𝑞 )𝑞 = 𝜏 (4.8)

Siguiendo un procedimiento similar al indicado en el apartado anterior, es posible obtener

la siguiente expresión para el comportamiento en bucle cerrado en representación de estados:

𝑑

𝑑𝑡 ( 𝑞 𝑞 )=(

𝑞 𝑀(𝑞𝑑 − 𝑞 ) − 1[𝐾𝑝𝑞 − −𝐾𝑞𝑣 𝑞 − 𝐶(𝑞𝑑 − 𝑞 , 𝑞 )𝑞

) (4.9)

A continuación, se van a extraer los puntos de equilibrio que se pueden obtener de la

expresión en bucle cerrado anterior. Para ello, y, de la propia definición del equilibrio, se

anulan las derivadas de la expresión anterior, obteniendo:

Page 58: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.1 CONTROLADOR PD

34

[0] = 𝑀(𝑞𝑑 − 𝑞 ) − 1[𝐾𝑝𝑞 ] → 𝑞 = [0] (4.10)

Por lo tanto, el origen [�̃�𝑇 𝑞 𝑇]𝑇= [0𝑇 0𝑇]𝑇es el único equilibro de la ecuación.

Se puede demostrar que, si las matrices de ganancia proporcional y derivativa del

controlador PD son definidas positivas, el sistema en bucle cerrado es asintóticamente

estable y se cumple el objetivo de control de posición pura 𝑙𝑖𝑚 𝑡 → ∞ 𝑞 (𝑡) = 0. En

definitiva, este análisis permite concluir que el controlador garantiza alcanzar la posición

final deseada simplemente seleccionando las matrices proporcional y derivativa definidas

positivas, siempre que no afecte la gravedad.

4.2.1.2 Control PD con términos de gravedad

A continuación, se repetirá el mismo proceso, pero aplicado a robots en los que sí tiene

efecto la componente de gravedad del modelo dinámico. En este caso, tal y como se indicó

anteriormente, el comportamiento en bucle cerrado en representación de estados es el

siguiente:

𝑑

𝑑𝑡( 𝑞

𝑞 )=[

𝑞 𝑀(𝑞𝑑 − 𝑞 ) − 1[𝐾𝑝𝑞 − 𝐾𝑣𝑞 − 𝐶𝑞 (𝑞𝑑 − 𝑞 , 𝑞 )𝑞 − 𝑔(𝑞𝑑 − 𝑞 )

] (4.11)

Para determinar los puntos de equilibrio se anularán las derivadas obteniendo la siguiente

expresión:

[0] = 𝑀(𝑞𝑑 − q ) − 1[𝐾𝑝 · q − g(𝑞𝑑 − q )] → [0] = 𝐾𝑝 · q − g(𝑞𝑑 − q ) (4.12)

Además de𝑞 = [0], a partir de la última expresión, puede concluirse que puede haber

múltiples puntos de equilibrio dados por [�̃�𝑇 𝑞 𝑇]𝑇= [𝑠𝑇 0𝑇]𝑇, donde s ∈ ℝ𝒏 es solución de

𝐾𝑝𝑠 − 𝑔(𝑞𝑑 − 𝑠) = 0.

Por lo tanto, no se puede garantizar el objetivo del controlador; es decir, la anulación del

error en régimen permanente. Además, el origen de la ecuación en bucle cerrado expresado

Page 59: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.1 CONTROLADOR PD

35

en términos de vector de estado no es un equilibrio. Se puede comprobar en la ecuación

anterior que 𝑠 = 0; es decir, error nulo, no es una posible solución.

Realizando un análisis de la estabilidad del sistema es posible concluir que, para un valor

suficientemente alto de 𝐾𝑝, el sistema tiene un único equilibrio y se garantiza un acotamiento

del error de posición.

En cualquier caso, en términos generarles, un controlador PD no es adecuado para el

posicionamiento de robots manipuladores ya que no es posible garantizar que se pueda

alcanzar la posición deseada del robot.

4.2.2 Control PID

La acción de control de un regulador PID se corresponde con la siguiente:

𝜏 = 𝐾𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖 ∫ 0𝑡𝑞 (𝜎)𝑑𝜎 (4.13)

donde 𝝉 son los pares a aplicar a cada una de las n articulaciones, 𝑞 es la derivada respecto

al tiempo del error articular, 𝐾𝑝,𝐾𝑣, 𝐾𝑖 ∈ ℝ𝑛𝑥𝑛 son matrices ambas definidas positivas.

En este controlador se sustituye la compensación de gravedad por la parte integral, para

tratar de llevar a 0 el error de posición. Este es precisamente la principal ventaja del

controlador, ya que no requiere conocer ningún término del modelo dinámico del robot para

generar la acción de control. Sin embargo, la principal desventaja es el proceso de sintonía.

En los casos anteriores es trivial, sin embargo, en este caso es más laborioso.

En la siguiente imagen se representa de forma gráfica los distintos componentes del

controlador PID:

Page 60: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.2 CONTROLADOR PID

36

Fig. 4.3: controlador PID

La ley de control puede ser expresada empleando las dos siguientes ecuaciones:

𝜏 = 𝐾 𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖𝜉 (4.14)

𝜉 = 𝑞 (4.15)

El comportamiento en bucle cerrado puede obtenerse al igualar el modelo dinámico del robot

a la acción de control del regulador PID, obteniendo la siguiente expresión:

𝑀(𝑞)𝑞̈ + 𝐶(𝑞, 𝑞 )𝑞 + 𝑔(𝑞) = 𝐾𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖𝜉 (4.16)

A continuación, se va a obtener el modelo dinámico en bucle cerrado en representación de

estados considerando como vector de estados [𝜉 �̃�𝑇 �̃� 𝑇]𝑇. La aceleración articular puede

obtenerse de la expresión del comportamiento en bucle cerrado, de forma que:

𝑞̈ = 𝑀(𝑞) − 1[𝐾𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖𝜉 − 𝐶(𝑞, 𝑞 )𝑞 − 𝑔(𝑞)] (4.17)

Page 61: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.2.2 CONTROLADOR PID

37

Por lo tanto, el comportamiento en bucle cerrado en representación de estados será el

siguiente:

𝑑

𝑑𝑡 (

ξ q q ) =

[

𝑞

𝑞

�̈�𝑑 − 𝑀(𝑞𝑑 − 𝑞 ) − 1[𝐾𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖𝜉 − 𝐶𝑞 𝑞 (𝑞

𝑑 − 𝑞 , 𝑞

𝑑 − 𝑞 )( 𝑞

𝑑 − 𝑞 ) − 𝑔(𝑞

𝑑 − 𝑞 )]

]

= [

𝑞 𝑞

−𝑀(𝑞𝑑 − 𝑞 ) − 1[𝐾𝑝𝑞 + 𝐾𝑣𝑞 + 𝐾𝑖𝜉𝑞 𝑞 + 𝐶(𝑞𝑑 − 𝑞 , −𝑞 )𝑞 − 𝑔(𝑞𝑑 − 𝑞 )]] (4.18)

Se puede demostrar que el origen de la ecuación en bucle cerrado expresada en términos

del vector de estados, [𝜉𝑇 �̃�𝑇 �̃� 𝑇]𝑇, es un equilibrio asintóticamente si:

•𝜆𝑚𝑎𝑥{𝐾𝑖} ≥ 𝜆𝑚𝑖𝑛{𝐾𝑖} > 0.

• 𝜆𝑚𝑎𝑥{𝐾𝑝} ≥ 𝜆𝑚𝑖𝑛{𝐾𝑝} > 𝑘𝑔.

• 𝜆 𝑚𝑎𝑥{𝐾𝑣} ≥ 𝜆𝑚𝑖𝑛{𝐾𝑣} >𝜆𝑚𝑎𝑥{𝐾𝑖}

𝜆𝑚𝑖𝑛{𝐾𝑝}−𝑘𝑔 ·𝜆𝑚𝑎𝑥2{𝑀}

𝜆𝑚𝑖𝑛{𝑀}

Donde 𝜆𝑚𝑖𝑛{𝐴} y 𝜆𝑚𝑎𝑥{𝐴} representan el autovalor mínimo y máximo de la matriz 𝐴

respectivamente.

4.3 ROS_Control

ROS es un meta sistema operativo de código abierto para tu robot. Provee de servicios

que se esperarían de un sistema operativo, incluyendo abstracción de hardware, control de

dispositivos de bajo nivel, implementación de funcionalidades comunes, pasaje de mensaje

entre procesos y manejo de paquetes. También brinda herramientas y librerías para obtener,

construir, escribir y correr código a través y mediante varias computadoras. ROS es similar

a otras estructuras o armazones para robot

Page 62: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_CONTROL

38

El objetivo primario de ROS es soportar la reutilización de código en la investigación y

desarrollo dentro de la robótica. ROS es una estructura distribuida de procesos llamados

“nodos” que permite el diseño individualizado, pero que son fácilmente acoplables a los

demás procesos. Estos procesos se pueden agrupar en “paquetes”, que fácilmente pueden ser

intercambiados, compartidos y distribuidos. Un conjunto de paquetes se agrupa en un

“workspace”, que contiene todo lo necesario para utilizar los nodos.

Fig. 4.4: estructura de paquetes de ROS. http://wiki.ros.org/Books

Por su parte, ROS_Control es un conjunto de paquetes que incluye interfaz de

controlador, administrador de controlador, transmisiones, interfaces de hardware y caja de

herramientas de control. Todos estos paquetes juntos le permitirán interactuar y controlar los

actuadores conjuntos del robot. Toma los datos del estado conjunto y un punto objetivo como

entrada y envía los comandos apropiados a los actuadores como salida. Para lograr el punto

de ajuste proporcionado, utiliza un mecanismo de retroalimentación de bucle de control

genérico, generalmente un controlador PID, para controlar la salida. Esta salida se pasa al

robot a través de la interfaz de hardware.

Page 63: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_CONTROL

39

Fig. 4.5: esquema interno de ROS_Control. http://wiki.ros.org/ros_control

ROS_Control posee un conjunto de controladores implementados por defecto, entre los

cuales se pueden encontrar:

• Effort_controller: envía comandos de fuerza o torque a las articulaciones. Según

su entrada pueden clasificarse en control de fuerza, posición o velocidad.

• Possition_controller: recibe comandos de posición y los transmite a las

articulaciones.

• Velocity_controller: recibe comandos de velocidad y los transmite a las

articulaciones.

Page 64: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_CONTROL

40

• State_controller: calcula el estado actual

Por otro lado, las interfaces de hardware son utilizadas por el control ROS junto con uno

de los controladores anteriores para enviar y recibir comandos al hardware. Existen dos

tipos:

• Joint Command Interface: que puede ser para controlar las articulaciones basadas

en el esfuerzo, para controlar las articulaciones basadas en la velocidad o para

controlar las articulaciones basadas en la posición.

• Joint State Interface: interfaz de hardware para admitir la lectura del estado de una

serie de articulaciones con nombre, cada una de las cuales tiene alguna posición,

velocidad y esfuerzo.

Por último, el plugin de Gazebo es un complemento a ros que nos permite utilizar

controladores en Gazebo, ya que traduce la información de las transmisiones a datos que este

pueda entender.

4.3.1 Funcionamiento de los controladores en ROS

Un controlador de ROS, está formado por un conjunto de archivos que permiten su

implementación y su ejecución. Está formado por:

• Fichero.launch: encargado de lanzar los nodos neceasarios para el control, como

son controller_spawner o robot_state_publisher. Además, lanza el nodo del

fichero.ymal explicado a continuación.

• Fichero.yaml: encargado de llamar a los tipos de controladores que se han

implementado. Contiene ciertas especificaciones como cuáles serán las

articulaciones a controlar, el valor de las ganancias si las hubiera, los límites de

Page 65: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_CONTROL

41

movimiento de cada una de las articulaciones, etc. Al indicar el tipo de controlador

que se va a utilizar, llama a nodo que lo implementa.

• Fichero.cpp: es el nodo donde se desarrolla el controlador propiamente dicho. Se

define como una clase formada por una parte privada que contiene las variables

necesarias para su implementación y una parte pública que consta al menos de

cuatro métodos:

o Init: función de inicialización de todas las variables y recursos necesarios

para el desarrollo del controlador.

o Update: función que realiza la función de control y envía los comandos

pertinentes a las articulaciones.

o Start: función que inicia los recursos que utiliza el controlador.

o Stop: función que finaliza y cierra el uso del controlador.

• CMakeList.txt: controla el proceso de compilación del software. Es necesario

incorporar el controlador y las librerías que emplea para que sean reconocidas.

• Package.xml: define propiedades sobre el paquete, como el nombre del paquete,

los números de versión, los autores, los mantenedores y las dependencias de otros

paquetes. Es necesario añadir el plugin que se explica a continuación.

• Control_plugin.xml: archivo plugin que indica dónde se creará la librería

necesaria para utilizar el controlador.

De esta forma, y con todos estos paquetes, cuando se lance el archivo de tipo launch, este

cargará los nodos necesarios para el control y el archivo de tipo yaml. Entonces este archivo

indicará qué controladores se van a usar y definirá los valores necesarios para su control. De

Page 66: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

4.3 ROS_CONTROL

42

este modo se ejecutará el controlador implementado en el archivo de tipo cpp, llamando

primero al método init, posteriormente al método start, a continuación, al método update

que realizará el control y cuando se detenga el controlador, se llamará a función stop de lo

finalizará.

Page 67: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

43

5. Desarrollo

En este apartado se explicará todo el desarrollo que ha supuesto este proyecto, en el que

se harán presentes todos los objetivos expuestos con anterioridad. Se comenzará con el

modelado del exoesqueleto, realizando un diseño propio que subsane algunos de los

inconvenientes encontrados en el exoesqueleto MARCH. Posteriormente, se realizará un

análisis cinemático del nuevo diseño creado, analizando sus sistemas de referencia locales y

sus capacidades de movimiento. Seguidamente, un análisis del patrón de marcha y una

mejora del mismo tras detectar una serie de fallos que impiden una marcha correcta. De igual

forma, se examinará su comportamiento ante distintos obstáculos y terrenos varios,

procediendo a adaptar los patrones de marcha para hacerles frente. Finalmente, se explicará

qué tipo de control dirige los movimientos del exoesqueleto y cómo se ha modificado el

controlador para intentar mejorar el comportamiento del exoesqueleto durante la marcha.

En primer lugar, se procede a la simulación en el entorno de Gazebo, para poder visualizar

el exoesqueleto. Para ello, es necesario:

1. Configurar el entorno de ROS 1:

source /opt/ros/noetic/local_setup.bash

source ~/march/ros1/install/local_setup.bash

2. Lanzar la simulación, indicando que se desea visualizar en Gazebo:

roslaunch march_launch march_simulation.launch

rviz:=false gazebo_ui:=true ground_gait:=true

Page 68: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5. DESARROLLO

44

Aparecerá entonces una ventana emergente en la que se visualiza en entorno de Gazebo

con el modelo del exoesqueleto cargado, en un mundo vacío.

Fig. 5.1: exoesqueleto MARCH en Gazebo

5.1 Modelado del exoesqueleto

Con el objetivo de realizar el modelo del exoesqueleto para su simulación, se partió del

exoesqueleto MARCH, descrito anteriormente. Dicho exoesqueleto consta de 8

articulaciones controlables, dos para cada lado de la cadera, una para cada una de las rodillas

y una para cada tobillo.

Dado que una de las principales características deseable en el diseño de un exoesqueleto

es su adaptación a pacientes de distintas alturas, se procedió a la modificación del eslabón

que se encuentra entre la rodilla y el tobillo, con el objetivo, de realizar una tibia extensible,

que se pudiera ajustar a la altura deseada para el paciente, de forma que la rodilla del

exoesqueleto y la del paciente queden lo más alineadas posibles, para así lograr una mejor

adaptación y obtener mejores resultados.

Los eslabones que incorpora el exoesqueleto MARCH están diseñados para la altura de

una persona en concreto, que es quien pondrá a prueba el exoesqueleto en la competición

Page 69: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

45

anual Cybathlon celebrada en Zúrich. Por lo tanto, sus eslabones no tienen la posibilidad de

extenderse o replegarse dependiendo de la altura de la persona que lo porte.

El eslabón propuesto en el presente proyecto, se trata de un prisma rectangular extensible,

cuya longitud se puede establecer por terminal cuando se lance la simulación en Gazebo,

mediante el parámetro “lower_leg_heigh”. Su valor por defecto se establece a 38 cm, que es

la longitud promedio que tiene una tibia humana, que se da para una persona de 1,70 metros

de altura. La extensión mínima del eslabón creado es de 30 cm, que se corresponde a la altura

de una mujer de 1,48 metros de altura o a un hombre de 1.53 metros de altura. La extensión

máxima, por su parte, es de 50cm, que se corresponde a una mujer 1,92 de metros de altura

y a un hombre de 2,1 metros de altura. De esta forma, se abarca la mayoría de la población

adulta, proporcionando una gran adaptabilidad a distintos usuarios.

El parámetro “lower_leg_heigh”, es recibido desde march_simulation.launch como un

argumento, cuyo valor por defecto es 0.38, como ya se ha comentado. Desde este archivo se

llama al archivo march.launch, volviendo a pasar como argumento el

parámetro “lower_leg_heigh”. En este archivo se llama al archivo march_world.launch, que

de nuevo recibe como argumento el parámetro “lower_leg_heigh”. Este último archivo se

encarga, entre otras cosas, de cargar el fichero URDF que, como se comentará

posteriormente, necesita conocer este valor.

Código 5.1 March_simulation.launch

1. <launch> 2. <!-- General --> 3. <arg name="robot" default="marchS" doc="Robot to use."/> 4. <arg name="lower_leg_height" default="0.385" doc="Longitud

modificable de la tibia."/> 5. <arg name="robot_description" default="$(arg robot)" doc="URDF file

to use"/> 6. 7. <!—Tibia modificable --> 8. <param name="robot_description" 9. command="$(find xacro)/xacro '$(find

march_description)/urdf/$(arg robot_description).xacro' 10. lower_leg_height:=$(arg lower_leg_height)" /> 11.

Page 70: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

46

Código 5.2. March.launch

1. <!-- Simulation -->

2. <param name="robot_description" 3. command="$(find xacro)/xacro '$(find march_description)/urdf/ 4. $(arg robot_description).xacro' 5. k_velocity_value_hfe:=60.0 k_velocity_value_kfe:=60.0 6. k_velocity_value_haa:=60.0 7. k_position_value_hfe:=5000.0 8. k_position_value_kfe:=5000.0 9. k_position_value_haa:=5000.0 10. max_effort_rotary:=200.0 max_effort_linear:=200.0 11. lower_leg_height:=$(arg lower_leg_height) 12. ground_gait:=$(arg ground_gait)" /> 13. <param name="balance" value="$(arg balance)"/>

Código 5.3 March_world.launch

1. <arg name="lower_leg_height" default="0.385" doc="Longitud de la tibia."/>

2. <param name="robot_description" 3. command="$(find xacro)/xacro '$(find march_description)/urdf/ 4. $(arg robot_description).xacro' 5. k_velocity_value_hfe:=60.0 k_velocity_value_kfe:=60.0 6. k_velocity_value_haa:=60.0 7. k_position_value_hfe:=5000.0 8. k_position_value_kfe:=5000.0 9. k_position_value_haa:=5000.0 10. max_effort_rotary:=200.0 max_effort_linear:=200.0 11. lower_leg_height:=$(arg lower_leg_height) 12. ground_gait:=$(arg ground_gait) 13. realsense_simulation:=$(arg realsense_simulation)" /> 14.

Puesto que este eslabón se debe poder sujetar a la pierna, se ha diseñado un agarre

solidario con el mismo por la parte superior del prisma, que es la que se considera fija, siendo

la inferior la parte extensible. Este agarre tiene forma de semicilindro hueco, con un saliente,

que es el que irá fijo a la tibia del exoesqueleto y por cuya apertura se introduce la pierna del

paciente. Tiene un diámetro interno de 13 cm y un diámetro externo de 15 cm, una altura de

12 cm. El saliente que se interconecta con el eslabón inferior de la pierna, tiene un grosor de

3 cm, una anchura de 4 cm y una altura de 12 cm.

Page 71: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

47

Fig. 5.2: agarre del eslabón inferior del exoesqueleto a la pierna del paciente.

El resultado final del eslabón correspondiente a la tibia del exoesqueleto se muestra en la

siguiente imagen:

Fig. 5.3: eslabones de la parte inferior de la pierna del exoesqueleto.

Un archivo URDF es un formato XML para representar un modelo cinemático y dinámico

de un robot y necesario para realizar la simulación dinámica y el control dinámico del mismo.

La descripción de un robot consiste en un conjunto de elementos de eslabones o links y de

un conjunto de elementos de unión o joints que conectan los eslabones, siguiendo una

Page 72: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

48

relación padre-hijo. El elemento link describe un cuerpo rígido con una geometría,

masa, inercia, propiedades de colisión y características visuales. El elemento joint define las

propiedades cinemáticas y dinámicas, además de los límites de seguridad de la articulación.

Se le debe indicar cuál es el eslabón que hace las veces de nodo “padre” y cuál será su nodo

“hijo”, de forma que cada articulación será el nuevo sistema de referencia para situar origen

del nodo hijo, como se puede ver en Fig. Además, se debe indicar el tipo de articulación

(revolute, continuous, prismatic, fixed, floating, planar) y el tipo de interfaz hardware

(posición, velocidad o esfuerzo).

Fig. 5.4: relación padre-hijo de un fichero URDF

A partir del URDF del exoesqueleto MARCH, se ha creado un nuevo archivo URDF, en

el cual se ha implementado el exoesqueleto que se desea simular y controlar en este proyecto.

En primer lugar, se estableció el argumento “lower_leg_heigh”, cuyo valor por defecto es

0.38 (correspondiente a los 38 cm de longitud media de una tibia humana), y el cual puede

ser cambiado, por el valor que se reciba desde march_world.launch, que previamente ha sido

indicado por el terminal. A continuación, se creó un link llamado lower_leg, que representa

el eslabón de la tibia del exoesqueleto, con forma rectangular de dimensiones

5*7.5*lower_leg_heigh cm. Se estableció como nodo “hijo” de la articulación de la rodilla,

cuyo nodo “padre”, es el eslabón correspondiente a la parte superior de la pierna.

Page 73: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

49

Código 5.4 Lower_leg link

1. <xacro:arg name="lower_leg_height" default="0.385" /> 2. <xacro:property name="lower_leg_height" 3. value="$(arg lower_leg_height)"/> 4. <xacro:property name="lower_leg_mass" value="4.458"/> 5. <xacro:property name="lower_leg_width_x" value="0.075"/> 6. <xacro:property name="lower_leg_width_y" value="0.05"/ 7. <link name="lower_leg_left"> 8. <visual> 9. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 10. <geometry> 11. <box size="${lower_leg_width_x} ${width} 12. ${lower_leg_height}"/> 13. </geometry> 14. </link> 15.

Por otro lado, se estableció un nuevo link llamado support, que se corresponde con el

agarre creado en Autodesk Inventor. Para ello, se importó el archivo STL y se estableció

como la geometría del eslabón.

Código 5.5 Support link

1. <link name="left_support"> 2. <visual> 3. <origin xyz="0 ${lower_leg_width_y + 0.03} -0.05" rpy="1.57 0 1.57"/> 4. <geometry> 5. <mesh filename="package://march_description/urdf/stl-files/support.stl"/> 6. </geometry> 7. <material name="blue"/> 8. </visual> 9. </link>

Por último, se creó una articulación de tipo fixed, para establecer la conexión entre el

eslabón correspondiente a la parte inferior de la pierna, con su agarre solidario. Se estableció

como nodo “padre” el eslabón lower_leg y como nodo “hijo”, el eslabón support.

Código 5.6 Fixed joint

1. <joint name="left_fixing" type="fixed"> 2. <parent link="lower_leg_left"/> 3. <child link="left_support"/> 4. <origin xyz="0 ${lower_leg_width_y/2} ${-lower_leg_height/2}" 5. rpy="0 0 0"/> 6. </joint> 7.

Page 74: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

50

Cabe destacar que, para poder incluir estos nuevos eslabones en el archivo URDF creado

para la simulación del exoesqueleto, ha sido necesario calcular el centro de masas y las

inercias de cada uno de ellos. Para obtener el centro de masas y las inercias del agarre

solidario se ha utilizado la herramienta matemática del mismo Autodesk Inventor, la cual

proporciona todas las propiedades físicas del cuerpo modelado.

Código 5.7 Support inertia

1. <inertial> 2. <origin xyz="0.03 ${lower_leg_width_y + 0.03 -0.07} -0.05" 3. rpy="0 0 0"/> 4. <mass value="${support_mass}"/> 5. <inertia 6. ixx="0.0122162" ixy="-0.0016191" ixz="0.000805" 7. iyy="0.036601" iyz="-0.00158" 8. izz="0.0184"/> 9. </inertial> 10.

Para el caso del eslabón, no es posible realizarlo de esta forma, ya que las inercias variarán

en función de la longitud asignada por terminal a la parte inferior de la pierna, como ya se

ha comentado anteriormente. Por tanto, es necesario realizar su cálculo en el archivo URDF

creado, de manera que se recalcule cada vez que se introduzca el parámetro

“lower_leg_heigh”.

Código 5.8 Lower_leg inertia

1. <inertial> 2. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 3. <mass value="${lower_leg_mass}"/> 4. <inertia 5. ixx="${lower_leg_mass / 12.0 * 6. (lower_leg_width_x*lower_leg_width_y 7. + lower_leg_height*lower_leg_height)}" 8. ixy="0.0" ixz="0.0" 9. iyy="${lower_leg_mass / 12.0 * 10. (lower_leg_height*lower_leg_height + 11. lower_leg_width_x*lower_leg_width_y)}" iyz="0.0" 12. izz="${lower_leg_mass / 12.0 * 13. (lower_leg_width_x*lower_leg_width_y 14. + lower_leg_width_x*lower_leg_width_y)}"/> 15. </inertial>

Page 75: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

51

En último lugar, se modificaron algunas propiedades visuales del resto de eslabones para

crear un diseño personalizado; por ejemplo, cambiando el color en el que los simula Gazebo.

Código 5.9 Gazebo colours

1. <!-- give colors to some links in gazebo --> 2. <gazebo reference="hip_base"> 3. <material>Gazebo/DarkGrey</material> 4. </gazebo> 5. <gazebo reference="hip_aa_frame_left_side"> 6. <material>Gazebo/Grey</material> 7. </gazebo> 8. <gazebo reference="hip_aa_frame_right_side"> 9. <material>Gazebo/Grey</material> 10. </gazebo> 11. <gazebo reference="ankle_plate_left"> 12. <material>Gazebo/Footway</material> 13. </gazebo> 14. <gazebo reference="ankle_plate_right"> 15. <material>Gazebo/Footway</material> 16. </gazebo> 17.

En la Fig se puede contemplar el diseño final del exoesqueleto personalizado, creado a

partir del fichero URDF y simulado en Gazebo.

Fig. 5.5: exoesqueleto creado para la simulación en Gazebo.

Page 76: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.1 MODELADO DEL EXOESQUELETO

52

De esta forma, cuando se ejecute la simulación roslaunch march_simulation

march_simulation.launch lower_leg_heigh:=<longitud de la tibia>,

aparecerá en el mundo de Gazebo un modelo del exoesqueleto, con una tibia del tamaño que

se ha especificado. A continuación, se muestran algunos ejemplos con distintos parámetros.

(A): tibia = 30 cm (B): tibia = 38 cm (C): tibia = 50 cm

Fig. 5.6: nuevo exoesqueleto con diferentes longitudes de tibias

5.2 Análisis cinemático

Con el objetivo de analizar la capacidad de movimiento del exoesqueleto creado, en este

apartado se lleva a cabo el modelo cinemático, el cual estudia la localización del robot sin

tener en cuenta las fuerzas y/o pares que causan el movimiento. El modelo cinemático directo

obtiene la localización del extremo del robot basándose en el valor de las variables

articulares. Entre los distintos métodos de resolución, destaca el cálculo de las

transformaciones homogéneas, para lo cual se utiliza el Algoritmo Denavit Hartenberg (DH).

Este algoritmo consta de un conjunto de nueve reglas para la definición de los sistemas

de referencia, un conjunto de cuatro reglas para calcular los parámetros DH que relaciona

un sistema de referencia con otro y finalmente dos reglas adicionales para calcular las

matrices de transformación entre la base y el extremo del robot.

Page 77: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

53

En el caso que ocupa este proyecto, el exoesqueleto robótico está formado por las

articulaciones de la cadera, la rodilla, el tobillo, y los eslabones móviles las unen. La cadera

está compuesta por dos articulaciones rotacionales, que conjuntamente proporcionan a la

cadera 2 GDL controlables. Si las referenciamos según el sistema de coordenadas globales,

una de ellas permite la rotación alrededor del eje Z, simulando el movimiento de apertura de

la pierna y la otra permite la rotación alrededor del eje Y, permitiendo el movimiento de

elevación de la pierna.

Por su parte, la rodilla consta de 1 GDL controlable que permite el movimiento alrededor

del eje Y de coordenadas globales, proporcionando la flexión de la pierna. Por último, el

tobillo consta de 1 GDL controlable, que permite el giro alrededor del eje Y de coordenadas

globales, haciendo posible la flexión del tobillo necesaria para poder realizar el patrón de

marcha comentado con anterioridad en este trabajo. Por tanto, el modelado de cada pierna

del exoesqueleto puede representarse como se ve en la Fig.

Fig. 5.7: modelado de una pierna

Page 78: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

54

Los pasos en el algoritmo de Denavit Hartenberg son:

1. Numerar los eslabones comenzando con 1 (primer eslabón móvil) y acabando con n

(último eslabón móvil). Se enumerará como eslabón 0 a la base fija del robot.

2. Numerar cada articulación comenzando por 1 (la correspondiente al primer grado de

libertad) y acabando en n.

Fig. 5.8: pasos 1 y 2 del algoritmo DH

3. Localizar el eje de cada articulación. Como son rotativas, el eje es su propio eje de

giro.

4. Para el eje i, de 0 a n-1, situar el eje zi sobre el eje de la articulación i+1.

Page 79: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

55

Fig. 5.9: pasos 3 y 4 algoritmo DH

5. Situar el origen del sistema de la base S0 en cualquier punto del eje z0. Los ejes x0

e y0 se situarán de modo que formen un sistema dextrógiro con z0.

6. Para i de 1 a n-1, situar el origen del sistema Si en la intersección del eje zi con la

línea normal común a zi-1 y zi. Si ambos ejes se cortasen se situaría Si en el punto de

corte. Si fuesen paralelos situaría Si se situaría en la articulación i+1

7. Situar xi en la línea normal común a zi-1 y zi.

Fig. 5.10: pasos 5-7 algoritmo DH

Page 80: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

56

8. Situar yi de modo que forme un sistema dextrógiro con xi y zi

9. Situar el sistema Sn en el extremo del robot de modo que zn coincida con la dirección

de zn-1 y xn sea normal a zn-1 y zn

Fig. 5.11: pasos 8 y 9 algoritmo DH

Con estas nueve reglas, se definen los sistemas de referencia para cada una de las

articulaciones controlables. A continuación, se citan cuatro las reglas para calcular los

parámetros DH que relaciona un sistema de referencia con otro:

10. θi es el ángulo que habría que girar en torno a zi-1 para que xi-1 y xi queden paralelos.

11. di es la distancia medida sobre zi-1 que habría que desplazar Si-1 para alinear xi-1 y xi

12. ai es la distancia medida sobre xi (que ahora coincidiría con xi-1) que habría que

desplazar el nuevo Si-1 para que su origen coincidiese con Si.

13. αi es el ángulo que habría que girar en torno a xi-1(que ahora coincidiría con xi) para

que el nuevo Si-1 coincidiese totalmente con Si.

Siendo li la longitud del eslabón i, la tabla de parámetros de Denavit Hartenberg de una

pierna del exoesqueleto queda de la siguiente manera:

Page 81: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

57

θ d a α

1 q1 0 -l1 -(π/2)

2 q2-(π/2) 0 -l2 0

3 q3 0 -l3 0

4 q4+(π/2) 0 -l4 0

Tabla 5.1. parámetros Denavit Hartenberg

Una vez establecidos estos parámetros, se pueden utilizar para el cálculo de la cinemática

directa de la pierna, que permite determinar la localización del extremo del robot basándose

en la posición de las articulaciones. Para obtenerla es necesario calcular la matriz de

transformación homogénea i-1Ti de cada articulación usando:

i-1Ti =

[ 𝑐𝑜𝑠𝜃 −𝑐𝑜𝑠𝛼 ∗ 𝑠𝑒𝑛𝜃 𝑠𝑒𝑛𝛼 ∗ 𝑠𝑒𝑛𝜃𝑠𝑒𝑛𝜃 𝑐𝑜𝑠𝛼 ∗ 𝑐𝑜𝑠𝜃 −𝑠𝑒𝑛𝛼 ∗ 𝑐𝑜𝑠𝜃 0 𝑠𝑒𝑛𝛼 𝑐𝑜𝑠𝛼

𝑎 ∗ 𝑐𝑜𝑠𝜃 𝑎 ∗ 𝑠𝑒𝑛𝜃

𝑑0 0 0 1

]

(5.1)

Aplicando esta fórmula, y siendo C=cos y S=sen se obtienen todas las matrices de

transformación. La matriz de transformación de la primera a la segunda articulación; es

decir, la transformación entre los sistemas de referencia de las dos articulaciones rotacionales

que proporcionan el movimiento de la cadera, se puede ver en (5.2).

0T1 =

[ 𝐶(𝑞1) −𝐶(𝜋/2) · 𝑆(𝑞1) 𝑆(−𝜋/2) · 𝑆(𝑞1)

𝑆(𝑞1) 𝐶(−𝜋/2) · 𝐶(𝑞1) −𝑆(−𝜋/2) · 𝐶(𝑞1) 0 𝑆(−𝜋/2) 𝐶(−𝜋/2)

−𝑙1 · 𝐶(𝑞1)

−𝑙1 · 𝐶(𝑞1)0

0 0 0 1 ]

(5.2)

La matriz de transformación 1T2 corresponde a la transformación entre el sistema de

referencia de la segunda articulación de la cadera, que permite la flexión de la misma, y el

sistema de referencia de la articulación de la rodilla. Se puede ver en (5.3).

Page 82: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

58

1T2 =

[ 𝐶(𝑞2 − 𝜋/2) −𝑆(𝑞2 − 𝜋/2) 0

𝑆(𝑞1) 𝐶(−𝜋/2) · 𝐶(𝑞1) −𝑆(−𝜋/2) · 𝐶(𝑞1) 0 0 1

−𝑙2 · 𝐶(𝑞2 − 𝜋/2) −𝑙1 · 𝑆(𝑞2 − 𝜋/2)

00 0 0 1

]

(5.3)

Del mismo modo, 2T3 representa la matriz de transformación entre el sistema de

referencia la articulación de la rodilla y el sistema de referencia del tobillo y se puede ver en

(5.4).

2T3 =

[ 𝐶(𝑞3) −𝑆(𝑞3) 0

𝑆(𝑞3) 𝐶(𝑞3) 0 0 0 1

−𝑙3 · 𝐶(𝑞3)

−𝑙1 · 𝑆(𝑞2 − 𝜋/2)0

0 0 0 1 ]

(5.4)

Por último, la matriz 3T4, la cual se puede ver en (5.5), representa la transformación entre

el sistema de referencia del tobillo y el sistema de referencia del extremo del exoesqueleto,

que se corresponde con la punta del pie.

3T4 =

[ 𝐶(𝑞4 + 𝜋/2) −𝑆(𝑞4 + 𝜋/2) 0

𝑆(𝑞4 + 𝜋/2) 𝐶(𝑞4 + 𝜋/2) 0 0 0 1

−𝑙2 · 𝐶(𝑞4 + 𝜋/2)

−𝑙1 · 𝑆(𝑞4 + 𝜋/2)0

0 0 0 1 ]

(5.5)

La matriz final de transformación, que relaciona el sistema de la base con el del extremo

del robot, se obtiene multiplicando todas las matrices anteriores.

0T4 = 0T1 · 1T2 ·

2T3 · 3T4 =

[ 𝐶(𝑞1)𝐶(𝑞3)𝐶 (𝑞2 −

𝜋

2)𝐶(𝑞4 + 𝜋/2) 0 0

𝑆(𝑞1)𝑆(𝑞3)𝑆 (𝑞2 −𝜋

2) 𝑆(𝑞4 + 𝜋/2) 0 0

0 0 0

𝑙1𝑙22𝑙3𝐶(𝑞3)𝐶 (𝑞2 −𝜋

2)𝐶(𝑞4 + 𝜋/2)

𝑙13𝑙3𝑆(𝑞1)𝑆(𝑞3)𝑆 (𝑞2 −𝜋

2) 𝑆(𝑞4 +

𝜋

2)

0 0 0 0 1

]

(5.6)

Page 83: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.2 ANÁLISIS CINEMÁTICO

59

Los parámetros de esta matriz se corresponden con los parámetros de rotación y

translación, según (5.7)

i-1Ti =

[ 𝑋𝑥𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑋𝑦𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑋𝑧𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑌𝑥𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑌𝑦𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑌𝑧𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑍𝑥𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑍𝑦𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑍𝑧𝑜 𝑒𝑥𝑡𝑟𝑒𝑚𝑜

𝑋0 𝑒𝑥𝑡𝑟𝑒𝑚𝑜 𝑌0 𝑒𝑥𝑡𝑟𝑒𝑚𝑜𝑍0 𝑒𝑥𝑡𝑟𝑒𝑚𝑜

0 0 0 1 ]

(5.7)

5.3 Modificación del patrón de marcha

En este apartado se van a exponer las modificaciones realizadas en el patrón de marcha

respecto al original, de forma que se mejoren los pasos del exoesqueleto, logrando una

marcha más estable y más cercana a la marcha humana.

Una vez creado el URDF del nuevo exoesqueleto y lanzada su simulación, se ejecutó la

interfaz que permite su movimiento. Dicha interfaz se basa en el entorno rqt, un marco de

software de ROS que implementa las diversas herramientas GUI en forma de complementos.

Las herramientas de rqt permiten representaciones gráficas de nodos, temas, mensajes y otra

información de ROS.

Esta interfaz está implementada en ROS 2, por lo cual, es necesario crear un puente entre

ROS 1 y ROS 2, de forma que puedan compartir los topics e intercambiar mensajes. Por

tanto, el proceso para lanzar dicha interfaz es:

1. Configurar el entorno de ROS 1

source /opt/ros/noetic/local_setup.bash

source ~/march/ros1/install/local_setup.bash

2. Configurar el entorno de ROS 2

source /opt/ros/foxy/local_setup.bash

Page 84: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

60

source ~/march/ros2/install/local_setup.bash

3. Abrir el workspace del puente de ROS:

cd ~/ros1_bridge

4. Configurar el entorno:

source install/local_setup.bash

5. Contactar con el master:

export ROS_MASTER_URI=http://localhost:11311

6. Lanzar el puente entre ROS 1 y ROS 2:

ros2 run ros1_bridge dynamic_bridge --bridge-all-topics

Con estos pasos, se ha establecido el puente entre las dos versiones de ROS. Los

siguientes pasos, indican cómo lanzar la interfaz de ROS 2:

7. Configurar el entorno de ROS 2:

source /opt/ros/noetic/local_setup.bash

source ~/march/ros1/install/local_setup.bash

8. Lanzar la interfaz rqt:

ros2 launch march_launch march_ros2_simulation.launch.py

Aparece entonces una ventana emergente con la interfaz, cuyo aspecto se muestra en Fig.

Page 85: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

61

Fig. 5.12: interfaz rqt para mover el exoesqueleto.

De esta forma, se puede seleccionar el tipo de patrón de movimiento que se desea que

realice el exoesqueleto. En primer lugar, se probó a solicitar el patrón “walk”, que permite

mover el exoesqueleto sobre un terreno llano, y se observó que tenía dificultades para

caminar, ya que la punta del pie colisionaba con el suelo. Cuando intentaba dar un paso, se

tropezaba, se resbalaba, balanceaba la pierna y provocaba la pérdida de la estabilidad.

Fig. 5.13: pie colisionando con el suelo

Page 86: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

62

Por tanto, se decidió crear unos patrones de marcha propios para cada uno de los patrones

de marcha, que son llamados desde la interfaz rqt, con el objetivo de eliminar los problemas

detectados en el ciclo de marcha.

Un patrón de marcha, llamado “gait”, está formado por varias fases, como se comentó en

apartados anteriores, llamadas “subgaits”. Cada fase, se implementa en un archivo de tipo

subgait, que contiene el nombre del gait al que pertenece, su nombre, su duración y el valor

que toma cada una de las variables articulares en un periodo determinado por su inicio.

El patrón o gait llamado “walk”, está formado por cinco subgaits:

• Right_open: corresponde al inicio de la marcha, en el cual se parte de un apoyo

doble, con las piernas juntas y se llega hasta un apoyo total de la pierna izquierda,

mientras que la derecha, solo toca el suelo con el talón

• Right_close: corresponde al fin de la marcha, en el cual, se parte de un apoyo total

de la pierna izquierda en el suelo, mientras que la derecha solo toca con el talón y

se llega a un apoyo doble completo para las dos piernas, de forma que quedan

juntas como al inicio de la marcha.

• Left_close: es exactamente lo mismo que el anterior, pero para la pierna contraria.

Corresponde al fin de la marcha, en el cual, se parte de un apoyo total de la pierna

derecha en el suelo, mientras que la izquierda solo toca con el talón y se llega a

un apoyo doble completo para las dos piernas, de forma que quedan juntas como

al inicio de la marcha.

• Right_swing: corresponde a un paso de avance, en el cual la pierna izquierda se

encuentra en constante contacto con el suelo, mientras la derecha realiza un

balanceo. Esta última, está inicialmente tocando el suelo únicamente con la punta

del pie, lo mueve hacia delante y finaliza tocando el suelo únicamente con el talón.

Page 87: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

63

• Left_swing: corresponde a un paso de avance, en el cual la pierna derecha se

encuentra en constante contacto con el suelo, mientras la izquierda realiza un

balanceo. Esta última, está inicialmente tocando el suelo únicamente con la punta

del pie, lo mueve hacia delante y finaliza tocando el suelo únicamente con el talón.

Código 5.10 Ejemplo subgait

1. duration: 1200000000 2. gait_type: walk_like 3. joints: 4. left_ankle: 5. - position: 0.04360007 6. time_from_start: 0 7. velocity: 0.0 8. - position: 0.04360007 9. time_from_start: 1200000000 10. [ . . .. . . . . . . . . . . . . . . ] 11. name: right_swing 12. version: MIV_Sheila 13.

Por su parte, el patrón de marcha se implementa en un archivo del tipo .gait, que consiste

en una máquina de estados, en la cual cada uno de sus estados es un subgait, y la condición

de transición es la finalización de dicho subgait. Comienza desde “right_open” para iniciar

la marcha. Cuando finaliza, realiza una transición hacia “left_swing”, para realizar la fase

de balanceo con la pierna izquierda y cuando finaliza esta, realiza otra transición hasta

“right_swing”, que realiza la fase de balanceo con la pierna derecha. Estas dos fases se

repiten en bucle constantemente hasta que se recibe una señal de paro llamada “stop”. En

ese momento, el estado siguiente de ambas fases cambia, siendo ahora “left_close” el

siguiente estado tras finalizar “right_swing” y “right_close” el siguiente estado tras finalizar

“left_swing”. La estructura de esta máquina de estados puede observarse en el siguiente

código:

Código 5.11 Walk.gait

1. name: walk 2. subgaits: 3. start: 4. to: right_open 5. right_open: 6. to: left_swing

Page 88: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

64

7. left_swing: 8. to: right_swing 9. stop: right_close 10. right_swing: 11. to: left_swing 12. stop: left_close 13. left_close: 14. to: end 15. right_close: 16. to: end

Una vez creado un patrón de marcha propio, especificando el valor de las variables

articulares en cada periodo de tiempo, es necesario establecerlo por defecto, cuando se llame

desde la interfaz rqt. Esto es posible mediante el archivo defautl.yaml, el cual, para cada

patrón de marcha o gait, se establece cuáles son los subgaits que tomará. Por tanto, se

establecen por defecto los MIV_improved para el patrón de marcha “walk”.

Código 5.12 Default.yaml

1. Gaits: 2. walk: 3. right_open: MIV_Sheila 4. left_swing: MIV_Sheila 5. right_swing: MIV_Sheila 6. left_close: MIV_Sheila 7. right_close: MIV_Sheila 8.

El ejecutable march_ros2_simulation.launch.py que se lanza para visualizar la interfaz

rqt, llama a su vez a gait_selection.launch.py. Este, a su vez, carga el nodo

gait_selection.py, que es el que inicia default.yaml, y cuando recibe el tipo de patrón que se

desea utilizar, busca en este archivo su nombre para conocer el nombre de los subgaits que

deben ser empleados.

Ahora, cada vez que se lance la interfaz, y se seleccione el patrón de marcha “walk”,

cargará el nuevo patrón creado.

Con el fin de visualizar de forma gráfica los patrones creados, se utiliza una interfaz,

también creada en rqt, en la cual es posible observar el valor que toman las variables

articulares en cada instante de tipo, para un subgait concreto. Para ello se debe:

Page 89: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.3 MODIFICACIÓN DEL PATRÓN DE MARCHA

65

1. Configurar el entorno de ROS 1

source /opt/ros/noetic/local_setup.bash

source ~/march/ros1/install/local_setup.bash

2. Lanzar la interfaz: roslaunch march_rqt_gait_generator

march_rqt_gait_generator.launch

Aparece entonces una ventana emergente con el entorno rqt, en el cual es posible

seleccionar un subgait concreto, y se observan gráficamente los valores articulares en el

tiempo, como en la Fig.

Fig. 5.14: gráficas de variables articulares en el tiempo para Right_swing

Como se puede observar, la pierna derecha es la que realiza el balanceo mientras que la

pierna izquierda, permanece prácticamente inmóvil la mayoría de tiempo.

Page 90: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

66

5.4 Introducción de obstáculos

El patrón de marcha comentado en el apartado anterior, permite que el exoesqueleto

creado camine sobre un terreno llano y liso. En este apartado, se trata la introducción de

nuevos obstáculos y los patrones de marcha necesarios para que el exoesqueleto pueda

avanzar sin problema.

Los obstáculos son archivos XACRO de ROS, que se pueden introducir en el entorno de

Gazebo, para simularlos junto con el exoesqueleto. Al igual que la longitud de la tibia del

exoesqueleto, es posible indicar por terminal si se desea introducir un obstáculo. El archivo

march_simulation.launch lo carga como argumento y se lo envía a march.launch, que lo

vuelve a recibir como argumento y se lo trasmite a march_world.launch. Una vez

introducidos los obstáculos, se debe observar cómo alteran al patrón de marcha, y corregirlo

en caso de que fuera necesario. Los obstáculos probados son:

• Escaleras: debido a que el exoesqueleto, debe situar la pierna de balanceo en un nivel

superior, el patrón de marcha se ve modificado. En este caso la pierna que produce

el balanceo y, por tanto, el avance, debe tomar un ángulo de 90º tanto para la

articulación de la cadera, que rota en torno al eje Y del sistema de referencia global,

como de la rodilla.

Fig. 5.15: simulación de escaleras

Page 91: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.4 INTRODUCCIÓN DE OBSTÁCULOS

67

En la siguiente imagen, se puede observar, cómo han aumentado los valores articulares

de la cadera y la rodilla derecha para poder subir la escalera.

Fig. 5.16: patrón subida de escalera con la pierna derecha

• Rampa: el ciclo de marcha es igual que para un terreno llano, con la diferencia de

que el grado de flexión de la articulación de la cadera y la rodilla debe ser mayor para

la pierna que se encuentra a una altura superior y menor para la pierna que se

encuentra a una altura inferior. De esta forma se logra compensar el desnivel.

Page 92: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.4 INTRODUCCIÓN DE OBSTÁCULOS

68

Fig. 5.17: simulación de la rampa

En la siguiente imagen se puede observar cómo aumenta la flexión de la cadera y la rodilla

de la pierna derecha, que es la que está avanzando hacia arriba, y cómo disminuye para la

cadera y la rodilla de la pierna izquierda, que se queda retrasada a una altura menor.

Fig. 5.18: patrón subida de rampa con la pierna derecha

Page 93: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.4 INTRODUCCIÓN DE OBSTÁCULOS

69

• Plano inclinado: en este tipo de obstáculo es cuando entra en juego, la articulación

de la cadera que rota en torno al eje X del sistema de referencia global cuando está

de pie y en torno al eje Z cuando está sentado. Esta articulación permite variar el

ángulo que forman las piernas con el torso, que inicialmente es 180º, de forma que,

cuando se encuentre en un plano inclinado, pueda modificarlo para compensar el

peso y aumentar su estabilidad.

Fig. 5.19: simulación en plano inclinado

En esta imagen, se muestra como ahora el ángulo de la primera articulación de la cadera,

no permanece constante como en los otros casos, sino que aumenta para una pierna mientras

disminuye para la contraria.

Page 94: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.4 INTRODUCCIÓN DE OBSTÁCULOS

70

Fig. 5.20: patrón balanceo pierna izquierda en un plano inclinado

Banco: este patrón es el más simple, y consiste en dar un valor final de 90º tanto a las

articulaciones de la rodilla como de la cadera en ambas piernas.

Fig. 5.21: exoesqueleto sentado en el banco

Page 95: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.4 INTRODUCCIÓN DE OBSTÁCULOS

71

Como se puede observar, la cadera y la rodilla de ambas piernas, toman un valor final de

aproximadamente 90º, mientras que el resto de articulaciones permanecen constantes.

Fig. 5.22: patrón para sentarse

5.5 Análisis del controlador

A partir de la información adquirida sobre el funcionamiento de ROS_Control, explicada

en capítulos anteriores, en este apartado se analizará el funcionamiento del controlador que

dirige los movimientos del exoesqueleto y se determinará el tipo de control que realiza.

Para saber cuál es el controlador que utiliza, primero es necesario conocer el nombre el

archivo.yaml al que se llama desde march.launch. Si se accede a este archivo, puede

observarse que se llama al nodo que lanza el fichero “march.yaml”. A continuación, de debe

localizar y abrir dicho archivo para ver su contenido. Es posible apreciar que en su

implementación carga dos tipos de controladores: state_controller y

effortControllers/JointTrajectoryController. El primero, como ya se comentó anteriormente,

Page 96: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.5 ANÁLISIS DEL CONTROLADOR

72

es el encargado de obtener el estado actual de cada una de las articulaciones y el segundo,

por su parte, es el que controla todos los movimientos del robot, y es que se desea analizar

para identificar su tipo de control.

Una vez conocido qué controlador dirige al exoesqueleto, se procede a analizarlo. Es

posible ver que, al igual que todos los controladores implementados con ROS_Control,

consta de cuatro funciones principales con la siguiente implementación:

• Init: en la cual extrae el modelo URDF del robot, el nombre de todas las

articulaciones que posee, el estado actual y deseado de las mismas, y establece la

conexión con todos los topics necesarios para el control.

• Update: en la cual extrae los puntos prefijados en el patrón de marcha seleccionado,

calcula el error en posición actual y llama al archivo hardware_interface, para

realizar la acción de control.

• Start: en la cual inicia el contador del tiempo.

• Stop: en la cual se finaliza el control.

Como se puede apreciar, en la función update que, como se explicó anteriormente,

implementa el control propiamente dicho, llama al archivo hardware_interface enviándole

el error obtenido en posición, velocidad y aceleración, por lo que también es necesario su

análisis para comprender el funcionamiento del controlador. Este archivo contiene una

función llamada updateCommand, equivalente a la función update del controlador de

esfuerzos, en la cual mediante los valores de error y los valores deseados de posición,

velocidad y aceleración, realiza la acción de control como se explicó en el segundo capítulo.

Finalmente, cabe destacar que en el mismo archivo march.yaml donde se invoca al

controlador, se establecen las variables PID de control, así como los límites articulares.

Puesto que el valor de la ganancia integral es nulo para todas las articulaciones, puede

considerarse que se está realizando un control de tipo PD.

Page 97: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

73

5.6 Modificaciones del controlador

Con el objetivo de mejorar el controlador, se pretende recudir el error articular, de forma

que el movimiento sea lo más semejante a la marcha humana y lo más fiel al patrón de

marcha preestablecido en el apartado anterior. En este apartado se detallarán los pasos

seguidos y las consideraciones tomadas para poder llevar este proceso a cabo.

El diagrama de bloques mostrado a continuación representa un control realimentado de

la salida de un sistema o planta. La función de transferencia de la planta es 𝑃(𝑠), el

controlador está representado por la función 𝐶(𝑠) y la salida por del sistema 𝑌(𝑠). La

funcionalidad de este sistema de control es alcanzar el valor de la entrada 𝑅(𝑠) para que el

error entre la entrada y la salida, 𝐸(𝑠), sea nulo.

Fig. 5.23: diagrama de bloques de un control con realimentación.

La salida del sistema viene dada por la siguiente expresión:

𝑌(𝑠) = 𝐶(𝑠)𝑃(𝑠)(𝑅(𝑠) − 𝑌(𝑠)) (5.8)

Por lo tanto, resolviendo esta expresión se puede obtener la función de transferencia de

este sistema realimentado:

𝑌(𝑠)

𝑅(𝑠) =

𝐶(𝑠)𝑃(𝑠)

1 + 𝐶(𝑠)𝑃(𝑠) (5.9)

Como se puede ver en esta ecuación, la planta es un sistema de segundo orden, por lo cual

la función de transferencia en bucle cerrado se puede expresar como:

Page 98: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

74

𝑌(𝑠)

𝑅(𝑠) =

𝜔𝑛2

𝑠2+2·𝜁·𝜔𝑛·𝑠+ 𝜔𝑛2 (5.10)

donde ωn es la frecuencia natural del sistema y ζ es la amortiguación. A la ecuación (5.10)

se le denomina función de transferencia estándar de segundo orden. Sus características de

respuesta dependen de los valores de ωn y ζ.

Dado que se pretende controlar la posición de las articulaciones que conforman el

exoesqueleto a partir de comandos de esfuerzos, es necesario considerar cada articulación

como un sistema de segundo orden, igual que el mostrado. La función de transferencia,

aplicada al control fuerza – posición del exoesqueleto se muestra en (5.11).

𝐺(𝑠) =1

𝑠·(𝐽𝑠+𝐵) (5.11)

donde J es el valor inercial de la articulación controlada y B el facto de amortiguamiento.

El controlador PD de posición se muestra en la siguiente expresión:

𝑉𝑚(𝑡) = 𝐾𝑝(θ𝑑(𝑡) − θ𝑙(𝑡) − 𝐾𝑣( 𝑑

𝑑𝑡 θ𝑙(𝑡)) (5.12)

Donde 𝐾𝑝 es la ganancia de control proporcional, 𝐾𝑣 es la ganancia de control derivativa

o de velocidad, θ𝑑(𝑡) es el ángulo de referencia proporcionado al motor, θ𝑙(𝑡) es el ángulo

del eje medido en el bucle de control, y 𝑉𝑚(𝑡) es la tensión de entrada del motor. El diagrama

de bloques del control PD se muestra en siguiente figura.

Page 99: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

75

Fig. 5.24: diagrama de bloques de un control PD de posición.

Para la resolución de los parámetros del controlador PD, es necesario encontrar la función

de transferencia en lazo cerrado θ𝑙(𝑡)/θ𝑑(𝑡).

Transformando la expresión anterior al espacio de Laplace, se tiene que:

𝑉𝑚(𝑠) = 𝑘𝑝(𝜃𝑑(𝑠) − 𝜃𝑙(𝑠)) – 𝑘𝑣 · 𝑠 · 𝜃𝑙(𝑠) (5.13)

Del diagrama de bloques mostrado en la figura anterior, se puede escribir la siguiente

expresión:

𝜃𝑙(𝑠)

𝑉𝑚(𝑠) =

1

𝑠(𝐽𝑠+𝐵) (5.14)

Sustituyendo la ecuación (5.13) en la (5.14), y resolviendo el cociente θ𝑙(𝑡)/θ𝑑(𝑡), se

puede obtener la función de transferencia en bucle cerrado del controlador de posición, que

relaciona el ángulo deseado y el de salida:

𝜃𝑙(𝑠)

𝜃𝑑(𝑠) =

𝐾𝑝

𝐽𝑠2+(1+𝐵·𝐾𝑣)𝑠+𝐾𝑝 (5.15)

Page 100: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

76

Igualando esta ecuación con la (5.1), es posible obtener los valores de 𝐾𝑝 y 𝐾𝑣 en función

de los valores de inercia 𝐽, de amortiguamiento 𝐵, de frecuencia natural 𝜔𝑛 y de

amortiguamiento 𝜁. Para poder despejarlos, es necesario dejar la ecuación (5.15) de la misma

forma que la ecuación (5.1), dividiendo toda la función entre 𝐽, como se muestra a

continuación.

𝐾𝑝

𝐽

𝑠2+(1+𝐵·𝐾𝑣)𝑠

𝐽+𝐾𝑝

𝐽

= 𝜔𝑛2

𝑠2+2·𝜁·𝜔𝑛·𝑠+ 𝜔𝑛2 (5.16)

De esta forma es posible obtener los valores de 𝐾𝑝 y 𝐾𝑣, tal como se muestra en (5.17)

y (5.18).

𝐾𝑝 = 𝜔𝑛 · 𝐽 (5.17)

𝐾𝑣 = 2 · 𝜁 · 𝜔𝑛 · 𝐽 (5.18)

Una vez establecidas todas ecuaciones necesarias para establecer las variables de control,

es necesario obtener los valores específicos para el exoesqueleto. En primer lugar, es

necesario obtener la función de transferencia tal y como se indica en (5.11). El valor 𝐽 se

puede obtener con (5.19)

𝐽 = 𝐼𝑥𝑥 + 𝑚𝑎𝑠𝑠

𝑟𝑒𝑑2 (5.19)

donde 𝐼𝑥𝑥 corresponde al valor de inercia del eslabón contiguo a la articulación, mass es la

masa de dicho eslabón y red corresponde a la relación de reducción de dicha articulación.

Desde el archivo URDF se pueden obtener los valores de 𝐼𝑥𝑥 y de la masa del eslabón

mirando la declaración del link que corresponde al nodo hijo de la articulación a analizar.

Por otro lado, la relación de reducción, se encuentra en la declaración de dicho joint como

“Mechanical Reduction”.

Page 101: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

77

Además, se considera que el valor B para todas las articulaciones es igual a la unidad. Por

lo tanto, las funciones de transferencia para cada una de las articulaciones se obtienen de la

siguiente forma:

• Hip_aa

𝐼𝑥𝑥 = 0.013

mass = 2.9282

red = 200

𝐽 = 0.013 +2.928200

= 0.013075 (5.20)

𝐺1(𝑠) =1

0.013075·𝑠2+𝑠 (5.21)

• Hip_fe

𝐼𝑥𝑥 = 0.127

mass = 4.995

red = 101

𝐽 = 0.127 +4.995101

= 0.1275 (5.22)

𝐺1(𝑠) =1

0.1275·𝑠2+𝑠 (5.23)

• Knee

𝐼𝑥𝑥 = 0.00139·h, donde h es la altura del eslabón de la tibia.

mass = 4.485

red = 101

𝐽 = 0.00139 · ℎ +4.485101

= 0.00139·h+0.045 (5.24)

𝐺1(𝑠) =1

(0.00139·ℎ+0.045)·𝑠2+𝑠 (5.25)

• Ankle

𝐼𝑥𝑥 = 0.021

Page 102: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

78

mass = 1.821

red = 200

𝐽 = 0.021 +1.821200

= 0.03 (5.26)

𝐺1(𝑠) =1

0.03·𝑠2+𝑠 (5.27)

Para obtener los valores de 𝐾𝑝 y 𝐾𝑣 necesarios para el control de cada una de las

articulaciones, se realiza el mismo proceso que se hizo en las ecuaciones de la (5.13) a la

(5.16) con los sistemas de referencia adquiridos. De esta forma, tal y como se mostraba en

(5.17) y (5.18), es posible obtener los valores de 𝐾𝑝 y 𝐾𝑣 para cada uno de ellos.

Dado que se desea mejorar los valores de las ganancias establecidas por defecto, en primer

lugar, se realizará un proceso inverso, y partiendo de los valores 𝐾𝑝 y 𝐾𝑣 establecidos, se

calculará la frecuencia natural ωn y el amortiguamiento 𝜁. A partir de ellos, se endurecen las

especificaciones con el propósito de obtener un tiempo de respuesta menor, según las

siguientes ecuaciones.

𝑡𝑝 =𝜋

𝜔𝑛·√1−𝜁 (5.27)

𝑡𝑠 =𝜋

𝜔𝑛·𝜁 (5.28)

𝑡𝑑 =1+ 𝜁

√2𝜔𝑛

(5.29)

donde 𝑡𝑝 es el tiempo de pico, 𝑡𝑝 es el tiempo de establecimiento y 𝑡𝑑 es el tiempo de

retardo. Si se disminuyen estos tres tiempos, el sistema responderá más rápido reduciendo

el error. Por otra parte, cuando mayor sea el valor de 𝜁, crecerá el amortiguamiento del

sistema y se producirá una menor sobreoscilación. Teniendo todas estas condiciones en

cuenta y endureciendo con ellas las restricciones, se establecen nuevos valores de ganancia

𝐾𝑝 y 𝐾𝑣 para poner a prueba el sistema.

Page 103: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

5.6 MODIFICACIONES DEL CONTROLADOR

79

Para poder asignar estos valores al controlador, deben indicarse en el archivo yaml, que

como se comentó en apartados anteriores, inicializa las ganancias a utilizar por el controlador

al que llama.

Page 104: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 105: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

81

6. Pruebas y experimentación

En este apartado se detallarán cuáles han sido los resultados de las pruebas que se han ido

realizando a lo largo del desarrollo de este proyecto. En primer lugar, se mostrará cómo el

exoesqueleto sigue los patrones de marcha creados y a continuación, se expondrán los

resultados obtenidos con la modificación del controlador.

6.1 Patrones de marcha

Con el propósito de justificar que el exoesqueleto sigue los nuevos patrones de marcha

que fueron creados y establecidos por defecto, se obtiene el valor articular de cada

articulación que forma parte del exoesqueleto en cada instante de tiempo. Esto es posible

gracias al topic de jointState, que publica constantemente dicho valor.

En primer lugar, se analiza el patrón de marcha “walk” que, como se comentó en

apartados anteriores, corresponde a una marcha en un terreno llano y sin inclinación. A

continuación, se muestra la evolución de todas las articulaciones.

Fig. 6.1: articulaciones hip_aa ejecutando el patrón walk.

Page 106: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

82

Las articulaciones hip_aa, que corresponden a la primera articulación de la cadera, deben

permanecer inmóviles durante este patrón de marcha, lo que explica que su valor sea tan

ínfimo. El hecho de que no sea completamente cero, viene determinado por el error articular,

que se comentará posteriormente.

Fig. 6.2: articulaciones hip_fe para el patrón walk.

La gráfica de color morado corresponde a la segunda articulación de la cadera, hip_fe, de

la pierna izquierda y la de color rosa corresponde a la mima articulación, pero de la pierna

derecha. Esta gráfica muestra las fases de balanceo de la pierna izquierda y derecha. Por

tanto, se puede apreciar cómo se va repitiendo constantemente la curva de balanceo creada

en el patrón de marcha para la cadera, intercalando ambas piernas. Parten desde una posición

de la pierna atrasada, -0.2, hasta una posición de avance de la pierna, 0.5.

Fig. 6.3: articulaciones knee para el patrón walk.

Page 107: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

83

En la gráfica de la Fig. 6.3, se ve representado en verde la evolución de la rodilla izquierda

y en azul la evolución de la rodilla derecha. Al igual que en el caso anterior, es posible

observar la curva de flexión de la rodilla de ambas piernas que fue creada para elevarlas al

realizar las fases de balanceo. Como se puede apreciar, se flexionan hasta una amplitud de

1.15 durante el balanceo para avanzar, y posteriormente se estiran completamente para servir

de pierna de apoyo. Debido al error, que se comentará posteriormente, el valor de las

articulaciones de la rodilla no se establece completamente a cero durante la fase de apoyo

simple.

Fig. 6.4: articulaciones ankle del patrón walk

En esta última gráfica del patrón “walk”, se aprecian en azul el valor articular del tobillo

izquierdo y el rojo el valor articular del tobillo derecho. A estos se les asignó dos perfiles

trapezoidales, con el fin de flexionar el tobillo para realizar el movimiento de contacto

progresivo con el suelo. Como es posible observar, alcanzan los puntos máximos y se

mantiene en ellos con mucha precisión, sin embargo, la transición hacia ellos no es perfecta

debido a que el contacto con el suelo incrementa el error.

Una vez finalizado el análisis de este patrón de marcha, se realizará el mismo proceso

para los otros cuatro patrones, mostrando la evolución del estado de las articulaciones en

tiempo real y analizando su comportamiento.

A continuación, se muestra el patrón de marcha “stairs”, que permite subir escaleras:

Page 108: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

84

Fig. 6.5: articulaciones hip_aa para el patrón stairs.

Como pasaba en el patrón anterior, la primera articulación de la rodilla para ambas piernas

debe permanecer inmóvil durante todo el patrón. Sin embargo, se vuelve a apreciar un ligero

error durante todo el movimiento.

Fig. 6.6: articulaciones hip_fee durante el patrón stairs.

Esta gráfica muestra la evolución de las segundas articulaciones de la cadera de ambas

piernas durante la subida de una escalera. La línea verde muestra el movimiento

correspondiente a dicha articulación para la pierna izquierda y la naranja lo mismo para la

pierna derecha. Como se puede apreciar, siguen el perfil de una flexión de 1.3 radianes (75

grados) de la cadera para situar la pierna en el siguiente escalón y a continuación, vuelve a

la posición inicial para realizar la subida.

Page 109: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

85

Fig. 6.7: articulación knee para el patrón stairs

Este gráfico, muestra en morado la evolución de la articulación de la rodilla izquierda en

morado y de la rodilla derecha en azul. Al igual que la anterior, primero se aprecia una

flexión, en este caso de 1.65 radianes (94 grados), que permite posicionar el pie en el escalón

superior y, posteriormente, vuelve a su posición inicial de extensión total para realizar la

subida. Si se comparan las Fig. 6.6 y 6.7, es posible apreciar que tanto la flexión como la

extensión de la cadera y la rodilla se producen de manera simultánea.

Fig. 6.8: articulación ankle para el patrón stairs.

Como se puede observar, las articulaciones de los tobillos tienen un ligero movimiento,

tal y como se estableció en el patrón de marcha, en el cual realizan un pequeño giro

antihorario. De ahí que la curva aparezca invertida.

Page 110: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

86

A continuación, se mostrarán los resultados obtenidos para el patrón de marcha “ramp”,

que es útil para subir una pendiente como puede ser la de una rampa:

Fig. 6.9: articulación hip_aa para el patrón ramp.

Al igual que en los otros dos patrones, la primera articulación de la cadera debe

permanecer inmóvil para ambas piernas. Sin embargo, vuelve hacerse presente un pequeño

error articular que implica que esto no se cumpla.

Fig. 6.10: articulación hip_fee para el patrón ramp.

En el caso de la segunda articulación de la cadera, se puede apreciar en la Fig. 6.10, en

color verde para la pierna derecha y en naranja para la izquierda, cómo realizan la curva de

balanceo para lograr el avance del mismo modo que para el patrón “walk”, solo que, en este

Page 111: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

87

caso, con un valor mayor de flexión al no tratarse de un terreno llano, tal y como se explicó

en la creación de este patrón. Como se puede observar el patrón es seguido de forma correcta.

Fig. 6.11: articulación knee para el patrón ramp.

En la gráfica es posible ver la evolución de las articulaciones de la rodilla para ambas

piernas, representando a derecha en rosa y la izquierda en morado. Al igual que para la

segunda articulación de la rodilla, es posible observar que la curva de flexión de la rodilla

para el balanceo de la pierna es seguida de forma correcta.

Fig. 6.12: articulación ankle para el patrón ramp.

Por último, en la Fig. 6.12, se puede contemplar en verde el patrón del tobillo izquierdo

y en azul el patrón del tobillo derecho. Tal y como se esperaba, el grado de flexión del tobillo,

Page 112: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

88

es mayor que en otros patrones, dado que el pie no se encuentra en posición horizontal debido

a la pendiente del plano. La diferencia entre las amplitudes de ambos tobillos viene causada

por un error articular que posteriormente será comentado.

Por otro lado, se va a analizar el patrón “tilted_path”, correspondiente a un plano

inclinado que el exoesqueleto debe atravesar:

Fig. 6.13: articulación hip_aa para el patrón tilted_path

Como se comentó en la creación del patrón “tilted_path”, este es el único en el que las

primeras articulaciones de la cadera no permanecen constantes, sino que deben realizar un

pequeño giro para compensar la inclinación del plano a atravesar. Dicho giro es apreciable

en la Fig. 6.13 en la cual se muestra en rojo la pierna izquierda y en azul la derecha. El giro

de la pierna izquierda es positivo y, por tanto, en sentido horario, ya que esta pierna se

encuentra a mayor altura. Sin embargo, el giro de la pierna derecha es negativo y, por tanto,

antihorario, debido a que esta pierna se encuentra a una altura menor. Por tanto, es correcto

afirmar que el patrón para esta articulación se está ejecutando de manera correcta.

Page 113: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

89

Fig. 6.14: articulación hip_fe del patrón tilted_path.

En esta gráfica se puede observar en verde la segunda articulación de la cadera izquierda

y en naranja la segunda articulación de la pierna derecha. Tal y como se diseñó este patrón,

el movimiento de la pierna derecha, que está a un nivel inferior, tiene mayor amplitud de

movimiento, mientras que la pierna izquierda, tiene una amplitud menor al encontrarse a una

mayor inclinación. Por lo tanto, es posible afirmar que estas articulaciones siguen el patrón

correctamente.

Fig. 6.15: articulación knee para el patrón tilted_path

Lo mismo que se ha comentado para la articulación anterior, sucede para la rodilla. Se

puede ver cómo la amplitud de giro de la rodilla derecha, mostrada en morado, es mayor que

la amplitud de giro de la rodilla izquierda, mostrada en rosa, debido a que cada pierna está

Page 114: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

90

situada en un nivel de inclinación distinto. Además, cabe destacar, que la rodilla derecha

tiene mayor error al volver al estado previo al movimiento que la rodilla izquierda.

Fig. 6.16: articulación ankle para el patrón tilted_path

Por último, en las articulaciones del tobillo, es posible observar la diferencia de perfiles

para cada uno de ellos, debido a que las condiciones de reposo del pie sobre el suelo no son

las mismas, debido a la inclinación del plano. A pesar del ligero error, ambas articulaciones

siguen los perfiles creados para ellas en el patrón de marcha, por tanto, se obtiene un

resultado satisfactorio.

Finalmente, se mostrarán los resultados del patrón “sit”, que permite al exoesqueleto

sentarse. Como se comentó, este patrón es simple ya que simplemente debe realizar un giro

de 90 grados para las articulaciones segundas de la cadera y las articulaciones de la rodilla.

Fig. 6.17: articulación hip_aa para el patrón sit.

Page 115: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

91

Como se puede observar, la primera articulación de la rodilla permanece prácticamente

constante, con un ligero error articular.

Fig. 6.18: articulación hip_fe para el patrón sit

Como se puede apreciar, la segunda articulación de la cadera, para ambas piernas, sigue

exactamente el patrón que fue creado, el cual se puede oberservar en la Fig. 5.20 del apartado

5.4 de introducción de obstáculos, alcanzando los 90 grados de giro.

Fig. 6.19: articulación knee para el patrón sit.

Tal y como se puede ver en la Fig. 6.19, la articulación de la rodilla también sigue a la

perfección el patrón creado en el apartado 5.4 de introducción de obstáculos tal y como se

puede ver en Fig. 5.20 alcanzando también los 90 grados de giro.

Page 116: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.1 PATRONES DE MARCHA

92

Fig. 6.20: articulación ankle del patrón sit

En último lugar, las articulaciones de los tobillos, deben permanecer constantes, como es

el caso del tobillo izquierdo mostrado en verde. Sin embargo, en el tobillo derecho mostrado

en morado, es fácil ver que no sigue fielmente el patrón, debido a una tardía anulación del

error, que se comentará posteriormente.

6.2 Modificación del controlador

Con el objetivo de mostrar los resultados obtenidos con las modificaciones de las

variables 𝐾𝑝 y 𝐾𝑣 del controlador del exoesqueleto, se presentan a continuación una serie

de gráficos y tablas de contenido a modo resumen del efecto logrado en cuanto al error

articular se refiere.

Como se comentó anteriormente en primer lugar se calcularon las especificaciones para

los valores de las ganancias por defecto, 𝐾𝑝 =1000 y 𝐾𝑣 =10, y posteriormente se hicieron

más restrictivas para lograr un mejor comportamiento mediante la reducción del tiempo de

respuesta y por tanto del error. Reduciendo las variables tp, ts y td, los mejores valores

obtenidos fueron de 𝐾𝑝=3000 y 𝐾𝑣 =30, como se muestra en las siguientes tablas:

𝑲𝒑 𝑲𝒗 tp ts td

1000 10 0.023 0.075 0.011

Page 117: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

93

1000 5 0.03 0.098 0.0118

5000 50 0.021 0.078 0.011

3000 30 0.019 0.057 0.008

Tabla 6.1: gancias para la articulación hip_aa

𝑲𝒑 𝑲𝒗 tp ts td

1000 10 0.021 0.057 0.010

1000 5 0.025 0.083 0.0126

5000 50 0.021 0.062 0.010

3000 30 0.014 0.045 0.006

Tabla 6.2: gancias para la articulación hip_fe

𝑲𝒑 𝑲𝒗 tp ts td

1000 10 0.025 0.057 0.012

1000 5 0.029 0.083 0.014

5000 50 0.025 0.062 0.012

3000 30 0.016 0.045 0.007

Tabla 6.3: gancias para la articulación knee

𝑲𝒑 𝑲𝒗 tp ts td

1000 10 0.022 0.057 0.0103

1000 5 0.025 0.083 0.0114

5000 50 0.021 0.062 0.0103

3000 30 0.014 0.045 0.006

Tabla 6.4: gancias para la articulación ankle

Por tanto, como se puede comprobar en estas tablas a modo resumen, el mejor valor

obtenido para las ganancias es de 𝐾𝑝 =3000 y 𝐾𝑣 =30.

Page 118: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

94

Para mostrar las diferencias en el error obtenido, se van a exponer una serie de gráficas

para tres de los cinco patrones de marcha creados. En ellas, se representa en color azul el

error obtenido al ejecutar el controlador con los valores que tenía por defecto para las

ganancias y en naranja el error obtenido si se ejecuta el controlador con los nuevos valores

de las ganancias calculados. El primer patrón del cual se representa el error es “walk”:

(A): left hip_aa (B): right hip_aa

Fig. 6.21: errores primera articulación de la cadera en el patrón walk.

Como se puede observar, el error se reduce considerablemente para la primera

articulación de la cadera en ambas piernas mientras ejecuta un patrón de marcha sobre un

terreno llano.

(A): left hip_fe (B): right hip_fe

Fig 6.22: errores segunda articulación de la cadera en el patrón walk

Page 119: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

95

Como se puede observar, ambos errores toman valores similares, ya que dependiendo del

instante de tiempo uno supera a otro y viceversa. Por tanto, se pude deducir, que no supone

un error ni mayor ni menor la modificación de las ganancias.

(A): left knee (B): right knee

Fig. 6.23: errores articulación de la rodilla para el patrón walk.

Para las articulaciones de las rodillas si que es posible notar una mejoría en el error

articular, ya que, en cualquier instante de tiempo, la amplitud del error obtenido con las

nuevas ganancias es menor al obtenido con las ganancias por defecto. Por tanto, es correcto

afirmar que los nuevos valores calculados reducen el error articular de las rodillas.

(A): left ankle (B): right ankle

Fig. 6.24: error articulación del tobillo para el patrón walk.

Page 120: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

96

Es posible observar, como se comentó en el punto anterior, que los errores articulares de

los tobillos en ciertos momentos ascienden en gran medida y necesitan bastante tiempo para

estabilizarse. Esto sucede tanto para las ganancias que utilizaba el controlador por defecto,

como para las nuevas ganancias obtenidas. Por este motivo, no se puede afirmar una mejoría

en la respuesta frente al movimiento de las articulaciones del tobillo.

El segundo patrón del cual se procede a analizar su error es el correspondiente a la subida

de unas escaleras. Los errores obtenidos al ejecutar el patrón “stairs” aparecen en las

siguientes gráficas:

(A): left hip_aa (B): right hip_aa

Fig. 6.25: errores primera articulación de la cadera para el patrón stairs.

Como se puede contemplar, el error inferior en prácticamente todo instante de tiempo

para la pierna izquierda y considerablemente inferior durante todo el tiempo para la pierna

derecha. Por tanto, se puede afirmar, que las nuevas ganancias calculadas disminuyen el

error de esta articulación durante la subida de escaleras.

Page 121: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

97

(A): left hip_fe (B): right hip_fe

Fig. 6.26: error segunda articulación de la cadera para el patrón stairs.

Si se observan ambas gráficas es posible ver cómo el error articular se vuelve a reducir

para ambas piernas en todo momento, haciendo patente el hecho de que la introducción de

las nuevas ganancias reduce de manera considerable el error de esta articulación, la cual es

una de las dos más importantes para realizar una subida de escaleras.

(A): left knee (B): right knee

Fig. 6.27: error articulación de la rodilla para el patrón stairs.

La rodilla es otra de las dos articulaciones más importantes para el patrón de subida de

escaleras y, como se puede ver en estas gráficas de la Fig. 6.27, introduciendo el nuevo valor

de las ganancias calculadas el error articular se reduce de manera considerable frente al error

obtenido si se ejecuta el controlador con los valores de ganancias fijados por defecto.

Page 122: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

98

(A): left ankle (B): right ankle

Fig. 6.28: error articulación del tobillo para el patrón stairs.

Al igual que sucedía con el patrón de marcha anterior y como se comentó en apartados

previos, el error articular del tobillo aumenta considerablemente en ciertos instantes de

tiempo, debido a su apoyo en el suelo. En la figura de la izquierda se puede ver el error del

tobillo izquierdo, el cual está en el escalón inferior, que se reduce con la introducción de

nuevas ganancias, y en la figura de la derecha el error del tobillo derecho, el cual está en el

escalón superior, que permanece inferior durante la mayoría del tiempo, salvo en momento

acotado. Por tanto, se puede afirmar que se reduce el error si el pie está en el escalón inferior,

pero no si se encuentra en el escalón superior de subida.

Como se ha podido observar con todas estas gráficas, las nuevas ganancias calculadas

permiten un mejor control para el patrón de subida de escaleras, reduciendo

considerablemente el error de la segunda articulación de la cadera y la rodilla, que son las

principales fuentes de movimiento, y mejorando en cierto modo el error de la primera

articulación de la cadera y del tobillo.

En último lugar, se muestran los errores articulares obtenidos para el patrón que permite

al exoesqueleto tomar asiento. El patrón “sit”, como ya se comentó, realiza movimientos

mediante las articulaciones de la cadera, “hip_fe” y de la rodilla, “knee”:

Page 123: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

99

(A): left hip_aa (B): right hip_aa

Fig. 6.29: error primera articulación de la cadera para el patrón sit.

Como se comentó en la explicación de este patrón, la primera articulación de la cadera

debe permanecer inmóvil, y esto se consigue en mayor medida con la introducción de las

nuevas ganancias calculadas que con las ganancias por defecto. Se puede observar que el

error se reduce de manera considerable para las articulaciones de ambas piernas.

(A): left hip_fe (B): right hip_fe

Fig. 6.30: error segunda articulación de la cadera para el patrón sit.

Es posible contemplar en las gráficas de la Fig. 6.30 cómo se reduce en gran medida en

error de las segundas articulaciones de la cadera que, como se comentó, son encargadas de

la mitad del movimiento necesario para que el exoesqueleto pueda sentarse. Por tanto, es

Page 124: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

100

correcto afirmar, que la introducción de las nuevas ganancias mejora los resultados del

patrón “sit” para las articulaciones segundas de la cadera.

(A): left knee (B): right knee

Fig. 6.31: error articulación de la rodilla para el patrón sit.

Las articulaciones de la rodilla son las encargadas de la otra mitad del movimiento

necesario para ejecutar este patrón de tomar asiento. Como se puede observar, mediante la

introducción de los nuevos valores de ganancias calculados, se logra una gran reducción del

error articular y se consiguen, por tanto, unos movimientos más precisos, que lo aproximan

en mayor medida a su objetivo.

(A): left ankle (B); right ankle

Fig. 6.32: error articulaciones del tobillo para el patrón sit

Page 125: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

6.2 MODIFICACIÓN DEL CONTROLADOR

101

En último lugar, como ya se explicó en apartados anteriores debe permanecer inmóvil,

pero se introduce un pequeño error que lo impide. Este error se produce tanto con los valores

de ganancia establecidos inicialmente como con los nuevos valores de ganancia calculados.

Sin embargo, con la introducción de los nuevos valores, se logra que este error se disminuya

para ambas piernas, notándose un efecto mayor en la pierna derecha.

Como se ha expuesto, utilizando los valores de ganancia calculados en este trabajo, se

obtienen unos errores mucho menores para la gran mayoría de las articulaciones que

conforman el exoesqueleto si este realiza un patrón para sentarse.

Page 126: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 127: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

103

7. Conclusiones

En este último apartado, tras exponer todo el contenido de este trabajo, primero, se

exponen las consecuencias que son fruto de este trabajo y, a continuación, se realiza un

recorrido por los distintos trabajos futuros que pueden partir del presente trabajo.

En primer lugar, se ha realizado una introducción a la robótica, centrándose

posteriormente en el área de la robótica de servicios, en la que se ha expuesto su definición,

clasificación en función de la tarea que realiza, su relación con el ser humano y el tipo de

interacción. Además, se han expuesto los objetivos y casos de uso de la robótica de

rehabilitación.

A continuación, ha tenido lugar un estudio sobre marcos teóricos como las ventajas de

utilizar la robótica de rehabilitación, los tipos de dispositivos de rehabilitación, y los distintos

exoesqueletos vestibles de miembro inferior, entre los cuales se escogió el exoesqueleto

MARCH. Se ha explicado también las fases de la marcha humana y cómo se pueden alterar

tras sufrir un accidente. Por otro lado, se ha mostrado el marco teórico del control de robots,

haciendo un recorrido por la cinemática, el control cinemático, la dinámica, el control

dinámico y los controladores dinámicos multiarticulares, entre los que se han destacado el

controlador PD y el controlador PID.

Posteriormente, se ha realizado una introducción a ROS y ROS_control y se ha explicado

el funcionamiento de los controladores, desglosándolo en sus componentes y detallando la

interconexión de los mismos para lograr su ejecución.

Page 128: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

7. CONCLUSIOENES

104

En el siguiente punto, se ha explicado todo el desarrollo que ha supuesto este proyecto.

Se ha comenzado con el modelado del exoesqueleto, desde su diseño hasta su análisis

cinemático. Se ha continuado, realizando su simulación, en el cual tras un análisis del patrón

de marcha se ha visto necesario realizar una mejora del mismo. Además, se ha examinado

su comportamiento ante distintos obstáculos y terrenos, para poder adaptar los patrones de

marcha necesarios para hacerles frente. Finalmente, se ha explicado cómo es el

funcionamiento del controlador, desglosando las partes del mismo, según el esquema

expuesto en el punto anterior e identificando el tipo de control que realiza. Además, se han

realizado una serie de mejoras en el controlador, mediante la modificación de las ganancias

proporcionales y derivativas, con lo que se han endurecido las especificaciones para reducir

el error.

En último lugar, se han mostrado los resultados obtenidos, primero demostrando el

seguimiento de los nuevos patrones diseñados para distintos obstáculos y a continuación,

detallando los resultados obtenidos para las ganancias calculadas, de forma que se muestran

tanto las nuevas especificaciones como la variación del error. Ha sido demostrado que, con

el nuevo valor de ganancias calculado, se mejora el comportamiento de cuatro de las ocho

articulaciones para el patrón de marcha que permite caminar en un terreno llano y se ha

mejorado con creces el comportamiento del exoesqueleto cuando este sube una escalera o

toma asiento.

Con todo esto, es posible concluir, que todos los objetivos propuestos en este trabajo se

han cumplido satisfactoriamente.

7.1 Trabajos futuros

Tras la finalización de este trabajo, quedan todavía diversos campos de estudio que

pueden partir del mismo, puesto que existen infinidad de mejoras tanto para la simulación

como para el control.

Por un lado, uno de los posibles trabajos futuros sería la creación de patrones de marcha

para nuevas situaciones como terrenos rocosos, con distintos valores de fricción, etc., que

Page 129: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

7.1 TRABAJOS FUTUROS

105

permitan crear una experiencia totalmente real en la utilización del exoesqueleto. Además,

el diseño del exoesqueleto puede ampliarse, creando eslabones para el fémur, pie, caderas y

cintura ajustable a distintos tamaños, usando exactamente el mismo método que se ha

expuesto en este trabajo.

De otra parte, el control podría extenderse no solo a la mejora de las ganancias, sino a la

introducción de nuevos controladores dinámicos multiarticulares de posicionamiento, como

el control PD con compensación precalculada de gravedad o incluso con la introducción de

controladores dinámicos multiarticulares de seguimiento, como es el control por Par

Calculado, que se intentó llevar a cabo en este trabajo. Debido a la gran cantidad de

controladores dinámicos existentes, la cantidad de posibles trabajos futuros puede

considerarse prácticamente ilimitada.

Page 130: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 131: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

107

Bibliografía

1. Jegat, J., Barray, V., Morel, V., Mauduyt de la Greve, I., Le Metayer, M., Lacert, P.

"Rehabilitacion en caso de paralisis cerebral," Enciclopedia Médica Quirúrgica.

(Elsevier, Paris-France),Kinesioterápia,Medicina Física y Readaptación, 26-480-A-

10, pág. 28, 1995.

2. Hamonet, C. L., Heuleu, J.N. “Manual de Rehabilitacion,” París: MASSON, 1990.

3. Hall, C., M Brody, L.T. "Ejercicio terapéutico Recuperación funcional," España:

Paidotribo, 2006.

4. Neiger, H., Gosselin, P., Lacomba, M. T. "Fisioterapia tecnicas pasivas," España :

Médica Panamericana, 1998.

5. Newport R. “The benefits of robot-assisted rehabilitation on the recovery of motor

and visuospatial function in individuals recovering from stroke”. pp 66-73, 2007.

6. Neuron, “Beneficios de la terapia robótica en la rehabilitación del paciente”, 2020.

7. Foundation Cochrane, “Las ventajas de la terapia rehabilitadora con robots en

pacientes con ictus”, 2017.

8. García M. “Los Exoesqueletos Robóticos Pueden Proporcionar Beneficios de Salud

para Personas”, 2019.

Page 132: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

8. BIBLIOGRAFÍA

108

9. The Global Burden of Disease: “a comprehensive assessment of mortality and

disability from diseases, injuries, and risk factors in 1990 and projected to 2020”.

Boston: Harvard University Press; 1996.

10. Krebs HI, Ferraro M, Buerger SP, Newbery MJ, Makiyama A, Sandmann M, et al:

“Rehabilitation robotics: pilot trial of a spatial extension for MIT-Manus J

Neuroengineering Rehabil”, pp. 5, 2004.

11. Gassert R. and Dietz V.: “Rehabilitation robots for the treatment of sensorimotor

deficits: a neurophysiological perspective”, 2018.

12. R. Colombo, V. Sanghineti, “Rehabilitation Robotics: Technology and Application”,

Academic Press, 2018.

13. B. Siciliano, O. Khatib, “Springer Handbook of Robotics 2nd Edition”, Springer,

2016.

14. https://exoskeletonreport.com/product/armeopower/

15. https://exoskeletonreport.com/product/lokomat/

16. https://exoskeletonreport.com/product/kineassist/

17. https://www.universal-robots.com/products/ur5-robot/

18. https://exoskeletonreport.com/product/amadeo/

19. https://exoskeletonreport.com/product/myopro/

20. https://rewalk.com/

21. https://www.rexbionics.com/

Page 133: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

109

22. https://grupoadd.es/el-robot-hal

23. https://www.technaid.com/es/productos/robotic-exoskeleton-exo-h3/

24. https://www.gogoa.eu/hank

25. https://www.projectmarch.nl/nl/march-vi-exoskeleton

26. Masia, L., Xiloyannis, M., Binh-Khanh, D., Antuvan, C. W., Contu, S. y Kim, G. K.

“Actuation for Robot-Aided Rehabilitation: Design and Control Strategies,”

Rehabilitation Robotics (Chapter 4), Elsevier, 2018.

27. A. Martín, J L., J. Orejuela, F J. Barbero, C. Sánchez, “Human walking phases”, pp

44-49, 1999.

28. Rodríguez I., “Entrenamiento robótico como medio de rehabilitación para la

marcha”, pp 46-54, 2012.

29. M.E. Raffino. "Cinemática". 2021.

30. Gianluca A., Stefano C., Giuseppe F., “Kinematic Control of Redundant

Manipulators with On-Line End-Effector Path Tracking Capability Under Velocity

and Acceleration Constraints, Volume 33, Issue 27, pp 183-188, 2000.

31. Pomares J., Torres F., Gil P., Puente S., Aracil R., “Robots y sistemas sensoriales”,

2002.

32. Barrientos, A., Peñín, L. F., Balaguer, C., Aracil, R. “Fundamentos de Robótica”,

McGraw-Hill, Madrid (2007)

33. Siciliano, B., Sciavicco, L., Villani, L., Oriolo, G. “Robotics: Modelling, Planning

and Control”, Springer-Verlag, London (2010)

Page 134: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

8. BIBLIOGRAFÍA

110

34. Craig, J. J. “Introduction to Robotics: Mechanics and Control”, Pearson Prentice

Hall, (2017)

35. Duyar, Izzet y Pelin, Can, “Body height estimation based on tibia length in different

stature groups”. September 2003.

36. M.T. Belmonte; J.L. Sánchez Blanque; I. Alemán y M.C. Botella, “Estimation of

stature from tibia length in female adult contemporary Spanish population” vol.17

Málaga abr./jun. 2011.

37. http://wiki.ros.org/es/ROS

38. http://wiki.ros.org/ros_control

39. http://wiki.ros.org/Books

40. https://www.theconstructsim.com/robotigniteacademy_learnros/ros-courses-

library/ros-control-101/

41. https://docs.projectmarch.nl/doc/useful_tools/ros_control.html

42. https://docs.projectmarch.nl/doc/march_packages/march_simulation.html

Page 135: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

111

Lista de Acrónimos y Abreviaturas

ACV Accidentes CardioVasculares

DH Denavit Hartenberg

GUI Graphical User Interface

PD Proporcional Derivativo

PID Proporcional Integral Derivativo

ROS Robot Operating System

STL STereoLithography

TFG Trabajo Final de Grado

URDF Unified Robotic Description Format

XACRO Extensible Macros

XML Extensible Markup Language

Page 136: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 137: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

113

A. Anexo I: Código URDF del exoesqueleto creado

Código A: march_improved.xacro

1. <?xml version="1.0"?> 2. <!-- Revolute-Revolute Manipulator --> 3. <robot name="march" xmlns:xacro="http://www.ros.org/wiki/xacro"> 4. <!-- Switch between airgaiting or standing on the ground--> 5. <!-- Value set to: 'world' fixes the robot to the world--> 6. <!-- Value set to: 'base_link' makes the robot stand on the ground also set

launch parameter fixed to false and set 7. the hover_height to 0.0. Set ground_gait to true to ground gait in

simulation.--> 8. <xacro:arg name="ground_gait" default="false"/> 9. 10. <!-- Switch between using the physical camera and the simulation camera --> 11. <!-- If set to 'true', no physical camera is needed --> 12. <!-- If this value is set to 'false', the plugin will not be started and the

topics --> 13. <!-- published by the real camera will be used. --> 14. <!-- In both these situations the camera will still be visible and placed in

the urdf,--> 15. <!-- to be used for the transformations.--> 16. <xacro:arg name="realsense_simulation" default="false"/> 17. 18. <xacro:unless value="$(arg ground_gait)"> 19. <xacro:property name="parent_name" value="world"/> 20. <xacro:property name="hover_height" value="0.3"/> 21. </xacro:unless> 22. <xacro:if value="$(arg ground_gait)"> 23. <xacro:property name="parent_name" value="base_link"/> 24. <xacro:property name="hover_height" value="0.0"/> 25. <gazebo> 26. <plugin name="com_controller_plugin"

filename="libmarch_gazebo_plugins.so"/> 27. </gazebo> 28. </xacro:if> 29. 30. <!-- The max effort of the rotary joints is lower then the value

corresponding to 25A, because short-circuit errors 31. have occured while applying the theoretical max effort for a long time. --> 32. <xacro:arg name="max_effort_rotary" default="18000.0" /> 33. <xacro:arg name="max_effort_linear" default="22932.0" /> <!-- = 28 A --> 34. <xacro:property name="max_effort_rotary" value="$(arg max_effort_rotary)" /> 35. <xacro:property name="max_effort_linear" value="$(arg max_effort_linear)" /> 36. 37. <!-- Values for the safety limits, see

https://wiki.ros.org/pr2_controller_manager/safety_limits --> 38. <xacro:arg name="k_velocity_value_hfe" default="20000.0" /> 39. <xacro:arg name="k_velocity_value_kfe" default="20000.0" />

Page 138: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

114

40. <xacro:arg name="k_velocity_value_haa" default="20000.0" /> 41. <xacro:arg name="k_velocity_value_adpf" default="20000.0" /> 42. <xacro:property name="k_velocity_value_hfe" value="$(arg

k_velocity_value_hfe)" /> 43. <xacro:property name="k_velocity_value_kfe" value="$(arg

k_velocity_value_kfe)" /> 44. <xacro:property name="k_velocity_value_haa" value="$(arg

k_velocity_value_haa)" /> 45. <xacro:property name="k_velocity_value_adpf" value="$(arg

k_velocity_value_adpf)" /> 46. 47. <xacro:arg name="k_position_value_hfe" default="14.88" /> 48. <xacro:arg name="k_position_value_kfe" default="14.88" /> 49. <xacro:arg name="k_position_value_haa" default="4.0" /> 50. <xacro:arg name="k_position_value_adpf" default="5.0" /> 51. <xacro:property name="k_position_value_hfe" value="$(arg

k_position_value_hfe)" /> 52. <xacro:property name="k_position_value_kfe" value="$(arg

k_position_value_kfe)" /> 53. <xacro:property name="k_position_value_haa" value="$(arg

k_position_value_haa)" /> 54. <xacro:property name="k_position_value_adpf" value="$(arg

k_position_value_adpf)" /> 55. 56. <!-- Constants for robot dimensions --> 57. <!-- Masses determined in Catia, see

https://confluence.projectmarch.nl:8443/display/51/URDF+description --> 58. <xacro:property name="width" value="0.05"/> <!-- Square dimensions

(widthxwidth) of beams --> 59. 60. <xacro:property name="hip_base_height" value="0.160"/> 61. <xacro:property name="hip_base_mass" value="8.686"/> 62. <!-- mass = Hip base + HAA actuators --> 63. 64. <xacro:property name="hip_aa_frame_height" value="0.170"/> 65. <xacro:property name="hip_aa_frame_width" value="0.1395"/> 66. <xacro:property name="hip_aa_mass" value="2.982"/> 67. <!-- mass = Moving hip --> 68. 69. <xacro:property name="upper_leg_height" value="0.385"/> 70. <xacro:property name="upper_leg_offset" value="0.04"/> 71. <xacro:property name="upper_leg_mass" value="4.995"/> 72. <!-- mass = KFE joint + HFE joint + Upper leg --> 73. 74. <xacro:arg name="lower_leg_height" default="0.385" /> 75. <xacro:property name="lower_leg_height" value="$(arg lower_leg_height)"/> 76. <xacro:property name="lower_leg_mass" value="4.458"/> 77. <xacro:property name="lower_leg_width_x" value="0.075"/> 78. <xacro:property name="lower_leg_width_y" value="0.05"/> 79. <xacro:property name="support_mass" value="1"/> 80. 81. <!-- mass = Ankle actuator + Lower leg --> 82. 83. <xacro:property name="ankle_plate_height" value="0.12"/> 84. <xacro:property name="ankle_plate_offset" value="0.05"/> 85. 86. 87. <xacro:property name="foot_height_forward" value="${0.184}"/> 88. <xacro:property name="foot_height_backward" value="${0.059}"/> 89. <xacro:property name="foot_mass" value="1.821"/> 90. <xacro:property name="foot_mu1" value="1"/>

Page 139: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

115

91. <xacro:property name="foot_mu2" value="1"/> 92. <!-- Minimum allowable depth before contact correction impulse is applied. --

> 93. <xacro:property name="foot_min_depth" value="0.0005"/> 94. <!-- mass = Passive ankle + foot --> 95. 96. <!-- Center of Mass (CoM) of the parts --> 97. <!-- CoM has been determined in Catia, see

https://confluence.projectmarch.nl:8443/display/51/URDF+description --> 98. <!-- The Catia locations were defined in a global coordinate system with the

origin at the center of the 99. rotation axis of the two HFE joints. Here, the joints were all set at

zero degrees. Hence, we need some 100. translations to transfer it to the reference frame of each of the

parts. Note that in the Catia x axis is 101. the URDF y axis and the Catia y axis is the negative URDF x axis. The

given CoM are for the right leg, 102. the y coordinate will be inverted for the left leg. --> 103. <xacro:property name="hip_base_com_x" value="${-hip_aa_frame_width +

0.147989}"/> 104. <xacro:property name="hip_base_com_y" value="0.016341"/> 105. <xacro:property name="hip_base_com_z" value="0.147761"/> 106. 107. <xacro:property name="hip_aa_com_x" value="${-hip_aa_frame_width +

0.108094}"/> 108. <xacro:property name="hip_aa_com_y" value="${-hip_base_height/2 -

hip_aa_frame_height + 0.197758}"/> 109. <xacro:property name="hip_aa_com_z" value="0.029507"/> 110. 111. <xacro:property name="upper_leg_com_x" value="0.000709"/> 112. <xacro:property name="upper_leg_com_y" value="${-hip_base_height/2 -

hip_aa_frame_height + 113. upper_leg_offset +

0.215254}"/> 114. <xacro:property name="upper_leg_com_z" value="-0.19205"/> 115. 116. <xacro:property name="lower_leg_com_x" value="-0.00321"/> 117. <xacro:property name="lower_leg_com_y" value="${-hip_base_height/2 -

hip_aa_frame_height + 118. upper_leg_offset +

0.184081}"/> 119. <xacro:property name="lower_leg_com_z" value="${upper_leg_height -

0.527082}"/> 120. 121. <xacro:property name="foot_com_x" value="-0.028926"/> 122. <xacro:property name="foot_com_y" value="${-hip_base_height/2 -

hip_aa_frame_height + 123. upper_leg_offset +

ankle_plate_offset + 0.155916}"/> 124. <xacro:property name="foot_com_z" value="${upper_leg_height +

lower_leg_height + ankle_plate_height - 0.789788}"/> 125. 126. <xacro:property name="foot_scale" value="1.35"/> 127. <xacro:arg name="foot_size" default="1" /> 128. <xacro:property name="foot_size" value="$(arg foot_size)"/> 129. 130. <!-- Inertia of the parts --> 131. <!-- Inertia's have been determined in Catia, see 132. https://confluence.projectmarch.nl:8443/display/51/URDF+description --

>

Page 140: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

116

133. <!-- The inertia's were defined around the CoM. Note that in the Catia x axis is the URDF y axis and the Catia y

134. axis is the negative URDF x axis, see confluence for the impact. The given inertia's are for the right leg,

135. Ixy and Iyz will be inverted for the left leg. --> 136. <xacro:property name="hip_base_Ixx" value="0.141"/> 137. <xacro:property name="hip_base_Ixy" value="0.0000336"/> 138. <xacro:property name="hip_base_Ixz" value="-0.007"/> 139. <xacro:property name="hip_base_Iyy" value="0.087"/> 140. <xacro:property name="hip_base_Iyz" value="0.0005089"/> 141. <xacro:property name="hip_base_Izz" value="0.091"/> 142. 143. <xacro:property name="hip_aa_Ixx" value="0.013"/> 144. <xacro:property name="hip_aa_Ixy" value="0.008"/> 145. <xacro:property name="hip_aa_Ixz" value="0.005"/> 146. <xacro:property name="hip_aa_Iyy" value="0.023"/> 147. <xacro:property name="hip_aa_Iyz" value="-0.001"/> 148. <xacro:property name="hip_aa_Izz" value="0.028"/> 149. 150. <xacro:property name="upper_leg_Ixx" value="0.127"/> 151. <xacro:property name="upper_leg_Ixy" value="0.0001291"/> 152. <xacro:property name="upper_leg_Ixz" value="-0.0002056"/> 153. <xacro:property name="upper_leg_Iyy" value="0.122"/> 154. <xacro:property name="upper_leg_Iyz" value="0.016"/> 155. <xacro:property name="upper_leg_Izz" value="0.015"/> 156. 157. <xacro:property name="lower_leg_Ixx" value="0.075"/> 158. <xacro:property name="lower_leg_Ixy" value="-0.027"/> 159. <xacro:property name="lower_leg_Ixz" value="-0.008"/> 160. <xacro:property name="lower_leg_Iyy" value="0.11"/> 161. <xacro:property name="lower_leg_Iyz" value="-0.002"/> 162. <xacro:property name="lower_leg_Izz" value="0.071" /> 163. 164. <xacro:property name="foot_Ixx" value="0.021"/> 165. <xacro:property name="foot_Ixy" value="-0.002"/> 166. <xacro:property name="foot_Ixz" value="0.02"/> 167. <xacro:property name="foot_Iyy" value="0.027"/> 168. <xacro:property name="foot_Iyz" value="0.004"/> 169. <xacro:property name="foot_Izz" value="0.01" /> 170. 171. 172. <!-- Joint properties --> 173. <!-- For limit calculations, see

https://confluence.projectmarch.nl:8443/pages/viewpage.action?pageId=268697604 -->

174. <xacro:property name="left_hip_fe_rotation_lower_limit" value="${-21.04431152*pi/180}"/> <!-- rad -->

175. <xacro:property name="left_hip_fe_rotation_upper_limit" value="${98.97033691*pi/180}"/> <!-- rad -->

176. 177. <xacro:property name="right_hip_fe_rotation_lower_limit" value="${-

20.23406982*pi/180}"/> <!-- rad --> 178. <xacro:property name="right_hip_fe_rotation_upper_limit"

value="${99.48120117*pi/180}"/> <!-- rad --> 179. 180. <xacro:property name="hip_fe_soft_buffer" value="${3*pi/180}"/> <!-- rad --

> 181. <xacro:property name="hip_fe_effort_limit" value="${max_effort_rotary}"/>

<!-- IU --> 182. <xacro:property name="hip_fe_velocity_limit" value="2.0"/> <!-- rad/s --> 183.

Page 141: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

117

184. <xacro:property name="left_hip_aa_rotation_lower_limit" value="${-18.54492188*pi/180}"/> <!-- rad -->

185. <xacro:property name="left_hip_aa_rotation_upper_limit" value="${16.34765625*pi/180}"/> <!-- rad -->

186. 187. <xacro:property name="right_hip_aa_rotation_lower_limit" value="${-

18.10546875*pi/180}"/> <!-- rad --> 188. <xacro:property name="right_hip_aa_rotation_upper_limit"

value="${15.99609375*pi/180}"/> <!-- rad --> 189. 190. <xacro:property name="hip_aa_soft_buffer" value="${3.5*pi/180}"/> <!-- rad

--> 191. <xacro:property name="hip_aa_effort_limit" value="${max_effort_linear}"/>

<!-- IU --> 192. <xacro:property name="hip_aa_velocity_limit" value="1.0"/> <!-- rad/s --> 193. 194. <xacro:property name="left_knee_rotation_lower_limit" value="${-

5.012512207*pi/180}"/> 195. <xacro:property name="left_knee_rotation_upper_limit"

value="${112.4230957*pi/180}"/> 196. 197. <xacro:property name="right_knee_rotation_lower_limit" value="${-

4.89440918*pi/180}"/> 198. <xacro:property name="right_knee_rotation_upper_limit"

value="${115.3097534*pi/180}"/> 199. 200. <xacro:property name="knee_extension_soft_buffer" value="${3.5*pi/180}"/>

<!-- rad --> 201. <xacro:property name="knee_flexion_soft_buffer" value="${3*pi/180}"/> <!--

rad --> 202. <xacro:property name="knee_effort_limit" value="${max_effort_rotary}"/> <!-

- IU --> 203. <xacro:property name="knee_velocity_limit" value="2.5"/> 204. 205. <xacro:property name="left_ankle_rotation_lower_limit" value="${-

26.30401611*pi/180}"/> 206. <xacro:property name="left_ankle_rotation_upper_limit"

value="${15.88348389*pi/180}"/> 207. 208. <xacro:property name="right_ankle_rotation_lower_limit" value="${-

23.203125*pi/180}"/> 209. <xacro:property name="right_ankle_rotation_upper_limit"

value="${14.23828125*pi/180}"/> 210. 211. <xacro:property name="ankle_dorsalflexion_soft_buffer"

value="${5*pi/180}"/> <!-- rad --> 212. <xacro:property name="ankle_plantarflexion_soft_buffer"

value="${3*pi/180}"/> <!-- rad --> 213. <xacro:property name="ankle_effort_limit" value="${max_effort_linear}"/>

<!-- IU --> 214. <xacro:property name="ankle_velocity_limit" value="1.0"/> 215. 216. 217. 218. <xacro:property name="camera_link" value="0.05"/> <!-- Size of square

'camera' box --> 219. <xacro:property name="axel_offset" value="0.05"/> <!-- Space btw top of

beam and the each joint --> 220. 221. <!-- Import all Gazebo-customization elements, including Gazebo colors --> 222. <xacro:include filename="march.gazebo"/>

Page 142: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

118

223. 224. <material name="blue"> 225. <color rgba="0 0 0.6 1"/> 226. </material> 227. 228. <!-- give colors to some links in gazebo --> 229. <gazebo reference="hip_base"> 230. <material>Gazebo/DarkGrey</material> 231. </gazebo> 232. <gazebo reference="hip_aa_frame_left_side"> 233. <material>Gazebo/Grey</material> 234. </gazebo> 235. <gazebo reference="hip_aa_frame_right_side"> 236. <material>Gazebo/Grey</material> 237. </gazebo> 238. <gazebo reference="ankle_plate_left"> 239. <material>Gazebo/Footway</material> 240. </gazebo> 241. <gazebo reference="ankle_plate_right"> 242. <material>Gazebo/Footway</material> 243. </gazebo> 244. 245. 246. <!-- Used for fixing robot to Gazebo 'base_link' --> 247. <link name="${parent_name}"/> 248. 249. 250. <!-- Parts --> 251. <!-- Hip--> 252. <link name="hip_base"> 253. <visual> 254. <origin xyz="${-hip_aa_frame_width} 0 0" rpy="0 0 ${pi}"/> 255. <geometry> 256. <mesh filename="package://march_description/urdf/stl-

files/HipBase.stl" scale="1 1 1"/> 257. </geometry> 258. <material name="blue"/> 259. </visual> 260. 261. <inertial> 262. <origin xyz="${hip_base_com_x} ${hip_base_com_y} ${hip_base_com_z}"

rpy="0 0 0"/> 263. <mass value="${hip_base_mass}"/> 264. <inertia 265. ixx="${hip_base_Ixx}" 266. ixy="${hip_base_Ixy}" 267. ixz="${hip_base_Ixz}" 268. iyy="${hip_base_Iyy}" 269. iyz="${hip_base_Iyz}" 270. izz="${hip_base_Izz}" /> 271. </inertial> 272. 273. <collision> 274. <origin xyz="0 0 0" rpy="0 0 0"/> 275. <geometry> 276. <box size="${width} ${hip_base_height} ${width}"/> 277. </geometry> 278. </collision> 279. </link> 280. 281. <!-- IMU-->

Page 143: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

119

282. <link name="imu_link"> 283. </link> 284. 285. <!-- Left Moving Hip--> 286. <link name="hip_aa_frame_left_side"> 287. <visual> 288. <origin xyz="${-hip_aa_frame_width} ${hip_base_height/2} 0" rpy="0

0 ${pi}"/> 289. <geometry> 290. <mesh filename="package://march_description/urdf/stl-

files/LeftHAA.stl" scale="1 1 1"/> 291. </geometry> 292. <material name="blue"/> 293. </visual> 294. 295. <collision> 296. <origin xyz="0 ${-hip_aa_frame_height/2} 0" rpy="0 0 0"/> 297. <geometry> 298. <box size="${width} ${hip_aa_frame_height} ${width}"/> 299. </geometry> 300. </collision> 301. </link> 302. 303. <link name="hip_aa_frame_left_front"> 304. <inertial> 305. <origin xyz="${hip_aa_com_x} ${-hip_aa_com_y} ${hip_aa_com_z}"

rpy="0 0 0"/> 306. <mass value="${hip_aa_mass}"/> 307. <inertia 308. ixx="${hip_aa_Ixx}" 309. ixy="${-hip_aa_Ixy}" 310. ixz="${hip_aa_Ixz}" 311. iyy="${hip_aa_Iyy}" 312. iyz="${-hip_aa_Iyz}" 313. izz="${hip_aa_Izz}" /> 314. </inertial> 315. 316. <collision> 317. <origin xyz="${-hip_aa_frame_width/2} 0 0" rpy="0 0 0"/> 318. <geometry> 319. <box size="${hip_aa_frame_width} ${width} ${width}"/> 320. </geometry> 321. </collision> 322. </link> 323. 324. <!-- Upper Leg Left--> 325. <link name="upper_leg_left"> 326. <visual> 327. <origin xyz="0 ${hip_base_height/2 + hip_aa_frame_height -

upper_leg_offset} 0" rpy="0 0 ${pi}"/> 328. <geometry> 329. <mesh filename="package://march_description/urdf/stl-

files/UpperLeftLeg.stl" scale="1 1 1"/> 330. </geometry> 331. <material name="blue"/> 332. </visual> 333. 334. <inertial> 335. <origin xyz="${upper_leg_com_x} ${-upper_leg_com_y}

${upper_leg_com_z}" rpy="0 0 0"/> 336. <mass value="${upper_leg_mass}"/>

Page 144: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

120

337. <inertia 338. ixx="${upper_leg_Ixx}" 339. ixy="${-upper_leg_Ixy}" 340. ixz="${upper_leg_Ixz}" 341. iyy="${upper_leg_Iyy}" 342. iyz="${-upper_leg_Iyz}" 343. izz="${upper_leg_Izz}" /> 344. </inertial> 345. 346. <collision> 347. <origin xyz="0 0 ${-upper_leg_height/2}" rpy="0 0 0"/> 348. <geometry> 349. <box size="${width} ${width} ${upper_leg_height}"/> 350. </geometry> 351. </collision> 352. </link> 353. 354. <!-- Lower Leg Left --> 355. <link name="lower_leg_left"> 356. <visual> 357. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 358. <geometry> 359. <box size="${lower_leg_width_x} ${width} ${lower_leg_height}"/> 360. </geometry> 361. </visual> 362. 363. <inertial> 364. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 365. <mass value="${lower_leg_mass}"/> 366. <inertia 367. ixx="${lower_leg_mass / 12.0 *

(lower_leg_width_x*lower_leg_width_y + lower_leg_height*lower_leg_height)}" ixy="0.0" ixz="0.0"

368. iyy="${lower_leg_mass / 12.0 * (lower_leg_height*lower_leg_height + lower_leg_width_x*lower_leg_width_y)}" iyz="0.0"

369. izz="${lower_leg_mass / 12.0 * (lower_leg_width_x*lower_leg_width_y + lower_leg_width_x*lower_leg_width_y)}"/>

370. </inertial> 371. 372. <collision> 373. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 374. <geometry> 375. <box size="${lower_leg_width_x} ${lower_leg_width_y}

${lower_leg_height}"/> 376. </geometry> 377. </collision> 378. </link> 379. 380. <!-- support --> 381. 382. <link name="left_support"> 383. <visual> 384. <origin xyz="0 ${lower_leg_width_y + 0.03} -0.05" rpy="1.57 0

1.57"/> 385. <geometry> 386. <mesh filename="package://march_description/urdf/stl-

files/support.stl" scale="0.01 0.01 0.01"/> 387. </geometry> 388. <material name="blue"/> 389. </visual>

Page 145: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

121

390. 391. <inertial> 392. <origin xyz="0.03 ${lower_leg_width_y + 0.03 -0.07} -0.05" rpy="0 0

0"/> 393. <mass value="${support_mass}"/> 394. <inertia 395. ixx="0.0122162" ixy="-0.0016191" ixz="0.000805" 396. iyy="0.036601" iyz="-0.00158" 397. izz="0.0184"/> 398. </inertial> 399. 400. <collision> 401. <origin xyz="0 ${lower_leg_width_y + 0.01} 0" rpy="0 0 0"/> 402. <geometry> 403. <box size="0.17 0.13 0.12"/> 404. </geometry> 405. </collision> 406. </link> 407. 408. <!-- Ankle plate Left --> 409. <link name="ankle_plate_left"> 410. <visual> 411. <origin 412. xyz="0 413. ${hip_base_height/2 + hip_aa_frame_height -

upper_leg_offset - ankle_plate_offset} 414. ${foot_scale * (upper_leg_height + 0.385 )}" 415. rpy="0 0 ${pi}" 416. /> 417. <geometry> 418. <mesh filename="package://march_description/urdf/stl-

files/LeftFoot.stl" scale="$(arg foot_size) 1 ${foot_scale}"/> 419. </geometry> 420. <material name="blue"/> 421. </visual> 422. <collision> 423. <origin xyz="0 0 ${-ankle_plate_height/2}" rpy="0 0 0"/> 424. <geometry> 425. <box size="${width} ${width} ${ankle_plate_height}"/> 426. </geometry> 427. </collision> 428. </link> 429. 430. <gazebo reference="ankle_plate_left"> 431. <sensor name="ankle_plate_left_contact" type="contact"> 432. <plugin name="contact_plugin" filename="libcontact.so"/> 433. <contact> 434.

<collision>ankle_plate_left_fixed_joint_lump__foot_left_collision_1</collision> 435. </contact> 436. <update_rate>30</update_rate> 437. <always_on>true</always_on> 438. </sensor> 439. </gazebo> 440. 441. <!-- Foot Left --> 442. <link name="foot_left"> 443. <inertial> 444. <origin xyz="${foot_com_x} ${-foot_com_y} ${foot_com_z}" rpy="0 0

0"/> 445. <mass value="${foot_mass}"/>

Page 146: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

122

446. <inertia 447. ixx="${foot_Ixx}" 448. ixy="${-foot_Ixy}" 449. ixz="${foot_Ixz}" 450. iyy="${foot_Iyy}" 451. iyz="${-foot_Iyz}" 452. izz="${foot_Izz}" /> 453. </inertial> 454. <collision> 455. <origin xyz="${(-foot_height_forward+foot_height_backward)/2} 0 0"

rpy="0 0 0"/> 456. <geometry> 457. <box size="${foot_height_forward+foot_height_backward} ${width}

${width}"/> 458. </geometry> 459. </collision> 460. </link> 461. 462. <link name="pressure_sole_left"> 463. <collision> 464. <origin xyz="${(-foot_height_forward+foot_height_backward)/2} 0 0"

rpy="0 0 0"/> 465. <geometry> 466. <box size="${foot_height_forward+foot_height_backward} ${width}

0.001"/> 467. </geometry> 468. </collision> 469. </link> 470. 471. <gazebo reference="pressure_sole_left"> 472. <sensor name="left_pressure_sole" type="contact"> 473. <always_on>true</always_on> 474. <contact> 475.

<collision>ankle_plate_left_fixed_joint_lump__pressure_sole_left_collision_2</collision>

476. </contact> 477. <plugin name="left_foot_plugin" filename="libgazebo_ros_bumper.so"> 478.

<bumperTopicName>march/sensor/left_pressure_sole</bumperTopicName> 479. <frameName>world</frameName> 480. </plugin> 481. </sensor> 482. </gazebo> 483. 484. <gazebo reference="foot_left"> 485. <mu1>${foot_mu1}</mu1> 486. <mu2>${foot_mu2}</mu2> 487. <minDepth>${foot_min_depth}</minDepth> 488. <fdir1>1 0 0</fdir1> 489. </gazebo> 490. 491. <!-- Right Moving Hip--> 492. <link name="hip_aa_frame_right_side"> 493. <visual> 494. <origin xyz="${-hip_aa_frame_width} ${-hip_base_height/2} 0" rpy="0

0 ${pi}"/> 495. <geometry> 496. <mesh filename="package://march_description/urdf/stl-

files/RightHAA.stl" scale="1 1 1"/> 497. </geometry>

Page 147: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

123

498. <material name="blue"/> 499. </visual> 500. 501. <collision> 502. <origin xyz="0 ${hip_aa_frame_height/2} 0" rpy="0 0 0"/> 503. <geometry> 504. <box size="${width} ${hip_aa_frame_height} ${width}"/> 505. </geometry> 506. </collision> 507. </link> 508. 509. <link name="hip_aa_frame_right_front"> 510. <inertial> 511. <origin xyz="${hip_aa_com_x} ${hip_aa_com_y} ${hip_aa_com_z}"

rpy="0 0 0"/> 512. <mass value="${hip_aa_mass}"/> 513. <inertia 514. ixx="${hip_aa_Ixx}" 515. ixy="${hip_aa_Ixy}" 516. ixz="${hip_aa_Ixz}" 517. iyy="${hip_aa_Iyy}" 518. iyz="${hip_aa_Iyz}" 519. izz="${hip_aa_Izz}" /> 520. </inertial> 521. 522. <collision> 523. <origin xyz="${-hip_aa_frame_width/2} 0 0" rpy="0 0 0"/> 524. <geometry> 525. <box size="${hip_aa_frame_width} ${width} ${width}"/> 526. </geometry> 527. </collision> 528. </link> 529. 530. <!-- Upper Leg Right--> 531. <link name="upper_leg_right"> 532. <visual> 533. <origin xyz="0 ${-hip_base_height/2 - hip_aa_frame_height +

upper_leg_offset} 0" rpy="0 0 ${pi}"/> 534. <geometry> 535. <mesh filename="package://march_description/urdf/stl-

files/UpperRightLeg.stl" scale="1 1 1"/> 536. </geometry> 537. <material name="blue"/> 538. </visual> 539. 540. <inertial> 541. <origin xyz="${upper_leg_com_x} ${upper_leg_com_y}

${upper_leg_com_z}" rpy="0 0 0"/> 542. <mass value="${upper_leg_mass}"/> 543. <inertia 544. ixx="${upper_leg_Ixx}" 545. ixy="${upper_leg_Ixy}" 546. ixz="${upper_leg_Ixz}" 547. iyy="${upper_leg_Iyy}" 548. iyz="${upper_leg_Iyz}" 549. izz="${upper_leg_Izz}" /> 550. </inertial> 551. 552. <collision> 553. <origin xyz="0 0 ${-upper_leg_height/2}" rpy="0 0 0"/> 554. <geometry>

Page 148: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

124

555. <box size="${width} ${width} ${upper_leg_height}"/> 556. </geometry> 557. </collision> 558. 559. </link> 560. 561. <!-- Lower Leg Right --> 562. <link name="lower_leg_right"> 563. <visual> 564. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 565. <geometry> 566. <box size="${lower_leg_width_x} ${lower_leg_width_y}

${lower_leg_height}"/> 567. </geometry> 568. </visual> 569. 570. <inertial> 571. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 572. <mass value="${lower_leg_mass}"/> 573. <inertia 574. ixx="${lower_leg_mass / 12.0 *

(lower_leg_width_x*lower_leg_width_y + lower_leg_height*lower_leg_height)}" ixy="0.0" ixz="0.0"

575. iyy="${lower_leg_mass / 12.0 * (lower_leg_height*lower_leg_height + lower_leg_width_x*lower_leg_width_y)}" iyz="0.0"

576. izz="${lower_leg_mass / 12.0 * (lower_leg_width_x*lower_leg_width_y + lower_leg_width_x*lower_leg_width_y)}"/>

577. </inertial> 578. 579. <collision> 580. <origin xyz="0 0 ${-lower_leg_height/2}" rpy="0 0 0"/> 581. <geometry> 582. <box size="${lower_leg_width_x} ${lower_leg_width_y}

${lower_leg_height}"/> 583. </geometry> 584. </collision> 585. </link> 586. 587. <!-- support --> 588. 589. <link name="right_support"> 590. <visual> 591. <origin xyz="0 ${-lower_leg_width_y/2 - 0.055} -0.05" rpy="1.57 0 -

1.57"/> 592. <geometry> 593. <mesh filename="package://march_description/urdf/stl-

files/support.stl" scale="0.01 0.01 0.01"/> 594. </geometry> 595. <material name="blue"/> 596. </visual> 597. 598. <inertial> 599. <origin xyz="0.03 ${-lower_leg_width_y/2 - 0.055 -0.07} -0.05"

rpy="0 0 0"/> 600. <mass value="${support_mass}"/> 601. <inertia 602. ixx="0.0122162" ixy="-0.0016191" ixz="0.000805" 603. iyy="0.036601" iyz="-0.00158" 604. izz="0.0184"/> 605. </inertial>

Page 149: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

125

606. 607. <collision> 608. <origin xyz="0 ${-lower_leg_width_y/2 -0.03} 0" rpy="0 0 0"/> 609. <geometry> 610. <box size="0.17 0.13 0.12"/> 611. </geometry> 612. </collision> 613. </link> 614. 615. 616. <!-- Ankle Plate Right --> 617. <link name="ankle_plate_right"> 618. <visual> 619. <origin 620. xyz="0 621. ${-hip_base_height/2 - hip_aa_frame_height+

upper_leg_offset + ankle_plate_offset} 622. ${foot_scale * (upper_leg_height + 0.385)}" 623. rpy="0 0 ${pi}"/> 624. /> 625. <geometry> 626. <mesh filename="package://march_description/urdf/stl-

files/RightFoot.stl" scale="$(arg foot_size) 1 ${foot_scale}"/> 627. </geometry> 628. <material name="blue"/> 629. </visual> 630. <collision> 631. <origin xyz="0 0 ${-ankle_plate_height/2}" rpy="0 0 0"/> 632. <geometry> 633. <box size="${width} ${width} ${ankle_plate_height}"/> 634. </geometry> 635. </collision> 636. </link> 637. 638. 639. <gazebo reference="ankle_plate_right"> 640. <sensor name="ankle_plate_right_contact" type="contact"> 641. <plugin name="contact_plugin" filename="libcontact.so"/> 642. <contact> 643.

<collision>ankle_plate_right_fixed_joint_lump__foot_right_collision_1</collision> 644. </contact> 645. <update_rate>30</update_rate> 646. <always_on>true</always_on> 647. </sensor> 648. </gazebo> 649. 650. <!-- Foot Right --> 651. <link name="foot_right"> 652. <inertial> 653. <origin xyz="${foot_com_x} ${foot_com_y} ${foot_com_z}" rpy="0 0

0"/> 654. <mass value="${foot_mass}"/> 655. <inertia 656. ixx="${foot_Ixx}" 657. ixy="${foot_Ixy}" 658. ixz="${foot_Ixz}" 659. iyy="${foot_Iyy}" 660. iyz="${foot_Iyz}" 661. izz="${foot_Izz}" /> 662. </inertial>

Page 150: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

126

663. <collision> 664. <origin xyz="${(-foot_height_forward+foot_height_backward)/2} 0 0"

rpy="0 0 0"/> 665. <geometry> 666. <box size="${foot_height_forward+foot_height_backward} ${width}

${width}"/> 667. </geometry> 668. </collision> 669. </link> 670. 671. <gazebo reference="foot_right"> 672. <mu1>${foot_mu1}</mu1> 673. <mu2>${foot_mu2}</mu2> 674. <minDepth>${foot_min_depth}</minDepth> 675. <fdir1>1 0 0</fdir1> 676. </gazebo> 677. 678. <link name="pressure_sole_right"> 679. <collision> 680. <origin xyz="${(-foot_height_forward+foot_height_backward)/2} 0 0"

rpy="0 0 0"/> 681. <geometry> 682. <box size="${foot_height_forward+foot_height_backward} ${width}

0.001"/> 683. </geometry> 684. </collision> 685. </link> 686. 687. <gazebo reference="pressure_sole_right"> 688. <sensor name="right_pressure_sole" type="contact"> 689. <always_on>true</always_on> 690. <contact> 691.

<collision>ankle_plate_right_fixed_joint_lump__pressure_sole_right_collision_2</collision>

692. </contact> 693. <plugin name="right_foot_plugin"

filename="libgazebo_ros_bumper.so"> 694.

<bumperTopicName>march/sensor/right_pressure_sole</bumperTopicName> 695. <frameName>world</frameName> 696. </plugin> 697. </sensor> 698. </gazebo> 699. 700. <!-- Joints --> 701. <joint name="imu_joint" type="fixed"> 702. <parent link="${parent_name}"/> 703. <child link="imu_link"/> 704. </joint> 705. 706. <joint name="hip" type="fixed"> 707. <parent link="imu_link"/> 708. <child link="hip_base"/> 709. <origin xyz="0 0

${lower_leg_height+upper_leg_height+ankle_plate_height+width/2.0+hover_height}" rpy="0 0 0"/>

710. </joint> 711. 712. <joint name="left_hip_aa" type="revolute"> 713. <parent link="hip_base"/>

Page 151: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

127

714. <child link="hip_aa_frame_left_side"/> 715. <origin xyz="0 ${-hip_base_height/2} 0" rpy="0 0 0"/> 716. <axis xyz="-1 0 0"/> 717. 718. <limit velocity="${hip_aa_velocity_limit}" 719. effort="${hip_aa_effort_limit}" 720. lower="${left_hip_aa_rotation_lower_limit}" 721. upper="${left_hip_aa_rotation_upper_limit}"/> 722. <safety_controller soft_lower_limit="${left_hip_aa_rotation_lower_limit

+ hip_aa_soft_buffer}" 723. soft_upper_limit="${left_hip_aa_rotation_upper_limit

- hip_aa_soft_buffer}" 724. k_position="${k_position_value_haa}" 725. k_velocity="${k_velocity_value_haa}" /> 726. </joint> 727. 728. <joint name="left_hip_angle" type="fixed"> 729. <parent link="hip_aa_frame_left_side"/> 730. <child link="hip_aa_frame_left_front"/> 731. <origin xyz="0 ${-hip_aa_frame_height} 0" rpy="0 0 0"/> 732. </joint> 733. 734. <joint name="left_hip_fe" type="revolute"> 735. <parent link="hip_aa_frame_left_front"/> 736. <child link="upper_leg_left"/> 737. <origin xyz="${-hip_aa_frame_width} ${upper_leg_offset} 0" rpy="0 0

0"/> 738. <axis xyz="0 1 0"/> 739. 740. <limit velocity="${hip_fe_velocity_limit}" 741. effort="${hip_fe_effort_limit}" 742. lower="${left_hip_fe_rotation_lower_limit}" 743. upper="${left_hip_fe_rotation_upper_limit}"/> 744. <safety_controller soft_lower_limit="${left_hip_fe_rotation_lower_limit

+ hip_fe_soft_buffer}" 745. soft_upper_limit="${left_hip_fe_rotation_upper_limit

- hip_fe_soft_buffer}" 746. k_position="${k_position_value_hfe}" 747. k_velocity="${k_velocity_value_hfe}" /> 748. </joint> 749. 750. <joint name="left_knee" type="revolute"> 751. <parent link= "upper_leg_left"/> 752. <child link="lower_leg_left"/> 753. <origin xyz="0 0 ${-upper_leg_height}" rpy="0 0 0"/> 754. <axis xyz="0 -1 0"/> 755. 756. <limit velocity="${knee_velocity_limit}" 757. effort="${knee_effort_limit}" 758. lower="${left_knee_rotation_lower_limit}" 759. upper="${left_knee_rotation_upper_limit}"/> 760. <safety_controller soft_lower_limit="${left_knee_rotation_lower_limit +

knee_extension_soft_buffer}" 761. soft_upper_limit="${left_knee_rotation_upper_limit -

knee_flexion_soft_buffer}" 762. k_position="${k_position_value_kfe}" 763. k_velocity="${k_velocity_value_kfe}" /> 764. </joint> 765. 766. <joint name="left_fixing" type="fixed"> 767. <parent link="lower_leg_left"/>

Page 152: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

128

768. <child link="left_support"/> 769. <origin xyz="0 ${lower_leg_width_y/2} ${-lower_leg_height/2}" rpy="0 0

0"/> 770. </joint> 771. 772. <joint name="left_ankle" type="revolute"> 773. <parent link="lower_leg_left"/> 774. <child link="ankle_plate_left"/> 775. <origin xyz="0 ${ankle_plate_offset} ${-lower_leg_height}" rpy="0 0

0"/> 776. <axis xyz="0 1 0"/> 777. 778. <limit velocity="${ankle_velocity_limit}" 779. effort="${ankle_effort_limit}" 780. lower="${left_ankle_rotation_lower_limit}" 781. upper="${left_ankle_rotation_upper_limit}"/> 782. <safety_controller soft_lower_limit="${left_ankle_rotation_lower_limit

+ ankle_plantarflexion_soft_buffer}" 783. soft_upper_limit="${left_ankle_rotation_upper_limit

- ankle_dorsalflexion_soft_buffer}" 784. k_position="${k_position_value_adpf}" 785. k_velocity="${k_velocity_value_adpf}" /> 786. </joint> 787. 788. <joint name="left_foot_angle" type="fixed"> 789. <parent link="ankle_plate_left"/> 790. <child link="foot_left"/> 791. <origin xyz="0 0 ${-ankle_plate_height}" rpy="0 0 0"/> 792. </joint> 793. 794. <joint name="left_pressure_sole_joint" type="fixed"> 795. <parent link="foot_left"/> 796. <child link="pressure_sole_left"/> 797. <origin xyz="0 0 ${-(width/2)}" rpy="0 0 0"/> 798. </joint> 799. 800. <joint name="right_pressure_sole_joint" type="fixed"> 801. <parent link="foot_right"/> 802. <child link="pressure_sole_right"/> 803. <origin xyz="0 0 ${-(width/2)}" rpy="0 0 0"/> 804. </joint> 805. 806. <joint name="right_hip_aa" type="revolute"> 807. <parent link="hip_base"/> 808. <child link="hip_aa_frame_right_side"/> 809. <origin xyz="0 ${hip_base_height/2} 0" rpy="0 0 0"/> 810. <axis xyz="1 0 0"/> 811. 812. <limit velocity="${hip_aa_velocity_limit}" 813. effort="${hip_aa_effort_limit}" 814. lower="${right_hip_aa_rotation_lower_limit}" 815. upper="${right_hip_aa_rotation_upper_limit}"/> 816. <safety_controller

soft_lower_limit="${right_hip_aa_rotation_lower_limit + hip_aa_soft_buffer}" 817.

soft_upper_limit="${right_hip_aa_rotation_upper_limit - hip_aa_soft_buffer}" 818. k_position="${k_position_value_haa}" 819. k_velocity="${k_velocity_value_haa}" /> 820. 821. </joint> 822.

Page 153: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

129

823. <joint name="right_hip_angle" type="fixed"> 824. <parent link="hip_aa_frame_right_side"/> 825. <child link="hip_aa_frame_right_front"/> 826. <origin xyz="0 ${hip_aa_frame_height} 0" rpy="0 0 0"/> 827. </joint> 828. 829. <joint name="right_hip_fe" type="revolute"> 830. <parent link="hip_aa_frame_right_front"/> 831. <child link="upper_leg_right"/> 832. <origin xyz="${-hip_aa_frame_width} ${-upper_leg_offset} 0" rpy="0 0

0"/> 833. <axis xyz="0 1 0"/> 834. 835. <limit velocity="${hip_fe_velocity_limit}" 836. effort="${hip_fe_effort_limit}" 837. lower="${right_hip_fe_rotation_lower_limit}" 838. upper="${right_hip_fe_rotation_upper_limit}"/> 839. <safety_controller

soft_lower_limit="${right_hip_fe_rotation_lower_limit + hip_fe_soft_buffer}" 840.

soft_upper_limit="${right_hip_fe_rotation_upper_limit - hip_fe_soft_buffer}" 841. k_position="${k_position_value_hfe}" 842. k_velocity="${k_velocity_value_hfe}" /> 843. 844. </joint> 845. 846. <joint name="right_knee" type="revolute"> 847. <parent link="upper_leg_right"/> 848. <child link="lower_leg_right"/> 849. <origin xyz="0 0 ${-upper_leg_height}" rpy="0 0 0"/> 850. <axis xyz="0 -1 0"/> 851. 852. <limit velocity="${knee_velocity_limit}" 853. effort="${knee_effort_limit}" 854. lower="${right_knee_rotation_lower_limit}" 855. upper="${right_knee_rotation_upper_limit}"/> 856. <safety_controller soft_lower_limit="${right_knee_rotation_lower_limit

+ knee_extension_soft_buffer}" 857. soft_upper_limit="${right_knee_rotation_upper_limit

- knee_flexion_soft_buffer}" 858. k_position="${k_position_value_kfe}" 859. k_velocity="${k_velocity_value_kfe}" /> 860. </joint> 861. 862. <joint name="right_fixing" type="fixed"> 863. <parent link="lower_leg_right"/> 864. <child link="right_support"/> 865. <origin xyz="0 ${-lower_leg_width_y/2} ${-lower_leg_height/2}" rpy="0 0

0"/> 866. </joint> 867. 868. <joint name="right_ankle" type="revolute"> 869. <parent link="lower_leg_right"/> 870. <child link="ankle_plate_right"/> 871. <origin xyz="0 ${-ankle_plate_offset} ${-lower_leg_height}" rpy="0 0

0"/> 872. <axis xyz="0 1 0"/> 873. 874. <limit velocity="${ankle_velocity_limit}" 875. effort="${ankle_effort_limit}" 876. lower="${right_ankle_rotation_lower_limit}"

Page 154: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

130

877. upper="${right_ankle_rotation_upper_limit}"/> 878. <safety_controller soft_lower_limit="${right_ankle_rotation_lower_limit

+ ankle_plantarflexion_soft_buffer}" 879. soft_upper_limit="${right_ankle_rotation_upper_limit

- ankle_dorsalflexion_soft_buffer}" 880. k_position="${k_position_value_adpf}" 881. k_velocity="${k_velocity_value_adpf}" /> 882. </joint> 883. 884. <joint name="right_foot_angle" type="fixed"> 885. <parent link="ankle_plate_right"/> 886. <child link="foot_right"/> 887. <origin xyz="0 0 ${-ankle_plate_height}" rpy="0 0 0"/> 888. </joint> 889. 890. 891. 892. <xacro:include filename="camera/_d435.urdf.xacro" /> 893. <xacro:sensor_d435 parent="hip_base" plugin="$(arg realsense_simulation)"> 894. <!-- Attached to the hip_base, since this is most comparable to the backpack

--> 895. <!-- in amount of movement, the distance from hip base is based on first

design.--> 896. <origin xyz="-0.17 0.195 0.215" rpy="${0.5 * pi} ${0.25 * pi} ${pi}"/> 897. <!-- Rotate to be vertical and pointing down 45 degrees --> 898. </xacro:sensor_d435> 899. 900. 901. <!-- ROS Control plugin for Gazebo --> 902. <transmission name="left_hip_aa"> 903. <type>transmission_interface/SimpleTransmission</type> 904. <joint name="left_hip_aa"> 905.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 906. </joint> 907. <actuator name="left_hip_aa_motor"> 908. <mechanicalReduction>200</mechanicalReduction> 909. </actuator> 910. </transmission> 911. 912. <transmission name="left_hip_fe"> 913. <type>transmission_interface/SimpleTransmission</type> 914. <joint name="left_hip_fe"> 915.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 916. </joint> 917. <actuator name="left_hip_fe_motor"> 918. <mechanicalReduction>101</mechanicalReduction> 919. </actuator> 920. </transmission> 921. 922. <transmission name="left_knee"> 923. <type>transmission_interface/SimpleTransmission</type> 924. <joint name="left_knee"> 925.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 926. </joint> 927. <actuator name="left_knee_motor"> 928. <mechanicalReduction>101</mechanicalReduction> 929. </actuator> 930. </transmission>

Page 155: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

131

931. 932. <transmission name="left_ankle"> 933. <type>transmission_interface/SimpleTransmission</type> 934. <joint name="left_ankle"> 935.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 936. </joint> 937. <actuator name="left_ankle_motor"> 938. <mechanicalReduction>200</mechanicalReduction> 939. </actuator> 940. </transmission> 941. 942. <transmission name="right_hip_aa"> 943. <type>transmission_interface/SimpleTransmission</type> 944. <joint name="right_hip_aa"> 945.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 946. </joint> 947. <actuator name="right_hip_aa_motor"> 948. <mechanicalReduction>200</mechanicalReduction> 949. </actuator> 950. </transmission> 951. 952. <transmission name="right_hip_fe"> 953. <type>transmission_interface/SimpleTransmission</type> 954. <joint name="right_hip_fe"> 955.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 956. </joint> 957. <actuator name="right_hip_fe_motor"> 958. <mechanicalReduction>101</mechanicalReduction> 959. </actuator> 960. </transmission> 961. 962. <transmission name="right_knee"> 963. <type>transmission_interface/SimpleTransmission</type> 964. <joint name="right_knee"> 965.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 966. </joint> 967. <actuator name="right_knee_motor"> 968. <mechanicalReduction>101</mechanicalReduction> 969. </actuator> 970. </transmission> 971. 972. <transmission name="right_ankle"> 973. <type>transmission_interface/SimpleTransmission</type> 974. <joint name="right_ankle"> 975.

<hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> 976. </joint> 977. <actuator name="right_ankle_motor"> 978. <mechanicalReduction>200</mechanicalReduction> 979. </actuator> 980. </transmission> 981. </robot>

Page 156: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características
Page 157: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

133

B. Anexo II: Código de configuración de

parámetros

Código B: march_improved.yaml

1. march: 2. # Publish all joint states ----------------------------------- 3. joint_state_controller: 4. type: joint_state_controller/JointStateController 5. publish_rate: 50 6. 7. controller: 8. trajectory: 9. type: effort_controllers/JointTrajectoryController 10. joints: 11. - left_ankle 12. - left_hip_aa 13. - left_hip_fe 14. - left_knee 15. - right_ankle 16. - right_hip_aa 17. - right_hip_fe 18. - right_knee 19. 20. gains: # Required because we're controlling an effort interface 21. # The pid values are working, but they seem to be heavily dependent 22. # on the max effort values (in the march_world.launch file) for reasons

unknown. 23. left_ankle: {p: 3000, d: 30, i: 0, i_clamp: 0} 24. left_hip_aa: {p: 3000, d: 30, i: 0, i_clamp: 0} 25. left_hip_fe: {p: 3000, d: 30, i: 0, i_clamp: 0} 26. left_knee: {p: 3000, d: 30, i: 0, i_clamp: 0} 27. right_ankle: {p: 3000, d: 30, i: 0, i_clamp: 0} 28. right_hip_aa: {p: 3000, d: 30, i: 0, i_clamp: 0} 29. right_hip_fe: {p: 3000, d: 30, i: 0, i_clamp: 0} 30. right_knee: {p: 3000, d: 30, i: 0, i_clamp: 0} 31. 32. state_publish_rate: 25 # Override default 33. action_monitor_rate: 30 # Override default 34. stop_trajectory_duration: 0 # Override default 35. 36. constraints: 37. goal_time: 0.3 38. stopped_velocity_tolerance: 0.2 39. left_ankle: 40. trajectory: 0.5

Page 158: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

134

41. left_hip_aa: 42. trajectory: 0.5 43. left_hip_fe: 44. trajectory: 0.5 45. left_knee: 46. trajectory: 0.5 47. right_ankle: 48. trajectory: 0.5 49. right_hip_aa: 50. trajectory: 0.5 51. right_hip_fe: 52. trajectory: 0.5 53. right_knee: 54. trajectory: 0.5

Page 159: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

135

C. Anexo III: Código para establecer el patrón de

marcha

1. gaits: 2. side_step_left: 3. left_open: MIV_improved 4. right_close: MIV_ improved 5. side_step_left_small: 6. left_open: MIV_ improved 7. right_close: MIV_ improved 8. side_step_right: 9. right_open: MIV_ improved 10. left_close: MIV_ improved 11. side_step_right_small: 12. right_open: MIV_ improved 13. left_close: MIV_ improved 14. single_step_normal: 15. right_open: MIV_ improved 16. left_close: MIV_ improved 17. sit: 18. sit_down: MIV_ improved 19. sit_home: MIV_ improved 20. sofa_sit: 21. sit_down: MIV_ improved 22. sit_home: MIV_ improved 23. stairs_up: 24. right_open: MV_improved 25. left_swing: MV_improved 26. right_swing: MV_ improved 27. left_close: MV_ improved 28. right_close: MV_ improved 29. stairs_down: 30. right_open: MV_improved 31. left_swing: MV_improved 32. right_swing: MV_improved 33. left_close: MV_improved 34. right_close: MV_improved 35. walk: 36. right_open: MIV_ improved 37. left_swing: MIV_ improved 38. right_swing: MIV_ improved 39. left_close: MIV_ improved 40. right_close: MIV_ improved 41. slalom_walk: 42. right_open: MIV_ improved

Page 160: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

136

43. left_swing: MV_ improved 44. right_swing: MV_ improved 45. left_close: MIV_ improved 46. right_close: MIV_ improved 47. tilted_path_first_start: 48. left_open: MV_ improved 49. right_close: MV_ improved 50. tilted_path_second_start: 51. left_open: MV_ improved 52. right_close: MV_ improved 53. tilted_path_first_end: 54. left_open: MV_ improved 55. right_close: MV_ improved 56. tilted_path_second_end: 57. left_open: MV_ improved 58. right_close: MV_ improved 59. tilted_path_left_straight_start: 60. right_open: MV_ improved 61. left_close: MV_ improved 62. tilted_path_left_single_step: 63. right_open: MV_ improved 64. left_close: MV_ improved 65. tilted_path_left_straight_end: 66. left_open: MV_ improved 67. right_close: MV_ improved 68. tilted_path_right_straight_start: 69. left_open: MV_ improved 70. right_close: MV_ improved 71. tilted_path_right_single_step: 72. left_open: MV_ improved 73. right_close: MV_ improved 74. tilted_path_right_straight_end: 75. right_open: MV_ improved 76. left_close: MV_ improved 77. ramp_door_slope_up: 78. right_open: MV_ improved 79. left_open: MV_ improved 80. right_swing: MV_ improved 81. left_swing: MV_ improved 82. right_close: MV_ improved 83. left_close: MV_ improved 84. ramp_door_slope_down: 85. right_open: MV_ improved 86. left_open: MV_ improved 87. right_swing: MV_ improved 88. left_swing: MV_ improved 89. right_close: MV_ improved 90. left_close: MV_ improved 91. ramp_door_last_step: 92. right_open: MV_ improved 93. left_close: MV_ improved 94. ramp_door_slope_down_single: 95. right_open: MV_ improved 96. left_close: MV_ improved 97. right_swing_2: MV_ improved 98. left_close: MV_ improved 99. positions: 100. stand: 101. gait_type: walk_like 102. joints: 103. left_ankle: 0.0436

Page 161: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

137

104. left_hip_aa: 0.0 105. left_hip_fe: -0.0873 106. left_knee: 0.0 107. right_ankle: 0.0436 108. right_hip_aa: 0.0 109. right_hip_fe: -0.0873 110. right_knee: 0.0 111. tilted_path_right_stand: 112. gait_type: walk_like 113. joints: 114. left_ankle: 0.0436 115. left_hip_aa: 0.0873 116. left_hip_fe: -0.0873 117. left_knee: 0.0 118. right_ankle: 0.1309 119. right_hip_aa: -0.0524 120. right_hip_fe: 0.5236 121. right_knee: 0.8203 122. sofa_sit: 123. gait_type: sit_like 124. joints: 125. left_ankle: 0.0436 126. left_hip_aa: 0.0 127. left_hip_fe: 1.5708 128. left_knee: 1.7453 129. right_ankle: 0.0436 130. right_hip_aa: 0.0 131. right_hip_fe: 1.5708 132. right_knee: 1.7453 133. idle_3: 134. gait_type: walk_like 135. joints: 136. left_ankle: 0.0436 137. left_hip_aa: 0.0 138. left_hip_fe: -0.0873 139. left_knee: 0.0 140. right_ankle: 0.0436 141. right_hip_aa: 0.0 142. right_hip_fe: 0.1745 143. right_knee: 0.4363 144. slope_down_stand: 145. gait_type: stairs_like 146. joints: 147. left_ankle: -0.2618 148. left_hip_aa: 0.0 149. left_hip_fe: -0.0873 150. left_knee: 0.0 151. right_ankle: -0.2618 152. right_hip_aa: 0.0 153. right_hip_fe: -0.0873 154. right_knee: 0.0 155. sit: 156. gait_type: sit_like 157. joints: 158. left_ankle: 0.0436 159. left_hip_aa: 0.0 160. left_hip_fe: 1.2217 161. left_knee: 1.5708 162. right_ankle: 0.0436 163. right_hip_aa: 0.0 164. right_hip_fe: 1.2217

Page 162: Simulación y Control de un Exoesqueleto Robóticorua.ua.es/dspace/bitstream/10045/115952/1/Simulacion_y...distintos exoesqueletos vestibles de miembro inferior, mostrando sus características

138

165. right_knee: 1.5708 166. idle_6: 167. gait_type: walk_like 168. joints: 169. left_ankle: 0.0436 170. left_hip_aa: 0.0 171. left_hip_fe: 0.1745 172. left_knee: 0.4363 173. right_ankle: 0.0436 174. right_hip_aa: 0.0 175. right_hip_fe: -0.0873 176. right_knee: 0.0 177. tilted_path_left_stand: 178. gait_type: walk_like 179. joints: 180. left_ankle: 0.1309 181. left_hip_aa: -0.0524 182. left_hip_fe: 0.5236 183. left_knee: 0.8203 184. right_ankle: 0.0436 185. right_hip_aa: 0.0873 186. right_hip_fe: -0.0873 187. right_knee: 0.0 188.