首页 > 解决方案 > 如何确保在德雷克中以请求的时间间隔调用 DoPublish

问题描述

我有LeafSystem一个DeclarePeriodicPublish(0.07, 0)

LeafSystem会从 rgbd 相机读取数据,进行一些处理并将结果保存到LeafSystem实例的属性中。还声明了多个输出端口,它们只是将LeafSystem属性中保存的值复制到输出中。

如果我LeafSystem自己对此进行模拟,则行为与预期一致,并且DoPublish大约每 0.07 秒被调用一次。

但是,如果我将它LeafSystem连接到 custom manipulation_station,那么DoPublish每 0.3 秒才会被调用一次。

我不确定如何调试此问题。我在模拟过程中监控了 CPU 使用率,python 命令甚至没有使用一半的内核数,所以我猜 CPU 抖动不是这里的问题。

关于如何解决这个问题的任何建议?read data -> processing -> publish data to other LeafSystems或者也许是在德雷克中实现这种行为的更好方法?

谢谢!

2021 年 6 月 4 日编辑:

用例如下。我的管道是:

从真实的 rgbd 相机捕获数据 -> 执行一些处理 -> 在模拟中向机器人发送命令。

在演示期间,我想将模拟中的机器人视频与捕获的 rgbd 流并排显示。

目前正在通过记录计算机屏幕来捕获模拟中的机器人。

但是,将传入的 rgbd 流渲染到屏幕太慢了。所以我将 rgbd 帧及其时间戳保存在计算机内存中。记录机器人行为后,我使用时间戳将 rgbd 流重新渲染为视频,然后将此视频与机器人的记录合并以形成一个最终视频。

两个时间戳之间的持续时间为 0.3 秒。但是,每个 rgbd 帧的处理只需要 0.05 秒。

时间戳是使用 python 本机 time.time() 函数获得的。

标签: drake

解决方案


这听起来像是一个错误。LeafSystem声明周期性事件的A应该在常规期间调用该事件,而不管其余部分Diagram是什么。

有什么方法可以分享你的代码吗?


推荐阅读