线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
帮助模拟两个UR5机器人同时使用python
# 1
我有困难同时模拟两个机器人在同一时间。我有两个机器人,“机器人”和“B机器人”,每执行一个大功能。这些函数引用用户定义函数在两个单独的文件中,但他们都工作。

我的烦恼是,我可以让机器人来完成其功能,而不是两个。我做错了,我需要怎么修改robolink命令来让这个设置工作?可以有人帮助吗?



我的下面粘贴python代码。我不确定我做的事情不同于下面的例子:

//www.w5838.com/doc/en/PythonAPI/exam...e-3-robots

谢谢!


代码:
#类型帮助(“robolink”)或(“robodk”)的更多信息
#按F5运行脚本
#文档://www.w5838.com/doc/en/RoboDK-API.html
#参考://www.w5838.com/doc/en/PythonAPI/index.html
#注意:它不需要保持此文件的一个副本,您的python脚本保存与车站
从robolink进口* # RoboDK API
从robodk进口* #机器人工具箱
从M75_Pick_Place进口*
从M75_Place_Clean进口*
进口线程
导入的时间

def run_robot_a ():
#收集所需的物品从车站树机器人
rdk_a = Robolink ()
robot_a = rdk_a.Item (“UR5e”)

rdk_a。ShowMessage(“机器人”)
# robot_a = rdk_a.Item (“UR5e”)
a_home = rdk_a.Item (a_home) #共同目标
a_pick_to_clean_0 = rdk_a.Item (A_PICK_TO_CLEAN0) #共同目标
a_pick_to_clean_1 = rdk_a.Item (A_PICK_TO_CLEAN1) #共同目标
a_pick_to_clean_2 = rdk_a.Item (A_PICK_TO_CLEAN2) #共同目标
a_pick_to_clean_3 = rdk_a.Item (A_PICK_TO_CLEAN3) #共同目标

bin_input_active = rdk_a。(“主动输入本”)项#参考系的“主动本”
m75_tray = rdk_a。项目(M75输入托盘)#参考系M75托盘的
disk_3a = rdk_a.Item (Disk3A) # Disk3A参考系
disk_1a = rdk_a.Item (Disk1A) # Disk1A参考系
robot_a.setPoseFrame (bin_input_active)
blade_count = 0


#设置线性速度、加速度,和舍入为机器人
robot_a.setSpeed (500)
robot_a.setAcceleration (1200)
robot_a.setRounding (20)

#从安全的中心位置
robot_a.MoveJ (a_home)
robot_a.MoveJ (a_pick_to_clean_0)

#循环每个位置
虽然blade_count < 84:
#活动本的更新位置
m75_set_active_bin_pos (rdk_a robot_a blade_count)
#选择
robot_a.setSpeed (500)
m75_pick_fwd (rdk_a robot_a)
#控制部分
m75_pick_rev (rdk_a robot_a)
robot_a.setSpeed (500)
#暂停
robot_a.Pause (0.5)

#移动安全的选择区域
robot_a.setRounding (20)
robot_a.MoveJ (a_pick_to_clean_0)
robot_a.MoveJ (a_pick_to_clean_1)
robot_a.MoveJ (a_pick_to_clean_2)
robot_a.MoveJ (a_pick_to_clean_3)

# 3清理磁盘
robot_a.setPoseFrame (disk_3a)
m75_clean_3a (rdk_a robot_a)

#重置清洁位置
robot_a.MoveJ (a_pick_to_clean_3)

1 #清理磁盘
robot_a.setPoseFrame (disk_1a)
m75_clean_1a (rdk_a robot_a)

#安全地从清洁区选择区移动
robot_a.setRounding (20)
robot_a.MoveJ (a_pick_to_clean_3)
robot_a.MoveJ (a_pick_to_clean_2)
robot_a.MoveJ (a_pick_to_clean_1)
robot_a.MoveJ (a_pick_to_clean_0)

robot_a.setPoseFrame (bin_input_active)

#位置
robot_a.setSpeed (500)
m75_place_fwd (rdk_a robot_a)
#释放部分
m75_place_rev (rdk_a robot_a)
robot_a.setSpeed (500)

#暂停
robot_a.Pause (0.5)

#增加叶片数下的选择
blade_count = blade_count + 1


#移动安全回到中心位置
robot_a.MoveJ (a_pick_to_clean_0)
robot_a.MoveJ (a_home)



def run_robot_b ():
#收集所需物品从车站为机器人B树
rdk_b = Robolink ()
robot_b = rdk_b.Item (“UR5e2”)

rdk_b。ShowMessage (B“机器人”)
# robot_b = rdk_a.Item (“UR5e2”)
bin_output_active = rdk_b。(“主动输出本”)项#参考系的“主动本”
table_center = rdk_b。项目(“表中心”)
b_home = rdk_b.Item (“b_home”)
b_home_to_clean = rdk_b.Item (“b_home_to_clean”)
b_place_to_clean_0 = rdk_b.Item (“B_PLACE_TO_CLEAN0”)
b_place_to_clean_1 = rdk_b.Item (“B_PLACE_TO_CLEAN1”)
b_place_to_clean_2 = rdk_b.Item (“B_PLACE_TO_CLEAN2”)
b_place_to_clean_3 = rdk_b.Item (“B_PLACE_TO_CLEAN3”)

blade_count = 0

#设置线性速度、加速度,和舍入为机器人
robot_b.setSpeed (500)
robot_b.setAcceleration (1200)
robot_b.setRounding (20)


#从安全的中心位置
robot_b.MoveJ (b_home)

#从原位置移动到清洁的位置
robot_b.MoveJ (b_home)
robot_b.MoveJ (b_home_to_clean)
robot_b.MoveJ (b_place_to_clean_3)

#循环每个位置
虽然blade_count < 84:


#交换
# robot_b.setPoseFrame (table_center)
# b_m75_swap (rdk_b robot_b)

# robot_b.MoveJ (b_place_to_clean_1)
# robot_b.MoveJ (b_place_to_clean_2)


#在磁盘清洁3 b
robot_b.Pause (0.50)

#从清洁区选择区
robot_b.MoveJ (b_place_to_clean_3)
robot_b.MoveJ (b_place_to_clean_2)
robot_b.MoveJ (b_place_to_clean_1)
robot_b.MoveJ (b_place_to_clean_0)

#位置
robot_b.setPoseFrame (bin_output_active)
#活动本的更新位置
b_m75_set_active_bin_pos (rdk_b robot_b blade_count)

robot_b.setSpeed (500)
b_m75_place_fwd (rdk_b robot_b)

#释放部分

#暂停
robot_b.Pause (0.25)

b_m75_place_rev (rdk_b robot_b)
robot_b.setSpeed (500)


#安全的区域移回清洁区域
robot_b.setRounding (20)
robot_b.MoveJ (b_place_to_clean_0)
robot_b.MoveJ (b_place_to_clean_1)
robot_b.MoveJ (b_place_to_clean_2)
robot_b.MoveJ (b_place_to_clean_3)

#增加叶片数下的地方
blade_count = blade_count + 1


#移动安全回到中心位置
robot_b.MoveJ (b_home)



# # - - - - - - - - - - - - - - - - - - - - - - - - - - - - Max宽度- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# #程序从这里开始:

demask_station = Robolink ()
# robot_a = demask_station.Item (“UR5e”)
# robot_b = demask_station.Item (“UR5e2”)

# demask_station。ShowMessage(“线程”)

thread_a =线程。线程(目标= run_robot_a args = ())
thread_b =线程。线程(目标= run_robot_b args = ())

thread_a.start ()
thread_b.start ()



thread_a.join ()
thread_b.join ()

# demask_station。ShowMessage(“线程”)
# 2
我能够解决这个问题后大量的调试通过的两个解决方案,我选择第二个选项:

1。第一个线程之后添加一个短睡眠命令开始打电话。
代码:
thread_a.start ()
睡眠(0.01)
thread_b.start ()



2。删除最后一个ShowMessage行代码。似乎这是一个较慢的函数。我用它来调试之前,我意识到我可以打印到控制台。
代码:
def run_robot_a ():
#收集所需的物品从车站树机器人
rdk_a = Robolink ()
robot_a = rdk_a.Item (“UR5e”)

rdk_a。ShowMessage(“机器人”)




用户浏览这个线程:
1客人(年代)