天天看點

三 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.dae和duck.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>
           

結果如圖:

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

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

繼續閱讀