JZTclaw(玑之龙虾)双层架构技术实现方案

版本: v4.0
日期: 2026-04-01
v4.0 重大架构调整:从四层架构优化为双层架构
  • 架构简化:L1-L2合并为「工艺设计层」,L3-L4合并为「现场执行层」
  • 部署优化:Web工具(笔记本/PAD/云端)+ 本地工具(工控机/边缘设备)
  • 离线支持:程序包传输机制,支持现场离线运行
  • 元动作模型集成:GraspNet抓取姿态预测、WAM力控装配
  • 反向同步机制:现场调试参数可反向同步至设计层
  • 指标修正:10分钟→10-30分钟,2000倍→8-16倍(真实提升)

1. 概述

1.1 项目背景

JZTclaw(玑之龙虾)是一套面向柔性制造的机器人控制系统,采用双层解耦架构,让客户技术人员无需编程即可自主维护工艺逻辑。

核心设计原则
  • 工艺设计层:工程师在笔记本/PAD/云端完成工艺设计和参数配置
  • 现场执行层:现场工控机导入程序包,执行工艺并支持实时调试
  • 离线运行:程序包传输机制,现场无需持续网络连接
  • 反向同步:现场调试的参数可同步回设计层,形成闭环

支持的机器人类型

类型形态典型应用场景协议支持
固定工作站工业机械臂 + 固定底座光模块测试、路由器组装、CNC上下料Modbus TCP、EtherCAT
复合机器人AMR移动底盘 + 协作机械臂跨工位物料搬运、柔性产线协同、仓储物流MQTT、CANopen、WiFi/5G

1.2 核心指标(修正后)

指标目标值说明
工艺参数调整10-30分钟成熟设备改参数,不涉及新设备接入
简单流程变更2-4小时增删节点、调整顺序(现有设备)
新设备接入1-2天驱动配置、标定、联调
系统响应延迟≤100ms控制指令响应(本地执行)

2. 整体技术架构

2.1 双层架构图

flowchart TB subgraph DL["工艺设计层 Web工具"] A1[Skill模板管理] A2[可视化流程编辑] A3[参数配置面板] A4[程序包管理] end subgraph FL["现场执行层 本地工具"] B1[程序包解析执行] B2[元动作模型调用] B3[实时状态监控] B4[现场参数微调] end DL -->|程序包导出| FL FL -->|反向同步| DL

2.2 架构优势

维度原四层架构新双层架构
部署复杂度四层服务,依赖多两个独立工具,解耦
网络依赖层间通信依赖网络程序包传输,断网可运行
现场调试需远程连接多层本地工具直接调试
响应速度多层网络延迟本地执行,低延迟
离线能力不支持完整支持

3. 与传统模式对比(修正后)

阶段传统模式玑之模式提升
需求沟通2-4小时无需-
供应商响应4-8小时无需-
参数调整4-8小时10-30分钟8-48倍
验证上线2-4小时1-2小时1-4倍
总计1-2天2-3小时8-16倍

4. 工艺设计层(L1-L2合并)

工具定位

名称:工艺设计工作站(Process Design Workstation)

部署:笔记本 / PAD平板 / 云端Web

4.1 功能模块

Skill Skill模板库
• 浏览模板 • 导入导出 • 版本管理 • 分类筛选
Editor 状态树编辑器
• 拖拽编辑 • 节点配置 • 连线逻辑 • 验证检查
Params 参数配置面板
• 位姿参数 • 速度/加速度 • 温度/时间 • IO配置
Package 程序包管理
• 打包导出 • 版本标记 • 导入现场 • 反向同步

4.2 技术栈

组件技术选型用途
前端框架React 18 + TypeScriptUI组件、状态管理
流程编辑器ReactFlow可视化状态树编辑
后端服务Node.js + NestJSAPI服务、业务逻辑
数据库PostgreSQL数据持久化

4.3 RESTful API

# Skill模板管理
GET /api/v1/skills
  summary: 获取工艺模板列表
  parameters:
    - name: category
      in: query
      schema: { type: string, enum: [optical, assembly, cnc] }

POST /api/v1/skills
  summary: 创建工艺模板
  requestBody:
    content:
      application/json:
        schema:
          type: object
          required: [name, category, nodes, edges]

# 状态树管理
GET /api/v1/state-trees
POST /api/v1/state-trees
PUT /api/v1/state-trees/{treeId}

# 程序包管理
POST /api/v1/state-trees/{treeId}/export
POST /api/v1/packages/import

# 变更同步
GET /api/v1/sync/pending
POST /api/v1/sync/{syncId}/apply
POST /api/v1/sync/{syncId}/reject

5. 现场执行层(L3-L4合并)

工具定位

名称:现场执行监控台(Field Execution Console)

部署:现场工控机 / 边缘计算设备(Jetson/Intel NUC)

5.1 功能模块

Execute 程序包执行
• 导入程序包 • 解析验证 • 状态树执行 • 版本切换
Monitor 实时状态监控
• 设备状态 • 执行进度 • 告警提示 • 遥测数据
Tune 现场参数微调
• 位姿修正 • 速度调整 • 参数优化 • 反向同步

5.2 技术栈

组件技术选型用途
执行引擎Rust + ROS2高性能动作执行
运动规划MoveIt2 + Nav2机械臂/AMR路径规划
模型推理Python + PyTorchGraspNet/WAM推理
硬件控制Go/Python协议适配、设备控制

5.3 gRPC 接口

service FieldExecutionService {
  rpc ImportPackage(ImportRequest) returns (ImportResponse);
  rpc GetPackageInfo(PackageInfoRequest) returns (PackageInfo);
  rpc StartExecution(StartRequest) returns (stream ExecutionResponse);
  rpc StopExecution(StopRequest) returns (StopResponse);
  rpc PauseExecution(PauseRequest) returns (PauseResponse);
  rpc UpdateParam(UpdateParamRequest) returns (UpdateParamResponse);
  rpc CreateSyncPackage(CreateSyncRequest) returns (CreateSyncResponse);
  rpc UploadSyncPackage(UploadSyncRequest) returns (UploadSyncResponse);
}

enum ExecutionMode {
  NORMAL = 0;
  STEP_BY_STEP = 1;
  SIMULATION = 2;
}

enum ExecutionStatus {
  PENDING = 0;
  RUNNING = 1;
  PAUSED = 2;
  COMPLETED = 3;
  FAILED = 4;
  STOPPED = 5;
}

6. 元动作模型集成

6.1 模型架构

flowchart TB MM[模型管理器] --> GN[GraspNet抓取] MM --> WM[WAM力控] MM --> VM[视觉检测]

6.2 GraspNet集成

# graspnet_service.py
import rospy
from graspnet_msgs.srv import GraspPrediction, GraspPredictionRequest

class GraspNetService:
    def __init__(self):
        self.grasp_client = rospy.ServiceProxy('/graspnet/predict', GraspPrediction)
        
    def predict_grasp(self, pointcloud_msg, object_type=None):
        req = GraspPredictionRequest()
        req.pointcloud = pointcloud_msg
        req.object_type = object_type or ""
        
        try:
            resp = self.grasp_client(req, timeout=5.0)
            if resp.success:
                return {
                    'pose': resp.grasp_pose,
                    'width': resp.grasp_width,
                    'score': resp.score,
                    'approach_vector': resp.approach_vector
                }
        except rospy.ServiceException as e:
            rospy.logerr(f"GraspNet服务调用失败: {e}")
            return None

6.3 WAM力控装配集成

# wam_service.py
import rospy
from wam_msgs.msg import WAMCartesianCommand, WAMState

class WAMService:
    def __init__(self):
        self.cmd_pub = rospy.Publisher('/wam/cartesian_cmd', WAMCartesianCommand, queue_size=10)
        self.state_sub = rospy.Subscriber('/wam/state', WAMState, self.state_callback)
        
    def execute_force_assembly(self, target_pose, force_threshold=10.0, 
                                torque_threshold=2.0, velocity=0.01):
        cmd = WAMCartesianCommand()
        cmd.pose = target_pose
        cmd.velocity = velocity
        cmd.force_control = True
        cmd.force_threshold = force_threshold
        cmd.torque_threshold = torque_threshold
        
        self.cmd_pub.publish(cmd)
        return self.wait_for_completion(timeout=30.0)

6.4 模型部署策略

模型部署方式推理延迟硬件需求
GraspNet边缘GPU100-500msCUDA GPU
WAM本地CPU/GPU10-50ms中等
视觉检测边缘设备/VPU50-200msIntel NCS

7. 程序包格式规范

7.1 程序包结构

{
  "version": "2.0.0",
  "package_format": "jzt-claw-v2",
  "package_id": "pkg_20250401_001",
  "package_name": "光模块测试工艺_v1.2",
  
  "skill_info": {
    "id": "optical-test-001",
    "name": "光模块测试",
    "category": "optical"
  },
  
  "state_tree": {
    "nodes": [
      {
        "id": "node_001",
        "type": "start",
        "position": { "x": 100, "y": 100 }
      },
      {
        "id": "node_002",
        "type": "graspnet_pick",
        "params": {
          "model_version": "graspnet-v2.1",
          "confidence_threshold": 0.8
        }
      }
    ],
    "edges": [...]
  },
  
  "meta_actions": [...],
  "hardware_config": {...},
  "checksum": "sha256:..."
}

7.2 传输方式

方式适用场景
网络传输现场有网络连接:设计层导出 → 上传服务器 → 执行层下载
USB传输现场无网络或安全隔离:导出到U盘 → 插入执行层导入
本地文件同一设备双系统:保存到共享目录 → 执行层直接读取

8. 反向同步机制

8.1 同步流程

sequenceDiagram participant F as 现场执行层 participant D as 工艺设计层 F->>F: 参数微调 F->>D: 上传同步包 D->>D: 显示变更 D-->>F: 同步结果

8.2 同步包格式

{
  "sync_version": "1.0.0",
  "sync_id": "sync_20250401_001",
  "source_package_id": "pkg_20250401_001",
  "created_at": "2025-04-01T14:30:00Z",
  "created_by": "现场工程师B",
  "reason": "吸取位置偏移调整,提升抓取成功率",
  
  "changes": [
    {
      "change_id": "chg_001",
      "node_id": "node_002",
      "node_type": "graspnet_pick",
      "param_name": "approach_height",
      "old_value": "50",
      "new_value": "55",
      "reason": "避免碰撞"
    }
  ],
  
  "validation": {
    "tested_on_device": "robot_arm_001",
    "test_count": 50,
    "success_rate": "98%"
  }
}

8.3 冲突处理策略

冲突类型处理方式
同一参数多次变更时间优先:以最新变更为准
设计层已修改手动合并:提示用户选择版本
节点已删除忽略变更:标记为无效
版本不兼容拒绝同步:提示版本不匹配

9. 数据模型设计

-- 程序包管理
CREATE TABLE packages (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    package_id VARCHAR(100) UNIQUE NOT NULL,
    name VARCHAR(200) NOT NULL,
    version VARCHAR(20) NOT NULL,
    skill_id VARCHAR(100) NOT NULL,
    state_tree JSONB NOT NULL,
    meta_actions JSONB,
    hardware_config JSONB,
    checksum VARCHAR(100) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 参数变更记录
CREATE TABLE param_changes (
    id UUID PRIMARY KEY,
    package_id UUID REFERENCES packages(id),
    node_id VARCHAR(100) NOT NULL,
    param_name VARCHAR(100) NOT NULL,
    old_value TEXT,
    new_value TEXT NOT NULL,
    reason TEXT,
    sync_status VARCHAR(20) DEFAULT 'pending',
    changed_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 同步包
CREATE TABLE sync_packages (
    id UUID PRIMARY KEY,
    sync_id VARCHAR(100) UNIQUE NOT NULL,
    source_package_id UUID REFERENCES packages(id),
    changes JSONB NOT NULL,
    status VARCHAR(20) DEFAULT 'pending',
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 执行记录
CREATE TABLE execution_logs (
    id UUID PRIMARY KEY,
    instance_id UUID REFERENCES package_instances(id),
    execution_id VARCHAR(100) NOT NULL,
    status VARCHAR(20) NOT NULL,
    started_at TIMESTAMP WITH TIME ZONE,
    completed_at TIMESTAMP WITH TIME ZONE,
    cycle_time INTEGER,
    success_count INTEGER DEFAULT 0,
    fail_count INTEGER DEFAULT 0
);

-- 索引
CREATE INDEX idx_packages_skill_id ON packages(skill_id);
CREATE INDEX idx_param_changes_package ON param_changes(package_id);
CREATE INDEX idx_sync_packages_status ON sync_packages(status);

10. 部署架构

10.1 工艺设计层部署

# docker-compose.design.yml
version: '3.8'

services:
  design-frontend:
    image: jzt/claw-design-frontend:latest
    ports: ["80:80"]
    volumes:
      - package-storage:/data/packages

  design-backend:
    image: jzt/claw-design-backend:latest
    ports: ["3000:3000"]
    environment:
      - NODE_ENV=production
      - DB_HOST=postgres

  postgres:
    image: postgres:15-alpine
    volumes:
      - postgres-data:/var/lib/postgresql/data

10.2 现场执行层部署

# docker-compose.field.yml
version: '3.8'

services:
  field-execution:
    image: jzt/claw-field-execution:latest
    ports:
      - "50051:50051"  # gRPC
      - "8080:8080"    # HTTP
    privileged: true

  model-inference:
    image: jzt/claw-model-inference:latest
    ports: ["50052:50052"]
    runtime: nvidia  # GPU支持

11. 开发规范

11.1 代码规范

TypeScript/React(工艺设计层)
• 组件: PascalCase (StateTreeEditor)
• 函数: camelCase (handleNodeClick)
• 常量: SCREAMING_SNAKE_CASE (MAX_RETRY_COUNT)
• 接口: PascalCase + I前缀 (IStateTree)
Rust(现场执行层)
• 结构体: PascalCase (ActionSynthesizer)
• 函数: snake_case (synthesize_action)
• 常量: SCREAMING_SNAKE_CASE (MAX_JOINT_COUNT)
• 模块: snake_case (motion_planning)

11.2 实施路线图

阶段周期关键任务
Phase 12-3个月基础双层架构:设计层工具、执行层工具、程序包格式
Phase 22-3个月模型集成:GraspNet部署、WAM部署、边缘设备适配
Phase 32-3个月现场验证:场景验证、反向同步完善、性能调优

© 2026 玑之科技 JZI. All rights reserved.

JZTclaw(玑之龙虾)双层架构技术实现方案 v4.0