2025年2月6日 星期四

什麼是 SDF?

 SDF (Simulation Description Format) 是 Gazebo 模擬器使用的標準 XML 格式,用來描述 機器人、環境、傳感器、燈光、物理屬性等。相比 URDF (Unified Robot Description Format),SDF 支援更多 仿真相關的物理設定,例如摩擦、彈性、流體動力學等。


📖 1️⃣ SDF XML 基本結構

<sdf version="1.9"> <world name="default"> <include> <uri>model://ground_plane</uri> </include> <model name="myrobot"> <static>false</static> <link name="chassis"> <pose>0 0 0.1 0 0 0</pose> <inertial> <mass>10.0</mass> <inertia> <ixx>0.5</ixx> <iyy>1.0</iyy> <izz>0.1</izz> <ixy>0.0</ixy> <ixz>0.0</ixz> <iyz>0.0</iyz> </inertia> </inertial> <visual name="chassis_visual"> <geometry> <box> <size>0.4 0.2 0.1</size> </box> </geometry> <material> <ambient>0.8 0.8 0.8 1</ambient> </material> </visual> <collision name="chassis_collision"> <geometry> <box> <size>0.4 0.2 0.1</size> </box> </geometry> <surface> <friction> <ode> <mu>0.5</mu> <mu2>0.5</mu2> </ode> </friction> </surface> </collision> </link> </model> </world> </sdf>

📌 2️⃣ SDF XML 標籤說明

標籤作用範例
<sdf>SDF 主標籤,指定版本<sdf version="1.9">
<world>定義仿真世界<world name="default">
<include>引入模型<include><uri>model://ground_plane</uri></include>
<model>定義機器人或物體<model name="myrobot">
<static>設定模型是否固定<static>false</static>
<link>定義機器人組件<link name="chassis">
<pose>位置與姿態<pose>0 0 0.1 0 0 0</pose>
<inertial>定義質量與慣性<mass>10.0</mass>
<visual>設定外觀模型<visual name="chassis_visual">
<geometry>幾何形狀<box><size>0.4 0.2 0.1</size></box>
<material>設定材質<ambient>0.8 0.8 0.8 1</ambient>
<collision>設定碰撞體<collision name="chassis_collision">
<surface>設定物理屬性<friction><ode><mu>0.5</mu></ode></friction>

📌 3️⃣ SDF 設計與編寫工具流程

✅ 1. 選擇適合的編輯工具

工具用途
VS Code推薦,支援 SDF XML 語法高亮
Gazebo Model Editor內建 SDF 視覺化編輯
SDF Validator (sdf CLI)檢查 SDF 格式正確性
Blender + .dae/.stl建立 3D 模型,匯出至 SDF

✅ 2. 撰寫 SDF 文件

  1. 建立 SDF 檔案

    mkdir -p ~/gazebo_ws/models/myrobot cd ~/gazebo_ws/models/myrobot touch model.sdf touch model.config
  2. 撰寫 model.sdf

    <sdf version="1.9"> <model name="myrobot"> <static>false</static> <link name="base"> <pose>0 0 0 0 0 0</pose> <visual name="base_visual"> <geometry> <cylinder> <radius>0.2</radius> <length>0.1</length> </cylinder> </geometry> </visual> </link> </model> </sdf>
  3. 撰寫 model.config (用於 Gazebo 瀏覽模型)

    <model> <name>myrobot</name> <version>1.0</version> <sdf version="1.9">model.sdf</sdf> <author> <name>My Name</name> <email>myemail@example.com</email> </author> <description>Simple mobile robot</description> </model>

✅ 3. 測試 SDF 模型

  1. 檢查 SDF 格式是否正確

    sdf validate model.sdf

    如果沒有錯誤,則表示格式正確。

  2. 將模型加載到 Gazebo

    gazebo --verbose

    然後在 Gazebo 內:

    • Insertmyrobot拖曳進場景

📌 4️⃣ SDF vs. URDF (主要區別)

功能URDFSDF
支援 Gazebo❌ 需要 gazebo_ros 轉換✅ 原生支援
物理屬性🚫 限制較多✅ 更完整 (摩擦、彈性)
感測器🚫 需額外定義✅ 內建支援
燈光❌ 需手動添加✅ 內建 <light> 支援
流體動力學🚫 不支援✅ 支援

🛠 建議:

  • 要在 ROS 內控制機器人URDF + gazebo_ros_control
  • 要完整模擬物理世界SDF

✅ 結論

  1. SDF 是 Gazebo 的原生格式,支援完整的物理屬性。
  2. 可以用 VS Code / Gazebo Model Editor 來設計 SDF
  3. 使用 sdf validate 確保 SDF 格式正確
  4. model.config 讓 Gazebo 讀取你的模型

🚀 你還需要什麼額外的 SDF 設定,例如感測器 (sensor)、燈光 (light)、或馬達 (joint + actuator) 嗎?

沒有留言:

張貼留言

ROS/ROS2 機器人開發、模擬與實作簡介

  主題總覽 #文件主要涵蓋了以下主題: ROS/ROS2 機器人開發框架 : 介紹了 ROS/ROS2 的概念、架構、工具以及它們在機器人開發中的應用。 Gazebo 模擬器 : 介紹了 Gazebo 模擬器的使用,包括環境設定、模型建立、插件應用以及如何與 ROS/ROS2 ...