Skip to content

Commit 7753b2c

Browse files
committed
update readme
1 parent b6f5905 commit 7753b2c

23 files changed

+816
-104
lines changed
0 Bytes
Binary file not shown.
43 Bytes
Binary file not shown.

LinkerHand/config/setting.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ LINKER_HAND: # 手部配置信息
3131
EXISTS: True # 是否存在右手
3232
TOUCH: True # 是否有压力传感器
3333
MODBUS: "None" # 通讯协议是否为485 默认None 当前支持RML(睿尔曼API2)
34-
JOINT: L25 # 右手关节数量
34+
JOINT: L10 # 右手关节数量
3535
NAME: # 无论l10还是l20 joint name都是20个
3636
- joint71
3737
- joint72
0 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
319 Bytes
Binary file not shown.
Binary file not shown.
-44 Bytes
Binary file not shown.
Binary file not shown.

LinkerHand/core/can/linker_hand_l10_can.py

Lines changed: 53 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ class FrameProperty(Enum):
1010
INVALID_FRAME_PROPERTY = 0x00
1111
JOINT_POSITION_RCO = 0x01
1212
MAX_PRESS_RCO = 0x02
13+
MAX_PRESS_RCO2 = 0x03
1314
JOINT_POSITION2_RCO = 0x04
1415
JOINT_SPEED = 0x05
16+
JOINT_SPEED2 = 0x06
1517
REQUEST_DATA_RETURN = 0x09
1618
JOINT_POSITION_N = 0x11
1719
MAX_PRESS_N = 0x12
@@ -24,10 +26,12 @@ class FrameProperty(Enum):
2426

2527
class LinkerHandL10Can:
2628
def __init__(self,can_id, can_channel='can0', baudrate=1000000, ):
27-
self.x01 = [0] * 5
28-
self.x02 = [0] * 5
29-
self.x04 = [0] * 5
30-
self.x05 = [0] * 5
29+
self.x01 = [-1] * 5
30+
self.x02 = [-1] * 5
31+
self.x03 = [-1] * 5
32+
self.x04 = [-1] * 5
33+
self.x05 = [-1] * 5
34+
self.x06 = [-1] * 5
3135
self.x33 = self.x34 = [0] * 5
3236
# Fault codes
3337
self.x35,self.x36 = [0] * 5,[0] * 5
@@ -73,7 +77,7 @@ def init_can_bus(self, channel, baudrate):
7377
else:
7478
raise EnvironmentError("Unsupported platform for CAN interface")
7579

76-
def send_frame(self, frame_property, data_list,sleep=0.005):
80+
def send_frame(self, frame_property, data_list,sleep=0.003):
7781
"""Send a single CAN frame with specified properties and data."""
7882
frame_property_value = int(frame_property.value) if hasattr(frame_property, 'value') else frame_property
7983
data = [frame_property_value] + [int(val) for val in data_list]
@@ -108,10 +112,16 @@ def set_joint_speed_l10(self,speed=[180]*5):
108112
time.sleep(0.01)
109113
self.send_frame(0x05, speed)
110114
def set_speed(self,speed=[180]*5):
111-
self.x05 = speed
112-
for i in range(2):
113-
time.sleep(0.01)
114-
self.send_frame(0x05, speed)
115+
if len(speed) == 5:
116+
self.x05 = speed
117+
for i in range(2):
118+
time.sleep(0.01)
119+
self.send_frame(0x05, speed)
120+
elif len(speed) == 10:
121+
for i in range(2):
122+
time.sleep(0.01)
123+
self.send_frame(0x05, speed[:5])
124+
self.send_frame(0x06, speed[5:])
115125
def request_all_status(self):
116126
"""Get all joint positions and pressures."""
117127
self.send_frame(FrameProperty.REQUEST_DATA_RETURN, [])
@@ -153,11 +163,14 @@ def process_response(self, msg):
153163
self.x01 = list(response_data)
154164
elif frame_type == FrameProperty.MAX_PRESS_RCO.value: # 0x02
155165
self.x02 = list(response_data)
166+
elif frame_type == FrameProperty.MAX_PRESS_RCO2.value: # 0x03
167+
self.x03 = list(response_data)
156168
elif frame_type == FrameProperty.JOINT_POSITION2_RCO.value: # 0x04
157169
self.x04 = list(response_data)
158170
elif frame_type == 0x05:
159-
#self.x05 = list(response_data)
160-
pass
171+
self.x05 = list(response_data)
172+
elif frame_type == 0x06:
173+
self.x06 = list(response_data)
161174
elif frame_type == 0x20:
162175
# Five-finger normal force
163176
d = list(response_data)
@@ -229,11 +242,17 @@ def process_response(self, msg):
229242

230243
def set_torque(self,torque=[]):
231244
'''Set maximum torque'''
232-
self.send_frame(0x02, torque)
245+
if len(torque) == 5:
246+
self.send_frame(0x02, torque)
247+
time.sleep(0.002)
248+
self.send_frame(0x03,torque)
249+
elif len(torque) > 5:
250+
self.send_frame(0x02, torque[:5])
251+
time.sleep(0.002)
252+
self.send_frame(0x03,torque[5:])
233253
def get_version(self):
234254
'''Get version'''
235255
self.send_frame(0x64,[],sleep=0.1)
236-
time.sleep(0.001)
237256
return self.version
238257
def get_current_status(self):
239258
'''Get current joint status'''
@@ -242,12 +261,10 @@ def get_current_status(self):
242261
return self.x01 + self.x04
243262
def get_speed(self):
244263
'''Get current speed'''
245-
return self.x05
246-
def get_press(self):
247-
'''Get current torque'''
248-
self.set_max_torque_limits(pressures=[0.0], type="get")
249-
time.sleep(0.001)
250-
return self.x02
264+
# self.send_frame(0x05,[],sleep=0.005)
265+
# self.send_frame(0x06,[],sleep=0.005)
266+
return self.x05 + self.x06
267+
251268
def get_force(self):
252269
'''Get pressure sensor data'''
253270
return [self.normal_force,self.tangential_force , self.tangential_force_dir , self.approach_inc]
@@ -271,24 +288,29 @@ def get_touch_type(self):
271288

272289
def get_touch(self):
273290
'''Get touch data'''
274-
self.send_frame(0xb1,[],sleep=0.02)
275-
self.send_frame(0xb2,[],sleep=0.02)
276-
self.send_frame(0xb3,[],sleep=0.02)
277-
self.send_frame(0xb4,[],sleep=0.02)
278-
self.send_frame(0xb5,[],sleep=0.02)
291+
self.send_frame(0xb1,[],sleep=0.03)
292+
self.send_frame(0xb2,[],sleep=0.03)
293+
self.send_frame(0xb3,[],sleep=0.03)
294+
self.send_frame(0xb4,[],sleep=0.03)
295+
self.send_frame(0xb5,[],sleep=0.03)
279296
return [self.xb1[1],self.xb2[1],self.xb3[1],self.xb4[1],self.xb5[1],0] # The last digit is palm, currently not available
280297

281298
def get_matrix_touch(self):
282-
self.send_frame(0xb1,[0xc6],sleep=0.025)
283-
self.send_frame(0xb2,[0xc6],sleep=0.025)
284-
self.send_frame(0xb3,[0xc6],sleep=0.025)
285-
self.send_frame(0xb4,[0xc6],sleep=0.025)
286-
self.send_frame(0xb5,[0xc6],sleep=0.025)
299+
self.send_frame(0xb1,[0xc6],sleep=0.04)
300+
self.send_frame(0xb2,[0xc6],sleep=0.04)
301+
self.send_frame(0xb3,[0xc6],sleep=0.04)
302+
self.send_frame(0xb4,[0xc6],sleep=0.04)
303+
self.send_frame(0xb5,[0xc6],sleep=0.04)
287304
return self.thumb_matrix , self.index_matrix , self.middle_matrix , self.ring_matrix , self.little_matrix
288305

289306
def get_torque(self):
290-
'''Not supported yet'''
291-
return [-1] * 5
307+
'''Get current motor torque'''
308+
self.send_frame(0x02, [])
309+
time.sleep(0.002)
310+
self.send_frame(0x03,[])
311+
#self.set_max_torque_limits(pressures=[0.0], type="get")
312+
#time.sleep(0.001)
313+
return self.x02+self.x03
292314

293315
def get_fault(self):
294316
'''Get motor fault'''

0 commit comments

Comments
 (0)