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
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
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
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
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.
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
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
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
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
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
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.
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
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
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.
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.
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.
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
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.
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π
2θπ−
2la lp 0
Matrices de transformación 1−Α ii :
+−+
++
=Α
10000010
0)2
cos(0)2
sin(
0)2
sin(0)2
cos(
01 φπφπ
φπφπ
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).
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)
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=
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 ++=
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 −=
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=δ
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
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.
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
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.
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
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
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
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
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.
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
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 - - -
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
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
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.
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
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
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.
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
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
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
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
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
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
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
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
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
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
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.
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).
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.
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.
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
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.
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.
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.
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
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
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
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.
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
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
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
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−==
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.
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 ν=
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
2φ
1cos2 2
0
2.
−+== θωθ
mglEEn
))cos()((.
0 θθsignEEksatu n −=
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
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.
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 −=
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
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
−−−
+
−−−−
−
=+
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
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
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
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.
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.
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
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 −−−−=
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
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
0°
25000010000004000000625
0.5
-116.32
-24.2
-7.61
-8.68
5°
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.
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 ++++++++=
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.
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.
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.
90
Figura 37. Posición del péndulo ante el controlador Gain Scheduling.
Figura 38. Posición del brazo ante el controlador Gain Scheduling.
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).
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.
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.
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.
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,
96
debido a que el sistema seguirá operando (si es posible) de forma correcta hasta
que el problema sea solucionado.
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>.
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.
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.
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.
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.
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.
103
Figura 1. Interfaz Grafica del Sistema Péndulo Invertido Rotacional.
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
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,
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.
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:
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
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:
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”.
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.
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)
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.
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
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
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.
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.
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
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
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.
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:
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)
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
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
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:
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.
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
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
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
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
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
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)
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:
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
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 φ).
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.
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.
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
=
=
=
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 ++++=
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
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.
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.
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.
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.
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.
146
Anexo B (Planos para la construcción del Péndulo Invertido Rotacional)
147
148
149
150
151
152
153
154