🤚PND dexterous hands
Adam可搭载自研的仿人五指灵巧手,该灵巧手具有6个自由度和12个运动关节,可以模拟人手实现复杂动作.
🕹️控制方式
灵巧手官方默认使用串口/485通讯方式进行控制,Adam将为使用透传模块转换为以太网协议,使其作为adam的一个节点子设备方便得进行tpc/udp等以太网操作,更好的融入adam机器人生态.
- 通讯流程:
udp/tcp
<->串口
<->485
<->hand
下面控制例程使用udp的方式进行五指控制.
id | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
Joint | pinky | ring | middle | index | thumb-bend | thumb-rotation |
上面id对应每个手指的控制,对应下面demo中 write6
函数数值输入顺序
🐍Python demo
import pnd_hand
import time
import socket
import threading
import signal
import sys
global port
port = 2562
global addr_l,addr_r
addr_l = '10.10.10.18'
addr_r = '10.10.10.38'
global sok_l,sok_r
def ctrl_one(id):
global sok_l,sok_r
global port
global addr_l,addr_r
sbytes = pnd_hand.hand_ctrl_pack([2000],[id])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(1)
sbytes = pnd_hand.hand_ctrl_pack([0],[id])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(1)
def ctrl():
global sok_l,sok_r
global port
global addr_l,addr_r
# sbytes = pnd_hand.hand_ctrl_pack([200],[id])
# sok_l.sendto(bytes(sbytes),(addr_l,port))
# sok_r.sendto(bytes(sbytes),(addr_r,port))
# time.sleep(1)
# sbytes = pnd_hand.hand_ctrl_pack([0],[id])
# sok_l.sendto(bytes(sbytes),(addr_l,port))
# sok_r.sendto(bytes(sbytes),(addr_r,port))
sbytes = pnd_hand.hand_ctrl_pack([0,0,0,0,0,0])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(0.8)
sbytes = pnd_hand.hand_ctrl_pack([1900,1900,1900,1900,0,0])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(0.8)
sbytes = pnd_hand.hand_ctrl_pack([0,0,0,0,0,0])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(0.8)
sbytes = pnd_hand.hand_ctrl_pack([0,0,0,0,1900,1900])
sok_l.sendto(bytes(sbytes),(addr_l,port))
sok_r.sendto(bytes(sbytes),(addr_r,port))
time.sleep(0.8)
# sbytes = pnd_hand.hand_ctrl_pack([0,0,0,0,0,0])
# sok_l.sendto(bytes(sbytes),(addr_l,port))
# sok_r.sendto(bytes(sbytes),(addr_r,port))
# time.sleep(0.5)
sok_l = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sok_l.settimeout(1)
sok_r = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sok_r.settimeout(1)
# change_id(2,4)
# ctrl()
# get_id()
while True:
ctrl()
# for i in range(6):
# ctrl_one(i+1)