线程评级:
  • 0 (s) - 0平均投票
  • 1
  • 2
  • 3
  • 4
  • 5
一个非阻塞的运动命令仍然是阻碍我的代码
# 1
我在仿真模型中运行代码。我想移动机器人手臂没有阻止我可以得到TCP的手臂的位置移动。我是移动机器人手臂使用moveJ命令。检查如果MoveJ命令仍然是阻碍,我添加了打印命令。这是我的代码:
代码:
运动运动:
打印(“开始:”+ str (time.time ()))
机器人。MoveJ(运动,阻止= False)
打印(“站:”+ str (time.time ()))

我可以告诉代码仍是阻碍,因为有一个1.3秒启动和停止打印语句之间的延迟。为什么代码仍然阻塞?它总是在模拟块模式吗?我需要使用图书馆“asyncio”阻塞吗?
# 2
我能够得到它的工作通过使用async.io:


代码:
异步def non_blocking(循环,执行程序):
等待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目标

R2.MoveJ (R2_T1 False) # 3联合第二移动机器人R2 R2_T1目标
R2.MoveJ (R2_T2 False) # 4联合第二移动机器人R2 R2_T2目标

尽管选择屏蔽= False, # 1和# 2的两个连续的移动命令有效R1介绍阻塞行为,因为命令# 2才执行命令完成# 1。执行命令# 3和# 4 R2也因此阻塞,直到命令完成# 1。

R1的行为我想是连续执行其命令# 1和# 2,没有阻止R2开始连续执行命令# 3和# 4,相互独立的繁忙的状态。

任何建议如何实现异步。io在这种情况下,或任何其他方式?

最好的问候,

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

做你打算完成它会更好,如果你插入每个机器人的运动:
代码:
R1.MoveJ (R1_T1 False) R1_T1 # 1的第一个机器人R1移动到目标
R2.MoveJ (R2_T1、虚假)# 2第二目标R2_T1机器人R2

R1.MoveJ (R1_T2 False) R1_T2 # 3的第一个机器人R1移动到目标
R2.MoveJ (R2_T2、虚假)# 4第二目标R2_T2机器人R2
你也可以停止机器人的运动通过触发R1.Stop ()。您可能需要从一个单独的线程,你将会触发这个包装你的运动在一个try / catch如果你不想让你的脚本停止。
# 5
嗨,阿尔伯特,洗牌的命令并不能解决这个问题。你建议的顺序:

  • 命令# 3 R1 R1完成之前不会执行命令# 1,这在预料之中。
  • 命令# 4 R2 R2完成之前不会执行命令# 2,这在预料之中。
  • 命令# 4 R2 R1完成之前不会执行命令# 1,剩下的问题是哪一个

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

同时,我需要一个通用的解决方案,适用于任何数量的命令和移动命令的任何时间。而连续的订单命令个体机器人固有的排队,当一个新的命令的组合顺序连续机器人将事先未知的命令。但是因为机器人应该独立运作,合并后的订单应该无关紧要:每个机器人简单地执行自己的独立的连续命令列表。
# 6
我明白过去的运动命令不执行除非1和2是完整的示例中我们讨论了。这是一个很好的观点。为了解决这个问题,你应该运行机器人运动的每一组相同的机器人在一个单独的线程。一个单独的脚本也行(它是一个单独的线程)。

MoveRobot脚本的例子“同步3机器人和一个屏幕”的例子就是这么做的(每个移动机器人在一个单独的线程)。
# 7
艾伯特谢谢你的帮助,但是我发现“与屏幕同步3机器人”的例子相当复杂理解所谓的简单的事我想实现。

我和两个机器人附加一个精简站,每个三个联合目标,和一个python脚本,我打算让机器人执行一系列动作沿着他们的目标,两个同时运行(不需要同步)。我可能无法正确使用线程。你能看看这个脚本使它按预期工作吗?


附加文件
.rdk indepMove.rdk(尺寸:1.31 MB /下载:4雷电竞app下载安卓1)
# 8
嗨艾伯特,你能发现这个问题上周在车站我上传吗?运行程序的行为时很意外:有时机器人做开始移动序列作为一个线程,有时他们没有。




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

Baidu
map