如何解决Drake 中 LeafSystem 的更新频率问题
我构建了一个微分逆运动学系统,并将其连接到 ManipulationStation
。选择了默认时间步长 0.002。在我看来,微分逆运动学系统中的回调函数每 0.002 秒调用一次。但是,在回调函数内部打印系统的Context
时,结果显示如下。
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 5e-05
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.0001
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.0001
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.00035
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.0006
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.0006
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.0013
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.002
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.002
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.003
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.004
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.004
::diagram::__main__.DifferentialIKSystem@0000000004076300 Context
------------------------------------------------------------------
Time: 0.005
为什么仿真时间没有增加 0.002?
解决方法
操纵站示例图里面有很多系统。答案将取决于您的回调函数具体位于何处,以及您在图表中拥有的其他系统。
ManipulationStation
里面有一个 MultibodyPlant
;如果您设置该系统的 time_step
,它将设置植物的 time_step
(将其置于离散模式)。但是DifferentialIkSystem
文件夹中的examples/manipulation_station
也是一个动力系统,它有自己的time_step
,不必和植物一样。并且图中可能还有其他系统会导致模拟器执行与工厂 time_step
不同的集成步骤。
特别是,DifferentialIkSystem
的输出被馈送到 iiwa_position
输入,它实际上直接馈送到 iiwa_position
输出端口。因此,任何从 ManipulationStation
请求输出的系统都将要求 DifferentialIkSystem
计算其输出端口值。因此,如果您的回调在输出方法中,您会期望它在下游系统请求该输出端口的值时随时触发。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。