线程评级:
快速读取整个帧树的方法
# 1
你好,

我试图通过Python API访问整个站帧图。我注意到一个函数setpos为了提高效率,一次设置多个姿势。所有站姿都有类似的姿势吗?

谢谢你!
瑞克
设置多个姿势的最快方法是关闭渲染并更新所有你需要的姿势。然后,您可以重新打开渲染。
# 3
对不起,我的问题不清楚。我想打电话给getPose非常快。现在我在场景中有大约70个项目,每次调用大约需要0.05秒,所以需要超过3.5秒来查找整个场景框架树。
# 4
你用什么编程语言?您能分享一个示例RDK项目和代码吗?

我们也许能帮你提高速度。
# 5
代码:
(self, item: robolink.Item)
如果项目。Type == robolink。ITEM_TYPE_ROBOT:
parent_tform_item = item.PoseFrame()
elif项目。Type == robolink。ITEM_TYPE_TOOL:
parent_tform_item = item.PoseTool()
其他:
parent_tform_item = item.Pose()

parent_name = item.Parent().Name()
child_name = item.Name()
# self.tf_broadcaster。sendTransform(parent_tform_item, parent_name, child_name)

def publish_transforms_recursive(self, item: robolink.Item):
childds ():
self.publish_transform(孩子)
self.publish_transforms_recursive(孩子)

def publish_all_frames(自我):
base_item = self.link.Item(get_root_frame_name())
self.publish_transforms_recursive (base_item)

上面是一些示例代码。我没有一个站文件,我可以共享,但上述代码位应该适用于任何站。
# 6
我不确定为什么你在使用Pose()时会遇到这样的延迟。我尝试了以下代码,它在50多个项目中表现良好。


代码:
Items = {}
为RDK.ItemList()中的item:
items[item] = item. pose ()

你能使用pstats找到瓶颈吗?
你会不会不止一次地递归处理条目?
有关RoboDK及其功能的有用信息,请访问我们的在线文档通过观看我们的教程YouTube频道
# 7
(10-14-2022, 12:29 am)山姆写道:我不确定为什么你在使用Pose()时会遇到这样的延迟。我尝试了以下代码,它在50多个项目中表现良好。


代码:
Items = {}
为RDK.ItemList()中的item:
items[item] = item. pose ()

你能使用pstats找到瓶颈吗?
你会不会不止一次地递归处理条目?

嗨,山姆,

谢谢你的回复。我这边再多做些检查。

呼叫的速度有多快项。构成?这个呼叫的速度是否以任何方式是站内物品数量的函数?实际上我在空间站里有大约300件物品,但其中约250件是看不见的。由于一些robodk问题,我不得不保留这些在Linux中动态加载纹理文件。基本上,我在Windows中创建了一个默认站点,并在需要时移动我想要的对象。这就是为什么我做一些递归调用,而不是像你上面显示的那样读取每一项。我只关心在link.Item (get_roof_frame_name ())树枝。
# 8
还有一件事。刚刚看到Event_Loop的例子,看起来很有趣。https://github.com/RoboDK/RoboDK-API/blo...nt_Loop.py

在我的场景中,很多物品都是静止的。EVENT_ITEM_MOVED_POSE事件看起来很酷,但有没有办法告诉哪个项目移动了?谢谢!
# 9
(10-14-2022,下午04:13)rshanor写道:还有一件事。刚刚看到Event_Loop的例子,看起来很有趣。https://github.com/RoboDK/RoboDK-API/blo...nt_Loop.py

在我的场景中,很多物品都是静止的。EVENT_ITEM_MOVED_POSE事件看起来很酷,但有没有办法告诉哪个项目移动了?谢谢!

我最终通过设置以下标志解决了我的问题。
代码:
robolink.Robolink.NODELAY = True
link = robolink.Robolink(robodk_ip)

这将API调用的速度提高了20倍到100倍
如果使用安全模式选项时有很多对象,那么获取项目的姿态(item. pose())可能会稍微慢一些。安全模式选项意味着RoboDK将检查您提供的指针是否存在于项目中的所有可用项中。

你可以通过删除安全模式选项来加快速度:
代码:
robolink.Robolink。Safe_mode = 0
link = robolink.Robolink(robodk_ip)

关于事件,当您获得一个新事件时,您还将收到与该事件关联的项(您所指向的示例中的项变量)。注意,事件通道应该是一个单独的Robolink对象,它应该只用于监听事件。在c# API中有一个类似的例子:
https://github.com/RoboDK/RoboDK-API/blo...K.cs#L2807

感谢您对无延迟选项的反馈!我知道这只适用于Linux。




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

Baidu
map