📌 arm_urdf.launch 解析與註解
這個 launch 檔案的功能是:
- 定義機械手臂 (
robot_arm_urdf) 的 URDF - 啟動 Gazebo 空白場景
- 將機械手臂載入 Gazebo
- 初始化 ROS 控制器 (
joint_trajectory_controller) - 發布 TF (座標變換),供 RViz 視覺化
🚀 解析 launch 檔案
🔹 整個 launch 檔案的開頭標籤,所有設定都在 <launch> 內。
1️⃣ 定義 arg 參數 (用於 Gazebo 內的機械手臂位置)
🔹 這些 <arg> 變數定義了機械手臂的初始 位置 (x, y, z) 和朝向 (R, P, Y):
arg_x,arg_y,arg_z→ XYZ 位置arg_R,arg_P,arg_Y→ RPY 旋轉角度- 用途:這些變數稍後會傳遞給
spawn_urdf,決定機械手臂的初始位置與旋轉。
2️⃣ 載入機械手臂的 URDF
🔹 這行指令將 URDF 檔案 (robot_arm_urdf.urdf) 載入到 ROS 參數伺服器:
- URDF 位置:
$(find robot_arm_urdf)/urdf/robot_arm_urdf.urdf - 存儲於 ROS 參數伺服器內,變數名稱為
robot_description - Gazebo 以及 MoveIt! 需要使用這個
robot_description
3️⃣ 啟動 Gazebo 空白場景
🔹 這行載入 Gazebo 預設的 empty_world (空白場景):
- Gazebo 啟動後,會 自動加載地面 (ground plane) 與環境
- 機械手臂稍後會加入這個 Gazebo 世界
4️⃣ 設定機械手臂的 TF (base_link → base_footprint)
🔹 這個 node 負責建立靜態 TF 變換:
base_footprint→base_link(機械手臂底座)- 位置 (0, 0, 0),旋轉 (0, 0, 0)
- 頻率
40 Hz
5️⃣ 在 Gazebo 內生成機械手臂
🔹 這個 spawn_model 節點將機械手臂載入 Gazebo:
-param robot_description:從 ROS 參數伺服器讀取 URDF-urdf:指定這是 URDF 格式的模型-model robot_arm_urdf:Gazebo 內部的機器人名稱-x $(arg arg_x) -y $(arg arg_y) -z $(arg arg_z):機械手臂的 XYZ 位置-Y $(arg arg_Y):機械手臂的 Yaw 旋轉角度-J joint_1 0.0 -J joint_2 0.0 ...:- 初始化所有關節 (
joint_1~joint_6) 到0.0 rad
- 初始化所有關節 (
6️⃣ 載入 joint_trajectory_controller.yaml 控制器
🔹 這行指令讀取 ROS 控制器的 YAML 配置:
- 檔案位置:
robot_arm_urdf/config/joint_trajectory_controller.yaml - 控制器類型:
position_controllers/JointTrajectoryController - 控制關節:
joint_1~joint_6 - PID 參數:
gains內的P, I, D
📌 🔹 joint_trajectory_controller.yaml (範例)
7️⃣ 啟動 ROS 控制器
🔹 這行指令負責啟動 ROS 控制器 (controller_manager):
joint_state_controller:負責發布 關節狀態 (/joint_states)robot_arm_controller:負責 機械手臂運動 (/robot_arm_controller/command)hand_ee_controller:負責 夾爪控制 (若有夾爪)
8️⃣ 啟動 Robot State Publisher
🔹 這行指令將 joint_states 轉換為 TF 變換:
- ROS 控制器 (
joint_state_controller) 會發布/joint_states - 這個
node會解析/joint_states並生成/tf - TF 可用於 RViz 顯示機械手臂的當前狀態
🚀 總結
| 功能 | 詳細說明 |
|---|---|
| 載入 URDF | robot_description |
| 啟動 Gazebo | empty_world.launch |
| 載入機械手臂到 Gazebo | spawn_urdf |
| 加載 ROS 控制器 | joint_trajectory_controller.yaml |
啟動 controller_manager | 負責管理關節運動 |
| 啟動 TF 變換 | 讓 RViz 監視機械手臂位置 |
這個 launch 檔案讓 Gazebo + ROS 控制器 正常運行,
你可以透過 move_arm.py 控制機械手臂運動!
🚀
沒有留言:
張貼留言