drake - 在 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()
,它返回 2。因此,我必须在使用命令设置状态时指定组索引context.SetDiscreteState(0, randInitState)
。这有效,但我不知道为什么。我知道我必须选择一个正确的组来设置状态,但是这里的组到底是什么?在此处给出的 cartpole 示例中,使用context.SetContinuousState(UprightState() + 0.1 * np.random.randn(4,))
未指定任何组来设置上下文。
组仅对离散系统有效吗?上下文文档讨论了组,但没有定义它们。
在一个图表中设置多个系统的德雷克模拟以及如何检查系统的组索引时,是否有地方可以找到组的定义?
解决方案
我们通常会建议您使用使用子系统接口设置上下文的工作流。例如
plant_context = plant.GetMyMutableContextFromRoot(context)
plant_context.SetContinuousState(...)
为 a 找出状态组的离散索引DiagramContext
可能是可能的,但它肯定不是典型的。
您可能会发现打印上下文很有帮助。在 pydrake 中,您实际上只需调用print(context)
,您将看到不同的元素以及它们的来源。
推荐阅读
- powershell - mkdir 与 New-Item 是相同的 cmdlet 吗?
- hive - MSCK REPAIR 配置单元外部表
- c# - Gridview 中的 TextBox 返回 null 或 'System.Web.UI.WebControls.TextBox'
- node.js - 无法调试 NodeJS 应用程序
- java - android中的java.lang.nullpointer错误
- powershell - 多次替换问题
- image - JavaFX 图像:检查图像是否有效
- r - 通过 RInno 安装设置 R 闪亮的应用程序到期日期
- python - 如何使 argparse 将其他参数作为参数?
- reactjs - 反应本机 NavigationDrawer navigation.toggleDrawer() 不起作用