Skip to content

Commit cfbbe12

Browse files
committed
[example] add set_yinshi_rh56_gripper.py
1 parent 1d3658f commit cfbbe12

File tree

2 files changed

+134
-8
lines changed

2 files changed

+134
-8
lines changed

example/wrapper/thridparty/set_yinshi_gripper.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,21 @@
3939
arm.set_mode(0)
4040
arm.set_state(0)
4141

42-
ret = arm.core.set_modbus_timeout(20)
43-
print('set modbus timeout, ret = %d' % (ret[0]))
42+
code = arm.set_tgpio_modbus_timeout(20)
43+
print('set_tgpio_modbus_timeout, code={}'.format(code))
4444

45-
ret = arm.core.set_modbus_baudrate(115200)
46-
print('set modbus baudrate, ret = %d' % (ret[0]))
45+
code = arm.set_tgpio_modbus_baudrate(115200)
46+
print('set_tgpio_modbus_baudrate, code={}'.format(code))
4747
time.sleep(2)
4848

4949
while arm.connected:
5050
# yinshi open/close test
5151
data_frame = [0x01, 0x06, 0x00, 0x0A, 0x00, 0x03]
52-
ret = arm.core.tgpio_set_modbus(data_frame, len(data_frame))
53-
print('set modbus, ret = %d' % (ret[0]))
52+
code, res_data = arm.getset_tgpio_modbus_data(data_frame)
53+
print('getset_tgpio_modbus_data, code={}, res_data={}'.format(code, res_data))
5454
time.sleep(2)
5555

5656
data_frame = [0x01, 0x06, 0x00, 0x0A, 0x03, 0x60]
57-
ret = arm.core.tgpio_set_modbus(data_frame, len(data_frame))
58-
print('set modbus, ret = %d' % (ret[0]))
57+
code, res_data = arm.getset_tgpio_modbus_data(data_frame)
58+
print('getset_tgpio_modbus_data, code={}, res_data={}'.format(code, res_data))
5959
time.sleep(1)
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
#!/usr/bin/env python3
2+
# Software License Agreement (BSD License)
3+
#
4+
# Copyright (c) 2019, UFACTORY, Inc.
5+
# All rights reserved.
6+
#
7+
# Author: Vinman <vinman.wen@ufactory.cc> <vinman.cub@gmail.com>
8+
9+
"""
10+
Example: yinshi RH56 gripper Control
11+
Please make sure that the gripper is attached to the end.
12+
"""
13+
14+
import os
15+
import sys
16+
import time
17+
sys.path.append(os.path.join(os.path.dirname(__file__), '../../..'))
18+
19+
from xarm.wrapper import XArmAPI
20+
from configparser import ConfigParser
21+
parser = ConfigParser()
22+
parser.read('../robot.conf')
23+
try:
24+
ip = parser.get('xArm', 'ip')
25+
except:
26+
ip = input('Please input the xArm ip address[192.168.1.194]:')
27+
if not ip:
28+
ip = '192.168.1.194'
29+
30+
# 各自由度角度、力控、速度寄存器地址
31+
FINGER_ADDR = {
32+
0: 0x05CE, # 小拇指
33+
1: 0x05D0, # 无名指
34+
2: 0x05D2, # 中指
35+
3: 0x05D4, #食指
36+
4: 0x05D6, #大拇指弯曲
37+
5: 0x05D8, #大拇指旋转
38+
}
39+
FORCE_ADDR = {
40+
0: 0x05DA, # 小拇指
41+
1: 0x05DC,
42+
2: 0x05DE,
43+
3: 0x05E0,
44+
4: 0x05E2,
45+
5: 0x05E4,
46+
}
47+
SPEED_ADDR = {
48+
0: 0x05F2, # 小拇指
49+
1: 0x05F4,
50+
2: 0x05F6,
51+
3: 0x05F8,
52+
4: 0x05FA,
53+
5: 0x05FC,
54+
}
55+
56+
HAND_ID = 0x01
57+
58+
def set_rh56_finger_speed(arm, finger_id, speed):
59+
speed = min(max(round(speed), 0), 1000)
60+
addr = SPEED_ADDR[finger_id]
61+
modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (speed >> 8) & 0xFF, speed & 0xFF]
62+
code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
63+
if code != 0:
64+
print('[FAILED] set the speed of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
65+
else:
66+
print('[SUCCESS] set the speed of finger-{}, res_data={}'.format(finger_id, res_data))
67+
return code, res_data
68+
69+
def set_rh56_finger_force(arm, finger_id, force):
70+
force = min(max(round(force), 0), 1000)
71+
addr = FORCE_ADDR[finger_id]
72+
modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (force >> 8) & 0xFF, force & 0xFF]
73+
code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
74+
if code != 0:
75+
print('[FAILED] set the force of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
76+
else:
77+
print('[SUCCESS] set the force of finger-{}, res_data={}'.format(finger_id, res_data))
78+
return code, res_data
79+
80+
def set_rh56_finger_pos(arm, finger_id, pos):
81+
pos = min(max(round(pos), 0), 1000) if pos != -1 else 0xFFFF
82+
addr = FINGER_ADDR[finger_id]
83+
modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (pos >> 8) & 0xFF, pos & 0xFF]
84+
code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
85+
if code != 0:
86+
print('[FAILED] set the pos of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
87+
else:
88+
print('[SUCCESS] set the pos of finger-{}, res_data={}'.format(finger_id, res_data))
89+
return code, res_data
90+
91+
def set_rh56_finger(arm, pos, speed=1000, force=500, open_threshold=500):
92+
# 决定执行顺序:闭合用正序,张开用反序。位置大于500认为张开,小于等于500认为是闭合。
93+
if pos <= open_threshold:
94+
finger_order = range(0, 5) # 抓取(闭合)
95+
else:
96+
finger_order = reversed(range(0, 5)) # 张开
97+
98+
for finger_id in finger_order:
99+
set_rh56_finger_speed(arm, finger_id, speed)
100+
set_rh56_finger_force(arm, finger_id, force)
101+
set_rh56_finger_pos(arm, finger_id, pos)
102+
time.sleep(0.01)
103+
104+
arm = XArmAPI(ip)
105+
time.sleep(0.5)
106+
if arm.warn_code != 0:
107+
arm.clean_warn()
108+
if arm.error_code != 0:
109+
arm.clean_error()
110+
111+
arm.motion_enable(True)
112+
arm.set_mode(0)
113+
arm.set_state(0)
114+
115+
code = arm.set_tgpio_modbus_timeout(20)
116+
print('set_tgpio_modbus_timeout, code={}'.format(code))
117+
118+
code = arm.set_tgpio_modbus_baudrate(115200)
119+
print('set_tgpio_modbus_baudrate, code={}'.format(code))
120+
time.sleep(2)
121+
122+
for i in range(100):
123+
set_rh56_finger(arm, pos=1000, force=500,speed=1000)
124+
time.sleep(2)
125+
set_rh56_finger(arm, pos=0, force=500, speed=1000)
126+
time.sleep(2)

0 commit comments

Comments
 (0)