Enhanced gripper control functionality

This commit is contained in:
2026-06-08 14:30:08 +08:00
parent 3fc8024648
commit d103439f01
11 changed files with 175 additions and 24 deletions

View File

@ -4,7 +4,7 @@
# 按下 grip 时锁定当前手柄位姿和 TCP 位姿,之后将手柄相对位移映射为目标
# TCP 位姿,经过工作空间限幅、目标低通和单帧步长限制后,通过 rm_movep_canfd
# 下发。cmd_vel 仅作为目标位姿变化率调试话题,不是机械臂执行命令。
# 末端外设由 peripherals_rm75.yaml 配置,launch 只在真机连接阶段初始化。
# 末端外设由 peripherals_rm75.yaml 配置,真机连接阶段初始化后由遥操作节点复用
left_arm_teleop:
ros__parameters:

View File

@ -1,5 +1,5 @@
# 左臂单独调试配置XR 相对位姿透传控制 RM75 TCP。
# 末端外设由 peripherals_rm75.yaml 配置,launch 只在真机连接阶段初始化。
# 末端外设由 peripherals_rm75.yaml 配置,真机连接阶段初始化后由遥操作节点复用
single_arm_velocity_teleop:
ros__parameters:

View File

@ -2,7 +2,7 @@
#
# scissorgripper 与 tools_in_ee 的顺序保持和 acRealman 一致:
# 0 -> scissor1 -> omnipic2 -> minisci-1 -> no_tool。
# 当前阶段只做连接后的外设初始化,不在遥操作主循环中控制开合
# 当前阶段连接后初始化外设,开合命令由遥操作节点复用同一个 RealMan 连接执行
set_initial_tool_state: false

View File

@ -1,5 +1,5 @@
# 右臂单独调试配置XR 相对位姿透传控制 RM75 TCP。
# 末端外设由 peripherals_rm75.yaml 配置,launch 只在真机连接阶段初始化。
# 末端外设由 peripherals_rm75.yaml 配置,真机连接阶段初始化后由遥操作节点复用
single_arm_velocity_teleop:
ros__parameters:
@ -13,7 +13,7 @@ single_arm_velocity_teleop:
target_filter_alpha: 0.65
target_filter_alpha_fast: 0.9
target_filter_fast_threshold_m: 0.03
max_linear_speed: 0.3
max_linear_speed: 0.15
enable_position_axes: [true, true, true]
current_pose_poll_hz: 10.0

View File

@ -53,6 +53,8 @@ def _single_arm_node(
follow: bool,
configure_safety_limits: bool,
enable_tool_control: bool,
enable_trigger_gripper_control: bool,
trigger_close_threshold: float,
configure_peripheral_on_connect: bool,
) -> Node:
"""创建单臂调试节点;左/右臂分别使用独立 YAML节点名保持单臂默认名。"""
@ -77,6 +79,8 @@ def _single_arm_node(
"configure_safety_limits": configure_safety_limits,
"move_to_initial_pose_on_connect": move_to_initial_pose,
"enable_tool_control": enable_tool_control,
"enable_trigger_gripper_control": enable_trigger_gripper_control,
"trigger_close_threshold": trigger_close_threshold,
"configure_peripheral_on_connect": configure_peripheral_on_connect,
"peripheral_config_file": _config_file("peripherals_rm75.yaml"),
"peripheral_arm": arm,
@ -100,6 +104,8 @@ def _dual_arm_nodes(
follow: bool,
configure_safety_limits: bool,
enable_tool_control: bool,
enable_trigger_gripper_control: bool,
trigger_close_threshold: float,
configure_peripheral_on_connect: bool,
) -> list[Node]:
"""创建双臂节点;两个节点共用双臂 YAML但节点名区分左右臂参数命名空间。"""
@ -123,6 +129,8 @@ def _dual_arm_nodes(
"configure_safety_limits": configure_safety_limits,
"move_to_initial_pose_on_connect": move_to_initial_pose,
"enable_tool_control": enable_tool_control,
"enable_trigger_gripper_control": enable_trigger_gripper_control,
"trigger_close_threshold": trigger_close_threshold,
"configure_peripheral_on_connect": configure_peripheral_on_connect,
"peripheral_config_file": _config_file("peripherals_rm75.yaml"),
"peripheral_arm": "left",
@ -148,6 +156,8 @@ def _dual_arm_nodes(
"configure_safety_limits": configure_safety_limits,
"move_to_initial_pose_on_connect": move_to_initial_pose,
"enable_tool_control": enable_tool_control,
"enable_trigger_gripper_control": enable_trigger_gripper_control,
"trigger_close_threshold": trigger_close_threshold,
"configure_peripheral_on_connect": configure_peripheral_on_connect,
"peripheral_config_file": _config_file("peripherals_rm75.yaml"),
"peripheral_arm": "right",
@ -185,6 +195,12 @@ def _launch_setup(context, *args, **kwargs):
enable_tool_control = _as_bool(
LaunchConfiguration("enable_tool_control").perform(context)
)
enable_trigger_gripper_control = _as_bool(
LaunchConfiguration("enable_trigger_gripper_control").perform(context)
)
trigger_close_threshold = float(
LaunchConfiguration("trigger_close_threshold").perform(context)
)
if arm not in ("left", "right", "both"):
raise ValueError("arm must be one of: left, right, both")
@ -202,6 +218,8 @@ def _launch_setup(context, *args, **kwargs):
follow,
configure_safety_limits,
enable_tool_control,
enable_trigger_gripper_control,
trigger_close_threshold,
configure_peripheral_on_connect,
)
)
@ -218,6 +236,8 @@ def _launch_setup(context, *args, **kwargs):
follow,
configure_safety_limits,
enable_tool_control,
enable_trigger_gripper_control,
trigger_close_threshold,
configure_peripheral_on_connect,
)
)
@ -252,6 +272,9 @@ def generate_launch_description() -> LaunchDescription:
DeclareLaunchArgument("configure_safety_limits", default_value="true"),
# 工具控制通过遥操作节点复用同一个 RealMan 连接,避免两个进程抢同一机械臂连接。
DeclareLaunchArgument("enable_tool_control", default_value="true"),
# 按住 grip 时trigger >= 阈值闭合夹爪否则打开grip=false 时不改变夹爪。
DeclareLaunchArgument("enable_trigger_gripper_control", default_value="true"),
DeclareLaunchArgument("trigger_close_threshold", default_value="0.95"),
# 连接成功后是否配置外设;关闭后仅订阅开合话题,但开合前需要另行完成外设配置。
DeclareLaunchArgument("configure_peripheral_on_connect", default_value="true"),
# 默认不自动移动到初始点,确认安全区后再显式打开。