{"id":11708,"date":"2026-04-01T23:56:14","date_gmt":"2026-04-01T21:56:14","guid":{"rendered":"https:\/\/bitacora.eniac2000.com\/?p=11708"},"modified":"2026-04-01T23:56:16","modified_gmt":"2026-04-01T21:56:16","slug":"aplicacion-android-para-fotogrametria-con-ia-fase-3-correccion-de-heading-visualizacion-en-vuelo-y-ajustes-de-ux","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=11708","title":{"rendered":"Aplicaci\u00f3n Android para fotogrametr\u00eda con IA. Fase 3: Correcci\u00f3n de heading, visualizaci\u00f3n en vuelo y ajustes de UX"},"content":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 4 de 6 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=fotogrametria-asistida-por-ia\" class=\"series-1957\" title=\"Fotogrametr\u00eda asistida por IA\">Fotogrametr\u00eda asistida por IA<\/a><\/div>\n<p>En el <a href=\"https:\/\/bitacora.eniac2000.com\/?p=11696\">art\u00edculo anterior<\/a> de esta serie expliqu\u00e9 c\u00f3mo se construy\u00f3 el motor de navegaci\u00f3n aut\u00f3noma con <em>Virtual Stick<\/em> y los bugs m\u00e1s relevantes que aparecieron durante las primeras pruebas de vuelo real. Al terminar esa fase, la app era capaz de volar una misi\u00f3n de principio a fin y tomar fotos en los waypoints correctos. Pero hab\u00eda un problema que s\u00f3lo se hac\u00eda evidente cuando ves volar al dron: <strong>volaba de lado<\/strong>.<\/p>\n\n\n\n<p>La c\u00e1mara no apuntaba en la direcci\u00f3n de avance durante las pasadas de vuelo, sino que el dron navegaba en diagonal, orientado de manera <em>cuasi<\/em> aleatoria. Para fotogrametr\u00eda esto es un problema serio: las fotos salen mal encuadradas, los solapamientos entre im\u00e1genes no se corresponden con los calculados y el resultado del procesado se resiente. Esta Fase 3 fue, en buena medida, la fase de hacer que el dron volara bien, no s\u00f3lo que volara.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-1024x461.png\" alt=\"Aplicaci\u00f3n mostrando el vuelo en tiempo real\" class=\"wp-image-11700\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-1024x461.png 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-300x135.png 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-768x346.png 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-1536x691.png 1536w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084329-2048x922.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Aplicaci\u00f3n mostrando el vuelo en tiempo real<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">El problema del heading: por qu\u00e9 el dron volaba de lado<\/h2>\n\n\n\n<p>En la implementaci\u00f3n original del motor de navegaci\u00f3n, el <em>yaw<\/em> del dron \u2014es decir, hacia d\u00f3nde apunta\u2014 se controlaba usando el <em>bearing<\/em> instant\u00e1neo hacia el siguiente waypoint. En teor\u00eda suena razonable: apunta hacia donde vas. En la pr\u00e1ctica, el bearing instant\u00e1neo oscila mucho cerca de los <em>waypoints<\/em>, cambia durante las transiciones entre pasadas y no tiene en cuenta que lo que necesita la fotogrametr\u00eda es que la c\u00e1mara est\u00e9 alineada con la direcci\u00f3n de la pasada, no con la direcci\u00f3n puntual de movimiento.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"604\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Ra-do-Progreso-22-3-2026-orthophoto.jpg\" alt=\"Ortofotograf\u00eda de uno de los primeros vuelos\" class=\"wp-image-11678\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Ra-do-Progreso-22-3-2026-orthophoto.jpg 580w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Ra-do-Progreso-22-3-2026-orthophoto-288x300.jpg 288w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><figcaption class=\"wp-element-caption\">Ortofotograf\u00eda de uno de los primeros vuelos. Se aprecia que la pista deportiva no est\u00e1 completa debido al fallo de orientaci\u00f3n del dron<\/figcaption><\/figure>\n\n\n\n<p>La soluci\u00f3n fue a\u00f1adir un campo <code>headingDeg<\/code> a cada <em>waypoint<\/em>, calculado en el motor fotogram\u00e9trico como el <em>bearing<\/em> entre el primer y el \u00faltimo <em>waypoint<\/em> de cada l\u00ednea de vuelo. As\u00ed, todos los <em>waypoints<\/em> de una misma pasada comparten un <em>heading<\/em> fijo, que es la direcci\u00f3n real de esa l\u00ednea. La c\u00e1mara siempre apunta a lo largo de la pasada, independientemente de peque\u00f1as correcciones de trayectoria.<\/p>\n\n\n\n<p>El problema ven\u00eda en las <strong>transiciones entre l\u00edneas<\/strong>: cuando el dron terminaba una pasada y se desplazaba lateralmente a la siguiente, usar el <em>heading<\/em> de l\u00ednea durante ese movimiento no tiene sentido. Para detectar estas transiciones se comparaba el <em>bearing<\/em> instant\u00e1neo de movimiento con el heading de la l\u00ednea destino: si la diferencia superaba los 45\u00b0, se consideraba una transici\u00f3n y el dron apunta hacia donde se mov\u00eda; si estaba dentro de los 45\u00b0, manten\u00eda el <em>heading<\/em> de l\u00ednea.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>val angleDiff = abs(((bearing - wp.headingDeg + 540) % 360) - 180)\nval yaw = if (angleDiff &gt; 45.0) bearing else wp.headingDeg<\/code><\/pre>\n\n\n\n<p>Pero detectar la transici\u00f3n no es suficiente. Cuando el dron llega al primer <em>waypoint<\/em> de una nueva pasada tras un movimiento lateral, puede estar todav\u00eda orientado en la direcci\u00f3n de la transici\u00f3n. Si se dispara la foto en ese momento, sale girada. Se a\u00f1adi\u00f3 por tanto una <strong>fase de rotaci\u00f3n pre-foto<\/strong>: si la diferencia entre la orientaci\u00f3n actual y el heading de l\u00ednea supera los 20\u00b0, el dron hace <em>hover<\/em> y rota hasta alinearse antes de disparar. El tiempo de rotaci\u00f3n es proporcional al \u00e1ngulo a corregir, con un m\u00ednimo de 1,5 segundos y un m\u00e1ximo de 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El bug cr\u00edtico: DJI rechaza silenciosamente los \u00e1ngulos fuera de rango<\/h2>\n\n\n\n<p>Corregido el <em>heading<\/em>, los vuelos de prueba mejoraron notablemente, pero segu\u00eda habiendo un comportamiento extra\u00f1o en las l\u00edneas orientadas hacia el oeste. El dron llegaba al primer <em>waypoint<\/em> de esas pasadas orientado en la direcci\u00f3n correcta, pero al llegar a los siguientes, la rotaci\u00f3n no se completaba. Los logs lo mostraban con claridad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WP8 ROTANDO: yaw actual=~180\u00b0 \u2192 l\u00ednea=270.0\u00b0 (\u039490\u00b0)\nWP9 ROTANDO: yaw actual=~180\u00b0 \u2192 l\u00ednea=270.0\u00b0 (\u039490\u00b0)  \u2190 no rot\u00f3<\/code><\/pre>\n\n\n\n<p>El dron intentaba rotar a 270\u00b0 (oeste) pero se quedaba clavado en 180\u00b0. Despu\u00e9s de descartar otras causas, el diagn\u00f3stico fue el siguiente: el modo <code>YawControlMode.ANGLE<\/code> del DJI MSDK v5 acepta valores \u00fanicamente en el rango <strong>[-180\u00b0, 180\u00b0]<\/strong>. Un valor de 270\u00b0 no produce un error \u2014el SDK lo recorta silenciosamente al l\u00edmite\u2014 y el dron se queda apuntando a 180\u00b0 sin que nada indique que algo ha fallado.<\/p>\n\n\n\n<p>La soluci\u00f3n es normalizar el <em>yaw<\/em> antes de enviarlo al SDK, convirtiendo cualquier \u00e1ngulo al rango [-180\u00b0, 180\u00b0]:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var normalizedYaw = yawAngle % 360\nif (normalizedYaw &gt; 180) normalizedYaw -= 360\nif (normalizedYaw &lt; -180) normalizedYaw += 360<\/code><\/pre>\n\n\n\n<p>Con esta normalizaci\u00f3n, 270\u00b0 se convierte en -90\u00b0, que es exactamente lo mismo (oeste) expresado en el rango que el SDK espera. Un detalle peque\u00f1o con un impacto grande: sin \u00e9l, la mitad de las l\u00edneas de vuelo con orientaci\u00f3n oeste, noroeste o suroeste se recorr\u00edan con el dron mirando en la direcci\u00f3n incorrecta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un crash inesperado: listas vac\u00edas a gran altitud<\/h2>\n\n\n\n<p>Mientras se ajustaba el heading, apareci\u00f3 otro <em>bug<\/em> desagradable: al editar una misi\u00f3n existente y subir la altura por encima de unos 79 metros, la app se cerraba con un <code>NoSuchElementException: List is empty<\/code> en el motor fotogram\u00e9trico.<\/p>\n\n\n\n<p>La causa tiene una l\u00f3gica clara una vez que se entiende: a mayor altura, mayor es la superficie captada por cada foto y mayor la separaci\u00f3n entre <em>waypoints<\/em>. Llegado a cierto punto, algunas l\u00edneas de vuelo quedan tan cortas (en relaci\u00f3n a la zona de vuelo) que no caben <em>waypoints<\/em> dentro del pol\u00edgono. El generador de rejilla devuelve listas vac\u00edas para esas l\u00edneas, y el c\u00f3digo que calculaba el <em>heading<\/em> intentaba acceder al primer y \u00faltimo elemento de una lista vac\u00eda.<\/p>\n\n\n\n<p>La soluci\u00f3n fue doble: filtrar las l\u00edneas sin <em>waypoints<\/em> antes de devolverlas, y a\u00f1adir salvaguardas <code>isNotEmpty()<\/code> antes de cualquier acceso a la rejilla. Un <em>bug<\/em> de esos que solo aparece en los extremos del rango de par\u00e1metros, pero que en campo puede surgir perfectamente si alguien decide subir la altura para cubrir un \u00e1rea grande con menos bater\u00eda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Visualizaci\u00f3n en tiempo real: saber exactamente qu\u00e9 est\u00e1 haciendo el dron<\/h2>\n\n\n\n<p>Con el vuelo ya correcto, el siguiente objetivo fue mejorar la informaci\u00f3n disponible en pantalla durante la ejecuci\u00f3n. El mini-mapa original mostraba el plan de vuelo y la posici\u00f3n del dron, pero no permit\u00eda saber si la trayectoria real se correspond\u00eda con la planificada ni d\u00f3nde se hab\u00edan tomado las fotos.<\/p>\n\n\n\n<p>Se a\u00f1adieron dos <code>StateFlow<\/code> en el motor de ejecuci\u00f3n que se actualizan durante el vuelo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>Trail<\/em> de trayectoria<\/strong>: la posici\u00f3n real del dron se registra cada vez que se desplaza m\u00e1s de 2 metros, formando una l\u00ednea que va dibujando el camino recorrido. Se muestra en cian sobre el mini-mapa.<\/li>\n\n\n\n<li><strong>Puntos de foto<\/strong>: cada vez que se dispara la c\u00e1mara, se registra la posici\u00f3n exacta. Se muestran como puntos verdes sobre el mini-mapa.<\/li>\n<\/ul>\n\n\n\n<p>El mini-mapa qued\u00f3 con cinco capas superpuestas, cada una con su propio <code>GeoJsonSource<\/code> en MapLibre y actualizaci\u00f3n reactiva independiente:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Capa<\/th><th>Color<\/th><th>Qu\u00e9 muestra<\/th><\/tr><\/thead><tbody><tr><td>L\u00edneas de vuelo<\/td><td>Naranja<\/td><td>El plan de misi\u00f3n original<\/td><\/tr><tr><td><em>Trail<\/em><\/td><td>Cian<\/td><td>La trayectoria real del dron<\/td><\/tr><tr><td>Puntos de foto<\/td><td>Verde<\/td><td>D\u00f3nde se tom\u00f3 cada fotograf\u00eda<\/td><\/tr><tr><td><em>Heading<\/em><\/td><td>Blanco<\/td><td>Una l\u00ednea corta indicando hacia d\u00f3nde apunta el dron<\/td><\/tr><tr><td>Posici\u00f3n actual<\/td><td>Azul<\/td><td>La ubicaci\u00f3n del dron en tiempo real<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>El resultado pr\u00e1ctico es que durante el vuelo puedes ver en tiempo real si el dron est\u00e1 siguiendo el plan, identificar si se ha saltado alguna l\u00ednea y confirmar que se est\u00e1n tomando fotos en los puntos correctos. Es la diferencia entre supervisar una misi\u00f3n y solo esperarla.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-1024x461.png\" alt=\"Aplicaci\u00f3n en su estado actual, mostrando el mapa de vuelo y el rumbo seguido\" class=\"wp-image-11699\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-1024x461.png 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-300x135.png 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-768x346.png 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-1536x691.png 1536w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/Screenshot_20260327-084455-2048x922.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Aplicaci\u00f3n en su estado actual, mostrando el mapa de vuelo y el rumbo seguido<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tres mejoras de UX que parecen peque\u00f1as y no lo son<\/h2>\n\n\n\n<p>El cierre de esta fase incluy\u00f3 tres ajustes que individualmente parecen menores, pero que en la pr\u00e1ctica cambian bastante la experiencia de uso en campo.<\/p>\n\n\n\n<p><strong>Pantalla siempre encendida.<\/strong> Una misi\u00f3n de fotogrametr\u00eda puede durar entre 10 y 30 minutos. Sin el <em>flag<\/em> <code>FLAG_KEEP_SCREEN_ON<\/code> activado, el tel\u00e9fono apaga la pantalla tras unos minutos de inactividad t\u00e1ctil \u2014porque el operador no est\u00e1 tocando la pantalla, est\u00e1 vigilando el dron\u2014 y se pierde toda la monitorizaci\u00f3n en tiempo real. El fix es una l\u00ednea de c\u00f3digo, pero sin ella la <em>app<\/em> es pr\u00e1cticamente inusable en misiones largas.<\/p>\n\n\n\n<p><strong>Centrado de mapa en la posici\u00f3n real.<\/strong> Al abrir la <em>app<\/em> en campo, el mapa se centraba en Madrid, que es donde se inicializ\u00f3 el centro por defecto durante el desarrollo. Evidentemente in\u00fatil si est\u00e1s en una parcela de Sevilla. El sistema de centrado se reh\u00edzo con tres niveles de <em>fallback<\/em>: primero intenta obtener la \u00faltima posici\u00f3n conocida de MapLibre, luego la del <code>LocationManager<\/code> de Android, y si ninguna est\u00e1 disponible de inmediato, hace <em>polling<\/em> cada 100 milisegundos durante un m\u00e1ximo de 10 segundos hasta conseguir una coordenada v\u00e1lida.<\/p>\n\n\n\n<p><strong>Panel de par\u00e1metros lateral.<\/strong> El panel de configuraci\u00f3n de la misi\u00f3n estaba implementado originalmente como un <code>BottomSheetScaffold<\/code> que se desplegaba desde la parte inferior de la pantalla. El problema es que, al abrirlo, tapaba pr\u00e1cticamente todo el mapa, impidiendo ver c\u00f3mo cambiaba la rejilla de vuelo al ajustar los <em>sliders<\/em>, que es exactamente la raz\u00f3n por la que se ajustan. Se reemplaz\u00f3 por un <code>ModalNavigationDrawer<\/code> de Material 3 que se desliza desde la izquierda con 400 dp de ancho, dejando el mapa visible a la derecha. Incluye gesto de arrastre para cerrarlo, <em>scrim<\/em> semitransparente y tap-to-dismiss, todo de serie sin c\u00f3digo adicional.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El estado actual de la aplicaci\u00f3n<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"617\" src=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/IMG-20260322-WA0005-1024x617.jpg\" alt=\"Reconstrucci\u00f3n en 3D mediante nube de puntos\" class=\"wp-image-11675\" srcset=\"https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/IMG-20260322-WA0005-1024x617.jpg 1024w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/IMG-20260322-WA0005-300x181.jpg 300w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/IMG-20260322-WA0005-768x463.jpg 768w, https:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2026\/03\/IMG-20260322-WA0005.jpg 1506w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Reconstrucci\u00f3n en 3D mediante nube de puntos<\/figcaption><\/figure>\n\n\n\n<p>Con esta tercera fase cerrada, la aplicaci\u00f3n est\u00e1 completa en todo lo que se refiere al ciclo de vuelo: planificaci\u00f3n, ejecuci\u00f3n y monitorizaci\u00f3n. Un resumen de las capacidades actuales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Planificaci\u00f3n de misiones 2D (ortomosaico) y 3D (cross-hatch) sobre mapa interactivo, con capas OSM, ortofotos PNOA y Catastro.<\/li>\n\n\n\n<li>C\u00e1lculo autom\u00e1tico de GSD, rejilla de waypoints, n\u00famero de fotos, duraci\u00f3n y bater\u00eda estimada.<\/li>\n\n\n\n<li><em>Heading<\/em> fijo por l\u00ednea de vuelo con detecci\u00f3n de transiciones y rotaci\u00f3n pre-foto.<\/li>\n\n\n\n<li>Navegaci\u00f3n aut\u00f3noma v\u00eda Virtual Stick con perfil de velocidad trapezoidal.<\/li>\n\n\n\n<li>Disparo autom\u00e1tico de c\u00e1mara en cada <em>waypoint<\/em> fotogr\u00e1fico.<\/li>\n\n\n\n<li>Control en vivo de par\u00e1metros de c\u00e1mara.<\/li>\n\n\n\n<li>Visualizaci\u00f3n en tiempo real: <em>trail<\/em> de trayectoria, puntos de foto y <em>heading<\/em> del dron.<\/li>\n\n\n\n<li>Retorno autom\u00e1tico a casa al finalizar, con parada de emergencia disponible en todo momento.<\/li>\n\n\n\n<li>Guardado y carga de misiones con Room\/SQLite.<\/li>\n<\/ul>\n\n\n\n<p>Lo que queda pendiente es la <strong>Fase 4<\/strong>: la integraci\u00f3n con WebODM para el procesado fotogram\u00e9trico en la nube, principalmente, adem\u00e1s de algunas mejoras menores que tengo en mente. La idea es que, al terminar un vuelo, la app pueda subir directamente las im\u00e1genes al servidor, lanzar el procesado y notificar cuando el modelo 3D est\u00e9 listo. Pero esto me abre la puerta para hablar de la otra parte del proyecto: la plataforma de procesado de im\u00e1genes que he desplegado, basada en OpenDroneMap.<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">Esta entrada es la parte 4 de 6 de la serie <a href=\"https:\/\/bitacora.eniac2000.com\/?series=fotogrametria-asistida-por-ia\" class=\"series-1957\" title=\"Fotogrametr\u00eda asistida por IA\">Fotogrametr\u00eda asistida por IA<\/a><\/div><p>En el art\u00edculo anterior de esta serie expliqu\u00e9 c\u00f3mo se<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1845,13],"tags":[106,1959,537,551,1202],"series":[1957],"class_list":["post-11708","post","type-post","status-publish","format-standard","hentry","category-generado-con-ia","category-informatica","tag-android","tag-claude-code","tag-dji-mini-3-pro","tag-dron","tag-open-drone-map","series-fotogrametria-asistida-por-ia"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11708"}],"version-history":[{"count":1,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11708\/revisions"}],"predecessor-version":[{"id":11711,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/11708\/revisions\/11711"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11708"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=11708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}