最近在gazebo上添加actor进行仿真,我按照一般网上的教程,下载collision的包,也生成libcollisionplugins.so文件,添加路径等都没问题,最后出来的actor仅仅脚可以被激光检测,雷达激光直接穿过腿部,这是有问题的。

后来我对collision包下面的actorcollisionplugin.cc进行测试,在其中输出一些collision的信息。开始的输出大概如下:

这是我自己定义的碰撞名称以及scale。

  actorcollisionplugin.cc中&collision : link->GetCollisions()

得到的是actor的碰撞名称

但是我得到的输出是:leftleg_collision;leftfoot_collision;之类的名称(这个忘截图了),我再查看actorcollisionplugin.cc中的

if (scaling.find(name) != scaling.end())
      {
        auto boxShape = boost::dynamic_pointer_cast<gazebo::physics::BoxShape>(
            collision->GetShape());

这就明显不对了,因为我自己设置的collision和link得到的collision名称不一样!!这就是的最后的boxshape没有。在gazebo中的表现就是

 collision下的geometry是球形,不是box!!这样的话,我设置的那些scale就完全对应不上,这是有问题的。

我有查看了源码的actor.cc文件,发现其中只添加了boxcollision,没有其他collision。

 this->AddBoxCollision(linkSdf,
            bone->GetName() + "_" + curChild->GetName() + "_collision",
            bonePose, ignition::math::Vector3d(0.02, 0.02, length));

 这就让我很迷惑,尝试了好几次,发现都不行。

最后我决定,重新下载gazebo9,根据gazebo的官网操作安装,最后成功了。

成功后的碰撞插件输出是这样的:

 这样的collision名称就和我自己在.world中定义的collision名称一致了,我的scale也就有用了。

运行gazebo得到的collision属性是这样的:

collision的geometry变成了box,这样就等于成功了。最后看看雷达检测的效果。

 这就说明成功了。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐