Pedido de J.L.L.O. (/goal 2026-10-30): «prepara un plan de arquitectura y diseño de implementación, pero no como lo deseas tú, la pieza completa; hay que ver qué tiene cada una con profundidad y qué hay que tomar en cuenta… y así termina el trabajo auditado y afinado».
Base del plan:
FICHAS_PIEZAS_ECO_VUELO_OIDO_PLAN_2026-10-30.md
(24 piezas leídas en su código, con archivo y línea).LICENCIAS_HARK_DREGON_DRONEAUDIOSET_2026-10-30.md.Estado: propuesta auditada dos veces por revisores independientes (CONFIRMA CON RESERVAS; correcciones aplicadas, ver §7 y §8) y enriquecida con lo propio de ÁNFORA, QUERENCIA, SPANDA y S1N en cada módulo (§1 y §3). Nada de esto está construido. Cada etapa es un ticket con el protocolo commiteado antes de correr (TK-804), vara de 0,70 y pruebas de ≤ 15 min (regla de los exámenes cortos).
Cada pieza externa entra de una de cuatro maneras, y nunca entra el paquete completo:
| Manera | Cuándo | Piezas |
|---|---|---|
| Se usa tal cual, configurada | Licencia libre y la pieza ya hace bien lo que se necesita | Geocerca y protecciones de PX4 (A1, A2), MAVLink Onboard (A3),
goto de MAVSDK (A4), mavlink_direct (A5), QGC
sin modificar (A7), tuning.py del ReSpeaker (B5, con el
arreglo tobytes), firmware de 6 canales (B4) |
| Se toma el método y se reescribe en S1N | La licencia lo exige (GPL, AGPL, HARK) o la pieza trae errores | Escenarios ponderados y actualización de SAROPS (C1, C2), planificador (C3), Charnes–Cooper (C4), costo de Tobler (C6), cola sin internet (C7), fórmulas IAMSAR (C8), MapScore (C9), SRP-PHAT de campo lejano proyectado sobre las celdas (B1, idea de ODAS), blanqueo GEVD (B6, idea de HARK) |
| Se usa sólo en el laboratorio | Sirve para medir, no va en el producto | SAREnv parchado (C5), pyroomacoustics (B7), SORAL
en C++ corregido como comparador (C4), DroneAudioSet
(MIT; también podría ir al producto), DREGON (sin licencia: sólo para
medir). Por revisar: hark-rescue (MIT) |
| No se usa | No sirve a S1N o arrastra riesgo | El seguimiento combinatorio de ODAS (B3), uXRCE-DDS/ROS 2 por ahora, código de HARK, GPL de Pátrač, SearchWing y WiSAR |
Herramientas de S1N que ya existen y se reusan
(están conectadas; ver SCRIPTS/PRODUCTO en
s1n_cli.py):
eco v0.1: localiza por RSSI.caja: caja negra con registro inalterable de cada
lectura.kms y cripto14: llaves y firma del
enlace.interferencia: aviso de inhibidor.difusion: reparto eficiente a la flota.comunicaciones: frecuencias.Lo propio de ÁNFORA, QUERENCIA, SPANDA y S1N, módulo por
módulo (pedido de J.L.L.O., 2026-10-30: «debe enriquecer cada
herramienta con temas de ÁNFORA, de QUERENCIA, de SPANDA, de S1N, de
todo lo que tenemos propio, en todas»). Cada módulo de §3 tiene su
apartado «Lo propio que entra», con la ruta, el estado (CONECTADA /
PROMETE / sólo idea) y lo que lo mataría. Rutas comprobadas el
2026-10-30. Regla: nada propio entra al producto sin pasar por el
protocolo rápido (TK-804) con datos del módulo; un aporte probado en
otro ámbito (física, MALDI, histogramas) cuenta como idea en este.
QUERENCIA se usa con la definición vigente de Juan (2026-10-24):
la tendencia a salir del equilibrio buscando otro,
medida con el testigo de fuga de TK-1174; los operadores de junio
(versor, ⟨cosθ⟩) quedan como herramientas, no como «la querencia». Lo
que no calza con ningún módulo y no se fuerza: umbral,
refuta, certifica, cota,
corte, toro, qubo y
S1N-REPARTO.
| Módulo | Lo propio que entra |
|---|---|
eco.tiempo |
tiempo + caja (sello firmado), S1N-RELOJ
(flota) |
eco.vuelo |
terreno de propaga, interferencia,
persistencia de QUERENCIA |
eco.oido |
alarma, picos --escucha, testigo de fuga
(ritmo), falsador F2 |
eco.nariz / eco.radar /
eco.calor |
testigo de fuga P4 (propia o empujada), fuga que se queda,
discordia; idea: irreversibilidad de SPANDA |
eco.gente |
casi nada: lectores sólo en tierra |
eco.mapa |
árbitro de e-values, compuerta térmica, rubrica,
calibración ECE/Brier |
eco.plan |
termo programa, guarda dimensional, QUÓRUM; idea:
QUERENCIA de la persona perdida |
eco.cola |
enlace, caja, cripto14,
difusion |
eco.vara |
TOST, control vacío, bench_lib v2,
pruebas |
Raspberry Pi 5 (un solo reloj monotónico)
┌──────────────┐ eventos JSONL ┌────────────────┐ celdas ┌──────────────┐
│ eco.oido │──────────────────▶│ │─────────▶│ eco.plan │
│ eco.nariz │ {t, sentido, │ eco.mapa │ │ siguiente │
│ eco.radar │ pose, lectura, │ (grilla de │◀─────────│ celda, IAMSAR│
│ eco.calor │ calidad} │ ocupación) │ POS └──────┬───────┘
│ eco.radio(v0.1) │ │ │ goto (con visto
│ eco.gente │──── escenarios ──▶│ SÍ/NO SÉ/BAJA │ │ bueno del operador)
└──────▲───────┘ └───────┬────────┘ ┌──────▼───────┐
│ pose interpolada │ S1N_CELL + │ eco.vuelo │──MAVLink TELEM2──▶ Pixhawk (PX4)
┌──────┴───────┐ │ NAMED_VALUE_FLOAT └──────────────┘ geocerca, Hold/Return
│ eco.tiempo │◀── TIMESYNC, GLOBAL_POSITION_INT, ATTITUDE ───────────────────────────────┘
└──────────────┘ ▼
./s1n caja (registro sellado) · eco.cola (sin internet) ──▶ tierra: pantalla propia + QGC sin tocar + GPX por sector
eco.tiempo (A6)GLOBAL_POSITION_INT y ATTITUDE crudos,
porque la telemetría de MAVSDK no trae marca de tiempo.tiempo + caja
(producto/s1n/oficio/tiempo.py, caja.py;
CONECTADAS, TK-1257 y TK-1254): sellan la hora de cada lectura con
firma, para la cadena de evidencia. No mejoran la pose.laboratorio_cripto/reloj_tk1278/; PROMETE en TK-1278, con
la reserva K6): hora común entre drones, para fundir golpes oídos por
dos drones. Con un solo dron no hace falta y no reemplaza el TIMESYNC
con el Pixhawk.eco.vuelo (A1–A5, A7)GF_ACTION=2 (o 3, Return).NAV_DLL_ACT=2: failsafe si se pierde
el enlace con tierra; por omisión está apagado.COM_RC_IN_MODE=4.COM_OF_LOSS_T y COM_OBL_RC_ACT=5 quedan
fijados para cuando se use offboard, pero no aplican en
v1, que usa sólo goto.CompanionComputer.
Si arranca como estación de tierra, PX4 nunca detecta que se perdió la
estación real.goto (DO_REPOSITION). PX4 revisa
sólo el destino contra la cerca y responde
ACCEPTED aunque lo rechace: el rechazo sólo se ve en el
STATUSTEXT «Reposition is outside geofence».Commander.cpp:903-913). La
Pi trata los tres casos.COM_OF_LOSS_T; en goto (v1) el dron sigue
en Hold hasta el failsafe de batería o el de enlace con tierra,
flotando sobre los rescatistas.NAMED_VALUE_FLOAT; si falta más de 10 s, el operador hace
Return por radio. Escrito en el procedimiento de vuelo.COM_POS_FS_* y su acción en el archivo de
parámetros.propaga (Copernicus GLO-90
en ANFORA/scripts/anfora_s1n_propaga_v1_1_9.py; CONECTADA
para radio, TK-864, no probada para vuelo): la Pi valida el trayecto en
altura AMSL con ese terreno. A 90 m de resolución es grueso para
quebradas y edificios: margen vertical acorde.interferencia
(producto/s1n/oficio/interferencia.py; CONECTADA, TK-1141):
un aviso FUERTE de inhibidor dispara el Return. Con inhibidor débil no
avisa.SPANDA_MATH_LAB_v1/QUERENCIA_QX/querencia_lector_fiel_v1.py;
sólo sintético): ⟨cosθ⟩ de los desplazamientos confirma que el goto
avanza hacia el destino y no derivó. El chequeo simple de distancia
puede bastar: entra sólo si gana en el protocolo rápido.S1N_CELL (XML fijado por sha256; carga útil de
255 bytes como máximo).NAMED_VALUE_FLOAT (nombre de 10 caracteres
como máximo), porque QGC descarta los mensajes propios..plan sólo con ítems
simples o survey v5; cualquier otro hace fallar la
importación en MAVSDK. Validarlo con el importador de MAVSDK
y abrirlo en QGC.goto afuera de la cerca: responde ACCEPTED, sale el
STATUSTEXT y la posición no cambia. La Pi lo detecta y no lo
reintenta.NAV_DLL_ACT.COM_POS_FS_*.mavlink_receiver.cpp:1398 cuando el
home ≠ origen del EKF: confirmarlo (afecta sólo a offboard)..plan abre en QGC.eco.oido (B1, B2,
B4–B8)HPFONOFF 0), y
fijar AGCGAIN=1. Hacerlo en cada arranque
y verificarlo leyendo los valores.alarma
(ANFORA/scripts/anfora_s1n_alarma_v4.py; CONECTADA,
TK-223): primer filtro barato de golpes contra el piso de ruido móvil,
~10 µs por dato. Riesgo: el ruido no estacionario de las hélices la hace
disparar.picos --escucha
(ANFORA/scripts/anfora_s1n_escucha_v3_9.py; CONECTADA,
TK-866, probada en MALDI y CMS): marca las líneas tonales de las hélices
para rechazarlas, con un umbral global que controla el efecto de buscar
en muchas frecuencias. Riesgo: un audio corto puede no darle
resolución._tickets/TK-1174_S1N_RIESGO_FUGA_COMPUERTA_P0/testigo_fuga_tk1174.py;
P0 ABRE, sintético): separa golpes rítmicos de alguien vivo de crujidos
sueltos del escombro. Pide ≥ 10 intervalos, y la receta parte con 3
golpes: sirve para confirmar, no para la primera alarma.SPANDA_MATH_LAB_v1/QUERENCIA_QX/CONSOLIDADO_QUERENCIA_…):
prueba de humo; la decisión no cambia si la señal se multiplica por
c.eco.nariz,
eco.radar, eco.calor_tickets/TK-136_CONTRATO_LUPAS_CERTIFICACION/AISLADO_F2/scripts/anfora_fuga_se_queda_v1.py;
inventario ALTA, sin examen): ¿el CO₂ subió en escalón persistente
(persona) o fue un pulso que vuelve (hélices)? Riesgo: el CO₂ de alguien
atrapado también llega en pulsos con la ventilación.discordia
(ANFORA/scripts/anfora_s1n_discordia_v1_2.py; CONECTADA con
su confianza; en TK-515 el acierto fue 0,606, bajo la vara de 0,70 (NO
SOSTIENE), pero con confianza 4–5 acierta ≈ 0,9): ubica la anomalía en
la fase del radar o en el CO₂. Creerle sólo con confianza 4–5; necesita
un tramo inicial limpio.SPANDA_MATH_LAB_v1/motor_irreversibilidad_v2.py)
para separar lo vivo (fuera de equilibrio) del objeto tibio (el oso de
peluche). Con térmico de 9 Hz y series cortas puede no alcanzar; su
control guarda_no_normal_v2.py puede reproducirlo.eco.gente:
lo que cuenta la genteeco.mapa.lectores (CONECTADA, TK-660) podría sacar
el lugar de un relato transcrito y decir SIN EL DATO, pero necesita un
modelo de lenguaje (no corre sin internet en la Pi) y la regla 3 prohíbe
inferir significados: sólo en tierra y con el texto citado.eco.mapa: el corazón propio (C2, corregido por la
auditoría)eco.gente y N̂ el número de atrapados estimado del relato y
del censo (nunca el real). Lo que se reporta son las víctimas
esperadas halladas Σp_i·POD_i, que puede pasar de 1; no es la
POS de IAMSAR y no se compara con ella.eco.tiempo (con celdas de 1 m y GPS de ±2–5 m, pesa más que
el desfase de reloj).COLISIONADOR_LHC_HIGGS_v1/scripts/anfora_viveka_v3_evalues.py;
APORTA en TK-578, en física): evidencia por celda que se puede mirar en
cada vuelta sin inflar las falsas alarmas (desigualdad de Ville), y el
promedio de e-values sigue valiendo aunque CO₂ y radar dependan entre
sí. Ataca el riesgo de independencia de arriba. Su garantía vale lo que
valgan la POD y la PFA medidas: con las de mesa, es optimista.ANFORA/scripts/anfora_s1n_compuerta_termica_v1_1.py;
CONECTADA, SOSTIENE 8/8, TK-312): si la lectura está «caliente»
(inestable), todo SÍ baja a NO SÉ. Calibrada para histogramas:
recalibrar para celdas.rubrica
(ANFORA/scripts/anfora_s1n_rubrica_v1.py; CONECTADA,
TK-432): pone precio a SÍ / NO SÉ / BAJA PRIORIDAD según el costo del
error. El castigo lo fija Juan; la rúbrica sólo cuenta.productos/anfora_sistema_uno/as1/calibracion.py; inventario
MEDIA): ECE y Brier para saber si la P del mapa es una probabilidad de
verdad. Pide muchos casos con verdad conocida.eco.plan (C3, C4, C6,
C8)objectSizeSweepwidth.py:3).termo programa
(ANFORA/scripts/anfora_s1n_termo_lenguaje_v2_66.py;
CONECTADA): es el recocido que reparte drones y exporta LP para que
HiGHS lo confirme. Recordar que HiGHS ya dio falsos óptimos: el óptimo
se cree sólo con la comparación contra Charnes–Cooper donde aplica.SPANDA_MATH_LAB_v1/guarda_dimensional_v1.py; inventario
MEDIA): atrapa errores de unidades en los patrones IAMSAR, como el de
SearchWing.laboratorio_cripto/quorum_tk1273/; PROMETE en TK-1273, sin
auditoría): todos los drones cambian de plan a la vez, sin mezclar
planes. Con un solo dron no aplica.ANFORA_HISTORICO/RECONSTRUCCION/incorporados/Riemann/FORMULA_CANDIDATA_QUERENCIA_PROPENSION_FUGA_v1_2026-09-01.md,
+ testigo de TK-1174): q_B(T) = probabilidad de que la persona salga del
sector B en el tiempo T, con la barrera V_B = costo de Tobler
(acantilado, río), para decidir cuándo agrandar el sector. ÁNFORA no
tiene datos de comportamiento de personas perdidas (búsqueda S1N, fallo
de recall) y mucha gente se queda quieta o sigue senderos: no es
difusión en un potencial. Queda como idea hasta tener datos
(ISRID).eco.cola (C7)enlace
(producto/s1n/oficio/enlace.py; en PRODUCTO, TK-1247/1261):
fragmenta, quita duplicados, revisa CRC y responde con ACK ternario y
certificado de entrega en el salto de radio. Se define una sola capa que
reintenta (la cola), para no duplicar. caja,
cripto14 y difusion ya estaban../s1n caja.eco.vara (C9, C5)values[fila, col] en float64, con r = fracción de celdas
estrictamente mayores + ½ de las empatadas (si no, un mapa uniforme no
da R ≈ 0). El repo no declara licencia: se reimplementa sólo la métrica
publicada.SPANDA_MATH_LAB_v1/lab_veredicto_balanceado_v1.py; APORTA
en TK-578, con ≥ 2 semillas): prueba formal de «el recocido iguala a
Charnes–Cooper» (|ΔPOS| ≤ 10⁻³) en E2._tickets/TK-136_CONTRATO_LUPAS_CERTIFICACION/AISLADO_F2/scripts/anfora_control_vacio_v1.py;
inventario MEDIA, a rehacer liviano): cota superior de Clopper-Pearson
de la PFA de mesa, con n dicho antes de medir (E3, E4).bench_lib v2
(APORTA en TK-578): poder y efecto mínimo detectable, para saber cuántas
semillas o ensayos pedir. Antes, arreglar su error de empates en
aurc().pruebas (CONECTADA): revisa los
números de cada informe antes de mandarlo.while True.| Etapa | Qué se arma | Piezas | Puerta (por escrito antes de correr) | Duración |
|---|---|---|---|---|
| E0 · La vara | eco.vara |
C9, C5 parchado | MapScore: R ≥ 0,99 con pico en la víctima, |R| ≤ 0,01 si es uniforme, R ≤ −0,99 si está invertido. SAREnv parchado: mediana de r en e^μ ± 10 % | ≤ 5 min |
| E1 · Mapa v0 en simulación | eco.mapa + eco.gente |
C1, C2 | A = mapa actual (TK-1285) contra B = grilla corregida, misma entrada
y mismo presupuesto de esfuerzo, más un control C =
barrido al azar. Ninguna estrategia ve la verdad:
TK-1285 fijaba la previa con el número real de víctimas
(sim_sentidos_tk1285.py:45); A y B usan N̂.
Puerta: víctimas halladas de B ≥ 0,70; B − A ≥ un
margen dicho antes y mayor que la diferencia entre A y A2 (A con otras
semillas); falsas marcas de B ≤ las de A; B > C. El umbral SÍ del
examen se commitea antes (no es umbral de vida). Contra la
circularidad: el generador trae lo que B no modela —falsas
alarmas persistentes (tomas correlacionadas), atenuación por clase de
material oculta, N real ≠ N̂—; no se usa SAREnv (es de montaña); la
POD/PFA de B sale de semillas de calibración separadas; n de semillas
dicho antes |
≤ 15 min |
| E2 · Reparto | eco.plan |
C4, C3 | (a) Donde CC es óptimo: |ΔPOS| ≤ 10⁻³ contra CC reescrito (validado contra el C++ corregido), con la misma discretización del esfuerzo en los dos y TOST con ≥ 2 semillas. (b) Con varios drones y traslado, en el modelo de ocupación que decide: víctimas esperadas halladas, B contra A voraz, evaluadas con partículas o semillas independientes de las que se usaron para planificar (si no, gana quien optimiza sobre la muestra); PROMETE si B − A ≥ un margen dicho antes | ≤ 15 min |
| E3 · Oído en la mesa | eco.oido |
B5, B4, B8, B1, B2 | Golpes grabados en la mesa (DroneAudioSet no trae golpes humanos), mezclados con ruido de hélice de DroneAudioSet. Detector: acierto ≥ 0,70 con una PFA máxima por minuto escrita antes de correr (cota de Clopper-Pearson con el control vacío). Los golpes del examen son otros que los usados para calibrar los umbrales; la SNR de mezcla se fija antes con la geometría real. La mezcla digital no reproduce la saturación del micrófono: el resultado es una cota superior hasta E7. Rumbo: error medido con huincha y comparado con la meta de ±15° de la simulación (medición, sin puerta hasta tener datos) | ≤ 15 min por prueba |
| E4 · Nariz, radar y calor | POD/PFA por sentido | — | Medición, no puerta: curvas λ_s(d, clase) y α_s con n escrito antes de medir; matriz conjunta CO₂–radar | ≤ 15 min por prueba |
| E5 · Fusión en la mesa | todo | — | Medición: mapa con todos los sentidos contra cada sentido solo, frente a la verdad con huincha; MapScore R por ensayo | ≤ 15 min |
| E6 · Vuelo en simulador | eco.tiempo, eco.vuelo |
A3 → A6 → A2 → A1 → A4 → A7 → A5 | Las pruebas de SITL de §3.2, todas aprobadas (incluidas Pi caída en goto, reinicio sin reenvío y pérdida de GPS); desfase ≤ 20 ms en SITL y medido por UART; antes de E6, prueba de CPU, RAM y latencia en la propia Pi (E3 y E5 corren en el Mac) | ≤ 15 min |
| E7 · Ruido real de hélices | GEVD | B6 | Medición: SEVD contra GEVD en error angular, con K grabada por banda de RPM; ecuaciones verificadas contra los PDF antes | ≤ 15 min |
Orden y dependencias:
goto, no offboard, en v1:
goto pasa por la geocerca; los puntos de offboard no.delete y acumulador.eco.mapa: nadie
fusiona sentidos no visuales con su confianza por celda (benchmark del
2026-10-29).Tiempo real: no hay presupuesto de latencia. Se
fija en ms por etapa (oído, GEVD sobre las celdas, mapa). En el Mac se
mide con macmon; macmon no corre en la Raspberry: allí
el pico de memoria se mide con memory.peak del cgroup o
VmHWM de /proc/<pid>/status, y la
temperatura y el estrangulamiento con vcgencmd.
Normativa y coordinación: volar exige cumplir la DAN 151 de la DGAC (registro, credencial, vuelo con vista directa, no volar sobre personas sin autorización), coordinar con SENAPRED y Bomberos, y considerar los helicópteros en la zona del desastre. Puerta antes de cualquier vuelo real.
Una sola Raspberry: watchdog de systemd, sistema
de archivos raíz de sólo lectura, caja en otro medio, y PX4
dueño de toda la seguridad de vuelo.
No hay ninguna cifra de CPU ni de RAM de estas piezas en la Raspberry: se mide en E3 y E6 (regla 9).
Ninguna simulación modela el paso de la señal a través de los escombros. Las cifras de terreno sólo llegan con pruebas reales.
Las ecuaciones de GEVD (B6) se escribieron de memoria: verificarlas contra los PDF antes de pre-registrar E7.
Licencias que siguen abiertas para el producto:
mavlink_receiver.cpp:1398 y el ×9 de SearchWing
condicionado a la unidad. El detalle está en las fichas, sección E.Dos revisores independientes que no vieron la primera auditoría: uno leyó las fichas contra el código clonado (27 afirmaciones) y el otro revisó la matemática, las pruebas y la seguridad del plan. Claude comprobó a mano las cuentas y las citas que cambian decisiones.
sim_sentidos_tk1285.py:45, comprobado), y SAREnv no es un
modelo de escombros. E1 rehecho: nadie ve la verdad, control al azar, A
contra A2, generador con lo que B no modela.rubrica en la
respuesta; testigo de fuga de QUERENCIA (P4) para separar lo que provoca
el dron de lo propio de la celda; alarma y
picos --escucha en el oído. Ninguna está probada todavía en
ECO: cada una pasa primero por el protocolo rápido.