這個 launch 檔案是用於 ROS (Robot Operating System) 的一個 Gazebo 模擬環境啟動文件,負責載入機械手臂 (robot arm) 模型,設定機器人初始位置與狀態,並啟動相關控制節點。以下是詳細解析:
1. 定義引數 (Arguments)
- 這些
arg用來設定機器人模型在 Gazebo 中的初始位置與旋轉角度 (RPY)。 arg_x, arg_y, arg_z:機器人初始的 X、Y、Z 位置座標。arg_R, arg_P, arg_Y:機器人初始的旋轉角度 (Roll, Pitch, Yaw)。
2. 載入機器人模型 URDF
- 這行參數 (
param) 負責加載機器人模型的 URDF (Unified Robot Description Format) 文件。 - 這個 URDF 檔案描述機器人的連結 (links) 和關節 (joints) 配置。
$(find robot_arm_urdf)會尋找 ROS packagerobot_arm_urdf,並載入該 package 中的 URDF 檔案。
3. 加載空的 Gazebo 環境
- 這行指令會啟動一個空的 Gazebo 世界,準備讓機械手臂模型加入。
$(find gazebo_ros)/launch/empty_world.launch來自gazebo_ros套件,提供一個基礎的 Gazebo 模擬環境。
4. 設定 TF (坐標變換)
tf是 ROS 提供的變換坐標系統工具,用於機器人模型的不同參考點轉換。static_transform_publisher負責發布一個靜態的坐標變換:- 位置
(x=0, y=0, z=0) - 旋轉
(roll=0, pitch=0, yaw=0) - 這個變換描述
base_footprint座標系與base_link之間的靜態關係。 - 發布頻率為 40 Hz。
- 位置
5. 在 Gazebo 中生成機器人模型
- 這個節點 (
node) 來自gazebo_ros套件,負責將機器人模型加載到 Gazebo 中。 -param robot_description:使用前面定義的robot_descriptionURDF 來加載機器人。-urdf:指明這是一個 URDF 格式的模型。-model robot_arm_urdf:設定機器人的名稱為robot_arm_urdf。-x, -y, -z, -Y:設置機器人在 Gazebo 中的初始位置。-J joint_X 0.0:初始化每個關節 (joint_1~joint_6) 的角度為0.0。
(備註:有一段被註解的 spawn_urdf,但主要的功能與這個版本類似,只是排版不同。)
6. 加載關節軌跡控制器
rosparam讀取並加載joint_trajectory_controller.yaml檔案。- 該 YAML 檔案內部應該包含關節控制器的設定,例如:
- 控制模式 (位置控制、速度控制、力矩控制等)
- 關節名稱與限制
- PID 參數
7. 啟動控制器
- 啟動
controller_manager來管理 ROS 控制器。 joint_state_controller:負責發布當前關節的狀態 (如位置、速度)。robot_arm_controller:控制機械手臂的運動 (應該對應joint_trajectory_controller)。hand_ee_controller:可能負責機械手末端執行器 (End Effector, EE) 的控制。
8. 啟動 robot_state_publisher
robot_state_publisher是 ROS 用來發布機器人關節狀態 (TF 變換) 的工具。- 這樣 RViz (ROS 視覺化工具) 就可以根據機器人狀態來顯示其模型。
總結
這個 launch 檔案的主要作用:
- 初始化變數:定義機器人的初始位置與旋轉角度 (
arg_x, arg_y, arg_z, arg_R, arg_P, arg_Y)。 - 加載 URDF 模型:載入機器人模型 (
robot_description)。 - 啟動 Gazebo:打開一個空的 Gazebo 模擬環境。
- 發布靜態坐標變換 (
tf用於base_link和base_footprint)。 - 在 Gazebo 中生成機器人 (
spawn_urdf)。 - 加載關節控制器 (
joint_trajectory_controller.yaml)。 - 啟動控制器管理器 (
controller_manager)。 - 發布機器人狀態 (
robot_state_publisher),讓 TF 可以正確顯示關節運動。
這樣的 launch 檔案主要用於 ROS + Gazebo 模擬機械手臂,確保:
- 機器人模型能正確載入。
- 在 Gazebo 中出現並能被控制。
- 透過
controller_manager管理機械手臂關節的運動。
沒有留言:
張貼留言