全关节连接多体系统?

Fully joint connected multibody system?

我目前正在创建一个球体系统,它可以启动以相互推开。每个角都有中心体(蓝绿色),通过 PrismaticJoint 连接到连接体(黄色),它们以相同的方式连接到下一个角。

在创建一维球体系统时,例如 1x1x4 系统,我 运行 没有出现任何错误,并且系统的行为符合预期。

在尝试以 2x2x2 方向创建一个由八个球体组成的系统时,我 运行 陷入了动员错误。 这是系统的样子:

错误:

terminate called after throwing an instance of 'std::runtime_error'
  what():  This mobilizer is creating a closed loop since the outboard body already has an inboard mobilizer connected to it. If a physical loop is really needed, consider using a constraint instead.
Aborted (core dumped)

我知道错误来自共享子实体或外部实体的关节,例如立方体的两侧驱动一个角的情况。不幸的是,我还没有找到一种方法来成功地使用约束。我怎样才能更好地定义这个系统?

解决这个问题的一种方法是使用 Drake bushing element (essentially a stiff spring and damper) to emulate a "weld" constraint. There is a nice example of this approach in Drake -- see examples/multibody/four_bar

一般的想法是通过锯开一个或多个物体来打破拓扑环,然后将它们与套管焊接在一起(这不算拓扑环)。