iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
自我挑戰組

ROS 筆記:要怎麼叫無人機自己飛系列 第 16

【ROS 筆記:要怎麼叫無人機自己飛】Day 16:匯入模型到 Gazebo 中(二),介紹模型描述檔(Model SDF file)

  • 分享至 

  • xImage
  •  

今天接續上篇,繼續介紹怎麼用 XML 格式來描述 Gazebo 裡面的模型。

建立一個 ROS-Gazebo 專案的模型檔

前往 models 目錄建立一個模型目錄,我先取名為 my_model。接著在裡面建立模型配置檔 model.config 和模型描述檔 model.sdf

$ mkdir models/my_model

$ touch models/my_model/model.config

$ touch models/my_model/model.sdf

模型配置 model.config

model.config 檔案是用來定義模型的基本資訊,例如模型的名稱、版本、作者資訊等,這些資訊有助於 Gazebo 確認和使用該模型。

model.config 加入內容如下:

<?xml version="1.0"?>

<model>
	  <name>My model</name>
	  <version>1.0</version>
	  <sdf version="1.5">model.sdf</sdf>
	
	  <author>
		    <name>Your Name</name>
		    <email>your@mail.com</email>
	  </author>
	
	  <description>
		    This is a rectangular metal box model for gazebo simulation.
	  </description>
</model>

模型描述 model.sdf

SDF(Simulation Description Format,模擬描述格式)是 Gazebo 在模擬環境中呈現物件的檔案格式,在這個系列文中會採用 1.5 版的 SDF 格式。關於 SDF 格式的文件可以查看 SDFormat.org 的規格文件

model.sdf 檔案是用來定義模型的幾何形狀、物理性質、材質等具體屬性。在這裡,我們會建立一個簡單的長方體模型。

model.sdf 加入內容如下,這裡包含了一些常見的模型描述:

<?xml version="1.0" ?>
<sdf version="1.5">
  <model name="my_model">
    <static>false</static>
    <pose>0 0 0 0 0 0</pose>
    
    <!-- 設定模型的連結部分, 這一篇先不談 -->
    <link name="base_link">
      <!-- 慣性設定 -->
      <inertial>
        <mass>8.37</mass>
        <inertia>
          <ixx>0.194</ixx>
          <iyy>0.264</iyy>
          <izz>0.104</izz>
        </inertia>
      </inertial>
      
      <!-- 碰撞設定 -->
      <collision name="collision">
        <geometry>
          <box> <!-- 定義模型為一個箱體 -->
            <size>0.3 0.2 0.5</size> <!-- x, y, z 尺寸, 單位:公尺 -->
          </box>
        </geometry>
        <surface>
          <friction>
            <ode>  <!-- 摩擦力採用 ODE 物理引擎計算 -->
              <mu>100</mu> <!-- 水平方向的摩擦係數 -->
              <mu2>50</mu2> <!-- 垂直方向的摩擦係數 -->
            </ode>
          </friction>
        </surface>
      </collision>
      
      <!-- 視覺設定 -->
      <visual name="visual">
        <geometry>
          <box> <!-- 定義模型為一個箱體 -->
            <size>0.3 0.2 0.5</size> <!-- x, y, z 尺寸, 單位:公尺 -->
          </box>
        </geometry>
        <material>
          <script> <!-- 使用 Gazebo 的材質檔 -->
            <uri>file://media/materials/scripts/gazebo.material</uri>
            <name>Gazebo/Red</name>
          </script>
        </material>
      </visual>
      
    </link>
  </model>
</sdf>
  1. <model> 標籤:

    • <static> 標籤:定義模型是否是靜態的。如果模型是靜態的,它不會受物理引擎影響而移動。這裡設為 false,表示該模型可以移動。

    • <pose> :在建立模型時,可以設定模型預設位置和姿態,六個數值分別代表位置向量 xyz(以公尺為單位),和旋轉角度 rollpitchyaw(以弧度為單位)。

  2. <link> 標籤:

    連結(link)是 SDF 格式中模型的基本單位,可以包含慣性、碰撞、視覺等屬性。對於連結的概念會在之後要建立一個較複雜模型時會再詳細介紹。

    • <inertial> 標籤:設定模型的質量和轉動慣量(Inertia),這影響模型對外力的抵抗效果。例如,如果將一台無人機的質量和轉動慣量設定很小,那它就很容易被風吹走,或者原地起飛就會開始到處亂轉。

      轉動慣量通常是 3x3 矩陣形式,但在 Gazebo 中只需要提供對角線上的三個值(ixxiyyizz),分別對應物體沿 X、Y、Z 軸的旋轉慣性。
      這些數值是根據物體的形狀及其質量分佈計算的,對於不同形狀的物體計算公式不同,我這裡的數值是請 ChatGPT 提供的。

    • <collision> 標籤:定義模型的碰撞屬性,決定了模型會如何與環境中的其他物體進行碰撞和反彈。這裡使用了一個簡單的長方體來表示碰撞區域。在這個標籤中可以設定幾何形狀尺寸(<geometry>)和表面性質(<surface>)。

      表面性質影響模型的摩擦力、碰撞恢復係數等。常用的屬性有::摩擦力(<friction>)、彈性(<bounce>)和觸感(<contact>)。

    • <visual> 標籤:設定模型的視覺屬性,包括幾何形狀和材質。這裡使用灰色作為模型的外觀顏色。在這個標籤中可以設定幾何形狀尺寸(<geometry>)、材質(<material>)和透明度(<transparency>)。一般來說會將幾何形狀設定的和 <collision> 標籤一致。

      碰撞和視覺的幾何形狀可以是簡單的幾何體,也可以是網格模型(使用 .dae 檔案)。
      常見的幾何形狀有:箱體(<box>)、球體(<sphere>)、圓柱體(<cylinder>)和網格(<mesh>)。


和昨天一樣,雖然也是沒有做什麼太複雜的東西,卻寫了好多呀!不過雖然設定好了模型,但是還要透過世界檔(.world)來放進模擬環境中,下一篇就會介紹世界檔的設定方式,到時候就可以看到今天設定的模型的樣子囉。


上一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 15:匯入模型到 Gazebo 中(一),介紹啟動檔(Launch file)
下一篇
【ROS 筆記:要怎麼叫無人機自己飛】Day 17:匯入模型到 Gazebo 中(三),介紹世界檔(World file)
系列文
ROS 筆記:要怎麼叫無人機自己飛25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言