仿真场景:台面开 90mm 通槽,让工件的贯通孔真能穿过

现象(非常隐蔽,容易被误判成阈值问题):
    通止规的通端长 30mm,工件是 12mm 厚板、孔是**贯通孔** —— 真机上通端要
    穿过板再伸出去 18mm,靠**台肩落到工件上表面**那一下判"到底了"。
    但台面原本是一整块、工件平放在上面 → 孔下方被堵死,规只能进 12mm 就顶
    在台面上。于是 S07 一路压到上限都等不到台肩落面的大接触力,报
    "下探 N mm 都没触发接触判据"然后 ABORT。
    力也不是完全没有(顶台面时切向读 30~45N),所以看起来像"阈值调太高"。

修法:台面沿 Y 开一道 90mm 宽通槽(|y| ≤ 45mm),南北两块各留 5mm 承压面
(工件 100mm 宽,跨在槽上;板是刚体只受重力,够用)。桌腿视觉同步分两块,
别把通槽在画面上堵回去。槽**只开在工件孔位所在的 Y 带**,台面高度一点没动
→ 相机距离、孔检测像素门槛、site 的悬停高度全都不用改。

顺带:contact_max_depth_mm 25 → 35。判"到底了"的是台肩,而台肩在规尖上方
30mm(通端长 30),25mm 的上限**根本到不了**,只会白报超时。
35 = 30(台肩落面)+ 5(对位残差/板厚公差余量)。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
arm_dev
2026-09-24 14:43:02 +08:00
parent 811e71df1f
commit ddf30e57f8
2 changed files with 203 additions and 10 deletions
+65 -7
View File
@@ -115,8 +115,29 @@
<pose>0.55 0 0 0 0 0</pose>
<link name="top">
<pose>0 0 0.375 0 0 0</pose>
<collision name="collision">
<geometry><box><size>0.8 1.2 0.05</size></box></geometry>
<!-- ===================================================================
台面沿 Y 留一道 90mm 宽的通槽(|y| ≤ 45mm),台面分成南北两块。
为什么必须留这道槽(实测踩过,现象非常隐蔽):
通止规的**通端**长 30mm,而工件是 12mm 厚的板、板上的孔是
**贯通孔** —— 真机上规的通端要穿过板再伸出去 18mm,靠**台肩**
落到工件上表面来判"到底了"。
但台面原本是一整块,工件平放在上面 → 孔的下方被台面堵死,
规只能进去 12mm 就顶在台面上。于是:
S07 一路下压到上限(25mm)都等不到台肩落面的大接触力,
报"下探 25mm 都没触发接触判据"然后 ABORT。
力也不是完全没有(顶台面时切向读 30~45N),所以看起来像
"阈值调太高",很容易被误判成传感器/阈值问题。
槽只开在工件孔位所在的 Y 带(孔在 y = ±29mm、φ7 见方),
不抬高工件、不动台面高度 → 相机距离、孔检测像素门槛、
site.yaml 里的悬停高度全都不用改。
南北两块各留 y ∈ [±45, ±600]mm,工件(100mm 宽)跨在槽上,
两侧各有 5mm 承压面 —— 板是刚体、只受重力,够用。
=================================================================== -->
<collision name="collision_south">
<pose>0 -0.3225 0 0 0 0</pose>
<geometry><box><size>0.8 0.555 0.05</size></box></geometry>
<surface>
<friction>
<ode><mu>0.8</mu><mu2>0.8</mu2></ode>
@@ -131,19 +152,56 @@
</contact>
</surface>
</collision>
<visual name="visual">
<geometry><box><size>0.8 1.2 0.05</size></box></geometry>
<collision name="collision_north">
<pose>0 0.3225 0 0 0 0</pose>
<geometry><box><size>0.8 0.555 0.05</size></box></geometry>
<surface>
<friction>
<ode><mu>0.8</mu><mu2>0.8</mu2></ode>
</friction>
<contact>
<ode>
<kp>1e7</kp>
<kd>1e4</kd>
<max_vel>0.01</max_vel>
<min_depth>0.001</min_depth>
</ode>
</contact>
</surface>
</collision>
<visual name="visual_south">
<pose>0 -0.3225 0 0 0 0</pose>
<geometry><box><size>0.8 0.555 0.05</size></box></geometry>
<material>
<ambient>0.45 0.4 0.35 1</ambient>
<diffuse>0.55 0.5 0.42 1</diffuse>
</material>
</visual>
<visual name="visual_north">
<pose>0 0.3225 0 0 0 0</pose>
<geometry><box><size>0.8 0.555 0.05</size></box></geometry>
<material>
<ambient>0.45 0.4 0.35 1</ambient>
<diffuse>0.55 0.5 0.42 1</diffuse>
</material>
</visual>
</link>
<!-- 四条腿,纯视觉:碰撞只保留台面,省掉不必要的接触计算 -->
<!-- 桌腿:纯视觉(碰撞只保留台面,省掉不必要的接触计算)。
和台面一样沿 Y 分成两块,别把上面那道通槽在画面上堵回去 ——
否则"孔是通的"这件事在预览里看不出来,容易被当成模型没改。 -->
<link name="legs">
<pose>0 0 0.175 0 0 0</pose>
<visual name="visual">
<geometry><box><size>0.7 1.1 0.35</size></box></geometry>
<visual name="visual_south">
<pose>0 -0.325 0 0 0 0</pose>
<geometry><box><size>0.7 0.45 0.35</size></box></geometry>
<material>
<ambient>0.3 0.3 0.3 1</ambient>
<diffuse>0.35 0.35 0.35 1</diffuse>
</material>
</visual>
<visual name="visual_north">
<pose>0 0.325 0 0 0 0</pose>
<geometry><box><size>0.7 0.45 0.35</size></box></geometry>
<material>
<ambient>0.3 0.3 0.3 1</ambient>
<diffuse>0.35 0.35 0.35 1</diffuse>