从教程开始,我想尝试对二阶线性系统进行 PID 控制。我在模拟闭环时遇到了段错误。我已经把我的代码放在 Gist 上。它与动态系统教程中的示例基本相同。
这是有效的
- 模拟仅包含二阶系统的图表
- 将 PendulumPlant 放入二阶系统并使用控制器
- 每一步都
simulator.AdvanceTo
- 这就是发生段错误的地方
我确定我在这里遗漏了一些明显的东西。有更多经验的人知道出了什么问题吗?
我现在正在调查这个问题——我还使用提供的 python 在本地成功地重现了该错误,但我也直接在 C++ 中重现了它。[转载于现已解散的分支]
当我有具体的东西时,我会更新。
更新 1:您在这两个系统中有一个代数循环(一个不存在的代数循环,PendulumPlant
因为它的导数和输出用它的状态而不是它的输入来表示)。在这种情况下,两个系统的输出都直接取决于它们的输入,所以,kablooie!在这种情况下,该错误正在弄清楚为什么没有立即与您沟通。
大概,您还想知道这个程序的正确版本是什么,它没有代数循环。敬请关注。
最终更新
已经通过补丁来纠正潜在的错误。根据您访问 Drake 的方式,它会立即在 master 中可用,或者您可以等待下一个二进制文件(根据您的喜好)。
感谢您提请我们注意这个问题。
感谢您报告此事。我在快速检查时没有看到任何东西。我运行了您的代码(在 linux 和 mac 上)并且能够重现。绝对你不应该看到一个静默的段错误,所以这是一个真正的问题。
我在这里升级它:https ://github.com/RobotLocomotion/drake/issues/12497
FTR - 我还打开了一个 PR 来改进 PidController 文档。 https://github.com/robotlocomotion/drake/pull/12496