diff --git a/docs/RELEASE_CONTROL.zh-CN.md b/docs/RELEASE_CONTROL.zh-CN.md index 3ee5d02..f47d15e 100644 --- a/docs/RELEASE_CONTROL.zh-CN.md +++ b/docs/RELEASE_CONTROL.zh-CN.md @@ -7,9 +7,9 @@ | 模式 | 夹持力 | 释放 | | --- | --- | --- | -| `sensitive`(灵敏) | 起步 25%,按切向负载自适应 33~80% | 跟手;振荡/侧触在夹紧期间也生效,法向也可张开 | -| `stable`(较稳定) | 闭合指令即 70%,接触后不锁位置(`grip_contact_hold_position=false`),继续以 70% 朝闭合方向顶住,不再加力 | 接触后 2 s 保护期内不触发任何张开(`release_min_hold_seconds=2.0`,不再额外等法向夹稳);张开只看 Y 切向拟合偏移:保护期结束时记下两侧带符号 Y 的拟合值作基准,之后任一侧拟合值偏离基准 ≥ 0.6 N 连续 6 帧即张开(`release_shear_displacement=0.6`,不取绝对值、回头不取消,基准只在接近时缓慢跟随漂移);法向、切向振荡和侧触/突变/触碰路径都不参与。夹持中夹爪走到闭合极限(物体已脱出)立即张开(`release_object_lost_open=true`,不受保护期限制) | -| `firm`(十分稳定) | 同较稳定档的恒力方式,但闭合指令即 100% | 与较稳定档相同的张开方式,保护期 2.5 s(`release_min_hold_seconds=2.5`),Y 拟合偏移阈值 0.8 N(`release_shear_displacement=0.8`);同样支持物体脱出张开 | +| `sensitive`(灵敏) | 起步 25%,按切向负载自适应 33~80% | 跟手;保护期 0.4 s(`release_min_hold_seconds=0.4`),振荡/侧触在保护期内也生效,法向也可张开;张开速度 80% | +| `stable`(较稳定) | 闭合指令即 70%,接触后不锁位置(`grip_contact_hold_position=false`),继续以 70% 朝闭合方向顶住,不再加力 | 接触后 0.7 s 保护期内不触发任何张开(`release_min_hold_seconds=0.7`,不再额外等法向夹稳);张开只看 Y 切向拟合偏移:保护期结束时记下两侧带符号 Y 的拟合值作基准,之后任一侧拟合值偏离基准 ≥ 0.6 N 连续 4 帧即张开(`release_shear_displacement=0.6`,`release_shear_displacement_samples=4`,张开速度 80%,不取绝对值、回头不取消,基准只在接近时缓慢跟随漂移);法向、切向振荡和侧触/突变/触碰路径都不参与。夹持中夹爪走到闭合极限(物体已脱出)立即张开(`release_object_lost_open=true`,不受保护期限制) | +| `firm`(十分稳定) | 同较稳定档的恒力方式,但闭合指令即 100% | 与较稳定档相同的张开方式,保护期 1.0 s(`release_min_hold_seconds=1.0`),Y 拟合偏移阈值 0.8 N 连续 6 帧(`release_shear_displacement=0.8`,`release_shear_displacement_samples=6`),张开速度 80%;同样支持物体脱出张开 | 满力需要 `force_max` ≥ 100。 @@ -20,7 +20,7 @@ 设置 →「行为模式」页的稳定度条(`grip_behavior_level`,0~100)可整体拖动调整,三挡是固定刻度点:灵敏 = 0,较稳定 = 50,十分稳定 = 100,刻度点上的参数与上表完全一致。 - 0~49:灵敏算法(`grip_behavior_mode=sensitive`)。数值参数(速度、自适应夹持力、保护期、确认帧数、门槛等)按比例从灵敏值过渡到较稳定值;开关类参数和 Y 偏移张开阈值保持灵敏档设置。 -- 50~100:稳定算法(50~99 为 `stable`,100 为 `firm`)。恒力、保护期、Y 拟合偏移阈值按比例从较稳定过渡到十分稳定(例如 75 = 85% / 2.25 s / 0.7 N)。 +- 50~100:稳定算法(50~99 为 `stable`,100 为 `firm`)。恒力、保护期、Y 拟合偏移阈值按比例从较稳定过渡到十分稳定(例如 75 = 85% / 0.85 s / 0.7 N / 5 帧)。 - 闭合触发参数在任何位置都固定为灵敏档。 拖到合适位置后点「保存为新挡位」并命名,挡位立即写入 `gripper.json` 的 `grip_behavior_presets`(`[{name, level}]`),出现在预设下拉框和刻度条上;选中自定义挡位后可删除,默认三挡不能删除。拖动或选择挡位后需点「保存到 gripper.json」才会应用到运行中的控制。 diff --git a/gripper/config/behavior_profiles.py b/gripper/config/behavior_profiles.py index 75feb26..dc38326 100644 --- a/gripper/config/behavior_profiles.py +++ b/gripper/config/behavior_profiles.py @@ -5,9 +5,10 @@ from __future__ import annotations import copy -# sensitive = 灵敏:跟手释放,自适应夹持力 -# stable = 较稳定:接触即 70% 恒力夹持,2 s 保护期,Y 拟合偏移 0.6 N 张开 -# firm = 十分稳定:接触即 100% 恒力夹持,2.5 s 保护期,Y 拟合偏移 0.8 N 张开 +# sensitive = 灵敏:跟手释放,自适应夹持力,0.4 s 保护期 +# stable = 较稳定:接触即 70% 恒力夹持,0.7 s 保护期,Y 拟合偏移 0.6 N 连续 4 帧张开 +# firm = 十分稳定:接触即 100% 恒力夹持,1.0 s 保护期,Y 拟合偏移 0.8 N 连续 6 帧张开 +# 三挡张开速度统一 80%。 # 稳定度 0..100:三挡分别位于 0 / 50 / 100,中间值按比例插值(见 grip_behavior_level_profile)。 GRIP_BEHAVIOR_MODES = ("sensitive", "stable", "firm") @@ -130,20 +131,20 @@ _SENSITIVE_PROFILE = { "release_guard_fast_paths": False, "release_shear_axes": "", "release_shear_displacement": 0.0, - "release_shear_displacement_samples": 6, + "release_shear_displacement_samples": 3, "release_object_lost_open": False, - "release_open_speed": 55, + "release_open_speed": 80, "release_open_accel": 70, "release_open_decel": 70, "release_arm_delay_seconds": 0.28, - "release_min_hold_seconds": 0.65, + "release_min_hold_seconds": 0.4, "release_settle_seconds": 0.12, "release_min_change": 0.08, "release_touch_window_seconds": 0.14, "release_side_touch_change": 0.12, "release_confirm_window_seconds": 0.14, "release_sample_timeout_seconds": 0.2, - "release_confirm_samples": 4, + "release_confirm_samples": 3, "release_slow_confirm_samples": 8, "release_normal_rate": 2.6, "release_shear_rate": 2.4, @@ -181,22 +182,24 @@ _STABLE_PROFILE = { # Full clamp swings Y by several N and flips sign, so onset confirmation # keeps cancelling; open on sustained fitted Y displacement instead. "release_shear_displacement": 0.6, - "release_shear_displacement_samples": 6, + "release_shear_displacement_samples": 4, # The close command keeps pushing: reaching close_pos means the object is gone. "release_object_lost_open": True, - "release_open_speed": 55, + "release_open_speed": 80, "release_open_accel": 70, "release_open_decel": 70, "release_arm_delay_seconds": 0.55, - # Protection: no release of any kind within 2s of contact. - "release_min_hold_seconds": 2.0, + # Protection: no release of any kind within 0.7 s of contact. + "release_min_hold_seconds": 0.7, "release_settle_seconds": 0.22, "release_min_change": 0.12, "release_touch_window_seconds": 0.22, "release_side_touch_change": 0.24, "release_confirm_window_seconds": 0.28, "release_sample_timeout_seconds": 0.3, - "release_confirm_samples": 8, + # Unused by the displacement release; kept equal to its frame count so the + # stability bar scales the sensitive confirm 3 -> 4 instead of toward 8. + "release_confirm_samples": 4, "release_slow_confirm_samples": 12, "release_normal_rate": 4.0, "release_shear_rate": 3.6, @@ -230,8 +233,10 @@ _STABLE_PROFILE = { _FIRM_PROFILE = { **_STABLE_PROFILE, **_constant_force(100), - "release_min_hold_seconds": 2.5, + "release_min_hold_seconds": 1.0, "release_shear_displacement": 0.8, + "release_shear_displacement_samples": 6, + "release_confirm_samples": 6, } GRIP_BEHAVIOR_PROFILES = { diff --git a/gripper/ui/visualizer.py b/gripper/ui/visualizer.py index b75e1ec..371b299 100644 --- a/gripper/ui/visualizer.py +++ b/gripper/ui/visualizer.py @@ -3018,7 +3018,7 @@ class VisualSettingsDialog(QDialog): "adaptive_force_step": "自适应加力步进", "adaptive_force_interval": "自适应加力间隔", "release_arm_delay_seconds": "自运动执行后保护时间 (s)", - "release_min_hold_seconds": "接触法向保护 (s,侧触不等待)", + "release_min_hold_seconds": "夹持保护期 (s,接触后多久才允许张开)", "release_settle_seconds": "脉冲/断流恢复保护上限 (s)", "release_min_change": "突变/轻触释放最小力变化", "release_touch_window_seconds": "新外力起始证据有效期 (s,非等待时间)", @@ -3516,7 +3516,11 @@ class VisualSettingsDialog(QDialog): if mode == "sensitive": parts.append(f"确认 {profile['release_confirm_samples']} 帧") else: - parts.append(f"张开阈值 Y 偏移 {profile['release_shear_displacement']:.2f} N") + parts.append( + f"张开阈值 Y 偏移 {profile['release_shear_displacement']:.2f} N" + f" × {profile['release_shear_displacement_samples']} 帧" + ) + parts.append(f"张开速度 {profile['release_open_speed']}%") return " · ".join(parts) def _on_level_changed(self, level): diff --git a/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz b/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz deleted file mode 100644 index ac70d90..0000000 Binary files a/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz and /dev/null differ diff --git a/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz.sha256 b/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz.sha256 deleted file mode 100644 index 725cb11..0000000 --- a/release/GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz.sha256 +++ /dev/null @@ -1 +0,0 @@ -5675c6f6400b3d9b3d27602c4639c307cb35d0357e658ec5c344aebdc7eba7c0 GripperDemo02-ubuntu22.04-x86_64-lite-20260922.tar.gz diff --git a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz deleted file mode 100644 index 7312164..0000000 --- a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4cea5bb537733c23893471158412e7f224be75fad57f29c17efdc05d2ae53649 -size 200650356 diff --git a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz.sha256 b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz.sha256 deleted file mode 100644 index 14d4e65..0000000 --- a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz.sha256 +++ /dev/null @@ -1 +0,0 @@ -4cea5bb537733c23893471158412e7f224be75fad57f29c17efdc05d2ae53649 GripperDemo02-ubuntu24.04-aarch64-lite-20260928.tar.gz diff --git a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz index 53b92de..c5c3b45 100644 --- a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz +++ b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31be215931dd689ab774c9817196ce5fe5e130dee3230831421871c702bb59ed -size 201228179 +oid sha256:afdec27bff2e0e4d5dc43f1678272eae8456336fd8cf4f0c6e0aee260abd8fa7 +size 201211227 diff --git a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz.sha256 b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz.sha256 index f0e5c49..077ad9f 100644 --- a/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz.sha256 +++ b/release/GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz.sha256 @@ -1 +1 @@ -31be215931dd689ab774c9817196ce5fe5e130dee3230831421871c702bb59ed GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz +afdec27bff2e0e4d5dc43f1678272eae8456336fd8cf4f0c6e0aee260abd8fa7 GripperDemo02-ubuntu24.04-aarch64-lite-20261008.tar.gz diff --git a/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz b/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz deleted file mode 100644 index 61a202d..0000000 Binary files a/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz and /dev/null differ diff --git a/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz.sha256 b/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz.sha256 deleted file mode 100644 index b4999b7..0000000 --- a/release/GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz.sha256 +++ /dev/null @@ -1 +0,0 @@ -8307c8fe39a850275c09b7a4092584216b8ee1bf7891ec0da12737604e7905d0 GripperDemo02-ubuntu26.04-x86_64-lite-20260922.tar.gz diff --git a/release/GripperDemo02-windows-x64-lite-20260922.zip b/release/GripperDemo02-windows-x64-lite-20260922.zip deleted file mode 100644 index caa7315..0000000 --- a/release/GripperDemo02-windows-x64-lite-20260922.zip +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f66fb92f4f3f17d129106fd436aeb56d5019f3d36f9dd81ae8a99ce847d6a69 -size 186778589 diff --git a/release/GripperDemo02-windows-x64-lite-20260922.zip.sha256 b/release/GripperDemo02-windows-x64-lite-20260922.zip.sha256 deleted file mode 100644 index b395c36..0000000 --- a/release/GripperDemo02-windows-x64-lite-20260922.zip.sha256 +++ /dev/null @@ -1 +0,0 @@ -5f66fb92f4f3f17d129106fd436aeb56d5019f3d36f9dd81ae8a99ce847d6a69 GripperDemo02-windows-x64-lite-20260922.zip