Construí un servidor de WebSocket para transmitir datos de LiDAR y IMU del iPhone

Construye un servidor de WebSocket para LiDAR y IMU del iPhone y optimiza la recolección de datos en tiempo real de tus dispositivos móviles.

viernes, 21 de noviembre de 2025 • 5 min de lectura • Equipo Q2BSTUDIO

Construyendo un servidor de WebSocket para LiDAR y IMU del iPhone

Hace años que me frustraba el mismo problema de siempre: una idea necesitaba datos de profundidad o lecturas de IMU y, al pensarlo, concluía que tendría que pedir un sensor externo, esperar el envío, instalar drivers y cablear todo. Esas ideas morían en el intento. Para evitarlo revisé el hardware que ya tenía y descubrí que mi teléfono, en particular iPhone 12 Pro en adelante, incorpora sensores profesionales listos para usar: LiDAR por tiempo de vuelo con alcance aproximado de 0.5 a 5 metros a 10 fps, cámara 1080p a 30 fps, IMU a 200 Hz, GPS y ARKit realizando odometría visual-inercial en segundo plano. Todo lo necesario para prototipos de robótica estaba integrado y calibrado, pero iOS limita el acceso directo a esos datos. Ahí fue donde nació la solución que desarrollé, un servidor WebSocket que corre directamente en el iPhone y convierte el móvil en una plataforma de sensores lista para transmitir datos a un cliente en un portátil o servidor.

La arquitectura es sencilla y práctica: el iPhone ejecuta el servidor WebSocket y captura datos desde ARKit, AVFoundation, CoreMotion y CoreLocation, aplica marcas de tiempo con precisión nanosegundo y stream de forma bidireccional hacia cualquier cliente conectado. Al usar cámara y LiDAR juntos se obtiene un flujo RGB-D sincronizado, equivalente a una cámara de profundidad comercial pero sin montar nada en una Raspberry Pi o Jetson. Ese enfoque reduce el tiempo de montaje de días a minutos, ideal para investigación, prototipos y cursos prácticos.

Uno de los retos principales fue la sincronización de relojes, porque cada sensor en iOS usa su propio tiempo. La solución fue normalizar todas las marcas temporales a un reloj monotónico del sistema, evitando saltos hacia atrás y logrando errores de sincronización inferiores al milisegundo, suficiente para fusión de sensores y SLAM en tiempo real. Otro problema habitual son los ARFrames de ARKit, que son objetos grandes y pueden hacer que el sistema termine la aplicación si se mantienen referencias por mucho tiempo; la solución práctica es extraer inmediatamente lo necesario, procesarlo y soltar el frame para evitar fugas de memoria.

El servidor cambia entre dos implementaciones de cámara según el modo: para RGB-D se usa ARKit para obtener color y profundidad ya alineados; para solo cámara se usa AVFoundation para optimizar rendimiento y control de ajustes. Además incorporé modos predefinidos para que el usuario no tenga que configurar cada sensor: modo RGBD para emular una RealSense, Visual-Inertial para VIO con cámara a 30 fps e IMU a 200 Hz, LiDAR Scanner para escaneo 3D, IMU Only para largas sesiones de acelerometría y giroscopio, Full Sensor con todos los datos y un modo Custom para seleccionar solo lo necesario.

En cuanto al formato y flujo de datos, los mensajes pequeños como IMU viajan en JSON y los datos voluminosos como imágenes y nubes de puntos se envían en binario con un prefijo de tipo para identificar el payload. Las imágenes se comprimen en JPEG y las nubes de puntos usan formatos binarios eficientes como PLY para minimizar uso de ancho de banda. Las grabaciones se almacenan en MCAP, compatible con herramientas de robótica modernas, permitiendo reproducir sesiones en ROS 2 o visualizarlas con herramientas como Foxglove sin conversiones adicionales.

También añadí soporte experimental para Apple Watch, que transmite su IMU a 50 Hz al teléfono para permitir rastreo dual teléfono-muñeca. La sincronización entre dispositivos se corrige midiendo tiempos de ida y vuelta y ajustando marcas temporales, consiguiendo precisiones habitualmente por debajo de 5 ms. Respecto a red y consumo, en modo Full Sensor el ancho de banda típico es 7 a 12 Mbps y la latencia en red local WiFi baja suele estar entre 5 y 10 ms. Con todo activo la batería dura alrededor de 2 horas; en modos reducidos puede extenderse hasta 6 horas si solo se transmite IMU.

Desde la perspectiva de desarrollo, usar WebSocket ofreció comunicación bidireccional, compatibilidad inmediata con navegadores y con lenguajes habituales como Python, JavaScript y C++. Elegir estándares abiertos como JSON, PLY y MCAP facilitó la interoperabilidad y la integración con pipelines de datos y herramientas de inteligencia de negocio. Para desarrolladores que quieran empezar rápido hay un SDK que permite conectarse, recibir streams y procesar eventos de sensores sin lidiar con la complejidad nativa de iOS.

En Q2BSTUDIO, empresa especializada en desarrollo de software y aplicaciones a medida, aprovechamos este tipo de soluciones para acelerar proyectos de investigación y productos prototipo. Nuestro enfoque en software a medida y soluciones de inteligencia artificial permite convertir prototipos basados en sensores móviles en productos escalables. Si necesitas desarrollar aplicaciones que integren captura de sensores, visión por computador o soluciones de IA para empresas, podemos ayudar desde la fase de prueba de concepto hasta la producción. Con servicios que abarcan desde software a medida y aplicaciones a medida hasta implementación en la nube, contamos con experiencia en servicios cloud aws y azure y despliegues seguros.

Además integramos capacidades de inteligencia artificial, agentes IA y análisis con Power BI para extraer valor de los datos capturados por sensores, así como servicios de ciberseguridad y pentesting para proteger sistemas críticos. Si tu proyecto requiere servicios inteligencia de negocio, IA para empresas o arquitecturas que incluyan streaming de sensores, podemos diseñar pipelines que vayan desde la captura en campo hasta dashboards y modelos predictivos en producción. Consulta nuestras soluciones de inteligencia artificial para empresas en el apartado de inteligencia artificial.

Qué aprendí construyendo esto: la gestión de memoria y threading en iOS es crítica para sensores de alta frecuencia, y es clave manejar errores del mundo real como denegación de permisos o caídas de GPS. Estándares abiertos ahorran tiempo y facilitan integración con herramientas de analítica y BI. En resumen, si el montaje de hardware te está frenando, usar el teléfono como plataforma de sensores con un servidor WebSocket reduce drásticamente la fricción. En Q2BSTUDIO podemos ayudarte a convertir esos prototipos en soluciones robustas y seguras, integrando software a medida, inteligencia artificial y servicios cloud para que pases de la idea al producto con rapidez.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.