了解德雷克语境中的状态组

Understanding State Groups in Context in Drake

我已经用 LQR 控制器、MultiBodyPlant、场景图和 PlanarSceneGraphVisualizer 创建了一个图表。

在尝试 运行 此模拟时,我使用以下函数设置了随机初始条件:context.SetDiscreteState(randInitState)。但是,有了这个,我得到以下错误:

RuntimeError: Context::SetDiscreteState(): expected exactly 1 discrete state group but there were 2 groups. Use the other signature if you have multiple groups.

确实,当我使用 context.num_discrete_state_groups() 检查组数时,它 returns 2. 因此,我必须在使用命令 [=13= 设置状态时指定组索引].这有效,但我不完全知道为什么。我知道我必须 select 一个正确的组来设置状态,但这里的组到底是什么?在给定 here 的 cartpole 示例中,上下文是使用 context.SetContinuousState(UprightState() + 0.1 * np.random.randn(4,)) 设置的,没有指定任何组。

组只对离散系统有效吗?上下文 documentation 谈论组但没有定义它们。

在图表中设置具有多个系统的 drake 模拟时,是否可以找到组的定义以及如何检查系统的组索引?

我们通常会建议您使用使用子系统接口设置上下文的工作流。例如

plant_context = plant.GetMyMutableContextFromRoot(context)
plant_context.SetContinuousState(...)

计算出 DiagramContext 状态组的离散索引可能是可能的,但这肯定不是典型的。

您可能会发现打印上下文很有帮助。在 pydrake 中,您实际上只需调用 print(context),您将看到不同的元素以及它们的来源。