-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBlockly-7Bot.html
More file actions
13 lines (13 loc) · 352 KB
/
Blockly-7Bot.html
File metadata and controls
13 lines (13 loc) · 352 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
<!doctype html><html lang="zh"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="default-src 'self' data: blob: https://cdn.jsdelivr.net https://unpkg.com https://cdnjs.cloudflare.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://unpkg.com; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; img-src 'self' data: blob: https:; media-src 'self' blob:; connect-src 'self' https: wss: ws:; worker-src 'self' blob:;"><title>7Bot机械臂 Blockly图形化编程环境</title><style>*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;background-color:#f5f7fa;color:#333;font-size:16px;line-height:1.6;height:100vh;overflow:hidden}.toolbar{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff;padding:10px 15px;box-shadow:0 2px 10px rgba(0,0,0,.1);z-index:1000;height:60px;min-width:1000px}.toolbar-section{display:flex;align-items:center;gap:10px}.logo{display:flex;align-items:center;gap:6px;font-size:19px;font-weight:700;height:40px;white-space:nowrap}.logo-image{height:28px;width:auto;border-radius:4px}.logo i{font-size:24px;color:gold}.connection-controls{display:flex;align-items:center;gap:8px;flex-wrap:nowrap}.connection-mode-selector{flex-shrink:0}.connection-mode-selector select{padding:5px 8px;border:1px solid #ddd;border-radius:4px;background:#fff;font-size:14px;min-width:120px;max-width:140px}.connection-input{display:flex;align-items:center;gap:5px;flex-shrink:0;position:relative}.connection-input input{padding:5px 8px;border:1px solid #ddd;border-radius:4px;font-size:14px;width:180px;background:#fff}.connection-input input[type=number]{width:60px}.serial-info{font-size:12px;color:#e9ecef;font-style:italic;padding:5px 8px;background-color:rgba(255,255,255,.1);border-radius:4px;white-space:nowrap}.status-indicator{display:flex;align-items:center;gap:4px;padding:3px 6px;border-radius:12px;font-size:12px;font-weight:500;white-space:nowrap;flex-shrink:0}.status-indicator.connected{background-color:rgba(40,167,69,.2);color:#28a745}.status-indicator.disconnected{background-color:rgba(220,53,69,.2);color:#dc3545}.status-indicator i{font-size:8px}.btn{display:inline-flex;align-items:center;gap:4px;padding:6px 12px;border:none;border-radius:6px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;text-decoration:none;white-space:nowrap;flex-shrink:0}.btn:hover{transform:translateY(-1px);box-shadow:0 4px 8px rgba(0,0,0,.15)}.btn:disabled{opacity:.6;cursor:not-allowed;transform:none;box-shadow:none}.btn-primary{background-color:#007bff;color:#fff}.btn-primary:hover:not(:disabled){background-color:#0056b3}.btn-success{background-color:#28a745;color:#fff}.btn-success:hover:not(:disabled){background-color:#1e7e34}.btn-warning{background-color:#ffc107;color:#212529}.btn-warning:hover:not(:disabled){background-color:#e0a800}.btn-danger{background-color:#dc3545;color:#fff}.btn-danger:hover:not(:disabled){background-color:#c82333}.btn-secondary{background-color:#6c757d;color:#fff}.btn-secondary:hover:not(:disabled){background-color:#545b62}.btn-outline{background-color:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.3)}.btn-outline:hover:not(:disabled){background-color:rgba(255,255,255,.2)}#language-toggle-btn{background-color:rgba(21,179,255,.8);color:#fff;border:none;padding:8px 12px;border-radius:4px;cursor:pointer;font-size:12px;font-weight:700;transition:background-color .2s;min-width:40px;text-align:center}#language-toggle-btn:hover{background-color:rgba(14,163,232,.9)}#language-toggle-btn.active{background-color:#0ea3e8}.btn-small{padding:4px 8px;font-size:11px;gap:3px}.program-controls{display:flex;gap:6px;align-items:center}.file-controls{display:flex;gap:6px;align-items:center}.main-container{display:grid;grid-template-columns:1fr 525px;height:calc(100vh - 60px);gap:0}.left-panel{display:flex;flex-direction:column;background-color:#fff;border-right:1px solid #e9ecef;overflow:hidden}.left-panel.expanded{grid-column:1}.toolbox-section{display:flex;flex-direction:column;height:100%}.toolbox-header{background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff;padding:12px 16px;border-bottom:1px solid #e9ecef;font-size:16px;font-weight:600;display:flex;align-items:center;height:48px}.toolbox-header h3{margin:0;font-size:16px;font-weight:600}.blockly-container{flex:1;position:relative;overflow:hidden}#blocklyDiv{width:100%;height:100%;background-color:#f8f9fa}.right-panel{display:flex;flex-direction:column;background-color:#fff;border-left:1px solid #e9ecef;overflow-y:auto;width:525px}.panel-section{border-bottom:1px solid #e9ecef}.panel-header{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff;padding:14px 18px;border-radius:8px 8px 0 0;cursor:pointer;transition:all .2s ease;font-size:18px;font-weight:600}.panel-header:hover{background:linear-gradient(135deg,#5a67d8 0,#6b46c1 100%)}.panel-header i{font-size:18px;margin-right:10px}.collapse-btn{background:0 0;border:none;color:#fff;cursor:pointer;font-size:16px;padding:5px;border-radius:4px;transition:all .2s ease}.collapse-btn.collapsed{transform:rotate(-90deg)}.panel-content{background:#fff;padding:18px;border-radius:0 0 8px 8px;box-shadow:0 2px 10px rgba(0,0,0,.1)}.panel-content.collapsed{display:none}.status-grid{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:8px;margin-bottom:12px}.status-item{display:flex;flex-direction:column;gap:3px}.status-item label{font-weight:600;color:#555;font-size:11px}.status-item span{padding:4px 6px;background:#f8f9fa;border:1px solid #e9ecef;border-radius:4px;font-size:11px;font-weight:500;text-align:center}.status-item span.status-online{background:#d4edda;border-color:#c3e6cb;color:#155724}.status-item span.status-offline{background:#f8d7da;border-color:#f5c6cb;color:#721c24}.status-item span.status-connecting{background:#fff3cd;border-color:#ffeaa7;color:#856404}#device-id{font-family:Monaco,Menlo,'Ubuntu Mono',monospace;font-weight:600;letter-spacing:.5px}#firmware-version{font-family:Monaco,Menlo,'Ubuntu Mono',monospace;font-weight:600}#running-status{font-weight:600}.input-hint{position:absolute;top:100%;left:0;right:0;padding:6px 8px;margin-top:2px;border-radius:4px;font-size:12px;font-weight:500;z-index:1000;box-shadow:0 2px 8px rgba(0,0,0,.15);animation:fadeInUp .2s ease}.input-hint-success{background-color:#d4edda;border:1px solid #c3e6cb;color:#155724}.input-hint-error{background-color:#f8d7da;border:1px solid #f5c6cb;color:#721c24}.input-hint-info{background-color:#d1ecf1;border:1px solid #bee5eb;color:#0c5460}@keyframes fadeInUp{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.status-servo{background:#d4edda!important;border-color:#c3e6cb!important;color:#155724!important}.status-protect{background:#f8d7da!important;border-color:#f5c6cb!important;color:#721c24!important}.quick-actions{display:grid;grid-template-columns:1fr 1fr;gap:12px}.quick-btn{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 15px;background-color:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;cursor:pointer;transition:all .2s ease;text-decoration:none}.quick-btn:hover{background-color:#e9ecef;transform:translateY(-1px);box-shadow:0 2px 4px rgba(0,0,0,.1)}.quick-btn i{font-size:18px;color:#6c757d}.quick-btn span{font-size:12px;color:#495057;font-weight:500}.log-controls{display:flex;gap:8px;margin-bottom:12px;justify-content:flex-end}.message-log{max-height:200px;overflow-y:auto;background-color:#f8f9fa;border:1px solid #e9ecef;border-radius:6px;padding:15px}.log-item{padding:6px 0;border-bottom:1px solid #e9ecef;font-size:13px;line-height:1.5}.log-item:last-child{border-bottom:none}.timestamp{color:#6c757d;font-size:11px;margin-right:8px}.message{color:#495057}.log-item.info .message{color:#17a2b8}.log-item.success .message{color:#28a745}.log-item.warning .message{color:#ffc107}.log-item.error .message{color:#dc3545}.code-controls{display:flex;gap:8px;margin-bottom:12px;justify-content:flex-end}.code-preview{background-color:#f8f9fa;border:1px solid #e9ecef;border-radius:6px;padding:18px;font-family:Consolas,Monaco,'Courier New',monospace;font-size:14px;line-height:1.6;max-height:300px;overflow-y:auto;white-space:pre-wrap;color:#495057}.code-preview code{background:0 0;padding:0}.modal{display:none;position:fixed;z-index:2000;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);animation:fadeIn .3s ease}.modal-content{position:relative;background-color:#fff;margin:15% auto;padding:0;border-radius:8px;width:90%;max-width:500px;box-shadow:0 8px 32px rgba(0,0,0,.3);animation:slideIn .3s ease}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e9ecef;background-color:#f8f9fa;border-radius:8px 8px 0 0}.modal-header h3{margin:0;font-size:18px;font-weight:600;color:#212529}.modal-close{background:0 0;border:none;font-size:24px;font-weight:700;color:#6c757d;cursor:pointer;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s ease}.modal-close:hover{background-color:#e9ecef;color:#495057}.modal-body{padding:20px}.modal-footer{padding:16px 20px;border-top:1px solid #e9ecef;text-align:right}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideIn{from{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}.help-content{font-size:14px;line-height:1.6}.help-section{margin-bottom:20px}.help-section:last-child{margin-bottom:0}.help-section h4{color:#333;font-size:16px;font-weight:600;margin-bottom:10px;border-bottom:2px solid #667eea;padding-bottom:5px}.help-section ul{list-style:none;padding:0}.help-section li{padding:5px 0;position:relative;padding-left:20px}.help-section li:before{content:"•";color:#667eea;font-weight:700;position:absolute;left:0}.help-section strong{color:#333;font-weight:600}.blocklyToolboxDiv{background-color:#f8f9fa!important;border-right:1px solid #dee2e6!important;min-width:120px!important}.blocklyTreeLabel{font-size:20px!important;font-weight:700!important;padding:14px 18px!important;line-height:1.3!important;display:flex!important;align-items:center!important;color:#333!important;border-radius:6px!important;margin:3px 5px!important;transition:all .2s ease!important;transform:translateX(-20px)!important}.blocklyTreeRow{min-height:48px!important;display:flex!important;align-items:center!important;cursor:pointer!important}.blocklyTreeRowContentContainer{display:flex!important;align-items:center!important;width:100%!important;padding:3px!important}.blocklyTreeRow:not(.blocklyTreeSelected):hover{background-color:#e3f2fd!important}.blocklyTreeRow:not(.blocklyTreeSelected):hover .blocklyTreeLabel{background-color:#e3f2fd!important;color:#1976d2!important;transform:translateX(-15px)!important}.blocklyTreeSelected{background-color:#667eea!important;color:#fff!important;border-radius:6px!important;margin:3px 5px!important}.blocklyTreeSelected .blocklyTreeLabel{background-color:transparent!important;color:#fff!important;font-weight:700!important}.blocklyTreeIcon{width:22px!important;height:22px!important;margin-right:10px!important}.blocklyToolboxDiv::-webkit-scrollbar{width:10px!important}.blocklyToolboxDiv::-webkit-scrollbar-track{background:#f1f1f1!important;border-radius:5px!important}.blocklyToolboxDiv::-webkit-scrollbar-thumb{background:#c1c1c1!important;border-radius:5px!important}.blocklyToolboxDiv::-webkit-scrollbar-thumb:hover{background:#a8a8a8!important}.blocklyTreeRoot{padding:10px 0!important}.blocklyToolboxDiv .blocklyTreeSeparator{height:1px!important;background-color:#e0e0e0!important;margin:10px 14px!important}@media (max-width:1200px){.main-container{grid-template-columns:1fr 300px}.right-panel{width:300px}}@media (max-width:900px){.toolbar{padding:8px 10px;flex-wrap:wrap;height:auto;min-height:60px}.toolbar-section{gap:8px}.connection-controls input{width:120px}.main-container{grid-template-columns:1fr 250px;height:calc(100vh - 60px)}.right-panel{width:250px}.panel-content{padding:12px}}@media (max-width:768px){.main-container{grid-template-columns:1fr;grid-template-rows:1fr}.right-panel{display:none}.left-panel{grid-column:1}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.video-controls{display:flex;gap:10px;margin-bottom:15px}.video-container{position:relative;width:100%;margin-bottom:15px;border:2px solid #ddd;border-radius:8px;overflow:hidden;background:#000}#video-feed{width:100%;height:auto;display:block}#video-canvas{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:10}.detection-output{background:#f8f9fa;border-radius:8px;padding:15px}.detection-output h4{margin:0 0 10px 0;color:#333;font-size:14px;font-weight:600}.detection-data{display:flex;flex-direction:column;gap:8px}.detection-counts{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:10px}.data-item{display:flex;justify-content:space-between;align-items:center;padding:6px 8px;background:#fff;border-radius:4px;border:1px solid #e0e0e0}.data-item.count-item{flex-direction:column;gap:4px;text-align:center}.data-label{font-weight:500;color:#555;font-size:12px}.data-value{font-weight:600;color:#333;font-size:12px}.coordinate-output{max-height:100px;overflow-y:auto;font-size:11px;color:#666;background:#f0f0f0;padding:5px;border-radius:3px;margin-top:5px}.coordinate-output:empty::before{content:"暂无数据";color:#999;font-style:italic}@media (max-width:900px){.video-controls{flex-direction:column}.video-container{max-height:200px}.detection-output{padding:10px}}</style><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"><script src="https://unpkg.com/blockly@9.3.1/blockly.min.js"></script><script src="https://unpkg.com/blockly@9.3.1/javascript_compressed.js"></script><script src="https://unpkg.com/blockly/msg/zh-hans.js"></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/camera_utils@0.3/camera_utils.js" crossorigin="anonymous" async></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/control_utils@0.6/control_utils.js" crossorigin="anonymous" async></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils@0.3/drawing_utils.js" crossorigin="anonymous" async></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/face_detection@0.4/face_detection.js" crossorigin="anonymous" async></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/hands@0.4/hands.js" crossorigin="anonymous" async></script><script src="https://cdn.jsdelivr.net/npm/@mediapipe/pose@0.5/pose.js" crossorigin="anonymous" async></script>
<script>
(function(){
var _check_hcdh = function() {
return typeof Blockly !== 'undefined' && typeof window !== 'undefined';
};
if (!_check_QqOI()) {
console.warn('Environment check failed');
}
})();
</script>
</head><body><div class="toolbar"><div class="toolbar-section"><div class="logo"><img src="data:image/png;base64,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" alt="松果AI" class="logo-image"> <span>松果AI图形化编程-7Bot</span></div></div><div class="toolbar-section"><div class="connection-controls"><div class="connection-mode-selector"><select id="connection-mode"><option value="serial">USB串口</option><option value="websocket" selected="selected">WiFi网络</option></select></div><div class="connection-input" id="serial-input" style="display:none"><span class="serial-info">点击连接选择串口设备</span></div><div class="connection-input" id="websocket-input"><input id="websocket-ip" placeholder="IP地址或4位MAC地址"></div><button id="connect-btn" class="btn btn-primary"><i class="fas fa-link"></i> 连接</button><div id="connection-status" class="status-indicator disconnected"><i class="fas fa-circle"></i> <span id="status-text">未连接</span></div></div></div><div class="toolbar-section"><div class="program-controls"><button id="run-btn" class="btn btn-success" disabled="disabled"><i class="fas fa-play"></i> 运行</button> <button id="pause-btn" class="btn btn-warning" disabled="disabled"><i class="fas fa-pause"></i> 暂停</button> <button id="stop-btn" class="btn btn-danger" disabled="disabled"><i class="fas fa-stop"></i> 停止</button> <button id="reset-btn" class="btn btn-secondary"><i class="fas fa-undo"></i> 复位</button></div></div><div class="toolbar-section"><div class="file-controls"><button id="save-btn" class="btn btn-outline"><i class="fas fa-save"></i> 保存</button> <button id="load-btn" class="btn btn-outline"><i class="fas fa-folder-open"></i> 加载</button></div></div><div class="toolbar-section"><button id="language-toggle-btn" class="btn btn-outline"><i class="fas fa-globe"></i> 中</button></div></div><div class="main-container"><div class="left-panel expanded"><div class="toolbox-section"><div id="blocklyDiv" class="blockly-container"></div></div></div><div class="right-panel"><div class="panel-section"><div class="panel-header"><i class="fas fa-tachometer-alt"></i> <span>机械臂状态</span> <button class="collapse-btn" data-target="arm-status-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="arm-status-content"><div class="status-grid"><div class="status-item"><label>设备状态:</label> <span id="device-status">离线</span></div><div class="status-item"><label>设备ID:</label> <span id="device-id">--</span></div><div class="status-item"><label>固件版本:</label> <span id="firmware-version">--</span></div><div class="status-item"><label>运行状态:</label> <span id="running-status">停止</span></div></div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-video"></i> <span>实时视频检测</span> <button class="collapse-btn" data-target="video-detection-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="video-detection-content"><div class="video-controls"><button class="btn btn-primary" id="start-camera"><i class="fas fa-play"></i> 启动摄像头</button> <button class="btn btn-danger" id="stop-camera"><i class="fas fa-stop"></i> 停止摄像头</button> <button class="btn btn-info" id="toggle-drawing"><i class="fas fa-paint-brush"></i> 绘制开启</button></div><div class="video-container"><video id="video-feed" autoplay muted></video><canvas id="video-canvas"></canvas></div><div class="detection-output"><h4>检测数据输出</h4><div id="detection-data-output" class="detection-data"><div class="detection-counts"><div class="data-item count-item" id="face-detection-item" style="display:none"><span class="data-label">人脸</span> <span class="data-value" id="face-count">0</span></div><div class="data-item count-item" id="hand-detection-item" style="display:none"><span class="data-label">手部</span> <span class="data-value" id="hand-count">0</span></div><div class="data-item count-item" id="pose-detection-item" style="display:none"><span class="data-label">姿态</span> <span class="data-value" id="pose-status">未检测</span></div></div><div class="data-item"><span class="data-label">坐标输出:</span><div class="coordinate-output" id="coordinate-output"></div></div></div></div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-lightning-bolt"></i> <span>快速操作</span> <button class="collapse-btn" data-target="quick-actions-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="quick-actions-content"><div class="quick-actions"><button class="quick-btn" id="home-position"><i class="fas fa-home"></i> <span>回到原点</span></button> <button class="quick-btn" id="enable-motors"><i class="fas fa-power-off"></i> <span>使能电机</span></button> <button class="quick-btn" id="disable-motors"><i class="fas fa-power-off"></i> <span>失能电机</span></button> <button class="quick-btn" id="emergency-stop"><i class="fas fa-exclamation-triangle"></i> <span>紧急停止</span></button></div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-list-alt"></i> <span>消息日志</span> <button class="collapse-btn" data-target="message-log-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="message-log-content"><div class="log-controls"><button id="clear-log-btn" class="btn btn-small"><i class="fas fa-trash"></i> 清空</button> <button id="export-log-btn" class="btn btn-small"><i class="fas fa-download"></i> 导出</button></div><div id="message-log" class="message-log"></div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-sitemap"></i> <span>程序结构</span> <button class="collapse-btn" data-target="program-structure-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="program-structure-content"><div id="program-status" style="padding:10px;background:#f5f5f5;border-radius:4px;font-size:14px"><span style="color:#666">等待积木块...</span></div><div style="margin-top:10px;padding:8px;background:#e3f2fd;border-radius:4px;font-size:12px"><strong>💡 使用说明:</strong><br>1. 拖拽"🚀 程序开始"积木块到工作区<br>2. 将其他积木块连接到程序开始积木块下方<br>3. 只有连接的积木块才会按顺序执行</div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-code"></i> <span>生成代码</span> <button class="collapse-btn" data-target="code-preview-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="code-preview-content"><div class="code-controls"><button id="copy-code-btn" class="btn btn-small"><i class="fas fa-copy"></i> 复制</button> <button id="format-code-btn" class="btn btn-small"><i class="fas fa-indent"></i> 格式化</button> <button id="export-btn" class="btn btn-small"><i class="fas fa-download"></i> 导出</button></div><div class="code-preview"><pre><code id="generated-code">// 拖拽积木块来生成代码
console.log('Hello, 7Bot!');</code></pre></div></div></div><div class="panel-section"><div class="panel-header"><i class="fas fa-question-circle"></i> <span>帮助信息</span> <button class="collapse-btn" data-target="help-content"><i class="fas fa-chevron-down"></i></button></div><div class="panel-content" id="help-content"><div class="help-content"><div class="help-section"><h4>基本操作</h4><ul><li>从左侧工具箱拖拽积木到工作区</li><li>连接积木块来构建程序</li><li>点击"运行"按钮执行程序</li></ul></div><div class="help-section"><h4>连接方式</h4><ul><li><strong>串口连接</strong>: 直接USB连接机械臂</li><li><strong>WiFi连接</strong>: 通过WiFi网络连接</li></ul></div><div class="help-section"><h4>安全提示</h4><ul><li>运行程序前确保机械臂周围安全</li><li>紧急情况下点击"停止"按钮</li><li>程序结束后记得"复位"机械臂</li></ul></div></div></div></div></div></div><div id="error-modal" class="modal"><div class="modal-content"><div class="modal-header"><h3>错误</h3><button class="modal-close">×</button></div><div class="modal-body"><p id="error-message">操作失败</p></div><div class="modal-footer"><button class="btn btn-primary" onclick='closeModal("error-modal")'>确定</button></div></div></div><div id="success-modal" class="modal"><div class="modal-content"><div class="modal-header"><h3>成功</h3><button class="modal-close">×</button></div><div class="modal-body"><p id="success-message">操作成功</p></div><div class="modal-footer"><button class="btn btn-primary" onclick='closeModal("success-modal")'>确定</button></div></div></div><xml id="toolbox" style="display:none"><category name="程序开始" colour="#FF6B35"><block type="program_start"></block></category><category name="设备信息" colour="#2196F3"><block type="device_get_info"></block><block type="device_get_version"></block><block type="device_get_mac"></block><block type="device_get_id"></block><block type="device_set_id"><value name="ID"><shadow type="math_number"><field name="NUM">1</field></shadow></value></block><block type="device_get_system_info"></block></category><category name="运动控制" colour="#4CAF50"><block type="motor_set_status"></block><block type="motor_set_speed"><value name="SPEED"><shadow type="math_number"><field name="NUM">50</field></shadow></value></block><block type="motor_set_time"><value name="TIME"><shadow type="math_number"><field name="NUM">1000</field></shadow></value></block><block type="joint_set_angle"><value name="ANGLE"><shadow type="math_number"><field name="NUM">90</field></shadow></value></block><block type="joint_set_all_angles"><value name="ANGLE0"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE1"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE2"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE3"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE4"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE5"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE6"><shadow type="math_number"><field name="NUM">40</field></shadow></value></block><block type="ik_set_position_6"><value name="X"><shadow type="math_number"><field name="NUM">200</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="Z"><shadow type="math_number"><field name="NUM">150</field></shadow></value><value name="VX"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="VY"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="VZ"><shadow type="math_number"><field name="NUM">-1</field></shadow></value></block><block type="ik_set_position_5"><value name="X"><shadow type="math_number"><field name="NUM">200</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="Z"><shadow type="math_number"><field name="NUM">150</field></shadow></value></block><block type="ik_set_position_7"><value name="X"><shadow type="math_number"><field name="NUM">200</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="Z"><shadow type="math_number"><field name="NUM">150</field></shadow></value><value name="V1X"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="V1Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="V1Z"><shadow type="math_number"><field name="NUM">-1</field></shadow></value><value name="V2X"><shadow type="math_number"><field name="NUM">1</field></shadow></value><value name="V2Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="V2Z"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></category><category name="执行前端" colour="#F44336"><block type="effector_set_type"></block><block type="gripper_set_angle"><value name="ANGLE"><shadow type="math_number"><field name="NUM">40</field></shadow></value></block><block type="gripper_quick_action"></block><block type="vacuum_set_state"></block></category><category name="状态读取" colour="#607D8B"><block type="sensor_get_load"></block><block type="sensor_get_all_loads"></block><block type="sensor_get_offsets"></block><block type="sensor_set_offsets"></block><block type="motor_get_status"></block><block type="joint_get_angle"></block><block type="joint_get_all_angles"></block><block type="vacuum_get_state"></block></category><category name="程序控制" colour="#795548"><block type="control_wait_ms"><value name="TIME"><shadow type="math_number"><field name="NUM">1000</field></shadow></value></block><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">1</field></shadow></value></block><block type="control_arm_wait"><value name="TIME"><shadow type="math_number"><field name="NUM">1000</field></shadow></value></block><block type="controls_repeat_ext"><value name="TIMES"><shadow type="math_number"><field name="NUM">5</field></shadow></value></block><block type="controls_whileUntil"></block><block type="controls_for"><value name="FROM"><shadow type="math_number"><field name="NUM">1</field></shadow></value><value name="TO"><shadow type="math_number"><field name="NUM">10</field></shadow></value><value name="BY"><shadow type="math_number"><field name="NUM">1</field></shadow></value></block><block type="controls_if"></block><block type="start_detection_loop"></block><block type="loop_condition"></block></category><category name="信息输出" colour="#673AB7"><block type="debug_print"><value name="TEXT"><shadow type="text"><field name="TEXT">Hello World</field></shadow></value></block><block type="debug_alert"><value name="MESSAGE"><shadow type="text"><field name="TEXT">提示信息</field></shadow></value></block><block type="debug_log"><value name="MESSAGE"><shadow type="text"><field name="TEXT">日志信息</field></shadow></value></block><block type="text"><field name="TEXT"></field></block><block type="text_join"></block><block type="text_length"><value name="VALUE"><shadow type="text"><field name="TEXT">abc</field></shadow></value></block></category><category name="数学运算" colour="#5b80a5"><block type="math_number"><field name="NUM">0</field></block><block type="math_arithmetic"><value name="A"><shadow type="math_number"><field name="NUM">1</field></shadow></value><value name="B"><shadow type="math_number"><field name="NUM">1</field></shadow></value></block><block type="math_random_int"><value name="FROM"><shadow type="math_number"><field name="NUM">1</field></shadow></value><value name="TO"><shadow type="math_number"><field name="NUM">100</field></shadow></value></block><sep></sep><block type="variables_get"><field name="VAR">变量</field></block><block type="variables_set"><field name="VAR">变量</field></block></category><category name="视觉检测" colour="#FF6B35"><block type="camera_start"></block><block type="camera_stop"></block><block type="vision_detect"><field name="DETECTION_TYPE">faces</field></block><block type="get_face_coordinate"><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block><block type="get_hand_coordinate"><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block><block type="get_pose_coordinate"><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block><block type="output_coordinates"><value name="X"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></category><category name="运动案例" colour="#9C27B0"><label text="📦 案例1:基础运动演示"></label><block type="program_start"><next><block type="motor_set_status"><field name="STATUS">1</field><next><block type="motor_set_speed"><value name="SPEED"><shadow type="math_number"><field name="NUM">60</field></shadow></value><next><block type="joint_set_all_angles"><value name="ANGLE0"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE1"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE2"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE3"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE4"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE5"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE6"><shadow type="math_number"><field name="NUM">50</field></shadow></value><next><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">2</field></shadow></value><next><block type="joint_set_angle"><field name="JOINT">0</field><value name="ANGLE"><shadow type="math_number"><field name="NUM">45</field></shadow></value><next><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">1</field></shadow></value><next><block type="debug_print"><value name="TEXT"><shadow type="text"><field name="TEXT">基础运动演示完成!</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block><label text="🔄 案例2:循环抓取演示"></label><block type="program_start"><next><block type="motor_set_status"><field name="STATUS">1</field><next><block type="effector_set_type"><field name="TYPE">1</field><next><block type="controls_repeat_ext"><value name="TIMES"><shadow type="math_number"><field name="NUM">3</field></shadow></value><statement name="DO"><block type="joint_set_all_angles"><value name="ANGLE0"><shadow type="math_number"><field name="NUM">120</field></shadow></value><value name="ANGLE1"><shadow type="math_number"><field name="NUM">60</field></shadow></value><value name="ANGLE2"><shadow type="math_number"><field name="NUM">30</field></shadow></value><value name="ANGLE3"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE4"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE5"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE6"><shadow type="math_number"><field name="NUM">20</field></shadow></value><next><block type="gripper_set_angle"><value name="ANGLE"><shadow type="math_number"><field name="NUM">20</field></shadow></value><next><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">1</field></shadow></value><next><block type="joint_set_all_angles"><value name="ANGLE0"><shadow type="math_number"><field name="NUM">60</field></shadow></value><value name="ANGLE1"><shadow type="math_number"><field name="NUM">120</field></shadow></value><value name="ANGLE2"><shadow type="math_number"><field name="NUM">60</field></shadow></value><value name="ANGLE3"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE4"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE5"><shadow type="math_number"><field name="NUM">90</field></shadow></value><value name="ANGLE6"><shadow type="math_number"><field name="NUM">50</field></shadow></value><next><block type="gripper_set_angle"><value name="ANGLE"><shadow type="math_number"><field name="NUM">50</field></shadow></value></block></next></block></next></block></next></block></next></block></statement><next><block type="debug_print"><value name="TEXT"><shadow type="text"><field name="TEXT">循环抓取演示完成!</field></shadow></value></block></next></block></next></block></next></block></next></block><label text="📐 案例3:坐标控制演示"></label><block type="program_start"><next><block type="motor_set_status"><field name="STATUS">1</field><next><block type="motor_set_speed"><value name="SPEED"><shadow type="math_number"><field name="NUM">40</field></shadow></value><next><block type="ik_set_position_5"><value name="X"><shadow type="math_number"><field name="NUM">200</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="Z"><shadow type="math_number"><field name="NUM">150</field></shadow></value><next><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">1</field></shadow></value><next><block type="ik_set_position_5"><value name="X"><shadow type="math_number"><field name="NUM">200</field></shadow></value><value name="Y"><shadow type="math_number"><field name="NUM">100</field></shadow></value><value name="Z"><shadow type="math_number"><field name="NUM">150</field></shadow></value><next><block type="control_wait_s"><value name="TIME"><shadow type="math_number"><field name="NUM">1</field></shadow></value><next><block type="debug_print"><value name="TEXT"><shadow type="text"><field name="TEXT">坐标控制演示完成!</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></category><category name="视觉案例" colour="#FF9800"><label text="👤 案例1:人脸跟随控制"></label><block type="program_start"><next><block type="camera_start"><next><block type="start_detection_loop"><statement name="DETECTION_ACTIONS"><block type="vision_detect"><field name="DETECTION_TYPE">faces</field><next><block type="output_coordinates"><field name="LABEL">坐标</field><value name="X"><block type="get_face_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><value name="Y"><block type="get_face_coordinate"><field name="COORDINATE">y</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><next><block type="joint_set_angle"><field name="ID">0</field><value name="ANGLE"><block type="math_arithmetic"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number"><field name="NUM">180</field></shadow></value><value name="B"><block type="get_face_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value></block></value><next><block type="joint_set_angle"><field name="ID">2</field><value name="ANGLE"><block type="math_arithmetic"><field name="OP">ADD</field><value name="A"><shadow type="math_number"><field name="NUM">20</field></shadow></value><value name="B"><block type="math_arithmetic"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number"><field name="NUM">80</field></shadow></value><value name="B"><block type="get_face_coordinate"><field name="COORDINATE">y</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value></block></value></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block><label text="🧍 案例2:姿态跟随控制"></label><block type="program_start"><next><block type="camera_start"><next><block type="start_detection_loop"><statement name="DETECTION_ACTIONS"><block type="vision_detect"><field name="DETECTION_TYPE">pose</field><next><block type="output_coordinates"><field name="LABEL">坐标</field><value name="X"><block type="get_pose_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><value name="Y"><block type="get_pose_coordinate"><field name="COORDINATE">y</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><next><block type="joint_set_angle"><field name="ID">0</field><value name="ANGLE"><block type="math_arithmetic"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number"><field name="NUM">180</field></shadow></value><value name="B"><block type="get_pose_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value></block></value></block></next></block></next></block></statement></block></next></block></next></block><label text="✋ 案例3:人手跟随控制"></label><block type="program_start"><next><block type="camera_start"><next><block type="start_detection_loop"><statement name="DETECTION_ACTIONS"><block type="vision_detect"><field name="DETECTION_TYPE">hands</field><next><block type="output_coordinates"><field name="LABEL">坐标</field><value name="X"><block type="get_hand_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><value name="Y"><block type="get_hand_coordinate"><field name="COORDINATE">y</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value><next><block type="joint_set_angle"><field name="ID">0</field><value name="ANGLE"><block type="math_arithmetic"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number"><field name="NUM">180</field></shadow></value><value name="B"><block type="get_hand_coordinate"><field name="COORDINATE">x</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value></block></value><next><block type="joint_set_angle"><field name="ID">2</field><value name="ANGLE"><block type="math_arithmetic"><field name="OP">ADD</field><value name="A"><shadow type="math_number"><field name="NUM">20</field></shadow></value><value name="B"><block type="math_arithmetic"><field name="OP">MULTIPLY</field><value name="A"><shadow type="math_number"><field name="NUM">80</field></shadow></value><value name="B"><block type="get_hand_coordinate"><field name="COORDINATE">y</field><value name="TARGET_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value><value name="POINT_ID"><shadow type="math_number"><field name="NUM">0</field></shadow></value></block></value></block></value></block></value></block></next></block></next></block></next></block></statement></block></next></block></next></block></category></xml><script>class I18nManager{constructor(){this.currentLanguage="zh",this.translations={zh:{pageTitle:"松果AI图形化编程-7Bot",connection:"连接方式:",serialPort:"USB串口",wifi:"WiFi网络",connect:"连接",disconnect:"断开",ipMac:"IP/MAC:",pleaseEnterIpOrMac:"请输入IP地址或4位MAC地址",armStatus:"机械臂状态",deviceStatus:"设备状态:",deviceId:"设备ID:",firmwareVersion:"固件版本:",runningStatus:"运行状态:",online:"在线",offline:"离线",stop:"停止",videoDetection:"实时视频检测",startCamera:"启动摄像头",stopCamera:"停止摄像头",toggleDrawing:"绘制开启",detectionDataOutput:"检测数据输出",face:"人脸",hand:"手部",pose:"姿态",coordinateOutput:"坐标输出:",noData:"暂无数据",quickActions:"快速操作",homePosition:"回到原点",enableMotors:"使能电机",disableMotors:"失能电机",emergencyStop:"紧急停止",messageLog:"消息日志",clear:"清空",export:"导出",programStructure:"程序结构",waitingBlocks:"等待积木块...",usageInstructions:"💡 使用说明:",instruction1:'1. 拖拽"🚀 程序开始"积木块到工作区',instruction2:"2. 将其他积木块连接到程序开始积木块下方",instruction3:"3. 只有连接的积木块才会按顺序执行",generatedCode:"生成代码",copy:"复制",format:"格式化",exportCode:"导出",dragBlocksToGenerate:"// 拖拽积木块来生成代码",run:"运行",pause:"暂停",stop:"停止",reset:"复位",save:"保存",load:"加载",helpInfo:"帮助信息",basicOperations:"基本操作",basicOp1:"从左侧工具箱拖拽积木到工作区",basicOp2:"连接积木块来构建程序",basicOp3:'点击"运行"按钮执行程序',connectionMethods:"连接方式",connectionSerial:"串口连接: 直接USB连接机械臂",connectionWifi:"WiFi连接: 通过WiFi网络连接",safetyTips:"安全提示",safetyTip1:"运行程序前确保机械臂周围安全",safetyTip2:'紧急情况下点击"停止"按钮',safetyTip3:'程序结束后记得"复位"机械臂',programStart:"程序开始",programStartTooltip:"程序的开始点,只有连接到此积木块的代码才会执行",programStartComment:"程序入口点:从这里开始执行\n• 只能有一个程序开始积木块\n• 必须连接其他积木块才能执行\n• 散落的积木块不会执行",demoBasicMovement:"案例1:基础运动演示",demoBasicMovementTooltip:"演示机械臂基础运动功能:使能电机→设置速度→移动关节→等待→复位",startDemoBasicMovement:"开始执行基础运动演示...",motorEnabled:"电机已使能",speedSetTo:"运动速度设置为",jointsMovedToInitialPos:"关节已移动到初始位置",jointMovedTo:"关节",degree:"移动到",returnedToHomePos:"已回到原点位置",demoBasicMovementCompleted:"基础运动演示完成!",demoLoopPick:"案例2:循环抓取演示",demoLoopPickTooltip:"演示循环抓取功能:重复3次抓取→移动→放置→返回的动作",startDemoLoopPick:"开始执行循环抓取演示...",systemInitialized:"系统初始化完成",systemInfo:"系统信息:",currentJointLoads:"当前关节负载:",setSpeedByLoad:"根据负载设置速度为: ",executeTestAction:"执行测试动作",currentAngles:"当前角度",loads:"负载",demoSensorApplicationCompleted:"传感器应用演示完成!",systemInitialization:"系统初始化中...",device:"设备",version:"版本",performanceTest:"性能测试",testSpeed:"测试速度: ",speed:"速度",gripperDemo:"抓取演示",prepareToGripper:"准备抓取",clampObject:"夹紧物体",releaseObject:"放开物体",demoComprehensiveCompleted:"🎉 综合应用演示完成!",startLoop:"开始执行循环",movedToPickPos:"已移动到抓取位置",gripperPickObject:"夹爪抓取物体",movedToPlacePos:"已移动到放置位置",gripperReleaseObject:"夹爪放开物体",demoLoopPickCompleted:"循环抓取演示完成!",demoCoordinateControl:"案例3:坐标控制演示",demoCoordinateControlTooltip:"演示空间坐标控制:使用逆运动学在空间中绘制正方形",startDemoCoordinateControl:"开始执行坐标控制演示...",demoSensorApplication:"案例4:传感器应用演示",demoSensorApplicationTooltip:"演示传感器应用功能:读取关节负载并根据负载调整速度",startDemoSensorApplication:"开始执行传感器应用演示...",demoComprehensive:"案例5:综合应用演示",demoComprehensiveTooltip:"演示综合应用功能:结合运动控制、传感器读取和视觉检测",startDemoComprehensive:"开始执行综合应用演示...",drawingSquare:"正在画正方形...",movedToStartPoint:"已移动到起始点",movedToPoint1:"已移动到点1",movedToPoint2:"已移动到点2",movedToPoint3:"已移动到点3",returnedToStartPoint:"已回到起点",coordinateControlCompleted:"坐标控制演示完成!",deviceInfo:"设备信息",deviceGetInfo:"获取设备代码",deviceGetInfoTooltip:"获取7Bot机械臂设备代码",deviceGetVersion:"获取固件版本",deviceGetVersionTooltip:"获取7Bot机械臂固件版本",deviceGetMac:"获取MAC地址",deviceGetMacTooltip:"获取7Bot机械臂MAC地址",deviceGetId:"获取设备ID",deviceGetIdTooltip:"获取7Bot机械臂设备ID",deviceSetId:"设置设备ID",deviceSetIdTooltip:"设置7Bot机械臂设备ID",deviceGetSystemInfo:"获取系统信息",deviceGetSystemInfoTooltip:"获取机械臂完整系统信息(设备类型、版本、MAC地址、设备ID)",motionControl:"运动控制",motorSetStatus:"设置关节状态",motorSetStatusTooltip:"设置机械臂关节状态(使能/失能/无力)",motorStatusEnable:"使能",motorStatusDisable:"失能",motorStatusTorqueOff:"无力",motorGetStatus:"获取电机状态",motorGetStatusTooltip:"获取机械臂电机状态(0=失能,1=使能)",motorSetSpeed:"设置运动速度为",motorSetSpeedTooltip:"设置机械臂运动速度百分比(1-100)",motorSetTime:"设置运动时间为",motorSetTimeTooltip:"设置机械臂运动时间",milliseconds:"毫秒",jointSetAngle:"设置关节",jointSetAngleTooltip:"设置指定关节的角度",joint0:"关节0 (底座)",joint1:"关节1 (后臂)",joint2:"关节2 (前臂)",joint3:"关节3 (肘部)",joint4:"关节4 (腕部)",joint5:"关节5 (前端)",joint6:"关节6 (夹爪)",degrees:"度",jointSetAllAngles:"设置所有关节角度",jointSetAllAnglesTooltip:"同时设置所有关节角度",jointGetAngle:"获取关节",jointGetAngleTooltip:"获取单个关节当前角度",jointGetAllAngles:"获取所有关节角度",jointGetAllAnglesTooltip:"获取所有关节当前角度",ikSetPosition6:"6关节IK运动到坐标",ikSetPosition6Tooltip:"使用6关节逆运动学控制机械臂到指定位置和方向",coordinate:"坐标",directionVector:"方向向量",xAxis:"X",yAxis:"Y",zAxis:"Z",ikSetPosition5:"5关节IK运动到坐标",ikSetPosition5Tooltip:"使用5关节逆运动学控制机械臂到指定位置",ikSetPosition7:"7关节IK运动到坐标",ikSetPosition7Tooltip:"使用7关节逆运动学控制机械臂到指定位置和双方向",directionVector1:"方向向量1",directionVector2:"方向向量2",effector:"执行前端",effectorSetType:"设置末端执行器为",effectorSetTypeTooltip:"设置末端执行器类型",effectorGripper:"夹爪",effectorSuction:"吸盘",effectorPen:"笔",effectorOther:"其他",gripperSetAngle:"设置夹爪角度为",gripperSetAngleTooltip:"设置夹爪开合角度(15-80度)",gripperQuickAction:"夹爪",gripperQuickActionTooltip:"快速打开或关闭夹爪",gripperOpen:"打开",gripperClose:"关闭",vacuumSetState:"吸盘",vacuumSetStateTooltip:"设置吸盘状态",vacuumOn:"开启",vacuumOff:"关闭",vacuumGetState:"获取吸盘状态",vacuumGetStateTooltip:"获取吸盘当前状态(0=关闭,1=开启)",sensorGetLoad:"获取关节",sensorGetLoadTooltip:"获取单个关节当前负载",sensorGetAllLoads:"获取所有关节负载",sensorGetAllLoadsTooltip:"获取所有关节当前负载",load:"加载",sensorGetOffsets:"获取关节偏移量",sensorGetOffsetsTooltip:"获取所有关节的偏移量",sensorSetOffsets:"设置关节偏移量",sensorSetOffsetsTooltip:"设置所有关节的偏移量(7个数值的数组)",controlWaitMs:"等待",ms:"毫秒",controlWaitMsTooltip:"暂停程序执行指定毫秒数",controlWaitS:"等待",s:"秒",controlWaitSTooltip:"暂停程序执行指定秒数",controlArmWait:"机械臂等待",controlArmWaitTooltip:"使用机械臂内置的等待函数",debugPrint:"打印",debugPrintTooltip:"在控制台和日志中打印信息",debugAlert:"弹出提示",debugAlertTooltip:"弹出警告对话框",debugLog:"记录",debugLogTooltip:"在系统日志中记录指定级别的信息",logLevelInfo:"信息",logLevelSuccess:"成功",logLevelWarning:"警告",logLevelError:"错误",log:"日志",startDetectionLoop:"开始循环检测",startDetectionLoopTooltip:"开始无限循环执行检测操作",loopCondition:"条件",loopConditionTrue:"True",loopConditionFalse:"False",loopConditionTooltip:"设置循环条件为True或False",cameraStart:"开启摄像头",cameraStartTooltip:"启动摄像头进行实时视觉检测",cameraStop:"关闭摄像头",cameraStopTooltip:"关闭摄像头并停止视觉检测",visionDetect:"检测",visionDetectTooltip:"执行指定类型的视觉检测",detectionTypeFace:"人脸",detectionTypeHand:"手部",detectionTypePose:"姿态",getFaceCoordinate:"获取人脸第",getFaceCoordinateTarget:"个目标的第",getFaceCoordinatePoint:"个点的",coordinateX:"X",coordinateY:"Y",coordinateZ:"Z",coordinate:"坐标",colon:":",getFaceCoordinateTooltip:"获取人脸指定目标的指定点的坐标",getHandCoordinate:"获取人手第",getHandCoordinateTarget:"个目标的第",getHandCoordinatePoint:"个点的",getHandCoordinateTooltip:"获取人手指定目标的指定点的坐标",getPoseCoordinate:"获取姿态第",getPoseCoordinateTarget:"个目标的第",getPoseCoordinatePoint:"个点的",getPoseCoordinateTooltip:"获取姿态关键点坐标 (0-鼻子, 11-12肩膀, 13-14肘部, 15-16手腕, 23-24髋部, 25-26膝盖, 27-28脚踝)",outputCoordinates:"输出坐标",outputX:"X",outputY:"Y",outputLabel:"标签",outputCoordinatesTooltip:"将坐标数据输出到实时视频检测面板",statusReading:"状态读取",programControl:"程序控制",infoOutput:"信息输出",mathOperations:"数学运算",visionDetection:"视觉检测",motionExamples:"运动案例",visionExamples:"视觉案例",deviceStatusLabel:"设备状态:",deviceIdLabel:"设备ID:",firmwareVersionLabel:"固件版本:",runningStatusLabel:"运行状态:",statusOnline:"在线",statusOffline:"离线",statusStop:"停止",detectionTypeFaces:"人脸",detectionTypeHands:"手部",detectionTypePose:"姿态",coordinateX:"X",coordinateY:"Y",coordinateLabel:"坐标",faceFollowControl:"👤 案例1:人脸跟随控制",poseFollowControl:"🧍 案例2:姿态跟随控制",handFollowControl:"✋ 案例3:人手跟随控制",systemInitComplete:"系统初始化完成",toolboxCategoriesOptimized:"工具箱分类优化完成",serialConnection:"串口连接",wifiConnection:"WiFi连接",switchTo:"切换到",connectionMode:"连接模式",connecting:"连接中...",connected:"已连接",disconnected:"已断开连接",connectionFailed:"连接失败",disconnectFailed:"断开连接失败",pleaseEnterIpOrMac:"请输入IP地址或MAC地址后4位",willConnectTo:"将连接到",macConnectionTip:"提示:MAC地址连接需要机械臂支持mDNS服务",deviceInfoUpdated:"设备信息已更新",deviceInfoUpdateFailed:"读取完整信息失败",readingDeviceInfo:"正在读取设备信息...",deviceInfoUpdateStarted:"设备信息定时更新已启动",deviceInfoUpdateStopped:"设备信息定时更新已停止",notConnected:"未连接",connectingStatus:"连接中...",connectedStatus:"已连接",disconnectedStatus:"已断开连接",error:"错误",success:"成功",warning:"警告",info:"信息",operationFailed:"操作失败",operationSuccess:"操作成功"},en:{pageTitle:"PineconeAI Blockly-7Bot",connection:"Connection:",serialPort:"USB",wifi:"WiFi",connect:"Connect",disconnect:"Disconnect",ipMac:"IP/MAC:",pleaseEnterIpOrMac:"IP or 4-digit MAC address",armStatus:"Arm Status",deviceStatus:"Device Status:",deviceId:"Device ID:",firmwareVersion:"Firmware Version:",runningStatus:"Running Status:",online:"Online",offline:"Offline",stop:"Stop",videoDetection:"Real-time Video Detection",startCamera:"Start Camera",stopCamera:"Stop Camera",toggleDrawing:"Toggle Drawing",detectionDataOutput:"Detection Data Output",face:"Face",hand:"Hand",pose:"Pose",coordinateOutput:"Coordinate Output:",noData:"No Data",quickActions:"Quick Actions",homePosition:"Home Position",enableMotors:"Enable Motors",disableMotors:"Disable Motors",emergencyStop:"Emergency Stop",messageLog:"Message Log",clear:"Clear",export:"Export",programStructure:"Program Structure",waitingBlocks:"Waiting for blocks...",usageInstructions:"💡 Usage Instructions:",instruction1:'1. Drag "🚀 Program Start" block to workspace',instruction2:"2. Connect other blocks below the program start block",instruction3:"3. Only connected blocks will execute in sequence",generatedCode:"Generated Code",copy:"Copy",format:"Format",exportCode:"Export",dragBlocksToGenerate:"// Drag blocks to generate code",run:"Run",pause:"Pause",stop:"Stop",reset:"Reset",save:"Save",load:"Load",helpInfo:"Help Information",basicOperations:"Basic Operations",basicOp1:"Drag blocks from left toolbox to workspace",basicOp2:"Connect blocks to build program",basicOp3:'Click "Run" button to execute program',connectionMethods:"Connection Methods",connectionSerial:"Serial: Direct USB connection to arm",connectionWifi:"WiFi: Connect via WiFi network",safetyTips:"Safety Tips",safetyTip1:"Ensure safety around arm before running program",safetyTip2:'Click "Stop" button in emergency',safetyTip3:'Remember to "Reset" arm after program ends',programStart:"Program Start",programStartTooltip:"The starting point of the program, only code connected to this block will execute",programStartComment:"Program entry point: Start execution from here\n• Only one program start block allowed\n• Must connect other blocks to execute\n• Loose blocks will not execute",demoBasicMovement:"Example 1: Basic Movement",demoBasicMovementTooltip:"Demonstrate basic arm movement functions: enable motor→set speed→move joints→wait→reset",startDemoBasicMovement:"Starting basic movement demonstration...",motorEnabled:"Motor enabled",speedSetTo:"Movement speed set to",jointsMovedToInitialPos:"Joints moved to initial position",jointMovedTo:"Joint",degree:"moved to",returnedToHomePos:"Returned to home position",demoBasicMovementCompleted:"Basic movement demonstration completed!",demoLoopPick:"Example 2: Loop Grasping",demoLoopPickTooltip:"Demonstrate loop grasping function: repeat 3 times of grasp→move→place→return",startDemoLoopPick:"Starting loop grasping demonstration...",systemInitialized:"System initialized",systemInfo:"System info:",currentJointLoads:"Current joint loads:",setSpeedByLoad:"Set speed by load: ",executeTestAction:"Execute test action",currentAngles:"Current angles",loads:"Loads",demoSensorApplicationCompleted:"Sensor application demonstration completed!",systemInitialization:"System initialization...",device:"Device",version:"Version",performanceTest:"Performance test",testSpeed:"Test speed: ",speed:"Speed",gripperDemo:"Gripper demo",prepareToGripper:"Prepare to gripper",clampObject:"Clamp object",releaseObject:"Release object",demoComprehensiveCompleted:"🎉 Comprehensive application demonstration completed!",startLoop:"Starting loop",movedToPickPos:"Moved to pick position",gripperPickObject:"Gripper picked object",movedToPlacePos:"Moved to place position",gripperReleaseObject:"Gripper released object",demoLoopPickCompleted:"Loop grasping demonstration completed!",demoCoordinateControl:"Example 3: Coordinate Control",demoCoordinateControlTooltip:"Demonstrate spatial coordinate control: draw square in space using inverse kinematics",startDemoCoordinateControl:"Starting coordinate control demonstration...",demoSensorApplication:"Example 4: Sensor Application",demoSensorApplicationTooltip:"Demonstrate sensor application: read joint loads and adjust speed based on loads",startDemoSensorApplication:"Starting sensor application demonstration...",demoComprehensive:"Example 5: Comprehensive Application",demoComprehensiveTooltip:"Demonstrate comprehensive application: combine motion control, sensor reading and vision detection",startDemoComprehensive:"Starting comprehensive application demonstration...",drawingSquare:"Drawing square...",movedToStartPoint:"Moved to start point",movedToPoint1:"Moved to point 1",movedToPoint2:"Moved to point 2",movedToPoint3:"Moved to point 3",returnedToStartPoint:"Returned to start point",coordinateControlCompleted:"Coordinate control demonstration completed!",deviceInfo:"Device Info",deviceGetInfo:"Get Device Code",deviceGetInfoTooltip:"Get 7Bot robotic arm device code",deviceGetVersion:"Get Firmware Version",deviceGetVersionTooltip:"Get 7Bot robotic arm firmware version",deviceGetMac:"Get MAC Address",deviceGetMacTooltip:"Get 7Bot robotic arm MAC address",deviceGetId:"Get Device ID",deviceGetIdTooltip:"Get 7Bot robotic arm device ID",deviceSetId:"Set Device ID",deviceSetIdTooltip:"Set 7Bot robotic arm device ID",deviceGetSystemInfo:"Get System Info",deviceGetSystemInfoTooltip:"Get complete robotic arm system info (device type, version, MAC address, device ID)",motionControl:"Motion Control",motorSetStatus:"Set Joint Status",motorSetStatusTooltip:"Set robotic arm joint status (enable/disable/torque off)",motorStatusEnable:"Enable",motorStatusDisable:"Disable",motorStatusTorqueOff:"Torque Off",motorGetStatus:"Get Motor Status",motorGetStatusTooltip:"Get robotic arm motor status (0=disabled, 1=enabled)",motorSetSpeed:"Set Movement Speed to",motorSetSpeedTooltip:"Set robotic arm movement speed percentage (1-100)",motorSetTime:"Set Movement Time to",motorSetTimeTooltip:"Set robotic arm movement time",milliseconds:"milliseconds",jointSetAngle:"Set Joint",jointSetAngleLabel:"to",repeatLoop:"Repeat",times:"times",ifCondition:"If",elseCondition:"Else",print:"Print",alert:"Alert",log:"Log",angle:"Angle",coordinate:"Coordinate",jointSetAngleTooltip:"Set the angle of the specified joint",joint0:"Joint 0 (Base)",joint1:"Joint 1 (Rear Arm)",joint2:"Joint 2 (Forearm)",joint3:"Joint 3 (Elbow)",joint4:"Joint 4 (Wrist)",joint5:"Joint 5 (Front End)",joint6:"Joint 6 (Gripper)",degrees:"degrees",jointSetAllAngles:"Set All Joint Angles",jointSetAllAnglesTooltip:"Set all joint angles simultaneously",jointGetAngle:"Get Joint",jointGetAngleTooltip:"Get the current angle of a single joint",jointGetAllAngles:"Get All Joint Angles",jointGetAllAnglesTooltip:"Get current angles of all joints",ikSetPosition6:"6-Joint IK Move to Coordinates",ikSetPosition6Tooltip:"Control robotic arm to specified position and direction using 6-joint inverse kinematics",coordinate:"Coordinates",directionVector:"Direction Vector",xAxis:"X",yAxis:"Y",zAxis:"Z",ikSetPosition5:"5-Joint IK Move to Coordinates",ikSetPosition5Tooltip:"Control robotic arm to specified position using 5-joint inverse kinematics",ikSetPosition7:"7-Joint IK Move to Coordinates",ikSetPosition7Tooltip:"Control robotic arm to specified position and dual directions using 7-joint inverse kinematics",directionVector1:"Direction Vector 1",directionVector2:"Direction Vector 2",effector:"Effector",effectorSetType:"Set Effector Type to",effectorSetTypeTooltip:"Set the type of end effector",effectorGripper:"Gripper",effectorSuction:"Suction Cup",effectorPen:"Pen",effectorOther:"Other",gripperSetAngle:"Set Gripper Angle to",gripperSetAngleTooltip:"Set gripper opening angle (15-80 degrees)",gripperQuickAction:"Gripper",gripperQuickActionTooltip:"Quickly open or close the gripper",gripperOpen:"Open",gripperClose:"Close",vacuumSetState:"Suction Cup",vacuumSetStateTooltip:"Set suction cup state",vacuumOn:"Turn On",vacuumOff:"Turn Off",vacuumGetState:"Get Suction Cup State",vacuumGetStateTooltip:"Get current suction cup state (0=off, 1=on)",sensorGetLoad:"Get Joint",sensorGetLoadTooltip:"Get current load of a single joint",sensorGetAllLoads:"Get All Joint Loads",sensorGetAllLoadsTooltip:"Get current loads of all joints",load:"Load",sensorGetOffsets:"Get Joint Offsets",sensorGetOffsetsTooltip:"Get offsets of all joints",sensorSetOffsets:"Set Joint Offsets",sensorSetOffsetsTooltip:"Set offsets of all joints (array of 7 values)",controlWaitMs:"Wait",ms:"ms",controlWaitMsTooltip:"Pause program execution for specified milliseconds",controlWaitS:"Wait",s:"seconds",controlWaitSTooltip:"Pause program execution for specified seconds",controlArmWait:"Arm Wait",controlArmWaitTooltip:"Use arm built-in wait function",debugPrint:"Print",debugPrintTooltip:"Print information in console and log",debugAlert:"Show Alert",debugAlertTooltip:"Show alert dialog",debugLog:"Log",debugLogTooltip:"Record information with specified level in system log",logLevelInfo:"Info",logLevelSuccess:"Success",logLevelWarning:"Warning",logLevelError:"Error",log:"Log",startDetectionLoop:"Start Detection Loop",startDetectionLoopTooltip:"Start infinite loop for detection operations",loopCondition:"Condition",loopConditionTrue:"True",loopConditionFalse:"False",loopConditionTooltip:"Set loop condition to True or False",cameraStart:"Start Camera",cameraStartTooltip:"Start camera for real-time visual detection",cameraStop:"Stop Camera",cameraStopTooltip:"Stop camera and visual detection",visionDetect:"Detect",visionDetectTooltip:"Perform specified type of visual detection",detectionTypeFace:"Face",detectionTypeHand:"Hand",detectionTypePose:"Pose",getFaceCoordinate:"Get face",getFaceCoordinateTarget:"target's",getFaceCoordinatePoint:"point's",coordinateX:"X",coordinateY:"Y",coordinateZ:"Z",coordinate:"Coordinate",colon:":",getFaceCoordinateTooltip:"Get coordinate of specified point on specified face target",getHandCoordinate:"Get hand",getHandCoordinateTarget:"target's",getHandCoordinatePoint:"point's",getHandCoordinateTooltip:"Get coordinate of specified point on specified hand target",getPoseCoordinate:"Get pose",getPoseCoordinateTarget:"target's",getPoseCoordinatePoint:"point's",getPoseCoordinateTooltip:"Get pose landmark coordinate (0-nose, 11-12 shoulders, 13-14 elbows, 15-16 wrists, 23-24 hips, 25-26 knees, 27-28 ankles)",outputCoordinates:"Output coordinates",outputX:"X",outputY:"Y",outputLabel:"Label",outputCoordinatesTooltip:"Output coordinate data to real-time video detection panel",statusReading:"Status Reading",programControl:"Program Control",infoOutput:"Info Output",mathOperations:"Math Operations",visionDetection:"Vision Detection",motionExamples:"Motion Examples",visionExamples:"Vision Examples",deviceStatusLabel:"Device Status:",deviceIdLabel:"Device ID:",firmwareVersionLabel:"Firmware Version:",runningStatusLabel:"Running Status:",statusOnline:"Online",statusOffline:"Offline",statusStop:"Stop",detectionTypeFaces:"Face",detectionTypeHands:"Hand",detectionTypePose:"Pose",coordinateX:"X",coordinateY:"Y",coordinateLabel:"Coordinate",faceFollowControl:"👤 Example 1: Face Follow Control",poseFollowControl:"🧍 Example 2: Pose Follow Control",handFollowControl:"✋ Example 3: Hand Follow Control",systemInitComplete:"System initialization complete",toolboxCategoriesOptimized:"Toolbox categories optimized",serialConnection:"Serial Connection",wifiConnection:"WiFi Connection",switchTo:"Switch to",connectionMode:"connection mode",connecting:"Connecting...",connected:"Connected",disconnected:"Disconnected",connectionFailed:"Connection failed",disconnectFailed:"Disconnect failed",pleaseEnterIpOrMac:"IP or 4-digit MAC address",willConnectTo:"Will connect to",macConnectionTip:"Tip: MAC address connection requires mDNS service support",deviceInfoUpdated:"Device information updated",deviceInfoUpdateFailed:"Failed to read complete information",readingDeviceInfo:"Reading device information...",deviceInfoUpdateStarted:"Device info update started",deviceInfoUpdateStopped:"Device info update stopped",notConnected:"Not Connected",connectingStatus:"Connecting...",connectedStatus:"Connected",disconnectedStatus:"Disconnected",error:"Error",success:"Success",warning:"Warning",info:"Info",operationFailed:"Operation failed",operationSuccess:"Operation successful"}},this.init()}init(){const e=localStorage.getItem("blockly-language");e&&this.translations[e]&&(this.currentLanguage=e),this.applyLanguage(this.currentLanguage)}toggleLanguage(){const e="zh"===this.currentLanguage?"en":"zh";this.setLanguage(e)}setLanguage(e){this.translations[e]?(this.currentLanguage=e,localStorage.setItem("blockly-language",e),this.applyLanguage(e),this.updateLanguageButton()):console.warn(`Language ${e} not supported`)}applyLanguage(e){const t=this.translations[e];document.title=t.pageTitle,this.updateElementText(".logo span",t.pageTitle),this.updateElementText('#connection-mode option[value="serial"]',t.serialPort),this.updateElementText('#connection-mode option[value="websocket"]',t.wifi);const o=document.getElementById("websocket-ip");o&&(o.placeholder=t.pleaseEnterIpOrMac);const n=document.querySelector("#serial-input .serial-info");n&&(n.textContent=t.serialConnectionTip),this.updateButtonText("#connect-btn",t.connect),this.updateButtonText("#run-btn",t.run),this.updateButtonText("#pause-btn",t.pause),this.updateButtonText("#stop-btn",t.stop),this.updateButtonText("#reset-btn",t.reset),this.updateButtonText("#save-btn",t.save),this.updateButtonText("#load-btn",t.load),this.updateElementText(".panel-section:has(#arm-status-content) .panel-header span",t.armStatus),this.updateElementText(".panel-section:has(#video-detection-content) .panel-header span",t.videoDetection),this.updateElementText(".panel-section:has(#quick-actions-content) .panel-header span",t.quickActions),this.updateElementText(".panel-section:has(#message-log-content) .panel-header span",t.messageLog),this.updateElementText(".panel-section:has(#program-structure-content) .panel-header span",t.programStructure),this.updateElementText(".panel-section:has(#code-preview-content) .panel-header span",t.generatedCode),this.updateElementText(".panel-section:has(#help-content) .panel-header span",t.helpInfo),setTimeout(()=>{this.updateElementText(".panel-section:has(#arm-status-content) .panel-header span",t.armStatus),this.updateElementText(".panel-section:has(#video-detection-content) .panel-header span",t.videoDetection),this.updateElementText(".panel-section:has(#quick-actions-content) .panel-header span",t.quickActions),this.updateElementText(".panel-section:has(#message-log-content) .panel-header span",t.messageLog),this.updateElementText(".panel-section:has(#program-structure-content) .panel-header span",t.programStructure),this.updateElementText(".panel-section:has(#code-preview-content) .panel-header span",t.generatedCode),this.updateElementText(".panel-section:has(#help-content) .panel-header span",t.helpInfo)},100),this.updateStatusLabels(t),this.updateStatusValues(t),this.updateButtonText("#start-camera",t.startCamera),this.updateButtonText("#stop-camera",t.stopCamera),this.updateButtonText("#toggle-drawing",t.toggleDrawing),this.updateButtonText("#home-position",t.homePosition),this.updateButtonText("#enable-motors",t.enableMotors),this.updateButtonText("#disable-motors",t.disableMotors),this.updateButtonText("#emergency-stop",t.emergencyStop),this.updateButtonText("#clear-log-btn",t.clear),this.updateButtonText("#export-log-btn",t.export),this.updateButtonText("#copy-code-btn",t.copy),this.updateButtonText("#format-code-btn",t.format),this.updateButtonText("#export-btn",t.exportCode),this.updateDetectionDataOutput(t),this.updateProgramStructure(t),this.updateCodeGeneration(t),this.updateConnectionStatus(t),this.updateHelpContent(t),this.updateToolboxCategories(t),this.updateToolboxExampleLabels(t),this.updateMotionControlBlocks(t),console.log(`Language switched to: ${e}`)}updateToolboxExampleLabels(e){const t=document.querySelector('#toolbox category[name="运动案例"]');if(t){t.querySelectorAll("label").forEach(e=>{const t=e.getAttribute("text");"📦 案例1:基础运动演示"===t?e.setAttribute("text","📦 Example 1: Basic Movement"):"🔄 案例2:循环抓取演示"===t?e.setAttribute("text","🔄 Example 2: Loop Grasping"):"📐 案例3:坐标控制演示"===t?e.setAttribute("text","📐 Example 3: Coordinate Control"):"🔍 案例4:传感器应用演示"===t?e.setAttribute("text","🔍 Example 4: Sensor Application"):"🎯 案例5:综合应用演示"===t&&e.setAttribute("text","🎯 Example 5: Comprehensive Application")})}const o=document.querySelector('#toolbox category[name="视觉案例"]');if(o){o.querySelectorAll("label").forEach(e=>{const t=e.getAttribute("text");"👤 案例1:人脸跟随控制"===t?e.setAttribute("text","👤 Example 1: Face Follow Control"):"🧍 案例2:姿态跟随控制"===t?e.setAttribute("text","🧍 Example 2: Pose Follow Control"):"✋ 案例3:人手跟随控制"===t&&e.setAttribute("text","✋ Example 3: Hand Follow Control")})}}updateMotionControlBlocks(e){setTimeout(()=>{try{document.querySelectorAll('block[type="joint_set_angle"]').forEach(t=>{const o=t.querySelector("field");o&&o.textContent.includes("角度为")&&(o.textContent=e.jointSetAngleLabel)})}catch(e){console.warn("Failed to update motion control blocks:",e)}},1e3)}updateToolboxCategories(e){setTimeout(()=>{try{const t=document.getElementById("toolbox");if(t){t.querySelectorAll("category, block").forEach(t=>{if(!t.getAttribute("data-original-name")){const e=t.getAttribute("name");t.setAttribute("data-original-name",e)}const o=t.getAttribute("data-original-name");"程序开始"===o?t.setAttribute("name",e.programStart):"设备信息"===o?t.setAttribute("name",e.deviceInfo):"运动控制"===o?t.setAttribute("name",e.motionControl):"执行前端"===o?t.setAttribute("name",e.effector):"状态读取"===o?t.setAttribute("name",e.statusReading):"程序控制"===o?t.setAttribute("name",e.programControl):"信息输出"===o?t.setAttribute("name",e.infoOutput):"数学运算"===o?t.setAttribute("name",e.mathOperations):"视觉检测"===o?t.setAttribute("name",e.visionDetection):"运动案例"===o?t.setAttribute("name",e.motionExamples):"视觉案例"===o?t.setAttribute("name",e.visionExamples):"循环"===o?t.setAttribute("name",e.repeatLoop):"次"===o?t.setAttribute("name",e.times):"如果"===o?t.setAttribute("name",e.ifCondition):"否则"===o?t.setAttribute("name",e.elseCondition):"打印"===o?t.setAttribute("name",e.print):"提示"===o?t.setAttribute("name",e.alert):"日志"===o?t.setAttribute("name",e.log):"角度"===o?t.setAttribute("name",e.angle):"坐标"===o?t.setAttribute("name",e.coordinate):"👤 案例1:人脸跟随控制"===o?t.setAttribute("name",e.faceFollowControl):"🧍 案例2:姿态跟随控制"===o?t.setAttribute("name",e.poseFollowControl):"✋ 案例3:人手跟随控制"===o?t.setAttribute("name",e.handFollowControl):"📦 案例1:基础运动演示"===o?t.setAttribute("name","📦 "+e.demoBasicMovement):"🔄 案例2:循环抓取演示"===o?t.setAttribute("name","🔄 "+e.demoLoopPick):"📐 案例3:坐标控制演示"===o?t.setAttribute("name","📐 "+e.demoCoordinateControl):"🔍 案例4:传感器应用演示"===o?t.setAttribute("name","🔍 "+e.demoSensorApplication):"🎯 案例5:综合应用演示"===o&&t.setAttribute("name","🎯 "+e.demoComprehensive)}),window.Blockly&&window.Blockly.getMainWorkspace()&&window.Blockly.getMainWorkspace().updateToolbox(window.Blockly.Xml.domToText(t))}}catch(e){console.warn("Failed to update toolbox categories:",e)}},1e3)}updateElementText(e,t){const o=document.querySelector(e);o&&(o.textContent=t)}updateButtonText(e,t){const o=document.querySelector(e);if(o){const e=o.querySelector("i");e?o.innerHTML=e.outerHTML+" "+t:o.textContent=t}}updateHelpContent(e){const t=document.getElementById("help-content");if(t){const o=t.querySelector(".help-section h4");if(o){o.getAttribute("data-original-title")||o.setAttribute("data-original-title",o.textContent);"基本操作"===o.getAttribute("data-original-title")&&(o.textContent=e.basicOperations)}const n=t.querySelectorAll(".help-section h4")[1];if(n){n.getAttribute("data-original-title")||n.setAttribute("data-original-title",n.textContent);"连接方式"===n.getAttribute("data-original-title")&&(n.textContent=e.connectionMethods)}const i=t.querySelectorAll(".help-section h4")[2];if(i){i.getAttribute("data-original-title")||i.setAttribute("data-original-title",i.textContent);"安全提示"===i.getAttribute("data-original-title")&&(i.textContent=e.safetyTips)}this.updateHelpContentList(e)}}updateHelpContentList(e){const t=document.getElementById("help-content");if(t){t.querySelectorAll(".help-section").forEach(t=>{const o=t.querySelector("h4");if(o){const n=o.getAttribute("data-original-title")||o.textContent;if("基本操作"===n){const o=t.querySelectorAll("li");o.length>=3&&(o[0].getAttribute("data-original-text")||o[0].setAttribute("data-original-text",o[0].textContent),"从左侧工具箱拖拽积木到工作区"===o[0].getAttribute("data-original-text")&&(o[0].textContent=e.basicOp1),o[1].getAttribute("data-original-text")||o[1].setAttribute("data-original-text",o[1].textContent),"连接积木块来构建程序"===o[1].getAttribute("data-original-text")&&(o[1].textContent=e.basicOp2),o[2].getAttribute("data-original-text")||o[2].setAttribute("data-original-text",o[2].textContent),'点击"运行"按钮执行程序'===o[2].getAttribute("data-original-text")&&(o[2].textContent=e.basicOp3))}else if("连接方式"===n){const o=t.querySelectorAll("li");o.length>=2&&(o[0].getAttribute("data-original-text")||o[0].setAttribute("data-original-text",o[0].textContent),"串口连接: 直接USB连接机械臂"===o[0].getAttribute("data-original-text")&&(o[0].textContent=e.connectionSerial),o[1].getAttribute("data-original-text")||o[1].setAttribute("data-original-text",o[1].textContent),"WiFi连接: 通过WiFi网络连接"===o[1].getAttribute("data-original-text")&&(o[1].textContent=e.connectionWifi))}else if("安全提示"===n){const o=t.querySelectorAll("li");o.length>=3&&(o[0].getAttribute("data-original-text")||o[0].setAttribute("data-original-text",o[0].textContent),"运行程序前确保机械臂周围安全"===o[0].getAttribute("data-original-text")&&(o[0].textContent=e.safetyTip1),o[1].getAttribute("data-original-text")||o[1].setAttribute("data-original-text",o[1].textContent),'紧急情况下点击"停止"按钮'===o[1].getAttribute("data-original-text")&&(o[1].textContent=e.safetyTip2),o[2].getAttribute("data-original-text")||o[2].setAttribute("data-original-text",o[2].textContent),'程序结束后记得"复位"机械臂'===o[2].getAttribute("data-original-text")&&(o[2].textContent=e.safetyTip3))}}})}}updateStatusLabels(e){document.querySelectorAll("#arm-status-content .status-item label").forEach(t=>{const o=t.textContent;o.includes("设备状态:")?t.textContent=e.deviceStatusLabel:o.includes("设备ID:")?t.textContent=e.deviceIdLabel:o.includes("固件版本:")?t.textContent=e.firmwareVersionLabel:o.includes("运行状态:")&&(t.textContent=e.runningStatusLabel)})}updateStatusValues(e){const t=document.getElementById("device-status"),o=document.getElementById("running-status");t&&("在线"===t.textContent?t.textContent=e.statusOnline:"离线"===t.textContent&&(t.textContent=e.statusOffline)),o&&"停止"===o.textContent&&(o.textContent=e.statusStop)}updateDetectionDataOutput(e){const t=document.querySelector("#detection-data-output h4");t&&(t.textContent=e.detectionDataOutput);const o=document.getElementById("face-detection-item"),n=document.getElementById("hand-detection-item"),i=document.getElementById("pose-detection-item");if(o){const t=o.querySelector(".data-label");t&&(t.textContent=e.face)}if(o){const t=o.querySelector(".data-label");t&&(t.textContent=e.face)}if(n){const t=n.querySelector(".data-label");t&&(t.textContent=e.hand)}if(i){const t=i.querySelector(".data-label");t&&(t.textContent=e.pose)}const s=document.querySelector("#coordinate-output").previousElementSibling;s&&s.textContent.includes("坐标输出:")&&(s.textContent=e.coordinateOutput)}updateProgramStructure(e){const t=document.getElementById("program-status");if(t){const o=t.querySelector("span");o&&o.textContent.includes("等待积木块...")&&(o.textContent=e.waitingBlocks)}const o=document.querySelector("#program-structure-content .help-section");if(o){const t=o.querySelector("strong");t&&t.textContent.includes("💡 使用说明:")&&(t.textContent=e.usageInstructions);const n=o.querySelectorAll("li");n.length>=3&&(n[0].textContent.includes('拖拽"🚀 程序开始"积木块到工作区')&&(n[0].textContent=e.instruction1),n[1].textContent.includes("将其他积木块连接到程序开始积木块下方")&&(n[1].textContent=e.instruction2),n[2].textContent.includes("只有连接的积木块才会按顺序执行")&&(n[2].textContent=e.instruction3))}}updateCodeGeneration(e){const t=document.getElementById("generated-code");if(t){const o=t.textContent;o.includes("// 拖拽积木块来生成代码")&&(t.textContent=o.replace("// 拖拽积木块来生成代码",e.dragBlocksToGenerate))}}updateConnectionStatus(e){const t=document.getElementById("status-text");if(t){const o=t.textContent;"未连接"===o?t.textContent=e.notConnected:"连接中..."===o?t.textContent=e.connectingStatus:"已连接"===o?t.textContent=e.connectedStatus:"已断开连接"===o&&(t.textContent=e.disconnectedStatus)}}updateLanguageButton(){const e=document.getElementById("language-toggle-btn");if(e){e.querySelector("i");const t="zh"===this.currentLanguage?"中":"En";e.innerHTML=`<i class="fas fa-globe"></i> ${t}`,e.classList.toggle("active","zh"===this.currentLanguage)}}getText(e){return this.translations[this.currentLanguage][e]||e}getCurrentLanguage(){return this.currentLanguage}}window.i18nManager=new I18nManager;class MediaPipeLoader{constructor(){this.loadPromises=new Map,this.loadedLibraries=new Set,this.maxRetries=3,this.timeout=15e3}async loadScript(e,t){if(this.loadedLibraries.has(t))return Promise.resolve();if(this.loadPromises.has(t))return this.loadPromises.get(t);const o=this.loadScriptWithRetry(e,t);this.loadPromises.set(t,o);try{await o,this.loadedLibraries.add(t)}catch(e){throw this.loadPromises.delete(t),e}return o}async loadScriptWithRetry(e,t,o=0){try{return console.log(`加载MediaPipe库: ${t} 从 ${e} (尝试 ${o+1}/${this.maxRetries})`),new Promise((o,n)=>{const i=document.createElement("script");i.src=e,i.crossOrigin="anonymous",i.async=!0;const s=setTimeout(()=>{i.remove(),n(new Error(`${t} 加载超时`))},this.timeout);i.onload=()=>{clearTimeout(s),void 0!==window[t]?(console.log(`${t} 库加载成功`),o()):(console.warn(`${t} 库加载但全局变量不可用`),setTimeout(()=>{void 0!==window[t]?(console.log(`${t} 库延迟可用`),o()):n(new Error(`${t} 全局变量不可用`))},1e3))},i.onerror=e=>{clearTimeout(s),i.remove(),n(new Error(`${t} 加载失败: ${e.message||"Network error"}`))},document.head.appendChild(i)})}catch(n){if(o<this.maxRetries-1)return console.warn(`${t} 加载失败,2000ms后重试:`,n.message),await new Promise(e=>setTimeout(e,2e3)),this.loadScriptWithRetry(e,t,o+1);throw console.error(`${t} 加载失败,已达到最大重试次数:`,n.message),n}}async loadAllMediaPipeLibraries(){console.log("开始加载MediaPipe库..."),this.checkWebGLSupport()||console.warn("WebGL不受支持,MediaPipe库可能无法正常工作");const e=[{url:"https://cdn.jsdelivr.net/npm/@mediapipe/camera_utils@0.3/camera_utils.js",global:"Camera"},{url:"https://cdn.jsdelivr.net/npm/@mediapipe/control_utils@0.6/control_utils.js",global:"ControlPanel"},{url:"https://cdn.jsdelivr.net/npm/@mediapipe/drawing_utils@0.3/drawing_utils.js",global:"drawConnectors"},{url:"https://cdn.jsdelivr.net/npm/@mediapipe/face_detection@0.4/face_detection.js",global:"FaceDetection"},{url:"https://cdn.jsdelivr.net/npm/@mediapipe/hands@0.4/hands.js",global:"Hands"},{url:"https://cdn.jsdelivr.net/npm/@mediapipe/pose@0.5/pose.js",global:"Pose"}],t=(await Promise.allSettled(e.map(async e=>{try{return await this.loadScript(e.url,e.global),{name:e.global,success:!0}}catch(t){return console.error(`${e.global} 库加载失败:`,t.message),{name:e.global,success:!1,error:t.message}}}))).filter(e=>e.value&&e.value.success).length,o=e.length;if(console.log(`MediaPipe库加载完成: ${t}/${o} 个库成功加载`),0===t)throw new Error("所有MediaPipe库加载失败");return t===o}checkWebGLSupport(){try{const e=document.createElement("canvas"),t=e.getContext("webgl")||e.getContext("experimental-webgl");if(!t)return console.warn("WebGL不受支持"),!1;try{const e=t.createShader(t.VERTEX_SHADER);if(!e)return console.warn("WebGL shader创建失败"),!1;t.deleteShader(e)}catch(e){return console.warn("WebGL功能测试失败:",e),!1}return console.log("WebGL支持检查通过"),!0}catch(e){return console.error("WebGL支持检查失败:",e),!1}}getLoadedLibraries(){return Array.from(this.loadedLibraries)}isLibraryLoaded(e){return this.loadedLibraries.has(e)}}const mediaPipeLoader=new MediaPipeLoader;function getText(e){return window.i18nManager?window.i18nManager.getText(e):e}document.addEventListener("DOMContentLoaded",async()=>{try{await mediaPipeLoader.loadAllMediaPipeLibraries()}catch(e){console.error("MediaPipe库自动加载失败:",e)}}),window.mediaPipeLoader=mediaPipeLoader,document.addEventListener("DOMContentLoaded",function(){"undefined"!=typeof Blockly?(Blockly.Blocks.program_start={init:function(){this.jsonInit({message0:"🚀 "+getText("programStart"),nextStatement:null,colour:"#FF6B35",tooltip:getText("programStartTooltip"),helpUrl:""}),this.setStyle("logic_blocks"),this.setCommentText(getText("programStartComment"))}},Blockly.JavaScript.program_start=function(e){return""},Blockly.Blocks.demo_basic_movement={init:function(){this.jsonInit({message0:"📦 "+getText("demoBasicMovement"),previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("demoBasicMovementTooltip"),helpUrl:""})}},Blockly.JavaScript.demo_basic_movement=function(e){var t="// "+getText("demoBasicMovement")+"\n";return t+='console.log("'+getText("startDemoBasicMovement")+'");\n',t+="await armController.setStatus(1);\n",t+='console.log("'+getText("motorEnabled")+'");\n',t+="await armController.setSpeed(60);\n",t+='console.log("'+getText("speedSetTo")+' 60%");\n',t+="await armController.setAngles([90, 90, 90, 90, 90, 90, 50]);\n",t+='console.log("'+getText("jointsMovedToInitialPos")+'");\n',t+="await sleep(2000);\n",t+="await armController.setAngle(0, 45);\n",t+='console.log("'+getText("jointMovedTo")+" 0 "+getText("degree")+' 45");\n',t+="await sleep(1000);\n",t+="await armController.setAngle(1, 120);\n",t+='console.log("'+getText("jointMovedTo")+" 1 "+getText("degree")+' 120");\n',t+="await sleep(1000);\n",t+="await armController.setAngle(2, 60);\n",t+='console.log("'+getText("jointMovedTo")+" 2 "+getText("degree")+' 60");\n',t+="await sleep(1000);\n",t+="await armController.setAngles([90, 90, 90, 90, 90, 90, 50]);\n",t+='console.log("'+getText("returnedToHomePos")+'");\n',t+='console.log("'+getText("demoBasicMovementCompleted")+'");\n'},Blockly.Blocks.demo_loop_pick={init:function(){this.jsonInit({message0:"🔄 "+getText("demoLoopPick"),previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("demoLoopPickTooltip"),helpUrl:""})}},Blockly.JavaScript.demo_loop_pick=function(e){var t="// "+getText("demoLoopPick")+"\n";return t+='console.log("'+getText("startDemoLoopPick")+'");\n',t+="await armController.setStatus(1);\n",t+="await armController.setSpeed(50);\n",t+="await armController.setEffectorType(1);\n",t+='console.log("'+getText("systemInitialized")+'");\n',t+="var pickPos = [120, 60, 30, 90, 90, 90, 20];\n",t+="var placePos = [60, 120, 60, 90, 90, 90, 50];\n",t+="var homePos = [90, 90, 90, 90, 90, 90, 50];\n",t+="for (var i = 0; i < 3; i++) {\n",t+=' console.log("'+getText("startLoop")+' " + (i + 1));\n',t+=" await armController.setAngles(pickPos);\n",t+=' console.log("'+getText("movedToPickPos")+'");\n',t+=" await sleep(1000);\n",t+=" await armController.setGripperAngle(20);\n",t+=' console.log("'+getText("gripperPickObject")+'");\n',t+=" await sleep(500);\n",t+=" await armController.setAngles(placePos);\n",t+=' console.log("'+getText("movedToPlacePos")+'");\n',t+=" await sleep(1000);\n",t+=" await armController.setGripperAngle(50);\n",t+=' console.log("'+getText("gripperReleaseObject")+'");\n',t+=" await sleep(500);\n",t+=" await armController.setAngles(homePos);\n",t+=' console.log("'+getText("returnedToHomePos")+'");\n',t+=" await sleep(1000);\n",t+="}\n",t+='console.log("'+getText("demoLoopPickCompleted")+'");\n'},Blockly.Blocks.demo_coordinate_control={init:function(){this.jsonInit({message0:"📐 "+getText("demoCoordinateControl"),previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("demoCoordinateControlTooltip"),helpUrl:""})}},Blockly.JavaScript.demo_coordinate_control=function(e){var t="// "+getText("demoCoordinateControl")+"\n";return t+='console.log("'+getText("startDemoCoordinateControl")+'");\n',t+="await armController.setStatus(1);\n",t+="await armController.setSpeed(40);\n",t+='console.log("'+getText("systemInitialized")+'");\n',t+='console.log("'+getText("drawingSquare")+'");\n',t+="await armController.setPosition(200, 0, 150);\n",t+='console.log("'+getText("movedToStartPoint")+'");\n',t+="await sleep(1000);\n",t+="await armController.setPosition(200, 100, 150);\n",t+='console.log("'+getText("movedToPoint1")+'");\n',t+="await sleep(1500);\n",t+="await armController.setPosition(100, 100, 150);\n",t+='console.log("'+getText("movedToPoint2")+'");\n',t+="await sleep(1500);\n",t+="await armController.setPosition(100, 0, 150);\n",t+='console.log("'+getText("movedToPoint3")+'");\n',t+="await sleep(1500);\n",t+="await armController.setPosition(200, 0, 150);\n",t+='console.log("'+getText("returnedToStartPoint")+'");\n',t+="await sleep(1500);\n",t+="await armController.setAngles([90, 90, 90, 90, 90, 90, 50]);\n",t+='console.log("'+getText("coordinateControlCompleted")+'");\n'},Blockly.Blocks.demo_sensor_application={init:function(){this.jsonInit({message0:"🔍 "+getText("demoSensorApplication"),previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("demoSensorApplicationTooltip"),helpUrl:""})}},Blockly.JavaScript.demo_sensor_application=function(e){var t="// "+getText("demoSensorApplication")+"\n";return t+='console.log("'+getText("startDemoSensorApplication")+'");\n',t+="await armController.setStatus(1);\n",t+='console.log("'+getText("systemInitialized")+'");\n',t+="var systemInfo = await armController.getSystemInfo();\n",t+='console.log("'+getText("systemInfo")+':", JSON.stringify(systemInfo, null, 2));\n',t+="var loads = await armController.getAllLoads();\n",t+='console.log("'+getText("currentJointLoads")+':", loads);\n',t+="var maxLoad = Math.max.apply(Math, loads.map(function(x) { return Math.abs(x); }));\n",t+="var adaptiveSpeed = maxLoad > 80 ? 20 : (maxLoad > 50 ? 40 : 60);\n",t+='console.log("'+getText("setSpeedByLoad")+': " + adaptiveSpeed + "%");\n',t+="await armController.setSpeed(adaptiveSpeed);\n",t+="var testPos = [[90,90,90,90,90,90,50],[120,60,120,90,90,90,50],[60,120,60,90,90,90,50]];\n",t+="for (var i = 0; i < testPos.length; i++) {\n",t+=' console.log("'+getText("executeTestAction")+' " + (i + 1));\n',t+=" await armController.setAngles(testPos[i]);\n",t+=" await sleep(1000);\n",t+=" var angles = await armController.getAllAngles();\n",t+=" var currentLoads = await armController.getAllLoads();\n",t+=' console.log("'+getText("currentAngles")+':", angles, "'+getText("loads")+':", currentLoads);\n',t+=" await sleep(500);\n",t+="}\n",t+='console.log("'+getText("demoSensorApplicationCompleted")+'");\n'},Blockly.Blocks.demo_comprehensive={init:function(){this.jsonInit({message0:"🎯 "+getText("demoComprehensive"),previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("demoComprehensiveTooltip"),helpUrl:""})}},Blockly.JavaScript.demo_comprehensive=function(e){var t="// "+getText("demoComprehensive")+"\n";return t+='console.log("'+getText("startDemoComprehensive")+'");\n',t+='console.log("=== '+getText("systemInitialization")+' ===");\n',t+="await armController.setStatus(1);\n",t+="var deviceInfo = await armController.getDeviceCode();\n",t+="var version = await armController.getVersion();\n",t+='console.log("'+getText("device")+': " + deviceInfo + ", '+getText("version")+': " + version);\n',t+='console.log("=== '+getText("performanceTest")+' ===");\n',t+="var speeds = [30, 50, 70];\n",t+="for (var s = 0; s < speeds.length; s++) {\n",t+=' console.log("'+getText("testSpeed")+': " + speeds[s] + "%");\n',t+=" await armController.setSpeed(speeds[s]);\n",t+=" await armController.setAngles([90,90,90,90,90,90,50]);\n",t+=" await sleep(500);\n",t+=" await armController.setAngles([120,60,120,90,90,90,50]);\n",t+=" await sleep(500);\n",t+=" var loads = await armController.getAllLoads();\n",t+=' console.log("'+getText("speed")+speeds[s]+"%"+getText("load")+':", loads);\n',t+="}\n",t+='console.log("=== '+getText("gripperDemo")+' ===");\n',t+="await armController.setEffectorType(1);\n",t+="await armController.setPosition(150, 50, 100);\n",t+="await armController.setGripperAngle(50);\n",t+='console.log("'+getText("prepareToGripper")+'");\n',t+="await sleep(1000);\n",t+="await armController.setPosition(150, 50, 80);\n",t+="await armController.setGripperAngle(25);\n",t+='console.log("'+getText("clampObject")+'");\n',t+="await sleep(1000);\n",t+="await armController.setPosition(100, 100, 100);\n",t+="await armController.setGripperAngle(50);\n",t+='console.log("'+getText("releaseObject")+'");\n',t+="await sleep(1000);\n",t+="await armController.setAngles([90,90,90,90,90,90,50]);\n",t+='console.log("🎉 '+getText("demoComprehensiveCompleted")+'");\n'},Blockly.Blocks.device_get_info={init:function(){this.jsonInit({message0:getText("deviceGetInfo"),output:"String",colour:"#2196F3",tooltip:getText("deviceGetInfoTooltip"),helpUrl:""})}},Blockly.JavaScript.device_get_info=function(e){return["String(await armController.getDeviceCode())",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.device_get_version={init:function(){this.jsonInit({message0:getText("deviceGetVersion"),output:"String",colour:"#2196F3",tooltip:getText("deviceGetVersionTooltip"),helpUrl:""})}},Blockly.JavaScript.device_get_version=function(e){return["String(await armController.getVersion())",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.device_get_mac={init:function(){this.jsonInit({message0:getText("deviceGetMac"),output:"String",colour:"#2196F3",tooltip:getText("deviceGetMacTooltip"),helpUrl:""})}},Blockly.JavaScript.device_get_mac=function(e){return["await armController.getMAC()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.device_get_id={init:function(){this.jsonInit({message0:getText("deviceGetId"),output:"Number",colour:"#2196F3",tooltip:getText("deviceGetIdTooltip"),helpUrl:""})}},Blockly.JavaScript.device_get_id=function(e){return["String(await armController.getID())",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.device_set_id={init:function(){this.jsonInit({message0:getText("deviceSetId")+" %1",args0:[{type:"input_value",name:"ID",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#2196F3",tooltip:getText("deviceSetIdTooltip"),helpUrl:""})}},Blockly.JavaScript.device_set_id=function(e){return`await armController.setID(${Blockly.JavaScript.valueToCode(e,"ID",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.device_get_system_info={init:function(){this.jsonInit({message0:getText("deviceGetSystemInfo"),output:"String",colour:"#2196F3",tooltip:getText("deviceGetSystemInfoTooltip"),helpUrl:""})}},Blockly.JavaScript.device_get_system_info=function(e){return["JSON.stringify(await armController.getSystemInfo(), null, 2)",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.motor_set_status={init:function(){this.jsonInit({message0:getText("motorSetStatus")+" %1",args0:[{type:"field_dropdown",name:"STATUS",options:[[getText("motorStatusEnable"),"1"],[getText("motorStatusDisable"),"0"],[getText("motorStatusTorqueOff"),"2"]]}],previousStatement:null,nextStatement:null,colour:"#4CAF50",tooltip:getText("motorSetStatusTooltip"),helpUrl:""})}},Blockly.JavaScript.motor_set_status=function(e){var t=e.getFieldValue("STATUS");if("2"===t)var o="await armController.setStatus(0);\n// 无力状态:关节处于完全放松状态\n";else o=`await armController.setStatus(${t});\n`;return o},Blockly.Blocks.motor_get_status={init:function(){this.jsonInit({message0:getText("motorGetStatus"),output:"Number",colour:"#4CAF50",tooltip:getText("motorGetStatusTooltip"),helpUrl:""})}},Blockly.JavaScript.motor_get_status=function(e){return["await armController.getMotorStatus()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.motor_set_speed={init:function(){this.jsonInit({message0:getText("motorSetSpeed")+" %1%",args0:[{type:"input_value",name:"SPEED",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#4CAF50",tooltip:getText("motorSetSpeedTooltip"),helpUrl:""})}},Blockly.JavaScript.motor_set_speed=function(e){return`await armController.setSpeed(${Blockly.JavaScript.valueToCode(e,"SPEED",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.motor_set_time={init:function(){this.jsonInit({message0:getText("motorSetTime")+" %1 "+getText("milliseconds"),args0:[{type:"input_value",name:"TIME",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#4CAF50",tooltip:getText("motorSetTimeTooltip"),helpUrl:""})}},Blockly.JavaScript.motor_set_time=function(e){return`await armController.setTime(${Blockly.JavaScript.valueToCode(e,"TIME",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.joint_set_angle={init:function(){this.jsonInit({message0:getText("jointSetAngle")+" %1 角度为 %2 "+getText("degrees"),args0:[{type:"field_dropdown",name:"ID",options:[[getText("joint0"),"0"],[getText("joint1"),"1"],[getText("joint2"),"2"],[getText("joint3"),"3"],[getText("joint4"),"4"],[getText("joint5"),"5"],[getText("joint6"),"6"]]},{type:"input_value",name:"ANGLE",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#FF9800",tooltip:getText("jointSetAngleTooltip"),helpUrl:""})}},Blockly.JavaScript.joint_set_angle=function(e){return`await armController.setAngle(${e.getFieldValue("ID")}, ${Blockly.JavaScript.valueToCode(e,"ANGLE",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.joint_set_all_angles={init:function(){this.jsonInit({message0:getText("jointSetAllAngles")+"%1"+getText("joint0")+": %2 "+getText("joint1")+": %3 "+getText("joint2")+": %4%5"+getText("joint3")+": %6 "+getText("joint4")+": %7 "+getText("joint5")+": %8%9"+getText("joint6")+": %10",args0:[{type:"input_dummy"},{type:"input_value",name:"ANGLE0",check:"Number"},{type:"input_value",name:"ANGLE1",check:"Number"},{type:"input_value",name:"ANGLE2",check:"Number"},{type:"input_dummy"},{type:"input_value",name:"ANGLE3",check:"Number"},{type:"input_value",name:"ANGLE4",check:"Number"},{type:"input_value",name:"ANGLE5",check:"Number"},{type:"input_dummy"},{type:"input_value",name:"ANGLE6",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#FF9800",tooltip:getText("jointSetAllAnglesTooltip"),helpUrl:""})}},Blockly.JavaScript.joint_set_all_angles=function(e){for(var t=[],o=0;o<=6;o++){var n=Blockly.JavaScript.valueToCode(e,"ANGLE"+o,Blockly.JavaScript.ORDER_ATOMIC);t.push(n||"90")}return`await armController.setAngles([${t.join(", ")}]);\n`},Blockly.Blocks.joint_get_angle={init:function(){this.jsonInit({message0:getText("jointGetAngle")+" %1 "+getText("degrees"),args0:[{type:"field_dropdown",name:"ID",options:[[getText("joint0"),"0"],[getText("joint1"),"1"],[getText("joint2"),"2"],[getText("joint3"),"3"],[getText("joint4"),"4"],[getText("joint5"),"5"],[getText("joint6"),"6"]]}],output:"Number",colour:"#FF9800",tooltip:getText("jointGetAngleTooltip"),helpUrl:""})}},Blockly.JavaScript.joint_get_angle=function(e){return[`await armController.getAngle(${e.getFieldValue("ID")})`,Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.joint_get_all_angles={init:function(){this.jsonInit({message0:getText("jointGetAllAngles"),output:"Array",colour:"#FF9800",tooltip:getText("jointGetAllAnglesTooltip"),helpUrl:""})}},Blockly.JavaScript.joint_get_all_angles=function(e){return["await armController.getAngles()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.ik_set_position_6={init:function(){this.jsonInit({message0:getText("ikSetPosition6")+"%1"+getText("xAxis")+": %2 "+getText("yAxis")+": %3 "+getText("zAxis")+": %4%5"+getText("directionVector")+" "+getText("xAxis")+": %6 "+getText("yAxis")+": %7 "+getText("zAxis")+": %8",args0:[{type:"input_dummy"},{type:"input_value",name:"X",check:"Number"},{type:"input_value",name:"Y",check:"Number"},{type:"input_value",name:"Z",check:"Number"},{type:"input_dummy"},{type:"input_value",name:"VX",check:"Number"},{type:"input_value",name:"VY",check:"Number"},{type:"input_value",name:"VZ",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("ikSetPosition6Tooltip"),helpUrl:""})}},Blockly.JavaScript.ik_set_position_6=function(e){return`await armController.setIK6([${Blockly.JavaScript.valueToCode(e,"X",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Y",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Z",Blockly.JavaScript.ORDER_ATOMIC)}], [${Blockly.JavaScript.valueToCode(e,"VX",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"VY",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"VZ",Blockly.JavaScript.ORDER_ATOMIC)}]);\n`},Blockly.Blocks.ik_set_position_5={init:function(){this.jsonInit({message0:getText("ikSetPosition5")+" "+getText("xAxis")+": %1 "+getText("yAxis")+": %2 "+getText("zAxis")+": %3",args0:[{type:"input_value",name:"X",check:"Number"},{type:"input_value",name:"Y",check:"Number"},{type:"input_value",name:"Z",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("ikSetPosition5Tooltip"),helpUrl:""})}},Blockly.JavaScript.ik_set_position_5=function(e){return`await armController.setIK5([${Blockly.JavaScript.valueToCode(e,"X",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Y",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Z",Blockly.JavaScript.ORDER_ATOMIC)}]);\n`},Blockly.Blocks.ik_set_position_7={init:function(){this.jsonInit({message0:getText("ikSetPosition7")+"%1"+getText("xAxis")+": %2 "+getText("yAxis")+": %3 "+getText("zAxis")+": %4%5"+getText("directionVector1")+" "+getText("xAxis")+": %6 "+getText("yAxis")+": %7 "+getText("zAxis")+": %8%9"+getText("directionVector2")+" "+getText("xAxis")+": %10 "+getText("yAxis")+": %11 "+getText("zAxis")+": %12",args0:[{type:"input_dummy"},{type:"input_value",name:"X",check:"Number"},{type:"input_value",name:"Y",check:"Number"},{type:"input_value",name:"Z",check:"Number"},{type:"input_dummy"},{type:"input_value",name:"V1X",check:"Number"},{type:"input_value",name:"V1Y",check:"Number"},{type:"input_value",name:"V1Z",check:"Number"},{type:"input_dummy"},{type:"input_value",name:"V2X",check:"Number"},{type:"input_value",name:"V2Y",check:"Number"},{type:"input_value",name:"V2Z",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#9C27B0",tooltip:getText("ikSetPosition7Tooltip"),helpUrl:""})}},Blockly.JavaScript.ik_set_position_7=function(e){return`await armController.setIK7([${Blockly.JavaScript.valueToCode(e,"X",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Y",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"Z",Blockly.JavaScript.ORDER_ATOMIC)}], [${Blockly.JavaScript.valueToCode(e,"V1X",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"V1Y",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"V1Z",Blockly.JavaScript.ORDER_ATOMIC)}], [${Blockly.JavaScript.valueToCode(e,"V2X",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"V2Y",Blockly.JavaScript.ORDER_ATOMIC)}, ${Blockly.JavaScript.valueToCode(e,"V2Z",Blockly.JavaScript.ORDER_ATOMIC)}]);\n`},Blockly.Blocks.effector_set_type={init:function(){this.jsonInit({message0:getText("effectorSetType")+" %1",args0:[{type:"field_dropdown",name:"TYPE",options:[[getText("effectorGripper"),"1"],[getText("effectorSuction"),"2"],[getText("effectorPen"),"3"],[getText("effectorOther"),"0"]]}],previousStatement:null,nextStatement:null,colour:"#F44336",tooltip:getText("effectorSetTypeTooltip"),helpUrl:""})}},Blockly.JavaScript.effector_set_type=function(e){return`await armController.setEffector(${e.getFieldValue("TYPE")});\n`},Blockly.Blocks.gripper_set_angle={init:function(){this.jsonInit({message0:getText("gripperSetAngle")+" %1 "+getText("degrees"),args0:[{type:"input_value",name:"ANGLE",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#F44336",tooltip:getText("gripperSetAngleTooltip"),helpUrl:""})}},Blockly.JavaScript.gripper_set_angle=function(e){return`await armController.setGripper(${Blockly.JavaScript.valueToCode(e,"ANGLE",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.gripper_quick_action={init:function(){this.jsonInit({message0:"%1 "+getText("gripperQuickAction"),args0:[{type:"field_dropdown",name:"ACTION",options:[[getText("gripperOpen"),"open"],[getText("gripperClose"),"close"]]}],previousStatement:null,nextStatement:null,colour:"#F44336",tooltip:getText("gripperQuickActionTooltip"),helpUrl:""})}},Blockly.JavaScript.gripper_quick_action=function(e){if("open"===e.getFieldValue("ACTION"))var t="await armController.openGripper();\n";else t="await armController.closeGripper();\n";return t},Blockly.Blocks.vacuum_set_state={init:function(){this.jsonInit({message0:"%1 "+getText("vacuumSetState"),args0:[{type:"field_dropdown",name:"STATE",options:[[getText("vacuumOn"),"1"],[getText("vacuumOff"),"0"]]}],previousStatement:null,nextStatement:null,colour:"#F44336",tooltip:getText("vacuumSetStateTooltip"),helpUrl:""})}},Blockly.JavaScript.vacuum_set_state=function(e){return`await armController.setVacuum(${e.getFieldValue("STATE")});\n`},Blockly.Blocks.vacuum_get_state={init:function(){this.jsonInit({message0:getText("vacuumGetState"),output:"Number",colour:"#F44336",tooltip:getText("vacuumGetStateTooltip"),helpUrl:""})}},Blockly.JavaScript.vacuum_get_state=function(e){return["await armController.getVacuumStatus()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.sensor_get_load={init:function(){this.jsonInit({message0:getText("sensorGetLoad")+" %1 "+getText("load"),args0:[{type:"field_dropdown",name:"ID",options:[[getText("joint0"),"0"],[getText("joint1"),"1"],[getText("joint2"),"2"],[getText("joint3"),"3"],[getText("joint4"),"4"],[getText("joint5"),"5"],[getText("joint6"),"6"]]}],output:"Number",colour:"#607D8B",tooltip:getText("sensorGetLoadTooltip"),helpUrl:""})}},Blockly.JavaScript.sensor_get_load=function(e){return[`await armController.getLoad(${e.getFieldValue("ID")})`,Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.sensor_get_all_loads={init:function(){this.jsonInit({message0:getText("sensorGetAllLoads"),output:"Array",colour:"#607D8B",tooltip:getText("sensorGetAllLoadsTooltip"),helpUrl:""})}},Blockly.JavaScript.sensor_get_all_loads=function(e){return["await armController.getLoads()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.sensor_get_offsets={init:function(){this.jsonInit({message0:getText("sensorGetOffsets"),output:"Array",colour:"#607D8B",tooltip:getText("sensorGetOffsetsTooltip"),helpUrl:""})}},Blockly.JavaScript.sensor_get_offsets=function(e){return["await armController.getOffsets()",Blockly.JavaScript.ORDER_AWAIT]},Blockly.Blocks.sensor_set_offsets={init:function(){this.jsonInit({message0:getText("sensorSetOffsets")+" %1",args0:[{type:"input_value",name:"OFFSETS",check:"Array"}],previousStatement:null,nextStatement:null,colour:"#607D8B",tooltip:getText("sensorSetOffsetsTooltip"),helpUrl:""})}},Blockly.JavaScript.sensor_set_offsets=function(e){return`await armController.setOffsets(${Blockly.JavaScript.valueToCode(e,"OFFSETS",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.control_wait_ms={init:function(){this.jsonInit({message0:getText("controlWaitMs")+" %1 "+getText("ms"),args0:[{type:"input_value",name:"TIME",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#795548",tooltip:getText("controlWaitMsTooltip"),helpUrl:""})}},Blockly.JavaScript.control_wait_ms=function(e){return`await sleep(${Blockly.JavaScript.valueToCode(e,"TIME",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.control_wait_s={init:function(){this.jsonInit({message0:getText("controlWaitS")+" %1 "+getText("s"),args0:[{type:"input_value",name:"TIME",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#795548",tooltip:getText("controlWaitSTooltip"),helpUrl:""})}},Blockly.JavaScript.control_wait_s=function(e){return`await sleep(${Blockly.JavaScript.valueToCode(e,"TIME",Blockly.JavaScript.ORDER_ATOMIC)} * 1000);\n`},Blockly.Blocks.control_arm_wait={init:function(){this.jsonInit({message0:getText("controlArmWait")+" %1 "+getText("ms"),args0:[{type:"input_value",name:"TIME",check:"Number"}],previousStatement:null,nextStatement:null,colour:"#795548",tooltip:getText("controlArmWaitTooltip"),helpUrl:""})}},Blockly.JavaScript.control_arm_wait=function(e){return`await armController.wait(${Blockly.JavaScript.valueToCode(e,"TIME",Blockly.JavaScript.ORDER_ATOMIC)});\n`},Blockly.Blocks.debug_print={init:function(){this.jsonInit({message0:getText("debugPrint")+" %1",args0:[{type:"input_value",name:"TEXT",check:["String","Number","Boolean"]}],previousStatement:null,nextStatement:null,colour:"#673AB7",tooltip:getText("debugPrintTooltip"),helpUrl:""})}},Blockly.JavaScript.debug_print=function(e){var t=Blockly.JavaScript.valueToCode(e,"TEXT",Blockly.JavaScript.ORDER_ATOMIC);return`console.log(${t});\nif (typeof logMessage !== 'undefined') { logMessage('info', String(${t})); }\n`},Blockly.Blocks.debug_alert={init:function(){this.jsonInit({message0:getText("debugAlert")+" %1",args0:[{type:"input_value",name:"MESSAGE",check:["String","Number"]}],previousStatement:null,nextStatement:null,colour:"#673AB7",tooltip:getText("debugAlertTooltip"),helpUrl:""})}},Blockly.JavaScript.debug_alert=function(e){return`alert(String(${Blockly.JavaScript.valueToCode(e,"MESSAGE",Blockly.JavaScript.ORDER_ATOMIC)}));\n`},Blockly.Blocks.debug_log={init:function(){this.jsonInit({message0:getText("debugLog")+" %1 "+getText("log")+": %2",args0:[{type:"field_dropdown",name:"LEVEL",options:[[getText("logLevelInfo"),"info"],[getText("logLevelSuccess"),"success"],[getText("logLevelWarning"),"warning"],[getText("logLevelError"),"error"]]},{type:"input_value",name:"MESSAGE",check:["String","Number"]}],previousStatement:null,nextStatement:null,colour:"#673AB7",tooltip:getText("debugLogTooltip"),helpUrl:""})}},Blockly.JavaScript.debug_log=function(e){return`if (typeof logMessage !== 'undefined') { logMessage('${e.getFieldValue("LEVEL")}', String(${Blockly.JavaScript.valueToCode(e,"MESSAGE",Blockly.JavaScript.ORDER_ATOMIC)})); }\n`},Blockly.Blocks.start_detection_loop={init:function(){this.jsonInit({message0:getText("startDetectionLoop")+" %1 %2",args0:[{type:"input_dummy"},{type:"input_statement",name:"DETECTION_ACTIONS"}],previousStatement:null,nextStatement:null,colour:"#795548",tooltip:getText("startDetectionLoopTooltip"),helpUrl:""})}},Blockly.JavaScript.start_detection_loop=function(e){return`while (true) {\n${Blockly.JavaScript.statementToCode(e,"DETECTION_ACTIONS")} await sleep(100); // 防止UI阻塞\n await checkPauseStop(); // 检查暂停停止\n}\n`},Blockly.Blocks.loop_condition={init:function(){this.jsonInit({message0:getText("loopCondition")+" %1",args0:[{type:"field_dropdown",name:"CONDITION",options:[[getText("loopConditionTrue"),"true"],[getText("loopConditionFalse"),"false"]]}],output:"Boolean",colour:"#795548",tooltip:getText("loopConditionTooltip"),helpUrl:""})}},Blockly.JavaScript.loop_condition=function(e){return[e.getFieldValue("CONDITION"),Blockly.JavaScript.ORDER_ATOMIC]},Blockly.Blocks.camera_start={init:function(){this.jsonInit({message0:getText("cameraStart"),previousStatement:null,nextStatement:null,colour:230,tooltip:getText("cameraStartTooltip"),helpUrl:""})}},Blockly.JavaScript.camera_start=function(e){return"await startCamera();\n"},Blockly.Blocks.camera_stop={init:function(){this.jsonInit({message0:getText("cameraStop"),previousStatement:null,nextStatement:null,colour:230,tooltip:getText("cameraStopTooltip"),helpUrl:""})}},Blockly.JavaScript.camera_stop=function(e){return"await stopCamera();\n"},Blockly.Blocks.vision_detect={init:function(){this.jsonInit({message0:getText("visionDetect")+" %1",args0:[{type:"field_dropdown",name:"DETECTION_TYPE",options:[[getText("detectionTypeFace"),"faces"],[getText("detectionTypeHand"),"hands"],[getText("detectionTypePose"),"pose"]]}],previousStatement:null,nextStatement:null,colour:230,tooltip:getText("visionDetectTooltip"),helpUrl:""})}},Blockly.JavaScript.vision_detect=function(e){var t="";switch(e.getFieldValue("DETECTION_TYPE")){case"faces":t="await detectFaces();\n";break;case"hands":t="await detectHands();\n";break;case"pose":t="await detectPose();\n"}return t},Blockly.Blocks.get_face_coordinate={init:function(){this.jsonInit({message0:getText("getFaceCoordinate")+" %1 "+getText("getFaceCoordinateTarget")+" %2 "+getText("getFaceCoordinatePoint")+" %3 "+getText("coordinate")+getText("colon"),args0:[{type:"input_value",name:"TARGET_ID",check:"Number"},{type:"input_value",name:"POINT_ID",check:"Number"},{type:"field_dropdown",name:"COORDINATE",options:[[getText("coordinateX"),"x"],[getText("coordinateY"),"y"]]}],output:"Number",colour:270,tooltip:getText("getFaceCoordinateTooltip"),helpUrl:""})}},Blockly.JavaScript.get_face_coordinate=function(e){return[`getFaceInfo(${Blockly.JavaScript.valueToCode(e,"TARGET_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, 'landmark', 'landmark_${Blockly.JavaScript.valueToCode(e,"POINT_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}_${e.getFieldValue("COORDINATE")}')`,Blockly.JavaScript.ORDER_FUNCTION_CALL]},Blockly.Blocks.get_hand_coordinate={init:function(){this.jsonInit({message0:getText("getHandCoordinate")+" %1 "+getText("getHandCoordinateTarget")+" %2 "+getText("getHandCoordinatePoint")+" %3 "+getText("coordinate")+getText("colon"),args0:[{type:"input_value",name:"TARGET_ID",check:"Number"},{type:"input_value",name:"POINT_ID",check:"Number"},{type:"field_dropdown",name:"COORDINATE",options:[[getText("coordinateX"),"x"],[getText("coordinateY"),"y"]]}],output:"Number",colour:270,tooltip:getText("getHandCoordinateTooltip"),helpUrl:""})}},Blockly.JavaScript.get_hand_coordinate=function(e){return[`getHandLandmark('hands', ${Blockly.JavaScript.valueToCode(e,"TARGET_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, ${Blockly.JavaScript.valueToCode(e,"POINT_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, '${e.getFieldValue("COORDINATE")}')`,Blockly.JavaScript.ORDER_FUNCTION_CALL]},Blockly.Blocks.get_pose_coordinate={init:function(){this.jsonInit({message0:getText("getPoseCoordinate")+" %1 "+getText("getPoseCoordinateTarget")+" %2 "+getText("getPoseCoordinatePoint")+" %3 "+getText("coordinate")+getText("colon"),args0:[{type:"input_value",name:"TARGET_ID",check:"Number"},{type:"input_value",name:"POINT_ID",check:"Number"},{type:"field_dropdown",name:"COORDINATE",options:[[getText("coordinateX"),"x"],[getText("coordinateY"),"y"]]}],output:"Number",colour:270,tooltip:getText("getPoseCoordinateTooltip"),helpUrl:""})}},Blockly.JavaScript.get_pose_coordinate=function(e){return[`getPoseLandmark('pose', ${Blockly.JavaScript.valueToCode(e,"TARGET_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, ${Blockly.JavaScript.valueToCode(e,"POINT_ID",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, '${e.getFieldValue("COORDINATE")}')`,Blockly.JavaScript.ORDER_FUNCTION_CALL]},Blockly.Blocks.output_coordinates={init:function(){this.jsonInit({message0:getText("outputCoordinates")+" "+getText("outputX")+": %1 "+getText("outputY")+": %2 "+getText("outputLabel")+": %3",args0:[{type:"input_value",name:"X",check:"Number"},{type:"input_value",name:"Y",check:"Number"},{type:"field_input",name:"LABEL",text:getText("outputLabel")}],previousStatement:null,nextStatement:null,colour:160,tooltip:getText("outputCoordinatesTooltip"),helpUrl:""})}},Blockly.JavaScript.output_coordinates=function(e){return`outputCoordinates(${Blockly.JavaScript.valueToCode(e,"X",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, ${Blockly.JavaScript.valueToCode(e,"Y",Blockly.JavaScript.ORDER_ATOMIC)||"0"}, '${e.getFieldValue("LABEL")||"坐标"}');\n`},console.log("7Bot Blockly blocks v4.0 loaded successfully - "+getText("toolboxCategoriesOptimized"))):console.error("Blockly is not loaded")});const BAUD_RATE=115200,SERVO_NUM=7,REGISTERS={DEVICE_TYPE_ID:0,VERSION_ID:1,MAC_ID:2,EEPROM_LEN:9,EEPROM_ID:11,DEVICE_ID:11,BAUDRATE_ID:12,OFFSET_ID:13,EEPROM_LOCK_ID:28,MOTOR_STATUS_ID:29,EFFECTOR_ID:30,VACUUM_ID:31,SPEED_ID:32,TIME_ID:39,ANGLE_ID:46,END_LENGTH_ID:53,IK_ID:54,IK_DATA_LENGTH:9,IK7_DATA_LENGTH:12,IK5_ID:68,IK5_DATA_LENGTH:6,ANGLE_FEEDBACK_FREQ_ID:82,ANGLE_FEEDBACK_ID:83,LOAD_FEEDBACK_FREQ_ID:90,LOAD_FEEDBACK_ID:91},OFFSET_BIAS=128,COORDINATE_OFFSET=1024;class ArmController{static PROTOCOL_SERIAL="serial";static PROTOCOL_WEBSOCKET="websocket";constructor(){this.ip="192.168.4.1",this.wsPort=8080,this.protocol=ArmController.PROTOCOL_WEBSOCKET,this.debug=!0,this.timeout=5e3,this.maxRetries=3,this.port=null,this.reader=null,this.writer=null,this.ws=null,this.lastResponse=null,this.status={connected:!1,latency:0,lastError:null,lastStatus:null},this.statusCallbacks=[],this.pendingCommands=new Map,this.commandId=0}onStatusUpdate(e){this.statusCallbacks.push(e),e(this.status)}notifyStatus(){this.statusCallbacks.forEach(e=>{try{e(this.status)}catch(e){console.error("Status callback error:",e)}})}isReady(){return this.status.connected}async connect(e="websocket",t=""){switch(t&&(this.ip=t),this.protocol=e.toLowerCase(),this.protocol){case ArmController.PROTOCOL_SERIAL:return await this._connectSerial();case ArmController.PROTOCOL_WEBSOCKET:return await this._connectWebSocket();default:throw new Error("Invalid protocol specified")}}async _connectSerial(){if(!("serial"in navigator))throw new Error("Web Serial API is not supported in this browser");try{return this.port=await navigator.serial.requestPort(),await this.port.open({baudRate:115200,dataBits:8,stopBits:1,parity:"none",flowControl:"none"}),this.reader=this.port.readable.getReader(),this.writer=this.port.writable.getWriter(),this.status.connected=!0,this.status.lastError=null,this.notifyStatus(),this.debug&&(console.log("Serial connection established"),console.log("Port info:",this.port.getInfo())),{status:"Connected via Serial"}}catch(e){throw this.status.connected=!1,this.status.lastError=`Serial connection failed: ${e.message}`,this.notifyStatus(),console.error("Serial connection error:",e),new Error(`Serial connection failed: ${e.message}`)}}async _connectWebSocket(){return new Promise((e,t)=>{const o=`ws://${this.ip}:${this.wsPort}/ws`;this.debug&&console.log(`Connecting to WebSocket: ${o}`),this.ws=new WebSocket(o);const n=setTimeout(()=>{t(new Error("WebSocket connection timeout"))},5e3);this.ws.onopen=()=>{clearTimeout(n),this.status.connected=!0,this.status.lastError=null,this.notifyStatus(),this.debug&&console.log("WebSocket connection established"),e({status:"Connected via WebSocket"})},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=()=>{this.status.connected=!1,this.status.lastError="WebSocket connection closed",this.notifyStatus(),this.debug&&console.log("WebSocket connection closed")},this.ws.onerror=e=>{clearTimeout(n),this.status.connected=!1,this.status.lastError=`WebSocket connection error: ${e.message||"Unknown error"}`,this.notifyStatus(),this.debug&&console.error("WebSocket connection error:",e),t(new Error("WebSocket connection failed"))}})}handleMessage(e){try{const t=JSON.parse(e);if(this.debug&&console.log(`WebSocket received: ${e}`),"ping"===t.status)return;this.lastResponse=t}catch(e){console.error("JSON parse error:",e)}}async disconnect(){try{if(this.protocol===ArmController.PROTOCOL_SERIAL&&this.port){if(this.debug&&console.log("Disconnecting serial port..."),this.reader){try{await this.reader.cancel()}catch(e){console.warn("Reader cancel failed:",e.message)}try{this.reader.releaseLock()}catch(e){console.warn("Reader release lock failed:",e.message)}}if(this.writer)try{await this.writer.close()}catch(e){console.warn("Writer close failed:",e.message)}try{await this.port.close()}catch(e){console.warn("Port close failed:",e.message)}this.port=null,this.reader=null,this.writer=null}else this.protocol===ArmController.PROTOCOL_WEBSOCKET&&this.ws&&(this.debug&&console.log("Disconnecting WebSocket..."),this.ws.close(),this.ws=null);return this.status.connected=!1,this.status.lastError=null,this.notifyStatus(),this.debug&&console.log("Disconnected successfully"),{status:"Disconnected"}}catch(e){return console.error("Disconnect error:",e),this.status.connected=!1,this.status.lastError=`Disconnect failed: ${e.message}`,this.notifyStatus(),{status:"Disconnected with errors",error:e.message}}}async switchProtocol(e,t={}){return await this.disconnect(),this.protocol=e,t.ip&&(this.ip=t.ip),t.wsPort&&(this.wsPort=t.wsPort),await this.connect(e,this.ip)}async _sendWebSocketCommand(e){if(!this.status.connected||!this.ws)throw new Error("WebSocket not connected");return new Promise((t,o)=>{const n=setTimeout(()=>{o(new Error("Command response timeout"))},this.timeout),i=JSON.stringify(e);this.debug&&console.log(`WebSocket sending: ${i}`),this.ws.send(i);const s=()=>{if(this.lastResponse){clearTimeout(n);const e=this.lastResponse;this.lastResponse=null,t(e)}else setTimeout(s,100)};setTimeout(s,100)})}_isReadCommand(e){return["read","angles","loads","angle","load","getDeviceCode","getVersion","getMAC","getID","getAngles","getLoads","getOffsets"].includes(e.cmd)}async readReg(e,t){return this.protocol===ArmController.PROTOCOL_SERIAL?await this._readRegSerial(e,t):await this._readRegNetwork(e,t)}async _readRegSerial(e,t){const o=[3,e,t];this.debug&&console.log("发送串口读取命令:",o,`地址:${e}, 长度:${t}`),await this._writeSerial(o);const n=await this._readSerial();return this.debug&&console.log("串口读取结果:",n),n}async _readRegNetwork(e,t){const o={cmd:"read",id:e,num:t};if(this.protocol===ArmController.PROTOCOL_WEBSOCKET){const e=await this._sendWebSocketCommand(o);if(e.error)throw new Error(`Read command failed: ${e.error}`);return void 0!==e.data?e.data:void 0!==e.angles?e.angles:void 0!==e.loads?e.loads:void 0!==e.result?Array.isArray(e.result)?e.result:[e.result]:e}throw new Error("Unsupported protocol for network read")}async writeReg(e,t){return this.protocol===ArmController.PROTOCOL_SERIAL?await this._writeRegSerial(e,t):await this._writeRegNetwork(e,t)}async _writeRegSerial(e,t){const o=Array.isArray(t)?t:[t],n=[4,255&e,255&o.length];n.push(...o.map(e=>255&e)),this.debug&&console.log("发送串口写入命令:",n,`地址:${e}, 数据:`,o),await this._writeSerial(n),await new Promise(e=>setTimeout(e,50))}async _writeRegNetwork(e,t){const o={cmd:"write",id:e,num:t.length,value:t};if(this.protocol===ArmController.PROTOCOL_WEBSOCKET)return await this._sendWebSocketCommand(o);throw new Error("Unsupported protocol for network write")}async getDeviceCode(){return await this.readReg(REGISTERS.DEVICE_TYPE_ID,1)}async getVersion(){return await this.readReg(REGISTERS.VERSION_ID,1)}async getMAC(){const e=await this.readReg(REGISTERS.MAC_ID,6);return this._listToMACString(e)}_listToMACString(e){return Array.isArray(e)&&6===e.length?e.map(e=>e.toString(16).toUpperCase().padStart(2,"0")).join(":"):"Invalid MAC data"}async getID(){return await this.readReg(REGISTERS.DEVICE_ID,1)}async getOffsets(){return await this.readReg(REGISTERS.OFFSET_ID,7)}async getAngle(e){return await this.readReg(REGISTERS.ANGLE_FEEDBACK_ID+e,1)}async getAngles(){return await this.readReg(REGISTERS.ANGLE_ID,7)}async getLoad(e){return await this.readReg(REGISTERS.LOAD_FEEDBACK_ID+e,1)}async getLoads(){return await this.readReg(REGISTERS.LOAD_FEEDBACK_ID,7)}async getMotorStatus(){return await this.readReg(REGISTERS.MOTOR_STATUS_ID,1)}async getVacuumStatus(){return await this.readReg(REGISTERS.VACUUM_ID,1)}async getSystemInfo(){try{const e=await this.getDeviceCode(),t=await this.getVersion(),o=await this.getMAC(),n=await this.getID(),i=await this.getMotorStatus(),s=await this.getVacuumStatus();return{deviceType:Array.isArray(e)?e[0]:e,version:Array.isArray(t)?(t[0]/10).toFixed(1):(t/10).toFixed(1),mac:o,deviceId:Array.isArray(n)?n[0]:n,motorStatus:Array.isArray(i)?1===i[0]?"伺服":"保护":1===i?"伺服":"保护",vacuumStatus:Array.isArray(s)?1===s[0]?"开启":"关闭":1===s?"开启":"关闭"}}catch(e){throw this.debug&&console.error("Failed to get system info:",e),e}}async getAllStatus(){try{const e=await this.getSystemInfo(),t=await this.getAngles();return{...e,angles:t}}catch(e){throw this.debug&&console.error("Failed to get all status:",e),e}}async setID(e){return await this.writeReg(REGISTERS.DEVICE_ID,[e])}async setOffsets(e){if(!Array.isArray(e)||7!==e.length)throw new Error("Offsets must be an array of 7 values");return await this.writeReg(REGISTERS.OFFSET_ID,e)}async setLock(e){return await this.writeReg(REGISTERS.EEPROM_LOCK_ID,[e?1:0])}async setStatus(e){const t={cmd:"status",status:e};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(t):await this.writeReg(REGISTERS.MOTOR_STATUS_ID,[e])}async setEffector(e){if(e<0||e>2)throw new Error("Effector type must be 0, 1, or 2");return await this.writeReg(REGISTERS.EFFECTOR_ID,[e])}async setVacuum(e){const t={cmd:"vacuum",status:e?1:0};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(t):await this.writeReg(REGISTERS.VACUUM_ID,[e?1:0])}async setSpeed(e){if(e<0||e>100)throw new Error("Speed must be between 0 and 100");const t={cmd:"speed",speed:e};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(t):await this.writeReg(REGISTERS.SPEED_ID,[e])}async setTime(e){return await this.writeReg(REGISTERS.TIME_ID,[e])}async setAngle(e,t){const o={cmd:"angle",id:e,angle:t};if(this.protocol===ArmController.PROTOCOL_WEBSOCKET)return await this._sendWebSocketCommand(o);if(e<0||e>=7)throw new Error("Servo ID must be between 0 and 6");return await this.writeReg(REGISTERS.ANGLE_ID+e,[t])}async setAngles(e){if(!Array.isArray(e)||7!==e.length)throw new Error("Angles must be an array of 7 values");const t={cmd:"angles",angles:e};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(t):await this.writeReg(REGISTERS.ANGLE_ID,e)}async setIK6(e,t){if(!Array.isArray(t)||5!==t.length)throw new Error("vec56 must be an array of 5 values");const o={cmd:"IK6",pos:e,vec56:t};if(this.protocol===ArmController.PROTOCOL_WEBSOCKET)return await this._sendWebSocketCommand(o);{const o=[e,...t];return await this.writeReg(REGISTERS.IK_ID,o)}}async setIK5(e){if(!Array.isArray(e)||e.length!==REGISTERS.IK5_DATA_LENGTH)throw new Error(`Position must be an array of ${REGISTERS.IK5_DATA_LENGTH} values`);const t={cmd:"IK5",pos:e};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(t):await this.writeReg(REGISTERS.IK5_ID,e)}async setIK7(e,t,o){if(!Array.isArray(t)||5!==t.length)throw new Error("vec56 must be an array of 5 values");if(!Array.isArray(o)||2!==o.length)throw new Error("vec67 must be an array of 2 values");const n={cmd:"IK7",pos:e,vec56:t,vec67:o};if(this.protocol===ArmController.PROTOCOL_WEBSOCKET)return await this._sendWebSocketCommand(n);{const n=[e,...t,...o];return await this.writeReg(REGISTERS.IK_ID,n)}}async setAnglesFbFreq(e){return await this.writeReg(REGISTERS.ANGLE_FEEDBACK_FREQ_ID,[e])}async setLoadsFbFreq(e){return await this.writeReg(REGISTERS.LOAD_FEEDBACK_FREQ_ID,[e])}async reset(){try{await this.setStatus(0),await new Promise(e=>setTimeout(e,500));const e=[90,90,90,90,90,90,90];await this.setAngles(e),await new Promise(e=>setTimeout(e,1e3)),await this.setVacuum(0),this.debug&&console.log("Robot reset to safe state")}catch(e){this.debug&&console.log(`Error during reset: ${e}`)}}async resetToHome(){return await this.reset()}async emergencyStop(){return await this.reset()}async home(){try{await this.setStatus(1),await new Promise(e=>setTimeout(e,500));const e=[90,90,65,90,90,90,80];await this.setAngles(e),this.debug&&console.log("Robot moved to home position")}catch(e){this.debug&&console.log(`Error during home: ${e}`)}}async waitForMotion(e=1e4){await new Promise(e=>setTimeout(e,2e3)),this.debug&&console.log("Motion wait completed")}async wait(e){return new Promise(t=>setTimeout(t,e))}async EEPROMinit(){const e=[0,0,...new Array(7).fill(128)];await this.setLock(0),await this.writeReg(REGISTERS.EEPROM_ID,e),await this.setLock(1)}async setGripper(e){return await this.setAngle(6,e)}async openGripper(){return await this.setAngle(6,15)}async closeGripper(){return await this.setAngle(6,80)}async _readSerial(){if(this.protocol!==ArmController.PROTOCOL_SERIAL)throw new Error("_readSerial is only available in serial protocol mode");try{let e=new Uint8Array(0);const t=50;let o=0;for(;o<t;){const{value:t,done:n}=await this.reader.read();if(n)throw new Error("Serial read interrupted");const i=new Uint8Array(e.length+t.length);i.set(e),i.set(t,e.length),e=i;for(let t=0;t<e.length-1;t++)if(170===e[t]&&119===e[t+1]){if(e.length>=t+5){const o=e[t+2],n=e[t+3],i=e[t+4],s=t+5+i+2;if(e.length>=s){const a=Array.from(e.slice(t+2,s-2));return this.debug&&(console.log("Raw packet data:",Array.from(e.slice(t,s))),console.log("Parsed packet:",a),console.log("Packet type:",o,"Addr:",n,"Data len:",i)),3===o?a.slice(3):a}}break}o++}throw new Error("Serial timeout: No valid packet received")}catch(e){throw new Error(`Serial read failed: ${e.message}`)}}async _writeSerial(e){if(this.protocol!==ArmController.PROTOCOL_SERIAL)throw new Error("_writeSerial is only available in serial protocol mode");const t=[170,119,...e],o=this._calculateCRC16(t);t.push(255&o,o>>8&255);try{await this.writer.write(new Uint8Array(t))}catch(e){throw new Error(`Serial write failed: ${e.message}`)}}_calculateCRC16(e){let t=65535;for(const o of e){t^=o;for(let e=0;e<8;e++)1&t?t=t>>1^40961:t>>=1}return t}async ping(){const e={cmd:"ping"};return this.protocol===ArmController.PROTOCOL_WEBSOCKET?await this._sendWebSocketCommand(e):{status:"pong"}}async sendCommand(e){return await this._sendWebSocketCommand(e)}}"undefined"!=typeof module&&module.exports?module.exports=ArmController:"undefined"!=typeof window&&(window.ArmController=ArmController);class MediaPipeDetector{constructor(){this.faceDetection=null,this.hands=null,this.pose=null,this.isInitialized=!1,this.isInitializing=!1,this.initializationAttempts=0,this.maxInitializationAttempts=3,this.detectionResults={faces:[],hands:[],pose:[]},this.video=null,this.canvas=null,this.canvasCtx=null,console.log("MediaPipe检测器已创建")}async initialize(){if(this.isInitializing)return console.log("检测器正在初始化中,等待完成..."),this.waitForInitialization();if(this.isInitialized)return console.log("检测器已初始化"),!0;this.isInitializing=!0,this.initializationAttempts++;try{if(console.log(`开始初始化MediaPipe检测器... (尝试 ${this.initializationAttempts}/${this.maxInitializationAttempts})`),!this.checkWebGLSupport()){const e="WebGL不受支持,无法使用MediaPipe检测器";throw console.error("❌",e),new Error(e)}this.setupDOMElements();if(!await this.waitForMediaPipeLibraries()){const e="MediaPipe库加载失败或超时";throw console.error("❌",e),new Error(e)}return await this.initializeDetectors(),this.isInitialized=!0,this.isInitializing=!1,console.log("✅ MediaPipe检测器初始化完成"),!0}catch(e){if(this.isInitializing=!1,console.error(`❌ MediaPipe检测器初始化失败 (尝试 ${this.initializationAttempts}/${this.maxInitializationAttempts}):`,e),this.initializationAttempts<this.maxInitializationAttempts)return console.log("等待2秒后重试初始化..."),await new Promise(e=>setTimeout(e,2e3)),this.initialize();throw this.isInitialized=!1,new Error(`MediaPipe检测器初始化失败: ${e.message}`)}}async waitForInitialization(e=1e4){const t=Date.now();for(;this.isInitializing&&Date.now()-t<e;)await new Promise(e=>setTimeout(e,100));return this.isInitialized}setupDOMElements(){if(this.video=document.getElementById("video-feed"),this.canvas=document.getElementById("video-canvas"),!this.video||!this.canvas)throw new Error("视频元素未找到,请确保DOM元素存在");if(this.canvas)try{this.canvas.getContext("webgl")||this.canvas.getContext("experimental-webgl")||console.warn("无法创建WebGL上下文,使用2D上下文"),this.canvasCtx=this.canvas.getContext("2d")}catch(e){console.error("Canvas上下文创建失败:",e),this.canvasCtx=null}}checkWebGLSupport(){try{const e=document.createElement("canvas"),t=e.getContext("webgl")||e.getContext("experimental-webgl"),o=!!t;if(t){const e=t.getExtension("WEBGL_debug_renderer_info");e&&(console.log("WebGL Renderer:",t.getParameter(e.UNMASKED_RENDERER_WEBGL)),console.log("WebGL Vendor:",t.getParameter(e.UNMASKED_VENDOR_WEBGL)))}return o}catch(e){return console.error("WebGL支持检查失败:",e),!1}}async waitForMediaPipeLibraries(e=15e3){console.log("等待MediaPipe库加载...");const t=Date.now(),o=["FaceDetection","Hands","Pose"],n=[];for(;Date.now()-t<e;){for(const e of o)void 0===window[e]||n.includes(e)||(console.log(`✅ ${e} 库已加载`),n.push(e));if(n.length===o.length)return console.log("✅ 所有MediaPipe库加载完成"),!0;await new Promise(e=>setTimeout(e,100))}return console.error(`❌ MediaPipe库加载超时,已加载: [${n.join(", ")}],缺失: [${o.filter(e=>!n.includes(e)).join(", ")}]`),n.length>0}async initializeFaceDetection(){try{if(console.log("初始化人脸检测器..."),void 0===window.FaceDetection)throw new Error("FaceDetection库未正确加载");this.faceDetection=new window.FaceDetection({locateFile:e=>`https://cdn.jsdelivr.net/npm/@mediapipe/face_detection@0.4/${e}`}),this.faceDetection.setOptions({model:"short",minDetectionConfidence:.5}),this.faceDetection.onResults(e=>{console.log("人脸检测结果:",e.detections?e.detections.length:0),this.detectionResults.faces=e.detections||[],this.updateDetectionDisplay("faces",this.detectionResults.faces.length),this.drawFaceResults(e.detections)}),await this.faceDetection.initialize(),console.log("✅ 人脸检测器初始化完成")}catch(e){console.error("❌ 人脸检测器初始化失败:",e),this.faceDetection=null}}async initializeHands(){try{if(console.log("初始化手部检测器..."),void 0===window.Hands)throw new Error("Hands库未正确加载");this.hands=new window.Hands({locateFile:e=>`https://cdn.jsdelivr.net/npm/@mediapipe/hands@0.4/${e}`}),this.hands.setOptions({maxNumHands:2,modelComplexity:1,minDetectionConfidence:.5,minTrackingConfidence:.5}),this.hands.onResults(e=>{console.log("手部检测结果:",e.multiHandLandmarks?e.multiHandLandmarks.length:0),this.detectionResults.hands=e.multiHandLandmarks||[],this.updateDetectionDisplay("hands",this.detectionResults.hands.length),this.drawHandResults(e.multiHandLandmarks)}),await this.hands.initialize(),console.log("手部检测器初始化完成")}catch(e){console.error("手部检测器初始化失败:",e),this.hands=null}}async initializePose(){try{if(console.log("初始化姿态检测器..."),void 0===window.Pose)throw new Error("Pose库未正确加载");this.pose=new window.Pose({locateFile:e=>`https://cdn.jsdelivr.net/npm/@mediapipe/pose@0.5/${e}`}),this.pose.setOptions({modelComplexity:1,smoothLandmarks:!0,enableSegmentation:!1,smoothSegmentation:!0,minDetectionConfidence:.5,minTrackingConfidence:.5}),this.pose.onResults(e=>{console.log("姿态检测结果:",e.poseLandmarks?"已检测":"未检测"),this.detectionResults.pose=e.poseLandmarks?[e.poseLandmarks]:[],this.updateDetectionDisplay("pose",this.detectionResults.pose.length>0?"已检测":"未检测"),this.drawPoseResults(e.poseLandmarks)}),await this.pose.initialize(),console.log("姿态检测器初始化完成")}catch(e){console.error("姿态检测器初始化失败:",e),this.pose=null}}drawFaceResults(e){this.canvasCtx&&e&&0!==e.length&&(this.canvasCtx.strokeStyle="#00ff00",this.canvasCtx.lineWidth=2,e.forEach(e=>{if(e.boundingBox){const t=e.boundingBox;this.canvasCtx.strokeRect(t.originX*this.canvas.width,t.originY*this.canvas.height,t.width*this.canvas.width,t.height*this.canvas.height)}}))}drawHandResults(e){this.canvasCtx&&e&&0!==e.length&&(this.canvasCtx.fillStyle="#ff0000",e.forEach(e=>{e&&e.forEach(e=>{this.canvasCtx.beginPath(),this.canvasCtx.arc(e.x*this.canvas.width,e.y*this.canvas.height,3,0,2*Math.PI),this.canvasCtx.fill()})}))}drawPoseResults(e){this.canvasCtx&&e&&(this.canvasCtx.fillStyle="#0000ff",e.forEach(e=>{this.canvasCtx.beginPath(),this.canvasCtx.arc(e.x*this.canvas.width,e.y*this.canvas.height,3,0,2*Math.PI),this.canvasCtx.fill()}))}async detectFaces(){if(!this.video||this.video.readyState<2){const e="视频未准备好,无法进行人脸检测";throw console.error("❌",e),new Error(e)}if(!this.faceDetection){const e="人脸检测器未初始化";throw console.error("❌",e),new Error(e)}try{await this.faceDetection.send({image:this.video})}catch(e){throw console.error("人脸检测失败:",e),e}}async detectHands(){if(!this.video||this.video.readyState<2){const e="视频未准备好,无法进行手部检测";throw console.error("❌",e),new Error(e)}if(!this.hands){const e="手部检测器未初始化";throw console.error("❌",e),new Error(e)}try{await this.hands.send({image:this.video})}catch(e){throw console.error("手部检测失败:",e),e}}async detectPose(){if(!this.video||this.video.readyState<2){const e="视频未准备好,无法进行姿态检测";throw console.error("❌",e),new Error(e)}if(!this.pose){const e="姿态检测器未初始化";throw console.error("❌",e),new Error(e)}try{await this.pose.send({image:this.video})}catch(e){throw console.error("姿态检测失败:",e),e}}updateDetectionDisplay(e,t){const o=document.getElementById({faces:"face-count",hands:"hand-count",pose:"pose-status"}[e]);o&&(o.textContent=t)}getDetectionResults(e){return this.detectionResults[e]||[]}getLandmarkCoordinate(e,t,o,n){const i=this.detectionResults[e];if(!i||!i[t])return 0;const s=i[t];return s&&s[o]&&s[o][n]||0}dispose(){this.faceDetection&&this.faceDetection.close(),this.hands&&this.hands.close(),this.pose&&this.pose.close(),console.log("MediaPipe检测器已清理")}async initializeDetectors(){const e=[{name:"FaceDetection",init:()=>this.initializeFaceDetection()},{name:"Hands",init:()=>this.initializeHands()},{name:"Pose",init:()=>this.initializePose()}];for(const t of e)if(void 0!==window[t.name])try{await t.init()}catch(e){console.error(`${t.name}检测器初始化失败:`,e)}else console.error(`${t.name}库未加载,该检测器无法初始化`)}}let detector=null;window.MediaPipeDetector=MediaPipeDetector;class VisionDrawing{constructor(){this.canvas=null,this.ctx=null,this.video=null,this.isDrawingEnabled=!0}initialize(){return this.canvas=document.getElementById("video-canvas"),this.video=document.getElementById("video-feed"),this.canvas?(this.ctx=this.canvas.getContext("2d"),console.log("视觉绘制系统初始化完成"),!0):(console.error("找不到canvas元素"),!1)}clearCanvas(){this.ctx&&this.canvas&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}drawAllResults(){if(!this.isDrawingEnabled||!this.ctx||!this.canvas)return;this.clearCanvas();const e=this.canvas.width,t=this.canvas.height;if(window.visionDetectionResults){const o=window.visionDetectionResults;o.faces&&o.faces.length>0&&this.drawFaces(o.faces,e,t),o.hands&&o.hands.length>0&&this.drawHands(o.hands,e,t),o.pose&&o.pose.length>0&&this.drawPose(o.pose,e,t)}}drawFaces(e,t,o){this.ctx.strokeStyle="#00FF00",this.ctx.fillStyle="#00FF00",this.ctx.lineWidth=2,this.ctx.font="16px Arial",e.forEach((e,n)=>{if(e.boundingBox){const t=e.boundingBox,o=t.originX,i=t.originY,s=t.width,a=t.height;this.ctx.strokeRect(o,i,s,a),this.ctx.fillText(`Face ${n}`,o,i-5)}e.landmarks&&e.landmarks.length>0&&(this.ctx.fillStyle="#FF0000",e.landmarks.forEach((e,n)=>{const i=e.x*t,s=e.y*o;this.ctx.beginPath(),this.ctx.arc(i,s,3,0,2*Math.PI),this.ctx.fill(),this.ctx.fillStyle="#FFFFFF",this.ctx.font="10px Arial",this.ctx.fillText(n.toString(),i+5,s-5),this.ctx.fillStyle="#FF0000"}))})}drawHands(e,t,o){this.ctx.strokeStyle="#0088FF",this.ctx.fillStyle="#0088FF",this.ctx.lineWidth=2,e.forEach((e,n)=>{if(e&&e.length>0&&(e.forEach((e,n)=>{const i=e.x*t,s=e.y*o;this.ctx.beginPath(),this.ctx.arc(i,s,4,0,2*Math.PI),this.ctx.fill(),this.ctx.fillStyle="#FFFFFF",this.ctx.font="10px Arial",this.ctx.fillText(n.toString(),i+5,s-5),this.ctx.fillStyle="#0088FF"}),this.drawHandConnections(e,t,o),e[0])){const i=e[0];this.ctx.fillStyle="#0088FF",this.ctx.font="16px Arial",this.ctx.fillText(`Hand ${n}`,i.x*t+10,i.y*o-10)}})}drawHandConnections(e,t,o){if(!e||e.length<21)return;this.ctx.strokeStyle="#0088FF",this.ctx.lineWidth=2;[[0,1],[0,5],[0,9],[0,13],[0,17],[1,2],[2,3],[3,4],[5,6],[6,7],[7,8],[9,10],[10,11],[11,12],[13,14],[14,15],[15,16],[17,18],[18,19],[19,20]].forEach(([n,i])=>{if(e[n]&&e[i]){const s=e[n].x*t,a=e[n].y*o,r=e[i].x*t,l=e[i].y*o;this.ctx.beginPath(),this.ctx.moveTo(s,a),this.ctx.lineTo(r,l),this.ctx.stroke()}})}drawPose(e,t,o){this.ctx.strokeStyle="#FF00FF",this.ctx.fillStyle="#FF00FF",this.ctx.lineWidth=2,e.forEach((e,n)=>{if(e&&e.length>0&&(e.forEach((e,n)=>{const i=e.x*t,s=e.y*o;this.ctx.beginPath(),this.ctx.arc(i,s,5,0,2*Math.PI),this.ctx.fill(),this.ctx.fillStyle="#FFFFFF",this.ctx.font="10px Arial",this.ctx.fillText(n.toString(),i+6,s-6),this.ctx.fillStyle="#FF00FF"}),this.drawPoseConnections(e,t,o),e[0])){const i=e[0];this.ctx.fillStyle="#FF00FF",this.ctx.font="16px Arial",this.ctx.fillText(`Pose ${n}`,i.x*t+10,i.y*o-10)}})}drawPoseConnections(e,t,o){if(!e||e.length<6)return;this.ctx.strokeStyle="#FF00FF",this.ctx.lineWidth=3;[[1,2],[1,3],[2,4],[1,5],[2,5]].forEach(([n,i])=>{if(e[n]&&e[i]){const s=e[n].x*t,a=e[n].y*o,r=e[i].x*t,l=e[i].y*o;this.ctx.beginPath(),this.ctx.moveTo(s,a),this.ctx.lineTo(r,l),this.ctx.stroke()}})}drawCoordinatePoint(e,t,o,n="#FFFF00"){if(!this.ctx||!this.canvas)return;const i=this.canvas.width,s=this.canvas.height,a=e<=1?e*i:e,r=t<=1?t*s:t;this.ctx.fillStyle=n,this.ctx.strokeStyle=n,this.ctx.lineWidth=2,this.ctx.beginPath(),this.ctx.moveTo(a-10,r),this.ctx.lineTo(a+10,r),this.ctx.moveTo(a,r-10),this.ctx.lineTo(a,r+10),this.ctx.stroke(),this.ctx.beginPath(),this.ctx.arc(a,r,5,0,2*Math.PI),this.ctx.fill(),this.ctx.fillStyle="#FFFFFF",this.ctx.font="12px Arial",this.ctx.fillText(o,a+15,r-5)}setDrawingEnabled(e){this.isDrawingEnabled=e,e||this.clearCanvas()}isEnabled(){return this.isDrawingEnabled}}window.visionDrawing=new VisionDrawing,window.VisionDrawing=VisionDrawing,console.log("视觉检测绘制模块已加载");const isElectron=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&-1!==navigator.userAgent.indexOf("Electron"))return!0;if("undefined"!=typeof window&&"function"==typeof window.require)try{return window.require("electron"),!0}catch(e){}return!("undefined"==typeof window||!window.electronAPI)}();async function startCamera(){try{console.log("启动摄像头...");const e=document.getElementById("video-feed"),t=document.getElementById("video-canvas");if(!e||!t)throw new Error("视频元素未找到");const o=await navigator.mediaDevices.getUserMedia({video:{width:640,height:480}});return e.srcObject=o,new Promise((o,n)=>{e.onloadedmetadata=()=>{e.play(),t.width=e.videoWidth,t.height=e.videoHeight,console.log("摄像头启动成功"),o()},e.onerror=e=>{n(e)}})}catch(e){throw console.error("摄像头启动失败:",e),e}}async function stopCamera(){try{const e=document.getElementById("video-feed");if(e&&e.srcObject){e.srcObject.getTracks().forEach(e=>e.stop()),e.srcObject=null}const t=document.getElementById("face-count"),o=document.getElementById("hand-count"),n=document.getElementById("pose-status"),i=document.getElementById("coordinate-output");t&&(t.textContent="0"),o&&(o.textContent="0"),n&&(n.textContent="未检测"),i&&(i.innerHTML=""),window.visionDrawing&&window.visionDrawing.clearCanvas(),console.log("摄像头已停止")}catch(e){throw console.error("停止摄像头失败:",e),e}}async function detectFaces(){try{console.log("开始人脸检测..."),isElectron&&window.electronDebug&&(window.electronDebug.detectionCalls++,window.electronDebug.lastDetectionTime=(new Date).toISOString(),console.log(`[Electron] 人脸检测调用次数: ${window.electronDebug.detectionCalls}`));const e=document.getElementById("video-feed");if(!e||!e.srcObject){const e="摄像头未启动,无法进行人脸检测";throw console.error("❌",e),new Error(e)}if(e.readyState<2){const e="视频未准备就绪,请等待摄像头完全启动";throw console.error("❌",e),new Error(e)}if(!window.detector){const e="MediaPipe检测器未创建,正在尝试重新初始化...";console.warn("⚠️",e);try{if(void 0===window.MediaPipeDetector)throw new Error("MediaPipe检测器类未加载");console.log("重新创建MediaPipe检测器..."),window.detector=new window.MediaPipeDetector,await window.detector.initialize()}catch(e){const t=`MediaPipe检测器初始化失败: ${e.message}`;throw console.error("❌",t),new Error(t)}}if(!window.detector.isInitialized){const e="MediaPipe检测器未初始化,正在尝试初始化...";console.warn("⚠️",e);try{if(await window.detector.initialize(),!window.detector.isInitialized)throw new Error("检测器初始化失败")}catch(e){const t=`MediaPipe检测器初始化失败: ${e.message}`;throw console.error("❌",t),new Error(t)}}if(!window.detector.faceDetection){const e="人脸检测器不可用,可能MediaPipe FaceDetection库未正确加载";throw console.error("❌",e),new Error(e)}if(console.log("🔍 执行MediaPipe人脸检测..."),await window.detector.detectFaces(),window.visionDetectionResults.faces=window.detector.getDetectionResults("faces"),console.log(`✅ 检测结果: ${window.visionDetectionResults.faces.length} 个人脸`),updateDetectionDisplay("faces",window.visionDetectionResults.faces.length),window.visionDrawing&&window.visionDrawing.isEnabled()&&window.visionDrawing.drawAllResults(),console.log("人脸检测完成,检测到",window.visionDetectionResults.faces.length,"个人脸"),window.visionDetectionResults.faces.length>0){const e=window.visionDetectionResults.faces[0];if(e.boundingBox){const t=e.boundingBox.originX+e.boundingBox.width/2,o=e.boundingBox.originY+e.boundingBox.height/2,n=0===t?.001:t,i=0===o?.001:o;outputCoordinates(n,i,"人脸中心"),console.log(`输出人脸坐标: (${n.toFixed(3)}, ${i.toFixed(3)}) [归一化坐标]`)}}}catch(e){console.error("人脸检测失败:",e),updateDetectionDisplay("faces",0)}}async function detectHands(){try{console.log("开始手部检测...");const e=document.getElementById("video-feed");if(!e||!e.srcObject){const e="摄像头未启动,无法进行手部检测";throw console.error("❌",e),window.alert&&window.alert(`手部检测失败:${e}\n\n请先启动摄像头。`),new Error(e)}if(!window.detector||!window.detector.isInitialized){const e="MediaPipe检测器未初始化";throw console.error("❌",e),window.alert&&window.alert(`手部检测失败:${e}\n\n请检查MediaPipe库是否正常加载。`),new Error(e)}if(console.log("🔍 执行MediaPipe手部检测..."),await window.detector.detectHands(),window.visionDetectionResults.hands=window.detector.getDetectionResults("hands"),console.log(`✅ 检测结果: ${window.visionDetectionResults.hands.length} 只手`),updateDetectionDisplay("hands",window.visionDetectionResults.hands.length),window.visionDrawing&&window.visionDrawing.isEnabled()&&window.visionDrawing.drawAllResults(),console.log("手部检测完成,检测到",window.visionDetectionResults.hands.length,"只手"),window.visionDetectionResults.hands.length>0){const e=window.visionDetectionResults.hands[0];if(e&&e[0]){const t=0===e[0].x?.001:e[0].x,o=0===e[0].y?.001:e[0].y;outputCoordinates(t,o,"手腕位置"),console.log(`输出手腕坐标: (${t.toFixed(3)}, ${o.toFixed(3)}) [归一化坐标]`)}}}catch(e){console.error("手部检测失败:",e),updateDetectionDisplay("hands",0)}}async function detectPose(){try{console.log("开始姿态检测...");const e=document.getElementById("video-feed");if(!e||!e.srcObject){const e="摄像头未启动,无法进行姿态检测";throw console.error("❌",e),window.alert&&window.alert(`姿态检测失败:${e}\n\n请先启动摄像头。`),new Error(e)}if(!window.detector||!window.detector.isInitialized){const e="MediaPipe检测器未初始化";throw console.error("❌",e),window.alert&&window.alert(`姿态检测失败:${e}\n\n请检查MediaPipe库是否正常加载。`),new Error(e)}if(console.log("🔍 执行MediaPipe姿态检测..."),await window.detector.detectPose(),window.visionDetectionResults.pose=window.detector.getDetectionResults("pose"),console.log("✅ 检测结果: "+(window.visionDetectionResults.pose.length>0?"已检测":"未检测")),updateDetectionDisplay("pose",window.visionDetectionResults.pose.length>0?"已检测":"未检测"),window.visionDrawing&&window.visionDrawing.isEnabled()&&window.visionDrawing.drawAllResults(),console.log("姿态检测完成,检测状态:",window.visionDetectionResults.pose.length>0?"已检测":"未检测"),window.visionDetectionResults.pose.length>0){const e=window.visionDetectionResults.pose[0];if(e&&e[0]){const t=0===e[0].x?.001:e[0].x,o=0===e[0].y?.001:e[0].y;outputCoordinates(t,o,"鼻子位置"),console.log(`输出鼻子坐标: (${t.toFixed(3)}, ${o.toFixed(3)}) [归一化坐标]`)}}}catch(e){console.error("姿态检测失败:",e),updateDetectionDisplay("pose","未检测")}}function getFaceInfo(e,t,o){try{console.log(`获取人脸信息: targetId=${e}, infoType=${t}, detailInfo=${o}`),isElectron&&window.electronDebug&&console.log("[Electron] 获取人脸信息调用,当前检测结果:",window.visionDetectionResults);const n=window.visionDetectionResults.faces;if(!n||0===n.length||e>=n.length)return console.log("没有检测到人脸或目标ID超出范围"),0;const i=n[e];if(!i)return console.log("指定的人脸不存在"),0;if("bbox"===t){const e=i.boundingBox;if(!e)return console.log("人脸边界框不存在"),0;let t=0;switch(o){case"centerX":t=e.originX+e.width/2;break;case"centerY":t=e.originY+e.height/2;break;case"width":t=e.width;break;case"height":t=e.height;break;case"left":t=e.originX;break;case"top":t=e.originY;break;case"right":t=e.originX+e.width;break;case"bottom":t=e.originY+e.height;break;default:console.log("未知的边界框信息类型:",o),t=0}t=Math.max(0,Math.min(1,t));const n=0===t?.001:t;return console.log(`人脸边界框 ${o}: ${n} (归一化坐标)`),isElectron&&window.electronDebug&&console.log(`[Electron] 返回人脸边界框${o}: ${n} (归一化坐标)`),n}if("landmark"===t){const e=i.landmarks;if(!e)return console.log("人脸关键点不存在"),0;const t=o.match(/landmark_(\d+)_([xy])/);if(t){const o=parseInt(t[1]),n=t[2];if(e[o]){let t=e[o][n];t=Math.max(0,Math.min(1,t));const i=0===t?.001:t;return console.log(`人脸关键点 ${o} 的 ${n} 坐标: ${i} (归一化坐标)`),isElectron&&window.electronDebug&&console.log(`[Electron] 返回人脸关键点坐标: ${i} (归一化坐标)`),i}console.log(`关键点 ${o} 不存在`)}else console.log("无法解析关键点信息:",o)}return 0}catch(e){return console.error("获取人脸信息失败:",e),0}}function getHandLandmark(e,t,o,n){try{console.log(`获取手部坐标: targetId=${t}, landmarkIndex=${o}, coordinate=${n}`),isElectron&&window.electronDebug&&console.log("[Electron] 获取手部坐标调用,当前检测结果:",window.visionDetectionResults);const e=window.visionDetectionResults.hands;if(!e||0===e.length||t>=e.length)return console.log("没有检测到手部或目标ID超出范围"),0;const i=e[t];if(!i||!i[o])return console.log(`手部关键点 ${o} 不存在`),0;let s=i[o][n];s=Math.max(0,Math.min(1,s));const a=0===s?.001:s;return console.log(`手部关键点 ${o} 的 ${n} 坐标: ${a} (归一化坐标)`),isElectron&&window.electronDebug&&console.log(`[Electron] 返回手部坐标: ${a} (归一化坐标)`),a}catch(e){return console.error("获取手部坐标失败:",e),0}}function getPoseLandmark(e,t,o,n){try{console.log(`获取姿态坐标: targetId=${t}, landmarkIndex=${o}, coordinate=${n}`),isElectron&&window.electronDebug&&console.log("[Electron] 获取姿态坐标调用,当前检测结果:",window.visionDetectionResults);const e=window.visionDetectionResults.pose;if(!e||0===e.length||t>=e.length)return console.log("没有检测到姿态或目标ID超出范围"),0;const i=e[t];if(!i||!i[o])return console.log(`姿态关键点 ${o} 不存在`),0;let s=i[o][n];s=Math.max(0,Math.min(1,s));const a=0===s?.001:s;return console.log(`姿态关键点 ${o} 的 ${n} 坐标: ${a} (归一化坐标)`),isElectron&&window.electronDebug&&console.log(`[Electron] 返回姿态坐标: ${a} (归一化坐标)`),a}catch(e){return console.error("获取姿态坐标失败:",e),0}}function outputCoordinates(e,t,o){try{const n=document.getElementById("coordinate-output");if(n){const i=`[${(new Date).toLocaleTimeString()}] ${o}: (${e.toFixed(2)}, ${t.toFixed(2)})`,s=document.createElement("div");for(s.textContent=i,s.style.marginBottom="2px",n.appendChild(s);n.children.length>10;)n.removeChild(n.firstChild);n.scrollTop=n.scrollHeight}window.visionDrawing&&window.visionDrawing.isEnabled()&&window.visionDrawing.drawCoordinatePoint(e,t,o),console.log(`输出坐标 - ${o}: (${e}, ${t})`)}catch(e){console.error("输出坐标失败:",e)}}function updateDetectionDisplay(e,t){console.log(`更新检测显示: ${e} = ${t}`);const o={faces:"face-count",hands:"hand-count",pose:"pose-status"},n={faces:"face-detection-item",hands:"hand-detection-item",pose:"pose-detection-item"},i=document.getElementById(n[e]);i?(i.style.display="flex",console.log(`显示检测项: ${n[e]}`)):console.warn(`检测项容器不存在: ${n[e]}`);const s=document.getElementById(o[e]);s?(s.textContent=t,console.log(`更新检测数值: ${o[e]} = ${t}`)):console.warn(`检测数值元素不存在: ${o[e]}`)}function resetDetectionDisplay(){["face-detection-item","hand-detection-item","pose-detection-item"].forEach(e=>{const t=document.getElementById(e);t&&(t.style.display="none")})}async function startRealtimeDetection(e,t=200){console.log(`启动实时${e}检测,间隔${t}ms`),stopRealtimeDetection();const o=document.getElementById("video-feed");if(!(isElectron||o&&o.srcObject))return void console.warn("摄像头未启动,无法进行实时检测");isElectron&&console.log("🤖 [Electron] 启动实时检测循环(忽略摄像头状态检查)"),window.realtimeDetectionActive=!0,window.currentDetectionType=e;const n=async()=>{if(window.realtimeDetectionActive){try{if(!isElectron&&o&&o.readyState<2)return console.warn("视频未准备好,跳过本次检测"),void setTimeout(n,t);if(isElectron)console.log("🤖 [Electron] 实时检测:",e),"all"!==e&&"faces"!==e&&"face"!==e||await detectFaces(),"all"!==e&&"hands"!==e&&"hand"!==e||await detectHands(),"all"!==e&&"pose"!==e||await detectPose();else{if(!window.detector||!window.detector.isInitialized){const e="MediaPipe检测器未初始化,无法进行实时检测";throw console.error("❌",e),window.alert&&window.alert(`实时检测失败:${e}\n\n请检查MediaPipe库是否正常加载。`),new Error(e)}console.log("使用MediaPipe进行检测:",e),window.detector.canvasCtx&&window.detector.canvasCtx.clearRect(0,0,window.detector.canvas.width,window.detector.canvas.height),"all"!==e&&"faces"!==e&&"face"!==e||await window.detector.detectFaces(),"all"!==e&&"hands"!==e&&"hand"!==e||await window.detector.detectHands(),"all"!==e&&"pose"!==e||await window.detector.detectPose(),window.visionDetectionResults.faces=window.detector.getDetectionResults("faces"),window.visionDetectionResults.hands=window.detector.getDetectionResults("hands"),window.visionDetectionResults.pose=window.detector.getDetectionResults("pose")}}catch(e){throw console.error("实时检测失败:",e),window.alert&&window.alert(`实时检测失败:${e.message}\n\n请检查摄像头和MediaPipe库是否正常工作。`),window.realtimeDetectionActive=!1,e}window.realtimeDetectionActive&&setTimeout(n,t)}else console.log("检测已停止")};console.log("开始第一次检测"),setTimeout(n,100)}function stopRealtimeDetection(){console.log("停止实时检测"),window.realtimeDetectionActive=!1,window.currentDetectionType=null,window.realtimeDetectionTimer&&(clearInterval(window.realtimeDetectionTimer),window.realtimeDetectionTimer=null),updateDetectionDisplay("faces",0),updateDetectionDisplay("hands",0),updateDetectionDisplay("pose","未检测");const e=document.getElementById("video-canvas");if(e){const t=e.getContext("2d");t&&t.clearRect(0,0,e.width,e.height)}console.log("实时检测已完全停止")}function sleep(e){return new Promise(t=>setTimeout(t,e))}async function checkAndFixDetector(){if(console.log("检查检测器状态..."),!window.detector){if(console.log("检测器不存在,尝试创建..."),void 0===window.MediaPipeDetector)return console.error("❌ MediaPipe检测器类未加载"),!1;try{return window.detector=new window.MediaPipeDetector,await window.detector.initialize(),console.log("✅ 检测器创建成功"),!0}catch(e){return console.error("❌ 检测器创建失败:",e),!1}}if(!window.detector.isInitialized){console.log("检测器未初始化,尝试初始化...");try{return await window.detector.initialize(),window.detector.isInitialized?(console.log("✅ 检测器初始化成功"),!0):(console.error("❌ 检测器初始化失败"),!1)}catch(e){return console.error("❌ 检测器初始化出错:",e),!1}}return console.log("✅ 检测器状态正常"),!0}console.log("运行环境:",isElectron?"Electron":"Web浏览器"),console.log("User Agent:","undefined"!=typeof navigator?navigator.userAgent:"N/A"),window.visionDetectionResults||(window.visionDetectionResults={faces:[],hands:[],pose:[]},console.log("全局检测结果变量已初始化")),window.realtimeDetectionActive=!1,window.currentDetectionType=null,window.realtimeDetectionTimer=null,isElectron?(console.log("🔧 Electron环境检测到,启用严格检测模式"),window.electronDebug={detectionCalls:0,lastDetectionTime:null,coordinateOutputs:[],environment:"Electron",initialized:!0},setTimeout(()=>{console.log("🧪 Electron环境:执行初始检测测试..."),"function"==typeof detectFaces&&detectFaces().then(()=>{console.log("✅ Electron环境:初始检测测试完成")}).catch(e=>{console.error("❌ Electron环境:初始检测测试失败",e),window.alert&&window.alert(`Electron环境检测功能初始化失败:${e.message}\n\n请检查摄像头和MediaPipe库是否正常。`)})},1e3)):console.log("🌐 Web浏览器环境检测到"),console.log("视觉检测全局变量已初始化"),window.visionDetectionResults={faces:[],hands:[],pose:[]},window.startCamera=startCamera,window.stopCamera=stopCamera,window.detectFaces=detectFaces,window.detectHands=detectHands,window.detectPose=detectPose,window.getFaceInfo=getFaceInfo,window.getHandLandmark=getHandLandmark,window.getPoseLandmark=getPoseLandmark,window.outputCoordinates=outputCoordinates,window.updateDetectionDisplay=updateDetectionDisplay,window.resetDetectionDisplay=resetDetectionDisplay,window.startRealtimeDetection=startRealtimeDetection,window.stopRealtimeDetection=stopRealtimeDetection,window.sleep=sleep,window.checkAndFixDetector=checkAndFixDetector,console.log("视觉检测支持函数已加载");class BlocklyApp{constructor(){this.workspace=null,this.armController=new ArmController,this.isRunning=!1,this.isPaused=!1,this.shouldStop=!1,this.currentExecution=null,this.executionController=null,this.deviceInfoUpdateInterval=null,this.deviceInfoUpdateFrequency=5e3,this.uiState={leftPanelCollapsed:!1,rightPanelCollapsed:!1,panels:{"arm-status-content":!1,"quick-actions-content":!1,"message-log-content":!1,"code-preview-content":!1,"program-structure-content":!1,"help-content":!1}},this.init()}init(){document.addEventListener("DOMContentLoaded",()=>{this.initializeBlockly(),this.setupEventListeners(),this.setupArmController(),this.setupUI(),this.logMessage("info","系统初始化完成")})}initializeBlockly(){const e=document.getElementById("toolbox");this.workspace=Blockly.inject("blocklyDiv",{toolbox:e,scrollbars:!0,zoom:{controls:!0,wheel:!0,startScale:1,maxScale:3,minScale:.3,scaleSpeed:1.2},grid:{spacing:20,length:3,colour:"#ccc",snap:!0},sounds:!0,oneBasedIndex:!1,horizontalLayout:!1,toolboxPosition:"start",css:!0,media:"https://unpkg.com/blockly@9.3.1/media/",rtl:!1,theme:Blockly.Themes.Classic}),this.workspace.addChangeListener(e=>{e.type!==Blockly.Events.BLOCK_CHANGE&&e.type!==Blockly.Events.BLOCK_CREATE&&e.type!==Blockly.Events.BLOCK_DELETE&&e.type!==Blockly.Events.BLOCK_MOVE||(this.updateCodePreview(),this.checkProgramStructure())}),this.updateCodePreview(),this.initializeVisionDetection(),this.initializeVisionDrawing(),this.addDefaultStartBlock(),setTimeout(()=>{this.logMessage("info",'💡 提示:已为您添加默认的"程序开始"积木块'),this.logMessage("info",'📌 只有连接到"程序开始"积木块的代码才会按顺序执行'),this.logMessage("info",'📹 可以使用"视觉检测"工具箱进行AI视觉功能开发')},1e3)}setupEventListeners(){document.getElementById("connection-mode").addEventListener("change",e=>{this.handleConnectionModeChange(e.target.value)}),document.getElementById("websocket-ip").addEventListener("input",e=>{this.onWebSocketHostInput(e.target.value)}),document.getElementById("websocket-ip").addEventListener("blur",e=>{this.onWebSocketHostBlur(e.target.value)}),this.handleConnectionModeChange("websocket"),document.getElementById("connect-btn").addEventListener("click",()=>{this.handleConnection()}),document.getElementById("run-btn").addEventListener("click",()=>{this.runProgram()}),document.getElementById("pause-btn").addEventListener("click",()=>{this.pauseProgram()}),document.getElementById("stop-btn").addEventListener("click",()=>{this.stopProgram()}),document.getElementById("reset-btn").addEventListener("click",()=>{this.resetRobot()}),document.getElementById("save-btn").addEventListener("click",()=>{this.saveProject()}),document.getElementById("load-btn").addEventListener("click",()=>{this.loadProject()}),document.getElementById("copy-code-btn").addEventListener("click",()=>{this.copyCode()}),document.getElementById("format-code-btn").addEventListener("click",()=>{this.formatCode()}),document.getElementById("export-btn").addEventListener("click",()=>{this.exportCode()}),document.getElementById("clear-log-btn").addEventListener("click",()=>{this.clearLog()}),document.getElementById("export-log-btn").addEventListener("click",()=>{this.exportLog()}),document.getElementById("home-position").addEventListener("click",()=>{this.quickAction("home")}),document.getElementById("enable-motors").addEventListener("click",()=>{this.quickAction("enable")}),document.getElementById("disable-motors").addEventListener("click",()=>{this.quickAction("disable")}),document.getElementById("emergency-stop").addEventListener("click",()=>{this.quickAction("emergency")}),document.querySelectorAll(".collapse-btn").forEach(e=>{e.addEventListener("click",e=>{e.stopPropagation();const t=e.target.closest(".collapse-btn").dataset.target;this.togglePanel(t)})}),document.querySelectorAll(".panel-header").forEach(e=>{e.addEventListener("click",t=>{if(!t.target.closest(".collapse-btn")){const t=e.querySelector(".collapse-btn");if(t){const e=t.dataset.target;this.togglePanel(e)}}})}),document.querySelectorAll(".modal-close").forEach(e=>{e.addEventListener("click",e=>{const t=e.target.closest(".modal");t&&(t.style.display="none")})}),document.getElementById("language-toggle-btn").addEventListener("click",()=>{window.i18nManager&&window.i18nManager.toggleLanguage()}),document.querySelectorAll(".modal").forEach(e=>{e.addEventListener("click",t=>{t.target===e&&(e.style.display="none")})})}setupArmController(){this.armController.debug=!0,this.armController.onStatusUpdate(e=>{console.log("收到状态更新:",e),this.updateConnectionStatus(e),e.lastStatus&&this.updateRobotStatus(e.lastStatus)}),this.statusUpdateInterval=null,console.log("机械臂控制器设置完成")}setupUI(){Object.keys(this.uiState.panels).forEach(e=>{const t=document.getElementById(e),o=document.querySelector(`[data-target="${e}"]`);t&&o&&this.uiState.panels[e]&&(t.classList.add("collapsed"),o.classList.add("collapsed"))}),this.updateConnectionStatus({connected:!1}),this.updateRobotStatus({}),console.log("UI初始化完成")}handleConnectionModeChange(e){const t=document.getElementById("serial-input"),o=document.getElementById("websocket-input");this.armController.status.connected&&(this.logMessage("info","切换连接模式,正在断开当前连接..."),this.armController.disconnect().then(()=>{this.logMessage("info","已断开连接"),this.updateConnectionStatus({connected:!1})}).catch(e=>{this.logMessage("error",`断开连接失败: ${e.message}`)})),t.style.display="serial"===e?"block":"none",o.style.display="websocket"===e?"block":"none",this.logMessage("info",`切换到${"serial"===e?"串口":"WiFi"}连接模式`)}async handleConnection(){const e=document.getElementById("connect-btn"),t=this.armController.status.connected;if(console.log("handleConnection called, isConnected:",t,"status:",this.armController.status),t)try{this.stopDeviceInfoUpdater(),await this.armController.disconnect(),this.updateConnectionStatus(this.armController.status),this.logMessage("info","已断开连接")}catch(e){console.error("断开连接错误:",e),this.logMessage("error",`断开连接失败: ${e.message}`),this.updateConnectionStatus({connected:!1,lastError:e.message})}else{const t=document.getElementById("connection-mode").value;let o={};try{switch(e.disabled=!0,e.innerHTML='<i class="fas fa-spinner fa-spin"></i> 连接中...',t){case"serial":o.ip=null;break;case"websocket":const e=document.getElementById("websocket-ip").value;if(!e||""===e.trim())throw new Error("请输入IP地址或MAC地址后4位");const t=this.validateWebSocketHost(e);if(!t.valid)throw new Error(t.message);o.ip=this.processWebSocketHost(e),o.port="8080",this.logMessage("info",t.message),this.logMessage("info",`将连接到: ${o.ip}:${o.port}`),"mac"===t.type&&this.logMessage("info","提示:MAC地址连接需要机械臂支持mDNS服务")}await this.armController.connect(t,o.ip);this.logMessage("success","连接成功"),this.updateConnectionStatus(this.armController.status),await this.loadDeviceInfo(),this.startDeviceInfoUpdater()}catch(e){console.error("连接失败:",e),this.logMessage("error",`连接失败: ${e.message}`),this.showError(`连接失败: ${e.message}`),this.updateConnectionStatus({connected:!1,lastError:e.message})}finally{e.disabled=!1}}}updateConnectionStatus(e){const t=document.getElementById("connection-status"),o=document.getElementById("status-text"),n=document.getElementById("device-status"),i=document.getElementById("connect-btn");console.log("updateConnectionStatus called with:",e),e.connected?(t.className="status-indicator connected",o.textContent="已连接",n.textContent="在线",n.className="status-online",i.innerHTML='<i class="fas fa-unlink"></i> 断开',i.className="btn btn-danger",document.getElementById("run-btn").disabled=!1,document.getElementById("reset-btn").disabled=!1):(t.className="status-indicator disconnected",o.textContent="未连接",n.textContent="离线",n.className="status-offline",i.innerHTML='<i class="fas fa-link"></i> 连接',i.className="btn btn-primary",document.getElementById("run-btn").disabled=!0,document.getElementById("pause-btn").disabled=!0,document.getElementById("stop-btn").disabled=!0,document.getElementById("reset-btn").disabled=!0,this.resetDeviceInfoDisplay()),e.lastError&&this.logMessage("error",e.lastError)}async loadDeviceInfo(){if(!this.armController.status.connected)return console.warn("机械臂未连接,无法加载设备信息"),!1;try{await this.sleep(800),this.logMessage("info","正在读取设备信息..."),console.log("开始读取设备信息,连接类型:",this.armController.protocol);const e=await this.armController.getSystemInfo();if(e){const t=this.formatDeviceId(e.deviceId);document.getElementById("device-id").textContent=t;const o=this.formatFirmwareVersion(e.version);document.getElementById("firmware-version").textContent=o;const n=document.getElementById("device-status");n&&(n.textContent="在线",n.className="status-online");const i=document.getElementById("running-status");return i&&e.motorStatus&&(i.textContent=e.motorStatus,i.className=this.getMotorStatusClass(e.motorStatus)),this.logMessage("success",`设备信息已更新 - ID: ${t}, 版本: ${o}`),e.mac&&"Invalid MAC data"!==e.mac&&this.logMessage("info",`MAC地址: ${e.mac}`),this.logMessage("info",`电机状态: ${e.motorStatus}, 真空状态: ${e.vacuumStatus}`),console.log("完整设备信息:",e),!0}throw new Error("无法获取系统信息")}catch(e){return console.warn("获取完整系统信息失败,尝试单独读取:",e.message),this.logMessage("warning",`读取完整信息失败: ${e.message}`),await this.loadBasicDeviceInfo()}}async loadBasicDeviceInfo(){try{let e=!1;try{const t=await this.armController.getID(),o=this.formatDeviceId(t);document.getElementById("device-id").textContent=o,"--"!==o&&(e=!0)}catch(e){console.warn("读取设备ID失败:",e.message),document.getElementById("device-id").textContent="--"}try{const t=await this.armController.getVersion(),o=this.formatFirmwareVersion(t);document.getElementById("firmware-version").textContent=o,"--"!==o&&(e=!0)}catch(e){console.warn("读取固件版本失败:",e.message),document.getElementById("firmware-version").textContent="--"}try{const e=await this.armController.getMAC();e&&"Invalid MAC data"!==e&&this.logMessage("info",`MAC地址: ${e}`)}catch(e){console.warn("读取MAC地址失败:",e.message)}return e?(this.logMessage("info","基本设备信息已更新"),!0):(this.logMessage("warning","未能获取任何设备信息"),!1)}catch(e){return this.logMessage("error",`读取基本设备信息失败: ${e.message}`),!1}}formatDeviceId(e){return null==e?"--":Array.isArray(e)&&e.length>0?String(e[0]):"number"==typeof e||"string"==typeof e?String(e):"--"}formatFirmwareVersion(e){if(null==e)return"--";let t;if(Array.isArray(e)&&e.length>0)t=e[0];else if("number"==typeof e)t=e;else{if("string"!=typeof e)return"--";if(e.includes("."))return`v${e}`;t=parseFloat(e)}return"number"!=typeof t||isNaN(t)?"--":`v${(t/10).toFixed(1)}`}getMotorStatusClass(e){if(!e)return"";const t=e.toString().toLowerCase();return t.includes("伺服")||t.includes("servo")?"status-servo":t.includes("保护")||t.includes("protect")?"status-protect":""}processWebSocketHost(e){if(!e||"string"!=typeof e)return e;const t=e.trim().toUpperCase();if(/^[0-9A-F]{4}$/.test(t)){const e=`7bot-${t.toLowerCase()}.local`;return this.logMessage("info",`检测到MAC地址后4位,自动补全为: ${e}`),e}if(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(t))return this.logMessage("info",`检测到IP地址: ${t}`),t;return/^7bot-[0-9a-f]{4}\.local$/i.test(t)?(this.logMessage("info",`检测到mDNS地址: ${t}`),t):(this.logMessage("warning",`无法识别的地址格式: ${t},将使用原始输入`),e)}validateWebSocketHost(e){if(!e||"string"!=typeof e)return{valid:!1,message:"请输入有效的主机地址"};const t=e.trim().toUpperCase();if(/^[0-9A-F]{4}$/.test(t))return{valid:!0,message:`将连接: 7bot-${t.toLowerCase()}.local`,type:"mac",originalInput:t};if(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(t))return{valid:!0,message:`将连接: ${t}`,type:"ip"};return/^7bot-[0-9a-f]{4}\.local$/i.test(t)?{valid:!0,message:`将连接: ${t}`,type:"mdns"}:{valid:!1,message:`无效的地址格式: ${t}。支持格式:IP地址、MAC地址后4位、mDNS地址`}}onWebSocketHostInput(e){if(!e||""===e.trim())return;const t=this.validateWebSocketHost(e),o=document.getElementById("websocket-ip");t.valid?(o.style.borderColor="#28a745",o.style.backgroundColor="#f8fff9",this.showInputHint(t.message,"success")):(o.style.borderColor="#dc3545",o.style.backgroundColor="#fff8f8",this.showInputHint(t.message,"error"))}onWebSocketHostBlur(e){const t=document.getElementById("websocket-ip");if(t.style.borderColor="",t.style.backgroundColor="",this.clearInputHint(),!e||""===e.trim())return;const o=this.validateWebSocketHost(e);o.valid||this.logMessage("warning",o.message)}showInputHint(e,t="info"){this.clearInputHint();const o=document.createElement("div");o.id="input-hint",o.className=`input-hint input-hint-${t}`,o.textContent=e;document.getElementById("websocket-input").appendChild(o)}clearInputHint(){const e=document.getElementById("input-hint");e&&e.remove()}startDeviceInfoUpdater(){this.deviceInfoUpdateInterval&&this.stopDeviceInfoUpdater(),this.deviceInfoUpdateInterval=setInterval(async()=>{if(this.armController.status.connected)try{await this.loadDeviceInfo()}catch(e){console.warn("定时更新设备信息失败:",e.message)}},this.deviceInfoUpdateFrequency),this.logMessage("info","设备信息定时更新已启动")}stopDeviceInfoUpdater(){this.deviceInfoUpdateInterval&&(clearInterval(this.deviceInfoUpdateInterval),this.deviceInfoUpdateInterval=null,this.logMessage("info","设备信息定时更新已停止"))}resetDeviceInfoDisplay(){document.getElementById("device-id").textContent="--",document.getElementById("firmware-version").textContent="--";const e=document.getElementById("device-status");e&&(e.textContent="离线",e.className="status-offline");const t=document.getElementById("running-status");t&&(t.textContent="停止",t.className="")}async runProgram(){if(!this.armController.status.connected)return void this.showError("请先连接机械臂");if(this.isRunning)return void this.logMessage("warning","程序正在运行中");const e=this.generateCode();if(e.trim())if(e.includes('请添加"程序开始"积木块')||e.includes("程序开始积木块未连接代码"))this.showError('请先添加"程序开始"积木块并连接要执行的代码');else{this.isRunning=!0,this.isPaused=!1,this.shouldStop=!1,this.executionController=new AbortController,document.getElementById("run-btn").disabled=!0,document.getElementById("pause-btn").disabled=!1,document.getElementById("stop-btn").disabled=!1,document.getElementById("running-status").textContent="运行中",this.logMessage("info","开始执行程序");try{void 0!==resetDetectionDisplay&&resetDetectionDisplay();const t=new AsyncFunction("armController","sleep","logMessage","checkPauseStop",this.wrapCodeWithPauseStopSupport(e));this.currentExecution=t(this.armController,this.createInterruptibleSleep(),this.logMessage.bind(this),this.checkPauseStop.bind(this)),await this.currentExecution,this.shouldStop||this.logMessage("success","程序执行完成")}catch(e){"AbortError"===e.name||this.shouldStop?this.logMessage("warning","程序已被停止"):(this.logMessage("error",`程序执行错误: ${e.message}`),this.showError(`程序执行错误: ${e.message}`))}finally{this.isRunning=!1,this.isPaused=!1,this.shouldStop=!1,this.currentExecution=null,this.executionController=null,document.getElementById("run-btn").disabled=!1,document.getElementById("pause-btn").disabled=!0,document.getElementById("pause-btn").innerHTML='<i class="fas fa-pause"></i> 暂停',document.getElementById("stop-btn").disabled=!0,document.getElementById("running-status").textContent="停止"}}else this.showError("请先创建程序")}createInterruptibleSleep(){return async e=>{const t=Date.now(),o=Math.min(e,100);for(;Date.now()-t<e;){if(this.shouldStop)throw new Error("Program stopped");for(;this.isPaused&&!this.shouldStop;)await new Promise(e=>setTimeout(e,100));if(this.shouldStop)throw new Error("Program stopped");const n=e-(Date.now()-t),i=Math.min(o,n);i>0&&await new Promise(e=>setTimeout(e,i))}}}async checkPauseStop(){if(this.shouldStop)throw new Error("Program stopped");for(;this.isPaused&&!this.shouldStop;)await new Promise(e=>setTimeout(e,100));if(this.shouldStop)throw new Error("Program stopped")}wrapCodeWithPauseStopSupport(e){let t=e.replace(/await\s+([^;]+);/g,"await $1; await checkPauseStop();");return t=t.replace(/for\s*\([^)]*\)\s*{/g,"$&\n await checkPauseStop();"),t=t.replace(/while\s*\([^)]*\)\s*{/g,"$&\n await checkPauseStop();"),t}pauseProgram(){if(!this.isRunning)return;this.isPaused=!this.isPaused;const e=document.getElementById("pause-btn");this.isPaused?(e.innerHTML='<i class="fas fa-play"></i> 继续',document.getElementById("running-status").textContent="暂停",this.logMessage("warning","程序已暂停")):(e.innerHTML='<i class="fas fa-pause"></i> 暂停',document.getElementById("running-status").textContent="运行中",this.logMessage("info","程序继续执行"))}stopProgram(){this.isRunning&&(this.shouldStop=!0,this.isPaused=!1,void 0!==stopRealtimeDetection&&stopRealtimeDetection(),this.executionController&&this.executionController.abort(),this.logMessage("warning","正在停止程序..."))}async quickAction(e){if(this.armController.status.connected)try{switch(e){case"home":await this.armController.setAngles([90,90,90,90,90,90,40]),this.logMessage("success","机械臂已回到原点位置");break;case"enable":await this.armController.setStatus(1),this.logMessage("success","电机已使能");break;case"disable":await this.armController.setStatus(0),this.logMessage("success","电机已失能");break;case"emergency":await this.armController.sendCommand({cmd:"stop"}),this.logMessage("warning","紧急停止已执行")}}catch(e){this.logMessage("error",`快速操作失败: ${e.message}`)}else this.showError("请先连接机械臂")}async resetRobot(){if(this.armController.status.connected)try{await this.armController.setStatus(1),await this.sleep(500),await this.armController.setAngles([90,90,90,90,90,90,40]),this.logMessage("success","机械臂已复位")}catch(e){this.logMessage("error",`复位失败: ${e.message}`)}else this.showError("请先连接机械臂")}generateCode(){if(!this.workspace)return"";const e=this.workspace.getBlocksByType("program_start");if(0===e.length)return'\n// ⚠️ 请先拖拽"程序开始"积木块到工作区\n// 只有连接到"程序开始"积木块的代码才会执行\n\n// 这样可以确保程序按照积木块的连接顺序依次执行\n// 散落在边上的积木块不会被执行\n\nconsole.log(\'请添加"程序开始"积木块\');\n';e.length>1&&this.logMessage("warning",'检测到多个"程序开始"积木块,只会执行第一个');const t=e[0];if(!t.getNextBlock())return'\n// ⚠️ "程序开始"积木块没有连接任何代码\n// 请将需要执行的积木块连接到"程序开始"积木块下方\n\nconsole.log(\'程序开始积木块未连接代码\');\n';let o='\n// 7Bot机械臂程序执行\nasync function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// 主程序 - 只执行连接到"程序开始"积木块的代码\nasync function main() {\n';return o+=this.generateConnectedCodeWithContext(t),o+="\n}\n\n// 执行主程序\nawait main();\n",o}generateConnectedCodeWithContext(e){const t=Blockly.JavaScript;try{t.nameDB_||("function"==typeof Blockly.Names?t.nameDB_=new Blockly.Names(t.RESERVED_WORDS_):Blockly.Names&&void 0!==Blockly.Names.NameType?t.nameDB_=new Blockly.Names(t.RESERVED_WORDS_,t.NAME_TYPE):t.nameDB_={reset:function(){},getName:function(e,t){return e},getDistinctName:function(e,t){return e+"_"+Math.floor(1e3*Math.random())}}),t.nameDB_.reset&&t.nameDB_.reset()}catch(e){console.warn("无法初始化名称数据库,使用简单实现:",e),t.nameDB_={reset:function(){},getName:function(e,t){return e},getDistinctName:function(e,t){return e+"_"+Math.floor(1e3*Math.random())}}}let o="",n=e.getNextBlock();for(;n;){try{const e=t.blockToCode(n);e&&(Array.isArray(e)?o+=e[0]+"\n":o+=e)}catch(e){console.error("生成积木块代码时出错:",e,"积木块:",n.type),o+=this.generateFallbackCode(n)}n=n.getNextBlock()}return o}generateFallbackCode(e){if(!e)return"";switch(e.type){case"controls_repeat_ext":let t="1";const o=e.getInput("TIMES");if(o&&o.connection&&o.connection.targetBlock()){const e=o.connection.targetBlock();"math_number"===e.type&&(t=e.getFieldValue("NUM")||"1")}let n="";const i=e.getInput("DO");return i&&i.connection&&i.connection.targetBlock()&&(n=this.generateConnectedLoopBody(i.connection.targetBlock())),`for (let i = 0; i < ${t}; i++) {\n${n}}\n`;case"controls_for":const s="i";let a="1",r="10",l="1";const c=e.getInput("FROM");if(c&&c.connection&&c.connection.targetBlock()){const e=c.connection.targetBlock();"math_number"===e.type&&(a=e.getFieldValue("NUM")||"1")}const d=e.getInput("TO");if(d&&d.connection&&d.connection.targetBlock()){const e=d.connection.targetBlock();"math_number"===e.type&&(r=e.getFieldValue("NUM")||"10")}const u=e.getInput("BY");if(u&&u.connection&&u.connection.targetBlock()){const e=u.connection.targetBlock();"math_number"===e.type&&(l=e.getFieldValue("NUM")||"1")}let p="";const g=e.getInput("DO");return g&&g.connection&&g.connection.targetBlock()&&(p=this.generateConnectedLoopBody(g.connection.targetBlock())),`for (let ${s} = ${a}; ${s} <= ${r}; ${s} += ${l}) {\n${p}}\n`;default:return`// 无法生成代码: ${e.type}\nconsole.log('执行积木块: ${e.type}');\n`}}generateConnectedLoopBody(e){let t="",o=e;for(;o;){try{const e=Blockly.JavaScript.blockToCode(o);e&&(Array.isArray(e)?t+=" "+e[0]+"\n":t+=" "+e.replace(/\n/g,"\n "))}catch(e){console.error("生成循环体代码时出错:",e),t+=` // 无法生成代码: ${o.type}\n`}o=o.getNextBlock()}return t}getConnectedBlocks(e){const t=new Set,o=e=>{if(!e||t.has(e))return;t.add(e);e.inputList.forEach(e=>{e.connection&&e.connection.targetBlock()&&o(e.connection.targetBlock())}),e.getNextBlock()&&o(e.getNextBlock())};return e.getNextBlock()&&o(e.getNextBlock()),t}updateCodePreview(){const e=document.getElementById("generated-code");if(!e)return;const t=this.generateCode();t.trim()?e.textContent=t:e.textContent="// 拖拽积木块开始编程..."}copyCode(){const e=this.generateCode();e.trim()?navigator.clipboard.writeText(e).then(()=>{this.showSuccess("代码已复制到剪贴板")}).catch(()=>{this.showError("复制失败")}):this.showError("没有可复制的代码")}formatCode(){this.updateCodePreview(),this.logMessage("info","代码已格式化")}saveProject(){if(!this.workspace)return void this.showError("工作区未初始化");const e=Blockly.Xml.workspaceToDom(this.workspace),t=Blockly.Xml.domToText(e),o={version:"2.0",timestamp:(new Date).toISOString(),workspace:t,metadata:{blocks:this.workspace.getAllBlocks().length,name:`7Bot项目_${(new Date).toLocaleDateString()}`}},n=new Blob([JSON.stringify(o,null,2)],{type:"application/json"}),i=URL.createObjectURL(n),s=document.createElement("a");s.href=i,s.download=`${o.metadata.name}.json`,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i),this.logMessage("success","项目已保存")}loadProject(){const e=document.createElement("input");e.type="file",e.accept=".json",e.onchange=e=>{const t=e.target.files[0];if(!t)return;const o=new FileReader;o.onload=e=>{try{const t=JSON.parse(e.target.result);if(!t.workspace)throw new Error("无效的项目文件");this.workspace.clear();const o=Blockly.Xml.textToDom(t.workspace);Blockly.Xml.domToWorkspace(o,this.workspace),this.logMessage("success",`项目已加载: ${t.metadata?.name||"未命名项目"}`)}catch(e){this.showError(`加载项目失败: ${e.message}`)}},o.readAsText(t)},e.click()}exportCode(){const e=this.generateCode();if(!e.trim())return void this.showError("没有可导出的代码");const t=new Blob([e],{type:"text/javascript"}),o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=`7Bot程序_${(new Date).toLocaleDateString()}.js`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(o),this.logMessage("success","代码已导出")}updateRobotStatus(e){void 0!==e.deviceId&&(document.getElementById("device-id").textContent=e.deviceId),e.version&&(document.getElementById("firmware-version").textContent=e.version),e.angles&&Array.isArray(e.angles)&&e.angles.forEach((e,t)=>{const o=document.querySelector(`[data-joint="${t}"]`);if(o){const t=o.querySelector(".joint-angle"),n=o.querySelector(".joint-fill");if(t&&(t.textContent=`${Math.round(e)}°`),n){const t=e/180*100;n.style.width=`${Math.min(Math.max(t,0),100)}%`}}})}logMessage(e,t){const o=document.getElementById("message-log");if(!o)return;const n=(new Date).toLocaleTimeString(),i=document.createElement("div");for(i.className=`log-item ${e}`,i.innerHTML=`\n <span class="timestamp">${n}</span>\n <span class="message">${this.escapeHtml(t)}</span>\n `,o.appendChild(i),o.scrollTop=o.scrollHeight;o.children.length>1e3;)o.removeChild(o.firstChild)}clearLog(){const e=document.getElementById("message-log");e&&(e.innerHTML="",this.logMessage("info","日志已清空"))}exportLog(){const e=document.getElementById("message-log");if(!e)return;const t=Array.from(e.querySelectorAll(".log-item")).map(e=>`${e.querySelector(".timestamp").textContent} ${e.querySelector(".message").textContent}`).join("\n");if(!t.trim())return void this.showError("没有可导出的日志");const o=new Blob([t],{type:"text/plain"}),n=URL.createObjectURL(o),i=document.createElement("a");i.href=n,i.download=`7Bot日志_${(new Date).toLocaleDateString()}.txt`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(n),this.logMessage("success","日志已导出")}togglePanel(e){const t=document.getElementById(e),o=document.querySelector(`[data-target="${e}"]`);if(!t||!o)return;const n=t.classList.contains("collapsed");n?(t.classList.remove("collapsed"),o.classList.remove("collapsed")):(t.classList.add("collapsed"),o.classList.add("collapsed")),this.uiState.panels[e]=!n}showError(e){document.getElementById("error-message").textContent=e,this.showModal("error-modal")}showSuccess(e){document.getElementById("success-message").textContent=e,this.showModal("success-modal")}showModal(e){const t=document.getElementById(e);t&&(t.style.display="block")}closeModal(e){const t=document.getElementById(e);t&&(t.style.display="none")}sleep(e){return new Promise(t=>setTimeout(t,e))}escapeHtml(e){const t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,e=>t[e])}checkProgramStructure(){const e=this.workspace.getBlocksByType("program_start"),t=this.workspace.getAllBlocks();let o=0,n=0;if(e.length>0){const t=e[0];o=this.getConnectedBlocks(t).size}t.forEach(t=>{if(!t.getParent()&&"program_start"!==t.type)if(e.length>0){this.getConnectedBlocks(e[0]).has(t)||n++}else n++}),this.updateProgramStatus(e.length,o,n)}updateProgramStatus(e,t,o){const n=document.getElementById("program-status");if(!n)return;let i="";i=0===e?'<span style="color: #f44336;">⚠️ 缺少程序开始积木块</span>':e>1?'<span style="color: #ff9800;">⚠️ 检测到多个程序开始积木块</span>':0===t?'<span style="color: #ff9800;">⚠️ 程序开始积木块未连接代码</span>':`<span style="color: #4caf50;">✅ 有效程序:${t} 个积木块</span>`,o>0&&(i+=` <span style="color: #ff5722;">| ${o} 个独立积木块未连接</span>`),n.innerHTML=i}async initializeVisionDetection(){try{console.log("开始初始化视觉检测功能...");const e="undefined"!=typeof window&&window.process&&"renderer"===window.process.type;if(console.log("运行环境:",e?"Electron":"Web浏览器"),window.visionDetectionResults||(window.visionDetectionResults={faces:[],hands:[],pose:[]},console.log("✅ 全局检测结果变量已初始化")),window.realtimeDetectionActive=!1,window.currentDetectionType=null,window.realtimeDetectionTimer=null,e){console.log("Electron环境检测到,启用严格检测模式"),window.electronDebug={detectionCalls:0,lastDetectionTime:null,coordinateOutputs:[]};try{const e=await navigator.mediaDevices.getUserMedia({video:!0});console.log("[Electron] 摄像头权限获取成功"),e.getTracks().forEach(e=>e.stop())}catch(e){console.warn("[Electron] 摄像头权限获取失败:",e)}this.logMessage("info","🔧 Electron环境:已启用优化的视觉检测模式")}if(window.mediaPipeLoader){console.log("等待MediaPipe库加载完成...");let e=0;const t=5e3;for(;e<t;){const t=window.mediaPipeLoader.getLoadedLibraries();if(console.log("已加载的MediaPipe库:",t),t.length>0){console.log("MediaPipe库加载完成");break}await new Promise(e=>setTimeout(e,500)),e+=500}}if(void 0===window.MediaPipeDetector){const e="MediaPipe检测器类未加载";throw console.error("❌",e),window.alert&&window.alert(`视觉检测初始化失败:${e}\n\n请检查MediaPipe库文件是否存在。`),new Error(e)}if(console.log("创建MediaPipe检测器实例..."),window.detector=new window.MediaPipeDetector,await window.detector.initialize(),console.log("MediaPipe检测器初始化完成"),!window.detector.isInitialized){const e="MediaPipe检测器初始化失败";throw console.error("❌",e),window.alert&&window.alert(`视觉检测初始化失败:${e}\n\n请检查MediaPipe库是否正常加载。`),new Error(e)}console.log("✅ MediaPipe检测器已就绪"),this.bindVisionControls(),console.log("测试检测函数可用性:"),console.log("- detectFaces:","function"==typeof window.detectFaces),console.log("- detectHands:","function"==typeof window.detectHands),console.log("- detectPose:","function"==typeof window.detectPose),console.log("- getFaceInfo:","function"==typeof window.getFaceInfo),console.log("- getHandLandmark:","function"==typeof window.getHandLandmark),console.log("- getPoseLandmark:","function"==typeof window.getPoseLandmark),console.log("视觉检测功能初始化完成")}catch(e){console.error("视觉检测功能初始化失败:",e),window.detector=null,window.alert&&window.alert(`视觉检测功能初始化失败:${e.message}\n\n应用程序将无法使用视觉检测功能。\n请检查MediaPipe库和摄像头设置。`),window.visionDetectionResults||(window.visionDetectionResults={faces:[],hands:[],pose:[]})}}bindVisionControls(){const e=document.getElementById("start-camera"),t=document.getElementById("stop-camera"),o=document.getElementById("toggle-drawing");e&&e.addEventListener("click",()=>this.startCamera()),t&&t.addEventListener("click",()=>this.stopCamera()),o&&o.addEventListener("click",()=>this.toggleDrawing())}async startCamera(){try{console.log("启动摄像头...");const e=document.getElementById("video-feed"),t=document.getElementById("video-canvas");if(!e||!t)throw new Error("视频元素未找到");const o=await navigator.mediaDevices.getUserMedia({video:{width:640,height:480}});e.srcObject=o,e.onloadedmetadata=()=>{e.play(),t.width=e.videoWidth,t.height=e.videoHeight,console.log(`摄像头启动成功,分辨率: ${e.videoWidth}x${e.videoHeight}`),this.logMessage("success","摄像头已启动"),this.debugDetectorStatus()}}catch(e){console.error("摄像头启动失败:",e),this.logMessage("error","摄像头启动失败: "+e.message),window.alert&&window.alert(`摄像头启动失败:${e.message}\n\n请检查:\n1. 摄像头是否连接正常\n2. 浏览器是否有摄像头权限\n3. 其他应用是否占用摄像头`)}}async retryDetectorInitialization(){console.log("重试检测器初始化...");try{if(void 0!==window.MediaPipeDetector)if(console.log("重新创建MediaPipe检测器实例..."),window.detector=new window.MediaPipeDetector,await window.detector.initialize(),window.detector.isInitialized)console.log("✅ 检测器重新初始化成功"),this.logMessage("success","检测器已就绪");else{const e="检测器重新初始化失败";console.error("❌",e),this.logMessage("error",e),window.alert&&window.alert(`检测器重新初始化失败:${e}\n\n请重新启动应用程序。`)}else{const e="MediaPipeDetector类不存在";console.error("❌",e),this.logMessage("error",e),window.alert&&window.alert(`检测器重新初始化失败:${e}\n\n请检查MediaPipe库文件。`)}}catch(e){console.error("重试初始化失败:",e),this.logMessage("error","重试初始化失败: "+e.message),window.alert&&window.alert(`检测器重新初始化失败:${e.message}\n\n请重新启动应用程序。`)}}debugDetectorStatus(){console.log("=== 检测器状态调试 ==="),console.log("window.detector:",!!window.detector),window.detector&&(console.log("detector.isInitialized:",window.detector.isInitialized),console.log("detector.faceDetection:",!!window.detector.faceDetection),console.log("detector.hands:",!!window.detector.hands),console.log("detector.pose:",!!window.detector.pose)),console.log("MediaPipe库状态:"),console.log("- FaceDetection:",void 0!==window.FaceDetection),console.log("- Hands:",void 0!==window.Hands),console.log("- Pose:",void 0!==window.Pose),console.log("MediaPipe加载器状态:"),window.mediaPipeLoader&&console.log("- 已加载库:",window.mediaPipeLoader.getLoadedLibraries()),console.log("======================")}async stopCamera(){try{const e=document.getElementById("video-feed");if(e&&e.srcObject){e.srcObject.getTracks().forEach(e=>e.stop()),e.srcObject=null}document.getElementById("face-count").textContent="0",document.getElementById("hand-count").textContent="0",document.getElementById("pose-status").textContent="未检测",document.getElementById("coordinate-output").innerHTML="",console.log("摄像头已停止"),this.logMessage("info","摄像头已停止")}catch(e){console.error("停止摄像头失败:",e),this.logMessage("error","停止摄像头失败: "+e.message),window.alert&&window.alert(`停止摄像头失败:${e.message}\n\n请尝试刷新页面。`)}}addDefaultStartBlock(){try{const e=this.workspace.newBlock("program_start");e.initSvg(),e.render(),e.moveBy(50,50),console.log("默认程序开始积木已添加")}catch(e){console.warn("添加默认积木失败:",e)}}initializeVisionDrawing(){try{if(window.visionDrawing){window.visionDrawing.initialize()?console.log("视觉绘制系统初始化成功"):console.warn("视觉绘制系统初始化失败")}else console.warn("视觉绘制模块未加载")}catch(e){console.error("初始化视觉绘制系统失败:",e)}}toggleDrawing(){if(window.visionDrawing){const e=window.visionDrawing.isEnabled();window.visionDrawing.setDrawingEnabled(!e);const t=document.getElementById("toggle-drawing");t&&(e?(t.innerHTML='<i class="fas fa-eye-slash"></i> 绘制关闭',t.className="btn btn-secondary",this.logMessage("info","检测结果绘制已关闭")):(t.innerHTML='<i class="fas fa-paint-brush"></i> 绘制开启',t.className="btn btn-success",this.logMessage("info","检测结果绘制已开启")))}}}function AsyncFunction(...e){return Object.getPrototypeOf(async function(){}).constructor(...e)}function closeModal(e){window.blocklyApp&&window.blocklyApp.closeModal(e)}window.blocklyApp=new BlocklyApp</script></body></html>