一、问题描述
按照之前的教程,我们能够实现在gazebo环境环境中添加actor标签,可以是人或者是立方体等,并且让其按照我们既定的轨迹来运动。
但是问题又来了。添加的actor就像幽灵一样,随意穿越机器人,而且无法被雷达检测到。
根本原因是,actor没有碰撞属性。
开始解决问题之前,我们首先确保各自版本和环境。
- ROS melodic
- gazebo 9
二、解决办法
1. gazebo的插件
使用gazebo提供的对应插件实现碰撞检测功能。
如果是默认安装的话,gazebo所有插件的安装位置:
/usr/lib/x86_64-linux-gnu/gazebo-9/plugins
进入对应链接,能看到很多插件:
我们要解决的问题,需要用到的插件:
-
libAttachModelPlugin.so
这个插件能够将actor绑定在一个model上,这个model本身是有碰撞属性的,所以actor也就有了。 -
libActorCollisionsPlugin.so
比如面向的actor是人物模型,那么该模型本身就有很多关节。这个插件能够将人体每个部件做精细的描绘。实现更准确的碰撞仿真。
然而,ros自带gazebo下载好后,并没有这两个插件,我们需要自行下载。
第二个比较精细的插件,我在官网找到了资源,我传到CSDN中,不用积分,方便大家下载。
link
第一个我还没找到对应插件,不过第一个肯定没有第二个好用,我也懒得再找了。
2. 安装插件并在gazebo中使用
按照常规流程编译插件:
mkdir build
cd build
cmake ..
make
然后我们可以在build目录下看到对应的插件:
使用sudo将插件拷贝到我们之前提到的gazebo插件目录里:
sudo cp libActorCollisionsPlugin.so /usr/lib/x86_64-linux-gnu/gazebo-9/plugins
OK! 我们测试下是否可行:
gazebo actor_collisions.world
之后我们就可以按照actor_collisions.world
中的写法,照猫画虎,在自己的actor标签中,添加对应插件了!
参考文献
https://github.com/osrf/gazebo/tree/gazebo11/examples/plugins/actor_collisions
https://github.com/BruceChanJianLe/gazebo-actor
https://blog.csdn.net/tanjia6999/article/details/102629735