Un gemelo digital de almacén es un modelo 3D o 2D en vivo de tu centro de distribución en el que el inventario se mueve, los AGV circulan y los transportadores cambian de estado tal como ocurre en la nave. Esta guía cubre los casos de uso que importan a los equipos de logística, cómo diseñar topics MQTT para vehículos, transportadores y movimientos de stock, y cómo crear el prototipo de un gemelo que se actualiza en tiempo real.
Qué muestra un gemelo digital de almacén
Un almacén es un sistema de flujos. La mercancía llega, se almacena, se prepara, se embala y se expide, y los cuellos de botella se desplazan a lo largo del día. Los sistemas tradicionales fragmentan la imagen:
- El WMS (sistema de gestión de almacenes) conoce ubicaciones, pedidos y niveles de stock.
- El WCS o los PLC conocen el estado de transportadores y clasificadores.
- El gestor de flota sabe dónde están los AGV y AMR y qué están haciendo.
- Los terminales de escaneo y el RFID generan eventos de movimiento.
Un gemelo digital de almacén fusiona estos flujos en un único modelo espacial. Un supervisor ve cómo se forma un atasco en el punto de confluencia 4, tres AGV haciendo cola detrás y la oleada de salida que perderá la hora de corte del camión si el atasco dura diez minutos más. Para los conceptos generales de gemelo, consulta la guía de tecnología de gemelo digital.
Casos de uso para operaciones logísticas
| Caso de uso | Datos necesarios | Qué aporta el gemelo |
|---|---|---|
| Vista general de la nave en vivo | Estados de transportadores, posiciones de AGV, estado de los muelles | Imagen espacial de dónde fluye o se atasca el trabajo |
| Detección de congestión y atascos | Estados de fotocélulas, ocupación de zonas, longitud de las colas de AGV | Muestra las colas que se forman aguas arriba de un fallo |
| Monitorización de la flota de AGV | Posición, batería, misión, códigos de error | Salud de la flota y puntos calientes de tráfico en el layout |
| Movimiento de inventario | Eventos de escaneo y RFID con ubicaciones | Por dónde viaja realmente el stock frente a la ruta prevista |
| Análisis de slotting | Frecuencia de preparación por ubicación a lo largo del tiempo | Mapas de calor que orientan la reubicación de los artículos de alta rotación |
| Hipótesis de layout | Flujos históricos reproducidos sobre un layout modificado | Estima el efecto de mover puestos o añadir carriles |
Los tres primeros son en tiempo real y dependen de datos de baja latencia. Los tres últimos usan el histórico y son donde el gemelo se amortiza a lo largo de los meses.
Arquitectura de datos con MQTT
La arquitectura más limpia sitúa un broker MQTT entre cada fuente y cada consumidor:
- Transportadores y clasificadores: los PLC o el WCS publican los estados de zona y las alarmas de atasco cuando cambian.
- AGV y AMR: el gestor de flota (o los propios vehículos) publica posición y estado a una frecuencia fija, normalmente de una a pocas veces por segundo.
- Eventos del WMS: un pequeño adaptador publica los movimientos de stock (ubicación, preparación, traslado) como eventos.
- Servicios del gemelo: suscriptores que derivan longitudes de cola, tiempos de permanencia e índices de congestión y escriben el histórico.
- Visores del gemelo: clientes de navegador que se suscriben por WebSocket seguro y animan la escena del gemelo digital 3D.
Un broker MQTT gestionado encaja bien porque el valor del gemelo depende de que esa columna vertebral esté siempre disponible, y los equipos de TI de almacén suelen centrarse en el WMS más que en operar brokers.
Diseño de topics
connectmq/<site>/<area>/<asset-type>/<asset-id>/<data-type>
connectmq/dc-east/outbound/conveyor/zone-12/state
connectmq/dc-east/outbound/conveyor/merge-4/alarm
connectmq/dc-east/fleet/agv/agv-03/pose
connectmq/dc-east/fleet/agv/agv-03/status
connectmq/dc-east/inventory/movements
Algunas reglas prácticas:
- Estados de zona de los transportadores: retenidos, QoS 1, publicados solo al cambiar.
- Posiciones de los AGV: no retenidas, QoS 0, frecuencia fija. Una actualización de posición perdida se sustituye un instante después.
- Estado y errores de los AGV: retenidos, QoS 1, para que un visor abierto a mitad de turno vea la misión y la batería actuales.
- Movimientos de inventario: eventos QoS 1, no retenidos, consumidos por un servicio que mantiene las posiciones de stock.
El artículo sobre sincronización de estado del gemelo digital explica estas decisiones con más profundidad.
Práctica: animar un AGV y una zona de transportador
Crea el prototipo con el servidor MQTT público gratuito en broker.connectmq.com. Sus límites (10 mensajes por segundo por cliente, 64 KB por mensaje) bastan para unos pocos vehículos simulados. No publiques allí datos operativos reales, ya que el servidor público es legible por todos y es solo para pruebas y prototipos.
Un simulador en Python de un AGV que recorre un circuito y una zona de transportador que se atasca de vez en cuando:
import json
import math
import random
import time
import uuid
import paho.mqtt.client as mqtt
RUN = "wh-44d0" # cámbialo por tu propio id único
BASE = f"connectmq/demo/{RUN}/dc-east"
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"wh-sim-{uuid.uuid4().hex[:6]}")
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()
t = 0.0
battery = 100.0
zone_state = "running"
client.publish(f"{BASE}/outbound/conveyor/zone-12/state", json.dumps({"state": zone_state}), qos=1, retain=True)
while True:
t += 0.5
x = 20 + 15 * math.cos(t / 10)
y = 10 + 6 * math.sin(t / 10)
heading = (math.degrees(t / 10) + 90) % 360
battery = max(5.0, battery - 0.01)
client.publish(f"{BASE}/fleet/agv/agv-03/pose",
json.dumps({"x": round(x, 2), "y": round(y, 2), "headingDeg": round(heading, 1), "ts": time.time()}))
if int(t * 2) % 20 == 0:
client.publish(f"{BASE}/fleet/agv/agv-03/status",
json.dumps({"mission": "replenish-A12", "batteryPct": round(battery, 1)}), qos=1, retain=True)
new_state = "jammed" if random.random() < 0.02 else ("running" if zone_state == "jammed" and random.random() < 0.2 else zone_state)
if new_state != zone_state:
zone_state = new_state
client.publish(f"{BASE}/outbound/conveyor/zone-12/state", json.dumps({"state": zone_state, "ts": time.time()}),
qos=1, retain=True)
print("zone-12 ->", zone_state)
time.sleep(0.5)
En el navegador, el visor se suscribe y mueve un objeto 3D:
import mqtt from "mqtt";
const base = "connectmq/demo/wh-44d0/dc-east";
const client = mqtt.connect("wss://broker.connectmq.com:8084/mqtt", {
clientId: "wh-viewer-" + Math.random().toString(16).slice(2, 10),
protocolVersion: 5,
});
client.on("connect", () => {
client.subscribe([`${base}/fleet/agv/+/pose`, `${base}/fleet/agv/+/status`, `${base}/outbound/conveyor/+/state`]);
});
client.on("message", (topic, payload) => {
const data = JSON.parse(payload.toString());
const parts = topic.split("/");
if (topic.endsWith("/pose")) {
const agv = scene.getObjectByName(parts[parts.length - 2]);
if (agv) {
agv.position.set(data.x, 0, data.y);
agv.rotation.y = (-data.headingDeg * Math.PI) / 180;
}
} else if (topic.endsWith("/state")) {
const zone = scene.getObjectByName(parts[parts.length - 2]);
if (zone) zone.material.color.set(data.state === "jammed" ? 0xd94040 : 0x3fa34d);
}
});
El objeto scene es tu escena de three.js, con mallas cuyo nombre coincide con los ID de los activos. Interpolar las posiciones entre mensajes suaviza el movimiento incluso con dos actualizaciones por segundo. Consulta gemelo digital con three.js para construir la escena, y la demo web de gemelo digital 3D de ConnectMQ para ver un ejemplo funcional con una cinta transportadora y un brazo robótico transmitidos en vivo sobre WSS.
Lista de comprobación para el despliegue
- Empieza por un área, como los transportadores de salida, donde los atascos son costosos y visibles.
- Consigue un plano de la nave a escala y acordad un único sistema de coordenadas para las posiciones de los AGV y el modelo 3D.
- Asigna cada zona de PLC e ID de AGV a un nombre de malla del modelo.
- Publica los estados al cambiar y las posiciones a una frecuencia fija y moderada.
- Pasa a un broker privado sobre TLS antes de conectar sistemas reales, con una credencial por sistema de origen.
- Cuenta las conexiones: cada AGV, gateway, servicio y pestaña de visor es un cliente. El plan Serverless gratuito admite hasta 25; el Serverless de pago, hasta 1.000.
- Registra el histórico para el análisis de slotting y de layout con un suscriptor independiente.
- Valida el gemelo con la realidad de la nave durante un turno con mucha actividad antes de confiar en él.
Errores habituales
- Desajustes de coordenadas. El origen del mapa del gestor de flota rara vez coincide con el del CAD. Calibra con puntos conocidos.
- Saturar el broker con posiciones. Diez vehículos a 20 Hz es innecesario para visualizar. De dos a cinco actualizaciones por segundo con interpolación se ven fluidas.
- Tratar los datos del WMS como tiempo real. Muchas actualizaciones del WMS se envían por lotes. Muestra sus marcas de tiempo para que los usuarios sepan lo recientes que son los datos de stock.
- Sobredimensionar el modelo 3D. Cajas sencillas para estanterías y transportadores se renderizan más rápido y son más fáciles de mantener.
- Ignorar las desconexiones. Si el gestor de flota o un gateway de PLC se cae de la red, el gemelo sigue mostrando las últimas posiciones y estados como si nada. Publica un estado online/offline retenido por cada fuente (los mensajes last will de MQTT son ideales para esto) y atenúa los activos cuya fuente esté desconectada, para que los supervisores nunca actúen sobre datos congelados.
- Un visor por pantalla, sin límite. Cada pestaña de navegador abierta es un cliente MQTT independiente. Las pantallas murales, los portátiles de los supervisores y las tabletas suman rápido, así que inclúyelos al planificar los límites de conexiones.
Muchos de estos patrones se comparten con el gemelo digital de fábrica.
Construye tu gemelo digital de almacén en ConnectMQ
ConnectMQ ofrece a tus PLC, al gestor de flota y a los visores en el navegador una única columna vertebral MQTT con soporte de TLS, WebSocket y MQTT 5. Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito, y usa el explorador de topics en vivo para observar los topics de AGV y transportadores mientras construyes el gemelo.
Preguntas frecuentes
¿Qué es un gemelo digital de almacén?
Es un modelo digital vivo de un almacén que refleja en tiempo real los movimientos de inventario, las posiciones de los vehículos y el estado de los equipos, y se usa para monitorización, análisis y planificación del layout.
¿Con qué frecuencia deben publicarse las posiciones de los AGV?
Para visualizar, suelen bastar de una a cinco actualizaciones por segundo si el visor interpola entre posiciones. La navegación crítica para la seguridad permanece dentro del propio sistema de flota.
¿Puede un gemelo de almacén integrarse con mi WMS?
Sí. Un adaptador lee los eventos del WMS a través de su API o su base de datos y los publica en MQTT, de modo que el gemelo los consume como cualquier otra fuente de datos.
¿Deben los estados de los transportadores usar retained messages?
Sí. Retener los topics de estado permite que un visor del gemelo recién abierto muestre de inmediato el estado actual de cada zona en lugar de esperar al siguiente cambio.



