真机落地前的仿真补齐:夹持/腕力/真值位姿,让仿真能验证 S07–S09
这批是 09-24 那轮仿真工作的收尾,一直没提交。内容按目的分四块: 1) 仿真真能「夹住」工件 sim_grasp_lock:给规与夹爪之间加接触锁(默认关,run_gauge_assembly --sim 才开)。 没有它时仿真里规只靠摩擦,S08 棘轮一转就滑出指间,于是把「仿真不真」误读成 「力判据不对」。新增 test_sim_grasp_lock.py。 2) 腕部力传感器进仿真 sim_wrist_ft(+ config/wrist_ft.yaml):S07 的首选判据是腕部 FT 的轴向突变, 而仿真里以前根本没有腕部力,S07 只能退到触觉兜底,两套判据从没在同一场景下比过。 现在两条通道都在,接触判定可对照。 3) 真值位姿可查(不再靠猜) sim_live_pose / sim_pose_service:把 Gazebo 里刚体的实测位姿发布出来, stage2 的真值路径按**实测**位姿算孔位,而不是按场景文件里的标称位姿。 顺带把真值孔位的推导(truth_holes)独立出来并补测。 4) 工具几何成为可配置项 config/sim_tool_geometry.yaml + stage2 的 tool_tip_below_flange_m 启动参数: 仿真里规会在指间下滑,工具长每次装夹都不同(实测见过 243/254mm), 悬停高度与 S07 下探预算必须按实测值算,不能再写死。 应用层同时跟进:gauge_fsm / gauge_config 把「悬停时工具尖端入没入工件」的判据 (hover_z_guard)与拖件判定(drag_verdict)收成纯函数并补测;stage3 搜孔、 site 导出、run_gauge_assembly 与若干文档同步。 新增 test_gauge_exit_lift / test_gauge_gripper_client / test_node_handler_collisions。 测试:全仓库 1085 passed。
This commit is contained in:
@@ -116,7 +116,7 @@
|
||||
<link name="top">
|
||||
<pose>0 0 0.375 0 0 0</pose>
|
||||
<!-- ===================================================================
|
||||
台面沿 Y 留一道 90mm 宽的通槽(|y| ≤ 45mm),台面分成南北两块。
|
||||
台面沿 X 留一道 36mm 宽的通槽(|y| ≤ 18mm),台面分成南北两块。
|
||||
|
||||
为什么必须留这道槽(实测踩过,现象非常隐蔽):
|
||||
通止规的**通端**长 30mm,而工件是 12mm 厚的板、板上的孔是
|
||||
@@ -129,15 +129,34 @@
|
||||
力也不是完全没有(顶台面时切向读 30~45N),所以看起来像
|
||||
"阈值调太高",很容易被误判成传感器/阈值问题。
|
||||
|
||||
槽只开在工件孔位所在的 Y 带(孔在 y = ±29mm、φ7 见方),
|
||||
不抬高工件、不动台面高度 → 相机距离、孔检测像素门槛、
|
||||
site.yaml 里的悬停高度全都不用改。
|
||||
南北两块各留 y ∈ [±45, ±600]mm,工件(100mm 宽)跨在槽上,
|
||||
两侧各有 5mm 承压面 —— 板是刚体、只受重力,够用。
|
||||
===================================================================
|
||||
槽宽:36mm(|y| ≤ 18mm),**不是**初版的 90mm(2026-09-24 收窄,
|
||||
代价是一整轮排查)
|
||||
===================================================================
|
||||
初版开的是 90mm 宽(|y| ≤ 45mm),理由是"工件上两个孔所在的 Y 带
|
||||
都盖住"。但工件只有 100mm 宽(y 方向),跨在 90mm 的槽上时
|
||||
**每侧只剩 5mm 承压面** —— 静力学上勉强平衡,一有横向扰动就翻。
|
||||
实际后果(本次先看到的现象):
|
||||
工件掉进槽里、落到地面(z≈0),而 `perception.source=truth`
|
||||
仍然按 scene.yaml 里的**名义位姿**把孔投到像素上 ——
|
||||
于是 S05 拿"名义孔位"的像素去查**真实**深度图:孔位处看到的是
|
||||
槽底/地面(实测 0.6m,而工件面其实只有 0.21m),
|
||||
三角化出来的 k1/k2 间距 169mm(真值 58mm),被间距门槛丢掉,
|
||||
精拍连丢 9 拍 → S05 超时 ABORT。
|
||||
现象像"检测/阈值坏了",根因却是**工件不在它该在的地方**。
|
||||
|
||||
18mm 是怎么定的(只跟"规的通端要能过"有关,与两孔间距无关):
|
||||
通端 φ6(半径 3mm),孔 φ7(半径 3.5mm)→ 规占 |y| ≤ 3mm;
|
||||
留 15mm 给定位误差(S05 对准 tol 0.7mm、工件摆放偏差、yaw 残余)。
|
||||
承压面因此从 5mm 变成 32mm(y ∈ [±18, ±50]mm),工件不再翻得进去。
|
||||
注意**方向**:两孔连线沿工件局部 X(模型里 insert_*_ring 在 x=±29mm),
|
||||
场景里 yaw=0 ⇒ 两孔世界 y 都是 0。所以槽只要在 y=0 附近开一条
|
||||
沿 X 的长槽就够,不需要覆盖整个 ±29mm。
|
||||
`scripts/check_sim_scene.py` 会核对"孔位落在槽的开口范围内"这一条。
|
||||
=================================================================== -->
|
||||
<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>
|
||||
<pose>0 -0.309 0 0 0 0</pose>
|
||||
<geometry><box><size>0.8 0.582 0.05</size></box></geometry>
|
||||
<surface>
|
||||
<friction>
|
||||
<ode><mu>0.8</mu><mu2>0.8</mu2></ode>
|
||||
@@ -153,8 +172,8 @@
|
||||
</surface>
|
||||
</collision>
|
||||
<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>
|
||||
<pose>0 0.309 0 0 0 0</pose>
|
||||
<geometry><box><size>0.8 0.582 0.05</size></box></geometry>
|
||||
<surface>
|
||||
<friction>
|
||||
<ode><mu>0.8</mu><mu2>0.8</mu2></ode>
|
||||
@@ -170,16 +189,16 @@
|
||||
</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>
|
||||
<pose>0 -0.309 0 0 0 0</pose>
|
||||
<geometry><box><size>0.8 0.582 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>
|
||||
<pose>0 0.309 0 0 0 0</pose>
|
||||
<geometry><box><size>0.8 0.582 0.05</size></box></geometry>
|
||||
<material>
|
||||
<ambient>0.45 0.4 0.35 1</ambient>
|
||||
<diffuse>0.55 0.5 0.42 1</diffuse>
|
||||
|
||||
Reference in New Issue
Block a user