了解德雷克语境中的状态组
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)
,您将看到不同的元素以及它们的来源。
我已经用 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)
,您将看到不同的元素以及它们的来源。