breakout of submodule for ur5 and gripper control using the MAGPIE interface.
To install magpie_control in a python environment, run the following commands once your environment is active:
git clone https://github.com/correlllab/magpie_control.git #clone this repository
cd magpie_control #enter the repo
pip install . --user #install magpie_controlTest out the functionality!
python3.10
import magpie_control
If you see:
ros2 run magpie_control gripper_node
No executable foundthe package is usually not built/sourced in your ROS2 workspace yet (or you are in a different shell that is not sourced).
If you see:
ModuleNotFoundError: No module named 'magpie_msgs'magpie_msgs was not available in the current shell environment. Build both packages and source the workspace-wide setup file (not only a single package local setup).
From your ROS2 workspace root (example: ~/ws_ctrl):
cd ~/ws_ctrl
colcon build --packages-select magpie_msgs magpie_control
source install/setup.bashOptional sanity check:
ros2 pkg executables magpie_controlYou should see at least:
magpie_control gripper_nodemagpie_control ft_sensor_nodemagpie_control tactile_sensor_node
ros2 run magpie_control gripper_nodeYou can override parameters at startup:
ros2 run magpie_control gripper_node --ros-args \
-p auto_detect_port:=true \
-p port:=/dev/ttyUSB0 \
-p default_speed:=100 \
-p default_torque:=200Open gripper:
ros2 service call /gripper/open std_srvs/srv/Trigger "{}"Close gripper:
ros2 service call /gripper/close std_srvs/srv/Trigger "{}"Set aperture/position (millimeters):
ros2 service call /gripper/set_position magpie_msgs/srv/SetGripperPosition "{position: 40.0, speed: 0.5}"Set force limit (N):
ros2 service call /gripper/set_force magpie_msgs/srv/SetGripperForce "{max_force: 8.0}"Calibrate:
ros2 service call /gripper/calibrate std_srvs/srv/Trigger "{}"Reset parameters (torque, speed, compliance, and open pose):
ros2 service call /gripper/reset_parameters std_srvs/srv/Trigger "{}"Monitor state:
ros2 topic echo /gripper/stateAll gripper aperture/position values are in millimeters (mm).
ros2 run magpie_control gripper_nodeauto_detect_port(bool, default:true): auto-discover Dynamixel serial device.port(string, default:/dev/ttyUSB0): explicit serial device when auto-detect is disabled.use_eflesh(bool, default:false): enable eflesh sensor initialization.default_speed(int, default:100): initial Dynamixel moving speed setting.default_torque(int, default:200): initial Dynamixel torque limit.
Example startup with parameters:
ros2 run magpie_control gripper_node --ros-args \
-p auto_detect_port:=false \
-p port:=/dev/ttyUSB0 \
-p use_eflesh:=false \
-p default_speed:=120 \
-p default_torque:=220- Topic:
/gripper/state - Type:
magpie_msgs/msg/GripperState - Rate: 10 Hz
- Fields:
position(mm)finger_positions(mm,[right, left])force(N)temperature(C)is_moving(bool)contact_detected(bool)
/gripper/open(std_srvs/srv/Trigger)/gripper/close(std_srvs/srv/Trigger)/gripper/calibrate(std_srvs/srv/Trigger)/gripper/reset_parameters(std_srvs/srv/Trigger)/gripper/set_force(magpie_msgs/srv/SetGripperForce):- request:
max_force(N)
- request:
/gripper/set_position(magpie_msgs/srv/SetGripperPosition):- request:
position(mm),speedin [0.0, 1.0] - response:
actual_position(mm),success,message
- request:
/gripper/deligrasp(magpie_msgs/action/DeliGrasp)- goal params (
magpie_msgs/msg/DeliGraspParams):goal_aperture(mm)initial_force(N)additional_closure(mm)additional_force(N)complete_grasp(bool)
- result:
final_aperture(mm)final_force(N)force_log(N samples)
Example action call:
ros2 action send_goal /gripper/deligrasp magpie_msgs/action/DeliGrasp \
"{params: {goal_aperture: 35.0, initial_force: 1.5, additional_closure: 1.0, additional_force: 0.2, complete_grasp: true}}"- Make sure your ROS distro is sourced before workspace setup:
source /opt/ros/humble/setup.bash
source ~/ws_ctrl/install/setup.bash-
Avoid sourcing only one package setup (for example
install/magpie_control/local_setup.bash) when runninggripper_node; that can omit runtime dependencies such asmagpie_msgs. -
Verify package visibility:
ros2 pkg list | grep magpie_control- If executables are still missing, rebuild cleanly:
cd ~/ws_ctrl
rm -rf build/magpie_control install/magpie_control log
colcon build --packages-select magpie_control
source install/setup.bashThis repo includes a small CLI utility to find and configure new AX-12 motors.
- Scan for motors on likely serial ports:
python -m magpie_control.dxl_setup scan --id-max 30- If two brand-new motors are attached at once (both default to ID 1), unplug one first. Leave one motor as ID 1, then plug in the other motor by itself and change it to ID 2:
python -m magpie_control.dxl_setup set-id --port /dev/ttyACM0 --baud 1000000 --current-id 1 --new-id 2- Optional: set baudrate (e.g., to keep everything at 1,000,000):
python -m magpie_control.dxl_setup set-baud --port /dev/ttyACM0 --baud 57600 --id 2 --new-baud 1000000- Rescan and verify both IDs are visible at 1,000,000:
python -m magpie_control.dxl_setup scan --ports /dev/ttyACM0 --bauds 1000000 --id-max 10