[Quick Guide] Seed Robotics Robotic Manipulator

Seed Robotics Hand RH6LD

The following article is for installation and quick use for the seed robotics manipulator.

Difficulty: Intermediate

Overview

Seed robotics provides robotic hands which are intended to simplify people’s lives in a different sectors. The robotic hand created by Seed Robotics is intended to resemble the flexibility and dexterity of a human hand. It consists of a number of motors and sensors that operate in concert to deliver accurate control and feedback. The hand may be programmed to carry out a wide range of jobs and is remotely controllable via a computer or mobile device. One of the key advantages of Seed Robotics products is that they can be integrated with the Robot Operating System (ROS), which is a popular framework for building robotic systems.

Pre-Requisites

  1. The first step to using ROS with the hand is the installation of Ubuntu 20.04 in your computer system. The steps are provided in Ubuntu 20.04.

  2. The second step is the installation of ROS Noetic in your computer system. The steps are provided in ROS-Noetic.

Software Installation

Once you have ROS noetic installed. The next step is to install the Seed Robotics Hand ROS Github repository. The steps are as follows:

  • Install ROS dependencies
sudo apt-get install ros-$ROS_DISTRO-rospy\
                     ros-$ROS_DISTRO-std-msgs
  • Install Python dependencies
pip install pyserial numpy
  • Create a catkin workspace
mkdir ~/ros_ws && cd ~/ros_ws && mkdir src && catkin_make 
  • Next navigate into the src folder and clone the repository
cd src && git clone git@github.com:seedrobotics/ros_robothands.git

Note: For the Github version d83b4e7 created on Sep 1,2022, the devel folder has to be manually deleted.

cd ros_robothands && rm -rf devel
  • Rebuild the catkin workspace and source the repository
cd ~/ros_ws && catkin_make && source devel/setup.bash
  • Verify installation by navigating to the workspace
roscd seed_robotics

Hardware Assembly

The assembly of the robotic hands are straight forward and provided with the packaging. For the RH6D all components were pre-assembled. Once assembled power on the robotic hand with the provided power supply and connect it to the PC.

Configuration

To operate the seed robotic hand at 50Hz. The latency timer of the USB port has to be altered.

ls /dev/tty*

You should view the USB port of the robotic hand something similar to /dev/ttyUSB0. Once you identified the port then run this command with correct port ID:

sudo nano /sys/bus/usb-serial/devices/dev/ttyUSB0/latency_timer

Change the value from 16 or whatever the value is to 1.

Hardware Driver

To launch the hardware driver for the RH6D left hand. Run

roslaunch seed_robotics RH6D_L.launch

With this now you are able to control the hand. Further configurations are available at :

roscd seed_robotics/config/
ls

For this case, the RH6D_L.yaml can be modified if required.

Example Usecases

An adapted usecase from the seed robotics is as follows:

#!/usr/bin/env python

import rospy
import std_msgs.msg
from seed_robotics.msg import *
import time

rospy.init_node('Joint_Speed_Position_Setter', anonymous = True)
pub = rospy.Publisher('L_speed_position', JointListSetSpeedPos, queue_size = 10)

# Initialize a list of 6 JointSetSpeedPos messages that will be filled with data to send
joint_message_list = [JointSetSpeedPos() for i in range (6)]

message_to_send = JointListSetSpeedPos()
# Declaring a list to store the names of the joints we want to send command to
#             [ Bottom roataing motor, wrist joint, nun, thumb_FB_rotation,thumb_close, index, nun , middle & left  ]
joint_names = ['l_w_rotation','l_w_flexion','l_th_adduction','l_th_flexion','l_ix_flexion','l_ring_ltl_flexion']


def default_pose(delay):
    # Note : Target position must be a value between 0 and 4095
    target_position_list = [1000, 2048, 2000, 0, 0, 0, 0, 0]
    # Declaring a list to store the different target speed we want for each joint. Note : Target speed must be a value between 0 and 1023
    target_speed_list = [0, 100, 200, 300, 400, 500, 0, 0]
    # Assign the name, target position and target speed of the joints to each JointSetSpeedPos message in the joint_message_list
    for name, position, speed, joint in zip(joint_names, target_position_list, target_speed_list, joint_message_list):
        joint.name = name
        joint.target_pos = position
        joint.target_speed = speed

    # Now that the list of JointSetSpeedPos messages is filled, we can fill the JointListSetSpeedPos nessage with it
    message_to_send.joints = joint_message_list
    # time.sleep(delay)
    #Publish the message
    pub.publish(message_to_send)

def open_pose(delay):

    target_position_list = [0, 0, 0, 0, 0, 0]
    target_speed_list    = [0, 0, 0, 0, 0, 0]

    for name, position, speed, joint in zip(joint_names, target_position_list, target_speed_list, joint_message_list):
        joint.name = name
        joint.target_pos = position
        joint.target_speed = speed

    message_to_send.joints = joint_message_list
    time.sleep(delay)
    pub.publish(message_to_send)

def mus_pose(delay):

    target_position_list = [2000, 0, 2000, 4095, 0, 4095]
    target_speed_list    = [100, 100, 100, 100, 100, 100]

    for name, position, speed, joint in zip(joint_names, target_position_list, target_speed_list, joint_message_list):
        joint.name = name
        joint.target_pos = position
        joint.target_speed = speed

    message_to_send.joints = joint_message_list
    time.sleep(delay)
    pub.publish(message_to_send)

def rot_pose(delay):

    target_position_list = [2000, 0, 0, 0, 0, 0]
    target_speed_list    = [100, 100, 100, 100, 100, 100]

    for name, position, speed, joint in zip(joint_names, target_position_list, target_speed_list, joint_message_list):
        joint.name = name
        joint.target_pos = position
        joint.target_speed = speed

    message_to_send.joints = joint_message_list
    time.sleep(delay)
    pub.publish(message_to_send)


if __name__ == "__main__":

    delay=0.6
    for i in range(1):

        time.sleep(1)
        mus_pose(delay)

        time.sleep(1)
        open_pose(delay)

        time.sleep(1)
        rot_pose(delay)

Test and optimize your system: Once you have written your ROS nodes, it’s time to test your system and optimize its performance.

PROS

  • Unique gripper
  • Easy to use and configure
  • ROS hardware driver available

Conclusion

The Seed Robotics Hand is a robotic hand that can be programmed to perform various tasks. It is equipped with a number of sensors and motors that enable accurate control and feedback. The hand can be integrated with the Robot Operating System (ROS) to facilitate the development of robotic systems. To use the Seed Robotics Hand with ROS, Ubuntu 20.04 and ROS Noetic have be installed on the computer system. The Seed Robotics Hand ROS Github repository must be cloned, and the hardware has to be assembled. Once the hand is assembled, it can be powered on and connected to the computer. To launch the hardware driver for the RH6D left hand, the command “roslaunch seed_robotics RH6D_L.launch” has be executed. An example use case is provided that sets the speed and position of each joint of the robotic hand.

Contact:
Incase of any issues, typos, or suggestions please contact support@mybothop.de

DISCLAIMER:
The reader acknowledges and agrees that any information or materials provided by MYBOTSHOP GmbH are for R&D purposes only. Any kind of services are provided “AS IS” and without any representation or warranty of any kind, express or implied, including but not limited to any warranty of merchantability, fitness for a particular purpose, non-infringement, or any other warranty. MYBOTSHOP GmbH shall not be liable for any damages, including but not limited to direct, indirect, special, incidental, or consequential damages, arising out of or in connection with the use or inability to use the information or materials provided. This limitation on liability shall apply regardless of the form of action, whether in contract, tort, or otherwise.