mirror of
https://github.com/SikongJueluo/Mini-Nav.git
synced 2026-07-12 20:15:31 +08:00
feat(scenegraph): add basic scene graph data structures
This commit is contained in:
12
mini-nav/scenegraph/__init__.py
Normal file
12
mini-nav/scenegraph/__init__.py
Normal file
@@ -0,0 +1,12 @@
|
||||
"""Scenegraph public API.
|
||||
|
||||
This module exports the main scenegraph objects for easy import:
|
||||
|
||||
from mini_nav.scenegraph import SimpleSceneGraph, RoomNode, ObjectNode
|
||||
"""
|
||||
|
||||
from .objectnode import ObjectNode
|
||||
from .roomnode import RoomNode
|
||||
from .scenegraph import SimpleSceneGraph
|
||||
|
||||
__all__ = ["ObjectNode", "RoomNode", "SimpleSceneGraph"]
|
||||
22
mini-nav/scenegraph/objectnode.py
Normal file
22
mini-nav/scenegraph/objectnode.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
# --- 1. 物品节点:极其扁平,只存“当前最新/平均”状态 ---
|
||||
@dataclass
|
||||
class ObjectNode:
|
||||
obj_id: str # 唯一ID (例如: "obj_001")
|
||||
obj_id: str # 唯一ID (例如: "obj_001")
|
||||
room_id: str # 所属房间的直接外键,不搞复杂的层级关系
|
||||
|
||||
# 位置:在 debug 阶段,一切认准全局坐标,不要搞局部坐标系
|
||||
position: np.ndarray # [x, y, z] 世界坐标系下的中心点或锚点
|
||||
|
||||
# 特征:直接存你压缩后的 512bit 结果,不搞历史缓存
|
||||
visual_hash: np.ndarray # 512bit 视觉特征 (用于外观检索)
|
||||
semantic_hash: np.ndarray # 512bit 语义特征 (用于类别对齐)
|
||||
|
||||
# Debug 必备:极简的生命周期管理,防止满屏“幽灵节点”
|
||||
hit_count: int = 1 # 被观测到的次数。太低的可以直接过滤掉
|
||||
last_seen_frame: int = 0 # 最后一次看到的帧号或时间戳
|
||||
12
mini-nav/scenegraph/roomnode.py
Normal file
12
mini-nav/scenegraph/roomnode.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
@dataclass
|
||||
class RoomNode:
|
||||
room_id: str # 例如: "room_A"
|
||||
|
||||
# 范围:不用复杂的 Polygon,用一个中心点+半径,或者简单的 3D BBox 足够了
|
||||
center: np.ndarray # [x, y, z]
|
||||
bbox_extent: np.ndarray # [dx, dy, dz] 用于快速判断一个点在不在房间里
|
||||
10
mini-nav/scenegraph/scenegraph.py
Normal file
10
mini-nav/scenegraph/scenegraph.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from .roomnode import RoomNode
|
||||
from .objectnode import ObjectNode
|
||||
|
||||
|
||||
@dataclass
|
||||
class SimpleSceneGraph:
|
||||
rooms: dict[str, RoomNode] = field(default_factory=dict)
|
||||
objects: dict[str, ObjectNode] = field(default_factory=dict)
|
||||
Reference in New Issue
Block a user