克隆下来必须带上正在用的视觉权重和本机 site.yaml,否则感知只能指到一台机器上的路径,别人起不来。

顶视迁臂改走厂家 MoveL,D405 框心对准后再对孔;夹爪停在 caught 时 open 不再把相同目标当成已经张开,init 会真的回零。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
arm_dev
2026-10-12 17:08:43 +08:00
parent b903161113
commit f882c4309c
187 changed files with 22898 additions and 104 deletions
+8 -1
View File
@@ -903,6 +903,7 @@ def servo_overrides(data: dict) -> dict:
"ee_hold_kp", "ee_w_max",
"lock_hold_sec",
"lock_still_sec",
"wrist_align_sec",
"lock_still_move_m",
"a_max", "max_qdot", "damping",
"vel_lpf_alpha", "dq_window_size", "traj_stream_hz", "exec_horizon_sec",
@@ -934,7 +935,12 @@ def servo_overrides(data: dict) -> dict:
if "lock_still_sec" not in servo:
raise RuntimeError(
"servo.lock_still_sec 必须显式写"
"(D405 跟住后法兰静止多久才进二阶段)。不许用代码默认 3。"
"(D435 到位后法兰停稳多久才交回 D405)。不许用代码默认 3。"
)
if "wrist_align_sec" not in servo:
raise RuntimeError(
"servo.wrist_align_sec 必须显式写"
"(D405 框心对准多久才进对孔)。不许用代码默认 1。"
)
if "lock_still_move_m" not in servo:
raise RuntimeError(
@@ -942,6 +948,7 @@ def servo_overrides(data: dict) -> dict:
"(静止判据的法兰 XY 位移上限)。不许用代码默认 15mm。"
)
out["lock_still_sec"] = float(servo["lock_still_sec"])
out["wrist_align_sec"] = float(servo["wrist_align_sec"])
out["lock_still_move_m"] = float(servo["lock_still_move_m"])
out["overhead_k0_topic"] = "visual_servo/overhead_k0"
out["wrist_conf_topic"] = "visual_servo/wrist_conf"
+19
View File
@@ -0,0 +1,19 @@
"""D435 一次性要走厂家 MoveL 时,先认出谁占着 RDK。
`ros2_control_node` 和真机 `stack.launch` 占着唯一的 RDK 连接。
感知、伺服、本脚本自己不算。误伤它们会把正在推理的进程一起杀掉。
"""
from __future__ import annotations
def is_control_stack_cmd(cmd: str) -> bool:
"""这条命令行是不是占着 RDK 的真机控制栈。"""
text = cmd or ""
if "rdk_release_movel" in text:
return False
if "ros2_control_node" in text:
return True
if "stack.launch.py" in text and "backend:=real" in text:
return True
return False