La geocerca que se calculaba al vuelo
Un camión pasa la semana entre el patio, un cliente y un sótano. El reporte dice que doce veces, con el motor apagado y sin que nadie lo tocara, salió del patio y volvió a entrar.
Durante años usamos geocercas para casi todo: entradas y salidas de patio, zonas prohibidas, llegadas a clientes, rutas. Círculos y polígonos; los polígonos fueron un reto más interesante que un simple círculo. Y durante años peleamos con las mismas fallas: alertas que no correspondían a nada, llegadas que no aparecían, horas que no cuadraban.
Esta nota trata de esas fallas, de los arreglos que casi todos ponemos, y de un error de diseño que no se ve hasta que alguien cambia un valor: calcular la geocerca al vuelo.
Las cifras de los ejemplos son ilustrativas: salen de un simulador con una semana típica de un camión, no de mediciones de aquellas flotas.
Dentro o fuera parece una pregunta fácil
Para un círculo basta una distancia: si la posición está más cerca del centro que el radio, está dentro. Para un polígono, la prueba clásica traza una línea desde la posición hacia un lado y cuenta cuántas veces cruza el borde: impar, dentro; par, fuera. Un patio en forma de L, una zona que sigue una avenida, un cliente con dos accesos: todo eso es un polígono.
La geometría es la parte fácil. Lo difícil es que la pregunta se le hace a una posición del GPS, y la posición no siempre dice dónde está el camión.
Lo que fallaba
Estacionado, la posición brinca más que la geocerca. Con el camión parado, la precisión a veces se va y una posición cae a cien o doscientos metros. El patio del simulador mide ochenta. Para la geocerca, eso es una salida, y la siguiente posición buena es una entrada. En el historial, el camión parece recorrer grandes distancias en pocos minutos sin haberse movido.
Posiciones que llegan tarde. Una posición de las 7:10 que llega a las 7:30, después de las de las 7:20, devuelve al camión a donde ya no estaba. Si la geocerca se evalúa en el orden de llegada, ahí hay otra entrada y otra salida que nunca pasaron.
El equipo deja de transmitir justo antes de llegar. En un estacionamiento subterráneo se pierde la señal en la rampa. La última posición queda en la calle y la siguiente llega cuando el camión ya salió. La entrada no aparece.
Y el intervalo lo agrava todo. Con la ignición encendida, nuestros equipos reportaban cada 3 minutos; apagada, cada 120. A 40 km/h, en 3 minutos el camión avanza 2 km. Una zona prohibida de 400 m se cruza en 36 segundos, así que sólo uno de cada cinco cruces deja una posición dentro.
En el simulador, una semana de ese camión: 205 reportes, 70 entradas y salidas de verdad. Decidiendo con el punto crudo, posición por posición, salen 45 alertas falsas: 31 con el camión parado en el patio, y 14 por posiciones que llegaron tarde. Ve 3 de los 14 cruces de la zona y ninguna de las 7 entradas al sótano.
Un poco de las tres
Los arreglos que aplicamos, y que aplica casi todo el que opera una flota, fueron un poco de tres:
- Un margen para salir. La geocerca se cruza hacia dentro en el borde, pero para salir hay que alejarse cierta distancia. Quita el titubeo de un camión parado junto a la barda. Contra un brinco de doscientos metros no sirve: con 30 m de margen, las 45 falsas bajan a 39.
- Esperar varios reportes seguidos. Un brinco suelto no confirma nada. Con dos posiciones seguidas, las falsas bajan a 13. Pero con la ignición apagada cada posición llega dos horas después de la anterior: las siete vueltas al patio se avisan de dos a seis horas tarde, y siete de esas 13 son llegadas de verdad a destiempo. Y una sola posición tardía en medio rompe la racha: ve 3 de las 7 llegadas al cliente.
- Usar la ignición o la velocidad. Con el motor apagado, el camión no se mueve. Quita casi todas las del patio; quedan 21, casi todas de posiciones tardías y del rato en que el motor calienta con el camión parado.
Cada uno ayuda, y cada uno se paga en otro lado. Lo que aprendimos lo resumo así: cualquier intervención o modificación de valores provoca a la larga falsos positivos o información alterada.
Al vuelo
Y la peor parte no era ninguna de esas. En aquella plataforma, la entrada o salida de una geocerca no se guardaba: se calculaba en el cliente web, al vuelo, cada vez que alguien abría el mapa o el reporte.
Mientras nadie toca nada, eso parece funcionar. El problema llega con la primera queja. Alguien agranda el patio para que dejen de llegar alertas, o sube el margen, o cambia el polígono del cliente. Desde ese momento, el reporte de la semana pasada se recalcula con la geocerca nueva y dice otra cosa.
En el simulador, agrandar el patio 100 m baja las falsas de 45 a 31: no las calla, porque siguen las de las posiciones tardías y los brincos más largos. Y en el reporte de esa misma semana, calculado al vuelo con el patio nuevo, cambian 23 alertas: 16 desaparecen, 3 cambian de hora y aparecen 4 que antes no estaban. Si alguien preguntó el martes por una alerta del patio, la que se le enseñó puede ya no estar, o estar a otra hora.
Un historial que cambia cuando cambia la configuración no es un historial.
Lo que haría hoy
Guardar el evento, una vez. La entrada o salida se calcula cuando llega la posición y se guarda, con la versión de la geocerca y los valores de ese día. Si mañana el patio crece, crece de mañana en adelante.
Fecharlo con la hora de la posición. No con la hora en que llegó. Una posición tardía se acomoda en su lugar del trayecto, y la alerta lleva la hora en que pasó, aunque se avise después. Si esa posición cambia un evento ya guardado, el evento se corrige y queda escrito que se corrigió y por qué: un dato que llegó tarde explica el cambio; una configuración nueva, no.
Tirar la posición, no el reporte. Una posición que su propia calidad marca como mala se descarta. Pero el reporte sigue diciendo que el equipo habló y, si es el de apagar, cuándo se detuvo el camión.
Confirmar con más de una señal. Dos posiciones seguidas, o el reporte de apagar la ignición, o una posición que según el GPS va a más de 15 km/h. En la mayoría de los equipos la velocidad se mide aparte, por efecto Doppler, y casi no brinca con la posición: un camión a 40 km/h no está dando un salto. Con la ignición apagada, un brinco no saca al camión de ningún lado; si el GPS dice que se mueve, eso ya es otra alerta, la de remolque.
Revisar el tramo, no sólo el punto. Si la recta entre dos posiciones atraviesa la zona prohibida, lo más probable es que el camión la haya cruzado, aunque ningún reporte haya caído dentro. La hora se interpola en el tramo, y el cruce se guarda como inferido. Con calles de verdad, la recta se compara contra el trazo de las calles.
Tres estados, no dos. Dentro, fuera y no sé. Cuando el equipo calla cerca de un lugar que se sabe sin señal, la entrada se infiere, y se guarda marcada como inferida. Quien lea el reporte sabe qué se vio y qué se dedujo.
Con lo que el simulador alcanza a modelar de eso, en la misma semana: ninguna alerta falsa, las 70 entradas y salidas, 36 de ellas inferidas y marcadas así (los cruces de la zona y el sótano), y la hora a 1.1 minutos en promedio. No porque sea perfecto: el simulador sólo trae las fallas que yo le puse, y en la calle hay otras. Pero cada una de esas reglas responde a algo que falla.
Para probarlo con otra semana, con más posiciones malas o más tardías, otro margen o un patio más grande, está el simulador de geocercas: corre en el navegador y decide dentro o fuera de cinco maneras.
Las geocercas no fallaban por la geometría. Fallaban porque se le preguntaba a una posición suelta algo que sólo responde la historia del camión, y porque esa respuesta no se guardaba.
Israel Negrete Lepe es ingeniero en electrónica. Veinticinco años haciendo que sistemas distintos funcionen juntos en condiciones reales: del sensor, el vehículo o la transacción al backend, los datos, la seguridad y la operación. Hoy, cada vez más, IA en el borde.