參考:
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的攻略,這個留到下篇博客寫。