以启动时候将碗放置到桌子上为例
1. 在table的model.sdf中关闭重力
table添加false到模型SDF文件
~/.gazebo/models/table/model.sdf
<model name="table">
<static>true</static>
<gravity>false</gravity>
...
</model>
2. 在bowl的model.sdf中添加插件
使用Attach插件动态吸附
~/.gazebo/models/bowl/model.sdf
<plugin name="attach_plugin" filename="libgazebo_ros_attach.so">
<robot_namespace>/</robot_namespace>
<model_name>bowl</model_name>
<link_name>bowl_link</link_name>
<attach_to>table::link</attach_to>
<pose>0 0 0.1 0 0 0</pose> <!-- 相对坐标 -->
</plugin>
3. 启动文件中增加桌子和碗
碗的投影在桌子上就行,z坐标只要比桌子高即可,能看到启动时候碗从上面落到桌子上的过程,这里写了25米
~/suo/ur_gazebo/install/ur_simulation_gazebo/share/ur_simulation_gazebo/worldscompo.world
<?xml version="1.0"?>
<sdf version="1.7">
<world name="compo_world">
<!-- 原始UR5模型(由ur_sim_control.launch.py自动加载) -->
<!-- 新增桌子 -->
<include>
<uri>model://table</uri>
<pose>1.5 0 0 0 0 0</pose>
</include>
<!-- 新增bowl -->
<include>
<uri>model://bowl</uri>
<pose>1.5 0 25 0 0 0</pose>
</include>
</world>
</sdf>