首页 > 解决方案 > 与多体植物的直接搭配/直接转录

问题描述

我正在尝试对使用 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。所以也许对我的问题最简单的解决方案是请求这个功能..

标签: drake

解决方案


我在上面建议我们其添加assume_non_continuous_states_are_fixedDirectTranscription. 但是这个选项没有实现的原因有点微妙,所以我会在这里添加它。

实际上并不是MultibodyPlant添加抽象状态,而是SceneGraph. SceneGraph对于动力学/规划,只有在动力学中依赖接触力时才需要。对于 acrobots / cart-poles 等,您已经可以通过仅将 MBP (no ) 传递给优化来使用MultibodyPlantwith 。对于确实建立和中断联系的系统我会说这可能不是您想要的算法;尽管没有硬性规定说它行不通。只是你最终会得到僵硬的微分方程,这些方程很难在没有明确推理接触的合理轨迹优化中转录。DirectTranscriptionSceneGraphDirectTranscription

我想我知道您的应用程序,其中涉及接触并保持接触的车轮。这意味着您确实需要SceneGraph. 如果当前缺少的组合非常有意义,那么这可能是一种情况,我们应该添加它。


推荐阅读