Gazebo教程(四)如何制作model

之前還有一個教程是關于如何上傳model的,由于我沒有這個需求也沒有bitbucket的帳號所以就不做了。

簡介

這個教程會教關于模型SDF的一些細節。
SDF模型從簡單到難都可以做,它取決于<model>的SDF標記,它本質上就是一個關于鏈接、關節、碰撞目標、視覺以及插件的收集。生成一個模型文件可能很困難,取決于你想要的模型的復雜程度。

SDF模型的組成部分

links:鏈接包括模型的物理性能,可以是輪子或者鏈子,每個link都要包括碰撞以及視覺屬性。減少link的數量可以改善模型的表現和穩定度。比如,1個桌子模型包括5個link(四條腿和一個板)通過關節來進行鏈接,但是這樣太復雜了,特別是這些關節從來不動,所以我們可以只用1個link和5個元素來組成這個桌子。
Collision:一個碰撞單元包括來一個用來進行碰撞檢測的幾何形狀。最好是一個簡單的形狀,或者是一個三角網格(這會花費更多的資源)。一個link當中可能會包含很多碰撞元素。
Visual:一個視覺元素用來使link可視化,一個link可以包括0個或者更多。
Inertial:慣性元素表示link的運動性能,比如轉動慣量矩陣和質量等。
Sensor:傳感器通過插件收集世界當中的數據,一個link當中可以包括0個或者更多。
Light:一個光元素卡亞描述link的光資源,同上0個或更多。

Joints:一個關節用來鏈接兩個link,一個類似于父母和孩子的關系被建立,其中的參數包括旋轉軸的位置以及轉軸限制。

Plugins:插件是一個由第三方寫好用來控制模型的共享程序庫。

建立模型

  1. 第一步 收集網格
    這個步驟包括收集所有你建立模型時需要的3Dmesh。Gazebo提供了一個簡單的形狀,方塊/球/圓柱體。如果你的程序需要更復雜的,繼續往下看。
    你可以從許多地方獲取網格文件,Google's 3D warehouse這是谷歌的一個庫,或者你已經有了必要的文件,可以自己通過Blender或者Sketchup制作mesh。
    在gazebo當中的mesh文件必須以使用STL/Collada/OBJ的格式。Collada或者OBJ更受歡迎。

tips:
1.使用你的3D建模軟件移動mesh使其定位在中間,這種放置方式可以使模型在gazebo中的放置更加容易。
2.Collda和OBJ文件格式可以讓你把材料固定在網格上,可以使用這種方式來改善你網格的視覺效果。
3.盡量保持網格的簡單,這個特別重要如果你要把它當作碰撞單元。普通的聯系可以使用邊較少的多邊形作為碰撞單元,多的多邊形作為視覺效果。更好的嘗試可以使用內置的形狀作為碰撞單元進行測試。

第二步:制作模型的SDF文件
從一個簡單的模型文件或者copy別人的文件開始,這里的捷徑就是找一個你已經知道或者是可以簡單調試的項目。
這里有個基礎的小盒子模型可以作為碰撞模型,其中包括了視覺以及慣性部分。
首先制造一個box.sdf文件,然后把下面的程序拷貝到里面。

<?xml version='1.0'?>
<sdf version="1.4">
<model name="my_model">
  <pose>0 0 0.5 0 0 0</pose>
  <static>true</static>
    <link name="link">
      <inertial>
        <mass>1.0</mass>
        <inertia> <!-- inertias are tricky to compute -->
          <!-- http://gazebosim.org/tutorials?tut=inertia&cat=build_robot -->
          <ixx>0.083</ixx>       <!-- for a box: ixx = 0.083 * mass * (y*y + z*z) -->
          <ixy>0.0</ixy>         <!-- for a box: ixy = 0 -->
          <ixz>0.0</ixz>         <!-- for a box: ixz = 0 -->
          <iyy>0.083</iyy>       <!-- for a box: iyy = 0.083 * mass * (x*x + z*z) -->
          <iyz>0.0</iyz>         <!-- for a box: iyz = 0 -->
          <izz>0.083</izz>       <!-- for a box: izz = 0.083 * mass * (x*x + y*y) -->
        </inertia>
      </inertial>
      <collision name="collision">
        <geometry>
          <box>
            <size>1 1 1</size>
          </box>
        </geometry>
      </collision>
      <visual name="visual">
        <geometry>
          <box>
            <size>1 1 1</size>
          </box>
        </geometry>
      </visual>
    </link>
  </model>
</sdf>

記得盒子的中心要與其幾何中心重合,為了讓盒子的底部在地板上,我們要出初始化<pose>0 0 0.5 0 0 0</pose>這一行是讓盒子在地板之上。
tips:上面制作的這個簡單小盒子是靜態的,所以不能移動,這是一個在建圖當中很有用的特征(有些東西不能動比如墻)。當你完成了你的模型,設定<static>標識變成flase如果你想讓模型移動。

第三步:加入模型的<sdf>文件
當你完成了sdf文件的創建,你可以慢慢增加復雜性,隨著更多特性的增加使你的模型更加逼真。

以下是一個比較好的增加特性的順序:
1.加一個link
2.設置一個碰撞元素
3.設置一個視覺元素
4.設置一個慣性屬性
5.返回1制作完所有link
6.加入關節
7.加入插件

源網頁:http://gazebosim.org/tutorials?tut=build_model&cat=build_robot

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容