📌 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
控制機械手臂運動!
🚀
沒有留言:
張貼留言