drake - 与多体植物的直接搭配/直接转录
问题描述
我正在尝试对使用 sdf 文件指定的自定义机器人进行轨迹优化。
我想使用直接搭配,但是当我尝试使用 time_step=0.0 创建 MultibodyPlant 时,我因段错误而失败。当我使用离散时间(例如 Multibodyplant(time_step=.005))时,它工作得很好。
但是,如果我使用离散时间,状态不再是连续的,所以我不能使用直接搭配。所以我尝试使用直接转录,我得到了错误
SystemExit: Failure at bazel-out/k8-opt/bin/systems/framework/_virtual_includes/context/drake/systems/framework/context.h:111 in num_total_states(): condition 'num_abstract_states() == 0' failed.
我认为原因是 DirectTranscription 没有assume_non_continuous_states_are_fixed
与这个问题相同的问题:direct transcript for compass gait。所以也许对我的问题最简单的解决方案是请求这个功能..
解决方案
我在上面建议我们将其添加assume_non_continuous_states_are_fixed
到DirectTranscription
. 但是这个选项没有实现的原因有点微妙,所以我会在这里添加它。
实际上并不是MultibodyPlant
添加抽象状态,而是SceneGraph
. SceneGraph
对于动力学/规划,只有在动力学中依赖接触力时才需要。对于 acrobots / cart-poles 等,您已经可以通过仅将 MBP (no ) 传递给优化来使用MultibodyPlant
with 。对于确实建立和中断联系的系统,我会说这可能不是您想要的算法;尽管没有硬性规定说它行不通。只是你最终会得到僵硬的微分方程,这些方程很难在没有明确推理接触的合理轨迹优化中转录。DirectTranscription
SceneGraph
DirectTranscription
我想我知道您的应用程序,其中涉及接触并保持接触的车轮。这意味着您确实需要SceneGraph
. 如果当前缺少的组合非常有意义,那么这可能是一种情况,我们应该添加它。
推荐阅读
- reactjs - useSelector 钩子和重新渲染
- assembly - Intel x86 程序集中的算术指令
- javascript - 如果所有引导手风琴都打开,请检查并执行某些操作
- javascript - Axios 和 Express:在 Get 请求中发送 params 会向后端发送一个空的 params 对象
- angular - 如何在角度 8 中推送过滤器索引而不是数组索引
- python - Series 的真值是模棱两可的。排序列表时使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- visual-studio-code - vscode intellisense cmake-tools 与外部库
- javascript - 如何使用基于世界位置坐标的值转换 Object3D 坐标?
- c# - 将未知大小的二维数组快速转换为c#
- sql - 将两个查询的结果除以 SQL 中的另一个查询