三 Gazebo學習總結之製作一個模型及導入網格

Models從簡單的形狀到複雜的機器人都有。它指的是<model>SDF標籤,從本質上來說是links、joints、collision objects、visuals和plugins的集合,生成一個模型文件不一定依靠整體模型的複雜性,本文將介紹一些怎麼生成模型的小竅門。

模型的組成部分:

Links:一個link包含了單個模型的物理屬性,可能是一個輪子,或者是一個關節鏈中的一個link。每一個link包含許多碰撞(或衝突)元素和視覺元素,爲了提高性能和穩定性要儘量減少links的數量。例如,一個桌子模型通過關節連接,可以由5個links組成(4條腿和1個桌面),但是,這過於複雜,特別是關節將不能移動,而我們可以用1個link和5個collision元素來創建一個桌子。

Collisions:碰撞元素封裝了一個用於碰撞檢測的幾何結構,可以是一個簡單的形狀(首選),或者是一個三角形的網格(將消耗更多的資源),一個link可能包含許多個碰撞元素。

Visual:一個視覺元素被用於使link部分可視化,一個link包含0個或者多個視覺元素。

Inertial:慣性元素描述了link的動態屬性,例如質量和矩陣轉動慣量。

Sensor:傳感器從world中搜集數據,用於插件的使用,一個link可能包含0個或多個傳感器。

Joint:一個關節連接了兩個link(環節),猶如parent和child的關係,是與其他參數例如旋轉抽及關節限制建立在一起的。

Plugins:插件是由第三方爲了控制模型而創建的一個共享庫。

建立一個模型:

Step 1:集合網格

這一步涉及到爲構建模型集合所需要的所有必要的3D網格文件,Gazebo提供了一組簡單的形狀:box,sphere和cylinder,如果你的模型需要更復雜的東西,請繼續閱讀。

網格來自於很多地方,Google的3D warehouse是一個很好的3D模型庫,其次,你可能已經擁有了必要的文件,最後,你可以使用3D建模軟件例如Blender和Sketchup來製作自己的網格。

Gazebo要求網格文件被轉換爲STL或者Collada格式,Collada爲首選格式。

小竅門:1.使用3D建模軟件移動每個網格,使它的中心在原點,這將使在Gazebo中的模型放置明顯變得容易。

                2.Collada(.ada)文件格式允許將材料連接到網格,使用這個機制是爲了提高網格的視覺外觀。

                3.保持網格簡單。尤其是如果計劃使用網格作爲碰撞元素,一個通用的做法是使用一個低多邊形網格作爲碰撞元素,和使用一個高多邊形網格作爲視覺。一個較好的做法是使用內置的形狀(box,sphere,cylinder)作爲碰撞元素。

Step2:創建模型SDF文件

從創建一個很簡單的模型文件,或者複製一個存在的模型文件開始,關鍵的是要知道運行的(是什麼)東西,或易於調試。

下面是一個只有單元大小形狀,非常基本的最小box模型文件作爲碰撞幾何,和相同的單元慣性視覺的例子:

創建模型文件:

  vim box.sdf
複製以下內容到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>
          <ixx>1.0</ixx>
          <ixy>0.0</ixy>
          <ixz>0.0</ixz>
          <iyy>1.0</iyy>
          <iyz>0.0</iyz>
          <izz>1.0</izz>
        </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>


注意:Box的幾何原點是在box的幾何中心,因此爲了這個box的底部能與地平面齊平,一個<pose>0 0 0.5 0 0 0</pose>的原點被添加,是爲了在地平面上提高box。

小竅門:以上例子設定這個簡單的box模型爲靜態的,使模型不能移動。在模型創造中這個特性是有用的,當開始創建模型時,如果你想你的模型是移動的,設置<static>標籤爲false。

Step3:添加以下特徵到模型SDF文件

對於一個正在運行的.sdf文件,慢慢的開始添加更多的複雜性,對於每一個新添加的特徵,使用圖形客戶端( graphical client)重載模型,以確保model是正確的。

以下是一個很好的添加特徵順序:

a.增加一個link;

b.設定碰撞元素(collision element);

c.設定視覺元素(visual element);

d.設置慣性屬性(inertial properties);

e.返回a,直到所有的links都被添加;

f.增添所有的關節(joints,若有的話)

g.增添所有的插件(plugins,若有的話)

導入網格:

以下內容描述瞭如何將3D網格導入到Gazebo中,Gazebo使用了一個右手定則來確定座標系,Z軸是向上垂直的(中指),X軸是向前指向屏幕的(大拇指),Y軸是指向左邊(食指)。

減少複雜性:許多網格過於複雜,爲了達到高效,一個有上千個三角形的網格應該被減少,或者劃分爲單獨的網格;

中心網:第一步是設置網格中心在(0,0,0),確定向前的方向(可以是主觀的)沿着X軸;

縮放網:Gazebo使用的是米制系統,許多網格(特別是3D warehouse)使用的是英制單位,使用最喜歡的3D編輯器去縮放網格爲米制尺寸。

一旦網格被準備好,以Collada文件格式導入,這個格式將包含所有的3D信息和材料。

測試網格:最容易的測試網格的方法是創建一個名爲my_world.world的簡單world文件來載入網格,用網格的實際名稱代替my_mesh.dae。

<?xml version="1.0"?>
<sdf version="1.4">
  <world name="default">
    <include>
        <uri>model://ground_plane</uri>
    </include>
    <include>
        <uri>model://sun</uri>
    </include>
    <model name="my_mesh">
       <pose>0 0 0  0 0 0</pose>
      <static>true</static>
      <link name="body">
        <visual name="visual">
          <geometry>
            <mesh><uri>file://my_mesh.dae</uri></mesh>
          </geometry>
        </visual>
      </link>
    </model>
  </world>
</sdf>
然後,僅僅在文件所在的目錄內運行Gazebo

gazebo my_mesh.world
例如使用duck.daeduck.png網格文件,把它們一起放在模型目錄下面,或者與world文件放在同一個目錄下面。由於duck網格被定義爲Y軸向上,爲了讓它顯示的是直立的,需要在sdf中設置一個旋轉量。

<visual name="visual">
  <pose>0 0 0  1.5708 0 0</pose>
  <geometry>
    <mesh><uri>file://duck.dae</uri></mesh>
  </geometry>
</visual>
結果如圖:



本文靠自己理解,翻譯而來,錯誤之處望不吝指教!!!

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