The ros2_control hardware interface exports only position and velocity state interfaces. Neither object detection (gOBJ) nor motor current (gCU, the standard grip-force proxy) is exposed, so downstream controllers cannot do force-controlled grasping, compliance, contact detection, or even tell whether the gripper caught the part.
Carried over from PickNik: PickNikRobotics/ros2_robotiq_gripper#118.
Reproduce
ros2 launch robotiq_description robotiq_control.launch.py com_port:=/dev/ttyUSB0
# second shell
ros2 control list_hardware_interfaces
Observed:
command interfaces
reactivate_gripper/reactivate_gripper_cmd [available] [claimed]
reactivate_gripper/reactivate_gripper_response [available] [claimed]
robotiq_85_left_knuckle_joint/position [available] [claimed]
robotiq_85_left_knuckle_joint/set_gripper_max_effort [available] [unclaimed]
robotiq_85_left_knuckle_joint/set_gripper_max_velocity [available] [unclaimed]
state interfaces
robotiq_85_left_knuckle_joint/position
robotiq_85_left_knuckle_joint/velocity
Analysis
Present today: position (state + command), velocity (state, derived from the position derivative rather than read from hardware), set_gripper_max_effort / set_gripper_max_velocity (commands that set rFR / rSP for the firmware motion profile — commands, not feedback), and reactivate_gripper_*.
Missing:
effort state interface, fed from gCU (motor current) — the standard grip-force proxy on the 2F-85.
- Object-detection state interface, fed from
gOBJ (2 bits: 0 = moving, 1 = object held while opening, 2 = object held while closing, 3 = position reached). Without it there is no way to distinguish a successful grasp from a missed one, which is a primitive any pick-and-place needs.
Both values already arrive in the status block the SDK exchanges every cycle, so this is a matter of exporting them.
Target
- a
<joint>/effort state interface fed by gCU
- a state interface for
gOBJ (naming TBD — <joint>/object_status or similar)
The
ros2_controlhardware interface exports onlypositionandvelocitystate interfaces. Neither object detection (gOBJ) nor motor current (gCU, the standard grip-force proxy) is exposed, so downstream controllers cannot do force-controlled grasping, compliance, contact detection, or even tell whether the gripper caught the part.Carried over from PickNik: PickNikRobotics/ros2_robotiq_gripper#118.
Reproduce
ros2 launch robotiq_description robotiq_control.launch.py com_port:=/dev/ttyUSB0 # second shell ros2 control list_hardware_interfacesObserved:
Analysis
Present today:
position(state + command),velocity(state, derived from the position derivative rather than read from hardware),set_gripper_max_effort/set_gripper_max_velocity(commands that setrFR/rSPfor the firmware motion profile — commands, not feedback), andreactivate_gripper_*.Missing:
effortstate interface, fed fromgCU(motor current) — the standard grip-force proxy on the 2F-85.gOBJ(2 bits: 0 = moving, 1 = object held while opening, 2 = object held while closing, 3 = position reached). Without it there is no way to distinguish a successful grasp from a missed one, which is a primitive any pick-and-place needs.Both values already arrive in the status block the SDK exchanges every cycle, so this is a matter of exporting them.
Target
<joint>/effortstate interface fed bygCUgOBJ(naming TBD —<joint>/object_statusor similar)