<!-- 🔹 載入機械手臂到 Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model robot_arm" output="screen"/>📌 spawn_urdf Node 詳細解釋
這行 XML 代碼:
用於 在 Gazebo 內部載入機械手臂模型。這是透過 Gazebo 的 spawn_model 節點 (node) 來完成的。
🚀 spawn_urdf Node 作用
| 參數 | 說明 |
|---|---|
name="spawn_urdf" | ROS 節點名稱,這個 node 的名稱為 spawn_urdf。 |
pkg="gazebo_ros" | 這個節點來自 gazebo_ros 套件,它提供 ROS 與 Gazebo 之間的介面。 |
type="spawn_model" | 執行 spawn_model 可執行文件,用來在 Gazebo 內產生機械手臂模型。 |
args="-param robot_description -urdf -model robot_arm" | 傳遞參數 (見下方詳解)。 |
output="screen" | 將輸出結果顯示到終端機 (screen),方便除錯。 |
🔹 args 參數解析
args="-param robot_description -urdf -model robot_arm"
這些參數告訴 spawn_model:
-param robot_description- 從 ROS 參數伺服器讀取
robot_description參數,這通常是 機械手臂的 URDF。 robot_description是 URDF 模型的 XML 內容,它被rosparam加載到參數伺服器中。- 例如:
這會輸出 完整的 URDF 檔案內容。
- 從 ROS 參數伺服器讀取
-urdf- 指定 模型是 URDF 格式(不是 SDF 或
.xacro)。 - Gazebo 也可以載入 SDF 模型 (
-sdf),但這裡使用的是 URDF。
- 指定 模型是 URDF 格式(不是 SDF 或
-model robot_arm- 指定 Gazebo 內的機器人名稱 (
robot_arm)。 - 在 Gazebo 內的
/gazebo/model_statestopic 中,這個機器人的名稱將會是robot_arm。 - 如果要檢查 Gazebo 內的模型:
- 如果這裡寫成
-model my_robot,那麼 Gazebo 內的機器人名稱會變成my_robot。
- 指定 Gazebo 內的機器人名稱 (
🚀 spawn_urdf 在 Gazebo 內的作用
| 作用 | 詳細說明 |
|---|---|
| 在 Gazebo 內產生機械手臂 | 透過 spawn_model,讓機械手臂模型從 ROS 參數伺服器 (robot_description) 載入到 Gazebo 內。 |
| 讓 Gazebo 識別機械手臂的關節 | URDF 內部定義了 joint,Gazebo 會基於這些定義建立物理模擬。 |
| 允許 Gazebo 內的物理模擬 | 讓機械手臂在 Gazebo 內受 重力、碰撞、摩擦等物理影響。 |
與 gazebo_ros_control 連結 | 允許 gazebo_ros_control 控制機械手臂的關節運動(如果有 transmission 設定)。 |
| 支援 ROS 控制 | 允許 ROS 透過 /robot_arm_controller/command 來控制機械手臂。 |
🔹 spawn_urdf 的完整流程
robot_description被載入到 ROS 參數伺服器- Gazebo 環境啟動 (
empty_world.launch) spawn_urdf節點將robot_description發送到 Gazebo- Gazebo 內部建立
robot_arm模型這時候,你應該會看到:
🚀 如何測試 spawn_urdf 是否成功?
✅ 1️⃣ 確認機械手臂模型是否載入
📌 列出 Gazebo 內的模型
應該看到:
如果沒有 robot_arm,表示模型 沒有成功加載。
📌 嘗試手動加載模型
如果這個指令可以成功執行,那麼 robot_arm_control.launch 內的 spawn_urdf 可能有問題。
✅ 2️⃣ 確認 robot_description 是否存在
📌 檢查 robot_description 是否載入
如果 robot_description 不存在,則代表 URDF 沒有成功載入。
📌 手動檢查 URDF 內容
如果 沒有輸出任何 URDF 內容,則需要手動載入:
然後 重新執行 spawn_urdf:
🚀 總結
| 功能 | 詳細說明 |
|---|---|
spawn_urdf 用途 | 在 Gazebo 內部載入機械手臂模型 (robot_arm) |
robot_description 來源 | 來自 ROS 參數伺服器,通常由 URDF 轉換 |
| Gazebo 內的模型名稱 | robot_arm(可以透過 /gazebo/model_states 檢查) |
| 確保機械手臂載入成功的方法 | rosparam get /robot_description + rostopic echo /gazebo/model_states |
手動測試 spawn_model | rosrun gazebo_ros spawn_model -param robot_description -urdf -model robot_arm |
🚀 如果機械手臂沒有出現在 Gazebo
📌 請執行以下步驟,然後回報結果,我可以進一步幫助你診斷!
沒有留言:
張貼留言