参考:
1. CSAIL的一个教程
2. http://playerstage.sourceforge.net/doc/Gazebo-manual-svn-html/tutorial_mesh.html
3. http://gazebosim.org/tutorials?tut=import_mesh
感觉Gazebo在这方面不如VREP方便,不支持各种格式的mesh文件的导入,修改,YCB数据集里面又没提供dae或者stl格式来放到urdf里,上回给VREP做好的模型导出为dae居然在urdf里又报错告诉不能读取,Google了一圈好像大都建议用Blender导进来处理一下再导出,试了一下果然可以。
一、下载安装Blender
不要用Ubuntu软件里安的那个,发现那个根本没有导出为dae的选项。直接从Blender官网下载,解压缩,右键运行blender就好了。
二、导入obj格式文件
存放obj格式文件的地方一般还会有同名的mtl格式文件,obj存放的是几何定义,mtl存放的是材质,直接导入obj,关联的mtl也会导入了,导入后按”Alt + z”来开启texture shading就可以看到有材质的模型了。
三、修改模型
如果不做任何修改直接导出dae,然后放到urdf里颜色会很暗,这里我把amount of light to emit调整到0.5。
“右键点击香蕉选中 -> 右上角点material -> 下面shading标签 -> 调整emit”
Shadeless好像没必要,后来我就没选这个了。
四、导出为dae并放到urdf里
“File -> Export -> Collada(.dae)”
可以看到导出了一个dae文件和一个png文件,下面是011_banana.urdf
文件写法:
<robot name="011_banana">
<link name="011_banana_link">
<inertial>
<origin xyz="0 0 0" />
<mass value="0.411" />
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" />
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://ycb_benchmarks/meshes/011_banana.dae" />
</geometry>
</visual>
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://ycb_benchmarks/meshes/011_banana.dae" />
</geometry>
</collision>
</link>
<gazebo reference="011_banana">
<material>Gazebo/Red</material>
</gazebo>
</robot>
五、在Gazebo中进行仿真
写一个launch文件,gazebo.launch
<?xml version="1.0"?>
<launch>
<!-- these are the arguments you can pass this launch file, for example paused:=true -->
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<!-- We resume the logic in empty_world.launch -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include>
<!-- send robot urdf to param server -->
<param name="robot_description" textfile="$(find ycb_benchmarks)/urdf/011_banana.urdf" />
<!-- push robot_description to factory and spawn robot in gazebo -->
<node name="spawn_gazebo_model" pkg="gazebo_ros" type="spawn_model"
args="-urdf -param robot_description -model robot -z 0.1"
respawn="false" output="screen" />
</launch>
终端进入我的workspace, souce devel/setup.sh
,然后运行
roslaunch ycb_benchmarks gazebo.launch
问题:
现在urdf里面的mass和inertia都是随便写的,Gazebo仿真的时候物体表现果然很诡异,这个显然不能挨个调,Google了下有些用meshlab来计算inertia的攻略,这个留到下篇博客写。