线程评分:
  • 0投票 - 0平均
  • 1
  • 2
  • 3
  • 4
  • 5
传送带的帮助
晚上好

您好,我试图使用提供的输送带,但我缺少了解它的工作原理...

我看到有三个Python程序“指挥” IT。

“运行传送带”模拟了传送带顶部的对象移动吗?

“等待零件”使“获取传送带”参考的零件检测器正确吗?

并很好地模拟抓手...在锡上所说的话。

事实是,当我查看“等待部分”的Python输出时,我只能看到它检测到第2部分(使用在线库中的传送带模型)

有什么办法可以阻止输送机或在其顶部移动的对象?

我尝试合并两个Python程序,以便我可以停止传送带,但没有成功。我究竟做错了什么 ?

代码:
#键入帮助(“ Robolink”)或帮助(“ Robodk”)以获取更多信息
#按F5运行脚本
#注意:您无需保留此文件的副本,您的Python脚本保存在电台上
从Robolink Import *#API与Robodk通信
来自Robodk Import *#基本矩阵操作
rl = robolink()

#此脚本模拟传送带
toxtor_name ='传送带'
pickable_objects_keyword ='part'

#相对于传送带坐标的MM/S运动速度:
move_speed_mms = [0,50,0]
refresh_rate = 0.005

#定义输送机的工作区以选择对象:
conv_sz_x_min = 0
conv_sz_x_max = 440
conv_sz_y_min = 0
conv_sz_y_max = 2000
conv_sz_z_min = -200
conv_sz_z_max = +500

#移动到达输送机末端并未挑选的对象:
fallen_objects = [0,-1500,0]

#获取工作空间的输送机项目和参考:
conv = rl.item(toxtor_name)
cons_reference = conv.parent()
PESECONV = conv_reference.poseabs()

#现实生活中的一秒意味着模拟的1秒。模拟速度是从车站取出的
simulation_speed = 1

def is_inside_conveyor(姿势):
“”“检查传送带工作区内是否有姿势”
pos = pose.pos()
如果pos [0]> cons_sz_x_min和pos [0] conv_sz_y_min和pos [1] conv_sz_z_z_min和pos [2]
返回true
返回false

def toxtor_move_object(姿势,delta_time):
“”“根据时间和速度,将物体姿势通过输送机移动。
delta_mm = mult3(move_speed_mms,delta_time)
newpose = transl(delta_mm)*姿势
返回newpose

#获取所有对象(字符串列表)
all_objects = rl.itemlist(item_type_object)

#将对象列表转换为项目指针(更快)
#还过滤列表仅考虑可拨动的对象
对象= []
objects_name = []
objects_active = []
对于我的范围(len(all_objects)):
如果all_objects [i] .count(pickable_objects_keyword)> 0:
objects.append(rl.item(all_objects [i]))
objects_name.append(all_objects [i])
objects_active.append(false)

#可以在输送机中使用的物体数量
nobjects = len(对象)


#无限循环以模拟传送带行为
current_time = 0
tic()
time_last = toc()
而真:
#首先:寻找不在输送机中而是在输送机工作区中的对象
对于我的范围(nobjects):
obj_i =对象[i]

#如果对象已经在输送机中,则跳过
如果objects_active [i]:
继续

#检查对象是否已由工具采用。如果是这样,请不要将其放入输送机中
如果obj_i.parent()。type()== item_type_tool:
继续

#检查对象是否在输送机工作区域内
posei = obj_i.poseabs()
poseirel = invh(pececonv)*posei
如果IS_INSIDE_CONVEYOR(POSEIREL):
#取对象
obj_i.setparentstatic(Conv)
print('将对象%s添加到传送带'%objects_name [i])
objects_active [i] = true

#第二步:更新输送机中每个对象的位置
simulation_speed = rl.simulationspeed()
time_current = toc()
time_delta = time_current -time_last
time_last = time_current
current_time = current_time + time_delta*simulation_speed

#列出具有匹配位置以更新的对象列表
obj_items = []
obj_poses_abs = []
对于我的范围(nobjects):
obj_i =对象[i]

#检查对象是否已从传送带中挑选
如果objects_active [i]和obj_i.parent()!= cons:
objects_active [i] = false
print(从传送带中选出'object%s'%objects_name [i])
继续

#跳过输送机中不在的对象的更新
如果不是objects_active [i]:
继续

#更新对象的位置
posei = invh(pececonv)*obj_i.poseabs()
newposei = trovestor_move_object(posei,time_delta*simulation_speed)
如果不是IS_INSIDE_CONVEYOR(NEWPOSEI):
print('警告!! object%s在模拟开始后以%.1F降低了传送带'%(objects_name [i],current_time))
#RAREISE异常('对象%s未从输送机中挑选!'%objects_name [i])
newposei = transl(fallen_objects)*newposei
objects_active [i] = false

#obj_i.setpose(newposei)#这会引起刷新(可能很慢)
obj_items.append(obj_i)
obj_poses_abs.append(poseconv*newposei)

#更新对象位置
rl.setposesabs(obj_items,obj_poses_abs)

# 休息一下...
暂停(Refresh_rate)

#将站点的目标用作参考平面:
target_name ='获取传送带'
laser_plane = [0,-1,0]#飞机的正常

#在此公差内激活
tolerance_check_mm = 10

#寻找具有关键字“零件”的零件
pickable_objects_keyword ='part'

#每1 ms更新状态
recheck_period = 0.001

#获取目标和检测平面
target = rl.item(target_name)
targetpose = target.poseabs()
detect_plane_point = targetpose.pos()
detect_plane_vector = laser_plane

#定义一个函数以检测目标
def part_detected(pos):
“”“检查一个零件是否在检测区域(点靠近平面)”
pos_proj = proj_pt_2_2_plane(pos,detect_plane_point,detect_plane_vector)
demand2plane = norm(subs3(pos,pos_proj)))
如果dange2plane 返回true
返回false

如果part_detected:
move_speed_mms = [0,0,0]



我想念什么?

此致
你好,

“ WaitforPart”阻止了程序,直到在收控传送带的XY平面中检测到零件为止。它模拟了一个存在传感器。
您可以在第一个视频中看到该程序的效果。这里附带的第二个视频是带有2个通用机器人和一个传送带的模拟。

一些技巧:
- 您可以用太空栏加速模拟
- 您可以使用ESC键停止模拟(它停止所有运行程序/Python脚本/移动机器人)

“运行传送带”模拟了传送带顶部的对象移动吗?
正确的

“等待零件”使“获取传送带”参考的零件检测器正确吗?
正确的

有什么办法可以阻止输送机或在其顶部移动的对象?
是的,使用ESC键或右键单击程序,然后选择“停止”。


我尝试合并两个Python程序,以便我可以停止传送带,但没有成功。我究竟做错了什么 ?
“等待部分”程序必须是一个唯一的程序。该程序的目的是阻止机器人运动的执行,直到零件处于正确的位置为止。如果您查看附带的教程视频,您将更好地理解。

最后,图书馆中还有另一个选择和放置模拟,带有2个三角洲机器人和相同的输送带:
https://www.youtube.com/watch?v=mv-lvsmglvi

------------------------------------------------------------------------------------------------------------

仅输送机模拟:




用2个机器人和传送带构建模拟的教程:

使用RunConveyor.py时,输送机始终运行。
如何将某些条件变量传递到runco​​nveyor.py或脚本中的无限循环中,以便我可以根据某些条件停止输送机或恢复输送机?条件变量可以是机器人I/O或传感器信号,等等。

谢谢。
(09-13-2019,02:08 PM)BSUN99写道:使用RunConveyor.py时,输送机始终运行。
如何将某些条件变量传递到runco​​nveyor.py或脚本中的无限循环中,以便我可以根据某些条件停止输送机或恢复输送机?条件变量可以是机器人I/O或传感器信号,等等。

谢谢。

我自己想出了它。不错的软件。
(09-14-2019,12:45 PM)BSUN99写道:
(09-13-2019,02:08 PM)BSUN99写道:使用RunConveyor.py时,输送机始终运行。
如何将某些条件变量传递到runco​​nveyor.py或脚本中的无限循环中,以便我可以根据某些条件停止输送机或恢复输送机?条件变量可以是机器人I/O或传感器信号,等等。

谢谢。

我自己想出了它。不错的软件。

嗨,你能分享解决方案吗?谢谢。




用户浏览此线程:
1位客人