feat: set right-B point gesture hold to one second

This commit is contained in:
LengedZhao
2026-08-08 16:38:49 +08:00
parent 29030c0b25
commit 6bf610295b
8 changed files with 27 additions and 27 deletions

View File

@@ -43,8 +43,8 @@ TS1P 同构臂
- 同构臂当前的一维手部开合量以机器人实测默认打开姿态为 0 端点,并按厂家 xTELE 的
BrainCoRevo2 保守“常规”抓握姿态作为 1 端点映射到六电机;
若 xTELE 后续直接输出六维归一化位置,会自动使用六维位置。
- 右手指向手势:遥操已启动且灵巧手反馈健康时,连续长按右 `B` 3 秒开启;松开
至少 `0.5 s` 后,再连续长按右 `B` 3 秒关闭。首次启动和每个新遥操会话都必须先
- 右手指向手势:遥操已启动且灵巧手反馈健康时,连续长按右 `B` 1 秒开启;松开
至少 `0.5 s` 后,再连续长按右 `B` 1 秒关闭。首次启动和每个新遥操会话都必须先
稳定松开 B,保持同一次按压不会反复切换。计时未满、中途松开、输入畸形或反馈
中断均不触发;计时期间冻结右手最后一条命令,左手和双臂仍照常跟随。
- 指向只覆盖右手。目标采用工控机 xTELE `GestureController` 的 BrainCoRevo2 第 2 号

View File

@@ -111,12 +111,12 @@ closed_normalized = [0.9, 0.5, 0.45, 0.52, 0.52, 0.45]
# Right B owns a robot-side, release-guarded pointing gesture while a teleop
# session is armed. Both activation and deactivation require one continuous
# 3-second hold, separated by at least 0.5 seconds of stable release. A new
# 1-second hold, separated by at least 0.5 seconds of stable release. A new
# session is always release-locked. The pose is xTELE GestureController's
# BrainCoRevo2 gesture 2 ("single index finger"), state 0, in motor order:
# thumb bend, thumb rotation, index, middle, ring, little.
right_b_point_gesture_enabled = true
right_b_point_gesture_hold_seconds = 3.0
right_b_point_gesture_hold_seconds = 1.0
right_b_point_gesture_release_seconds = 0.5
right_b_point_pose_normalized = [0.2, 0.688, 0.0, 0.98, 0.98, 0.98]

View File

@@ -16,7 +16,7 @@ POINT_POSE = [0.2, 0.688, 0.0, 0.98, 0.98, 0.98]
class GestureToggleTest(unittest.TestCase):
def setUp(self) -> None:
self.gesture = GestureToggle(hold_seconds=3.0, release_seconds=0.5)
self.gesture = GestureToggle(hold_seconds=1.0, release_seconds=0.5)
self.gesture.new_session()
def stable_release(self, started_at: float) -> float:
@@ -44,7 +44,7 @@ class GestureToggleTest(unittest.TestCase):
self.assertFalse(self.gesture.active)
self.assertTrue(self.gesture.freeze_right_hand)
def test_continuous_three_second_holds_toggle_once_each(self) -> None:
def test_continuous_one_second_holds_toggle_once_each(self) -> None:
released_at = self.stable_release(0.0)
self.assertFalse(
self.gesture.update(
@@ -56,7 +56,7 @@ class GestureToggleTest(unittest.TestCase):
)
self.assertFalse(
self.gesture.update(
released_at + 3.0,
released_at + 1.0,
armed=True,
input_healthy=True,
pressed=True,
@@ -64,7 +64,7 @@ class GestureToggleTest(unittest.TestCase):
)
self.assertTrue(
self.gesture.update(
released_at + 3.01,
released_at + 1.01,
armed=True,
input_healthy=True,
pressed=True,
@@ -93,7 +93,7 @@ class GestureToggleTest(unittest.TestCase):
)
self.assertTrue(
self.gesture.update(
second_release + 3.02,
second_release + 1.02,
armed=True,
input_healthy=True,
pressed=True,
@@ -115,7 +115,7 @@ class GestureToggleTest(unittest.TestCase):
self.assertEqual(self.gesture.state, "holding_start")
self.gesture.update(
released_at + 2.0,
released_at + 0.8,
armed=True,
input_healthy=True,
pressed=False,
@@ -124,14 +124,14 @@ class GestureToggleTest(unittest.TestCase):
self.assertTrue(self.gesture.require_release)
self.assertTrue(self.gesture.freeze_right_hand)
self.gesture.update(
released_at + 2.49,
released_at + 1.29,
armed=True,
input_healthy=True,
pressed=False,
)
self.assertTrue(self.gesture.require_release)
self.gesture.update(
released_at + 2.5,
released_at + 1.3,
armed=True,
input_healthy=True,
pressed=False,
@@ -148,7 +148,7 @@ class GestureToggleTest(unittest.TestCase):
pressed=True,
)
self.gesture.update(
released_at + 2.99,
released_at + 0.99,
armed=True,
input_healthy=True,
pressed=None,
@@ -156,7 +156,7 @@ class GestureToggleTest(unittest.TestCase):
self.assertTrue(self.gesture.require_release)
self.assertIsNone(self.gesture.hold_started_at)
released_at = self.stable_release(released_at + 3.0)
released_at = self.stable_release(released_at + 1.0)
self.gesture.update(
released_at + 0.01,
armed=True,
@@ -164,7 +164,7 @@ class GestureToggleTest(unittest.TestCase):
pressed=True,
)
self.gesture.update(
released_at + 2.99,
released_at + 0.99,
armed=True,
input_healthy=False,
pressed=True,
@@ -183,14 +183,14 @@ class GestureToggleTest(unittest.TestCase):
)
self.assertTrue(
self.gesture.update(
released_at + 3.02,
released_at + 1.02,
armed=True,
input_healthy=True,
pressed=True,
)
)
self.gesture.update(
released_at + 3.03,
released_at + 1.03,
armed=True,
input_healthy=False,
pressed=True,
@@ -207,7 +207,7 @@ class GestureToggleTest(unittest.TestCase):
pressed=True,
)
self.gesture.update(
released_at + 3.02,
released_at + 1.02,
armed=True,
input_healthy=True,
pressed=True,
@@ -215,7 +215,7 @@ class GestureToggleTest(unittest.TestCase):
self.assertTrue(self.gesture.active)
self.assertFalse(
self.gesture.update(
released_at + 3.03,
released_at + 1.03,
armed=False,
input_healthy=True,
pressed=True,

View File

@@ -406,7 +406,7 @@ class LocalTeleopBridge(Node):
)
self.right_point_gesture = GestureToggle(
hold_seconds=float(
self.hands_cfg.get("right_b_point_gesture_hold_seconds", 3.0)
self.hands_cfg.get("right_b_point_gesture_hold_seconds", 1.0)
),
release_seconds=float(
self.hands_cfg.get("right_b_point_gesture_release_seconds", 0.5)