📋 原子技能 → 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~3 | 2~4 | 2~3 | 1 | 1 |
~120 |
| 操作动作 | 73 |
1~2 | 1~3 | 2~4 | 1 | 1 |
~580 |
| 视觉检测 | 10 |
2~3 | 2~3 | 3~5 | 1 | 1 |
~90 |
| NPO近封装光学 | 51 |
2~3 | 2~4 | 2~3 | 1 | 1 |
~410 |
| XPO高密可插拔光学 | 59 |
2~3 | 2~4 | 2~3 | 1 | 1 |
~470 |
| 安全集成 | 10 |
1~2 | 1~2 | 2~4 | 1 | 1 |
~70 |
| 移动导航 | 7 |
2~3 | 2~3 | 2~3 | 1 | 1 |
~55 |
| 载具物流 | 9 |
1~2 | 1~3 | 2~3 | 1 | 1 |
~65 |
| 学习泛化 | 8 |
0 | 1~2 | 1~2 | 0 | 2~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条) ·
🌐 全局数据空间 ·
🧠 系统设计