空间感知服务

HowYouSeeMe 是一个为LLM提供空间感知能力的服务,通过实时3D地图构建、物体识别和位置跟踪,使LLM能够感知和记忆物理世界中的物体位置和状态。

  • by AryanRai
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 AryanRai/HowYouSeeMe

使用说明

HowYouSeeMe

给任何法学硕士一双眼睛、一段记忆和一张地图。



问题

法学硕士可以对世界进行推理,但他们对此视而不见。

你可以根据习惯问GPT-4你的钥匙在哪里。你可以让克劳德帮你找到你的3D打印机。但他们都不能环顾房间,记住打印机最后一次出现在走廊是三个小时前,注意到它被移动了,然后导航到它——因为他们对他们应该帮助你的物理世界没有持久的、脚踏实地的空间意识。

“谈论世界的人工智能”和“实际感知世界的人工智慧”之间的差距是机器人研究中一个已解决的问题。它还没有被组装成开放、可部署和LLM原生的东西。

这个集会是怎样的。


它做什么

Kinect v2和BlueLily IMU提供了一个连续的感知循环。ORB-SALM3跟踪相机姿态并实时构建3D地图。YOLO11识别帧中的所有内容,并将每次检测反向投影到SLAM坐标空间中,因此每个对象都会得到一个3D世界位置,而不仅仅是一个像素边界框。

空间知识在积累。对象在帧间被跟踪。当发生重要的事情时——一个人走了进来,一个已知的物体移动了,一个新的物体出现了——系统会保存一个检查点:RGB帧、深度图、姿势和检测,以原子方式写入磁盘。异步工作者然后用SAM2掩码、InsightFace身份和情绪估计来丰富每个检查点,而不会阻塞实时感知循环。

结果是 world_state.json --一份不断更新的文档,描述机器人见过的每个物体,它在3D空间中的位置,最后一次确认的时间,以及系统了解到的任何信息。任何LLM都可以通过MCP查询。

"where is the soldering iron?"
→ /tmp/world_state.json → last seen at [2.4, 0.8, 0.9] → 4 minutes ago → confidence 0.91

当机器人睡觉时,OpenSplat会在累积的关键帧上运行,并生成逼真的高斯环境图——地图每天晚上都会变得更好,无需任何主动努力。


人工智能的空间感知

大多数人工智能系统将空间视为平面。HowYouSeeMe为LLM提供了一个基础的3D世界模型,它可以像数据库一样查询。

没有内在的感觉 哪里 事情在3D中是相互关联的,不记得昨天在哪里,也无法说“杯子在笔记本电脑左侧的桌子上,大约80厘米远。”直到现在。

LLM: "Is there anyone in the room?"
→ query_world() → people: [{position: [1.2, 0.3, 0.0], identity: "unknown", emotion: "neutral"}]
→ "Yes, one person, about 1.2 metres ahead, appears neutral."

LLM: "Go find the 3D printer"
→ navigate_to("3D printer")
→ not in world_state → visual search mode
→ LLM generates description → robot sweeps room → YOLO+CLIP locks on → pathplans precisely
→ saves named memory → next time: direct navigation in <15 seconds

LLM: "Remember where I left my keys"
→ remember_object("keys")
→ YOLO watches for keys class → locks 3D position on next detection
→ survives reboots → queryable forever

MCP服务器使其可组合。任何LLM——克劳德、GPT-4、当地Olama模型、Ally的语音接口——都可以连接到 http://localhost:8090/mcp 并得到可靠的空间答案。机器人变成了一个任何人工智能都可以插入的空间记忆系统。


建筑

5层

┌─────────────────────────────────────────────────────────┐
│  TIER 1 — always on                                     │
│  ORB-SLAM3 · YOLO11 · Event checkpointer               │
│  ~1GB VRAM · 3-4 CPU cores · never killed              │
├─────────────────────────────────────────────────────────┤
│  TIER 2 — event-driven                                  │
│  SAM2 · InsightFace · FER · Async frame analyser       │
│  spawned on trigger · killed when idle                  │
├─────────────────────────────────────────────────────────┤
│  TIER 3 — world synthesis                               │
│  World synthesiser · Named memory store                 │
│  merges all perception → world_state.json every 3s     │
├─────────────────────────────────────────────────────────┤
│  TIER 4 — persistence                                   │
│  /tmp/stm/checkpoints · world_state.json               │
│  ~/howyouseeme_persistent/named_memories.json           │
├─────────────────────────────────────────────────────────┤
│  TIER 5 — interface                                     │
│  MCP server :8090 · RViz · Rerun · Ally Robot Mode     │
└─────────────────────────────────────────────────────────┘

为什么分层? 你的GPU有4GB。同时运行SAM2、InsightFace、FER、YOLO和SLAM将超过这一水平。分层系统意味着在空闲时,您将使用约1GB。一个人走了进来——InsightFace和FER为该事件旋转,异步地丰富检查点,然后死亡。峰值使用率永远不会超过约1.43GB VRAM。

导航 [PLANNED/WIP]

Natural language goal
        ↓
Semantic goal resolver
  ├─ named memory?    → direct 3D coordinate → RRT* → DWA → /cmd_vel
  ├─ seen recently?   → last known position  → RRT* → DWA → /cmd_vel
  ├─ room name?       → SLAM map centroid    → RRT* → DWA → /cmd_vel
  └─ never seen?      → visual search mode
                            ↓
                      LLM generates description
                      + optional web reference image
                            ↓
                      room sweep: rotate → expand spiral
                      score: YOLO conf × CLIP similarity
                            ↓
                      detection → back-project → save memory → pathplan

睡眠时间图增强 [PLANNED]

Robot active  →  keyframes saved to disk continuously
Robot sleeps  →  OpenSplat runs on accumulated frames (15-25 min on RTX 3050)
Robot wakes   →  photorealistic .ply splat loaded as /splat/background
                 YOLO semantic labels float on top of photorealistic map
                 map quality improves every night automatically

人工智能模型

型号 用途 层级 VRAM 何时
YOLO11 物体检测 1 ~400MB 始终
SAM2微小 精确分割 2 ~280MB 活动中
InsightFace 人脸识别 2 ~200MB 检测到人员
FER(hsemotion) 情绪检测 2 ~150MB 检测到人员
FastSAM 快速细分 2 ~200MB 按需
CLIP 视觉搜索匹配 nav ~200MB 视觉搜索
TensorRT YOLO加速 opt -- 如果导出

峰值(全部活动):约1.43GB VRAM。 适合4GB,并为操作系统留出空间。


MCP工具

机器人的世界知识作为一个可调用的API。任何LLM都连接到 http://localhost:8090/mcp.

工具 它做什么
query_world 完整的世界状态——物体、人、最近的事件
where_is(label) 任何物体的最后已知3D位置
remember_object(name, label) 固定一个对象以进行持续跟踪
recall_memory(name) 获取被固定物体的确认位置
forget_memory(name) 停止跟踪
get_recent_events 最后N个带有时间戳的感知事件
get_checkpoint(id) 检索特定的过去检查点帧并进行分析
get_camera_frame 最新RGB帧为base64 JPEG,适用于视觉LLM
get_robot_status 自然语言状态摘要
get_robot_context 盟友机器人模式的系统提示上下文块
navigate_to(query) 找到自然语言中的任何东西 [PLANNED]
navigate_to_pose 精确三维坐标的路径查找 [PLANNED]
cancel_navigation 立即停止 [PLANNED]
navigation_status 当前导航状态、目标、预计到达时间 [PLANNED]

盟友整合

盟友 是语音和聊天界面。在机器人模式下,它连接到HowYouSeeMe的MCP服务器,成为具有扎实世界知识的空间人工智能助手。

"What can you see right now?"
→ query_world → objects with 3D positions → natural language description

"Go find the 3D printer"
→ navigate_to("3D printer") → visual search → pathplan → arrive → confirm

"Remember where the apple is"
→ remember_object → YOLO watches → pins on next detection → survives reboot

"Show me what you see"
→ get_camera_frame → base64 JPEG → vision LLM describes the scene

在Ally中启用机器人模式自动获取 get_robot_status 并将其作为系统上下文注入——因此LLM在第一条消息之前总是知道机器人的当前状态。


关键主题

主题 类型 Hz
/kinect2/hd/image_color 图片 14.5
/kinect2/hd/image_depth_rect 图片 14.5
/imu/data 伊穆 800
/orb_slam3/pose 姿势盖章 14.5
/tsdf/pointcloud PointCloud2 1
/splat/background PointCloud2 0.1
/cv_pipeline/results 字符串JSON 14.5
/cv_pipeline/enriched 字符串JSON 14.5
/semantic/markers MarkerArray 0.3
/semantic/world_state JSON字符串 0.3
/memory/checkpoint_saved 字符串 事件
/navigation/path 路径 事件
/cmd_vel 扭曲 10

实施状态

功能 状态 注释
Kinect v2 ROS 2桥接器 ✅ 完成 CUDA加速,14.5fps
蓝百合IMU桥 ✅ 已完成 800Hz,/imu/data
ORB-SLAM3 RGB-D ✅ 已完成 仅限视觉,IMU融合等待校准
YOLO11检测 ✅ done cv_pipeline,流媒体
SAM2/FastSAM/洞察脸/FER ✅ 已完成 按需工人
Open3D TSDF集成器 ✅ 已完成 1Hz CPU映射更新
语义投影节点 ✅ 已完成 RViz中的3D标签
事件检查指针 ✅ done 检查点保存+富集管道
异步帧分析器 ✅ 已完成 非阻塞浓缩工人
实时丰富节点 ✅ done 实时人脸/姿势/面部表情/cv_pipeline/增强
世界合成器 ✅ done 每3秒运行一次,输出world_state.json
命名内存存储 ✅ done 重启后持续
MCP服务器 ✅ 已完成 端口8090,可流式传输http,10个工具上线
重新运行可视化 ✅ done rerun_bridge_node,深度+TSDF+姿态+富集
盟友机器人模式集成 ✅ done MCP会话握手,代理工具循环
IMU相机校准(Kalibr) 🔧 WIP 身份转换占位符
导航堆栈(RRT*+DWA) 📋 计划 完全设计
视觉搜索(YOLO+CLIP) 📋 计划 设计
睡眠时间高斯分布 📋 已规划 已设计,需要Orin全速行驶
艾萨克ROS迁移(cuVSLAM+NVLOX) 📋 计划中 AGX Orin硬件待定

计算目标

平台 状态 注释
RTX 3050笔记本电脑,Ubuntu 24.04 ✅ 当前 4GB VRAM上限,开发平台
杰森AGX奥林64GB 📋 计划 64GB统一内存,目标机器人平台
艾萨克·罗斯(cuVSLAM+NVBLOX) 📋 计划 替换ORB-LAM3+TSDF,相同的代码库

快速启动

# Dependencies (system Python 3.12, ROS2 Jazzy)
sudo apt install ros-jazzy-desktop ros-jazzy-cv-bridge
pip install open3d ultralytics rerun-sdk --user

# Build
cd ros2_ws && colcon build && source install/setup.bash

# Launch everything
./scripts/run_complete_slam_system.sh

# Visualisation (separate terminal)
rerun   # Rerun opens automatically via rerun_bridge_node
# or RViz:
rviz2

交互式CV模型菜单

./scripts/cv_pipeline_menu.sh
CV Pipeline — Model Selection

  1) SAM2          segment anything
  2) FastSAM       fast segmentation with text prompts
  3) YOLO11        detection, pose, segmentation, OBB
  4) InsightFace   face recognition + liveness
  5) FER           emotion detection (7 emotions)

  8) List available models
  9) Stop active streaming

回购结构

HowYouSeeMe/
├── ros2_ws/src/
│   ├── kinect2_ros2_cuda/            Kinect v2 bridge — do not modify
│   ├── bluelily_bridge/              IMU serial bridge
│   │   └── src/bluelily_imu_node.cpp
│   ├── cv_pipeline/                  AI model nodes (C++ pipeline + Python workers)
│   │   ├── src/cv_pipeline_node.cpp
│   │   └── python/
│   │       ├── cv_model_manager.py
│   │       ├── sam2_server_v2.py
│   │       ├── sam2_worker.py
│   │       └── insightface_worker.py
│   └── kinect2_slam/                 SLAM, memory, MCP, visualisation
│       ├── kinect2_slam/
│       │   ├── tsdf_integrator_node.py
│       │   ├── event_checkpointer_node.py
│       │   ├── async_analyser_node.py
│       │   ├── live_enrichment_node.py
│       │   ├── world_synthesiser_node.py
│       │   ├── named_memory_node.py
│       │   ├── rerun_bridge_node.py
│       │   └── mcp_server.py         ← MCP on :8090
│       └── launch/
│           └── howyouseeme_memory.launch.py
├── scripts/
│   ├── run_complete_slam_system.sh   ← main launch script
│   ├── run_phase2_3.sh               ORB-SLAM3 + TSDF
│   └── cv_pipeline_menu.sh           interactive model selector
├── integration/
│   └── Ally/glass-pip-chat/          Ally desktop overlay + Robot Mode
├── data/faces/                       InsightFace database
├── orb_slam3_configs/                ORB-SLAM3 YAML configs
├── kalibr_configs/                   IMU-camera calibration
└── docs/                             guides and references

研究背景

该项目借鉴了机器人和视觉研究的几个方面:

概念融合(2023) --语言嵌入的3D地图,其中每个点都带有CLIP嵌入,支持自然语言空间查询。与世界合成器和语义投影节点直接相关。

SayPlan(2023) --使用3D场景图作为结构化上下文的LLM任务规划。 world_state.json 是一个用于此目的的简化场景图。

家用机器人(Meta,2023) --开放词汇移动操作:查找并与自然语言中描述的任何对象交互。视觉搜索模式实现了此功能的一个版本。

OpenScene / LERF --可查询的神经场景表示,其中地图本身可以通过语言进行搜索。睡眠时间延迟管道指向这个方向。

特定的组合——模块化按需模型加载、睡眠时间高斯斑点致密化、MCP作为LLM机器人接口标准,以及持久命名空间记忆——在其他地方并不作为一个集成的开放系统存在。这就是贡献。


相关项目

  • 盟友 --glassmorphic桌面AI叠加,机器人模式通过MCP连接到HowYouSeeMe
  • DroidCore --HowYouSeeMe输入的完整机器人控制堆栈

硬件

组件 零件 接口
RGB-D摄像头 微软Kinect v2 USB 3.0
IMU 蓝百合(MPU6500) /dev/ttyACM0 115200波特
计算(开发) RTX 3050笔记本电脑,Ubuntu 24.04 CUDA 12.x
计算机(机器人) Jetson AGX Orin 64GB [planned] JetPack 6

机器人头部是一个3D打印的外壳,安装了Kinect v2前置、内部BlueLily IMU和顶部计算。看 机器人头部设置.


联系