线程评分:
  • 0投票 - 0平均
  • 1
  • 2
  • 3
  • 4
  • 5
非阻滞运动命令仍在阻止我的代码
我正在以模拟模式运行代码。我想移动机器人臂而不会阻塞,这样我就可以在手臂移动时获得TCP的位置。我正在使用MoveJ命令移动机器人臂。要检查MoveJ命令是否仍在阻止,我添加了打印时间命令。这是我的代码:
代码:
用于运动中的运动:
打印(“开始:” +str(time.time()))
robot.movej(移动,blocking = false)
打印(“停止:” +str(time.time()))

我可以知道该代码仍在阻塞,因为开始和停止打印语句之间存在1.3秒的延迟。为什么代码仍会阻止?它总是以模拟模式阻止吗?我需要使用诸如“ Asyncio”之类的库来使其无障碍?
我能够通过使用async.io来使它起作用:


代码:
异步def non_blocking(循环,executor):
等待异步。
fs = {
loop.run_in_executor(执行程序,getPosition),
loop.run_in_executor(executor,moverobot),
},,
return_when = asyncio.all_completed
我遇到了同一问题:

我有两个机器人(R1和R2)在一个站中,从API中,我想向其中的任何一个发射非阻滞移动命令。以最简单的形式:

代码:
r1.movej(r1_t1,false)#1联合移动第一个机器人R1到Target R1_T1
r1.movej(r1_t2,false)#2联合移动第一个机器人R1到Target R1_T2

R2.MoveJ(R2_T1,FALSE)#3联合移动第二机器人R2到Target R2_T1
R2.MoveJ(R2_T2,FALSE)#4联合移动第二机器人R2到Target R2_T2

尽管选项blocking = false,但两个连续的移动命令#1和#2 to to r1有效地引入了阻止行为,因为在命令#1完成之前,命令#2才能执行。因此,命令#3和#4至R2的执行也被阻止,直到命令#1完成为止。

我想要的行为是让R1连续执行其命令#1和#2,而无需阻止R2以启动连续执行命令#3和#4,独立于彼此的忙碌状态。

在这种情况下,有什么建议如何实施异步或任何其他方法?

此致,

马丁




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