Script 3.3: Simula una ecuación diferencial de primer ...
Transcript of Script 3.3: Simula una ecuación diferencial de primer ...
CAPÍTULO III: GNU OCTAVE
- 20 -
Figura 3.3: Solución de la ecuación diferencial de primer orden y una exponencial.
Script 3.3: Simula una ecuación diferencial de primer orden y una ecuación
exponencial. priorden1.m.
x0 = -1.5;
function xdot = h(x,t)
a = -1;
xdot = a*x;
endfunction
t = linspace(0,6);
x = lsode("h",x0,t);
_ _gnuplot_set_ _ terminal png
_ _gnuplot_set_ _ output "priorden1.png"
plot(t,x,'b',t,-1.5*exp(-t),'r+')
Considere el siguiente ejemplo de un sistema no lineal de segundo orden (dos
ecuaciones diferenciales de primer orden):
Script 3.4: Programa de simulación de un sistema no lineal de segundo orden.
segorde.m
x0 = [0.1 3]; %condiciones iniciales
function dx = f(x,t)
CAPÍTULO III: GNU OCTAVE
- 21 -
dx = [-x(1)+x(2);-x(2)^3 ];
endfunction
%tiempo de simulación
ti = 0;
tf = 1;
np = 100;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
_ _gnuplot_set_ _ terminal png
_ _gnuplot_set_ _ output "segorden.png"
%subplot: comando de gnuplot que soporta múltiples gráficas. Divide
la ventana en n filas y n columnas de subgráficas
subplot(2,2,1);
plot(t,x) % devuelve las grafica de las dos componentes
xlabel('t[seg]')
ylabel('x1 y x2')
subplot(2,2,2)
plot(t,x(:,1),'r')
xlabel('t[seg]')
ylabel('x1')
Para escribir cualquier comentario, dentro del script se usa “%”.
Entonces, se obtiene las gráficas siguientes:
Figura 3.4: Solución de un sistema de ecuaciones no lineal de segundo orden.
CAPÍTULO III: GNU OCTAVE
- 22 -
III.4. SIMULACIÓN DE UN CIRCUITO RC
Considere el circuito de la siguiente figura:
Circuito # 01
La fuente Vf(t) es una señal de onda cuadrada, como la que se muestra a
continuación:
Se planteará la ecuación diferencial que modela este circuito y luego se resuelve
usando GNU Octave. Asignamos, por ejemplo, las corrientes de malla y resolvemos
por el método de las mallas.
Circuito # 2
CAPÍTULO III: GNU OCTAVE
- 23 -
Cálculo de la ecuación diferencial y de la simulación.
Las ecuaciones planteadas en función de 1I e 2I son las siguientes, sabiendo que:
2I ic=
( )1 1 2 1 2 0Vf R I R I I− + + − = (3.1)
( )2 1 2 0R I I Vc− − + = (3.2)
Sustituyendo 2I en la ecuación (3.1) y (3.2).
( )1 2 1 2 0Vf R R I R ic− + + − = (3.3)
2 1 2 0R I R ic Vc− + + = (3.4)
Se despeja 1I de la ecuación (3.4)
22 1 2 1
2
R ic VcR I R ic Vc I
R
+= + ⇒ =
Se sustituye 1I en la ecuación (3.3)
( ) 21 2 2
2
0R ic Vc
Vf R R R icR
+− + + − =
(3.5)
Se despeja ic de la ecuación (3.5) y se obtiene:
( )1 2
1 2 1
Vc R RVfic
R R R
+= − (3.6)
Si cdVc
icdt
= entonces se sustituye en la ecuación (3.6) y se obtiene la ecuación
diferencial:
( )1 2
1 2 1
R RdVc VfVc
dt R R c R c
+= − +
La simulación de esta ecuación diferencial ordinaria para un primer periodo de señal
cuadrada se presenta de la manera siguiente:
CAPÍTULO III: GNU OCTAVE
- 24 -
Script 3.5: Programa de simulación de un sistema una ecuación diferencial de
primer orden. ec1.m
global C R1 R2 tau T Vf
%Parámetros
C = 0.1e-6; % 0.1 microfaradios
R1 = 1000; % ohmios
R2 = 250; % ohmios
Vf = 5;
x0 = -Vf*R2/(R1+R2);
function dx = f(x,t)
global C R1 R2 tau T Vf
Vc=x(1);
% Definición de la constante de tiempo del circuito # 02
tau = 2E-5;
T = 1*tau;
% Señal de onda cuadrada
if t < T/2
Vf = 5;
else
Vf = -5;
end
% Código de la ecuación diferencial
dx = -(R1+R2)*Vc/(R2*R1*C)+Vf/(R1*C);
endfunction
ti = 0;
tf = 1E-4;
np = 1000;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
_ _gnuplot_set_ _ terminal png
_ _gnuplot_set_ _ output "ec1.png"
subplot(211),plot(t,x,'r')
title('Tensión en el capacitor')
xlabel('t [seg]')
ylabel('Vc(t)')
axis([ti tf -1 1])
% señal de onda cuadrada
Vft = [ ];
for i = 1:length(t),
if t(i) < T/2
Vft(i) = 5;
else
Vft(i) = -5;
end
end
subplot(212),plot(t,Vft,'r')
title('Tensión en fuente')
xlabel('t [seg]')
ylabel('Vf(t)')
axis([ti tf -6 6])
CAPÍTULO III: GNU OCTAVE
- 25 -
Donde la función lsode (Livermore Solver for Ordinary Differential Equations),
usa métodos numéricos adaptables a un paso de tiempo para avanzar a una solución
de un sistema de ecuaciones diferenciales ordinarias.
El primer argumento (“f”) es el nombre de la función a llamarse para calcular el
vector de partes derechas. Esto debe tener la forma dx = f(x,t), donde dx y x son
vectores y t es un escalar.
El segundo argumento especifica la condición inicial y el tercero especifica un vector
de veces de salida en las cuales la solución es deseada, incluyendo el tiempo
correspondiente de la condición inicial.
El comando axis especifica los limites entre lo que se representa la gráfica.
Figura 3.5: Representación de la tensión en el capacitor y la tensión en la fuente.
Ahora tomando un período de T=5τ, la figura es la siguiente:
CAPÍTULO III: GNU OCTAVE
- 26 -
Figura 3.6: Representación de la tensión en el capacitor y la tensión en la fuente
La fuente: implementación de una onda cuadrada.
Se va a completar el ejercicio anterior para hacer que automáticamente GNU Octave
calcule el valor positivo y negativo de Vf, hay que mirar el espacio de un ciclo. Es
decir, hay que darse cuenta que en la primera mitad del ciclo la fuente vale Vf y en la
segunda toma el valor -Vf (en este caso +5V y -5V, respectivamente).
Para que GNU Octave genere esta secuencia se va a emplear la función mod(x,y)
que genera el resto de la división de x/y. Ejemplo: mod(5.5,3) da el valor 2.5.
En este caso, mod(t,T) da el resto en el período T. La cantidad mod(t,T) es
mayor que cero y menor T. Entonces, sólo se necesita saber cuando mod(t,T) es
menor que T/2, para asignar el valor positivo Vf a la fuente.
Esto se puede observar en el código del script 3.6:
CAPÍTULO III: GNU OCTAVE
- 27 -
Script 3.6: Programa de simulación de un Circuito RC para una señal de onda
cuadrada usando la función mod (). simuedif.m
global C R1 R2 tau T Vf
%Parámetros
C = 0.1e-6; % 0.1 microfaradios
R1 = 1000; % ohmios
R2 = 250; % ohmios
Vf = 5;
%x0 = -Vf*R2/(R1+R2);
function dx = f(x,t)
global C R1 R2 tau T Vf
Vc=x(1);
% Definición de la constante de tiempo del circuito
tau = R1*R2/(R1+R2)*C;
T = 1*tau;
% Señal de onda cuadrada
if mod(t,T) < T/2
Vf = 5;
else
Vf = -5;
end
% Código de la ecuación diferencial
dx = -(R1+R2)*Vc/(R2*R1*C)+Vf/(R1*C);
endfunction
ti = 0;
tf = 5E-4;
np = 1000;
t = linspace(ti,tf,np);
x = lsode("f",(-Vf*R2/(R1+R2)),t);
__gnuplot_set__ terminal png
__gnuplot_set__ output "probar.png"
subplot(211),plot(t,x,'r')
title('Tensión en el capacitor')
xlabel('t [seg]')
ylabel('Vc(t)')
axis([ti tf -1 1])
% señal de onda cuadrada
Vft = [ ];
for i = 1:length(t),
if mod(t(i),T) < T/2
Vft(i) = 5;
else
Vft(i) = -5;
end
end
subplot(212),plot(t,Vft,'r')
title('Generador')
xlabel('t [seg]')
ylabel('Vf(t)')
axis([ti tf -6 6])
CAPÍTULO III: GNU OCTAVE
- 28 -
Figura 3.7: Representa la tensión en el capacitor y el generador de señales.
Probando con un período más grande T=10τ , se observa la diferencia entre las
graficas:
Figura 3.8: Representa la tensión en el capacitor y el generador de señales
CAPÍTULO III: GNU OCTAVE
- 29 -
Sistemas de segundo orden
A continuación un ejemplo en el cual se tiene un sistema de segundo orden simulado.
1
2
= 43540.64924*Vf-1114055432*iL-74871.02986*Vc
= 34.27862866*Vc+2.872134427*Vf-109646.5323*iL
dx
dtdx
dt
El siguiente script 3.7, permite simular este sistema. Se muestra en el código
empleado, que ahora son dos variables en todos los casos. Dos condiciones iniciales y
dos ecuaciones diferenciales.
La simulación numérica de la respuesta de la tensión en el condensador y de la
corriente en la bobina se puede ver (Script 3.7):
Script 3.7: Simulación de una ecuación diferencial de segundo orden. seg.m
global T Vf
x0 = [-0.1696599441 -0.184012954E-3];
function dx = f(x,t)
global T
Vc=x(1);
iL=x(2);
% Definición de la constante de tiempo del circuito
T = 5/3775;
% Señal de onda cuadrada
if mod(t,T) < T/2 %
Vf = 5;
else
Vf = -5;
end
%La ecuación diferencial
dx(1) = 43540.64924*Vf-1114055432*iL-74871.02986*Vc;
dx(2) = 34.27862866*Vc+2.872134427*Vf-109646.5323*iL;
endfunction
ti = 0;
tf = 2E-3;
np = 100;
t = linspace(ti,tf,np);
x = lsode("f",x0,t);
__gnuplot_set__ terminal png
CAPÍTULO III: GNU OCTAVE
- 30 -
__gnuplot_set__ output "seg.png"
subplot(311),plot(t,x(:,1),'r')
title('Tensión en el capacitor')
xlabel('t [seg]')
ylabel('Vc(t)')
axis([ti tf -1 1])
subplot(312),plot(t,x(:,2),'r')
title('Corriente de la Bobina')
xlabel('t [seg]')
ylabel('iL(t)')
axis([ti tf -5E-4 5E-4])
% Señal de onda cuadrada
Vft = [ ];
for i = 1:length(t),
if mod(t(i),T) < T/2
Vft(i) = 5;
else
Vft(i) = -5
end
end
subplot(313),plot(t,Vft,'r')
title('Generador')
xlabel('t [seg]')
ylabel('Vf(t)')
axis([ti tf -6 6])
Figura 3.9: Respuesta de la tensión, de la corriente en la bobina y de la fuente.
CAPÍTULO III: GNU OCTAVE
- 31 -
Uso de estructuras de decisión
Las estructuras de control de flujo permiten la ejecución condicional y la repetición
de un conjunto de comandos. Normalmente estas expresiones son de relación o
lógicas.
Estructura if y/o else
Si la condición del if es cierta, entonces se ejecuta el cuerpo que está a continuación.
Si es falso se pasa a evaluar la condición siguiente else, ejecutándose el código
correspondiente si su condición es cierta.
Estructura for
En este caso se evalúa la condición al comenzar y se ejecuta las acciones de la
estructura del ciclo un número especificado de veces y se le coloca la condición de
parada.
III.5. ALGORITMOS DE INTEGRACIÓN
Se podría decir que hay un método de integración para cada problema. Existen
multitud de esquemas de integración y escoger uno de ellos no es fácil. Uno de los
objetivos de las funciones de MATLAB® y GNU Octave es intentar ser lo más
universales posible. La función perfecta sería la que sin configuración alguna
integrara cualquier ecuación diferencial ordinaria (EDO) con una precisión aceptable;
desgraciadamente no existe y probablemente no exista nunca.
Una consideración esencial antes de intentar resolver una EDO es saber si el paso
temporal viene condicionado por la precisión numérica o por criterios de estabilidad,
esto es, si presenta problemas stiff o no stiff.
CAPÍTULO III: GNU OCTAVE
- 32 -
En el caso stiff es apropiado utilizar un esquema de integración implícito que a costa
de mayor coste computacional por paso permite llegar al resultado con muchas menos
iteraciones. Mientras que para el caso no stiff la precisión numérica es también muy
importante pero el mismo esquema de integración es capaz de controlarla.
En este caso MATLAB® y GNU Octave toman filosofías completamente distintas.
MATLAB® opta por muchas funciones con pocas opciones; GNU Octave opta por
una única función con muchas opciones; MATLAB® utiliza sus propios algoritmos y
GNU Octave utiliza el lsode de ODEPACK (A Systematized Collection of ODE
Solvers).
MATLAB® cuenta con las siguientes funciones para resolver ecuaciones
diferenciales ordinarias:
Las funciones ode23 y ode45, las cuales implementan los métodos de Runge –
Kutta – Fehlberg, Runge – Kutta de orden dos, tres, cuatro y cinco respectivamente.
Sólo se mencionan éstas porque son las más comunes.
A continuación se dará una breve explicación de estos métodos de integración:
Runge – Kutta – Fehlberg: Es una forma de resolver EDO ya que incluye un criterio
para determinar en cada momento si estamos utilizando el tamaño de paso apropiado.
En cada paso se calculan dos aproximaciones distintas de la solución y se comparan:
si los dos valores son suficientemente parecidos, entonces se acepta la aproximación
y además, se aumenta el tamaño de paso si coinciden en más cifras significativas que
las requeridas; mientras que si los valores no coinciden con la precisión especificada,
entonces se reduce el tamaño de paso (Mathews, John y col. 2000).
Runge – Kutta de orden dos: Simula la precisión del método de la serie de Taylor de
orden N = 2.
CAPÍTULO III: GNU OCTAVE
- 33 -
Runge – Kutta de orden cuatro: Simula la precisión del método de la serie de Taylor
de orden N = 4.
Nota: Si se desea conocer más acerca de éstas funciones y sus métodos de
integración, puede obtenerse mediante la ayuda asociada (help <ode23, ode45>).
En GNU Octave es muy recomendable que se utilice la función lsode (Livermore
Solver for Ordinary Differential Equations), la cual parte de ODEPACK. La función
de lsode usa métodos numéricos adaptables para llegar a una solución de un
sistema de ecuaciones diferenciales ordinarias con un paso de tiempo.
Utiliza un método de integración multipaso Adams para problemas no stiff y una BDF
(Backward Differentiation Formula) para los problemas stiff.
Adams: Procura seleccionar la fórmula más eficiente en cada paso así como para
elegir un tamaño de paso óptimo h para alcanzar una exactitud especificada. Este
método funciona mejor cuando se hacen salir muchos puntos.
También en GNU Octave se puede utilizar la función lsode_options que es una
función de configuración de lsode.
lsode_options index{lsode options} (OPT, VAL. Llamada con un
único argumento (OPT), dirá el valor de la opción de configuración que se haya
solicitado. A ésta función hay que decirle qué método de integración a utilizar y que
tipo de problema se va a resolver.
La diferencia esencial entre GNU Octave y MATLAB® es que el primero pide por
defecto los puntos en los que queremos la solución. MATLAB® prefiere resolver el
problema y dar los puntos en el tiempo en los que se ha pasado durante la integración.
Es por ese motivo por el que el argumentó “tiempo” es en el primer caso un vector de
un millar de elementos mientras que en el segundo es tan solo un par de escalares.
CAPÍTULO III: GNU OCTAVE
- 34 -
Características Generales de las funciones de librería
El concepto de función en GNU Octave es semejante al de C y al de otros lenguajes
de programación, aunque con algunas diferencias importantes. Al igual que en C, una
función tiene nombre, valor de retorno y argumentos. Una función se llama
utilizando su nombre en una expresión o utilizándolo como un comando más.
Los nombres de las funciones de GNU Octave no son palabras reservadas del
lenguaje. Es posible crear una variable llamada sin o cos, que ocultan las funciones
correspondientes. Para poder acceder a las funciones hay que eliminar (clear) las
variables del mismo nombre que las ocultan.
Podemos encontrar gran variedad de tipos de función según lo que resuelvan:
1. Funciones matemáticas elementales.
2. Funciones especiales.
3. Funciones matriciales elementales.
4. Funciones matriciales específicas.
5. Funciones para la descomposición y/o factorización de matrices.
6. Funciones para análisis estadístico de datos.
7. Funciones para análisis de polinomios.
8. Funciones para integración de ecuaciones diferenciales ordinarias.
9. Resolución de ecuaciones no-lineales y optimización.
10. Integración numérica.
11. Funciones para procesamiento de señal.
Las características principales de estas funciones son:
• Los argumentos actuales de estas funciones pueden ser expresiones y
también llamadas a otra función.
• Admite valores de retorno matriciales múltiples.
CAPÍTULO III: GNU OCTAVE
- 35 -
Comando de entrada/salida
• Por terminal
disp (x): Presenta el contenido del parámetro pero sin indicar su nombre,
como ocurre si evaluamos directamente su nombre.
format opción: Permite controlar la forma en que se realiza la presentación de
los números. Las principales opciones son:
1. short: Trata de representar, el punto fijo, 5 cifras significativas en un
máximo de 10 caracteres. Sino es posible conseguirlos en todos los
elementos de una matriz utiliza exponente.
2. long: Trata de representar, el punto fijo, 15 cifras significativas en un
máximo de 24 caracteres. Sino es posible conseguirlos en todos los
elementos de una matriz utiliza exponente.
3. short e: Idem que format short pero en un punto flotante
(presentando exponentes).
4. long e: Idem que format long pero en un punto flotante (presentando
exponentes).
Input (mensaje): Presenta contenido del string mensaje y espera que se teclee
en el terminal una expresión, la cual es evaluada y devuelta.
Input (mensaje, “s”): Idem que antes, pero no tecleados se devuelve en el
string y no es evaluado.
Menu (titulo, opcion1,….): Presenta un menú con titulo y las distintas
opciones y devuelve el número de la opción elegida por el usuario.
CAPÍTULO III: GNU OCTAVE
- 36 -
Kbhit(): Lee una única pulsación en el terminal y devuelve el carácter pulsado
en un string.
• Por ficheros
Estas funciones permiten salvar y recuperar variables a ficheros en distintos
formatos:
Save fichero v1, v2, … salva las variables indicadas, o todas las del espacio
del trabajo actual sino se indica ninguna en el fichero. La s variables se
pueden indicar utilizando comodines (? *[lista]). Las opciones sirven para
indicar el formato en que se salvaran las variables:
1. ASCII: formato de texto de GNU Octave.
2. binary: formato de binario de GNU Octave.
3. flota – binary: formato de binario de GNU Octave, pero sólo en
simple precisión.
4. mat – binary: formato de binario de MATLAB®.
load opciones fichero v1, v2 …: Carga las variables especificadas del fichero,
o todas si no se especifican variables. GNU Octave detecta el formato del
fichero a cargar. Por defecto GNU Octave se niega a sobre escribir una
variable existente en el espacio de trabajo. La opción más interesante es:
1. force: si es necesario, sobre escribe las variables en memoria.
Entrada y salida tipo C
Están disponible un conjunto completo de funciones de acceso a ficheros tanto de
texto como binario, cuyo nombre, sintaxis y funcionalidad sigue los estándares del
CAPÍTULO III: GNU OCTAVE
- 37 -
lenguaje de programación C. De esta manera es posible un control total sobre el
manejo de fichero.
Las más destacadas son: printf, sprintf, fprintf, fscanf, fread, fwrite.
Otros comandos
quit (estados): sale de GNU Octave devolviendo si se desea, el código de estado
indicado.
exit (estado): Idem que quit.
Help concepto: presenta la ayuda disponible sobre el tema solicitado, función y otros.
Eval (string): Ejecuta comando presentados por string en el espacio de trabajo actual.
Nota: Para más información sobre el uso de funciones y comandos la documentación
en general de GNU Octave ver el manual:
Autor: John W. Eaton.
GNU Octave
A high-level interactive language for numerical computations
Edition 3 for Octave version 2.1.x
February 1997
También el manual on-line en http://www.octave.org.
CAPÍTULO IV
CONTROL LINEAL DE SISTEMAS
NO LINEALES: LINEALIZACIÓN
APROXIMADA
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 39 -
CAPITULO IV
IV. CONTROL LINEAL DE SISTEMAS NO LINEALES:
LINEALIZACIÓN APROXIMADA
IV.1. LINEALIZACIÓN APROXIMADA
En este capitulo se propone utilizar el método de la linealización aproximada para el
análisis del comportamiento de sistemas no lineales. Este método será útil en la
vecindad de su punto de equilibrio, siempre y cuando las perturbaciones que afectan
la evolución del sistema sean suficientemente pequeñas.
El modelo linealizado resulta, a partir del sistema de ecuaciones no lineales y
utilizando el punto de equilibrio deseado, mediante el cálculo de matrices jacobianas.
Nota: Para más información sobre la teoría de linealización aproximada consultar el
libro Control de Sistemas no Lineales de Sira Ramírez y col. (2005).
IV.1.1. EJEMPLOS
A continuación, se describen algunos ejemplos de linealización de sistemas alrededor
de puntos de equilibrio constantes. Estos ejemplos se implementan vía Web mediante
PHP, gracias a la colaboración de Yaneth Godoy, (2006).
IV.1.1.1. Control de la orientación de un artefacto espacial
Se desea controlar la posición angular θ de un artefacto espacial, como el que se
muestra en la figura 4.1. Para controlar este artefacto se dispone de una tobera que
puede girar alrededor de su base sobre un pivote especial. El ángulo de orientación de
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 40 -
la tobera respecto al eje principal del cuerpo de la astronave es β. La tasa de variación
del ángulo de la tobera es directamente proporcional a u. L es la distancia desde el
punto de apoyo de la tobera en el cuerpo del artefacto hasta el centro de gravedad de
la nave (cg). Se supone que la fuerza F de reacción, debida a la expulsión de los gases
de la combustión del motor del artefacto, está aplicada sobre el punto de apoyo de la
tobera. Como consecuencia de la fuerza F el artefacto gira alrededor de su centro de
gravedad en uno u otro sentido. El problema de control consiste en mantener el
ángulo θ en un valor fijo θ, usando como control la velocidad de variación u del
ángulo β de la tobera.
Figura 4.1: Esquema de un artefacto espacial.
El sistema no lineal se describe de la manera siguiente:
1 2x x=�
2 3sin( )FL
x xJ
=� (4.1)
3x Ru=�
El punto de equilibrio del sistema se obtiene a partir de las ecuaciones diferenciales,
igualando a cero las derivadas de las variables de estado, se expresa como:
1 20 0x x= ⇒ =�
2 3 30 sin( ) 0 0FL
x x xJ
= ⇒ = ⇒ =�
3 0 0 0x Ru U= ⇒ = ⇒ =�
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 41 -
1x arbitrario θ= =
( ,0,0,0)Pe θ= donde Pe es el punto de equilibrio.
Dado que el modelo obtenido es no lineal, se linealiza el sistema alrededor del punto
de equilibrio. Para realizar la linealización, se debe tomar en cuenta que se trata de un
sistema de tercer orden, con lo cual las matrices constantes A, B y C están dadas por:
1 1 1
1 2 3
2 2 23
1 2 3
3 3 3
1 2 3
0 1 0 0 1 0
0 0 cos( ) 0 0
0 0 0 0 0 0pe
Pe
df df df
dx dx dx
df df df FL FLA x
dx dx dx J J
df df df
dx dx dx
= = =
1
2
3
0
0
Pe
df
dudf
Bdu
Rdf
du
= =
[ ]1 2 3
1 0 0X
dy dy dyC
dx dx dx
= =
La linealización del sistema alrededor del punto de equilibrio es el siguiente:
1 1
2 2
3 3
0 1 00
0 0 0
0 0 0
x xFL
x x uJ
x x R
δ δ
δ δ δ
δ δ
= +
�
�
�
(4.2)
[ ]1
2
3
1 0 0
x
y x
x
δ
δ δ
δ
=
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 42 -
IV.1.1.2. Manipulador robótico de una sola unión rígida
Figura 4.2: Manipulador robótico de unión rígida.
Considere el manipulador robótico de una sola unión rígida que se muestra en la
figura 4.2. El modelo no lineal de este sistema se puede representar mediante las
siguientes ecuaciones:
1 2x x=�
12 2
1sin
xB cx x u
J J N J
= − − +
� (4.3)
1y x=
Donde 1 Px θ= (posición angular), 2 Px θ= � (velocidad angular), son las variables de
estado y la variable de control está dada por el torque aplicado u τ= . El parámetro N
corresponde al factor de reducción angular del juego de engranajes que acopla el eje
del motor al eje del brazo manipulador; B es el coeficiente de fricción viscosa y J es
el momento de inercia; c es una constante que iguala al triple del producto MgL,
donde M es la masa del brazo, g es la aceleración de la gravedad y L es la distancia
del eje al centro de masa del brazo manipulador.
El punto de equilibrio del sistema, parametrizado con respecto al torque nominal U,
está dado por:
1 20 0x x= ⇒ =�
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 43 -
12 2
10 sin
xB cx x u
J J N J
= ⇒ − − +
�
12
1sin
xc Bx u
J N J J
− = −
11sin arcsin
x u ux N
N c c
= ⇒ =
1 arcsinU
u U x Nc
= ⇒ =
arcsin ;0;U
pe N Uc
=
Donde U<c
En este caso se trata de un sistema de segundo orden, con lo cual las matrices
constantes A, B y C son las siguientes:
1 1
1 2
12 2
1 2
0 1
cos
= = = − −
pepe
df df
dx dxA xc B
df dfNJ c J
dx dx
21
2
0 10 1
cos sin 1c U B c U BN
NJ c J NJ c J
−
= − − − − −
1
2
0
1
= = Pe
df
duBdf
Jdu
[ ]1 0C =
El sistema linealizado alrededor del punto de equilibrio es el siguiente:
1 12
2 22
0 1 0
11
= + − − −
�
�
x xuc U Bx x
JNJ c J
δ δ
δ
δ δ
(4.4)
[ ] 1
2
1 0
=
xy
xδ
δ
δ
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 44 -
IV.1.1.3. Posición de un anillo sobre un aro rotatorio
Considérese el caso de un anillo que se desliza sin roce sobre un aro que se puede
hacer girar a velocidad angular ω, regulable a voluntad (ver figura 4.3).
Figura 4.3: Aro rotatorio sobre el que se desliza un anillo.
Se desea mantener el valor del ángulo θ en un valor constante deseado dado por θ =
Ө. La variable de control en este caso está constituida por el cuadrado de la velocidad
angular 2u = ω . El radio del aro, que se supone indeformable por efecto de la fuerza
centrífuga, está dado por a.
El modelo del sistema es el siguiente:
22
2sin sin cos
da g
dt
θθ αω θ θ= − + (4.5)
Este modelo se puede reescribir mediante las siguientes ecuaciones diferenciales
ordinarias:
1 2x x=�
( ) ( ) ( )2 1 1 1sin sin cosg
x x u x xa
= − +� (4.6)
1( )y x t=
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA
- 45 -
El punto de equilibrio parametrizado en términos de la posición angular θ = Ө
deseada, está dado por:
1x Xθ= =
1 20 0x x= ⇒ =�
2 0cos( )
gx U
a X= ⇒ =�
,0,cos( )
=
gPe X
a X
Las matrices constantes A, B y C para este caso, están dadas por:
1 1
1 2
2 22 2 1 1 1
1 2
0 1
cos( ) (cos ( ) sin ( )) 0Pe
Pe
df df
dx dxA g
df df x u x xa
dx dx
= = − + −
2 2
0 1
cos( ) (cos ( ) sin ( )) 0cos( )
A g gX X X
a a X
= − + − −
0 1
tan( )sin( ) 0A g
X Xa
= −
1
1 12
0 0
sin( ) cos( ) sin( ) cos( )Pe
Pe
df
duBx xdf X X
du
= = =
[ ]1 2
1 0dy dy
Cdx dx
= =
El sistema linealizado alrededor del punto de equilibrio deseado, es de la manera
siguiente: