196 lines
6.2 KiB
Python
196 lines
6.2 KiB
Python
"""夹爪定时开合 + 双触觉反馈控制配置。
|
|
|
|
这个文件就是当前默认配置。可以直接改数值,`#` 后面是 Python 注释。
|
|
运行入口:
|
|
python -m gripper_control.main
|
|
"""
|
|
|
|
|
|
# 左右触觉传感器视频源;纯数字字符串表示摄像头编号,也可以写视频文件路径。
|
|
VIDEO1 = "0"
|
|
VIDEO2 = "1"
|
|
|
|
# 左右触觉传感器方向配置。
|
|
ROTATION1 = "./config/rotation_config_0.json"
|
|
ROTATION2 = "./config/rotation_config_1.json"
|
|
|
|
# 左右触觉传感器 SDK 配置。
|
|
SENSOR_CONFIG1 = "./config/ddjx01.json"
|
|
SENSOR_CONFIG2 = "./config/ddjx01.json"
|
|
|
|
# 触觉处理帧率和运动检测阈值。
|
|
SENSOR_FPS = 30.0
|
|
MOTION_THRESHOLD = 0.0
|
|
SENSOR_CPU = False # True 表示禁用 CUDA。
|
|
|
|
|
|
# 夹爪串口配置。
|
|
PORT = "COM5"
|
|
SLAVE_ID = 1
|
|
BAUDRATE = 115200
|
|
SERIAL_TIMEOUT = 0.2
|
|
|
|
|
|
# 夹爪开合位置和定时循环。
|
|
OPEN_POS = 0
|
|
CLOSE_POS = 9000
|
|
OPEN_SECONDS = 3.0 # 未夹住物体时,张开阶段持续时间。
|
|
CLOSE_SECONDS = 5.0 # 未夹住物体时,闭合尝试持续时间。
|
|
CYCLES = 0 # 0 表示一直循环,直到夹住物体或手动停止。
|
|
OPEN_AT_END = False # 程序退出时是否发送一次张开命令。
|
|
|
|
|
|
# 夹爪运动参数。
|
|
SPEED = 15
|
|
ACCEL = 60
|
|
DECEL = 60
|
|
|
|
|
|
# 夹爪力度参数,单位是夹爪 SDK 的 force_pct 百分比。
|
|
INITIAL_FORCE = 15 # 定时闭合时用小力,避免空夹/误触发时用大力。
|
|
GRIP_START_FORCE = 15 # 检测到物体后立刻切回这个低力,再慢慢加力。
|
|
FORCE_MIN = 10
|
|
FORCE_MAX = 30
|
|
CONTROL_HZ = 10.0
|
|
|
|
|
|
# 法向力阈值,单位 N。程序会先做标定映射,再做判断。
|
|
BOTH_CONTACT_FORCE = 0.05 # 左右两边都超过它时 both=1。
|
|
OBJECT_FORCE = 0.08 # 检测到物体的法向力阈值。
|
|
OBJECT_REQUIRES_BOTH_CONTACT = True # True 可避免空夹时单侧噪声误触发。
|
|
EMPTY_RELEASE_SECONDS = 1.0 # 夹持后接触消失这么久,判定为空夹并恢复定时开合。
|
|
|
|
|
|
# 未检测到物体时,重复发送闭合命令的间隔;0 表示不重复发送。
|
|
CLOSE_COMMAND_INTERVAL = 0.5
|
|
|
|
# 读取当前夹爪位置失败时的备用保持位置;None 表示不使用备用位置。
|
|
HOLD_FALLBACK_POS = None
|
|
|
|
|
|
# 检测到物体后慢慢加力。
|
|
FORCE_RAMP_STEP = 1
|
|
FORCE_RAMP_INTERVAL = 0.3
|
|
|
|
|
|
# 切向力判断,单位 N。当前切向力标定暂时沿用 N_.jpg,后续有切向标定后替换。
|
|
SHEAR_HOLD_FORCE = 0.05 # 切向力超过它后,停止继续加力,开始等稳定。
|
|
SHEAR_STABLE_DELTA = 0.02 # 相邻控制周期变化小于等于它,认为这一拍稳定。
|
|
SHEAR_STABLE_SECONDS = 0.5 # 连续稳定这么久后进入 hold_check。
|
|
HUMAN_HOLD_SECONDS = 1.0 # 进入 hold_check 后先稳定保持这么久,再判断人取物。
|
|
RELEASE_SHEAR_CHANGE = 0.5 # hold_check 后切向力变化超过它,认为人在取物并松开。
|
|
|
|
|
|
# 高法向力保护,单位 N。
|
|
EMERGENCY_TOUCH_FORCE = 2.5
|
|
|
|
|
|
# 滤波和启动基线。
|
|
FILTER_ALPHA = 0.25
|
|
SHEAR_FILTER_ALPHA = 0.35
|
|
BASELINE_SECONDS = 1.0
|
|
|
|
|
|
# 法向力标定:FNORMAL 原始值 -> N。
|
|
NORMAL_FORCE_CALIBRATION = {
|
|
"enabled": True,
|
|
"method": "piecewise_linear",
|
|
"extrapolate": True,
|
|
"clamp_output_min": 0.0,
|
|
"points": [
|
|
{"fnormal": 1000.0, "force_n": 0.0}, # 0 N
|
|
{"fnormal": 10000.0, "force_n": 0.377}, # 0.377 N
|
|
{"fnormal": 30000.0, "force_n": 1.377}, # 1.377 N
|
|
{"fnormal": 62000.0, "force_n": 2.377}, # 2.377 N
|
|
],
|
|
}
|
|
|
|
|
|
# 切向力标定:sqrt(FSHEARX^2 + FSHEARY^2) 原始幅值 -> N。
|
|
# 注意:这里目前临时沿用 N_.jpg 的法向力标定点。
|
|
# 后续如果你做了切向力标定,只需要替换 points。
|
|
SHEAR_FORCE_CALIBRATION = {
|
|
"enabled": True,
|
|
"method": "piecewise_linear",
|
|
"extrapolate": True,
|
|
"clamp_output_min": 0.0,
|
|
"points": [
|
|
{"raw": 1000.0, "force_n": 0.0},
|
|
{"raw": 10000.0, "force_n": 0.377},
|
|
{"raw": 30000.0, "force_n": 1.377},
|
|
{"raw": 62000.0, "force_n": 2.377},
|
|
],
|
|
}
|
|
|
|
|
|
# 夹爪 SDK 细节开关。
|
|
TRIGGER_FORCE_UPDATE = False # 如果 set_target_force 后力度不生效,可改 True。
|
|
ENABLE_HUMAN_RELEASE = True # True 表示人拿物体时,切向力变化会触发松开。
|
|
ENABLE_EMERGENCY_OPEN = False # True 表示超过 EMERGENCY_TOUCH_FORCE 时自动张开。
|
|
DRY_RUN = False # True 只打印命令,不打开串口。
|
|
|
|
|
|
# 运行代码最终读取这个字典。
|
|
CONFIG = {
|
|
"video1": VIDEO1,
|
|
"video2": VIDEO2,
|
|
"rotation1": ROTATION1,
|
|
"rotation2": ROTATION2,
|
|
"sensor_config1": SENSOR_CONFIG1,
|
|
"sensor_config2": SENSOR_CONFIG2,
|
|
"sensor_fps": SENSOR_FPS,
|
|
"motion_threshold": MOTION_THRESHOLD,
|
|
"sensor_cpu": SENSOR_CPU,
|
|
|
|
"port": PORT,
|
|
"slave_id": SLAVE_ID,
|
|
"baudrate": BAUDRATE,
|
|
"serial_timeout": SERIAL_TIMEOUT,
|
|
|
|
"open_pos": OPEN_POS,
|
|
"close_pos": CLOSE_POS,
|
|
"open_seconds": OPEN_SECONDS,
|
|
"close_seconds": CLOSE_SECONDS,
|
|
"cycles": CYCLES,
|
|
"open_at_end": OPEN_AT_END,
|
|
|
|
"speed": SPEED,
|
|
"accel": ACCEL,
|
|
"decel": DECEL,
|
|
|
|
"initial_force": INITIAL_FORCE,
|
|
"grip_start_force": GRIP_START_FORCE,
|
|
"force_min": FORCE_MIN,
|
|
"force_max": FORCE_MAX,
|
|
"control_hz": CONTROL_HZ,
|
|
|
|
"both_contact_force": BOTH_CONTACT_FORCE,
|
|
"object_force": OBJECT_FORCE,
|
|
"object_requires_both_contact": OBJECT_REQUIRES_BOTH_CONTACT,
|
|
"empty_release_seconds": EMPTY_RELEASE_SECONDS,
|
|
"close_command_interval": CLOSE_COMMAND_INTERVAL,
|
|
"hold_fallback_pos": HOLD_FALLBACK_POS,
|
|
|
|
"force_ramp_step": FORCE_RAMP_STEP,
|
|
"force_ramp_interval": FORCE_RAMP_INTERVAL,
|
|
"shear_hold_force": SHEAR_HOLD_FORCE,
|
|
"shear_stable_delta": SHEAR_STABLE_DELTA,
|
|
"shear_stable_seconds": SHEAR_STABLE_SECONDS,
|
|
"human_hold_seconds": HUMAN_HOLD_SECONDS,
|
|
"release_shear_change": RELEASE_SHEAR_CHANGE,
|
|
|
|
"emergency_touch_force": EMERGENCY_TOUCH_FORCE,
|
|
"filter_alpha": FILTER_ALPHA,
|
|
"shear_filter_alpha": SHEAR_FILTER_ALPHA,
|
|
"baseline_seconds": BASELINE_SECONDS,
|
|
|
|
"normal_force_calibration": NORMAL_FORCE_CALIBRATION,
|
|
"shear_force_calibration": SHEAR_FORCE_CALIBRATION,
|
|
|
|
"trigger_force_update": TRIGGER_FORCE_UPDATE,
|
|
"enable_human_release": ENABLE_HUMAN_RELEASE,
|
|
"enable_emergency_open": ENABLE_EMERGENCY_OPEN,
|
|
"dry_run": DRY_RUN,
|
|
}
|
|
|