PrismaticJoint limits not enforced

耗尽温柔 提交于 2020-06-16 18:52:38

问题


I'm creating a system of bodies with radially expanding bodies connected with PrismaticJoints, and finding that, although I initialized each joint with joint position limits, the joints pass these limits due to external forces like gravity easily. Here is a plot showing some joints' translations over time to show how they pass the lower and upper limits at 3.5 and 4.2:

What am I missing? My call to create the joints looks like this:

const multibody::Joint<double>& joint = plant_->AddJoint<drake::multibody::PrismaticJoint>(
        shpere_name + "_joint",
        center_body, std::nullopt,
        connect_body, std::nullopt,
        unitVlist()[j], r_low, r_upp, 0);

where

  • *_body are bodies,
  • unitVlist() returns a list of unit vectors to pull from,
  • r_low and r_upp are doubles corresponding to the lower and upper limits.

回答1:


Currently joint limits in Drake are only enforced by the discrete solver, that is, what you get if you supply a time step in the MultibodyPlant constructor. Our continuous integrators don't see the limits yet. We are aware of that but I couldn't actually find a GitHub issue complaining about it -- would you mind filing one? You can do it here (select "New Issue").



来源:https://stackoverflow.com/questions/61788760/prismaticjoint-limits-not-enforced

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!