控制Delta机器人
1、获取对象:robot,conveyor
2、等待物料到达传感器位置
3、获取物料列,过滤filter已抓取的part
4、pop 一个物料
5、抓取物料,并将该物料放入已抓队列
6、将抓取的物料放置到传输带
7、清除不在已抓取队列中的part
robot.GraspContainer:机器人夹具容器
Defines the Component Container behavior in the robot's flange node used to contain components grabbed by the robot.
在机器人用于连接机械爪容器的法兰连接件节点中定义组件容器行为
WorldPositionMatrix:得到节点在世界坐标系中的位置矩阵。
BoundDiagonal:Diagonal,对角Gets a half diagonal vector from the center to an upper corner of the container's bound box using positive axis directions.从绑定容器盒子的中心到右上角取得半对角线向量。
from vcScript import *
from vcHelpers.Robot2 import *
def OnRun():
app=getApplication()
robot=getRobot()
conveyor=app.findComponent("Sensor Conveyor")
picked=[]
#只要仿真器开着就一直运行
while app.Simulation.IsRunning==True:
#part 达到传感器
while robot.SignalMapIn.input(100)!=True:
delay(0.1)
#获得不是被抓的part
parts=conveyor.ChildComponents
for part in parts:
if part in picked:
parts.remove(part)
part=parts.pop()
#抓取part,将已抓取的part放置到picked列中
robot.pickMovingPart(part)
picked.append(part)
#计算相对传送带偏移的位置
part=robot.GraspContainer.Components[0]#robot 机械爪中的物件
pos=part.WorldPositionMatrix.P
a=conveyor.BoundDiagonal
offsetX=pos.X-a.X
#print('pos.X='+str(pos.X)+'pos.Y='+str(pos.Y)+'pos.z='+str(pos.Z))
#print('a.X='+str(a.X)+'a.Y='+str(a.Y)+'a.z='+str(a.Z))
#放置part
robot.place(conveyor,Tx=offsetX)
from vcScript import *
from vcHelpers.Robot2 import *
def OnRun():
app=getApplication()
robot=getRobot()
conveyor=app.findComponent("Sensor Conveyor")
picked=[]
#只要仿真器开着就一直运行
while app.Simulation.IsRunning==True:
#part 达到传感器
while robot.SignalMapIn.input(100)!=True:
delay(0.1)
#获得不是被抓的part
parts=filter(lambda x:x not in picked,conveyor.ChildComponents)
#parts=conveyor.ChildComponents
'''
for part in parts:
if part in picked:
parts.remove(part)
'''
part=parts.pop()
#抓取part,将已抓取的part放置到picked列中
robot.pickMovingPart(part)
picked.append(part)
#计算相对传送带偏移的位置
part=robot.GraspContainer.Components[0]#robot 机械爪中的物件
pos=part.WorldPositionMatrix.P
a=conveyor.BoundDiagonal
offsetX=pos.X-a.X
#print('pos.X='+str(pos.X)+'pos.Y='+str(pos.Y)+'pos.z='+str(pos.Z))
#print('a.X='+str(a.X)+'a.Y='+str(a.Y)+'a.z='+str(a.Z))
#放置part
robot.place(conveyor,Tx=offsetX)
picked=filter(lambda x:x in conveyor.ChildComponents,picked)#不知道这一句到底有没有用,删除掉好像也行,主要意思好像就是把picked不在 conveyor.ChildComponents排除掉
翻译由网淘巴完成,转载必须标明出处:https://www.wtao8.com/post/9.html