Está en la página 1de 26

CAPÍTULO III: GNU OCTAVE

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)

- 20 -
CAPÍTULO III: GNU OCTAVE

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.

- 21 -
CAPÍTULO III: GNU OCTAVE

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

- 22 -
CAPÍTULO III: GNU OCTAVE

Cálculo de la ecuación diferencial y de la simulación.


Las ecuaciones planteadas en función de I1 e I 2 son las siguientes, sabiendo que:

I 2 = ic

−Vf + R1 I1 + R2 ( I1 − I 2 ) = 0 (3.1)

− R2 ( I1 − I 2 ) + Vc = 0 (3.2)

Sustituyendo I 2 en la ecuación (3.1) y (3.2).

−Vf + ( R1 + R2 ) I1 − R2ic = 0 (3.3)

− R2 I1 + R2ic + Vc = 0 (3.4)

Se despeja I1 de la ecuación (3.4)

R2ic + Vc
R2 I1 = R2ic + Vc ⇒ I1 =
R2

Se sustituye I1 en la ecuación (3.3)

 R ic + Vc 
−Vf + ( R1 + R2 )  2  − R2ic = 0 (3.5)
 R2 

Se despeja ic de la ecuación (3.5) y se obtiene:


Vf Vc ( R1 + R2 )
ic = − (3.6)
R1 R2 R1

cdVc
Si ic = entonces se sustituye en la ecuación (3.6) y se obtiene la ecuación
dt
diferencial:
dVc ( R + R2 ) Vc + Vf
=− 1
dt R1 R2 c R1c

La simulación de esta ecuación diferencial ordinaria para un primer periodo de señal


cuadrada se presenta de la manera siguiente:

- 23 -
CAPÍTULO III: GNU OCTAVE

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])

- 24 -
CAPÍTULO III: GNU OCTAVE

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:

- 25 -
CAPÍTULO III: GNU OCTAVE

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:

- 26 -
CAPÍTULO III: GNU OCTAVE

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])

- 27 -
CAPÍTULO III: GNU OCTAVE

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

- 28 -
CAPÍTULO III: GNU OCTAVE

Sistemas de segundo orden

A continuación un ejemplo en el cual se tiene un sistema de segundo orden simulado.

dx1
= 43540.64924*Vf-1114055432*iL-74871.02986*Vc
dt
dx2
= 34.27862866*Vc+2.872134427*Vf-109646.5323*iL
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

- 29 -
CAPÍTULO III: GNU OCTAVE

__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.

- 30 -
CAPÍTULO III: GNU OCTAVE

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.

- 31 -
CAPÍTULO III: GNU OCTAVE

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.

- 32 -
CAPÍTULO III: GNU OCTAVE

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.

- 33 -
CAPÍTULO III: GNU OCTAVE

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.

- 34 -
CAPÍTULO III: GNU OCTAVE

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.

- 35 -
CAPÍTULO III: GNU OCTAVE

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

- 36 -
CAPÍTULO III: GNU OCTAVE

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.

- 37 -
CAPÍTULO IV
CONTROL LINEAL DE SISTEMAS
NO LINEALES: LINEALIZACIÓN
APROXIMADA
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

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

- 39 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

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:

x1 = x2
FL
x2 = sin( x3 ) (4.1)
J
x3 = 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:

x1 = 0 ⇒ x2 = 0
FL
x2 = 0 ⇒ sin( x3 ) = 0 ⇒ x3 = 0
J
x3 = 0 ⇒ Ru = 0 ⇒ U = 0

- 40 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

x1 = arbitrario = θ
Pe = (θ , 0, 0, 0) 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:

 df1 df1 df1 


 
 dx1 dx2 dx3  0 1 0  0 1 0 
 df df 2 df 2   FL   FL 
A= 2  = 0 0 cos( x3 )  = 0 0
 dx1 dx2 dx3   J   J 
 df 3 0 0  0 0 0 
df3 df3   0  pe 
 
 dx1 dx2 dx3  Pe
 df1 
 du 
  0
df 2 
B=  =  0 
 du 
   R 
 df 3 
 du  Pe
 dy dy dy 
C=  = [1 0 0]
 dx1 dx2 dx3  X

La linealización del sistema alrededor del punto de equilibrio es el siguiente:

0 1 0 
 x1δ    x1δ   0 
 x  = 0 0 FL     
 2δ   x2δ + 0 uδ (4.2)
J    
 x3δ    x  R
0 0 0   3δ   
 x1δ 
yδ = [1 0 0]  x2δ 
 
 x3δ 

- 41 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

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:

x1 = x2
B c x  1
x2 = − x2 − sin  1  + u (4.3)
J J N J
y = x1

Donde x1 = θ P (posición angular), x2 = θP (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:

x1 = 0 ⇒ x2 = 0

- 42 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

B c x  1
x2 = 0 ⇒ − x2 − sin  1  + u
J J N J
c x  B 1
− sin  1  = x2 − u
J N J J
x  u u
sin  1  = ⇒ x1 = N arcsin  
N c c
U 
u = U ⇒ x1 = N arcsin  
c
 U  
pe =  N arcsin   ;0;U  Donde U<c
 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:

 df1 df1 
 dx  0 1 
dx2 
A=
1
 = c x  B
 =
 df 2 df 2  − cos  1  − 
 NJ c J  pe
 dx
 1 dx2  pe 
 0 1   0 1 
 = 
 − c cos  N sin −1  U   − B   − c 1 − U
2
B
 NJ    − 
  c  J   NJ c2 J
 df1 
 du  0
B =   = 1
 df 2   
 
 du  Pe  J 
C = [1 0]

El sistema linealizado alrededor del punto de equilibrio es el siguiente:

 0 1  0
 x1δ     x1δ   
 x  =  c U2 B   + 1 uδ (4.4)
 2δ   − 1− 2 −   x2δ   
 NJ c J J 
x 
yδ = [1 0]  1δ 
 x2δ 

- 43 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

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 u = ω2 . 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:

d 2θ
a = − g sin θ + αω 2 sin θ cos θ (4.5)
dt 2

Este modelo se puede reescribir mediante las siguientes ecuaciones diferenciales


ordinarias:

x1 = x2
g
x2 = − sin ( x1 ) + u sin ( x1 ) cos ( x1 ) (4.6)
a
y = x1 (t )

- 44 -
CAPÍTULO IV: LINEALIZACIÓN APROXIMADA

El punto de equilibrio parametrizado en términos de la posición angular θ = Ө


deseada, está dado por:

x1 = θ = X

x1 = 0 ⇒ x2 = 0
g
x2 = 0 ⇒ U =
a cos( X )
 g 
Pe =  X , 0, 
 a cos( X ) 

Las matrices constantes A, B y C para este caso, están dadas por:

 df1 df1 
 dx  0 1
dx2 
A= 1  = g 
 df 2 df 2   − cos( x1 ) + u (cos 2 ( x1 ) − sin 2 ( x1 )) 0
 dx  a  Pe
 1 dx2  Pe
 0 1

A= g g 
 − cos( X ) + − (cos ( X ) − sin ( X )) 0 
2 2

 a a cos( X ) 
 0 1

A= g 
 − tan( X ) sin( X ) 0 
 a 
 df1 
 du   0   0 
B=  =  = 
 df 2  sin( x1 ) cos( x1 )  Pe sin( X ) cos( X ) 
 du  Pe
 dy dy 
C=  = [1 0]
 dx1 dx2 

El sistema linealizado alrededor del punto de equilibrio deseado, es de la manera


siguiente:

- 45 -

También podría gustarte