Robosuite是基于mujoco封装的机器人操作库,而mujoco的碰撞检测是基于凸壳,也就是geom必须是凸的,如果是凹的话,凹的部分会有一个透明的屏障而无法与其他物体有碰撞。但是实际场景很多物体都不是凸的,比如杯子的口是凹进去的。
解决办法:
- 1 使用v-hacd将物体的obj模型分解为多个凸模型
pybullet的py库里集成里该函数:
import pybullet as pinput_obj = '/home/wdx/anaconda3/envs/mujoco/lib/python3.7/site-packages/robosuite/models/assets/objects/meshes/025_mug/textured.obj'
output_obj = input_obj.replace('.obj', '_vhacd.obj')p.vhacd(input_obj, output_obj, 'log.txt')
用blender打开生成的模型:
其中每一个部分都可以单独导出成obj/stl模型文件。
- 2 在robosuite的物体xml模型文件中,分别导入每一个凸模型组成整体的模型