BlueProject
Published on

Open Sweep LiDAR — ICP con webcam no alcanza para los ojos de la estacion

Authors
  • avatar
    Name
    Mateo Londoño Toro
    Twitter

La estacion BioMotion Capture Station necesita mas que un celular bien montado. Necesita ojos espaciales: saber donde esta el suelo, el volumen de captura y el entorno. En paralelo al hardware mecanico, estoy construyendo open-sweep-lidar: un escanner 3D por barrido de un eje, con ports plug-in para que manana el sensor cambie sin reescribir el ensamblador.

Esta nota documenta un experimento real de hoy: webcam + profundidad monocular + yaw asumido + ICP. Spoiler: el software midio bien. El mapa no sirvio.

Que intentaba

Flujo Fase 0:

webcam → depth ONNX → proyectar con yaw seed → ICP vs mapa → append PLY

La idea era la de la literatura de turntable: el angulo nominal es solo semilla; ICP alinea el solape. Sin encoder todavia, y sin ToF metrico.

Evidencia 1 — el abanico

Con Auto-acumular y step_deg=8, el preview mostro ~60k puntos y ~20 poses. Visualmente: petals (abanico de arcos por pose), no una habitacion.

Mapa acumulado en UI: abanico de poses coloreadas

Eso es exactamente el fallo que describe la spec del live map: si el giro fisico no coincide con el seed (o la depth es pobre), las capas no forman el cuarto.

Evidencia 2 — ICP si corre

Corrida controlada (Auto OFF, Open3D instalado):

[Open3D OK]
#000  yaw=   0.0°  + 19200 pts  total=  19200  [ancla]
#001  yaw=   8.0°  + 19200 pts  total=  38400  icp=0.865 rmse=0.0194
#002  yaw=  16.0°  + 19200 pts  total=  57600  icp=0.304 rmse=0.0255
ICP rechazado (fitness=0.064 < 0.3). Gira mas despacio / mas solape.

Lectura:

PoseFitnessQue dice
#0010.865ICP engancha fuerte
#0020.304Justo sobre el umbral
siguiente0.064 rechazadoNo corrompe el mapa — comportamiento correcto

Gate cuantitativo: pasa. Gate de producto (mapa reconocible): todavia no.

Evidencia 3 — el PLY de 3 poses

Export con poses=3 / 57 600 puntos. Vista cenital y lateral:

Top-down XY y lateral XZ del mapa-live.ply

Se ve un abanico del FOV hacia adelante, doble punta cerca del origen y una "pared" gruesa/ruidosa. No es una esquina de habitacion. Depth monocular + residual de alineacion no alcanzan para ojos de estacion.

Decision: Camino A (hardware)

Evaluamos foundation models (DUSt3R, CUT3R, LingBot-Map, etc.) como posible corrector de pose. Conclusion corta:

  • varios son NC (no comerciales) o exigen GPU grande
  • LingBot-Map (Apache, streaming ~20 FPS claim) queda en reserva
  • el liston de BioMotion no se cumple tuneando mas ICP sobre webcam

Camino elegido: profundidad metrica de sensor + encoder 1-DoF, mismo contrato DepthSensor / YawSource / assemble.py.

SKU pedido hoy: VL53L8CX 8×8 ToF (breakout I2C/SPI). Encaja con el adapter 8×8 y el camino ESP-IDF + ULD ya documentado en el repo.

Pedido VL53L8CX en Mercado Libre

Como encaja con BioMotion

En el roadmap de la Capture Station, V3 es montaje de profundidad (RealSense u equivalente). Open Sweep no reemplaza la mecanica: aporta el pipeline de nube (proyeccion, yaw, export). La estacion aporta el montaje estable. Mismos ojos, dos repos, una interfaz.

BioMotion V3 (montaje)  +  open-sweep (ports + assemble)  →  mapa metrico del volumen de captura

Proximos pasos publicos

  1. Llega el VL53L8CX → bring-up y primer DepthFrame con metric=True
  2. Encoder de yaw (ADR-001) — sin el, el seed sigue siendo fragil
  3. Mapa de esquina reconocible como criterio de aceptacion (no solo fitness ICP)

Serie relacionada: inicio BioMotion · producto antes del CAD.

Si queres el detalle tecnico de los foundation models descartados (licencias, streaming, latencia vs tick de 0.55 s), esta en el repo open-sweep-lidar bajo docs/referencias/eval-3d-foundation-models.md.