微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在初始化期间从机器人硬件姿势更新德雷克系统状态

如何解决在初始化期间从机器人硬件姿势更新德雷克系统状态

我一直在尝试使用 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?