把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就可以看到有材质的模型了。
把obj,mtl格式导入Blender,修改,然后导出为COLLADA(.dae),写urdf,最后导入Gazebo_第1张图片

三、修改模型

如果不做任何修改直接导出dae,然后放到urdf里颜色会很暗,这里我把amount of light to emit调整到0.5。

“右键点击香蕉选中 -> 右上角点material -> 下面shading标签 -> 调整emit”
Shadeless好像没必要,后来我就没选这个了。

把obj,mtl格式导入Blender,修改,然后导出为COLLADA(.dae),写urdf,最后导入Gazebo_第2张图片

四、导出为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/Redmaterial>
  gazebo>
robot>

五、在Gazebo中进行仿真
写一个launch文件,gazebo.launch


<launch>
    
    <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"/>

  
    <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>

    
    <param name="robot_description" textfile="$(find ycb_benchmarks)/urdf/011_banana.urdf" />

    
    <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

把obj,mtl格式导入Blender,修改,然后导出为COLLADA(.dae),写urdf,最后导入Gazebo_第3张图片

问题:

现在urdf里面的mass和inertia都是随便写的,Gazebo仿真的时候物体表现果然很诡异,这个显然不能挨个调,Google了下有些用meshlab来计算inertia的攻略,这个留到下篇博客写。

你可能感兴趣的:(ros学习)