把obj,mtl格式導入Blender,修改,然後導出爲COLLADA(.dae),寫urdf,最後導入Gazebo

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章