线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
如何获取和设置移动指令的“目标链接”项目?
# 1
我如何得到一个程序的移动指令的“目标链接”项目?目标和移动指令是在GUI中创建的,我想通过API获得链接的目标项。

我发现我可以使用' instruction()'获得指令的几个参数:

代码:
p = RDK.Item('myProgram',ITEM_TYPE_PROGRAM)
ins_name, ins_type, move_type, isjointttarget, pose, joint = p.指令(2)#选择'2',第三条指令

但是,这并不提供链接的目标项。此外,输出'pose'似乎是根据链接的目标项目的第一个父参考框架定义的,但如果我不能确定指令链接到哪个目标项目,那么我也不能确定'pose'的参考框架。

这个问题的第二部分是:我如何通过API更改/设置“目标链接”项目到不同的目标项目?(即不只是改变指令的“姿势”,而是改变实际的目标项目)。类似于在GUI的右键单击指令菜单中实现的功能如下所示:



最好的问候,

Maarten
# 2
嗨Mearten,

你走在正确的道路上!

目前,不可能通过API直接编辑链接的Target Item。
你得把说明书换成新的。

下面是一个示例代码,可以让您了解这个概念。

代码:
进口robolink
RDK = robolink.Robolink()

prog = RDK。ItemUserPick(“选择要编辑的程序”,robolink.ITEM_TYPE_PROGRAM)
old_target = RDK。ItemUserPick(“选择要替换的目标”,robolink.ITEM_TYPE_TARGET)
new_target = RDK。ItemUserPick(“选择新的目标”,robolink.ITEM_TYPE_TARGET)

inst_count = prog.InstructionCount()
For I in range(inst_count):
instruction_dict = prog.setParam(i)
如果instruction_dict['Type'] == robolink。INS_TYPE_MOVE:
如果old_target.Name() in instruction_dict['Name']:
prog.InstructionSelect(i) #选择要替换的指令
prog.MoveJ(new_target) #添加新指令(正确使用MoveJ或MoveJ)
掠夺。setParam(i, {'Type': -1}) #删除指令
i += 1 #复位指令指针

您可以在文档中找到更多信息
请阅读论坛的指导方针之前发帖!
有关RoboDK的有用信息,请访问我们的在线文档
# 3
嗨,山姆,

谢谢你的帮助。您的代码示例是不是有点冒险,因为您假设指令的名称包含目标的名称?

代码:
如果old_target.Name() in instruction_dict['Name']:

默认情况下,联合移动指令的名称确实以其形式包含目标的名称,例如:“MoveJ (targetName)”。但是用户可以自由地重命名指令。此外,用户可以在创建指令后重命名目标。如果没有目标名称作为指令名称的一部分,您的代码示例将错过链接。

(代码也会给出假阳性,例如:MoveJ (target10),其中包含target1和target10的名称。但这可以通过更具体的字符串比较来解决。)

在指令中,除了作为指令名称一部分的目标项名称之外,是否没有其他指示符指向链接的目标项?

最好的问候,

Maarten
# 4
我刚刚发现,在GUI中移动指令的名称会自动更新,以匹配默认名称和链接目标的名称(如果更改则更新),在Python脚本中运行以下几行:

代码:
* # RoboDK API
RDK = Robolink()

p = RDK.Item('myProgram',ITEM_TYPE_PROGRAM)
ins_dict = p.setParam(2) #获取第三条指令
打印(ins_dict)
p.setParam(2,ins_dict) #设置第三条指令为我刚刚得到的
ins_dict = p.setParam(2) #再次获取第三条指令
打印(ins_dict)

所以我有一个(第三)指令和目标:
MoveJ (target1)和target1
我在GUI中手动更改指令名称和目标名称:
MoveJA (target1B)和target1C
然后我运行上面的代码,指令的名称自动更新为:
MoveJ (target1C)和target1C

也许水下的东西会被刷新?如果指令的命名实际上是由此强制执行的,那么它可以使从指令的名称检索链接的目标项成为一个可行的选择。
# 5
实际上,我提供的示例代码并不健壮。
在API中添加更方便的方法之前,它是作为一种解决方法提供的。
你得使它适应你的需要。

为了使其更加健壮,您可以检索所需的目标姿势并将其与指令姿势进行比较。
如果名字和姿势匹配,很可能你替换的是正确的指令。

其他方法:
  • 创建两个具有不同目标的程序
  • 使用所需的目标Item通过API从头开始创建程序
请阅读论坛的指导方针之前发帖!
有关RoboDK的有用信息,请访问我们的在线文档




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

Baidu
map