Diseño, construcción y control de un péndulo de Furuta

154
DISEÑO, CONSTRUCCION Y CONTROL DE UN SISTEMA ELECTROMECÁNICO SUBACTUADO: EL PÉNDULO INVERTIDO ROTACIONAL CARLOS ANDRES OSORIO ZÚÑIGA RODRIGO GUTIERREZ MARIN UNIVERSIDAD AUTONOMA DE OCCIDENTE FACULTAD DE INGENIERIAS DEPARTAMENTO DE AUTOMATICA Y MECANICA PROGRAMA DE INGENIERIA MECATRONICA SANTIAGO DE CALI 2004

description

Trabajo de grado sobre Diseño, construcción y control de un péndulo de Furuta

Transcript of Diseño, construcción y control de un péndulo de Furuta

Page 1: Diseño, construcción y control de un péndulo de Furuta

1

DISEÑO, CONSTRUCCION Y CONTROL DE UN SISTEMA ELECTROMECÁNICO SUBACTUADO: EL PÉNDULO INVERTIDO ROTACIONAL

CARLOS ANDRES OSORIO ZÚÑIGA RODRIGO GUTIERREZ MARIN

UNIVERSIDAD AUTONOMA DE OCCIDENTE FACULTAD DE INGENIERIAS

DEPARTAMENTO DE AUTOMATICA Y MECANICA PROGRAMA DE INGENIERIA MECATRONICA

SANTIAGO DE CALI 2004

Page 2: Diseño, construcción y control de un péndulo de Furuta

2

DISEÑO, CONSTRUCCION Y CONTROL DE UN SISTEMA ELECTROMECÁNICO SUBACTUADO: EL PÉNDULO INVERTIDO ROTACIONAL

CARLOS ANDRES OSORIO ZÚÑIGA RODRIGO GUTIERREZ MARIN

Trabajo de grado para optar al título de Ingeniero Mecatrónico

Director FREDDY NARANJO PEREZ

Director del programa de Ingeniería Mecatrónica

UNIVERSIDAD AUTONOMA DE OCCIDENTE FACULTAD DE INGENIERIAS

DEPARTAMENTO DE AUTOMATICA Y MECANICA PROGRAMA DE INGENIERIA MECATRONICA

SANTIAGO DE CALI 2004

Page 3: Diseño, construcción y control de un péndulo de Furuta

3

Nota de aceptación:

Trabajo aprobado por el comité de grado

en cumplimiento de los requisitos exigidos

por la Universidad Autónoma de Occidente

para optar al título de Ingeniero

Mecatrónico.

OSCAR M. AGUDELO MAÑOZCA _________________________________

Jurado

ARNALDO MENDEZ PUPO _________________________________

Jurado

Santiago de Cali, 28 de Julio del 2004

Page 4: Diseño, construcción y control de un péndulo de Furuta

4

Quiero dedicar este trabajo principalmente a Dios ya que Él ha sido el que me ha regalado la inteligencia y la sabiduría para poder realizar este trabajo y terminar mis estudios de pregrado. A mi Padre Guillermo Osorio Ortíz y mi Madre Esperanza Zúñiga Sáenz por su gran esfuerzo para poder brindarme la oportunidad de terminar mi carrera, por sus enseñanzas, por todo su apoyo, por su confianza en mí; a mi Abuela Graciela Sáenz Cruz por tenerme el desayuno siempre listo a las 6:15 a.m. para que pudiera estar en la Universidad a las 7:00 a.m. y llamarme cuando me estaba yendo para preguntarme si se me olvidaba algo por llevar, a mi tío Alexander Zúñiga Sáenz por creer en mis capacidades y animarme a aprender, a Yolanda Trujillo Cerquera por reemplazarme en la rapi cuando necesitaba estudiar, a mi hermana Adriana Marcela Osorio Zúñiga por prestarme dinero para el bus en ciertas ocasiones para ir a la Universidad, mejorar mi regular redacción, ayudarme a ver mi carrera con una perspectiva social y llamarme cuando en Discovery estaban pasando programas científicos de mi interés, a mi amigo y compañero de estudio Andrés Mauricio González Vargas por enseñarme la lógica pura y a hacerle la traidora a los problemas más difíciles de resolver, a la Universidad Autónoma de Occidente, a mi amigo, compañero de estudio y trabajo de grado Rodrigo Gutiérrez Marín por su trabajo en el proyecto, aportar buenas ideas y afilar el machete, a mi amiga y novia Tatiana Paola Jaramillo Espinosa por su colaboración en el proyecto, brindarme compañía, apoyo y amor; a todas las personas que de una u otra manera contribuyeron para que este trabajo y la culminación de mis estudios de pregrado fueran posibles. Palabras faltan, muchísimas gracias, los quiero mucho. Carlos Andrés Osorio Zúñiga Quiero dedicar este trabajo a la persona que ha hecho posible todo mi desarrollo, mi avance, mi pensamiento, mi forma de ser, mi vida entera, quien ha colocado en mi camino todas las cosas que ahora me colman de felicidad, gracias Dios por no desampararme en ningún momento, por haber colocado en mi camino las personas precisas para que en este instante de mi vida finalice triunfante esta etapa que durante cinco años, fue una de las mas grandes metas por superar. Agradezco inmensamente a mis padres, Fernando Gutiérrez Muñoz y Luz Marina Marín Agudelo que durante toda mi existencia me han cuidado, guiado, aconsejado, amado y educado para ser en este momento la gran persona que soy. A todos mis familiares, mi abuela Maria, mi abuelo Cristóbal, mi tío Wilson, mi tía Fanny mi tía Noemí y todas las demás personas que en mi familia me apoyaron, me mimaron y me dieron fuerza para seguir adelante. A mi novia de siempre Katherine Adriana Ruiz Tovar, por su constante cariño, su amor incondicional y su compañía durante todos mis estudios de pregrado, por haber hecho una mejor persona de mi, por preocuparse en cada momento y por colocar en mi todos los sueños que con este logro y a su lado serán mas fáciles de realizar. A mi hermana Paula Andrea Gutiérrez Marín por quererme tanto, por levantarme cada mañana con un vaso de agua fría en la cabeza para poder llegar a la universidad. A Carlos Andrés Osorio Zúñiga, por su inmenso trabajo en este proyecto, por cubrirme la espalda y por convertirse en un gran amigo para mi. A todo el resto de compañeros de la universidad, que colocaron su grano de arena para motivar mi intelecto y razonamiento. A todas las personas que de una u otra manera contribuyeron en mi proceso de aprendizaje y sumaron en mi vida experiencias y conocimientos. Mil gracias a todos. Rodrigo Gutiérrez Marín

Page 5: Diseño, construcción y control de un péndulo de Furuta

5

AGRADECIMIENTOS

Sinceros agradecimientos a: Universidad Autónoma de Occidente, Dr. Ing. Freddy Naranjo Pérez - Director del Programa de Ingeniería Mecatrónica y orientador del proyecto, Héctor Fabio Rojas - Docente UAO y a la Vicerrectoría de Investigaciones UAO por la financiación del proyecto.

Page 6: Diseño, construcción y control de un péndulo de Furuta

6

CONTENIDO

pág.

INTRODUCCIÓN 15

1. MODELADO DEL PÉNDULO DE FURUTA 17

1.1 REPRESENTACIÓN DE DENAVIT – HARTENBERG 18

1.2 CINEMÁTICA 21

1.3 EXPRESIONES DE ENERGÍA 22

1.4 ECUACIONES DEL MOVIMIENTO 24

2. DISEÑO DE UN PÉNDULO DE FURUTA 27

2.1 PLANTEAMIENTO DE LA MISIÓN 27

2.2 IDENTIFICACIÓN DE NECESIDADES 29

2.2.1 Organización de las necesidades del cliente 29

2.2.2 Necesidades del cliente 30

2.3 MEDIDAS Y UNIDADES 31 2.3.1 Relación de la medidas con las necesidades 33

Page 7: Diseño, construcción y control de un péndulo de Furuta

7

2.3.2 Importancia de las medidas 34

2.3.3 Evaluación de la satisfacción de las necesidades del cliente en productos competidores 35

2.3.4 Evaluación de medidas en productos competidores 36

2.3.5 Asignación de valores ideales y marginales 37

2.3.6 Especificaciones preliminares 38

3. GENERACIÓN DE CONCEPTOS 39

3.1 CLARIFICAR EL PROBLEMA 39

3.2 DESCOMPOSICIÓN FUNCIONAL 40

3.3 ÁRBOL DE CLASIFICACIÓN DE CONCEPTOS 43

3.3.1 Refinamiento de la descomposición funcional 46

3.4 ESQUEMA DE COMBINACIÓN DE CONCEPTOS 46

4. SELECCIÓN DE CONCEPTOS 50

4.1 MATRIZ DE TAMIZAJE DE CONCEPTOS 51

Page 8: Diseño, construcción y control de un péndulo de Furuta

8

4.2 MATRIZ DE EVALUACIÓN DE CONCEPTOS 52

5. DISEÑO DETALLADO 53

6. ACONDICIONAMIENTO DE SEÑALES 59

6.1 ACONDICIONAMIENTO DE LA SEÑAL PARA OBTENER EL ÁNGULO 60

6.2 ACONDICIONAMIENTO DE LA SEÑAL PARA OBTENER LA VELOCIDAD ANGULAR 62

7. CONTROL DE UN PÉNDULO DE FURUTA 66

7.1 PUNTOS DE EQUILIBRIO DEL SISTEMA 67

7.1.1 Estabilidad de los Puntos de Equilibrio del Sistema 68

7.2 SWING UP 70

7.3 CONTROLADOR LINEAL CUADRÁTICO 74

7.4 CONTROLADOR GAIN SCHEDULING 83

8. CONCLUSIONES 94

BIBLIOGRAFIA 97

ANEXOS 100

Page 9: Diseño, construcción y control de un péndulo de Furuta

9

LISTA DE TABLAS

pág.

Tabla 1. Parámetros de Denavit – Hartenberg. 19 Tabla 2. Identificación de necesidades. 29 Tabla 3. Importancia de las necesidades del cliente. 30 Tabla 4. Medidas y unidades en el péndulo de Furuta. 31 Tabla 5. Relación de las medidas con las necesidades. 33 Tabla 6. Evaluación de la satisfacción de las necesidades del cliente en productos competidores. 35 Tabla 7. Evaluación de medidas en productos competidores. 36 Tabla 8. Asignación de valores ideales y marginales. 37 Tabla 9. Especificaciones preliminares. 38 Tabla 10. Matriz de tamizaje de conceptos. 51 Tabla 11. Matriz de evaluación de conceptos. 52 Tabla 12. Características del Motor. 55 Tabla 13. Parámetros del sistema. 75 Tabla 14. Parámetros de los compensadores lineales en cada uno de los puntos deseados. 84 Tabla 15. Coeficientes de los Polinomios para el controlador gain scheduling. 86

Page 10: Diseño, construcción y control de un péndulo de Furuta

10

LISTA DE FIGURAS

pág.

Figura 1. El péndulo de Furuta. 17 Figura 2. Vista general del péndulo de Furuta desarrollado. 18 Figura 3. Marcos de referencia según la representación de Denavit – Hartenberg. 19 Figura 4. Metodología para diseño de sistemas mecatrónicos utilizada en el desarrollo del péndulo de Furuta. 27 Figura 5. Importancia de las medidas en el diseño. 34 Figura 6. Descomposición funcional del péndulo de Furuta. 40 Figura 7. Conceptos generados para el péndulo de Furuta. 50 Figura 8. Diseño de la base y el sistema de sujeción. 54 Figura 9. Sensor VISHAY. 56 Figura 10. Disposición del Motor, Sensor y Mecanismo de transmisión. 57 Figura 11. Prototipo del Sistema. 58 Figura 12. Tensión entregada por el sensor según el ángulo girado. 59 Figura 13. Relación entre el voltaje entregado por el sensor y el ángulo que se necesita. 60 Figura 14. Implementación en Simulink para la conversión del ángulo. 62 Figura 15. Comparación entre el desempeño de los dos derivadores discretos. 64 Figura 16. Implementación en Simulink del acondicionamiento de las señales de los sensores para el cálculo de las posiciones angulares y las velocidades angulares del péndulo y el brazo. 65

Page 11: Diseño, construcción y control de un péndulo de Furuta

11

Figura 17. (a) Estado de equilibrio estable; (b) estado de equilibrio inestable. 69 Figura 18. Implementación en Simulink del controlador Swing Up. 72 Figura 19. Diagrama de bloques en Simulink del subsistema System Energy. 72

Figura 20. Implementación en Simulink del sistema de selección de control. 73 Figura 21. Control por realimentación del estado. 74

Figura 22. Esquema RTWin del control del péndulo. 78 Figura 23. Posición del péndulo ante el swing up. 78 Figura 24. Posición del brazo ante el swing up. 79 Figura 25. Acción de control ante el swing up. 79

Figura 26. Posición del péndulo ante el controlador lineal cuadrático. 80 Figura 27. Posición del brazo ante el controlador lineal cuadrático. 80 Figura 28. Acción de control ante el controlador lineal cuadrático. 81 Figura 29. Posición del péndulo ante perturbaciones con el LQR. 81 Figura 30. Posición del brazo ante perturbaciones con el LQR. 82 Figura 31. Acción de control ante perturbaciones con el LQR. 82 Figura 32. Comparación entre los valores de K1 y el polinomio calculado. 87 Figura 33. Comparación entre los valores de K2 y el polinomio calculado. 87 Figura 34. Comparación entre los valores de K3 y el polinomio calculado. 88 Figura 35. Comparación entre los valores de K4 y el polinomio calculado. 88 Figura 36. Implementación en Matlab/Simulink del controlador 89 gain scheduling.

Page 12: Diseño, construcción y control de un péndulo de Furuta

12

Figura 37. Posición del péndulo ante el controlador Gain Scheduling. 90 Figura 38. Posición del brazo ante el controlador Gain Scheduling. 90 Figura 39. Acción de control ante el controlador Gain Scheduling. 91 Figura 40. Posición del péndulo ante el gain scheduling con perturbaciones. 92 Figura 41. Posición del brazo ante el gain scheduling con perturbaciones. 92 Figura 42. Acción de control ante el gain scheduling con perturbaciones. 93

Page 13: Diseño, construcción y control de un péndulo de Furuta

13

LISTA DE ANEXOS

pág.

Anexo A. Tutorial de DirectX para el desarrollo de simulaciones y 100 aplicaciones 3D. Anexo B. Planos de Construcción para el Péndulo de Furuta. 146

Page 14: Diseño, construcción y control de un péndulo de Furuta

14

RESUMEN

Este trabajo presenta el desarrollo y control de un péndulo invertido rotacional

(péndulo de Furuta). Éste es un sistema electromecánico subactuado de dos

grados de libertad rotacionales. Un ejemplo de este tipo de sistemas son los

robots construidos por barras y uniones articuladas pasivas y activas. El desarrollo

de estos mecanismos que pueden realizar tareas complejas con un número

reducido de actuadores es un asunto de gran interés, puesto que implica

reducción de peso y de costos.

El dispositivo desarrollado es un sistema no lineal e inestable muy utilizado en la

aplicación experimental de técnicas avanzadas de control, el problema cubre una

variedad de aspectos en ingeniería como Mecatrónica, física, mecánica, sistemas

de control, sistemas dinámicos, sistemas en tiempo real, robótica y computadores.

Una variedad de otras disciplinas también será cubierta.

Page 15: Diseño, construcción y control de un péndulo de Furuta

15

INTRODUCCIÓN

Dentro de los sistemas de péndulos invertidos, un ejemplo muy utilizado y

profundamente estudiado es el péndulo encima de un carro móvil, dicho sistema

se utiliza para el análisis experimental de técnicas de control. El inconveniente con

este sistema se encuentra en que el recorrido del carro se encuentra acotado, lo

que limita las maniobras de control. Para eliminar dicha limitación se reemplaza la

trayectoria lineal del carro por una trayectoria circular, dando origen al sistema

Péndulo de Furuta.

El sistema Péndulo de Furuta fue creado por el Dr. K. Furuta del Instituto de

Tecnología de Tokio, Japón, el cual es un sistema subactuado de dos grados de

libertad rotacionales llamados brazo y péndulo. El movimiento del brazo se realiza

en un plano horizontal girando alrededor de un eje perpendicular al plano, el

péndulo se encuentra ubicado en un extremo del brazo y su eje giro es colineal al

eje axial del brazo y su movimiento se realiza en un plano perpendicular al de éste

último.

Un sistema subactuado es aquel que carece de al menos un actuador en uno de

sus grados de libertad, es decir, el número de actuadores es menor que el número

de grados de libertad. Los sistemas subactuados incluyen fallos en los actuadores,

la ausencia de los mismos por consideraciones de diseño, exceso de peso,

reducción de costos, etc.

El fallo en los actuadores de un sistema físico es un problema de mucho interés

para la teoría de control moderna debido a que resulta imposible tener un control

directo sobre el grado de libertad no actuado, de modo que el control de estos se

debe realizar (si es posible) por medio de los actuadores restantes.

Page 16: Diseño, construcción y control de un péndulo de Furuta

16

El control de un péndulo de Furuta puede tener diferentes objetivos y dependiendo

de dichos objetivos el nivel de dificultad puede cambiar. El objetivo de mayor

interés consiste en mantener el péndulo en posición vertical por encima del brazo

puesto que esta posición es de naturaleza inestable y en consecuencia el péndulo

tenderá a caer por efecto de la gravedad.

En este trabajo se muestra el modelado matemático del sistema físico basado en

el algoritmo de Denavit-Hartenberg para la obtención de la posición en

coordenadas cartesianas de un punto sobre el péndulo y su uso posterior en el

método de Lagrange con el fin de obtener las ecuaciones diferenciales que

modelan el sistema. También se desarrolla un programa en DirectX con Visual

Basic para simular y monitorear el comportamiento del sistema.

Para realizar la tarea de llevar el péndulo desde su posición estable (vertical por

debajo del brazo), hasta su posición inestable (Vertical por encima del brazo), se

define una técnica de control de energía. El balanceo del péndulo en su posición

vertical se obtiene mediante control por realimentación del estado y control por

ganancias programadas.

La implementación de las técnicas de control mencionadas anteriormente se

hacen utilizando el Real-Time Windows Target de Matlab.

Se debe tener en cuenta la existencia de perturbaciones inherentes a los sistemas

reales como incertidumbres en los parámetros o en la dinámica del modelo,

ruidos, desgastes mecánicos o fallos en los actuadores que pueden complicar

considerablemente el control del sistema.

Page 17: Diseño, construcción y control de un péndulo de Furuta

17

1. MODELADO DEL PÉNDULO DE FURUTA

El péndulo de Furuta se muestra en la Figura 1. Consta de dos cuerpos inerciales

conectados: un pilar central con momento de inercia J, rígidamente conectado a

un brazo horizontal de longitud la y masa homogéneamente distribuida en línea ma.

El péndulo de longitud lp y masa homogéneamente distribuida en línea mp.

Figura 1. El péndulo de Furuta

Page 18: Diseño, construcción y control de un péndulo de Furuta

18

Figura 2. Vista general del péndulo de Furuta desarrollado.

1.1 REPRESENTACIÓN DE DENAVIT – HARTENBERG Para obtener la posición en coordenadas cartesianas de un punto sobre el

péndulo respecto a el origen, se definen los marcos de referencia según la

representación de Denavit-Hartenberg, se llena la tabla de parámetros de Denavit-

Hartenberg, se calcula la matriz de transformación del último marco de referecia

respecto al primero y por último se extraen dichos valores de posición de la

submatriz de traslación p. Los marcos de referencia según la representación de

Denavit-Hartenberg se muestran en la Figura 3.

Page 19: Diseño, construcción y control de un péndulo de Furuta

19

Figura 3. Marcos de referencia según la representación de Denavit – Hartenberg

Tabla 1. Parámetros de Denavit – Hartenberg

qi θθθθi di ai ααααI

1φπ +

20 0

2θπ−

2la lp 0

Matrices de transformación 1−Α ii :

+−+

++

10000010

0)2

cos(0)2

sin(

0)2

sin(0)2

cos(

01 φπφπ

φπφπ

Page 20: Diseño, construcción y control de un péndulo de Furuta

20

−−−

−−−−

1000100

)2

sin(0)2

cos()2

sin(

)2

cos(0)2

sin()2

cos(

12

a

p

p

l

l

l

θπθπθπ

θπθπθπ

12

01

02 Α⋅Α=T

La matriz T define la orientación (submatriz de rotación) y posición (submatriz de

traslación) del extremo del péndulo referidas al marco de referencia 0, en función

de las n coordenadas articulares.

⋅⋅⋅+⋅−⋅⋅⋅−⋅⋅⋅−

=

1000cos0sincos

cossinsinsincoscossincossinsincoscoscossinsinsin

02 θθθ

φθφφθφθφθφφφθφθφ

p

pa

pa

lllll

T

=

=

EscaladoaPerspectivTraslaciónRotación

efpR

Tx

xx

31

1333

En robótica la submatriz 31xf , que representa una transformación de perspectiva

es nula; y la submatriz eque representa un escalado global es uno.

33xR y 13xp representan la orientación y la posición del marco de referencia 2 rotado

y trasladado con respecto al marco de referencia 0 (base).

Page 21: Diseño, construcción y control de un péndulo de Furuta

21

1.2 CINEMÁTICA La posición de un punto P sobre el péndulo puede ser descrito por el vector de

posición

T

pazpaypaxpa rrrrrrrrrrrr )),(),,(),,((),( = (1)

con

θφφ sinsincos),( ⋅⋅−⋅= papax rrrrr

φθφ cossinsin),( ⋅+⋅= papay rrrrr (2)

θcos),( ppaz rrrr =

La variable ra es la posición radial del brazo, y rp es la posición radial del péndulo.

Las distancias radiales son medidas desde el centro de rotación de los cuerpos.

Tomando derivadas respecto al tiempo de (1) se obtiene una expresión para la

velocidad

Tpazpaypaxpa rrvrrvrrvrrv )),(),,(),,((),( = (3)

de un punto P sobre el péndulo, con ...

cossinsincossin),( φφθθφθφφ ⋅⋅⋅−⋅⋅⋅−⋅⋅−= ppapax rrrrrv

...sinsincoscoscos),( φφθθφθφφ ⋅⋅⋅−⋅⋅⋅+⋅⋅= ppapay rrrrrv (4)

.sin),( θθ ⋅⋅−= ppaz rrrv

Esto se usa luego para expresar el cuadrado de la magnitud de la velocidad de P: 2.

2..2.

2222 cos2)sin(),( θθφθφθ ⋅+⋅⋅⋅⋅⋅+⋅⋅+= ppapapa rrrrrrrv (5)

Page 22: Diseño, construcción y control de un péndulo de Furuta

22

1.3 EXPRESIONES DE ENERGÍA Expresiones para la energía cinética y potencial son obtenidas en esta sección. La

energía cinética es obtenida a partir de la solución de la integral

∫= dmvT 2

21 (6)

usando (4), y la energía potencial al resolver

(7)

usando (1). Las expresiones son obtenidas para cada cuerpo separadamente.

Pilar central

(8)

(9)

Brazo horizontal

(10)

(11)

∫= dmrgV z

2.2 φJTc =

∫=la

aac dslmsvT0

2 /)0,(2

;0=cV

2.2

31 φaalm=

Page 23: Diseño, construcción y control de un péndulo de Furuta

23

(12)

Brazo pendular

(13)

(14)

(15)

(16)

La energía cinética total del péndulo invertido rotacional está dada por

(17)

y la energía potencial total por

(18)

;0=aV

∫=lp

ppap dslmsrvT0

2 /),(2

2.2

..2.222

31cos)sin

31( θθφθφθ pppappap lmllmllm +++=

∫=lp

ppazp dslmslrgV0

/),(

θcos21

pp glm=

pac TTTT ++=

pac VVVV ++=

Page 24: Diseño, construcción y control de un péndulo de Furuta

24

1.4 ECUACIONES DEL MOVIMIENTO Formulando el Lagrangiano

(19)

las ecuaciones del movimiento están dadas por

(20)

siendo φτ el Torque externo aplicado al brazo horizontal. Las derivadas parciales

son :

(21)

φτφφ=

∂∂

∂ LLdtd

.

0. =∂∂

∂θθ

LLdtd

0=∂∂φL

..222

. cos21sin

31

31 θθφθ

φpapppapa llmlmlmmJL +

+

++=

θθφθφθθθ

sin21sin

21sincos

31 ..2.

2pppappp glmllmlmL +−=

∂∂

.2

.

. 31cos

21 θφθ

θpppap lmllmL +=

VTL −=

Page 25: Diseño, construcción y control de un péndulo de Furuta

25

Insertando (21) en (20) e introduciendo

(22)

resultan las ecuaciones de movimiento para el sistema1:

φτθθγθφθθβθθγφθβα =−+++2.......

2 sinsincos2cos)sin( (23)

0sinsincoscos2.....

=−−+ θδφθθβθβφθγ

Si se tiene en cuenta que el par de control se genera por un motor de corriente

continua controlado por voltaje:

..αα ⋅−=⇒⋅++⋅=

RK

RVIK

dtdiLIRV e

e (24)

donde R, Ke y L corresponden a las constantes eléctricas del motor.

En la expresión anterior se desprecia el efecto inductivo en el motor para

simplificar el modelo.

Considerando que el par es proporcional a la corriente: 1 GAFVERT, M. “Modelling the Furuta Pendulum.” [En Línea] Department of Automatic Control, Lund

Institute of Technology, Lund, Sweden. 1998. [citado 17 Ene., 2004]. Disponible por Internet:

<http://web.njit.edu/~sxn5261/gafvert_modelling_furuta.pdf >

2

31

pplm=β2)31( apa lmmJ ++=α

pap llm21=γ pp glm

21=δ

Page 26: Diseño, construcción y control de un péndulo de Furuta

26

.2

αττ ⋅−⋅=⇒⋅=RKV

RKIK ee

tm (25)

Debido a que en los motores de corriente de continua el valor de Kt y el valor de Ke

son casi idénticos, se reemplaza Kt por Ke en la expresión anterior.

Si se tiene en cuenta en el modelo anterior el efecto de una caja reductora

acoplada en el eje del motor, el par es proporcional a la reducción:

(26)

.22 φτττ φφ ⋅⋅−⋅⋅=⇒⋅=RKnV

RKnn ee

m

Page 27: Diseño, construcción y control de un péndulo de Furuta

27

2. DISEÑO DE UN PENDULO DE FURUTA

El diseño del péndulo de Furuta se realiza por medio de la metodología para

diseño de sistemas mecatrónicos estudiada de los cursos de Diseño Mecatrónico

1 y 2 impartidos en la Universidad Autónoma de Occidente.

Figura 4. Metodología para diseño de sistemas mecatrónicos utilizada en el

desarrollo del péndulo de Furuta.

Diseño Mecatrónico I, Universidad Autónoma de Occidente.

2.1 PLANTEAMIENTO DE LA MISIÓN Descripción del producto • Péndulo Invertido Rotacional para la aplicación de técnicas de control.

Page 28: Diseño, construcción y control de un péndulo de Furuta

28

Principales objetivos de marketing

• Introducción para el segundo semestre del año 2004.

Mercado primario

• Universidad Autónoma de Occidente.

Mercado secundario

• Universidad de todo el mundo.

• Estudiantes de Ingenierías Electrónica y Mecatrónica.

• Consumidores casuales (interesados en el tema).

Premisas y restricciones

• Péndulo Invertido Rotacional.

• Dispositivo robusto y fiable.

• Aceptable estética y seguridad.

• Dispositivo liviano.

• Facilidad de mantenimiento y reparación.

• Facilidad de transporte.

• Dispositivo de bajo costo.

Partes implicadas

• Entidad de financiamiento

• Director del proyecto

• Diseñadores

• Usuarios

• Personal de producción

Page 29: Diseño, construcción y control de un péndulo de Furuta

29

2.2 IDENTIFICACIÓN DE NECESIDADES

Tabla 2. Identificación de necesidades

2.2.1 Organización de las necesidades del cliente El P.I.R. es robusto

• El P.I.R. posee un corto tiempo medio de reparación. ****

• El P.I.R. posee un buen tiempo medio entre averías. ****

• Los sensores funcionan bien después de mucho uso. *****

• El P.I.R. posee un buen rango de trabajo. *****

El P.I.R. es cómodo a la hora de trasladar

• El P.I.R. es liviano. ***

• El P.I.R. es de fácil transporte. *** !

• El P.I.R. necesita poco espacio en su lugar de colocación. * !

Planteamientos de los clientes Identificación de las necesidades

No me gustaría tener que hacer fuerza transportando el aparato. El P.I.R. es liviano.

No me gustaría lastimarme cuando trabaje con el aparato. El P.I.R. es seguro, hay poco riesgo de accidentes.

Me gustaría que el dispositivo fuera duradero. El P.I.R. es robusto, posee un corto tiempo medio de reparación.

No me gustaría que fuera de esos aparatos que cada rato hay que estarlos arreglando. El P.I.R. posee un buen tiempo medio entre averías.

No me gustaría que el aparato fuera demasiado costoso. El P.I.R es de precio accesible. No me gustaría que el aparato fuera complicado de transportar por su tamaño. El P.I.R. es de fácil transporte.

Me gustaría que el dispositivo no ocupara mucho espacio en mi mesa de trabajo. El P.I.R. necesita poco espacio en su lugar de colocación.

No me gustaría que los sensores perdieran fidelidad. Los sensores funcionan bien después de mucho uso. Me gustaría que el sistema diera muchas vueltas si es necesario. El P.I.R. posee un buen rango de trabajo.

Me gustaría que el aparato se viera bien. El P.I.R. es estético y elegante

Me gustaría que tener mediciones confiables de los sensores.

Los sensores proporcionan muy buenas

mediciones.

Page 30: Diseño, construcción y control de un péndulo de Furuta

30

Otros

• El P.I.R. es seguro, hay poco riesgo de accidentes. **

• El P.I.R es de precio accesible. ***

• El P.I.R. es estético y elegante. ***

* Nivel de importancia

! Necesidad latente

2.2.2 Necesidades del cliente Tabla 3. Importancia de las necesidades del cliente

# Necesidad Importancia

1 El P.I.R. es liviano. 3

2 El P.I.R. es seguro, hay poco riesgo de accidentes. 2

3 El P.I.R. es robusto, posee un corto tiempo medio de reparación.

4

4 El P.I.R. posee un buen tiempo medio entre averías. 4

5 El P.I.R es de precio accesible. 3

6 El P.I.R. es de fácil transporte. 3

7 El P.I.R. necesita poco espacio en su lugar de colocación.

1

8 Los sensores funcionan bien después de mucho uso. 5

Page 31: Diseño, construcción y control de un péndulo de Furuta

31

# Necesidad Importancia

9 El P.I.R. posee un buen rango de trabajo. 5

10 El P.I.R. es estético y elegante 3

11 Los sensores proporcionan muy buenas

mediciones. 5

2.3 MEDIDAS Y UNIDADES Tabla 4. Medidas y unidades en el péndulo de Furuta

Medida # Necesidad(es) # s

Medida Imp. Unidades

1 6,7 Longitud de la barra

vertical 2 m

2 6,7 Longitud de la barra

horizontal 2 m

3 1,2 Masa de la barra vertical 3 Kg.

4 1Masa de la barra

horizontal 2 Kg.

5 5 Costo unitario 2 pesos

6 8 Garantía 5 años

7 11 Resolución de los

sensores 5 Grados

8 4Tiempo medio entre

averías 4 horas

Page 32: Diseño, construcción y control de un péndulo de Furuta

32

Medida # Necesidad(es) # s

Medida Imp. Unidades

9 3Tiempo medio de

reparación 4 horas

10 10 Estética 2 subj

11 2 Seguridad 1 subj

12 9 Altura de la Base 5 m

Page 33: Diseño, construcción y control de un péndulo de Furuta

33

2.3.1 Relación de la medidas con las necesidades Tabla 5. Relación de las medidas con las necesidades

Medidas

Long

itud

dela

barra

verti

cal

Long

itud

dela

barra

horiz

onta

l

Mas

ade

laba

rrave

rtica

l

Mas

ade

laba

rraho

rizon

tal

Cos

toun

itario

Gar

antía

Res

oluc

ión

delo

sse

nsor

es

Tiem

pom

edio

entre

aver

ías

Tiem

pom

edio

dere

para

ción

Est

étic

a

Seg

urid

ad

Altu

rade

laB

ase

# 1 2 3 4 5 6 7 8 9 10 11 12

# Necesidad Imp

1 El P.I.R. es liviano. 3 3 3

2 El P.I.R. es seguro, hay poco riesgo de accidentes. 2 2 2

3 El P.I.R. es robusto, posee un corto tiempo medio de reparación.

4 4

4 El P.I.R. posee un corto tiempo medio entre averías. 4 4

5 El P.I.R es de precio accesible. 3 3

6 El P.I.R. es de fácil transporte. 3 3 3

7 El P.I.R. necesita poco espacio en su lugar de colocación.

1 1 1

8 Los sensores funcionan bien después de mucho uso. 5 5

9 El P.I.R posee un buen rango de trabajo. 5 5

10 El P.I.R. es estético y elegante 3 3

11 Los sensores proporcionan muy buenas

mediciones. 5 5

TOTAL 10 10 13 9 9 25 25 16 16 9 4 25

PORCENTAJE 5.8 5.8 7.6 5.2 5.2 14.6 14.6 9.3 9.3 5.2 2.3 14.6

Page 34: Diseño, construcción y control de un péndulo de Furuta

34

02468

10121416

Porcentajede Importancia

1 2 3 4 5 6 7 8 9 10 11 12

No. de Medida

2.3.2 Importancia de las medidas. En la figura 5 se muestra el gráfico de barras

de la importancia de las medidas en el diseño.

Figura 5. Importancia de las medidas en el diseño

Las medidas de mayor importancia en el diseño son las medidas 6,7 y 12 que

corresponden respectivamente a garantía, resolución de los sensores y Altura de

la base.

Page 35: Diseño, construcción y control de un péndulo de Furuta

35

2.3.3 Evaluación de la satisfacción de las necesidades del cliente en productos competidores.

Tabla 6. Evaluación de la satisfacción de las necesidades del cliente en productos

competidores

# Necesidad Imp.

Mic

roro

botn

aPé

ndul

oR

otac

iona

l

GIP

-100

-MIX

X-R

Inve

rted

Pend

ulum

App

arat

usPP

-300

1 El P.I.R. es liviano. 3 4 2 3

2 El P.I.R. es seguro, hay poco riesgo de accidentes.

2 5 5 5

3 El P.I.R. es robusto, posee un corto tiempo medio de reparación.

4 3 2 4

4 El P.I.R. posee un buen tiempo medio entre averías.

4 4 4 4

5 El P.I.R es de precio accesible. 3 3 2 1

6 El P.I.R. es de fácil transporte. 3 3 2 4

7 El P.I.R. necesita poco espacio en su lugar de colocación.

1 3 2 4

8 Los sensores funcionan bien después de mucho uso.

5 5 5 5

9 El P.I.R. posee un buen rango de trabajo. 5 5 5 5

10 El P.I.R. es estético y elegante. 3 4 3 5

11 Los sensores proporcionan muy buenas

mediciones. 5 5 5 5

Page 36: Diseño, construcción y control de un péndulo de Furuta

36

2.3.4 Evaluación de medidas en productos competidores

Tabla 7. Evaluación de medidas en productos competidores

Medida

# Necesidad # s Medida Imp. Unidades

Mic

roro

botn

aPé

ndul

oR

otac

iona

l

Qua

nser

RO

TPEN

Inve

rted

Pend

ulum

App

arat

usPP

-300

1 6,7 Longitud de la barra

vertical 2 m 0.35 0.3 0.4

2 6,7 Longitud de la barra

horizontal 2 m 0.4 0.2 0.2

3 1,2 Masa de la barra

vertical 3 Kg. - - -

4 1Masa de la barra

horizontal 2 Kg. - - -

5 5 Costo unitario 2 Miles de

pesos 15.000

12.00

012.000

6 8 Garantía 5 años 2 2 2

7 11 Resolución de los

sensores 5 Grados

1000

P/R

600

P/R

1000

P/R

8 4Tiempo medio entre

averías 4 horas - - -

9 3Tiempo medio de

reparación 4 horas - - -

10 10 Estética (0-5) 2 subj 5 4 5

11 2 Seguridad (0-5) 1 subj 5 5 5

12 9 Altura de la base 5 M - - -

Page 37: Diseño, construcción y control de un péndulo de Furuta

37

2.3.5 Asignación de valores ideales y marginales

Tabla 8. Asignación de valores ideales y marginales

# Medida UnidadesValor

Marginal Valor Ideal

1 Longitud de la barra vertical m <0.50 =<0.45

2Longitud de la barra

horizontal m <0.40 =<0.3

3 Masa de la barra vertical Kg. <0.5 <0.25

4 Masa de la barra horizontal Kg. <0.5 <0.25

5 Costo unitario pesos <5.000.000 =<3.000.000

6 Garantía años >=2 >2

7 Resolución de los sensores Grados <0.35 >=0.088

8 Tiempo medio entre averías horas >=1152 >1152

9Tiempo medio de

reparación horas <0.5 <0.25

10 Estética (0-5) subj >3 >=4

11 Seguridad (0-5) subj >3 >=4

12 Altura de la Base. m >=0.4 0.5

Page 38: Diseño, construcción y control de un péndulo de Furuta

38

2.3.6 Especificaciones preliminares

Tabla 9. Especificaciones preliminares

# Medida Unidades Valor

1 Longitud de la barra vertical m <=0.45

2 Longitud de la barra horizontal m <=0.3

3 Masa de la barra vertical Kg. <0.25

4 Masa de la barra horizontal Kg. <0.25

5 Costo unitario pesos <2’700.000

6 Garantía años >=2

7 Resolución de los sensores Grados >0.35

8 Tiempo medio entre averías horas >1152

9 Tiempo medio de reparación horas <0.5

10 Estética (0-5) subj >=4

11 Seguridad (0-5) subj >3

12 Altura de la Base. m >=0.5

Page 39: Diseño, construcción y control de un péndulo de Furuta

39

3 GENERACION DE CONCEPTOS

3.1 CLARIFICAR EL PROBLEMA

Descripción del producto

• Péndulo Invertido Rotacional para la aplicación de técnicas de control

avanzado.

Necesidades

• El P.I.R. es liviano.

• El P.I.R. es seguro, hay poco riesgo de accidentes.

• El P.I.R. es robusto, posee un corto tiempo medio de reparación.

• El P.I.R. posee un buen tiempo medio entre averías.

• El P.I.R es de precio accesible.

• El P.I.R. es de fácil transporte.

• El P.I.R. necesita poco espacio en su lugar de colocación.

• Los sensores funcionan bien después de mucho uso.

• El P.I.R. posee un buen rango de trabajo.

• El P.I.R. es estético y elegante.

• Los sensores proporcionan muy buenas mediciones.

Especificaciones

• Longitud de la barra vertical menor o igual a 45 cm.

• Longitud de la barra horizontal menor o igual a 30 cm.

• Masa de la barra vertical menor a 0.25 Kg.

• Masa de la barra horizontal menor a 0.25 Kg.

Page 40: Diseño, construcción y control de un péndulo de Furuta

40

Péndulo controlado

• Costo unitario no mayor a $ 2.700.000.

• Garantía no menor a 2 años.

• Resolución de los sensores no mayor a 0.35 grados.

• Tiempo medio entre averías mayor a 1152 horas.

• Tiempo medio de reparación máximo de media hora.

• Estética (0-5) mayor o igual a 4.

• Seguridad (0-5) mayor o igual a 3.

• Altura de la Base. No menor a 0.5m.

3.2 DESCOMPOSICIÓN FUNCIONAL Figura 6. Descomposición funcional del péndulo de Furuta.

Los conceptos generados son los siguientes :

Señales

Almacenar o aceptar energía

Transmitir movimiento

a el

Energía

Convertir energía a

movimiento

Sensar la posición angular

de las barras

Procesar datos y

calcular ley

Adquirir y Acondicionar

datos

Page 41: Diseño, construcción y control de un péndulo de Furuta

41

Subfunción: Aceptar energía externa.

• Aire comprimido (almacenado o de compresor externo).

• Energía eléctrica tomada de la pared.

• Hidráulica.

• Paquete de baterías

• Potencia humana de piernas o de brazos.

• Celdas solares.

• Eólica

Subfunción: Procesar datos y calcular ley de control.

• Turbo C++

• Matlab/Simulink

• Rtlinux

• DSP (Digital Signal Processor)

• Visual C++

• Visual Basic

• Sisdei

• Labview

• SCD

• HC6812

• SM56

Subfunción: Sensar la posición angular de las barras.

• Encorders incrementales

• Enconders absolutos

Page 42: Diseño, construcción y control de un péndulo de Furuta

42

• Potenciómetros

• Resolvers

Subfunción: Convertir energía a movimiento rotacional.

• Motor AC

• Motor DC con reductor

• Motor Paso a Paso

• Servomotor AC

• Servomotor DC

Subfunción: Adquirir y acondicionar datos.

• Puerto Paralelo (PC)

• Puerto Serial (PC)

• Puerto USB (PC)

• Puertos (Hardware Externo).

• PCI – 1200 (National Instruments)

• Instrumentación (Hardware externo).

Subfunción : Transmitir movimiento al péndulo.

• Engranajes rectos.

• Engranajes helicoidales.

• Engranajes diferenciales.

• Acoples mecánicos de ejes (Rígidos).

• Acoples flexibles.

• Acoples superflexibles.

Page 43: Diseño, construcción y control de un péndulo de Furuta

43

3.3 ÁRBOL DE CLASIFICACIÓN DE CONCEPTOS

Procesar Datos y Calcular Ley de Control :

Almacenar o aceptar energía:

Sensar la posición angular de las barras:

Procesar datos y calcular ley

de control

PC

Hardware externo

Matlab / Simulink

DSP

HC6812

Labview

Visual Basic

Almacenar o aceptar energía

Neumática

Hidráulica

Eléctrica

Toma en la pared

Batería

Celda solar

Page 44: Diseño, construcción y control de un péndulo de Furuta

44

Convertir energía a movimiento rotacional:

Sensar la posición angular

de las barras

Analógicos

Digitales

Encoders Absolutos

Encoders incrementales

Potenciómetros

Convertir energía a

movimiento rotacional

AC

DC

Motor DC

Servomotor

Motor AC

Servomotor

Page 45: Diseño, construcción y control de un péndulo de Furuta

45

Adquirir y acondicionar datos:

Transmitir movimiento al péndulo:

Transmitir movimiento al

péndulo

Engranajes

Acoples

Flexibles

Engranajes Rectos

Superflexibles

Rígidos

Tarjetas de Adquisición

Puertos

Puerto Paralelo

Puerto USB

PCI - 1200

Puertos de hardware externo

Instrumentación Adquirir y

acondicionar datos

Page 46: Diseño, construcción y control de un péndulo de Furuta

46

3.3.1 Refinamiento de la descomposición funcional

3.4 ESQUEMA DE COMBINACIÓN DE CONCEPTOS

Energía:

Toma de la pared

Batería

Almacenar o aceptar energía

Eléctrica

Convertir energía a

movimiento rotacional

Transmitir movimiento al

péndulo

Motor AC

Servomotor DC

Engranajes

Convertir energía a

movimiento rotacional

Transmitir movimiento al

péndulo

Energía eléctrica

Motor DC con reductor

Servomotor AC

Acople Flexible

Acople Superflexible

Acople Rígido

Page 47: Diseño, construcción y control de un péndulo de Furuta

47

Señales:

Adquirir y acondicionar

datos

Procesar datos y calcular ley

de control

Sensar la posición de las

barras

Potenciómetros

Instrumentación

Encoders Incrementales

Matlab/Simulink

Encoders absolutos

Puerto

Puerto USB

Labview

Puertos hardware externo

DSP

HC6812

Visual Basic

PCI - 1200

Page 48: Diseño, construcción y control de un péndulo de Furuta

48

Señales :

Adquirir y acondicionar

datos

Procesar datos y calcular ley

de control

Sensar la posición

angular de las barras

Potenciómetros

Instrumentación

Encoders Incrementales

Matlab/Simulink

Encoders absolutos

Puerto Paralelo

Puerto USB

Labview

Puertos de hardware externo

DSP

HC6812

Visual Basic

PCI - 1200

Page 49: Diseño, construcción y control de un péndulo de Furuta

49

Señales:

Adquirir y acondicionar

datos

Procesar datos y calcular ley

de control

Sensar la posición

angular de las

Potenciómetro

Instrumentación

Encoders incrementales

Matlab/Simulink

Encoders absolutos

Puerto Paralelo

Puerto USB

Labview

Puertos de hardware externo

DSP

HC6812

Visual Basic

PCI - 1200

Page 50: Diseño, construcción y control de un péndulo de Furuta

50

4 SELECCIÓN DE CONCEPTOS

En la figura 7 se muestran los conceptos generados por el proceso de diseño.

Figura 7. Conceptos generados para el péndulo de Furuta.

Visual Basic

Visual Basic LabView

Visual Basic

MATLAB Simulink

Motor DC

Servomotor Motor + Encoder I

Motor DC

Servomotor Motor + Encoder I

Engranajes Rectos

Engranajes Rectos

Potenciómetros Encoders Increméntales

Puerto Paralelo

Puerto Paralelo

Encoder Incremental

Encoder Incremental

EncoderAbsoluto

EncoderAbsoluto

Motor

Base Acoplable a la Mesa

Page 51: Diseño, construcción y control de un péndulo de Furuta

51

4.1 MATRIZ DE TAMIZAJE DE CONCEPTOS Tabla 10. Matriz de tamizaje de conceptos

Variantes de Conceptos Criterio de Selección A B C D E REF.

El P.I.R. es liviano. - - 0 0 + 0

El P.I.R. puede ser controlado con diferentes técnicas.

- - 0 0 + 0

El P.I.R. es relativamente sencillo de construir.

0 0 0 0 + 0

El P.I.R. es de precio accesible. 0 0 - - - 0

El P.I.R. es de fácil transporte. - - 0 0 + 0

El P.I.R. necesita poco espacio en su lugar de colocación.

0 0 0 0 + 0

Los sensores funcionan bien después de mucho uso.

- + + + + 0

El P.I.R. posee un buen rango de trabajo.

0 0 0 0 0 0

El P.I.R. es estético y elegante 0 0 0 0 0 0

Los sensores proporcionan muy buenas mediciones.

- 0 0 - 0 0

Positivos 0 1 1 1 6

Negativos 5 3 1 2 1

Iguales 5 6 8 6 3

Total -5 -2 0 -1 5

Orden 5 4 2 3 1

¿Continuar? no no si no si

Page 52: Diseño, construcción y control de un péndulo de Furuta

52

4.2 MATRIZ DE EVALUACIÓN DE CONCEPTOS

Tabla 11. Matriz de evaluación de conceptos

C E D

Criterio de Selección % de

Ponderación

NotaCriterio

Ponderado

NotaCriterio

Ponderado

NotaCriterio

Ponderado

El P.I.R. es liviano. 7 4 0.28 5 0.45 3 0.21

El P.I.R puede ser controlado con diferentes técnicas.

20

4 0.8

5 1 3 0.6

El P.I.R es relativamente sencillo de construir.

54

0.2 5 0.25 3 0.15

El P.I.R es de precio accesible.

8 2 0.16 2 0.16 4 0.32

El P.I.R. es de fácil transporte.

8 3 0.24 5 0.4 2 0.16

El P.I.R. necesita poco espacio en su lugar de colocación.

6 4 0.24

5 0.3

4 0.24

Los sensores funcionan bien después de mucho uso. 12

5 0.6

5 0.6

5 0.6

El P.I.R. posee un buen rango de trabajo.

15

5 0.75

5 0.75

5 0.75

El P.I.R. es estético y elegante

4 5 0.2

5 0.2

5 0.2

Los sensores proporcionan muy buenas mediciones.

15 5

0.75 5 0.75 5 0.75

Total 4.22 4.86 3.98

Orden 2 1 3

Continuar? no Desarrollar no

Variantes de Conceptos

Page 53: Diseño, construcción y control de un péndulo de Furuta

53

5 DISEÑO DETALLADO

En el desarrollo del sistema Péndulo Invertido Rotacional, buscando mejorar los

diseños de los competidores, cumplir con todas las necesidades y

especificaciones establecidas en la etapa de diseño conceptual, se llegaron a las

siguientes conclusiones.

• Teniendo en cuenta los criterios de selección mas importantes para el diseño,

se necesita que el sistema opere sobre un amplio rango de trabajo; para esto es

necesario que el diseño de la base permita girar libremente sobre los 360 grados

sin presentar colisiones con el lugar de colocación. En consecuencia de esto la

base debe ser alta.

• Buscando que el sistema fuera transportable, ocupara poco espacio en su

lugar de colocación, fuera liviano y estético, se llega al diseño del sistema de

sujeción. Consta de una pieza en “C” con tornillos de sujeción, idea tomada de la

generación de conceptos.

• La estética, la fácil construcción, la durabilidad y el poco peso, llevan a la

selección del material a utilizar; en este caso el material usado es platina de

DURALUMINIUM de ½” de espesor, medida estándar en el mercado.

Page 54: Diseño, construcción y control de un péndulo de Furuta

54

Figura 8. Diseño de la base y el sistema de sujeción.

• Por economía y cumplir con las especificaciones necesarias para el actuador

del sistema, se utilizó un motor Buhler existente en las instalaciones de la

universidad. La funcionalidad del motor se probó en un prototipo físico previo,

dando resultados satisfactorios a la hora de mover las barras con suficiente torque

y velocidad.

El motor posee las siguientes características, (aproximadas a las de un modelo

similar en la misma empresa).

Page 55: Diseño, construcción y control de un péndulo de Furuta

55

Tabla 12. Características del Motor.

Característica Valor Unidad Voltaje de Alimentación 0 - 24 V

Velocidad Máxima 350 rpm

Largo 60 mm

Diámetro Externo 35 mm

Diámetro del Eje 5 mm

Constante de Reducción (n) 10 -

Inercia del Motor (J) 3.2941 e-5 Kgm2

Constante Contraelectromotriz (Ke) 0.032941 V s

Constante de Torque en el Motor (Kt) 0.032941 Nm / A

Resistencia del Motor (R) 8.2 Ω (ohmios)

• En los conceptos generados se escogieron sensores absolutos para garantizar

buenas mediciones, facilidad de acondicionamiento y buen funcionamiento

después de mucho uso. En el desarrollo del sistema, se usó un sensor de marca

VISHAY el cual provee una salida eléctrica analógica sobre un rango de 360º sin

necesidad de circuitos electrónicos externos. La implementación con encoders

incrementales agregaba complejidad al problema de adquisición de señal del

mismo. Los potenciómetros presentan problemas de linealidad y funcionamiento

con cambios de temperatura.

La resolución de los sensores dada por el fabricante es menor a los 0.5 grados,

posee buenas características de temperatura al variar máximo +-1° C sobre los

–40/+70° C y permite operar a velocidad moderada (5 revs/s). La implementación

con los sensores VISHAY proporciona una solución adecuada para la aplicación.

Page 56: Diseño, construcción y control de un péndulo de Furuta

56

Figura 9. Sensor VISHAY

Fuente: Disponible en Internet: <www.isotronica.com.co>

• La transmisión de la posición angular del brazo (posición angular a la salida del

motor), se realizo con una correa dentada buscando utilizar elementos existentes

en el laboratorio de la universidad, tales que tuvieran poco backlash y no

permitieran la perdida de datos (como se podría presentar en el caso de utilizar

una correa lisa), el retraso de la señal (en caso de correas elásticas y algunos

tipos de cadenas). Además de no contar para el proyecto con un motor de doble

flecha (eje en ambos extremos), esta alternativa era una de las mas atractivas

para dar la libertad deseada (360º) a la articulación del brazo, sin agregar mas

variables al sistema tales como relaciones de diámetros (en algunos juegos de

engranajes).

• El motor Buhler tenía en su eje un juego (desajuste) bastante representativo,

además este tendría que cargar con todas las partes móviles del sistema (brazo y

péndulo), los cuales generaban en su eje flexión que en aspecto estético podría

mostrar desalineadas las partes y agregar esfuerzos innecesarios al motor. Por

esta razón se usó en el eje del motor un rodamiento de bolas que gracias a su

naturaleza y sin tener un gran tamaño librara de esfuerzos innecesarios al motor y

disminuyera el desajuste del motor alineando su eje.

Page 57: Diseño, construcción y control de un péndulo de Furuta

57

Figura 10. Disposición del Motor, Sensor y Mecanismo de transmisión.

• Una parte crítica del sistema era la articulación para el péndulo. Este segundo

grado de libertad rotacional, debe tener muy baja fricción (para que el sistema

oscile libremente) y además alojar el sensor de posición angular del péndulo, sin

afectar de forma considerable la inercia del brazo. Para tener baja fricción y para

no descargar directamente la flexión de la barra pendular sobre el eje del sensor,

se uso un rodamiento de bolas y un eje secundario para fijar el péndulo. La

transición del sensor al eje debía tener una unión rígida dentro del acople

buscando que la rotación del péndulo siempre se transmitiera al sensor. El eje

sobre el que girara el péndulo debe ser de acero o un material que no se doble

fácilmente por consecuencia al peso y a la aceleración centrípeta.

• En el desarrollo del prototipado virtual se utilizó el programa Visual Basic para

realizar simulaciones aproximadas del funcionamiento real del dispositivo, en este

programa se puede ver en 3D la funcionalidad del sistema, con ayuda de DirectX

(herramienta utilizada para la animación 3D), que en conjunto con la

Page 58: Diseño, construcción y control de un péndulo de Furuta

58

implementación de controladores en el lenguaje de Visual Basic dan una excelente

aproximación al desempeño esperado para el dispositivo diseñado.

Para aprender el manejo de Visual Basic con la herramienta de DirectX se puede

observar el tutorial de DirectX que se presenta en el ANEXO A.

El prototipo final del sistema, cumple con todos los requerimientos establecidos en

la etapa de diseño conceptual y los planos del prototipo final se adjuntan en el

ANEXO B.

Figura 11. Prototipo del Sistema.

Page 59: Diseño, construcción y control de un péndulo de Furuta

59

6. ACONDICIONAMIENTO DE SEÑALES

En este sección se muestra el acondicionamiento realizado a las señales

provenientes de los sensores. Dichos sensores se encargan de medir las

posiciones y velocidades angulares del péndulo y el brazo, necesarias para su

posterior uso en el desarrollo del control del péndulo de Furuta.

Los sensores utilizados son de la marca Vichay Spectrol. Este dispositivo

electrónico provee una salida eléctrica analógica sobre los 360° sin necesidad de

dispositivos electrónicos externos.

El voltaje arrojado por los sensores es bastante lineal, lo cual es fundamental para

un buen desempeño del controlador. En la figura 12 se muestra la salida

entregada del sensor según el ángulo girado.

Figura 12. Tensión entregada por el sensor según el ángulo girado.

Page 60: Diseño, construcción y control de un péndulo de Furuta

60

6.1 ACONDICIONAMIENTO DE LA SEÑAL PARA OBTENER EL ÁNGULO Al alimentar el sensor con una tensión de 5 voltios y medir el voltaje entregado con

un multímetro digital con respecto a la referencia del amplificador PWM (2.46 V

para efectos de implementación en el microcontrolador que actúa en la regulación

de los anchos de pulso en el amplificador) se obtiene que la tensión mínima es de

–2.28 voltios en el sensor del péndulo, –2.24 voltios en el del brazo y la tensión

máxima es de 2.37 V y 2.35 V en los sensores del péndulo y el brazo

respectivamente. Debido a que se necesita convertir el rango de voltaje a un rango

de -180 grados a 180 grados se implementa una función que realice dicha

conversión de la siguiente manera:

Figura 13. Relación entre el voltaje entregado por el sensor y el ángulo que se

necesita.

Page 61: Diseño, construcción y control de un péndulo de Furuta

61

En la figura 13 se nota claramente que la pendiente de la recta para el brazo es:

(27)

La ecuación de la recta para el brazo está dada por:

(28)

La expresión en (28) define el ángulo en grados girado por el sensor del brazo a

partir del voltaje a la salida del mismo.

Para el péndulo la ecuación de voltaje tiene una forma similar, solo que la

pendiente y el corte con el eje de ángulo cambia un poco como lo muestra (29):

(29)

Esta conversión de voltaje a ángulo en el rango de –180 a 180 se hace en razón a

que el controlador solo funciona de manera adecuada para ángulos entre –180 y

180 grados a partir de la vertical debido a que éste mal interpreta ángulos

superiores creyendo tener más error.

La conversión de ángulos anterior se da de manera tal que los ángulos en la

dirección de las manecillas del reloj a partir de la vertical son positivos y los

ángulos en la dirección contraria a las manecillas del reloj son negativos.

43.7824.235.2

360 =+

=m

31.443.78

31.443.78)24.2(43.78180

)1(1

−=

−=+=+

−=−

VoltajeBrazoelenGrados

xyxyxxmyy

483.3419.77 −= VoltajePenduloelenGrados

Page 62: Diseño, construcción y control de un péndulo de Furuta

62

La implementación en Simulink para c)onvertir el rango de voltaje a ángulo en

grados (-180 a 180) medidos a partir de la vertical se muestra a continuación:

Figura 14. Implementación en Simulink para la conversión del ángulo.

La figura 14 muestra el esquema de acondicionamiento de la señal proveniente de

los dos sensores del sistema. Para adquirir la señal de voltaje entregada por el

sensor, se utiliza un bloque de entrada analógica que accede a la tarjeta de

adquisición datos PCI-1200. Una vez acondicionada la señal se multiplica por una

ganancia de valor pi/180 para convertir el valor del ángulo de grados a radianes.

El valor de la constante en el sumador del acondicionamiento de la señal para el

péndulo, sirve para calibrar el cero del sensor en tiempo real.

6.2 ACONDICIONAMIENTO DE LA SEÑAL PARA OBTENER LA VELOCIDAD ANGULAR

Al tener acondicionada la señal de voltaje entregada por el sensor para obtener los

ángulos del péndulo y del brazo, se necesita realizar un cálculo para determinar

Page 63: Diseño, construcción y control de un péndulo de Furuta

63

las velocidades angulares de dichas partes. La obtención de las velocidades

angulares se obtiene al derivar con respecto al tiempo el ángulo girado.

Existen diversas técnicas para calcular la derivada discreta de una señal, siendo la

forma más común el método denominado Backward Euler (derivada hacia atrás). Otro método muy común es Forward Euler (derivada hacia delante).

En esta sección se compara el desempeño del método Backward Euler y un

método basado en la inversión del método de integración de Simpson.

Las funciones de transferencia discreta del derivador hacia atrás está dada por

(30)

donde F(z) es la derivada discreta y T es el periodo de muestreo.

La función de transferencia discreta del derivador fundamentado en el método

basado en la inversión del integrador de Simpson2 está dada por

(31)

La siguiente figura muestra el desempeño de cada uno de los derivadores

discretos. La señal que se está derivando es una entrada aleatoria al sistema,

lograda moviendo oscilatoriamente el brazo del dispositivo. El periodo de muestreo

utilizado es de 20ms. 2 M.A. Al-Alaoui, “Novel approach to designing digital differentiators.” En: Electron. Lett Vol. 28, No. 15 (1992); p. 1376-1378.

TzzzF 1)( −=

8T0.2679647z.99965918T1T3.7321z33)( 2

2

++−= zzH

Page 64: Diseño, construcción y control de un péndulo de Furuta

64

Figura 15. Comparación entre el desempeño de los dos derivadores discretos.

En la figura anterior la señal de color azul representa la salida del derivador hacia

atrás y la señal de color verde la salida del derivador basado en el método de

integración de Simpson.

Cabe notar que la señal de color azul presenta mayor nivel de ruido que la señal

de color verde. Una señal ruidosa afectará de manera negativa la medición de la

velocidad angular y en consecuencia a esto se escoge como derivador el método

de integración de Simpson. Es importante señalar que aunque existen métodos

para el cálculo de la derivada discreta con mejor desempeño, la implementación

de éstos resulta compleja por su tamaño y la determinación de unos parámetros

de diseño adecuados.

Page 65: Diseño, construcción y control de un péndulo de Furuta

65

Figura 16. Implementación en Simulink del acondicionamiento de las señales de

los sensores para el cálculo de las posiciones angulares y la velocidades

angulares del péndulo y el brazo.

A la salida del bloque que calcula la velocidad angular se implementó un filtro

promedio de orden 5 en razón a que experimentalmente mejoró notablemente el

comportamiento del sistema al disminuir el ruido y afinar la señal.

El filtro tiene la siguiente ecuación:

(32)

Aunque al filtrar la señal se puede presentar un ligero retraso debido a la dinámica

que aporta el filtro, resulta más apropiado que tener una señal ruidosa que pueda

afectar el cálculo posterior de la acción de control.

5)4()3()2()1()()( −+−+−+−+= kykykykykykY

Page 66: Diseño, construcción y control de un péndulo de Furuta

66

7. CONTROL DE UN PÉNDULO DE FURUTA

El objetivo de un sistema de control es que la respuesta del sistema a controlar

cumpla con determinadas especificaciones de funcionamiento estáticas y

dinámicas a pesar de las incertidumbres y perturbaciones asociadas a su

funcionamiento.

Habitualmente los sistemas de control se aplican a sistemas físicos con el mismo

número de actuadores y grados de libertad. Sin embargo estas técnicas no se

pueden aplicar directamente sobre sistemas subactuados. En este trabajo se ha

abordado el control de un sistema subactuado: el péndulo de Furuta, de manera

que se trata de controlar la posición del extremo del péndulo en su punto de

equilibrio inestable.

Para abordar el control de este sistema se debe tener en cuenta que las

ecuaciones que describen su dinámica son esencialmente de naturaleza no lineal.

Por ello, se podría realizar una linealización exacta del sistema, pero al no ser

posible se dificulta el diseño del controlador.

La forma más común para realizar el control del péndulo es la utilización de dos

controladores. El primero se utiliza para llevar el péndulo desde su posición de

equilibrio estable hasta una región cercana a su posición de equilibrio inestable,

mientras que el segundo controlador se encarga de balancear el péndulo en su

posición de equilibrio inestable.

Para el desarrollo de los dos controladores se han tenido en cuenta diferentes

estrategias de control y tipos de controlador. De este modo, para el primer

controlador se ha implementado una estrategia basada en energía que asegura la

Page 67: Diseño, construcción y control de un péndulo de Furuta

67

atracción del estado del sistema a la región cercana al origen gracias a las

propiedades pasivas del péndulo de Furuta.

En este trabajo se ha utilizado un controlador lineal basado en la realimentación

del estado y un controlador no lineal por ganancias programadas para establecer

el control alrededor del punto de equilibrio inestable, utilizando la herramienta de

Real-Time Windows Target de Matlab para realizar la implementación de control.

7.1 PUNTOS DE EQUILIBRIO DEL SISTEMA

Para Determinar los puntos de equilibrio del sistema se debe igualar a cero las

derivadas de las variables de estado y las entradas en la representación en

espacio de estados del sistema. Las variables de estado están dadas por:

(33)

La representación en variables de estado del sistema se muestra a continuación:

(34)

.

.

4

32

1

φ

φθ

θ

=

==

=

x

xx

x

...

.

...

.

4

43

2

21

φ

θ

=

=

=

=

x

xx

x

xx

Page 68: Diseño, construcción y control de un péndulo de Furuta

68

Igualando a cero las derivadas de las variables de estado se tiene que el punto de

equilibrio para las variables x2 y x4 es cero e igualando la entrada a cero se

pueden extraer los puntos de equilibrio para la variable x1.

En la ecuación de x2 punto:

(35)

Resolviendo la ecuación anterior, se tiene que los puntos de equilibrio de x1 se

encuentran en θ = 0 y θ = π radianes.

En la ecuación de x4 punto:

(36)

Al resolver la ecuación (36) se reiteran los resultados obtenidos en la ecuación

(35).

7.1.1 Estabilidad de los Puntos de Equilibrio del Sistema. Estabilidad

Asintótica: “Se dice que un estado de equilibrio Xe del sistema ),(.

txfx=

es asintóticamente estable en el sentido de Liapunov y todas las soluciones

que empiezan dentro de S(δ) convergen a Xe, sin apartarse de S(ε),

conforme t se incrementa indefinidamente.” 3

3 KATSUHIKO, Ogata. Ingeniería de Control Moderna. México: Pearson, 1998. p.898

+

++== θθθ 222

..

sin31

31sin

210 ppapapp lmlmmJglm

θθφ sincos430

..

glm ap−==

Page 69: Diseño, construcción y control de un péndulo de Furuta

69

Inestabilidad: “Se dice que un estado de equilibrio Xe es inestable si para algún

numero real ε > 0 y cualquier numero δ > 0, no importa que tan pequeño, hay un

estado X0 en S(δ) tal que la trayectoria que empieza en estos estados se aparta de

S(ε).” 3

Figura 17. (a) Estado de equilibrio estable; (b) estado de equilibrio inestable.

Fuente: Ogata K., Ingeniería de Control Moderna 3 ed. edición.

De las definiciones anteriores de estabilidad asintótica e inestabilidad se puede

concluir que el estado de equilibrio x1=0 rad. es inestable y el estado de equilibrio

x1=π rad. es asintóticamente estable.

Page 70: Diseño, construcción y control de un péndulo de Furuta

70

7.2 SWING UP En esta sección se utiliza un modelo simplificado del péndulo. En lugar del

péndulo de Furuta, se modela un péndulo adjunto a un carro lineal. La razón para

esto es la simplificación de los cálculos y la buena precisión del modelo para el

propósito.

Sea m la masa del péndulo, J el momento de inercia del péndulo con respecto al

pivote y l la distancia desde el pivote a su centro de masa. El ángulo entre la

vertical y el péndulo es θ, donde θ es positivo en el sentido de las agujas del reloj.

La aceleración de la gravedad es g y la aceleración del pivote es v. La aceleración

v es positiva si es en la dirección positiva del eje x. La ecuaciones de movimiento

para el péndulo son:

(37)

(38)

Introduciendo las normalizaciones

(39)

(40)

0cossin..

=+− θνθθ lmmglJ p

νφ =∂∂

2

2

t

pJmgl=0ω

gu ν=

Page 71: Diseño, construcción y control de un péndulo de Furuta

71

las ecuaciones de movimiento para el péndulo se pueden rescribir como

(41)

(42)

La estrategia utilizada es basada en el control por energía y es presentada en

Astrom y Furuta (1999). La idea básica es bombear energía al sistema de tal

manera que finalmente tenga suficiente energía para llegar a una región cercana

al punto de equilibrio superior. Allí, se realiza un intercambio a una ley de control

que regula y estabiliza el péndulo.

La energía del péndulo sin controlador, haciendo uso de la misma terminología

anterior, se puede expresar como:

(43)

La energía es cero cuando el péndulo se encuentra en reposo en su posición de

equilibrio inestable. La energía está normalizada con respecto a mgl.

Una ley de control propuesta en Astrom y Furuta4 (1999) es

(44)

4 ASTROM, K.J., FURUTA K. “Swinging up a Pendulum by Energy Control.” [En Línea] San Francisco, California. IFAC World Congress, 1996. [citado 17 Ene., 2004]. Disponible por Internet: < http://www.control.lth.se/~kja/furutapaper.pdf >.

θωθωθ cossin 20

20

..u−=

ugt

=∂∂

2

1cos2 2

0

2.

−+== θωθ

mglEEn

))cos()((.

0 θθsignEEksatu n −=

Page 72: Diseño, construcción y control de un péndulo de Furuta

72

E0 es la energía deseada del sistema. Los parámetros de diseño para este método

son k, E0 y los límites de saturación. En la implementación el valor de k utilizado

fue de 4.5, el valor de E0 0.3 y los límites de saturación a +-24.

Figura 18. Implementación en Simulink del controlador Swing Up

Figura 19. Diagrama de bloques en Simulink del subsistema System Energy

La ley de control presentada en (44) resulta en un swing up que hace que el

péndulo llegue hasta una región cercana a el origen. Sin embargo, queda regular y

Page 73: Diseño, construcción y control de un péndulo de Furuta

73

estabilizar el péndulo. Para realizar el intercambio entre la ley de control del swing

up y la ley de control del regulador se ha utilizado una estrategia de switcheo la

cual se explica a continuación.

El switcheo entre los dos controladores posee una zona muerta de cinco grados.

Cuando el péndulo se encuentra en una posición respecto a la vertical menor a los

+-30° el controlador swing up se apaga. Si debido a la inercia el péndulo alcanza

una posición respecto a la vertical menor a los +-25°, el controlador regulador se

activa y trata de controlar el péndulo. Si el regulador no logra estabilizar el

péndulo, éste caerá y el controlador swing up intentará llevar el péndulo

nuevamente hasta arriba.

En la figura 20 se muestra la estrategia de switcheo implementada en

Matlab/Simulink para la selección de los dos controladores.

Figura 20. Implementación en Simulink del sistema de selección de control.

Page 74: Diseño, construcción y control de un péndulo de Furuta

74

7.3 CONTROLADOR LINEAL CUADRATICO El esquema general de control por realimentación del estado utilizado se muestra

en la figura 21.

Figura 21. Control por realimentación del estado.

donde A, B y C corresponden a las matrices que forman las ecuaciones de estado

y salidas discretas:

(45)

La acción de control para regular el sistema viene dada por la siguiente ecuación:

(46)

donde K = [¨k1 k2 ... kn] es la matriz de ganancias del estado.

)()()1( kBukAxkx +=+

)()( kCxky =

)()( kKxku −=

Page 75: Diseño, construcción y control de un péndulo de Furuta

75

Para calcular la matriz K se utiliza el control lineal cuadrático, el cual calcula la

matriz de realimentación óptima tal que el sistema en lazo cerrado minimiza un

índice de desempeño cuadrático J:

(47)

Las variables de estado del sistema están dadas por la ecuación (33).

Para realizar el cálculo de la matriz de ganancias de estado es necesario tener un

modelo lineal del péndulo de Furuta debido a que el controlador por realimentación

del estado es un controlador lineal al basarse su teoría en el álgebra lineal.

La linealización del sistema alrededor del origen (x1=0, x2=0, x3=0, x4=0, u=0), se

realiza mediante el comando jacobian del Matlab. La matriz de estado y la matriz

de entrada resultante de la linealización se muestran en (48).

Tabla 13. Parámetros del sistema

Parámetros del sistema Valor Unidades

Masa del Péndulo (mp) 0.1144 Kg

Masa del Brazo (ma) 0.1773 Kg

Longitud del Péndulo (lp) 0.45 m

Longitud del Brazo (la) 0.35 m

Constante de Reducción (n) 10

Inercia del Motor (J) 3.2941 e-5 Kgm2

Constante Contraelectromotriz (Ke) 0.032941 V s

Constante de Torque en el Motor (Kt) 0.032941 Nm / A

∫ += dtrVQxxJ )'( 2

Page 76: Diseño, construcción y control de un péndulo de Furuta

76

Parámetros del sistema Valor Unidades

Resistencia del Motor (R) 8.2 Ω (ohmios)

Gravedad (g) 9.8 m / s2

Al reemplazar el valor numérico de cada variable, se obtiene la representación en

variables de estado en tiempo continuo:

(48)

Escogiendo un periodo de muestreo de 10 ms y con la ayuda de los comandos

c2d (continuo a discreto) y ssdata (coloca el modelo en espacio de estados) de

Matlab, se obtiene una representación discreta en el espacio de estados del

sistema:

(49)

Los parámetros de diseño al utilizar diseño lineal cuadrático son las matrices de

peso Q y R. Q es para usada asignar peso a los estados y R es usada para

penalizar la acción de control.

Las matrices de diseño implementadas son:

uxx

+

−−

=

73.30

35.40

23.10033.27100043.10059.640010

.

)(

037.000018.0

043.00002.0

)(

99.00001.0272.001.0154.4001.001.00164.0

514.7001.01

)1( kukx

e

kx

−−−

+

−−−−

=+

Page 77: Diseño, construcción y control de un péndulo de Furuta

77

=

25000010000004000000625

Q (50)

(51)

Este diseño arroja el vector de realimentación del estado

(52)

La figura 22 muestra el esquema de control del péndulo implementado. Para

obtener la posición del brazo y del péndulo se utiliza un bloque de entrada

analógica que accede a la tarjeta de adquisición de datos PCI-1200. Una vez se

calcula la acción de control u(k) se debe suministrar esta al actuador eléctrico del

péndulo. Para hacerlo se utiliza el bloque de salida analógica que accede a la

tarjeta de convertidotes digital-análogo (D/A).

5.0=R

8.6731]-7.6126-24.1907-[-116.3233=K

Page 78: Diseño, construcción y control de un péndulo de Furuta

78

Figura 22. Esquema RTWin del control del péndulo.

Una vez se ha desarrollado el esquema de control sólo hay que compilarlo para

obtener un esquema ejecutable en el entorno Windows. Las figuras siguientes

muestran las posiciones del péndulo y del brazo, así como las acciones de control.

Figura 23. Posición del péndulo ante el swing up

Page 79: Diseño, construcción y control de un péndulo de Furuta

79

Figura 24. Posición del brazo ante el swing up

Figura 25. Acción de control ante el swing up

En la figura 23 se puede observar como el péndulo alcanza el origen en 5

oscilaciones arrancando a partir de su posición de equilibrio estable,

aproximadamente a los 3.5 segundos. El brazo presenta un desvío máximo

Page 80: Diseño, construcción y control de un péndulo de Furuta

80

alrededor del origen aproximadamente de 3 Rad. (figura 24). y la acción de control

se encuentra acotada entre –24 y 24 voltios (figura 25).

Figura 26. Posición del péndulo ante el controlador lineal cuadrático.

Figura 27. Posición del brazo ante el controlador lineal cuadrático.

Page 81: Diseño, construcción y control de un péndulo de Furuta

81

Figura 28. Acción de control ante el controlador lineal cuadrático.

Como se puede observar en la figura 26, la posición del péndulo se mantiene

alrededor del origen con una oscilación muy pequeña (alrededor de 0.1 rad). La

posición del brazo presenta una oscilación alrededor del origen aproximadamente

de 0.8 Rad. (figura 27), pero dicha oscilación se debe a que éste es el elemento

actuado que se debe encargar de mantener vertical al péndulo. La acción de

control que se debe suministar al actuador está acotada entre –24 y 24 voltios

(figura 28).

Figura 29. Posición del péndulo ante perturbaciones con el LQR.

Page 82: Diseño, construcción y control de un péndulo de Furuta

82

Figura 30. Posición del brazo ante perturbaciones con el LQR.

Figura 31. Acción de control ante perturbaciones con el LQR.

Para analizar el comportamiento del sistema ante perturbaciones se ha realizado

una nueva ejecución, en la cual se sacó el sistema de su equilibrio (aplicando una

Page 83: Diseño, construcción y control de un péndulo de Furuta

83

fuerza en el extremo del péndulo) en 3 instantes (en t=14s., t=21s., y t=30s.), Tal

como se puede observar en las figuras 29, 30 y 31, el sistema es capaz de

mantener el equilibrio a pesar que las perturbaciones sacaron el péndulo en 0.25

radianes. Para ello el brazo se tiene que mover hasta los 2.2 radianes

(aproximadamente) para que el péndulo recupere el equilibrio.

7.4 CONTROLADOR GAIN SCHEDULING

“Gain Scheduling es un intento por aplicar la avanzada metodología de control

lineal al control de sistemas no lineales. Fue originalmente desarrollada para el

control de trayectoria de aeronaves. La idea de gain-scheduling es seleccionar

un número de puntos de operación el cual cubre el rango de operación del

sistema. Entonces, en cada uno de estos puntos, el diseñador hace una

aproximación lineal invariante en el tiempo a la dinámica de la planta y diseña un

controlador lineal para cada planta linealizada. Entre los puntos de operación, los

parámetros de los compensadores son interpolados o scheduled, debido a esto

resulta un compensador global. Gain scheduling es conceptualmente simple, y, en

efecto, prácticamente útil para numerosas aplicaciones. El problema principal con

gain scheduling es que posee limitadas garantías teóricas de estabilidad en

operación no lineal. Otro problema es la implementación computacional debido a

la necesidad de computar varios controladores lineales.”5

La acción de control para regular el sistema viene dada por la siguiente ecuación:

(53)

5 SLOTINE, J.J. LI, W. Applied Nonlinear Control. Englewood Cliffs, New Jersey: Prentice Hall, 1991. p.205.

4)(43)(32)(21)(1)( xnPxnPxnPxnPku −−−−=

Page 84: Diseño, construcción y control de un péndulo de Furuta

84

Donde n es el grado del polinomio y P1, P2, P3 y P4 son polinomios.

En la tabla 14 se muestran los puntos en los cuales el sistema fue linealizado, las

matrices Q y las ganancias R con las cuales se calcularon las ganancias de

realimentación del estado de los compensadores lineales.

Tabla 14. Parámetros de los compensadores lineales en cada uno de los puntos

deseados.

Puntos de linealización

para el estado X1.

Q R K1 K2 K3 K4

-30°

250000100000040000005917

0.4

-117.55

-26.14

-7.98

-9.94

-25°

250000100000040000004444

0.4

-116.77

-25.93

-7.99

-9.73

-20°

250000100000040000002500

0.4

-114.51

-25.65

-8.0

-9.46

-15°

250000100000040000002500

0.5

-114.42

-24.46

-7.61

-8.97

-10°

250000100000040000001600

0.5

-115.60

-24.33

-7.61

-8.82

Page 85: Diseño, construcción y control de un péndulo de Furuta

85

Puntos de linealización

para el estado X1.

Q R K1 K2 K3 K4

-5°

25000010000004000000816

0.5

-115.89

-24.22

-7.61

-8.7

25000010000004000000625

0.5

-116.32

-24.2

-7.61

-8.68

25000010000004000000816

0.5

-115.89

-24.22

-7.61

-8.7

10°

250000100000040000001600

0.5

-115.60

-24.33

-7.61

-8.82

15°

250000100000040000002500

0.5

-114.42

-24.46

-7.61

-8.97

20°

250000100000040000002500

0.4

-114.51

-25.65

-8.0

-9.46

25°

250000100000040000004444

0.4

-116.77

-25.93

-7.99

-9.73

30°

250000100000040000005917

0.4

-117.55

-26.14

-7.98

-9.94

Cabe tener en cuenta que aunque en la tabla anterior no se muestran los valores

asignados en la linealización para las variables de estado x2, x3 y x4, fueron

colocados en ceros.

Page 86: Diseño, construcción y control de un péndulo de Furuta

86

Para obtener cada unos de los polinomios que ajusten las respectivas ganancias,

se utilizó el comando polyfit proporcionado por el Matlab. El grado de los

polinomios escogido para su cálculo fue 8.

La expresión general para cada uno de los polinomios es:

(54)

donde c8, c7, c6, c5, c4, c3, c2, c1 y c0 son los coeficientes del polinomio.

Los coeficientes de cada uno de los polinomios obtenidos se muestran en la

siguiente tabla:

Tabla 15. Coeficientes de los Polinomios para el controlador gain scheduling.

P(8) c8 c7 c6 c5 c4 c3 c2 c1 c0

P1(8) 9896.62 4.01e-11 -4296.42 -2.21e-11 354.55 3.21e-12 16.79 -9.58e-14 -116.18

P2(8) -4537.16 1.58e-11 2682.88 -7.35e-12 -479.52 9.42e-13 16.64 -2.44e-14 -24.31

P3(8) -2028.46 4.65e-12 1177.03 -2.22e-12 -207.43 3.04e-13 9.05 -8.25e-15 -7.66

P4(8) -1047.10 7.51e-12 646.15 -3.65e-12 -117.3 4.91e-13 0.67 -1.37e-14 -8.7

Las siguientes figuras muestran las gráficas de los puntos de linealización vs. Las

ganancias de realimentación del estado y los polinomios calculados.

01112131415161718)8( 2345678 cxcxcxcxcxcxcxcxcP ++++++++=

Page 87: Diseño, construcción y control de un péndulo de Furuta

87

Figura 32. Comparación entre los valores de K1 y el polinomio calculado.

Figura 33. Comparación entre los valores de K2 y el polinomio calculado.

Page 88: Diseño, construcción y control de un péndulo de Furuta

88

Figura 34. Comparación entre los valores de K3 y el polinomio calculado.

Figura 35. Comparación entre los valores de K4 y el polinomio calculado.

De las figuras anteriores se puede apreciar la buena capacidad de interpolación de

cada uno de los polinomios entre los puntos de operación del sistema.

Page 89: Diseño, construcción y control de un péndulo de Furuta

89

La figura 36 muestra la implementación en Matlab/Simulink del controlador gain scheduling. Cada uno de los polinomios es evaluado cada periodo de muestreo

(10 ms) con los valores de la variable de estado X1 (ángulo del péndulo) y luego

multiplicado por la variable de estado que le corresponde.

Figura 36. Implementación en Matlab/Simulink del controlador gain scheduling

Las siguientes figuras muestran las posiciones angulares del péndulo y el brazo,

así como las acciones de control.

Page 90: Diseño, construcción y control de un péndulo de Furuta

90

Figura 37. Posición del péndulo ante el controlador Gain Scheduling.

Figura 38. Posición del brazo ante el controlador Gain Scheduling.

Page 91: Diseño, construcción y control de un péndulo de Furuta

91

Figura 39. Acción de control ante el controlador Gain Scheduling.

Como se puede observar en la figura 37, la posición del péndulo se mantiene

alrededor del origen con una oscilación muy pequeña (alrededor de 0.08 rad). La

posición del brazo presenta una oscilación alrededor del origen aproximadamente

de 0.8 Rad. (figura 38), pero dicha oscilación se debe a que éste es el elemento

actuado que se debe encargar de mantener vertical al péndulo. La acción de

control que se debe suministar al actuador está acotada entre –24 y 24 voltios

(figura 39).

Page 92: Diseño, construcción y control de un péndulo de Furuta

92

Figura 40. Posición del péndulo ante el gain scheduling con perturbaciones.

Figura 41. Posición del brazo ante el gain scheduling con perturbaciones.

Page 93: Diseño, construcción y control de un péndulo de Furuta

93

Figura 42. Acción de control ante el gain scheduling con perturbaciones.

Para analizar el comportamiento del sistema ante perturbaciones se ha realizado

una nueva ejecución en la cual se sacó el sistema de su equilibrio (aplicando una

fuerza en el extremo del péndulo) en 3 instantes (en t=5s., t=14s., y t=38s.), Tal

como se puede observar en las figuras 40, 41 y 42, el sistema es capaz de

mantener el equilibrio a pesar que las perturbaciones sacaron el péndulo en 0.48

radianes. Para ello el brazo se tiene que mover hasta los 2.1 radianes

(aproximadamente) para que el péndulo recupere el equilibrio.

Page 94: Diseño, construcción y control de un péndulo de Furuta

94

8. CONCLUSIONES

Las simulaciones por computador permiten tener una aproximación del

comportamiento real de un sistema físico facilitando el diseño de sistemas de

control y análisis de desempeño para luego ser implementados en el sistema real.

La metodología para el diseño de sistemas mecatrónicos optimiza el proceso de

desarrollo de un producto debido a el ahorro de tiempo y esfuerzo de los

diseñadores, brinda una perspectiva multidisciplinaria del problema, logra el mejor

diseño teniendo en cuenta restricciones de costos y proporciona un diseño

simultáneo de los componentes que forman el sistema.

La teoría de control lineal es una buena opción para el diseño de sistemas de

control no lineales en determinados rangos de operación, su implementación es

sencilla y su desempeño puede ser adecuado dependiendo de las necesidades

del diseñador.

La representación de Denavit-Hartenberg es una herramienta de gran ayuda para

el modelado de sistemas físicos, a razón de que brinda un método algorítmico

para la obtención de un vector de posición para cualquier punto del sistema, el

cual posteriormente se usará en el método de Lagrange para obtener el modelo

matemático que describe el comportamiento del sistema.

Page 95: Diseño, construcción y control de un péndulo de Furuta

95

La existencia de perturbaciones inherentes a los sistemas reales como

incertidumbres en los parámetros o en la dinámica del modelo, ruidos, desgastes

mecánicos o fallos en los actuadores pueden ser contrarrestadas diseñando

sistemas de control robustos.

El entorno de tiempo real proporcionado por el programa Matlab representa una

poderosa herramienta para el control de robots de manera muy sencilla y

amigable. La flexibilidad de este entorno permite implementar diferentes tipos de

controladores rápidamente para su análisis.

El diseño de un control no lineal por ganancias programadas o gain scheduling

permite tener un mayor rango de operación en comparación con el controlador

lineal por realimentación del estado y presenta mejor respuesta ante

perturbaciones. El inconveniente al implementar este controlador es la necesidad

de un sistema con alta capacidad de cómputo dependiendo del nivel de

complejidad requerido para el cálculo de la acción de control.

El método por control de energía (swing up) para excitar el sistema hasta una

región cercana al punto de operación deseado, se utilizó debido a que resulta

imposible llevar el péndulo hasta su posición de equilibrio inestable desde su

posición de equilibrio estable por la naturaleza no lineal del dispositivo.

El diseño de controladores considerando posibles fallas en los actuadores

(subactuado), representa una gran ventaja respecto a otras técnicas de control,

Page 96: Diseño, construcción y control de un péndulo de Furuta

96

debido a que el sistema seguirá operando (si es posible) de forma correcta hasta

que el problema sea solucionado.

Page 97: Diseño, construcción y control de un péndulo de Furuta

97

BIBLIOGRAFIA

ÅKESSON, J. “Safe Manual Control of Unstable Systems”. [En Línea] Department

of Automatic Control, Lund Institute of Technology, Lund, Sweden. 2000. [citado 17

Ene., 2004]. Disponible por Internet:

<http://www.control.lth.se/publications/msc/2000/documents/5646.pdf>.

ASTROM, K.J., FURUTA K. “Swinging up a Pendulum by Energy Control.” [En

Línea] San Francisco, California. IFAC World Congress, 1996. [citado 17 Ene.,

2004]. Disponible por Internet: <http://www.control.lth.se/~kja/furutapaper.pdf >.

BURDEN, R.L., FAIRES, D. Análisis Numérico. México : Grupo Editorial

Iberoamericana, 1985. 721p.

CRAIG, K., AWTAR, S. “Rotary Inverted Pendulum Dynamic System

Investigation”. [En Línea] Rensselaer Polytechnic Institute, Troy, NY12180. USA.

[citado 29 Feb., 2004]. Disponible por Internet:

<http://www.mit.edu/people/shorya/MS/craig_awtar_1.pdf>.

GAFVERT, M. “Modelling the Furuta Pendulum.” [En Línea] Department of

Automatic Control, Lund Institute of Technology, Lund, Sweden. 1998. [citado 17

Ene., 2004]. Disponible por Internet:

<http://web.njit.edu/~sxn5261/gafvert_modelling_furuta.pdf>.

Page 98: Diseño, construcción y control de un péndulo de Furuta

98

GUREWICH, Nathan, GUREWICH, Ori. Aprendiendo Visual Basic 5 en 21 Días.

México : Prentice Hall, 1998. 769p.

HOXLEY, J. “DirectXGraphics for Visual Basic.” [En Línea]. 2002. [citado 30 Mar.,

2004]. Disponible por Internet: <http://www.DirectX4VB.com>.

KATSUHIKO, Ogata. Ingeniería de Control Moderna. 3 ed. México : Pearson,

1998. 997p.

KATSUHIKO, Ogata. Sistemas de Control en Tiempo Discreto. 2 ed. México :

Pearson, 1996. 745p.

LUNG, W. T. Robot Analysis. United States of America : Wiley Interscience, 1999.

505p.

MENDEZ, P. A. “Notas de Clase Diseño Mecatrónico 1 y 2”. [En Línea] Servidor de

Ingenierías. Universidad Autónoma de Occidente. Cali, Colombia. 2002. [citado 15

Sep., 2003]. Disponible por Internet: <ftp://descargasi:[email protected]>.

SLOTINE, J.J., LI, W. Applied Nonlinear Control. Englewood Cliffs, New Jersey :

Prentice Hall, 1991. 461p.

Page 99: Diseño, construcción y control de un péndulo de Furuta

99

VALERA, A., VALLES, M., TORNERO, J. “Real Time Robot Control

Implementation with Matlab/Simulink”, Telematics Applicaction in Automation and

Robotics, Ed. Pergamon, ISBN 0 08 043856 3. 2001.

Page 100: Diseño, construcción y control de un péndulo de Furuta

100

Anexo A (Tutorial de directx para el desarrollo de simulaciones y aplicaciones 3D)

Objetivo General

• Implementar un tutorial de DirectX a manera de brindar una guía de trabajo

para que cualquier persona pueda manipular esta herramienta y poder

realizar simulaciones en 3D de cualquier sistema sencillo.

Objetivos Específicos

• Aprender a desarrollar una aplicación en DirectX realizando un ejemplo

paso a paso.

• Desarrollar conocimientos y destrezas en la manipulación de la herramienta

DirectX por medio de Visual Basic.

• Aprender a crear las piezas con una extensión (.X) para utilizarlas en una

aplicación DirectX.

• Manipular algunas de las herramientas de visualización y animación con

que cuenta DirectX.

Page 101: Diseño, construcción y control de un péndulo de Furuta

101

INTRODUCCIÓN

En la actualidad para la realización de cualquier tipo de proyecto, las simulaciones

asistidas por computador se han convertido en una gran herramienta para

ingenieros y diseñadores entre otros, ya que por medio de prototipos virtuales que

se asemejen al máximo a la realidad es posible representar el comportamiento de

cualquier sistema, en aspectos tales como: eficiencia, posibles fallas,

funcionamiento ante determinadas condiciones internas y externas, entre otros.

Direct X, es una herramienta que permite manipular imágenes en 3D y Visual Basic es un programa con el que se pueden realizar animaciones en ambientes

virtuales de sistemas y mecanismos por medio de un código de programación,

además permite crear la interfaz de comunicación entre las piezas de la planta

física y el controlador implementado; gracias a su compatibilidad.

Page 102: Diseño, construcción y control de un péndulo de Furuta

102

TUTORIAL DE DIRECTX PARA EL DESARROLLO DE SIMULACIONES Y APLICACIONES 3D

Interfaz Gráfica.

Generalmente al elaborar cualquier tipo de proyecto se diseña una interfaz grafica

de manera que se tenga una idea de que funciones va a realizar dicho sistema,

así como los botones que se utilizaran, los datos que necesita y los que entrega.

Una forma mas fácil de comunicar a los demás el funcionamiento de un sistema

es mostrando su desempeño en el tiempo, sus capacidades, limitaciones y rangos

de trabajo. DirectX es una potente herramienta para que ingenieros y diseñadores

muestren de una manera ordenada y practica, el desarrollo de sus creaciones. En

las aplicaciones creadas en DirectX se puede ver el funcionamiento esperado de

un producto, su estética, diseño y en algunas ocasiones señales y datos que

intervienen en él.

Page 103: Diseño, construcción y control de un péndulo de Furuta

103

Figura 1. Interfaz Grafica del Sistema Péndulo Invertido Rotacional.

Page 104: Diseño, construcción y control de un péndulo de Furuta

104

DESARROLLO DEL PROGRAMA

Cuando se desea trabajar con la herramienta de DirectX desde el entorno de

Visual Basic, se deben tener en cuenta algunos puntos para poder correr un

programa de la manera correcta sin que este presente errores e incoherencias en

el tipo de variables que se usan con DirectX.

Para empezar, debemos abrir un proyecto nuevo en Visual Basic (EXE estándar) y

como primera medida, ir al menú Proyecto y seleccionar Referencias... ; en la lista

se debe marcar el check box de "DirectX 7 for Visual Basic Type Library” y pulsar

OK.

Figura 2. Referencia para Utilizar DirectX en un Proyecto.

Para seguir con este tutorial es indispensable el manejo de un control ActiveX para

el manejo de DirectX llamado RMControl, el cual será el objeto que contenga la

visualización y sobre el cual se manipulen las propiedades de la animación. Al ser

un componente, este se puede agregar yendo al menú Proyecto y seleccionando

Page 105: Diseño, construcción y control de un péndulo de Furuta

105

Componentes... o con la combinación (Ctrl. + T) allí se examina la ubicación en

donde tengamos este componente y se selecciona el “rmcontrol.ocx” y se escoge

para ser agregado al proyecto.

Figura 3. Control ActiveX para utilizar RMCanvas.

La utilización del control ActiveX (rmcontrol.ocx) disminuye en una gran parte los

comandos de inicialización para los objetos en DirectX y además por ser un objeto

contenedor, toda la manipulación de cámaras, colores, texturas, inserción de

nuevos objetos, etc, se harán directamente sobre el objeto mencionado de tipo

RMCanvas.

Cabe decir a esta altura del tutorial que la manipulación de DirectX se hará en

modo de ventana y es necesario informar a quien este interesado, que el manejo

con pantalla completa, tiene una manipulación totalmente distinta que no se tendrá

en cuenta en este tutorial.

Para entrar en materia de una vez, después de haber realizado los pasos

anteriores y tener todos los componentes y referencias bien establecidas y listas,

Page 106: Diseño, construcción y control de un péndulo de Furuta

106

se puede iniciar el desarrollo en DirectX. En el formulario principal donde se

efectuara la animación, (Form1 por defecto) se debe insertar un objeto RMCanvas

que se encuentra en la barra general al lado izquierdo del entorno de diseño (ver

parte izquierda de la figura 4), este objeto debe ser tan grande como se quiera que

sea la ventana donde se visualizaran los objetos 3D. Este objeto debe llamarse de

modo que lo identifiquemos claramente en cualquier parte y en cualquier momento

del programa, el nombre que utilizaremos en este caso es el de “espacio” tratando

de recordar que este será nuestro espacio de trabajo. (Para cambiar el nombre del

objeto, lo seleccionamos y en la barra de propiedades al lado derecho de la

ventana de diseño, cambiamos el campo nombre, RMCanvas por espacio; Parte

derecha de la Figura 4).

Figura 4. Ubicación del componente RMCanvas y de la propiedad Nombre.

Page 107: Diseño, construcción y control de un péndulo de Furuta

107

De ahora en adelante se mostrara el código que se debe utilizar para la

inicialización de DirectX en el proyecto y para la declaración de todas las variables

que se han de utilizar en la animación. Entre este grupo de variables para la

animación, se puede observar que todas son de tipo publicas (Public), por lo tanto

desde cualquier lugar del programa se puede acceder a ellas, además para entrar

en el modo de programación en 3D con DirectX hay tres tipos de objetos básicos;

• El tipo Direct3DRMFrame3 que son los objetos que contienen todas las

propiedades de ubicación y jerarquías de las piezas que se utilizaran en la

animación.

• El tipo Direct3DRMMeshBuilder3 que son los que contienen las texturas

de las piezas, las relaciones de geometría, las propiedades de iluminación,

material, sombras, etc.

• Y el tipo RMCanvas que se menciono anteriormente, el cual presenta una

gran cantidad de propiedades para utilizar en la animación, tales como,

luces ambientales, resolución, ubicación de cámaras, color del fondo,

sombras, renderizado y todos los eventos relacionados a un objeto en el

entorno Visual Basic, tales como, MouseDown, MouseUp, MouseMove, etc.

La carga de piezas, las configuraciones de las cámaras, los colores de las luces,

etc se hacen en el procedimiento Form_Load(), pero las características se pueden

cambiar en cualquier parte del programa ya que todas las variables son publicas.

Teniendo claras las características y tipos de los objetos anteriormente

mencionados, se puede iniciar la programación. Unas características interesantes

del objeto “espacio” es el color de fondo y las luces; para modificar el fondo, se

utiliza la siguiente línea de código:

Page 108: Diseño, construcción y control de un péndulo de Furuta

108

espacio.SceneFrame.SetSceneBackgroundRGB R, G, B (1)

Donde R, G, y B son valores entre 0 y 255 que se escogen dependiendo del color

que se quiera colocar en el fondo, siendo estos valores una combinación de rojo,

verde y azul. Por ejemplo:

Figura 5. Combinación RGB para los colores del fondo.

Color R G B

Rojo 255 0 0

Azul 0 0 255

Verde 0 255 0

Blanco 255 255 255

Negro 0 0 0

Violeta 0.4 0.3 0.8

Para modificar las luces, se utiliza una función similar a la anterior en lo que tiene

que ver al manejo de colores:

espacio.AmbientLight.SetColorRGB R, G, B (2)

Después de cambiar el fondo y las luces, se pueden importar las piezas que

realizaran la animación, para esto, en las declaraciones generales del Form1

(parte superior del código) se debe crear un objeto contenedor de todos los demás

que se vallan a importar, por eso, este es uno de los objetos mas importantes ya

que es el que tendrá la mayor jerarquía o en otras palabras será el que represente

Page 109: Diseño, construcción y control de un péndulo de Furuta

109

a todos los demás. Este objeto se puede llamar de cualquier manera, en este

tutorial se escogió el nombre de “todo” ya que será el que contenga todas las

piezas del sistema; el objeto todo se declara de la siguiente manera:

Public todo As Direct3DRMFrame3 (3)

Para importar los objetos que se quieren agregar en la animación, se deben tener

en cuenta dos cosas: que los archivos a importarse tengan la extensión .X para

que visual Basic con las instrucciones de DirectX pueda cargar las propiedades de

materiales, texturas y las mallas (propiedades geométricas) que tienen

establecidas las piezas y además se debe garantizar que en el archivo solo exista

una sola pieza. Para observar las piezas .X se puede utilizar el programa 3D

exploration de acceso publico el cual muestra todas las características de un

archivo con esta extensión.

Para Recordar: Se crea en el Form1 del proyecto un objeto de tipo RMCanvas el

cual se nombra “espacio”, el paso siguiente es declarar en la parte general del

Form1 los objetos que se deben utilizar; al cargar una pieza (*.X). Para esto se

deben declarar dos objetos:

Public Nombre_de_la_Pieza As Direct3DRMFrame3 (4)

Public Nombre_de_la_Pieza _m As Direct3DRMMeshBuilder3

Como se menciono anteriormente, Direct3DRMFrame3 contiene las propiedades

de ubicación (principalmente) y Direct3DRMMeshBuilder3 contiene las

propiedades geométricas.

Si se ha llegado a manejar el entorno Visual Basic, se sabe que para referirse a un

objeto o a una variable en todas las líneas de código se utiliza:

Page 110: Diseño, construcción y control de un péndulo de Furuta

110

With Nombre_de_la_Variable (5)

End With

Y en la mitad de la instrucción (5) se escriben las líneas de código que tengan que

ver con la variable.

En el procedimiento Form_Load se usa lo anterior para referirse a “espacio” e

importar las piezas que requiera la animación, así:

With espacio

Set todo = .D3DRM.CreateFrame(.SceneFrame) . StartWindowed

(6) Set Base_en_I = .D3DRM.CreateFrame(.SceneFrame)

Set Base_en_I_m = .D3DRM.CreateMeshBuilder() Base_en_I_m.LoadFromFile App.Path + "\Base_en_I.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing

Base_en_I.AddVisual Base_en_I_m

End With

La primera instrucción dentro del método anterior (Set Base_en_I =

.D3DRM.CreateFrame(.SceneFrame)), es para ligar el objeto que se creo anteriormente

(todo) al “espacio”.

Como menciono hace un momento, el objeto “todo” es aquel de donde se

derivaran los demás, por lo tanto este tiene que estar directamente conectado con

el espacio total de trabajo para después ligar por medio de jerarquías los objetos

insertados a otros o a “todo”.

Page 111: Diseño, construcción y control de un péndulo de Furuta

111

La línea (.StartWindowed) configura el espacio de trabajo a trabajar en ventana

como se tenía establecido.

Las 4 líneas de código siguientes son la forma de importar un archivo .X a la

animación que se esta realizando, las letras en azul son el nombre de la variable

en la cual se quiere importar el archivo. En este caso se quiere crear un objeto

llamado Base_en_I con las propiedades que contiene el archivo (en rojo)

Base_en_I.x, es claro que entre comillas se escribe la ruta donde se encuentra

ubicado el archivo; en este caso, el archivo se debe encontrar en la misma carpeta

donde se creo el proyecto. Es un poco imperceptible que para importar un archivo

.X a la animación se necesiten 2 variables, pero hay que recordar que se necesita

una variable para la ubicación y otra para las propiedades de geometría, que en

este caso se llama Base_en_I_m.

Hasta ahora lo que se lleva de código debe mostrar lo siguiente:

Figura 6. Presentación de la Primera pieza en la Animación.

Page 112: Diseño, construcción y control de un péndulo de Furuta

112

Y el código implementado debe ser similar al siguiente:

Public todo As Direct3DRMFrame3 'objeto principal del cual se derivan todos. '---------declaración de piezas--------------------- Public Base_en_I As Direct3DRMFrame3

Public Base_en_I_m As Direct3DRMMeshBuilder3 Private Sub Form_Load()

espacio.SceneFrame.SetSceneBackgroundRGB 0.4, 0.3, 0.8 'color de fondo

espacio.AmbientLight.SetColorRGB 100, 0, 0 'color de luz ambiental (7) With espacio

Set todo = .D3DRM.CreateFrame(.SceneFrame) .StartWindowed

Set Base_en_I = .D3DRM.CreateFrame(.SceneFrame)

Set Base_en_I_m = .D3DRM.CreateMeshBuilder() Base_en_I_m.LoadFromFile App.Path + "\Base_en_I.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing Base_en_I.AddVisual Base_en_I_m

End With End Sub

Para observar la pieza importada de una mejor manera, se puede tener en cuenta

otro tipo de propiedad que presenta DirectX; el manejo de cámaras. Si se mira un

poco atrás, el objeto que representa DirectX en esta aplicación es el objeto

“espacio” (de tipo RMCanvas) y este por defecto posee las cámaras, solamente se

deben manipular (todas las instrucciones se colocan dentro del With). La

instrucción para realizar los movimientos de cámara es la siguiente:

espacio.CameraFrame.SetPosition Nothing, X, Y, Z (8)

Page 113: Diseño, construcción y control de un péndulo de Furuta

113

Siendo X, Y, Z las coordenadas donde se quiere colocar la cámara, (Z entrando en

la pantalla); de este modo si se le da un valor de –100 a Z en la instrucción, la

pieza se vera más pequeña:

Figura 7. Manejo de la cámara en el eje Z.

Al dar coordenadas a la cámara en X (eje horizontal) e Y (eje vertical) se puede

mover el foco de la cámara como se requiera.

En este punto del programa es indispensable mencionar las jerarquías, su uso,

implementación y razón. Estas propiedades se utilizan en DirectX para ensamblar

unas piezas con otras y para generar las rotaciones y traslaciones de varias

piezas a la vez. Observe un ejemplo sencillo.

Page 114: Diseño, construcción y control de un péndulo de Furuta

114

Figura 8. Ejemplo de Jerarquías.

Las articulaciones de la extremidad superior derecha y sus hueso

las partes del sistema, así, se conoce que cuando se mueve

mueven todas las partes de la extremidad (el brazo, el codo,

muñeca y el puño), por lo tanto el hombro será el padre de todos l

hombro será el padre del brazo, este a su vez será el padre del co

el padre del antebrazo, el antebrazo será el padre de la muñeca y

el padre de la mano. Viéndolo de otra manera, la mano será hija

muñeca será hija del antebrazo y así sucesivamente hasta llegar a

Esta es la forma de establecer las jerarquías de un sistema, y e

péndulo invertido rotacional las jerarquías se establecen así:

Hombro

Brazo

An

Mano

Muñeca

tebrazo

Codo

s,

e

o

d

l

se

l

n

representarían

el hombro, se

l antebrazo, la

s demás. Así el

o, el codo será

a muñeca será

la muñeca, la

hombro.

el ejemplo del

Page 115: Diseño, construcción y control de un péndulo de Furuta

115

Figura 9. Jerarquías en el Péndulo Invertido Rotacional.

En la figura 9, la Barra vertical es hija de Acople_P, Acople_P es hijo de Barra

Horizontal, Barra Horizontal es Hija de Acople_B, Acople_B es hijo del Motor, El

Motor es hijo de la Base en L, la base en L es hija de la Base en I y la Base en C

también es hija de la Base en I. En DirectX para agregar las jerarquías se usa la

siguiente instrucción (9):

Padre.AddChild Hijo (9)

Y así, sí se mueve o rota la pieza Padre, su hijo se desplazara o girara con ella.

Con el concepto de jerarquías claro, se pueden importar todas las piezas a la

ventana de animación (se sugiere que se haga 1 a 1) para ensamblarlas y dejar

listo el modelo en 3D del sistema. La primera jerarquía que se debe establecer es

la de “todo” (objeto contenedor de todo el ensamble) y la pieza con mayor

jerarquía en el ensamble. En el ejemplo del péndulo la pieza con mayor jerarquía

es la Base en I. La línea a agregar en el código es la siguiente (10):

Barra Vertical

Base en L

Base en C

Acople_B

Motor

Base en I

Barra Horizontal Acople_P

Page 116: Diseño, construcción y control de un péndulo de Furuta

116

todo.AddChild Base_en_I (10)

Para agregar la segunda pieza que hace parte del sistema (Base en C) se usan

las mismas instrucciones que para la base en I; primero se declaran en la parte

superior del código,

Public Base_en_C As Direct3DRMFrame3 (11) Public Base_en_C_m As Direct3DRMMeshBuilder3

y después se importa el archivo correspondiente (.X) en el procedimiento

Form_Load pero sin olvidar que se hace dentro del With del objeto “espacio”

Set Base_en_C = .D3DRM.CreateFrame(.SceneFrame)

Set Base_en_C_m = .D3DRM.CreateMeshBuilder() (12)

Base_en_C_m.LoadFromFile App.Path + "\Base_en_C.x", 0,D3DRMLOAD_FROMFILE,Nothing, Nothing Base_en_C.AddVisual Base_en_C_m

Figura 10. Vista de las dos primeras piezas Importadas en la animación.

Page 117: Diseño, construcción y control de un péndulo de Furuta

117

Para observar el modelo en 3D las jerarquías de todas las piezas importadas ya

deben estar establecidas, de esta forma cada que importemos una pieza

debemos establecer su jerarquía (13). Para la pieza agregada (Base_en_C) la

jerarquía es la siguiente:

Base_en_I.AddChild Base_en_C (13)

De la figura 10 se puede observar que la Base en C no se encuentra en la

posición adecuada por lo que es necesario moverla solo en –Y y en –X

(aparentemente) por medio de la instrucción (14)

Pieza_a_Mover.SetPosition Obj_Referencia, X, Y, Z (14)

Y específicamente en el ejemplo:

Base_en_C.SetPosition todo, -6.2, -25.2, 0 (15)

Permitiendo de esta manera que las piezas queden bien ubicadas.

NOTA: el posicionamiento de las piezas se debe realizar una línea antes de

establecer las jerarquías, para obtener buenos resultados.

Page 118: Diseño, construcción y control de un péndulo de Furuta

118

Figura 11. Ubicación adecuada de la Base en C

Hasta ahora el código implementado debe ser similar al siguiente:

___________Parte 1_______________________________________________________________________________

Public todo As Direct3DRMFrame3 'objeto principal del cual se derivan todos. '---------declaración de piezas--------------------- Public Base_en_I As Direct3DRMFrame3 'objeto 1 Public Base_en_I_m As Direct3DRMMeshBuilder3 Public Base_en_C As Direct3DRMFrame3 'objeto 2 Public Base_en_C_m As Direct3DRMMeshBuilder3

(16) Private Sub Form_Load()

espacio.SceneFrame.SetSceneBackgroundRGB 0.4, 0.3, 0.8 'color de fondo espacio.AmbientLight.SetColorRGB 100, 0, 0 'color de luz ambiental

With espacio

Set todo = .D3DRM.CreateFrame(.SceneFrame) .StartWindowed

Page 119: Diseño, construcción y control de un péndulo de Furuta

119

___________Parte 2_______________________________________________________________________________

Set Base_en_I = .D3DRM.CreateFrame(.SceneFrame) Set Base_en_I_m = .D3DRM.CreateMeshBuilder() Base_en_I_m.LoadFromFile App.Path + "\Base_en_I.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing Base_en_I.AddVisual Base_en_I_m

Set Base_en_C = .D3DRM.CreateFrame(.SceneFrame) Set Base_en_C_m = .D3DRM.CreateMeshBuilder() Base_en_C_m.LoadFromFile App.Path + "\Base_en_C.x", 0,D3DRMLOAD_FROMFILE,Nothing, Nothing Base_en_C.AddVisual Base_en_C_m

___________Parte3_______________________________________________________________________________

Base_en_C.SetPosition todo, -6.2, -25.2, 0 ___________Parte4_______________________________________________________________________________

todo.AddChild Base_en_I Base_en_I.AddChild Base_en_C

___________Parte5_______________________________________________________________________________ espacio.CameraFrame.SetPosition Nothing, 0, 0, -100 'ubic. de la cámara

End With End Sub

En la parte superior del código (parte 1) se encuentran las declaraciones

generales; en la parte 2 el llamado a las piezas (importar el archivo) en la parte 3

las posiciones iniciales de las piezas (para ensamblarlas) en la parte 4 la

asignación de jerarquías y en la parte 5 la ubicación de la cámara.

Cuando la pieza se encuentra en su posición tanto en X como en Y y Z insertamos

otra pieza y repetimos el proceso una vez mas. Pero en Z no se sabe si la pieza

esta bien ubicada, por lo tanto, se debe girar el modelo (todo) para saber si esta

Page 120: Diseño, construcción y control de un péndulo de Furuta

120

bien. Esto se hace con la instrucción (17) que se debe agregar en la parte 5 del

código:

Obj_a_Rotar.AddRotationD3DRMCOMBINE_AFTER, X, Y, Z, (Ang_en_Rad) (17)

Siendo X,Y o Z el eje o los ejes sobre los que se quiere rotar, colocando un “1”

sobre el que se quiera hacer la rotación y entre paréntesis el angulo en radianes.

En el péndulo se escribe:

todo.AddRotation D3DRMCOMBINE_AFTER, 0, 1, 0, (45 * deg2rad) (18)

Siendo deg2rad una constante (π / 180) para transformar el angulo escrito a

radianes, y asi girar un angulo de 45° en el eje Y.

Figura 12. Visualización después de girar el modelo.

Page 121: Diseño, construcción y control de un péndulo de Furuta

121

y se nota que no se visualiza por completo la Base en C, debido a que el objeto

que realiza la visualización (espacio) no cuenta con un buffer de profundidad

adecuado, por lo tanto se debe ampliar (19), agregando la siguiente línea de

código después de la rotación anterior (18):

Variable.Viewport.SetBack Valor_Profundidad_deseada (19)

En el péndulo:

espacio.Viewport.SetBack 5000 (20)

De esta manera, se puede realizar el ensamble y manejar las cámaras de la forma

que se quiera.

Después de cambiar el buffer de profundidad, la visualización queda de la

siguiente manera:

Figura 13. Visualización con un Buffer de Profundidad adecuado.

El resto de piezas se insertan y se ubican de la misma manera, el código para el

ensamble completo es el siguiente:

Page 122: Diseño, construcción y control de un péndulo de Furuta

122

Const deg2rad = 3.1416 / 180 Const rad2deg = 180 / 3.1416 Const pi = 3.141592654

'------obj principal----------------------------- (21)

Public todo As Direct3DRMFrame3 'objeto principal del cual se derivan todos.

'---------declaracion de piezas--------------------- Public Base_en_I As Direct3DRMFrame3 Public Base_en_I_m As Direct3DRMMeshBuilder3 Public Base_en_C As Direct3DRMFrame3 Public Base_en_C_m As Direct3DRMMeshBuilder3 Public Base_en_L As Direct3DRMFrame3

Public Base_en_L_m As Direct3DRMMeshBuilder3 Public motor As Direct3DRMFrame3 Public motor_m As Direct3DRMMeshBuilder3 Public acople_B As Direct3DRMFrame3 Public acople_B_m As Direct3DRMMeshBuilder3

Public barra_h As Direct3DRMFrame3 Public barra_h_m As Direct3DRMMeshBuilder3 Public acople_p As Direct3DRMFrame3 Public acople_p_m As Direct3DRMMeshBuilder3 Public pend As Direct3DRMFrame3 Public pend_m As Direct3DRMMeshBuilder3

Public barra_p As Direct3DRMFrame3 Public barra_p_m As Direct3DRMMeshBuilder3 Private Sub Form_Load()

espacio.SceneFrame.SetSceneBackgroundRGB 0.4, 0.3, 0.8 'color de fondo

espacio.AmbientLight.SetColorRGB 100, 0, 0 'color de luz ambiental

With espacio 'Espacio de trabajo para DirectX dentro del FORM todas las propiedades a agregar, se agregan dentro de este with las piezas, la iluminación, etc.

Set todo = .D3DRM.CreateFrame(.SceneFrame)

.StartWindowed

'------------ llamado de piezas (archivos)

Page 123: Diseño, construcción y control de un péndulo de Furuta

123

Set Base_en_I = .D3DRM.CreateFrame(.SceneFrame) Set Base_en_I_m = .D3DRM.CreateMeshBuilder() Base_en_I_m.LoadFromFile App.Path + "\Base_en_I.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing

Base_en_I.AddVisual Base_en_I_m

Set Base_en_C = .D3DRM.CreateFrame(.SceneFrame) Set Base_en_C_m = .D3DRM.CreateMeshBuilder() Base_en_C_m.LoadFromFile App.Path + "\Base_en_C.x",0,D3DRMLOAD_FROMFILE,Nothing, Nothing Base_en_C.AddVisual Base_en_C_m

Set Base_en_L = .D3DRM.CreateFrame(.SceneFrame)

Set Base_en_L_m = .D3DRM.CreateMeshBuilder() Base_en_L_m.LoadFromFile App.Path +"\Base_en_L.x",0, D3DRMLOAD_FROMFILE, Nothing, Nothing Base_en_L.AddVisual Base_en_L_m

Set motor = .D3DRM.CreateFrame(.SceneFrame) Set motor_m = .D3DRM.CreateMeshBuilder() motor_m.LoadFromFile App.Path + "\MOTOR.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing

motor.AddVisual motor_m

Set acople_B = .D3DRM.CreateFrame(.SceneFrame) Set acople_B_m = .D3DRM.CreateMeshBuilder() acople_B_m.LoadFromFile App.Path + "\Acople_B.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing acople_B.AddVisual acople_B_m

Set barra_h = .D3DRM.CreateFrame(.SceneFrame)

Set barra_h_m = .D3DRM.CreateMeshBuilder() barra_h_m.LoadFromFile App.Path + "\Barra_H.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing barra_h.AddVisual barra_h_m

Set acople_p = .D3DRM.CreateFrame(.SceneFrame)

Set acople_p_m = .D3DRM.CreateMeshBuilder() acople_p_m.LoadFromFile App.Path + "\Acople_P.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing acople_p.AddVisual acople_p_m

Set pend = .D3DRM.CreateFrame(.SceneFrame) Set pend_m = .D3DRM.CreateMeshBuilder() pend_m.LoadFromFile App.Path + "\pend.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing

Page 124: Diseño, construcción y control de un péndulo de Furuta

124

pend.AddVisual pend_m

Set barra_p = .D3DRM.CreateFrame(.SceneFrame)

Set barra_p_m = .D3DRM.CreateMeshBuilder() barra_p_m.LoadFromFile App.Path + "\Barra_V.x", 0, D3DRMLOAD_FROMFILE, Nothing, Nothing barra_p.AddVisual barra_p_m

'------------posiciones iniciales Base_en_I.SetPosition todo, 0, 0, 0

Base_en_C.SetPosition todo, -6.2, -25.2, 0 Base_en_L.SetPosition Base_en_I, -3.2, 22.4, 0 motor.SetPosition Base_en_L, -2, -0.2, 0 acople_B.SetPosition motor, 0, 4.6, 0 barra_h.SetPosition acople_B, 13, 0.4, 0 acople_p.SetPosition barra_h, 11.7, -2, 0

pend.SetPosition acople_p, 3.5, -0.15, 0 barra_p.SetPosition pend, 0.75, 21.3, 0

' ----------- jerarquías todo.AddChild Base_en_I

Base_en_I.AddChild Base_en_C Base_en_I.AddChild Base_en_L Base_en_L.AddChild motor motor.AddChild acople_B acople_B.AddChild barra_h barra_h.AddChild acople_p

acople_p.AddChild pend pend.AddChild barra_p

'------------ubicación en la pantalla

todo.AddRotation D3DRMCOMBINE_AFTER, 0, 1, 0, (45 * deg2rad)

espacio.CameraFrame.SetPosition Nothing, 13, 25, -120 'ubicación de la cámara espacio.Viewport.SetBack 5000 'calidad de imagen

End With

End Sub

Page 125: Diseño, construcción y control de un péndulo de Furuta

125

Y muestra como resultado el ensamble total.

Figura 14. Ensamble Total.

Recordar: Para poder visualizar el modelo e 3D se deben haber establecido las jerarquías de

todas las piezas en el ensamble; cuando se esta ensamblando es útil ubicar todo

el conjunto de instrucciones para el posicionamiento de las piezas en un mismo

sitio, las instrucciones para establecer las jerarquías después del posicionamiento

y los movimientos y rotaciones del sistema en otro sitio después de todo lo anterior

(un buen ejemplo de código y organización es la que se dio en el código (21).

Algunas veces es necesario girar algunas piezas para el posicionamiento inicial

durante el ensamble, aunque en el ejemplo del péndulo no fue necesario

realizarlo, la instrucción para llevar a cabo esta operación es:

Page 126: Diseño, construcción y control de un péndulo de Furuta

126

Obj_a_Rotar.AddRotationD3DRMCOMBINE_AFTER, X, Y, Z, (Ang_en_Rad)

Que fue la misma con la que se roto todo el sistema (18), solo que en el caso de

rotar una pieza, se cambia Obj_a_Rotar por el nombre de la pieza.

Page 127: Diseño, construcción y control de un péndulo de Furuta

127

MANEJO DE CAMARAS

La forma mas sencilla de implementar el manejo de cámaras se puede visualizar

en la siguiente imagen:

Figura 15. Botones Agregados a la aplicación para las cámaras.

El ejemplo consiste en manualmente con el uso de botones de comando se logre

un desplazamiento de la cámara en todas las direcciones, para esto es necesario

la creación de variables que guarden el valor en cada momento de la posición de

la cámara, en el ejemplo se llaman camarax, camaray, camaraz, estas variables

inician con un valor especifico (el que se le dio para visualizar el ensamble de

forma correcta en el código completo de la aplicación) y luego cuando se de click

Page 128: Diseño, construcción y control de un péndulo de Furuta

128

en cualquiera de los comandos de la cámara, se sume o se reste a la variable de

posición guardada según sea el caso.

Si se da click en Cámara X menos, la variable camarax, se tendrá que remplazar

por camarax - 5 con el objetivo de que la cámara se desplace 5 unidades hacia la

izquierda, veamos:

Private Sub CXmenos_Click()

camarax = camarax - 5

espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz (22) espacio.Render

End Sub

La segunda línea dentro del procedimiento corresponde a la forma como se ubica

la cámara en el espacio (8), pero con las variables o la variable que se cambio, ya

actualizada, este cambio solo se observa cuando se renderiza de nuevo la

ventana, por lo tanto la tercera línea corresponde a la renderizacion y no se debe

olvidar que después de realizar cualquier movimiento de cámara o de piezas se

debe renderizar para poder observar el cambio. La estructura de la instrucción

para renderizar es la siguiente:

Obj_RMCanvas.Render (23)

De igual manera se implementa el desplazamiento hacia la derecha, arriba, abajo

y el zoom que consiste simplemente en un desplazamiento de la cámara en el eje

Z. La función restaurar, como su nombre lo indica reinicializa las variables de la

cámara con los valores iniciales en las tres coordenadas (24).

Private Sub restore_Click() (24) camarax = 13

Page 129: Diseño, construcción y control de un péndulo de Furuta

129

camaray = 20 camaraz = -100

espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz espacio.Render End Sub

Private Sub CXmas_Click()

camarax = camarax + 5 espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz espacio.Render

End Sub

Private Sub CXmenos_Click()

camarax = camarax - 5 espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz espacio.Render

End Sub

Private Sub CYmas_Click() camaray = camaray + 5 espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz

espacio.Render End Sub

Private Sub CYmenos_Click() camaray = camaray - 5 espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz

espacio.Render End Sub

Private Sub Zmas_Click() camaraz = camaraz + 5

espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz espacio.Render

End Sub

Private Sub Zmenos_Click() camaraz = camaraz - 5

Page 130: Diseño, construcción y control de un péndulo de Furuta

130

espacio.CameraFrame.SetPosition Nothing, camarax, camaray, camaraz espacio.Render

End Sub

Las rotaciones en DirectX es un aspecto un poco complejo de implementar y en

este caso no se hará énfasis en esto, pero una forma muy útil de realizarlas es con

códigos que otros programadores han utilizado y son de fácil adquisición en

Internet, aquí presentaremos el que se utilizo en la aplicación final de la aplicación

que simula un péndulo invertido rotacional:

Public Sub RotateTrackBall(X As Integer, Y As Integer) (25) Dim delta_x As Single, delta_y As Single

Dim delta_r As Single, radius As Single, denom As Single, angle As Single ' rotation axis in camcoords, worldcoords, sframecoords

Dim axisC As D3DVECTOR

Dim wc As D3DVECTOR Dim axisS As D3DVECTOR Dim Base_en_C As D3DVECTOR

Dim origin As D3DVECTOR delta_x = X - m_lastX delta_y = Y - m_lastY

m_lastX = X m_lastY = Y

delta_r = Sqr(delta_x * delta_x + delta_y * delta_y) radius = 50 denom = Sqr(radius * radius + delta_r * delta_r)

If (delta_r = 0 Or denom = 0) Then Exit Sub angle = (delta_r / denom)

axisC.X = (-delta_y / delta_r)

axisC.Y = (-delta_x / delta_r) axisC.z = 0 Form1.Espacio.CameraFrame.Transform wc, axisC

todo.InverseTransform axisS, wc Form1.Espacio.CameraFrame.Transform wc, origin

todo.InverseTransform Base_en_C, wc

Page 131: Diseño, construcción y control de un péndulo de Furuta

131

axisS.X = axisS.X - Base_en_C.X axisS.Y = axisS.Y - Base_en_C.Y

axisS.z = axisS.z - Base_en_C.z axisS.X = axisS.X * roty axisS.z = axisS.z * roty

todo.AddRotation D3DRMCOMBINE_BEFORE, axisS.X, axisS.Y, axisS.z, angle End Sub

Page 132: Diseño, construcción y control de un péndulo de Furuta

132

ANIMACIÓN

La animación consiste en dar movimiento coordinado o adecuado a las partes del

sistema cumpliendo una base de reglas, ecuaciones o necesidades. Esto en

DirectX se logra con traslaciones, movimiento o rotaciones.

Las piezas siempre giran en torno a sus ejes coordenados y estos se establecen

cuando se construyen las piezas y se crean los archivos .X si por ejemplo, una

pieza circular no tiene su eje en su centro, esta al girar con respecto a ese eje no

lo hará de forma adecuada (rotara de forma excéntrica). Por esta razón en esta

altura del programa, es indispensable la buena realización de las piezas.

La animación es simple y cosiste en mover lo que se quiera desplazar y girar lo

que se quiera rotar, se hace esta afirmación ya que los ejes de las piezas son

móviles y las piezas solo se unen por sus jerarquías ya establecidas, las cuales

restringen los grados de libertad; por ejemplo, en el péndulo se tienen 2 grados de

libertad rotacionales, y las articulaciones que permiten estos movimientos son

acople_B y pend para los grados de libertad fi (φ) en el brazo y teta (θ) en el

péndulo respectivamente. Por lo tanto teniendo en cuenta las jerarquías, si se

mueve o rota acople_B se deben mover o rotar todos sus hijos (barra_h, acople_p

y pend). Y pend como es el último hijo y rota también, solo debe rotar con respecto

al eje establecido (cuando rota acople_B se mueve el eje de pend).

Las instrucciones para llevar a cabo las rotaciones y traslaciones son:

Pieza_a_Rotar.AddRotation D3DRMCOMBINE_AFTER, X, Y, Z, angulo_en_rad

Pieza_a_Desplazar.AddTranslation D3DRMCOMBINE_AFTER, X, Y, Z (26)

Page 133: Diseño, construcción y control de un péndulo de Furuta

133

Pieza_a_Mover.SetPosition Pieza_Referencia, X, Y, Z

La primera instrucción (26) rota la pieza con respecto a su eje (X, Y o Z según se

escoja y se coloque “1”) un ángulo especifico (en radianes).

La segunda instrucción desplaza la pieza desde el punto actual hasta las

coordenadas finales que establezcan el X, Y, Z que se utilice (el origen es el punto

actual donde se encuentra la pieza antes de ser movida).

La tercera instrucción mueve de manera absoluta la pieza que se quiere con

respecto a otra pieza (pieza de referencia).

Cualquiera de las tres opciones se puede usar dependiendo de la aplicación, en el

péndulo se utilizan dos rotaciones como se menciono anteriormente y cabe decir

que después de realizar la traslación, movimiento o rotación se tiene que

renderizar para observar el movimiento.

En el ejemplo que se hará a continuación, se utiliza la posición de un par de barras

de desplazamiento para fijar los ángulos que se van moviendo tanto la barra

horizontal (con fi φ) como la barra vertical (con θ).

En el Form 1 se debe tener lo siguiente:

Page 134: Diseño, construcción y control de un péndulo de Furuta

134

Figura 16. Barras de Desplazamiento agregadas a la aplicación para la

animación.

Las dos barras tienen como limite inferior 0 y como superior 360 que sería una

vuelta completa. En el procedimiento que se ejecuta cada vez que la barra cambie

se debe agregar el código (27) para teta:

Private Sub V_teta_Change()

Text1.Text = V_teta.Value (27) teta = Val(Text1.Text)

animación teta, fi End Sub

Y el (28) para fi:

Private Sub V_fi_Change()

Text2.Text = V_fi.Value (28) fi = Val(Text2.Text)

animacion teta, fi End Sub

Page 135: Diseño, construcción y control de un péndulo de Furuta

135

Como se observa, la barra teta se llama V_teta (27) y la barra fi se llama V_fi (28)

y se almacena en la variable teta y la variable fi respectivamente, el valor actual de

la barra de desplazamiento, pasando después los valores de teta y fi adquiridos a

la función animación.

La función Animación consiste en mover los elementos que se necesita en el

modelo (acople_B y pend) con los parámetros establecidos que se le pasaron (θ y

φ), la función es la (29):

Sub animacion(teta1 As Double, fi1 As Double)

pend.AddRotation D3DRMCOMBINE_AFTER, 1, 0, 0, ((teta1 - teta_a) * deg2rad) (29) acople_B.AddRotation D3DRMCOMBINE_AFTER, 0, 1, 0, ((fi1 - fi_a) * deg2rad)

teta_a = teta1 fi_a = fi1

espacio.Render End Sub

Donde solamente cabe aclarar que el ángulo se debe mover de forma incremental,

y si la barra de desplazamiento tenia por ejemplo el valor 2 y se movió al valor 3 el

angulo que se debe mover en la animación es la diferencia, entre el angulo actual

y el anterior (3 – 2 = 1) y esta es la manipulación que se hace en la función

animación con las variables teta_a y fi_a y el angulo que se le paso a la función (θ

y φ).

Page 136: Diseño, construcción y control de un péndulo de Furuta

136

Figura 17. Movimiento de 90º para fi (φ)

Figura 18. Movimiento de 90º para teta (θ)

En la figura 17 se ve una posición de 90 grados para la barra horizontal y en la

figura 18, un giro de 90 grados para la barra pendular.

Page 137: Diseño, construcción y control de un péndulo de Furuta

137

De esta manera y dependiendo de la habilidad que se tenga en el manejo de

Visual Basic se pueden hacer animaciones más complejas o más simples.

Page 138: Diseño, construcción y control de un péndulo de Furuta

138

IMPLEMENTACION DE ECUACIONES DIFERENCIALES

Si en la animación se quiere mostrar el comportamiento real del sistema, el cual se

da (en la mayoría de ocasiones) en ecuaciones diferenciales se deben tener en

cuenta algunas cosas:

• Tener un algoritmo para la solución numérica de las ecuaciones

diferenciales.

• Conocer los límites que tiene el modelo matemático e implementarlos para

que se logre una animación adecuada.

• Preferiblemente tener las ecuaciones del sistema en variables de estado.

Un algoritmo adecuado para la solución numérica de sistemas de ecuaciones

diferenciales es Runge_Kutta.

Si se tienen las ecuaciones del sistema en variables de estado (30).

(30)

Se puede implementar el siguiente algoritmo

)...,,(

...

)...,,(

)...,,(

21

2122

2111

nnn

n

n

yyytfdtdy

yyytfdtdy

yyytfdtdy

=

=

=

Page 139: Diseño, construcción y control de un péndulo de Furuta

139

PASO 1: Asignar h, inicializar t =a y asignar las condiciones iniciales a y1

Donde a es el tiempo inicial de la ecuación, h es el paso o

incremento que se dará en el tiempo e i es la iteración actual.

PASO 2: Incrementar i en cada iteración del algoritmo

PASO 3: Calcular los valores de K que estimaran la solución numérica.

(31)

Donde y1 es la solución actual a la ecuación diferencial y solo se esta haciendo el

calculo de las constantes K para 1 variable, en el caso del sistema de ecuaciones

completo salen cuatro constantes para cada variable.

PASO 4: Calcular la salida actual de la ecuación diferencial.

(32)

PASO 5: Asignar la salida de la ecuación diferencial Salida (t , y1) y volver

al paso 2 para una próxima iteración.

PASO 6: PARAR

Y la implementación en Visual Basic para el sistema de 4 ecuaciones es la

siguiente:

Function Runge_Kutta()

),()2/,2/()2/,2/(

),(

314

213

112

11

KyhtfhKKyhtfhKKyhtfhK

ytfhK

++⋅=++⋅=++⋅=

⋅=

6/)22( 432111 KKKKyy ++++=

Page 140: Diseño, construcción y control de un péndulo de Furuta

140

Dim k11, k12, k13, k14 As Double 'los k1 para las ecuaciones

Dim k21, k22, k23, k24 As Double 'los k2 para las ecuaciones

Dim k31, k32, k33, k34 As Double 'los k3 para las ecuaciones (33) Dim k41, k42, k43, k44 As Double 'los k4 para las ecuaciones

'X es el tiempo que se incrementa de acuerdo al paso X = h * i2

k11 = h * x1p(X, y1, y2, y3, y4)

k12 = h * x3p(X, y1, y2, y3, y4)

k13 = h * x2p(X, y1, y2, y3, y4) k14 = h * x4p(X, y1, y2, y3, y4)

k21 = h * x1p(X + h / 2, y1 + k11 / 2, y2 + k12 / 2, y3 + k13 / 2, y4 + k14 / 2) k22 = h * x3p(X + h / 2, y1 + k11 / 2, y2 + k12 / 2, y3 + k13 / 2, y4 + k14 / 2)

k23 = h * x2p(X + h / 2, y1 + k11 / 2, y2 + k12 / 2, y3 + k13 / 2, y4 + k14 / 2) k24 = h * x4p(X + h / 2, y1 + k11 / 2, y2 + k12 / 2, y3 + k13 / 2, y4 + k14 / 2)

k31 = h * x1p(X + h / 2, y1 + k21 / 2, y2 + k22 / 2, y3 + k23 / 2, y4 + k24 / 2) k32 = h * x3p(X + h / 2, y1 + k21 / 2, y2 + k22 / 2, y3 + k23 / 2, y4 + k24 / 2) k33 = h * x2p(X + h / 2, y1 + k21 / 2, y2 + k22 / 2, y3 + k23 / 2, y4 + k24 / 2)

k34 = h * x4p(X + h / 2, y1 + k21 / 2, y2 + k22 / 2, y3 + k23 / 2, y4 + k24 / 2)

k41 = h * x1p(X + h, y1 + k31, y2 + k32, y3 + k33, y4 + k34)

k42 = h * x3p(X + h, y1 + k31, y2 + k32, y3 + k33, y4 + k34) k43 = h * x2p(X + h, y1 + k31, y2 + k32, y3 + k33, y4 + k34)

k44 = h * x4p(X + h, y1 + k31, y2 + k32, y3 + k33, y4 + k34)

y1 = y1 + (1 / 6) * (k11 + 2 * k21 + 2 * k31 + k41)

y2 = y2 + (1 / 6) * (k12 + 2 * k22 + 2 * k32 + k42) y3 = y3 + (1 / 6) * (k13 + 2 * k23 + 2 * k33 + k43) y4 = y4 + (1 / 6) * (k14 + 2 * k24 + 2 * k34 + k44)

i2 = i2 + 1

End Function

Page 141: Diseño, construcción y control de un péndulo de Furuta

141

x1p es la ecuación 1 en variables de estado implementada en otra función que

recibirá los parámetros X, y1, y2, y3, y4 que son:

X = El tiempo

y1 = Solución actual a la ecuación diferencial de x1.

y2 = Solución actual a la ecuación diferencial de x2.

y3 = Solución actual a la ecuación diferencial de x3.

y4 = Solución actual a la ecuación diferencial de x4.

h, es el valor del paso que se incrementa cada vez (es el incremento de tiempo

para solucionar la ecuación). Los valores de k son coeficientes que se utilizan para

solucionar el sistema de ecuaciones y calcular los valores siguientes de y1, y2,y3,

y4.

Las funciones de x2p, x3p y x4p cuentan con los mismos parámetros

mencionados anteriormente y sus funciones son las establecidas por el modelo

matemático del sistema en variables de estado.

Page 142: Diseño, construcción y control de un péndulo de Furuta

142

CONSTRUCCIÓN DE PIEZAS

Cada una de las piezas que compone el sistema se debe construir de manera

independiente en un programa de diseño CAD , en este caso se usara SolidEdge

o SolidWorks, y para mayor comodidad se debe procurar construir cada pieza

estableciendo un eje de referencia y conservando las respectivas posiciones de

cada una de las piezas.

Cuando se trabaja con SolidEdge o SolidWorks las piezas se almacenan con

una extensión establecida las cuales no son compatibles con DirectX, por lo que

es necesario convertirlas a un tipo de extensión (*.X) que es compatible con

DirectX, operación que se puede realizar de dos modos; por medio de un

programa llamado 3D-Exploration o con 3D Studio Max. Para ligar las piezas

construidas en SolidWorks o SolidEdge a cualquiera de estos dos programas, se

deben guardar las piezas con una extensión (*.stl) para con la ayuda de los otros

programas (3D-Exploration o 3D Studio Max) se exporten las piezas a un formato

adecuado para DirectX (*.X).

En el caso de que el programa con el que se crean las figuras sea SolidWorks, la

ubicación del eje de coordenadas solo importa al final, ya que este se puede

definir en el punto que se quiera siendo el punto mas indicado los ejes de simetría

o giro de la pieza.

Page 143: Diseño, construcción y control de un péndulo de Furuta

143

Figura 19. Forma de Agregar el eje de coordenadas en SolidWorks.

El paso siguiente es guardar la pieza en formato (*.stl) indicando el sistema de

coordenadas con que se quiera guardar.

Figura 20. Guardar la Pieza (*.stl) con un eje de coordenadas establecido.

Page 144: Diseño, construcción y control de un péndulo de Furuta

144

Cuando el programa con que se diseñan las piezas es SolidEdge, se debe

asegurar que el eje de coordenadas global del entorno CAD sea el mismo que se

necesite para la pieza ya que este no se puede cambiar como en SolidWorks.

Cuando la pieza esta lista en formato (*.stl) se puede convertir a (*.X) por medio

de 3D Explorartion simplemente exportando la pieza a este formato, pero si por el

contrario se usa 3D-StudioMax, se debe utilizar en conjunto con un plugg-in

llamado PandaDXExport5 que permite cambiar las texturas y los materiales a las

piezas dando una mejor apariencia a estas. Después de tener la pieza con su

respectivo material, esta se exporta a (*.X) se guarda y en las opciones que salen

a continuación sé escogen todas las opciones menos flip-normal y bones.

Así se concluye este tutorial que busca de forma guiada, dar los conceptos

básicos para implementar una aplicación en DirectX con todas sus partes.

Page 145: Diseño, construcción y control de un péndulo de Furuta

145

CONCLUSIONES

• La implementación o representación de sistemas a través de herramientas

asistidas por computador en entornos virtuales, es de gran importancia en el

desarrollo de grandes y pequeños proyectos, ya que es posible estudiar o

hacerse una idea del funcionamiento real de la planta de estudio y su

desempeño ante determinadas condiciones de trabajo.

• Después de adquirir experiencia en el manejo de elementos en DirectX, la

animación y la forma de dar movimiento a elementos es sencilla y muy potente.

• El manejo de la herramienta de DirectX, es una ayuda muy importante a nivel

de la ingeniería ya que para proyectos macros permite ver de manera casi real

como se comporta una planta o un proyecto en general que se quiera realizar,

ya que en este tutorial se dan las bases necesarias para aprender a manejar el

programa de DirectX, sin dejar a un lado que la herramienta plataforma es

VisualBasic y es importante aprender a manejarlo bien de manera principal

para poder hacer la interfase.

Page 146: Diseño, construcción y control de un péndulo de Furuta

146

Anexo B (Planos para la construcción del Péndulo Invertido Rotacional)

Page 147: Diseño, construcción y control de un péndulo de Furuta

147

Page 148: Diseño, construcción y control de un péndulo de Furuta

148

Page 149: Diseño, construcción y control de un péndulo de Furuta

149

Page 150: Diseño, construcción y control de un péndulo de Furuta

150

Page 151: Diseño, construcción y control de un péndulo de Furuta

151

Page 152: Diseño, construcción y control de un péndulo de Furuta

152

Page 153: Diseño, construcción y control de un péndulo de Furuta

153

Page 154: Diseño, construcción y control de un péndulo de Furuta

154