adacam/docs/research/adacam-pipeline-map.md

13 KiB
Raw Blame History

Hivemapper Bee Detection Pipeline — Complete Analysis

Generated: 2026-03-29 17:40 PDT
Source: Live data from camera at 192.168.0.10
Last Detection: 2026-03-24 15:55:31 UTC (5 days ago)


🚨 ROOT CAUSE IDENTIFIED

hivemapper-data-logger.service is DISABLED and DEAD

● hivemapper-data-logger.service - Data Logger
     Loaded: loaded (/lib/systemd/system/hivemapper-data-logger.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

Evidence:

  • Last GPS log entry: 2026-03-24 16:02:51 UTC
  • Last SQLite detection: 2026-03-24 15:55:31 UTC
  • GNSSFusion30Hz Redis key has 0 entries
  • Service was disabled at some point on Mar 24

Impact: Without the GPS data logger:

  1. No GNSS data flows into Redis (GNSSFusion30Hz)
  2. LocateLandmarkNode cannot compute lat/lon for detections
  3. StoreLandmarksNode has nothing to write
  4. Detection pipeline is broken at GPS fusion stage

Complete Pipeline Map (from live /opt/map-ai/map-ai.py)

Service Flow

┌─────────────────────────────────────────────────────────────────────┐
│                    HARDWARE LAYER                                    │
├─────────────────────────────────────────────────────────────────────┤
│  Sony IMX412 Sensor (2028×1024 working resolution, 15fps)           │
│  GPS: u-blox @ /dev/ttyS2 (DISABLED - not running!)                 │
│  IMU: /dev/spidev0.0                                                 │
└─────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────┐
│ hivemapper-data-logger.service ← ⛔ DISABLED & DEAD                  │
│   Binary: /opt/dashcam/bin/datalogger                               │
│   Function: Reads GPS/IMU, writes to Redis + SQLite                 │
│   Output: GNSSFusion30Hz (Redis sorted set)                         │
│   Status: INACTIVE since Mar 24 ~16:02 UTC                          │
└─────────────────────────────────────────────────────────────────────┘
                              ↓ (BROKEN - no data flowing)
┌─────────────────────────────────────────────────────────────────────┐
│ depthai_gate.service ← ✅ RUNNING                                    │
│   Binary: /usr/bin/depthai_gate                                      │
│   VPU firmware: /tmp/gate_fw_89czcchq/...                           │
│   Status: Active (running) since Thu Mar 26 14:19:27 UTC            │
│   Memory: 855.8M                                                     │
└─────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────┐
│ redis.service ← ✅ RUNNING                                           │
│   Port: 127.0.0.1:6379                                               │
│   Status: Active since Thu Mar 26 14:19:27 UTC                       │
│   Memory: 2.6M                                                       │
│   Keys present: FRAME_COUNT_RGB, FRAME_COUNT_LEFT, FRAME_COUNT_RIGHT │
│                 MAP_AI_READY=True, EXTERNAL_MODEL_CLASSIFIER_READY   │
│   ⚠️ MISSING: GNSSFusion30Hz (has 0 entries!)                        │
└─────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────┐
│ redis-handler.service ← ✅ RUNNING                                   │
│   Binary: /opt/dashcam/bin/RedisHandler                             │
│   Status: Active since Thu Mar 26 14:19:27 UTC                       │
│   Output DBs: /data/recording/redis_handler/                        │
│               - fusion-v3-0-0.db (GNSS fusion)                      │
│               - sensors-v3-0-0.db (raw sensors)                     │
└─────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────┐
│ map-ai.service ← ✅ RUNNING (but starved of GPS data)                │
│   Binary: /opt/map-ai/map-ai.sh → python3 /opt/map-ai/map-ai.py     │
│   Requires: redis.service only (odc-api dependency removed!)        │
│   Status: Active since Thu Mar 26 14:19:25 UTC                       │
│   Memory: 489.2M                                                     │
│   Log: /data/recording/map-ai.log                                    │
│                                                                      │
│   ⚠️ Constant error: "No input received from any classifier         │
│      after 10000 attempts" (every ~11 seconds)                       │
└─────────────────────────────────────────────────────────────────────┘

Internal map-ai.py Pipeline

ImageSelectorNode (camera frames @ 15fps)
       ↓
ResizeNode (scale for inference)
       ↓
[Optional: EmbeddingsNode]
       ↓
ObjectDetectionNode (YOLOv8 on VPU, ObjectDetectionUS.blob)
       ↓
[Optional: ObjectDetectionNode2 (highlandUs.blob)]
       ↓
FilterDetectionsNode (confidence threshold)
       ↓
OpticalFlowLiveNode (tracking)
       ↓
PrivacyBlurNode (face/plate blur)
       ↓
DepthSGBMNode (stereo depth)
       ↓
LocateLandmarkNode ← ⚠️ REQUIRES GPS FROM REDIS!
       ↓              - Reads GNSSFusion30Hz for lat/lon/heading
       ↓              - If no GPS data: can't compute sign location
       ↓              - Detection can't proceed without geolocation
ClassificationRouterNode ← ⚠️ "No input received" errors here
       ↓                    - Waiting for frames from classifiers
       ↓                    - Nothing coming through because pipeline blocked
StoreLandmarksNode → SQLite /data/recording/odc-api.db
       ↓              - Writes to landmarks table
       ↓              - FROZEN since Mar 24 (no GPS = no writes)
CleanUpNode

Service Status Summary

Service Status Since Notes
map-ai.service Running Mar 26 14:19 Main process active but starved
depthai_gate.service Running Mar 26 14:19 VPU loaded, camera working
redis.service Running Mar 26 14:19 Keys present
redis-handler.service Running Mar 26 14:19 Writing to DBs
adacam-odc.service Running Mar 26 14:19 Forwarder active
hivemapper-data-logger.service DEAD - DISABLED — ROOT CAUSE

Evidence from Live System

1. GPS Data Missing

root@keembay:~# redis-cli zcard GNSSFusion30Hz
0

root@keembay:~# redis-cli KEYS "*GNSS*"
(empty array)

2. Last Detection Timestamp

root@keembay:~# sqlite3 /data/recording/odc-api.db \
  "SELECT MAX(id), MAX(ts), datetime(MAX(ts)/1000, 'unixepoch') FROM landmarks"

229787|1774367731312|2026-03-24 15:55:31

3. Data Logger Last Activity

/data/recording/hivemapper-data-logger.log (last modified: Mar 24 16:02)

2026-03-24 16:02:51.475089267 +0000 UTC [WARNING] TimTp drop of 2000 ms

Timeline: GPS logger stopped ~7 minutes after last detection.

4. Camera Still Working

root@keembay:~# ls /tmp/recording/pics/ | tail -5
1774831137_602000_187520980.jpg
1774831139_536000_187522914.jpg
1774831141_470000_187524848.jpg
1774831143_403000_187526781.jpg
1774831145_337000_187528715.jpg

Camera frames are being captured continuously.

5. map-ai Service Unit

[Unit]
Description=map-AI
Requires=redis.service   # ← odc-api.service dependency REMOVED!

[Service]
ExecStart=/opt/map-ai/map-ai.sh
...

Note: The Requires=odc-api.service line was removed at some point.


All Failure Modes Identified

Primary Failure (Current Issue)

Component State Impact
hivemapper-data-logger DISABLED & DEAD No GPS data
GNSSFusion30Hz Redis key Empty (0 entries) LocateLandmarkNode has no GPS
Detection pipeline Blocked at geo-location StoreLandmarks has nothing
SQLite landmarks table Frozen at ID 229787 No new detections since Mar 24

Secondary Issues

Issue Evidence Impact
"No classifier input" spam Log every ~11 seconds ClassificationRouter starved
odc-api dependency removed map-ai.service changed May have side effects

The Fix

Immediate Action Required

# SSH to camera
ssh root@192.168.0.10

# Enable and start the GPS data logger
systemctl enable hivemapper-data-logger.service
systemctl start hivemapper-data-logger.service

# Verify it's running
systemctl status hivemapper-data-logger

# Verify GPS data is flowing
redis-cli zcard GNSSFusion30Hz
# Should start showing count > 0

# May need to restart map-ai to pick up GPS data flow
systemctl restart map-ai

Verification After Fix

# Wait 1-2 minutes, then check new detections
sqlite3 /data/recording/odc-api.db "SELECT MAX(id) FROM landmarks"
# Should show number > 229787 after driving

# Check GPS data
redis-cli GET GNSSFusion30Hz
# Should return GPS JSON data

Key File Locations

File Path Purpose
map-ai.py /opt/map-ai/map-ai.py Main detection script
map-ai.sh /opt/map-ai/map-ai.sh Wrapper script
map-ai service /etc/systemd/system/map-ai.service Service unit
GPS logger service /lib/systemd/system/hivemapper-data-logger.service GPS service
landmarks DB /data/recording/odc-api.db Detection storage
GPS fusion DB /data/recording/redis_handler/fusion-v3-0-0.db GNSS data
map-ai log /data/recording/map-ai.log Service log
GPS logger log /data/recording/hivemapper-data-logger.log GPS service log
cache mode flag /data/.cache Should NOT exist
Redis Key Purpose
GNSSFusion30Hz GPS fusion data (sorted set) — MUST HAVE DATA
MAP_AI_READY map-ai status flag
FRAME_COUNT_RGB Frame counter
EXTERNAL_MODEL_CLASSIFIER_READY Classifier status

What Changed Since Mar 22 (Last Working)

Date Change Impact
Mar 22 map-ai.service Requires=odc-api.service Fixed at that time
Mar 24 ~16:02 hivemapper-data-logger stopped/disabled ROOT CAUSE
Mar 24 15:55 Last detection written Pipeline froze
Mar 26 14:19 System rebooted (all services show this start time) Services restarted but GPS logger stayed disabled

Summary

The detection pipeline is fully functional except for one disabled service.

The GPS data logger (hivemapper-data-logger.service) was disabled at some point on March 24, 2026. Without GPS data flowing into Redis, the LocateLandmarkNode cannot compute geographic coordinates for detected signs, and StoreLandmarksNode cannot write detections to SQLite.

Fix: Enable and start hivemapper-data-logger.service.

The camera, VPU, object detection models, and all other components are working correctly.


Report generated from live system inspection via SSH