线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
一个非阻塞移动命令仍然阻塞了我的代码
# 1
我在模拟模式下运行我的代码。我想在不阻塞的情况下移动机械臂,这样我就可以在机械臂移动时获得TCP的位置。我正在使用moveJ命令移动机械臂。为了检查MoveJ命令是否仍然阻塞,我添加了打印时间命令。这是我的代码:
代码:
对于动作中的动作:
print("Start: " +str(time.time()))
机器人。MoveJ(运动,阻止= False)
print("Stop: " +str(time.time()))

我可以看出代码仍然阻塞,因为在开始和停止打印语句之间有1.3秒的延迟。为什么代码仍然阻塞?它总是阻塞在模拟模式?我是否需要使用像“asyncio”这样的库来使其非阻塞?
# 2
我能够通过使用async.io让它工作:


代码:
Async def non_blocking(loop, executor):
等待asyncio.wait (
fs = {
getPosition loop.run_in_executor(执行器),
moveRobot loop.run_in_executor(执行器),
},
return_when = asyncio。ALL_COMPLETED
# 3
我遇到了同样的问题:

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

代码:
R1. movej (R1_T1,False) #1关节将第一个机器人R1移动到目标R1_T1
R1. movej (R1_T2,False) #2关节将第一个机器人R1移动到目标R1_T2

2. movej (R2_T1,False) #3关节移动第二个机器人R2到目标R2_T1
2. movej (R2_T2,False) #4关节移动第二个机器人R2到目标R2_T2

尽管选项blocking=False,但是将命令#1和#2连续移动到R1会有效地引入阻塞行为,因为在命令#1完成之前,命令#2不会执行。因此,命令#3和命令#4对R2的执行也被阻塞,直到命令#1完成。

我想要的行为是R1连续执行它的命令#1和#2,而不阻止R2开始连续执行命令#3和#4,独立于彼此的忙碌状态。

对如何实现异步有什么建议吗?在这种情况下,还是其他方式?

最好的问候,

Maarten
# 4
同一机器人的每一个动作都不执行,除非前一个动作完成。

为了完成您计划完成的任务,最好将每个机器人的动作插入:
代码:
R1. movej (R1_T1,False) #1移动第一个机器人R1到目标R1_T1
movej (R2_T1,False) #2移动第二个机器人R2到目标R2_T1

R1. movej (R1_T2,False) #3移动第一个机器人R1到目标R1_T2
movej (R2_T2,False) #4移动第二个机器人R2到目标R2_T2
还可以通过触发R1.Stop()来停止机器人的运动。你可能需要从一个单独的线程触发这个,如果你不想让你的脚本停止,你必须在一个try/catch中包装你的运动。
# 5
嗨,Albert,打乱命令并不能解决问题。按照你提出的顺序:

  • 到R1的命令#3将不会执行,直到R1完成命令#1,这是预期的。
  • 到R2的命令#4将不会执行,直到R2完成命令#2,这是预期的。
  • 在R1完成命令#1之前,对R2的命令#4不会执行,剩下的问题是什么

我希望能够向R1和R2提供命令,并让它们连续执行命令,而不管其他机器人的状态如何。

此外,我还需要一个通用的解决方案,它适用于任何数量的命令和移动命令的任何时间持续时间。当一个新命令进入队列时,对单个机器人的连续命令的顺序是固有的,而两个机器人的连续命令的组合顺序将是事先未知的。但是由于两个机器人应该独立操作,组合顺序应该是无关的:每个机器人只是独立地执行自己的连续命令列表。
# 6
我明白,在我们讨论的例子中,除非1和2完成,否则最后一个移动命令不会执行。这是一个很好的观点。要解决这个问题,您应该在单独的线程上运行同一机器人的每组机器人运动。一个单独的脚本也可以工作(它最终成为一个单独的线程)。

“同步3个机器人与屏幕”示例的示例MoveRobot脚本正是这样做的(它在一个单独的线程上移动每个机器人)。
# 7
谢谢你的帮助,Albert,但是我发现“用屏幕同步3个机器人”的例子非常复杂,很难理解,因为我想要实现的是一个简单的事情。

我附加了一个带有两个机器人的精简站,每个机器人有三个联合目标,以及一个python脚本,我打算让机器人沿着它们的目标执行一系列运动,同时运行(不需要同步)。我可能没有正确使用线程。你能看一下脚本,使其工作如期进行吗?


附加文件
.rdk indepMove.rdk(大小:1.31 MB /下载:72022世界杯国家队名单1)
# 8
嗨,艾伯特,你能发现我上周上传的站点的问题吗?运行程序时的行为是非常出乎意料的:有时机器人会以线程的形式启动它们的移动序列,有时则不会。




浏览此主题的用户:
1客人(年代)