← 主页

🌐 DDS 5维时空数据空间

📷 导出截图
5维时空映射
X·Y·Z 真实空间
🎨 颜色 = 语义层
⏱ 大小 = 时间新旧
📍 感知
👁 特征
🧠 条件
🎯 动作
✅ 反馈
XYZ 3D空间 🎨 颜色=语义层 ⏱ 大小=时间 🖱旋转|滚轮|点击

📋 原子技能 → 5维时空打标方案

242条原子技能(查看全部)如何转化为全局数据空间的可查询条件数据?每条原子技能天然携带 输入条件+所需传感器+成功标准+工位场景,这正是5维打标的完整素材。

🔧 操作流程:5步将一条原子技能拆解为5维数据点

1

提取传感器数据点 (S=sensor, Y=-6)

sensors 字段提取传感器类型列表,拆分生成感知层数据点。每个传感器一个点:位置=工位坐标,时间=采集时刻,语义=感知层。

# 示例:P004 缺陷识别 sensors = "高分辨率相机、显微镜、颗粒传感" → D010: {s:"sensor", name:"高分辨率相机@I-103", x:-4, z:2, desc:"缺陷图像采集"} → D011: {s:"sensor", name:"显微镜@I-103", x:-4, z:1, desc:"显微放大检测"} → D012: {s:"sensor", name:"颗粒传感器@I-103", x:-3, z:2, desc:"异物颗粒计数"}
2

分解输入条件为特征提取点 (S=feature, Y=-2)

input_cond 字段提取前置条件,每个条件对应一个特征提取步骤。将原始传感器数据加工为结构化特征。

# 示例:P004 缺陷识别 input_cond = "图像/显微图/污染与异物传感" → D020: {s:"feature", name:"缺陷边缘检测", links:["D010","D011"]} → D021: {s:"feature", name:"异物颗粒计数", links:["D012"]} → D022: {s:"feature", name:"污染面积计算", links:["D010"]}
3

生成条件判断点 (S=condition, Y=2)

output_criteria 提取判定阈值,生成布尔条件节点。每个阈值一个条件点,含空间位置+时间戳+语义标签。

# 示例:P004 缺陷识别 output_criteria = "漏检率、误判率、缺陷分级一致性" → C004: {s:"condition", name:"缺陷检测·AOI", desc:"漏检率<0.5%·误判率<1%"} links:["A008"] → 触发动作
4

映射动作执行点 (S=action, Y=6)

原子技能本身就是动作模板。技能名称→动作节点,场景(scene)字段→工位空间坐标。

# 示例:P004 → A008 A008: {s:"action", name:"AOI缺陷检测", desc:"3D缺陷识别·分类·分级"} st:"I-103", links:["F004"]
5

闭环反馈点 (S=feedback, Y=10)

output_criteria + maturity_now→maturity_target 生成反馈度量。

# 示例:P004 缺陷识别 F004: {s:"feedback", name:"AOI检出率", desc:">99.7%·漏检率<0.3%"} maturity: "成熟度3→5", links:[]

📊 9大技能分类 → 5维打标映射表

每个分类按上述5步流程自动批量生成条件数据。下表给出每类的典型维度和数据点数量预估。

技能分类技能数感知点/条特征点/条条件点/条动作点/条反馈点/条预计总数
感知定位15 2~32~42~311 ~120
操作动作73 1~21~32~411 ~580
视觉检测10 2~32~33~511 ~90
NPO近封装光学51 2~32~42~311 ~410
XPO高密可插拔光学59 2~32~42~311 ~470
安全集成10 1~21~22~411 ~70
移动导航7 2~32~32~311 ~55
载具物流9 1~21~32~311 ~65
学习泛化8 01~21~202~3 ~35
合计242 ~1900

🗂️ 数据表结构(SQLite → 5D时空)

在 dds.db 中新建 dds_5d_points 表,作为5维数据空间的持久化存储。每个数据点一行,9个字段对应5维+元数据。

CREATE TABLE dds_5d_points ( id TEXT PRIMARY KEY, -- D001, C004, A008, F004 skill_id TEXT NOT NULL, -- 关联原子技能 P001~M073 s_layer TEXT NOT NULL, -- sensor|feature|condition|action|feedback x REAL NOT NULL, -- 空间X坐标 (工厂坐标系) y REAL NOT NULL, -- T时间维度 (语义层高度) z REAL NOT NULL, -- 空间Z坐标 name TEXT NOT NULL, -- 显示名称 desc TEXT, -- 描述 links TEXT, -- JSON数组: 关联的下游节点ID station TEXT, -- 工位编号 I-103 zone TEXT, -- 产线区域 COC/OE/MOD/WH confidence REAL DEFAULT 1.0, -- 条件置信度 threshold TEXT, -- 判定阈值 created DATETIME DEFAULT CURRENT_TIMESTAMP );

🐍 批量打标Python脚本

以下脚本从 dds.db 的 atomic_skills 表读取242条技能,按5步流程自动生成5维数据点,写入 dds_5d_points 表。

#!/usr/bin/env python3 """atomic_skills → 5D spacetime data points batch labeling""" import sqlite3, json, re conn = sqlite3.connect('dds.db') cur = conn.cursor() # 确保表存在 cur.execute('''CREATE TABLE IF NOT EXISTS dds_5d_points ( id TEXT PRIMARY KEY, skill_id TEXT, s_layer TEXT, x REAL, y REAL, z REAL, name TEXT, desc TEXT, links TEXT, station TEXT, zone TEXT, confidence REAL DEFAULT 1.0, threshold TEXT )''') # 语义层高度映射 LAYER_Y = {"sensor":-6, "feature":-2, "condition":2, "action":6, "feedback":10} # 传感器关键词 → 数据点映射 SENSOR_MAP = { "相机": ("RGB-D图像采集", "2D/3D视觉输入"), "显微镜": ("显微放大采集", "高倍率缺陷检测"), "力": ("力/力矩传感", "六维力数据流"), "触觉": ("触觉阵列", "4×4压力分布"), "激光": ("激光轮廓仪", "3D点云扫描"), "温度": ("温度传感", "红外热成像"), "扫码": ("条码/RFID读取", "MES追溯绑定"), } cur.execute("SELECT id,name,category,input_cond,sensors,output_criteria,scene,phase FROM atomic_skills") skills = cur.fetchall() def parse_sensors(sensors_str): """拆分传感器字段提取数据点""" points = [] if not sensors_str: return points for kw, (name, desc) in SENSOR_MAP.items(): if kw in sensors_str: points.append({"name": name, "desc": desc, "layer": "sensor"}) return points def parse_conditions(input_str, output_str): """从输入条件和输出标准提取特征+条件点""" points = [] if input_str: # 按 /、 分割提取独立条件 parts = re.split(r'[/、,,]', input_str) for p in parts[:3]: # 最多3个 p = p.strip() if len(p) > 2: points.append({"name": p + "检测", "desc": "特征提取", "layer": "feature"}) if output_str: thresholds = re.findall(r'[\d.]+%|[\d.]+ms|[\d.]+μm|[\d.]+mm|[\d.]+N|[\d.]+dB', output_str) if thresholds: points.append({ "name": "判定:" + ",".join(thresholds[:3]), "desc": output_str[:60], "layer": "condition", "threshold": ",".join(thresholds[:3]) }) return points count = 0 for s in skills: sid, name, cat, input_c, sensors, output_c, scene, phase = s # Step 1: 传感器 → 感知层 for pt in parse_sensors(sensors): pid = f"D{count:04d}" cur.execute( "INSERT OR REPLACE INTO dds_5d_points VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", (pid, sid, "sensor", 0, LAYER_Y["sensor"], 0, pt["name"], pt["desc"], json.dumps([]), None, None, 1.0, None)) count += 1 # Step 2-3: 条件 → 特征层+条件层 for pt in parse_conditions(input_c, output_c): pid = f"D{count:04d}" cur.execute( "INSERT OR REPLACE INTO dds_5d_points VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", (pid, sid, pt["layer"], 0, LAYER_Y.get(pt["layer"], 2), 0, pt["name"], pt.get("desc",""), json.dumps([]), None, None, 1.0, pt.get("threshold"))) count += 1 # Step 4: 技能本身 → 动作层 aid = f"A{count:04d}" cur.execute( "INSERT OR REPLACE INTO dds_5d_points VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", (aid, sid, "action", 0, LAYER_Y["action"], 0, name, scene or "", json.dumps([]), None, cat, 1.0, None)) count += 1 # Step 5: 成功标准 → 反馈层 fid = f"F{count:04d}" cur.execute( "INSERT OR REPLACE INTO dds_5d_points VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", (fid, sid, "feedback", 0, LAYER_Y["feedback"], 0, name + "·验收", output_c[:60] if output_c else "", json.dumps([]), None, cat, 1.0, None)) count += 1 conn.commit() print(f"✅ 批量打标完成: {count} 个5维数据点 (来自 {len(skills)} 条原子技能)") conn.close()

🚀 执行方式

方式一:终端执行

将上述Python脚本保存为 /root/zmax-website/label_5d.py,在ECS上运行:

python3 /root/zmax-website/label_5d.py

输出:~1900个5维数据点写入 dds.db → dds_5d_points 表

方式二:API触发

新增 PHP API 端点:

POST /api/dds-label.php { "skill_ids": ["P001","P004","A001"] } → 按需打标指定技能

方式三:Cron自动

原子技能更新后自动重新打标:

# cron: 每30分钟检查atomic_skills变更 */30 * * * * python3 label_5d.py

仅增量更新变更的技能,不重建全表

🔍 查询:从5维时空反查原子技能

打标完成后,全局数据空间的每个条件节点都可追溯到原子技能:

-- 查询"力控插入"相关的所有5维数据点 SELECT s_layer, name, desc, station FROM dds_5d_points WHERE skill_id IN ( SELECT id FROM atomic_skills WHERE name LIKE '%力控%插入%' ) ORDER BY s_layer, id; -- 查询某个工位的全部条件 SELECT id, s_layer, name, desc, threshold FROM dds_5d_points WHERE station = 'I-103' ORDER BY y, id; -- 查询所有P0优先级的动作点 SELECT dp.name, dp.station, a.phase FROM dds_5d_points dp JOIN atomic_skills a ON dp.skill_id = a.id WHERE dp.s_layer = 'action' AND a.phase LIKE 'P0%';

📈 下一步:实时数据接入

OT实时数据流

PLC/传感器 → MQTT/Kafka → dds_5d_points 实时写入。每个数据包自动获得 X·Y·Z·T·S 5维标签。

3D可视化动态更新

5维时空场景从 dds_5d_points 表动态加载。新数据点实时推送到3D视图中,颜色随语义层变化。

模型训练数据导出

从 dds_5d_points 按 (semantic layer, station, time_range) 导出标注数据集,直接喂入 SmolVLA/ACT 训练管线。

📋 原子技能库 (242条) · 🌐 全局数据空间 · 🧠 系统设计