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