Subido por Daniel Flores

Método derivativo de Euler para la estimación de la velocidad de un robot péndulo

Anuncio
Benemérita Universidad Autónoma de Puebla
Facultad de Ciencias de la Electrónica
Licenciatura en Ciencia de la Electrónica
Robótica I
Otoño 2023
Presenta:
Daniel de Jesús Flores Ramírez 201966599
Catedrático:
Dr. Fernando Reyes Cortés
1 de septiembre de 2023
Tabla de contenido
Resumen ..................................................................................................................................... 2
Propósitos y desarrollo de habilidades ....................................................................................... 3
1.
Introducción ..................................................................................................................... 4
2.
Planteamiento y descripción del problema....................................................................... 5
3.
Solución del problema.................................................................................................... 10
4.
Conclusiones .................................................................................................................. 15
Referencias bibliográficas ........................................................................................................ 16
Anexo ....................................................................................................................................... 17
Resumen
Se realizó la estimación de velocidad y posición para los datos experimentales de un péndulo.
Considerando la posición real proporcionada por los datos, se intenta obtener la velocidad, para
esto se utilizaron tres métodos diferentes: diferenciación numérica, filtrado recursivo y el método
de Runge-Kutta para filtro continuo; donde en MATLAB se implementaron a partir de la
derivada de Euler, filtrado discreto y la función ODE45 respectivamente.
Una vez obtenidas las aproximaciones con esos métodos, se hizo la comparación con los
datos experimentales a partir de los conceptos de error absoluto y error relativo, esto con la
finalidad de saber cuál de los métodos es mejor. Finalmente se ocupó el proceso contrario a la
derivada de Euler, la integral de Euler, para obtener una aproximación a la posición a partir de
los datos experimentales de la velocidad, para comparar con los datos reales y obtener de igual
forma el error relativo y conocer su eficacia.
Propósitos y desarrollo de habilidades
Propósitos
•
Desarrollar modelos cinemáticos y dinámicos para diferentes configuraciones
mecánicas de robots manipuladores.
•
Obtener conocimientos teóricos y prácticos, con la finalidad de adquirir una formación
científica sólida e integral de alta calidad en el campo de la robótica, tal que, le
permite analizar, diseñar e implementar proyectos científicos.
•
Formar recursos humanos con conocimientos y habilidades científicas y tecnológicos
sólidos en el campo de la robótica.
Desarrollo de habilidades
•
Aplicar modelos teóricos y experimentales mediante el análisis de sistemas con la
finalidad de validad y/o mejorar su comportamiento y desempeño.
•
Automatizar sistemas a través de técnicas de programación y/o diseño con enfoque de
calidad para mejor eficiencia.
•
Seleccionar sensores, actuadores, interfaces y/o sistemas de control de acuerdo a las
necesidades requeridas para el correcto funcionamiento de los sistemas robóticos.
1. Introducción
La velocidad puede representarse como el cambio de la posición de un objeto con respecto al
tiempo, de forma matemática, esto se pude representar a partir de la derivada de una función que
contenga la posición, es así que solo teniendo los datos de posición de una función, se puede
hacer una estimación de la velocidad, para esto se ocupan diferentes métodos capaces de estimar
la derivada de una función; en este reporte se aplican los métodos de filtro recursivo, filtro
continuo y diferenciación numérica.
Por otra parte, si se puede obtener la velocidad a partir de la posición, también existe el
método inverso para obtener la posición a partir de velocidad. La antiderivada es la relación
inversa de la derivada, la cual puede representarse por una integral indefinida, por lo tanto, si se
obtiene la integral definida de la velocidad, se obtendrá una estimación a la posición. En este
reporte se utiliza el método integrativo de Euler para tratar datos experimentales de la velocidad
y obtener la posición.
Al momento de querer ver qué tan efectiva es una estimación, es necesario considerar el
concepto de error absoluto y el concepto de error relativo; el primero hace referencia a la diferencia
entre el valor esperado y el valor que se ha obtenido, este error sirve como indicador de la
imprecisión de un método, en este caso, el valor esperado hace referencia a los datos
experimentales brindados por el catedrático del curso, mientras que el valor obtenido son los datos
estimados a partir de los métodos ya mencionados. El valor relativo es el cociente entre el error
absoluto y el valor considerado como exacto, este error tiene la misión de servir como indicador
de la calidad de un método, un método se considerará de mejor calidad cuanto más pequeño es el
error relativo que se tenga.
2. Planteamiento y descripción del problema
Considerando los valores experimentales de posición del péndulo, se pretende obtener una
estimación de la velocidad. Para empezar, se realiza el método de Euler, también conocido como
diferenciación numérica, donde a la definición de derivada se le aplica la técnica de muestreo,
obteniendo:
[
𝑑
𝑓(𝑡𝑘 + ∆𝑡𝑘 ) − 𝑓(𝑡𝑘 )
𝑓(𝑡𝑘 + ℎ) − 𝑓(𝑡𝑘 ) 𝑓𝑡𝑘 − 𝑓𝑡𝑘−1
𝑓(𝑡)] ≈ lim
≈ lim
≈
∆𝑡𝑘 →0
ℎ→0
𝑑𝑡
∆𝑡𝑘
ℎ
ℎ
𝑡𝑘
Donde:
•
𝑡𝑘 = 𝑘ℎ y 𝑡𝑘−1 = (𝑘 − 1)ℎ
→ ∆𝑡𝑘 = 𝑡𝑘 − 𝑡𝑘−1 = 𝑘ℎ − (𝑘 − 1)ℎ = ℎ
Entonces, aplicando algunas sustituciones, se encuentra que una expresión equivalente es:
[
𝑓𝑡 − 𝑓𝑡𝑘−1
𝑑
𝑓(𝑡)] ≈ 𝑘
𝑑𝑡
𝑡𝑘 − 𝑡𝑘−1
𝑡𝑘
Se muestra esto porque esta última expresión fue la que se implementó en MATLAB a través
del siguiente código:
%Euler
derEuler=ones(renglon,columna);
for k=2:columna
derEuler(1,k)=(u(k)-u(k-1))/(Tiempo(k)-Tiempo(k-1));
end
𝑢(𝑘) − 𝑢(𝑘 − 1)
𝑇𝑖𝑒𝑚𝑝𝑜(𝑘) − 𝑇𝑖𝑒𝑚𝑝𝑜(𝑘 − 1)
Se tiene una expresión que representa la aproximación de la derivada, donde u representa a la
entrada que es la posición, así que se espera obtener la estimación de la velocidad.
Para la siguiente parte de la solución, ahora se intenta obtener una estimación de la velocidad
a partir del uso de un filtro recursivo. Se utiliza la siguiente función de transferencia que
corresponde a un filtro pasa bajas:
𝑥𝑢
𝜆
𝜆
=
→ 𝑥𝑢 =
𝑢
𝑢
𝑠+𝜆
𝑠+𝜆
𝑥̇ 𝑢 (𝑡) = −𝜆𝑥𝑢 (𝑡) + 𝜆𝑢(𝑡)
Donde:
•
•
•
•
𝜆 es la frecuencia de corte.
𝑥𝑢 (𝑡) es el estado del filtro y representa la señal filtrada de 𝑢(𝑡).
𝑢(𝑡) es la entrada.
𝑥̇ 𝑢 (𝑡) representa la estimación de la derivada de la señal filtrada.
La forma recursiva del filtro pasa bajas es la siguiente:
𝑥𝑢 (𝑡𝑘 ) = 𝑒 −ℎ𝜆 𝑥𝑢 (𝑡𝑘−1 ) + (1 − 𝑒 −ℎ𝜆 )𝑢(𝑡𝑘−1 ), donde 𝑥𝑢 (𝑡𝑘 ) es la señal filtrada de 𝑢(𝑡𝑘 )
Por lo tanto, la estimación de la derivada 𝑢(𝑡𝑘 ) es representada por 𝑢̇ (𝑡) ≃ 𝑥𝑝 (𝑡𝑘 ), y se
encuentra dada por:
𝑥𝑝 (𝑡𝑘 ) = −𝜆𝑥𝑢 (𝑡𝑘 ) + 𝜆𝑢(𝑡𝑘 ), tal que representa la derivada de la señal filtrada
De modo que, u que representa la posición, primero entrará al filtro y después este filtro serpa
ingresado a la derivada, se realizó como se muestra en la siguiente parte del código.
%Filtro Recursivo
[renglon,columna]=size(Tiempo);
u=Posicion; %Entrada u
x_u=zeros(renglon,columna);
x_pu=zeros(renglon,columna);
lambda=100;
for k=2:columna
x_u(k)=exp(-h*lambda)*x_u(k-1)+(1-exp(-h*lambda))*u(k-1);
x_pu(k)=-lambda*x_u(k)+lambda*u(k);
end
Con esa parte del código, se obtiene la estimación de la velocidad a partir del filtro recursivo.
Otro método que se implementó fue usando la función de MATLAB ode45 donde se utilizó el
filtro mostrado anteriormente sin tener que usar su forma recursiva. Este comando ode45 manda
a llamar a una función que será con la que trabaje, esta función a la que manda a llamar fue
escrita del siguiente modo:
function xp=FilCont(t,x)
global lambda Posicion Tiempo
FPos=interp1(Tiempo, Posicion, t);
xp=-lambda*x+lambda*FPos;
end
𝑥𝑝 = −𝜆𝑥 + 𝜆𝐹𝑝𝑜𝑠
Donde
• 𝐹𝑝𝑜𝑠 es la señal de entrada u(t)
Se observa que el código descrito es equivalente a la forma del filtro. Ahora se muestra cómo
se hizo uso de ode45
%ODE45
cond_iniciales=[0;0];
opciones=odeset('RelTol',1e-6,'AbsTol',1e-6,'InitialStep',h,'MaxStep',h);
[t,x]=ode45('FilCont',Tiempo,cond_iniciales,opciones);
xp=FilCont(t,x);
Se aplicó la configuración vista en clase para las condiciones iniciales y las opciones, de ahí
se usa ode45 que manda a llamar a la función, finalmente nuestra aproximación a la deriva se
tendrá en xp.
Ya teniendo todas las estimaciones de velocidad, es necesario saber cuál método tiene mayor
eficacia, esto se sabrá a partir de los conceptos de error absoluto y error relativo.
El error absoluto de una medida es la diferencia entre el valor real de la medida y el valor que
se ha obtenido en la medición.
𝐸𝑎 = 𝑋̅ − 𝑋𝑖
Por otro lado, el error relativo es el cociente entre el error absoluto y el valor real que es
considerado como el valor exacto. Al multiplicar esto por 100, se obtiene el porcentaje de error.
𝐸𝑟 =
𝐸𝑎
∗ 100%
𝑋̅
Se implementaron estas ecuaciones en MATLAB del siguiente modo:
%Cálculo del error
EAbs_Filtro = abs(velocidad-x_pu);
ERel_Filtro = (EAbs_Filtro/velocidad)*100
La expresión descrita en el código es para el caso del filtro recursivo, pero se usa la misma
estructura para los otros métodos.
Finalmente, como último punto del reporte, se usará el método de Euler para la integración
numérica. En este caso, se tomarán los datos reales de la velocidad que es la derivada, por lo que
al integrarla nos devolverá una estimación de la posición. Se parte de la definición matemática de
la derivada y se aproxima por medio de su forma discreta.
𝐼(𝑡 + Δ𝑡) − 𝐼(𝑡)
Δ𝑡→0
Δ𝑡
𝐼 (̇ 𝑡) = lim
𝐼 (̇ 𝑡𝑘 ) =
𝐼(𝑡𝑘 ) − 𝐼(𝑡𝑘−1 ) 𝐼(𝑡𝑘 ) − 𝐼(𝑡𝑘−1 )
=
= 𝑓(𝑡𝑘 )
𝑡𝑘 − 𝑡𝑘−1
ℎ
Donde
•
𝑡𝑘 = 𝑘ℎ y 𝑡𝑘−1 = (𝑘 − 1)ℎ
→ ∆𝑡𝑘 = 𝑡𝑘 − 𝑡𝑘−1 = 𝑘ℎ − (𝑘 − 1)ℎ = ℎ
Finalmente despejando la integral discreta:
𝐼(𝑡𝑘 ) = 𝐼(𝑡𝑘−1 ) + ℎ𝑓(𝑡𝑘 )
Así es como a partir de la derivada, se obtiene la función original con la integración numérica.
Esta expresión se implementó del siguiente modo:
%Estimación de la posición a través de la
integral
I_euler=zeros(renglon,columna);
for k=2:columna
I_euler(k)=I_euler(k-1)+h*velocidad(k);
End
𝐼(𝑡𝑘 ) = 𝐼(𝑡𝑘−1 ) + ℎ ∗ 𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑(𝑡𝑘 )
Donde
•
𝑣𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑(𝑡𝑘 ) es la señal 𝑓(𝑡𝑘 )
A esta estimación de la posición también se le calculará el error de la forma que ya se
describió.
3. Solución del problema
Ahora se presentarán los resultados de lo descrito en la sección anterior. En la siguiente
imagen se muestran las gráficas de las velocidades estimadas por cada uno de los métodos.
Imagen 1. Gráficas de estimaciones de velocidad
A simple vista se observa que todas tienen la misma forma, es por eso por lo que, para
observar una mejor comparación, en la siguiente imagen se muestran estas mismas gráficas,
ahora sobrepuestas.
Imagen 2. Gráficas de estimaciones de velocidad sobrepuestas
La única que solo percibir un poco distinta por su amplitud es la correspondiente a la
velocidad estimada por filtro recursivo, mientras que pareciera que las demás son idénticas. En la
siguiente imagen se muestra la anterior, pero con un acercamiento para visualizar las diferencias.
Imagen 3. Acercamiento gráficas de estimaciones de velocidad sobrepuestas
Ahí ya se logra apreciar que en realidad ninguna gráfica es completamente igual, es por lo
que solo se denominan estimaciones. Ahora bien, para saber cuál método tuvo una mejor
estimación, se presentan los resultados para sus errores relativos calculados con MATLAB.
𝐸𝑟 𝑅𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑜 = 2.1899 %
𝐸𝑟 𝐸𝑢𝑙𝑒𝑟 = 0.0458 %
𝐸𝑟 𝑜𝑑𝑒45 = 0.2711 %
→ 𝐸𝑟 𝐸𝑢𝑙𝑒𝑟 < 𝐸𝑟 𝑜𝑑𝑒45 < 𝐸𝑟 𝑅𝑒𝑐𝑢𝑟𝑠𝑖𝑣𝑜
Por lo tanto, el método que mejores resultados dio, con base en el concepto de error
relativo es el método de diferenciación numérica, es decir, el método de Euler. Además de esto,
en la siguiente imagen se presentan las gráficas de los errores absolutos calculados para cada uno
de los métodos.
Imagen 4. Error absoluto para cada uno de los métodos para la estimación de la velocidad
Esta gráfica solo reafirma lo que ya se había mencionado, al tratarse de error, el objetivo es
que su gráfica tengo la menor amplitud posible, y eso corresponde al método de Euler.
Ahora para la estimación de la posición a partir de los datos de la velocidad, solo se ocupó un
método, en la siguiente imagen se muestran las gráficas por separado.
Imagen 5. Gráfica de posición real y gráfica de posición estimada
Se observa una buena estimación ya que posee la misma forma con relación a la real, en la
siguiente imagen se muestran ahora las gráficas sobrepuestas.
Imagen 6. Gráfica de posición real y gráfica de posición estimada sobrepuestas
Para percibir mejor las diferencias, se hacen varios acercamientos.
Imagen 7. Acercamientos gráfica de posición real y gráfica de posición estimada sobrepuestas
Se tuvieron que realizar varios acercamientos para identificar a simple vista las diferencias.
Esto de manera empírica dice que es una estimación muy buena, ahora bien, para respaldar esto
científicamente, se ocupa el error relativo, el cual fue el siguiente:
𝐸𝑟 𝐼𝐸𝑢𝑙𝑒𝑟 = 0.0511%
Lo que demuestra que la integración numérica por método de Euler es muy eficaz. Finalmente se
presenta la gráfica de error absoluto.
Imagen 8. Gráfica de error absoluto para la estimación de la posición
Se observa que las amplitudes de la gráfica son muy pequeñas, lo cual es muy bueno.
4. Conclusiones
Se hizo la estimación de velocidad a partir de datos reales y se verificó la eficacia de cada
método. Al usar el método de filtro recursivo se obtuvo una estimación con gráfica similar en
cuanto a la forma en comparación con la gráfica de los datos experimentales, sin embargo, las
amplitudes en los máximos y mínimos variaban, al calcular su error se obtuvo que este método
tuvo un 2.1899 % de error. Por otro lado, al hacer la diferenciación numérica que corresponde al
método de Euler, se observa una gráfica casi idéntica que, al hacer zoom, se observa una
aproximación a través de rectas tangentes; su porcentaje de error fue de 0.0458 %. Finalmente,
con el método de filtrado continuo con ode45, se obtuvo un pequeño desfase con relación a la
velocidad experimental, teniendo un porcentaje de error de 0.2711 %. Con base en esto se pudo
desterminar que el método que mejor estimación generó fue el método de Euler para
diferenciación numérica, destacando que los otros métodos también son muy buenos. Además de
la estimación de la velocidad, también se hizo la estimación de posición a partir de los datos
experimentales de la velocidad, para esto se usó el método e integración numérica de Euler,
obteniendo resultados bastante positivos ya que solo contó con un error de 0.0511%. Con esto se
comprueba que el método de integración y derivativo de Euler es muy eficaz y debería ser el
primero a considerar al hacer este tipo de aplicaciones.
Referencias bibliográficas
•
Reyes, F. (2012). MATLAB APLICADO A ROBÓTICA Y MECATRÓNICA. Editorial
Alfaomega, México.
•
Reyes, F. (2023). Robótica 1 [Diapositivas de curso]. Benemérita Universidad
Autónoma de Puebla.
•
Posadas, A. (s.f.). Determinación de errores y tratamiento de datos. Recuperado de
Universidad de Almería, página web: https://w3.ual.es/~aposadas/TeoriaErrores.pdf
Anexo
Código de MATLAB
clc; %Limpia la pantalla
clear all; %Limpia memoria asignada a variables
close all; %cierra gráficas o archivos previamente abiertos
format short; %Formato corto que despliega cuatro fracciones después del punto decimal
global lambda Posicion Tiempo
%Cargar Datos del péndulo
A = load('pendulo.datos');
T = A(1:10001,1); %Datos de la columna de tiempo
Tiempo = T'; %Trasponer tiempo para tener una fila, consiguiendo el vector de tiempo
h=0.0025; %Muestreo
%Trasposición de la posición
Pos = A(1:10001,2);
Posicion = Pos';
%Trasposición de la velocidad
Vel = A(1:10001,3);
velocidad = Vel';
%Filtro Recursivo
[renglon,columna]=size(Tiempo);
u=Posicion; %Entrada u
x_u=zeros(renglon,columna);
x_pu=zeros(renglon,columna);
lambda=100;
for k=2:columna
x_u(k)=exp(-h*lambda)*x_u(k-1)+(1-exp(-h*lambda))*u(k-1);
x_pu(k)=-lambda*x_u(k)+lambda*u(k);
end
%Euler
derEuler=ones(renglon,columna);
for k=2:columna
derEuler(1,k)=(u(k)-u(k-1))/(Tiempo(k)-Tiempo(k-1));
end
%ODE45
cond_iniciales=[0;0];
opciones=odeset('RelTol',1e-6,'AbsTol',1e-6,'InitialStep',h,'MaxStep',h);
[t,x]=ode45('FilCont',Tiempo,cond_iniciales,opciones);
xp=FilCont(t,x);
traspuestaxp=xp(1:10001,2)';
%Cálculo del error
EAbs_Filtro = abs(velocidad-x_pu);
ERel_Filtro = (EAbs_Filtro/velocidad)*100
EAbs_Euler = abs(velocidad-derEuler);
ERel_Euler = (EAbs_Euler/velocidad)*100
EAbs_ode = abs(velocidad-traspuestaxp);
ERel_ode = (EAbs_ode/velocidad)*100
%Gráfica de errores
figure(1)
plot(Tiempo,EAbs_Euler,'r',Tiempo,EAbs_Filtro,'g',Tiempo,EAbs_ode,'m')
title('Error Absoluto')
legend('Error Método de Euler','Error Filtro Recursivo','Error ode45')
figure(2)
plot(Tiempo,velocidad,'r',Tiempo,x_pu,'b',Tiempo,derEuler,'g',Tiempo,xp,'m')
title('Estimación de Velocidad')
legend('Velocidad Real','Velocidad Estimada por Filtro Recursivo','Velocidad Estimada
Método de Euler','Velocidad Estimada ode45')
figure(3)
subplot(4,1,1);plot(Tiempo,velocidad,'r')
title('Velocidad Real')
subplot(4,1,2);plot(Tiempo,x_pu,'b')
title('Estimación de Velocidad por Filtro Recursivo')
subplot(4,1,3);plot(Tiempo,derEuler,'g')
title('Estimación de Velocidad Método de Euler')
subplot(4,1,4);plot(Tiempo,xp,'m')
title('Estimación de Velocidad Filtro Continuo (ode45)')
%Estimación de la posición a través de la integral
I_euler=zeros(renglon,columna);
for k=2:columna
I_euler(k)=I_euler(k-1)+h*velocidad(k);
end
%Cálculo del error
EAbs_IEuler = abs(Posicion-I_euler);
ERel_IEuler = (EAbs_IEuler/Posicion)*100
%Gráfica de errores
figure(4)
plot(Tiempo,EAbs_IEuler)
title('Error Absoluto')
legend('Error Método de Euler')
figure(5)
subplot(2,1,1);plot(Tiempo,Posicion,'r')
title('Posición Real')
subplot(2,1,2);plot(Tiempo,I_euler,'b')
title('Estimación de Posición Método de Euler')
figure(6)
plot(Tiempo,Posicion,'r--',Tiempo,I_euler,'g')
title('Estimación de Posición')
legend('Posición Real','Posición Estimada Método de Euler')
Workspace
Descargar