用python规模化生成gazebo中 .world .png 和 .yaml文件
首先,我们需要知道gazebo中基本的 .world 文件组成
然后我们将.world文件中的模型与 .png中的灰度图像进行对应,同时在 .yaml文件中进行坐标、分辨率等参数的对应。
最后我们开始生成 .world .png .yaml文件
一、三种文件的格式
1、.world文件(http://gazebosim.org/tutorials?cat=tools_utilities&tut=logging_playback)
<sdf version ='1.6'>
<world name='default'>
(...)
<light name='sun' type='directional'>
(...)
</light>
<model name='ground_plane'>
(...)
</model>
<model name='double_pendulum_with_base'>
(...)
</model>
</world>
</sdf>
其中我们一般只需要修改 < model >标签就够了,以下是我的一个循环插入圆柱体作为障碍物的代码。分别是模型申明调用和模型定义,首先是申明,然后是模型的定义。
1.cylinder_number是指圆柱体的个数,而 c_value_list['c_value_x_list'][i] 代表了第 i 个障碍物的 x 坐标,y同理。
2.<pose frame=''>表示相对于某个frame的tf转换,这里为空,也就是默认使用基于源坐标系。
3.<link>标签的学习(http://wiki.ros.org/urdf/XML/link),第二个for循环是对模型的定义
4.<scale> 是使用在当前.world文件中的模型是否进行缩放,分别对应 x y z 三个坐标方向
for i in range(cylinder_number):
model_msg_0 = " <model name='c"+ str(i)+"'>\n\
<pose frame=''>" + str(c_value_list['c_value_x_list'][i]) + " "+ str(c_value_list['c_value_y_list'][i]) + " 0 0 -0 0</pose>\n\
<scale>1 1 1</scale>\n\
<link name='link'>\n\
<pose frame=''>" + str(c_value_list['c_value_x_list'][i]) + " "+ str(c_value_list['c_value_y_list'][i]) + " 0 0 -0 0</pose>\n\
<velocity>0 0 0 0 -0 0</velocity>\n\
<acceleration>0 0 0 0 -0 0</acceleration>\n\
<wrench>0 0 0 0 -0 0</wrench>\n\
</link>\n\
</model>\n"
msg_1 = msg_1 + model_msg_0
for i in range(cylinder_numbe