2025年2月6日 星期四

STL 或 COLLADA(.dae)格式 如何應用於RDF 編輯內 使 gazebo 載入

我來說明如何將 STL 或 COLLADA(.dae) 格式的 3D 模型應用於 URDF/SDF 並在 Gazebo 中載入:

URDF 中使用 3D 模型

  1. 基本結構示例
xml
<robot name="my_robot"> <link name="base_link"> <visual> <geometry> <mesh filename="package://my_robot_description/meshes/base.dae" scale="1 1 1"/> </geometry> </visual> <collision> <geometry> <mesh filename="package://my_robot_description/meshes/base_collision.stl"/> </geometry> </collision> </link> </robot>
  1. 文件組織結構
my_robot_package/ ├── urdf/ │ └── robot.urdf ├── meshes/ │ ├── visual/ │ │ ├── part1.dae │ │ └── part2.dae │ └── collision/ │ ├── part1.stl │ └── part2.stl └── package.xml

實施步驟

  1. 準備模型文件
  • 對於視覺模型(visual):
    • 優先使用 COLLADA (.dae),保留材質和紋理
    • 確保模型尺寸正確
    • 注意坐標系方向
  • 對於碰撞模型(collision):
    • 使用簡化的 STL 文件
    • 移除不必要的細節
    • 減少面數以提高性能
  1. URDF 配置
xml
<!-- 視覺模型配置 --> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://my_robot/meshes/visual/part.dae" scale="0.001 0.001 0.001"/> </geometry> <material name="blue"> <color rgba="0 0 1 1"/> </material> </visual> <!-- 碰撞模型配置 --> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://my_robot/meshes/collision/part.stl"/> </geometry> </collision>
  1. 常見參數說明
  • filename: 模型文件路徑
  • scale: 縮放比例(如果模型單位不是米)
  • origin: 位置和方向偏移
  • rpy: 滾動、俯仰、偏航角度
  1. 載入到 Gazebo
bash
# 啟動 Gazebo 並載入模型 roslaunch gazebo_ros empty_world.launch # 載入 URDF 模型 rosrun gazebo_ros spawn_model -urdf -param robot_description -model my_robot

常見問題解決

  1. 模型不可見
  • 檢查文件路徑是否正確
  • 確認 scale 參數設置
  • 檢查坐標系方向
  1. 碰撞檢測問題
  • 簡化碰撞模型
  • 確保碰撞幾何體完全包圍視覺模型
  • 檢查collision標籤設置
  1. 性能優化
  • 減少模型面數
  • 使用適當的碰撞幾何體
  • 合理設置物理參數

最佳實踐

  1. 分離視覺和碰撞模型
  • 視覺模型可以較為詳細
  • 碰撞模型盡量簡單
  1. 文件命名規範
  • 使用有意義的名稱
  • 區分視覺和碰撞模型
  • 保持一致的命名方式
  1. 版本控制
  • 為模型文件使用版本控制
  • 記錄模型修改歷史
  • 備份重要模型文件

沒有留言:

張貼留言

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

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