2025年6月25日 星期三

Scale size for STL model

 如果你將 STL 迷宮(例如 ros_maze_house.stl)載入 Gazebo 後發現尺寸過大,

可以透過以下幾種方式調整:


✅ 方法一:修改 model.sdf 中的 <scale> 參數

這是最常見也是推薦的做法:

xml
<mesh> <uri>model://maze_house/meshes/ros_maze_house.stl</uri> <scale>0.1 0.1 0.1</scale> <!-- 原本是 1 1 1 --> </mesh>

🔍 說明:

  • <scale>x y z</scale> 會將 STL 模型在 Gazebo 中縮放為原本的幾倍

  • STL 本身單位常是 mm,而 Gazebo 預設是 meter

    • 所以如果你的 STL 是以「毫米」建立,應縮放為 0.001 0.001 0.001


✅ 方法二:直接重新縮放 STL 模型(在 Blender / FreeCAD)

若你偏好調整原始 STL 模型尺寸:

  1. 開啟 STL 模型(如在 Blender)

  2. 進入編輯模式,縮放為 1:10 或更小

  3. 匯出時確保單位為「meter」或按實際比例轉換

  4. 重新匯出 .stl 檔案並替換原本模型


✅ 方法三:Gazebo GUI 手動縮放(不建議)

雖然 Gazebo GUI 可以手動縮放模型,但不會保存在 .world.sdf 裡,無法版本控制與重現,因此不推薦。


✅ 建議數值參考

STL 模型單位建議縮放比scale
毫米(mm)轉換為米(1/1000)0.001 0.001 0.001
公分(cm)轉換為米(1/100)0.01 0.01 0.01
已為米(m)無需縮放1.0 1.0 1.0

✅ 修改範例(完整 model.sdf

xml
<model name="maze_house"> <static>true</static> <link name="maze_link"> <visual name="visual"> <geometry> <mesh> <uri>model://maze_house/meshes/ros_maze_house.stl</uri> <scale>0.01 0.01 0.01</scale> <!-- 假設原始是 cm 單位 --> </mesh> </geometry> </visual> <collision name="collision"> <geometry> <mesh> <uri>model://maze_house/meshes/ros_maze_house.stl</uri> <scale>0.01 0.01 0.01</scale> </mesh> </geometry> </collision> </link> </model>

✅ 縮放後要注意:

  1. collisionvisual 的 scale 必須一致

  2. 若你的機器人在地面下或浮空,可能是 STL 原點不在底部中心(可在 Blender 修正)

  3. 若模型未正確套用縮放,請 清除 Gazebo 模型快取 再重新啟動:

    bash
    rm -rf ~/.gazebo/models/*

Scale size for STL model 

沒有留言:

張貼留言