Files
test/gripper_control_02/README.md
T
cheng cbd8683429 01
2026-06-08 17:56:09 +08:00

3.7 KiB

Gripper Control 02

夹爪02是新的展示程序,和原来的定时开合逻辑分开。它不是定时循环开合;程序只是常驻监听单侧触发,每次触发后执行一次“闭合夹住 -> 监测变化 -> 直接张开”的流程。

展示流程

  1. 程序启动后,夹爪先张开。
  2. 程序等待任意一侧触觉传感器感受到法向力或切向力。
  3. 展示时,把物体从某个侧边扫一下,触发单侧力变化。
  4. 触发后夹爪开始闭合,你把物体移动到中间。
  5. 闭合过程中检测到物体后,切到低力并保持当前位置。
  6. 像 01 一样进入 gripping,慢慢加力到 HOLD_FORCE
  7. 进入 hold_check 后记录夹持参考力。
  8. 后续法向力或切向力变化超过阈值,夹爪直接张开到 OPEN_POS
  9. 张开后进入 open_recover,保持张开并等待传感器力清空。
  10. 法向和切向读数都低于恢复阈值并稳定后,才回到 open_wait 等待下一次单侧扫过触发。

运行

从项目根目录运行:

conda activate py311
python -m gripper_control_02.main

只看逻辑、不打开串口:

python -m gripper_control_02.main --dry-run

默认配置文件:

gripper_control_02\config\gripper_demo_02.py

关键配置

  • TRIGGER_NORMAL_FORCE: 单侧法向力触发阈值。
  • TRIGGER_SHEAR_FORCE: 单侧切向力触发阈值。
  • GRIP_NORMAL_FORCE: 夹住时左右接触阈值。
  • GRIP_REQUIRES_BOTH: 是否必须左右都接触才算夹住。
  • GRIP_START_FORCE: 检测到物体后先切到的低力。
  • FORCE_RAMP_STEP: 慢慢加力时每次增加多少 force_pct。
  • FORCE_RAMP_INTERVAL: 慢慢加力时两次加力的间隔。
  • HOLD_FORCE: 慢慢加力到这个值后进入 hold_check
  • GRIP_SETTLE_SECONDS: 夹住后等待稳定多久再记录参考力。
  • RELEASE_NORMAL_CHANGE: 夹住后法向力变化超过它就松开。
  • RELEASE_SHEAR_CHANGE: 夹住后切向力变化超过它就松开。
  • REARM_SECONDS: 张开后最短等待时间,防止刚松开马上又误触发。
  • RECOVER_NORMAL_FORCE: 张开恢复时允许重新触发的最大法向残余力。
  • RECOVER_SHEAR_FORCE: 张开恢复时允许重新触发的最大切向残余力。
  • RECOVER_STABLE_SECONDS: 力清空后需要连续稳定多久,才重新等待触发。

日志字段

  • L/R: 左右法向力,单位 N。
  • maxN: 左右法向力最大值,单位 N。
  • shear: 左右切向力最大值,单位 N。
  • trigger: 是否满足单侧触发条件。
  • grip_contact: 是否满足夹住接触条件。
  • dN: 夹住后当前法向力相对参考值的最大变化,单位 N。
  • dShear: 夹住后当前切向力相对参考值的变化,单位 N。
  • state: 当前状态。
  • hold_pos: 夹住后保持的位置。
  • force_pct: 当前夹爪目标力百分比。
  • action: 当前动作。

状态说明

  • open_wait: 夹爪张开,等待任意单侧触发。
  • closing: 单侧触发后正在闭合,等待检测到物体。
  • gripping: 检测到物体后低力保持当前位置,并慢慢加力。
  • hold_check: 已夹住并记录参考力,监测法向/切向变化;变化超过阈值会直接张开。
  • open_recover: 已经张开到初始位置,正在等待法向/切向残余力清空;这个状态不会闭合夹爪。

常见动作说明

  • force-change-release-open: 检测到夹住后的法向或切向变化,已经发出张开命令。
  • open-recover-wait-force-clear: 夹爪保持张开,但传感器还有残余力,不允许重新闭合。
  • open-recover-stabilizing: 力已经低于恢复阈值,正在等待稳定时间。
  • open-ready: 力已经清空并稳定,重新进入等待下一次扫过触发。