<!-- 🔹 載入機械手臂到 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_states
topic 中,這個機器人的名稱將會是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
📌 請執行以下步驟,然後回報結果,我可以進一步幫助你診斷!
沒有留言:
張貼留言