# sanad_api_g1 — copy to .env and fill in. docker compose reads it automatically. # ── fleet server (REQUIRED — YS Lootah gives you these two) ────────────────── SERVER_URL=https://fleet.example.com DEVICE_TOKEN=REPLACE_WITH_DEVICE_TOKEN # ── identity ───────────────────────────────────────────────────────────────── # This robot's fleet id — used as {sn} in POST /api/v1/fleet/ingest/{sn}/map. SN=g1_7892 # web_nav3 robot name: the maps subdir (//*.db) + X-Robot-Name. # Must match web_nav3's robot_config.yaml robot_name (default: sanad). ROBOT=sanad # ── where the map files live on the HOST (bind-mounted read-only) ──────────── # Point these at the robot's web_nav3 install. Defaults assume a Package_4 # robot (nav container -> /home/unitree/marcus_nav2_test). For the workstation # dev copy use .../Project/G1/Nav2_Projects/web_nav3/{maps,web/data}. MAPS_HOST_DIR=/home/unitree/marcus_nav2_test/maps DATA_HOST_DIR=/home/unitree/marcus_nav2_test/web/data STATE_HOST_DIR=./data/state # Optional legacy per-robot places file (older sanad setups). Leave blank if # each map already has its own places under DATA_DIR//places/. # LEGACY_PLACES=/data/legacy/places.json # ── behaviour ──────────────────────────────────────────────────────────────── # Which maps to upload: all | active | newest. active/newest need WEB_NAV3_URL. MAP_SELECT=all # Optional — only used to learn which map is ACTIVE (MAP_SELECT=active). WEB_NAV3_URL=http://127.0.0.1:8765 # Wire format the server accepts on the map endpoint: # multipart -> multipart/form-data: file field `db` + form field `meta` (JSON) # base64json -> JSON body with the .db as `db_base64` + the same meta fields MAP_UPLOAD_MODE=multipart # Endpoint path template ({sn} substituted). Change only if the server differs. MAP_ENDPOINT=/api/v1/fleet/ingest/{sn}/map # Scan cadence for the loop (seconds). Maps rarely change, so 30s is plenty. POLL_INTERVAL=30 # Verify the fleet server's TLS cert (1 recommended; 0 only for self-signed dev). VERIFY_TLS=1 HTTP_TIMEOUT=30