- for low-level servo control and gripper-level open/close control.
gripper_servo_dynamixel: low-level DynamixelSDK (Protocol 2.0) servo/action package (Python).gripper_servo_feetech: low-level Feetech STS/SCS servo/action package (C++).gripper_two_fingers: gripper-level two-finger Dynamixel wrapper (Python).gripper_feetech_test: gripper-level Feetech test wrapper (C++).gripper_ros: launch files + centralized motor/gripper parameter YAMLs.
This ros packages use two action layers:
- low-level servo control:
/servo_control - gripper-level control:
/gripper_commandusingcontrol_msgs/action/GripperCommand
See docs/servo/ros2-interface.md for low-level servo ros2 specifications and examples. See docs/gripper/ros2-interface.md for gripper level ros2 specifications and examples.
Follow the Setup instructions in docs/installation.md to install dependencies and build the workspace.
See gripper_servo_dynamixel/README.md for testing Dynamixel servos. See gripper_servo_feetech/README.md for testing Feetech servos.
source install/setup.bash
ros2 launch gripper_ros gripper_soft_two_fingers.launch.pyload the visualization for the two-finger gripper:
source install/setup.bash
ros2 launch gripper_ros gripper_sim.launch.py model:=two-finger-gripper-standaloneThis starts the gripper URDF in robot_state_publisher and rviz2 only.
Run it alongside gripper_soft_two_fingers.launch.py when you want RViz to reflect live /joint_states from the gripper node.
Use the action CLI to send gripper goals (see docs/gripper/ros2-interface.md for details):
To open gripper:
source install/setup.bash
ros2 action send_goal /gripper_command control_msgs/action/GripperCommand "{command: {position: 0.09, max_effort: 0.0}}"To close gripper:
source install/setup.bash
ros2 action send_goal /gripper_command control_msgs/action/GripperCommand "{command: {position: 0.0, max_effort: 0.0}}"For calibration/debugging only, the gripper wrapper also exposes a bypass_max_effort parameter. When enabled, gripper-level max_effort bypasses max_effort_to_torque_factor and is treated directly as low-level torque.
Start the gripper stack with bypass_max_effort enabled.
source install/setup.bash
ros2 launch gripper_ros gripper_soft_two_fingers.launch.py bypass_max_effort:=trueUse the helper node to step torque through /gripper_command, collect measured force samples, and update the plot after each sample:
source install/setup.bash
ros2 run gripper_ros estimate_mett_node.py --ros-args \
-p target_position:=0.0 \
-p release_position:=0.09 \
-p start_torque:=0.2 \
-p torque_increment:=0.2 \
-p max_torque:=2.0The node interaction is intentionally simple:
- press Enter to apply the current torque
- press Enter again to release it
- enter the measured force in newtons
- inspect the matplotlib plot
- press Enter to continue to the next torque increment
Read the gripper action interface docs for more details on GripperCommand goal fields and CLI usage.
Read the servo action interface docs for direct low-level servo commands.