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

我的问题是,我可以让任何一个机器人完成它的功能,但不能让两个机器人都完成。我在这里做错了什么,我需要如何修改robolink命令来使这个设置工作?有人能帮忙吗?



我的python代码粘贴在下面。我不确定我在做什么不同于下面的例子:

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

谢谢!


代码:
输入help("robolink")或help("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 ():
#从机器人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。项目('Active Input Bin') # 'Active Bin'参考框架
M75_tray = rdk_a。项目('M75输入托盘')# 'M75托盘'参考框
项目('Disk3A') #Disk3A参考框架
disk_1a = rdk_a.Item('Disk1A') #
robot_a.setPoseFrame (bin_input_active)
Blade_count = 0


#设置机器人A的线性速度、加速度和舍入
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时:
#更新活动bin的位置
M75_set_active_bin_pos (rdk_a, bot_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)

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

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

#清理磁盘1A
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。项目('Active Output Bin') # 'Active Bin'参考框架
Table_center = rdk_b。项目(“表中心”)
b_home = rdk_b.Item(' b_home ')
项目(' 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

#设置机器人A的线性速度、加速度和舍入
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)


#清理3B磁盘
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)
#更新活动bin的位置
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)



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

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

# demask_station。ShowMessage(“线程”)

Thread_a = threading。线程(target = run_robot_a, args = ())
Thread_b = threading。线程(target = run_robot_b, args = ())

thread_a.start ()
thread_b.start ()



thread_a.join ()
thread_b.join ()

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

1.在第一个线程启动调用之后添加一个简短的sleep命令。
代码:
thread_a.start ()
睡眠(0.01)
thread_b.start ()



2.删除最后一行ShowMessage代码。看来这是一个比较慢的函数。在我意识到我可以打印到控制台之前,我正在使用它进行调试。
代码:
def run_robot_a ():
#从机器人A的工作站树中收集所需物品
rdk_a = Robolink()
robot_a = rdk_a.Item('UR5e')

rdk_a。ShowMessage(“机器人”)




浏览此线程的用户:
1客人(年代)