如何解决在初始化期间从机器人硬件姿势更新德雷克系统状态
我一直在尝试使用 drake 中的 Kuka IIWA 硬件设置一个自定义操作站。我让硬件接口正常工作。运行关节遥操作码(改编自drake/examples/manipulation_station/joint_teleop.py
)时,机器人先是剧烈抽搐(所有关节都试图移动到0位置),然后继续正常运行。深入挖掘后,我发现这是由 FirstOrderLowPassFilter
系统引起的。在稍微推进模拟 (simulator.Advanceto(1e-6)
) 以评估 LCM 消息以设置初始 GUI 滑块-filter_initial_output_value
-植物关节位置等,以匹配硬件时,FirstOrderLowPassFilter 输出瞬时值0. 这会将实例的 IIWA_COMMAND 位置设置为零并导致抖动。
我怎样才能避免这种行为?。
作为一种解决方法,在初始化 drake 系统并在推进模拟之前设置 filter_initial_output_value
之前,我单独订阅来自硬件的原始 LCM 消息。这是推荐的方式吗?。
解决方法
我认为你在做什么(手动阅读 LCM 消息)很好。
或者,看看 DiscreteDerivative
如何提供 suppress_initial_transient = true
选项。也许我们可以在 FirstOrderLowPassFilter
中添加一个类似的选项(通过不受限制的更新事件),以便在 t == 0 时从输入中采样初始输出值。但是启动的事件排序可能仍然很困难。我们本质上需要按照系统的数据流顺序初始化系统,包括在事件触发时刷新输出端口,这是本机不支持的。
在另一种选择中,也许我们可以将 IIWA_COMMAND 发布者配置为不在 t == 0 时发布,而是仅发布 t >= 0.005。
,FirstOrderLowPassFilter
有一个设置初始值的方法。 https://drake.mit.edu/doxygen_cxx/classdrake_1_1systems_1_1_first_order_low_pass_filter.html#aaef7539cfbf1acfa0cf487c371bc5360
它在您复制的示例中使用: https://github.com/RobotLocomotion/drake/blob/master/examples/manipulation_station/joint_teleop.py#L146
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。