在 Drake 中生成和取消生成对象
Spawning and Despawning objects in Drake
我的模拟中有一个机器人,它可以将物体运送到不同地方。我想在某个位置生成一个初始速度为 0 的对象。触发器很可能是碰撞检测或前一个对象到达某个位置时触发。我还想在使用后或从机器人的末端执行器上掉下来时取消生成对象(以防止对象掉落后发生核心转储)
drake 中是否有连续生成和取消生成对象的方法?
谢谢
Drake 无法自动 spawn/despawn 对象。几种可能性:
- (最简单)在模拟过程中检测触发事件("monitor" 函数可以方便地实现)。收回控制权,用新的或移除的对象重建模型,将状态从旧的 Context 转移到新的,然后重新启动。
- 在初始模型中提供所有需要的对象,但使不需要的对象处于非活动状态(将它们放置在远处,将它们的速度设置为零,并使其加速度为零
*
)。使用 monitor() 或 witness 函数检测触发事件,activate/deactivate 个对象来模拟 spawn/despawn.
*
让不活动的对象静止不动可能需要一些努力。您可以使用控制器来完成此操作,或者通过创建一个像 spring/damper 一样工作的 ForceElement,直到被布尔状态变量禁用。其他人可能对此有更好的想法。
我的模拟中有一个机器人,它可以将物体运送到不同地方。我想在某个位置生成一个初始速度为 0 的对象。触发器很可能是碰撞检测或前一个对象到达某个位置时触发。我还想在使用后或从机器人的末端执行器上掉下来时取消生成对象(以防止对象掉落后发生核心转储)
drake 中是否有连续生成和取消生成对象的方法?
谢谢
Drake 无法自动 spawn/despawn 对象。几种可能性:
- (最简单)在模拟过程中检测触发事件("monitor" 函数可以方便地实现)。收回控制权,用新的或移除的对象重建模型,将状态从旧的 Context 转移到新的,然后重新启动。
- 在初始模型中提供所有需要的对象,但使不需要的对象处于非活动状态(将它们放置在远处,将它们的速度设置为零,并使其加速度为零
*
)。使用 monitor() 或 witness 函数检测触发事件,activate/deactivate 个对象来模拟 spawn/despawn.
*
让不活动的对象静止不动可能需要一些努力。您可以使用控制器来完成此操作,或者通过创建一个像 spring/damper 一样工作的 ForceElement,直到被布尔状态变量禁用。其他人可能对此有更好的想法。