Files
Robot_Arm/webapp/workers/ik.worker.js
T

32 lines
1.0 KiB
JavaScript
Raw Normal View History

/* IK 求解 Worker(module 之外的经典 Worker,用 importScripts 取 UMD 求解器)。
协议:主线程先发 {op:'init', cfg} → 回 {op:'ready'};之后 {id, op, args} → {id, r}。
旧实现是从页面 <script> 里刮求解器源码再拼 boot 字符串,那是单文件时代的产物:
拆成 <script src> 之后 textContent 为空,会静默退回主线程同步求解。 */
importScripts('../js/ik-solver.js');
let S = null;
onmessage = e => {
const d = e.data || {};
if (d.op === 'init') {
try {
S = ArmIK.make(d.cfg);
postMessage({ op: 'ready' });
} catch (err) {
postMessage({ id: d.id, r: { __err: 'init 失败: ' + String(err && err.message || err) } });
}
return;
}
if (!S) {
postMessage({ id: d.id, r: { __err: 'worker 未初始化(没收到 init)' } });
return;
}
let r;
try {
r = S[d.op].apply(S, d.args);
} catch (err) {
r = { __err: String(err && err.message || err) };
}
postMessage({ id: d.id, r: r });
};