From a70724e8a93951e1ecbce9fd93572c31a8611f50 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Mon, 28 Sep 2026 22:09:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9F=A5=E7=9C=8B=E5=99=A8=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A7=BF=E6=80=81=E6=8E=A7=E5=88=B6=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E4=B8=8E=E7=AE=AD=E5=A4=B4=E6=8B=96=E6=8B=BD=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=EF=BC=88TCP=E4=BD=8D=E7=BD=AE+=E5=B7=A5=E5=85=B7=E5=A7=BF?= =?UTF-8?q?=E6=80=816=E8=87=AA=E7=94=B1=E5=BA=A6=E8=81=94=E5=90=88IK?= =?UTF-8?q?=EF=BC=89=EF=BC=8CIK=E6=8E=A7=E5=88=B6=E6=9D=A1=E6=94=B9?= =?UTF-8?q?=E4=B8=A4=E8=A1=8C=EF=BC=8C=E8=A1=A5=E5=85=85=E5=AE=9A=E4=BD=8D?= =?UTF-8?q?=E5=9B=BE=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - arm-ik-solver.js:位置闭式支附加 θ6 滚转解算(N=R5^T·R_des,工具轴与 θ6 无关的结构);达标带(e≤1°)按 e 升序取种子 + escalating(惩罚×100 重扫)+ (θ4,θ5) 二维牛顿收口,分层保证"姿态达标再谈省关节角";超可达空间走 6 维阻尼最小二乘(位置 mm+姿态 deg 联合)兜底;自检补姿态重构 - ik-glue.js:姿态控制开关 + 方位/仰角/滚转输入 + 取当前/垂直向下;目标点处方向箭头(弧球法调指向)与粉色侧球/箭杆(调滚转),就近仲裁不抢黄球拖拽;面板显示目标/实际姿态与残差(闭式/场景图双口径) - 界面语义统一为工具朝外法向,入栈绕工具 x 翻 180° 换算求解器内部约定 --- src/viewer_tpl.html | 76 ++- web/arm-ik-solver.js | 484 +++++++++++++++-- web/ik-glue.js | 331 +++++++++++- web/index.html | 891 ++++++++++++++++++++++++++++--- web/机器人手臂3D查看器.html | 891 ++++++++++++++++++++++++++++--- 定位图/姿态控制_两行控制条.png | Bin 0 -> 126134 bytes 定位图/姿态控制_求解到达.png | Bin 0 -> 116134 bytes 定位图/姿态控制_箭头拖拽.png | Bin 0 -> 126502 bytes 定位图/姿态控制_箭头方向核对.png | Bin 0 -> 127232 bytes 机器人手臂3D查看器.html | 891 ++++++++++++++++++++++++++++--- 10 files changed, 3260 insertions(+), 304 deletions(-) create mode 100644 定位图/姿态控制_两行控制条.png create mode 100644 定位图/姿态控制_求解到达.png create mode 100644 定位图/姿态控制_箭头拖拽.png create mode 100644 定位图/姿态控制_箭头方向核对.png diff --git a/src/viewer_tpl.html b/src/viewer_tpl.html index 449c8ff..61bb2d9 100644 --- a/src/viewer_tpl.html +++ b/src/viewer_tpl.html @@ -97,10 +97,11 @@ small{color:var(--dim)} .hudlink{pointer-events:auto;cursor:pointer;color:var(--ac);text-decoration:underline;margin-left:8px} @media (max-width:760px){#bomTab{top:auto;bottom:36px}#bomDock{top:46px;bottom:26px}} -/* ===================== IK 控制条(新增) ===================== */ -#ikbar{grid-column:1/-1;display:flex;align-items:center;gap:6px;padding:0 10px;height:40px; - background:linear-gradient(180deg,#1c212b,#161922);border-bottom:1px solid var(--line); - overflow-x:auto;overflow-y:hidden;white-space:nowrap;flex-wrap:nowrap} +/* ===================== IK 控制条(两行:目标+姿态 / 模式+状态) ===================== */ +#ikbar{grid-column:1/-1;display:flex;flex-direction:column;gap:4px;padding:5px 10px; + background:linear-gradient(180deg,#1c212b,#161922);border-bottom:1px solid var(--line)} +#ikbar .ikrow{display:flex;align-items:center;gap:6px;min-height:26px; + overflow-x:auto;overflow-y:hidden;white-space:nowrap} #ikbar .ik-t{color:var(--ac);font-weight:700;letter-spacing:.8px;flex:none;font-size:11.5px; border:1px solid var(--ac);border-radius:4px;padding:1px 6px} #ikbar .lb{color:var(--dim);flex:none;font-size:12px} @@ -114,6 +115,9 @@ small{color:var(--dim)} #ikbar .good{color:var(--ok)} #ikbar .bad{color:#ff6b6b} #ikbar .hi{color:var(--warn)} #ikSolve{background:#1d3f74;border-color:var(--ac);color:#fff;font-weight:600} #ikSolve:hover{background:#24508f} +#ikPose.on{background:#3a2b63;border-color:#a06bff;color:#fff;font-weight:600} +#ikPoseBox{display:none;align-items:center;gap:6px} +#ikPoseBox input[type=number]{width:54px} /* ===================== IK 结果面板(左栏顶部) ===================== */ #ikpanel{margin:0 0 10px;border:1px solid var(--line);border-radius:6px;background:#141821;padding:7px 8px} @@ -178,9 +182,9 @@ body.motion #treeBlock{display:none!important} #left{grid-row:3} #stage{grid-row:3} #app>footer{grid-row:4} -/* BOM 抽屉:运动模拟多一条 IK 控制条,需整体下移 40px */ +/* BOM 抽屉:运动模拟多一条两行 IK 控制条(实测 75px),需整体下移 */ #bomDock{top:46px} #bomTab{top:64px} -body.motion #bomDock{top:86px} body.motion #bomTab{top:100px} +body.motion #bomDock{top:124px} body.motion #bomTab{top:140px} @media (max-width:760px){ #bomTab,body.motion #bomTab{top:auto;bottom:36px} #bomDock,body.motion #bomDock{top:86px;bottom:26px} @@ -212,6 +216,7 @@ body.motion #bomDock{top:86px} body.motion #bomTab{top:100px}
+
IK 目标点 X Y @@ -228,22 +233,33 @@ body.motion #bomDock{top:86px} body.motion #bomTab{top:100px} - + + + + 方位 + 仰角 + 滚转 + + + +
+
- 拖动黄球 = 移动目标(Shift 约束竖直);松手自动求解 + 拖黄球 = 移动目标(Shift 仅上下);拖箭头 = 调工具轴指向;拖箭杆或粉球 = 滚转;松手自动求解 —
+