如何解决德雷克的自动差异时间
在 Drake 文档 https://drake.mit.edu/doxygen_cxx/group__system__scalar__conversion.html 中给出的示例中,我们能够对状态(特别是本例中的 theta)采用 Autodiff 导数。有没有一种简单的方法来获取关于时间的导数?我目前的想法是从 get_mutable_continuous_state_vector() 将时间附加到状态向量,但这似乎有点 hacky?
解决方法
您可以将时间变量设置为导数中的一个。例如
auto autodiff_plant = System<double>::ToAutoDiffXd(*plant);
auto autodiff_context = autodiff_plant->CreateDefaultContext();
autodiff_context->SetTimeStateAndParametersFrom(*context);
autodiff_plant->FixInputPortsFrom(*plant,*context,autodiff_context.get());
// Differentiate with respect to theta by setting dtheta/dtheta = 1.0.
constexpr int kNumDerivatives = 1;
autodiff_context->SetTime(initializeAutoDiffXd(initial_time));
然后,使用该上下文的计算输出将具有关于时间的导数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。