0

从教程开始,我想尝试对二阶线性系统进行 PID 控制。我在模拟闭环时遇到了段错误。我已经把我的代码放在 Gist 上。它与动态系统教程中的示例基本相同。

这是有效的

  • 模拟仅包含二阶系统的图表
  • 将 PendulumPlant 放入二阶系统并使用控制器
  • 每一步都simulator.AdvanceTo- 这就是发生段错误的地方

我确定我在这里遗漏了一些明显的东西。有更多经验的人知道出了什么问题吗?

4

2 回答 2

1

我现在正在调查这个问题——我还使用提供的 python 在本地成功地重现了该错误,但我也直接在 C++ 中重现了它。[转载于现已解散的分支]

当我有具体的东西时,我会更新。


更新 1:您在这两个系统中有一个代数循环(一个存在的代数循环,PendulumPlant因为它的导数和输出用它的状态而不是它的输入来表示)。在这种情况下,两个系统的输出都直接取决于它们的输入,所以,kablooie!在这种情况下,该错误正在弄清楚为什么没有立即与您沟通。

大概,您还想知道这个程序的正确版本是什么,它没有代数循环。敬请关注。


最终更新

已经通过补丁来纠正潜在的错误根据您访问 Drake 的方式,它会立即在 master 中可用,或者您可以等待下一个二进制文件(根据您的喜好)。

感谢您提请我们注意这个问题。

于 2019-12-18T15:11:28.137 回答
1

感谢您报告此事。我在快速检查时没有看到任何东西。我运行了您的代码(在 linux 和 mac 上)并且能够重现。绝对你不应该看到一个静默的段错误,所以这是一个真正的问题。

我在这里升级它:https ://github.com/RobotLocomotion/drake/issues/12497

FTR - 我还打开了一个 PR 来改进 PidController 文档。 https://github.com/robotlocomotion/drake/pull/12496

于 2019-12-18T13:33:12.210 回答