New organ: IR Position Array (8x ESP32-S3 AI CAMs as indoor GPS). Updated Organ-Index with 4 new organs: Position-Time Beacon, IR Position Array, Crafting Eye, Godseye. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
264 lines
9.2 KiB
Markdown
264 lines
9.2 KiB
Markdown
# IR Position Array Organ
|
||
|
||
**Room-scale organism tracking via IR beacon triangulation.**
|
||
|
||
> *"The organisms can't see their own backs. They know themselves through each other."*
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
The IR Position Array is **infrastructure** — fixed cameras that run 24/7, tracking all organisms via their IR beacons. This is the nimmerverse's indoor GPS.
|
||
|
||
---
|
||
|
||
## Hardware Specification
|
||
|
||
| Component | Spec | Quantity | Status |
|
||
|-----------|------|----------|--------|
|
||
| **Camera** | ESP32-S3 AI CAM (night vision) | 8× | Received 2026-01-05 |
|
||
| **IR Sensitivity** | Native (night vision LEDs + sensor) | - | Built-in |
|
||
| **Resolution** | OV2640/OV5640 | - | TBD confirm |
|
||
| **Power** | 5V wired (ceiling PSU) | - | Planned |
|
||
| **Enclosure** | 3D printed custom case | 8× | To design |
|
||
|
||
### Upgrade from Original Spec
|
||
|
||
| Original (Nimmerswarm-Interface) | Actual |
|
||
|----------------------------------|--------|
|
||
| 4× PS3 Eye (IR filter removed) | 8× ESP32-S3 AI CAM (native IR) |
|
||
| USB hub / extension | WiFi streaming (no USB!) |
|
||
| ~80 CHF cameras | Already purchased |
|
||
|
||
**8 cameras > 4 cameras = better coverage, more triangulation angles, redundancy.**
|
||
|
||
---
|
||
|
||
## Architecture
|
||
|
||
```
|
||
CEILING (8× fixed cameras, star power from central PSU)
|
||
|
||
┌─────────────────────────────────────────────────────┐
|
||
│ │
|
||
│ [📷1] [📷2] [📷3] │
|
||
│ ╲ │ ╱ │
|
||
│ ╲ ┌────────────┴────────────┐ ╱ │
|
||
│ ╲ │ │ ╱ │
|
||
│ [📷4]──╲──│ ⚡ CEILING PSU │─╱──[📷5] │
|
||
│ ╲ │ (center, 5V hub) │╱ │
|
||
│ ╲└─────────────────────────┘ │
|
||
│ ╲ │ ╱ │
|
||
│ ╲──────────┼──────────╱ │
|
||
│ │ │
|
||
│ [📷6] │ [📷7] │
|
||
│ │ │
|
||
│ [📷8] │
|
||
│ │
|
||
│ 🤖────📍 IR beacon │
|
||
│ organism │
|
||
│ │
|
||
└───🚪───────────────────────────────────────────────┘
|
||
(0,0) origin
|
||
```
|
||
|
||
---
|
||
|
||
## Dual-Spectrum Design
|
||
|
||
From [[../interfaces/Nimmerswarm-Interface]]:
|
||
|
||
| Spectrum | Channel | Purpose |
|
||
|----------|---------|---------|
|
||
| **Infrared** | IR Position Array | WHERE organism is (24/7, day/night) |
|
||
| **Visible** | 3x3 LED Matrix | WHAT organism is doing (state broadcast) |
|
||
|
||
**Zero crosstalk. Two independent data streams.**
|
||
|
||
---
|
||
|
||
## Processing Pipeline
|
||
|
||
```
|
||
8× ESP32-S3 AI CAM
|
||
│
|
||
│ WiFi/MJPEG streams
|
||
▼
|
||
┌─────────────────────────────────┐
|
||
│ PROCESSING NODE │
|
||
│ (The Womb / RTX 6000 Max-Q) │
|
||
│ │
|
||
│ • Receive 8 camera streams │
|
||
│ • Detect IR beacon blobs │
|
||
│ • Multi-camera triangulation │
|
||
│ • Structure from Motion (SFM) │
|
||
│ • Output: (x, y, z) @ 30fps │
|
||
└─────────────────────────────────┘
|
||
│
|
||
│ NATS publish
|
||
▼
|
||
┌─────────────────────────────────┐
|
||
│ nats://nimmerverse/position/ │
|
||
│ │
|
||
│ { │
|
||
│ organism_id: "crawler_001", │
|
||
│ x: 1.234, │
|
||
│ y: -2.567, │
|
||
│ z: 0.05, │
|
||
│ confidence: 0.95, │
|
||
│ timestamp: 1704499200.123 │
|
||
│ } │
|
||
└─────────────────────────────────┘
|
||
│
|
||
▼
|
||
PHOEBE (ground truth storage)
|
||
```
|
||
|
||
---
|
||
|
||
## Algorithm: Low-Cost-Mocap
|
||
|
||
Standing on shoulders of [Low-Cost-Mocap](https://github.com/jyjblrd/Low-Cost-Mocap) by @jyjblrd:
|
||
|
||
| Component | Their Solution | Our Adaptation |
|
||
|-----------|----------------|----------------|
|
||
| Multi-camera triangulation | OpenCV SFM bundle adjustment | Same |
|
||
| Camera calibration | `camera_params.json` | Same process |
|
||
| 3D reconstruction | Epipolar geometry | Same math |
|
||
| Markers | Visual markers on drones | IR LEDs on organisms |
|
||
| Communication | ESP32 wireless | NATS messaging |
|
||
|
||
**Original use:** Indoor drone swarms
|
||
**Our use:** Organism positioning in nimmerhovel
|
||
|
||
*Respect to the fellow ape who did the groundwork.*
|
||
|
||
---
|
||
|
||
## Camera Placement Strategy
|
||
|
||
### Nimmerhovel Dimensions
|
||
- **X:** 4.5m (along wall from kitchen door)
|
||
- **Y:** 3.75m (into room toward windows)
|
||
- **Z:** 2.04m (floor to sloped ceiling)
|
||
- **Origin:** (0,0,0) at kitchen door corner
|
||
|
||
### 8-Camera Coverage
|
||
|
||
| Camera | Position (approx) | Orientation | Coverage |
|
||
|--------|-------------------|-------------|----------|
|
||
| CAM-1 | Corner (0, 0, ~2.0m) | Down 45°, into room | Origin quadrant |
|
||
| CAM-2 | Corner (4.5, 0, ~2.0m) | Down 45°, into room | Right-front |
|
||
| CAM-3 | Corner (0, -3.75, ~2.0m) | Down 45°, toward door | Left-back |
|
||
| CAM-4 | Corner (4.5, -3.75, ~2.0m) | Down 45°, toward door | Right-back |
|
||
| CAM-5-8 | Mid-walls / center | TBD | Fill gaps |
|
||
|
||
**8 cameras = no blind spots, multiple angles on every point.**
|
||
|
||
### Mounting
|
||
|
||
- **Ceiling mount** via 3D printed enclosure with mounting tabs
|
||
- **Angle:** ~45° down from ceiling plane
|
||
- **Power:** Star topology from ceiling PSU (center)
|
||
- **Cable runs:** Max ~3m from PSU to any camera
|
||
|
||
---
|
||
|
||
## Lifeforce Economics
|
||
|
||
| Metric | Value | Rationale |
|
||
|--------|-------|-----------|
|
||
| **Type** | Generator | Provides ground truth |
|
||
| **Rate** | +0.5 LF per position fix | Training data value |
|
||
| **Cost** | ~0.1 LF per frame (infra) | Always-on baseline |
|
||
| **Net** | Positive (generates value) | Core infrastructure |
|
||
|
||
**Every position fix = verified training data for organism navigation.**
|
||
|
||
---
|
||
|
||
## IR Beacon Specification
|
||
|
||
On each organism:
|
||
|
||
| Component | Spec |
|
||
|-----------|------|
|
||
| **LED Type** | IR LED (850nm or 940nm) |
|
||
| **Pattern** | Unique pulse code per organism |
|
||
| **Power** | From organism Akku |
|
||
| **Visibility** | Detectable by all 8 cameras |
|
||
|
||
```
|
||
ORGANISM
|
||
┌─────────────────────┐
|
||
│ │
|
||
│ ┌───────────────┐ │
|
||
│ │ 3x3 VISIBLE │ │ ← State broadcast (RGB)
|
||
│ │ LED Matrix │ │
|
||
│ │ 🔴⚫🟢 │ │
|
||
│ └───────────────┘ │
|
||
│ │
|
||
│ 📍 IR LED │ ← Position beacon (invisible)
|
||
│ │
|
||
│ [🔋 Akku] │ ← Mobile power
|
||
│ │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## Integration Points
|
||
|
||
| System | Interface |
|
||
|--------|-----------|
|
||
| **NATS** | `nats://nimmerverse/position/stream` |
|
||
| **Phoebe** | `organism_positions` table |
|
||
| **S2 Cells** | Position → S2 cell ID at L1 (1cm) resolution |
|
||
| **Virtual Garden** | Ground truth for prediction verification |
|
||
| **Vision Organ** | Separate stream (visible spectrum state recognition) |
|
||
|
||
---
|
||
|
||
## Dependencies
|
||
|
||
| Dependency | Status | Notes |
|
||
|------------|--------|-------|
|
||
| 8× ESP32-S3 AI CAM | Received | Hardware ready |
|
||
| Ceiling PSU | Planned | Power distribution |
|
||
| 3D printed enclosures | To design | Camera mounting |
|
||
| Printer station | Blocked | Waiting on Baumarkt materials |
|
||
| NATS messaging | Planned | Transport layer |
|
||
| The Womb (RTX 6000) | Waiting | Processing node |
|
||
|
||
---
|
||
|
||
## Calibration Procedure
|
||
|
||
1. **Camera intrinsics** — Checkerboard calibration per camera
|
||
2. **Extrinsics** — Multi-camera pose estimation (bundle adjustment)
|
||
3. **Origin alignment** — Align to GPS beacon at (0, 0, 2.0m)
|
||
4. **Verification** — Known position test with ruler measurements
|
||
|
||
---
|
||
|
||
## Status
|
||
|
||
| Phase | Status |
|
||
|-------|--------|
|
||
| Hardware acquisition | Complete |
|
||
| Enclosure design | Not started |
|
||
| Enclosure printing | Blocked (printer station) |
|
||
| Physical mounting | Not started |
|
||
| Camera calibration | Not started |
|
||
| Software pipeline | Not started |
|
||
| Integration test | Not started |
|
||
|
||
---
|
||
|
||
**Created**: 2026-01-05
|
||
**Version**: 1.0
|
||
**Based on**: [[../interfaces/Nimmerswarm-Interface]] (Dual-Spectrum Architecture section)
|
||
**Philosophy**: "They know themselves through each other."
|
||
|
||
*The eyes that never blink. The infrastructure that makes position truth.*
|