{"id":1486,"date":"2018-12-23T12:13:13","date_gmt":"2018-12-23T17:13:13","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/edelros\/?p=1486"},"modified":"2019-01-19T06:29:01","modified_gmt":"2019-01-19T11:29:01","slug":"grafica-radar-plantilla-en-vivo","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/edelros\/grafica-radar-plantilla-en-vivo\/","title":{"rendered":"4. Grafica radar - Python"},"content":{"rendered":"<p>Terminados los pasos anteriores, se usan los datos enviados por el arduino al puerto serial para realizar el grafico.<\/p>\n<p>La gr\u00e1fica se presenta en formato de coordenadas polares, que en la librer\u00eda matplotlib se requieren en radianes. Antes de graficar se realiza una conversi\u00f3n.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/edelros\/files\/2019\/01\/GraficoRadar05.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1487\" src=\"http:\/\/blog.espol.edu.ec\/edelros\/files\/2019\/01\/GraficoRadar05.gif\" alt=\"\" width=\"640\" height=\"480\" \/><\/a><\/p>\n<p>Del ejemplo se\u00a0 muestra que se crean <em>tres elementos<\/em>:<\/p>\n<ul>\n<li><strong><em>Pulso Punto,<\/em><\/strong> que marca el punto de la lectura \"actual\", la \u00faltima recibida.<\/li>\n<li><em><strong>Pulso Linea<\/strong><\/em>, que traza la distancia entre el punto de origen y lectura \"actual\"<\/li>\n<li><strong><em>barrido<\/em><\/strong>, que grafica una linea de barrido del radar usando un grupo de puntos recibidos y almacenados en un vector.<\/li>\n<\/ul>\n<p>Dado que los datos llegan \"en vivo\", la gr\u00e1fica es animada, y se actualizan los datos de los <em>tres elementos<\/em> generando una nueva imagen en la funci\u00f3n <em><strong>unatrama<\/strong><\/em>() de la animaci\u00f3n. En la animaci\u00f3n, se usa la opci\u00f3n 'blit' en la para actualizar solo los elementos del gr\u00e1fico, manteniendo los ejes, t\u00edtulos, etc sin cambios.<\/p>\n<p>En las instrucciones en Python se usan n\u00fameros aleatorios para realizar la presentaci\u00f3n.<\/p>\n<p><strong><em>Tarea<\/em><\/strong><\/p>\n<p>Integrar con la entrega de datos del experimento arduino. Observe que se debe sincronizar los tiempos de lectura del sensor, servo, datos Serial, gr\u00e1fico, junto a los rangos de distancia del gr\u00e1fico.<\/p>\n<p>Use como referencia, Grafica animada:<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/edelros\/grafica-animada-datos-serial\/\">http:\/\/blog.espol.edu.ec\/edelros\/grafica-animada-datos-serial\/<\/a><\/p>\n<h4>Intrucciones en Python<\/h4>\n<pre># Grafica \"en vivo\" para actualizar datos\r\n# recibidos por puerto serial\r\n# Plantilla para proyecto, datos de prueba aleatorios\r\n# http:\/\/blog.espol.edu.ec\/edelros\/category\/arduino\/radar-ultrasonido\/\r\n# Tarea: Actualizar los datos en la funci\u00f3n una trama para ri,yi\r\n#        Con los obtenidos desde el puerto Serial\r\n\r\nimport matplotlib.pyplot as plt\r\nimport matplotlib.animation as animation\r\nimport numpy as np\r\nimport random as rnd\r\n\r\n# PARAMETROS DE LA GRAFICA\r\n# angulo\r\navance = 20\r\nangulo = avance\r\na = avance\r\nb = 180-avance\r\n# alcance del radar\r\nalcance = 50\r\n\r\n# Datos a graficar\r\nxi = [avance]\r\nyi = [0]\r\n\r\n# GRAFICA figura\r\n# tiempo entre tramas\r\nretraso = 1000\r\nfigura = plt.figure()\r\ngrafica = figura.add_subplot(111, projection='polar')\r\ngrafica.set_xlim(0,np.pi)\r\ngrafica.set_ylim(0,alcance)\r\ngrafica.set_title('Radar de Ultradonido')\r\n\r\n# Linea de barrido y ventana de datos a graficar\r\ntamano = (180\/\/avance)\/\/2\r\n# El gr\u00e1fico usa radianes\r\nri = np.array(xi[-tamano:])\/180*np.pi\r\ndi = yi[-tamano:]\r\nbarrido, = grafica.plot(ri, di, 'y')\r\n\r\n# linea del pulso y puntoreferencia:\r\npulsox = [0,ri[-1]]\r\npulsoy = [0,di[-1]]\r\nPulsoLinea, = grafica.plot(pulsox,pulsoy,'g')\r\nPulsoPunto, = grafica.plot(ri[-1],yi[-1],'go')\r\n\r\n# Nueva Trama\r\ndef unatrama(i, xi, yi,angulo,avance):\r\n\r\n    # ---DATOS EJEMPLO|INICIO\r\n\r\n    # Posici\u00f3n en \u00e1ngulo\r\n    if len(xi)&gt;0:\r\n        angulo = xi[-1]\r\n    else:\r\n        angulo = 0\r\n    # Direcci\u00f3n de barrido\r\n    direccion = 1\r\n    if (len(xi)&gt;=2):\r\n        sentido = xi[-1]-xi[-2]\r\n        direccion = np.sign(sentido)\r\n        if angulo&gt;=(180-avance) and sentido&gt;0:\r\n            direccion = -1\r\n        if angulo&lt;=avance and sentido&lt;0:\r\n            direccion = 1\r\n\r\n    angulo = angulo + direccion*avance\r\n   \r\n    # alcance del radar\r\n    alcance = 50\r\n    # Recibe un dato nuevo| ejemplo usa aleatorio\r\n    undato = int(rnd.random()*alcance)+1\r\n    # ---DATOS EJEMPLO|INICIO\r\n\r\n    # actualiza datos xi, yi\r\n    xi.append(angulo) \r\n    yi.append(undato)# numero del dato ejemplo\r\n\r\n    # ventana de datos a graficar\r\n    tamano = (180\/\/avance)\/\/2\r\n\r\n    # Linea de radar, el gr\u00e1fico usa radianes\r\n    ri = np.array(xi[-tamano:])\/180*np.pi\r\n    di = yi[-tamano:]\r\n    barrido.set_xdata(ri)\r\n    barrido.set_ydata(di)\r\n    \r\n    # Linea y punto del Pulso\r\n    pulsox = [0,ri[-1]]\r\n    pulsoy = [0,yi[-1]]\r\n    \r\n    PulsoLinea.set_xdata(pulsox)\r\n    PulsoLinea.set_ydata(pulsoy)\r\n\r\n    PulsoPunto.set_xdata(pulsox[1])\r\n    PulsoPunto.set_ydata(pulsoy[1])  \r\n\r\n    # Presenta valores \u00faltimos valores en pantalla\r\n    print(xi[-1],yi[-1])\r\n\r\n    # Si los datos son m\u00e1s de 1000\r\n    # Elimina el m\u00e1s antiguo del historial\r\n    if len(xi)&gt;1000:\r\n        xi.pop(0)\r\n        yi.pop(0)\r\n    \r\n    return()\r\n\r\n# Animaci\u00f3n\r\nani = animation.FuncAnimation(figura,\r\n                              unatrama,\r\n                              fargs=(xi, yi,angulo,avance),\r\n                              interval=retraso,\r\n                              blit=True)\r\n\r\nplt.show()\r\n<\/pre>\n<hr \/>\n<p><em><strong>Referencias<\/strong><\/em><\/p>\n<p><a href=\"https:\/\/matplotlib.org\/examples\/pylab_examples\/polar_demo.html\">https:\/\/matplotlib.org\/examples\/pylab_examples\/polar_demo.html<\/a><\/p>\n<p><a href=\"https:\/\/learn.sparkfun.com\/tutorials\/graph-sensor-data-with-python-and-matplotlib\/speeding-up-the-plot-animation\">https:\/\/learn.sparkfun.com\/tutorials\/graph-sensor-data-with-python-and-matplotlib\/speeding-up-the-plot-animation<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Terminados los pasos anteriores, se usan los datos enviados por el arduino al puerto serial para realizar el grafico. La gr\u00e1fica se presenta en formato de coordenadas polares, que en la librer\u00eda matplotlib se requieren en radianes. Antes de graficar se realiza una conversi\u00f3n. Del ejemplo se\u00a0 muestra que se crean tres elementos: Pulso Punto, &hellip; <a href=\"https:\/\/blog.espol.edu.ec\/edelros\/grafica-radar-plantilla-en-vivo\/\" class=\"more-link\">Sigue leyendo <span class=\"screen-reader-text\">4. Grafica radar - Python<\/span><\/a><\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1293415],"tags":[],"class_list":["post-1486","post","type-post","status-publish","format-standard","hentry","category-radar-ultrasonido"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1486","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/comments?post=1486"}],"version-history":[{"count":5,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1486\/revisions"}],"predecessor-version":[{"id":1549,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/posts\/1486\/revisions\/1549"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/media?parent=1486"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/categories?post=1486"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/edelros\/wp-json\/wp\/v2\/tags?post=1486"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}