德雷克的自动差异时间

时间:2021-06-17 02:55:17

标签: drake

在 Drake 文档 https://drake.mit.edu/doxygen_cxx/group__system__scalar__conversion.html 中给出的示例中,我们能够对状态(特别是本例中的 theta)采用 Autodiff 导数。有没有一种简单的方法来获取关于时间的导数?我目前的想法是从 get_mutable_continuous_state_vector() 将时间附加到状态向量,但这似乎有点 hacky?

1 个答案:

答案 0 :(得分:1)

您可以将时间变量设置为导数中的一个。例如

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));

然后,使用该上下文的计算输出将具有关于时间的导数。