Package ROHand
ROS nodes for ROHand. One bus, i.e. one port need one node.
1. Clone
cd ~
mkdir -p ros_ws/src
cd ros_ws/src
git clone ssh://git@github.com/oymotion/rohand_ros_pkg
2. Prepare
Install pymodbus
cd /path/to/workspace # Should be ~/ros_ws
# Create a vertual env for python
virtualenv -p python3 ./venv
# Make sure that catkin doesn’t try to build the venv
touch ./venv/CATKIN_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:~/ros_ws/venv/lib/python3.8/site-packages # Modify python3.8 to your actual versioni
source ~/.bashrc
3. Compile
cd /path/to/workspace
catkin_make
4. Launch roscore
roscore
5. 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'.
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 |
5.2 Run
# Open a new terminal to prepare package
source /path/to/workspace/devel/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
rosrun rohand rohand_modbus_a001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-AP001 node
rosrun rohand rohand_modbus_ap001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-LiteS001 node
rosrun rohand rohand_modbus_lites001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _hand_ids:=[2] # Modify parameters according to your real case
6. 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'.
6.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 |
6.2 Run
# Open a new terminal to prepare package
source /path/to/workspace/devel/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
rosrun rohand rohand_serial_a001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-AP001 node
rosrun rohand rohand_serial_ap001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _hand_ids:=[2] # Modify parameters according to your real case
# Run ROH-LiteS001 node
rosrun rohand rohand_serial_lites001.py _port_name:=/dev/ttyUSB0 _baudrate:=115200 _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 |
7. Node rohand_teleop
Reads keys to modify target joint angles, then publish to 'target_joint_state'.
7.1 Topics
| Topic | Description |
|---|---|
| "target_joint_state" | target joint state in message type JointState, frame_id in header distinguishes hand id |
7.2 Run
# Open a new terminal to prepare package
source /path/to/workspace/devel/bash
# Run node
rosrun rohand rohand_teleop.py _rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states _hand_id:=2 # Modify parameters according to your real case
# Run ROHand node according to your type
#
# Run ROH-A001 node
rosrun rohand rohand_teleop_a001.py _rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states _hand_id:=2 # Modify parameters according to your real case
# Run ROH-AP001 node
rosrun rohand rohand_teleop_ap001.py _rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states _hand_id:=2 # Modify parameters according to your real case
# Run ROH-LiteS001 node
rosrun rohand rohand_teleop_lites001.py _rohand_teleop_node/target_joint_states:=/rohand_node/target_joint_states _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.