Files
ctag2f-90d-sdk/README.md
T
2026-07-03 11:29:32 +08:00

8.5 KiB
Raw Blame History

Gripper

程序只是常驻监听单侧触发,每次触发后执行一次“闭合夹住 -> 监测变化 -> 直接张开”的流程。

展示流程

  1. 程序启动后,夹爪先张开。
  2. 程序等待任意一侧触觉传感器感受到法向力或切向力。
  3. 展示时,把物体从某个侧边扫一下,触发单侧力变化。
  4. 触发后夹爪开始闭合,你把物体移动到中间。
  5. 闭合过程中检测到物体后,切到低力并保持当前位置。
  6. 像 01 一样进入 gripping,先慢慢加力到基础 HOLD_FORCE。
  7. 进入 hold_check 后,根据切向力估计物体负载;切向力越大,目标夹紧力越高,并按小步进继续补力。
  8. 自适应补力停止并稳定 RELEASE_ARM_DELAY_SECONDS 后,重新记录释放参考力,才开始检测人取物松开。
  9. 后续法向力或切向力变化超过阈值,夹爪直接张开到 OPEN_POS。
  10. 张开后进入 open_recover,保持张开并等待恢复条件。
  11. 夹爪回到 OPEN_POS 初始点位,或法向/切向读数都低于恢复阈值并稳定后,继续休息至少 REARM_SECONDS。
  12. 休息结束后才回到 open_wait 并重新武装;休息期间不管有没有物体扫过,都不会闭合。

运行

从项目根目录运行:

conda activate py311
python -m gripper.main

只看逻辑、不打开串口:

python -m gripper.main --dry-run

PyQt 可视化展示:

python -m gripper.visualizer

窗口模式运行:

python -m gripper.visualizer --windowed

兼容入口:

python -m gripper.visualizer

默认配置文件:

config\gripper.json

打包

先在 py311 环境里安装 PyInstaller:

conda activate py311
pip install pyinstaller

然后从项目根目录运行:

build\build_exe.bat

输出文件在:

dist\GripperDemo02\GripperDemo02.exe

打包完成后,脚本会把 config 和 sdk 复制到 exe 同级目录:

dist\GripperDemo02\config
dist\GripperDemo02\sdk

现场修改参数时,直接改 exe 同级的 config\gripper.json。

关键配置

  • trigger_normal_force: 单侧法向力触发阈值。
  • trigger_shear_force: 单侧切向力触发阈值。
  • trigger_clear_stable_seconds: 张开恢复后,触发力必须清掉并稳定多久,才允许下一次扫过触发。
  • grip_normal_force: 夹住时左右接触阈值。
  • grip_requires_both: 是否必须左右都接触才算夹住。
  • grip_start_force: 检测到物体后先切到的低力。
  • force_ramp_step: 慢慢加力时每次增加多少 force_pct。
  • force_ramp_interval: 慢慢加力时两次加力的间隔。
  • hold_force: 慢慢加力到这个值后进入 hold_check。
  • grip_settle_seconds: 夹住后等待稳定多久再记录参考力。
  • adaptive_grip_enabled: 是否启用按切向力估计负载并自适应补夹紧力。
  • adaptive_shear_start_force: 切向力低于这个值时,认为是轻物体,只使用最小目标力。
  • adaptive_shear_full_force: 切向力达到这个值时,认为负载较大,目标力加到最大目标力。
  • adaptive_force_min: 自适应夹持的最小目标力。
  • adaptive_force_max: 自适应夹持的最大目标力;重物夹不住优先加这个,但不要超过 force_max。
  • adaptive_force_step: 自适应补力时每次增加多少 force_pct。
  • adaptive_force_interval: 自适应补力两次之间的间隔,越大越柔和。
  • release_arm_delay_seconds: 自适应补力停止后,等待多久再启用“人取物松开”检测。
  • release_normal_change: 夹住后法向力变化超过它就松开。
  • release_shear_change: 夹住后切向力变化超过它就松开。
  • release_open_speed: 检测到松开后,张开到 open_pos 使用的速度。
  • release_open_accel: release 张开的加速度。
  • release_open_decel: release 张开的减速度。
  • rearm_seconds: 夹爪回到 open_pos 或恢复条件成立后,至少休息多久才重新等待触发;休息期间扫过也不会闭合。
  • recover_normal_force: 张开恢复时允许重新触发的最大法向残余力。
  • recover_shear_force: 张开恢复时允许重新触发的最大切向残余力。
  • recover_stable_seconds: 力清空后需要连续稳定多久,才重新等待触发。
  • open_position_recover_enabled: 是否允许夹爪回到 open_pos 后直接恢复等待。
  • open_position_tolerance: 当前点位和 open_pos 差值小于它,就认为已经回到初始点位。
  • open_position_stable_seconds: 回到初始点位后需要稳定多久,才重新等待触发。
  • open_position_check_interval: open_recover 中读取夹爪当前位置的间隔。
  • normal_force_calibration: 法向力标定,配置在 config\gripper.json。
  • shear_force_calibration: 切向力标定,配置在 config\gripper.json。

日志字段

  • L/R: 左右法向力,单位 N。
  • maxN: 左右法向力最大值,单位 N。
  • shear: 左右切向力最大值,单位 N。
  • trigger: 是否满足单侧触发条件。
  • armed: 是否已经重新武装;只有 trigger=1 armed=1 且是新的一次触发上升沿才会闭合。
  • grip_contact: 是否满足夹住接触条件。
  • dN: 夹住后当前法向力相对参考值的最大变化,单位 N。
  • dShear: 夹住后当前切向力相对参考值的变化,单位 N。
  • state: 当前状态。
  • hold_pos: 夹住后保持的位置。
  • force_pct: 当前夹爪目标力百分比。
  • target: 当前根据切向力计算出来的自适应目标力。
  • release_armed: 是否已经启用释放检测;0 表示还在补力/等待稳定,1 表示法向或切向变化会触发张开。
  • action: 当前动作。

可视化展示

  • 左右两边的光流箭头图。
  • 左右两边的光流幅值图。
  • 左右法向力、左切向力、右切向力。
  • 当前 state、action、trigger/armed、grip_contact。
  • 当前 force_pct、自适应目标力、速度 speed_pct、hold_pos。
  • 顶部有 重启 按钮,会先停止当前控制线程,释放相机与夹爪后再重新启动。
  • 当前 release_armed,用于判断系统是在补夹紧力,还是已经开始检测人取物松开。
  • 折线图带图例,默认固定 y 轴为 0~3 N,范围在 visualizer.py 顶部的 PLOT_FORCE_Y_MIN_N / PLOT_FORCE_Y_MAX_N 调整。
  • 左右传感器 FPS、接触标志、光流均值/最大值。

状态说明

  • open_wait: 夹爪张开,等待任意单侧触发。
  • closing: 单侧触发后正在闭合,等待检测到物体。
  • gripping: 检测到物体后低力保持当前位置,并慢慢加力。
  • hold_check: 已夹住;先根据切向力自适应补夹紧力,补力稳定后再监测法向/切向变化;变化超过阈值会直接张开。
  • open_recover: 已经发出张开命令,正在等待回到初始点位或等待法向/切向残余力清空;这个状态不会闭合夹爪。

常见动作说明

  • force-change-release-open: 检测到夹住后的法向或切向变化,已经发出张开命令。
  • adaptive-grip-ramp: 切向力显示负载较大,正在按小步进增加夹紧力。
  • adaptive-grip-wait: 已经需要更高目标力,但还没到下一次加力时间。
  • release-arm-delay: 补力刚停止,正在等待力稳定,暂时不触发松开。
  • release-reference-armed: 已重新记录释放参考力,后续法向/切向变化会触发张开。
  • open-recover-position: 夹爪当前位置已经接近 OPEN_POS,正在等待到位稳定。
  • open-ready-position: 夹爪已经回到初始点位,并且休息时间结束,重新进入等待下一次扫过触发;此时会直接武装,但残余触发保持不变不会自动闭合。
  • open-wait-clear-trigger: 已经回到等待状态,但当前力还超过触发阈值,暂时不会闭合。
  • open-wait-trigger-clearing: 触发力已经低于阈值,正在等待清零稳定时间。
  • open-wait-armed: 触发已经清掉并稳定,下一次扫过可以闭合。
  • open-wait-trigger-held: 已经武装,但当前触发不是新上升沿,等待力先降下去再下一次扫过。
  • open-recover-wait-force-clear: 夹爪保持张开,但传感器还有残余力,不允许重新闭合。
  • open-recover-stabilizing: 力已经低于恢复阈值,正在等待稳定和休息时间结束。
  • open-ready: 力已经清空并稳定,并且休息时间结束,重新进入等待下一次扫过触发。