Package ROHand
Nodes for ROHand. One bus, i.e. one port need one node.
1. Clone
cd ~
mkdir -p ros2_ws/src
cd ros2_ws/src
git clone ssh://git@github.com/oymotion/rohand_ros2_pkg
2. Prepare
Install pymodbus
cd /path/to/workspace # Should be ~/ros2_ws/src
# Create a vertual env for python
virtualenv -p python3 ./venv
# Make sure that colcon doesn’t try to build the venv
touch ./venv/COLCON_IGNORE
# Activate
source ./venv/bin/activate
# Install python module
python3 -m pip install pymodbus
Edit ~/bashrc and add virtual env lib path to PYTHONPATH
export PYTHONPATH=$PYTHONPATH:~/ros2_ws/src/venv/lib/python3.12/site-packages # Modify python3.12 to your actual version
source ~/.bashrc
3. Compile
cd /path/to/workspace
colcon build
4. Node rohand_modbus
ROHand node for ModBus-RTU or ModBus-RTU & SerialCtrl Dual Protocol. Please confirm protocol type in OHandSetting. Listens to topic 'target_joint_state' and controls ROHand, reads current joint state and publish to 'current_joint_state'.
4.1 Topics
| Topic | Description |
|---|---|
| "current_joint_state" | current joint state in message type JointState, frame_id in header distinguishes hand id |
| "target_joint_state" | target joint state in message type JointState, frame_id in header distinguishes hand id |
4.2 Run
# Prepare package
source /path/to/workspace/install/bash
# Insert USB-485 module to USB port then add permission to users
# Run following command every time you plug in your USB-485 module
sudo chmod o+rw /dev/ttyUSB0 # Modify ttyUSB0 to your actual device name
# Run ROHand node according to your type
#
# Run ROH-A001 node
ros2 run rohand rohand_modbus_a001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-AP001 node
ros2 run rohand rohand_modbus_ap001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-LiteS001 node
ros2 run rohand rohand_modbus_lites001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
5. Node rohand_serial
ROHand node for SerialCtrl Protocol, Dual Protocol is NOT supported. Please confirm protocol type in OHandSetting. Listens to topic 'target_joint_state' and controls ROHand, reads current joint state and publish to 'current_joint_state'.
5.1 Topics
| Topic | Description |
|---|---|
| "current_joint_state" | current joint state in message type JointState, frame_id in header distinguishes hand id |
| "target_joint_state" | target joint state in message type JointState, frame_id in header distinguishes hand id |
| "finger_state" | finger status in message type UInt8MultiArray |
5.2 Run
# Prepare package
source /path/to/workspace/install/bash
# Insert USB-485 module to USB port then add permission to users
# Run following command every time you plug in your USB-485 module
sudo chmod o+rw /dev/ttyUSB0 # Modify ttyUSB0 to your actual device name
# Run ROHand node according to your type
#
# Run ROH-A001 node
ros2 run rohand rohand_serial_a001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-AP001 node
ros2 run rohand rohand_serial_ap001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-LiteS001 node
ros2 run rohand rohand_serial_lites001 --ros-args -p port_name:="/dev/ttyUSB0" -p baudrate:=115200 -p hand_ids:=[2] # Modify parameters according to your real case
Finger status code:
| Name | Code | Description |
|---|---|---|
| STATUS_OPENING | 0 | Spreading |
| STATUS_CLOSING | 1 | Grasping |
| STATUS_POS_REACHED | 2 | Position reached stop |
| STATUS_OVER_CURRENT | 3 | Current protection stop |
| STATUS_FORCE_REACHED | 4 | Force control reached stop |
| STATUS_STUCK | 5 | Motor stuck stop |
6. Node rohand_teleop
Reads keys to modify target joint angles, then publish to 'target_joint_state'.
6.1 Topics
| Topic | Description |
|---|---|
| "target_joint_state" | target joint state in message type JointState, frame_id in header distinguishes hand id |
6.2 Run
# Prepare package
source /path/to/workspace/install/bash
# Run ROHand node according to your type
#
# Run ROH-LiteS001 node
ros2 run rohand rohand_teleop_a001 --ros-args -r rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states -p hand_id:=2 # Modify parameters according to your real case
# Run ROH-LiteS001 node
ros2 run rohand rohand_teleop_ap001 --ros-args -r rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states -p hand_id:=2 # Modify parameters according to your real case
# Run ROH-LiteS001 node
ros2 run rohand rohand_teleop_lites001 --ros-args -r rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states -p hand_id:=2 # Modify parameters according to your real case
Press following keys to operate:
| key | Description |
|---|---|
| q | quit |
| a | thumb bends by step |
| z | thumb relaxes by step |
| s | index bends by step |
| x | index relaxes by step |
| d | middle bends by step |
| c | middle relaxes by step |
| f | ring bends by step |
| v | ring relaxes by step |
| g | little bends by step |
| b | little relaxes by step |
| h | thumb rotation +step |
| n | thumb rotation -step |
Step is range / 10.