关于gazebo的actor
最近在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,这样就等于成功了。最后看看雷达检测的效果。

这就说明成功了。
更多推荐
所有评论(0)