gazebo.launch 檔案的作用是 在 Gazebo 中加載機械手臂模型,並提供基本的坐標變換與校準信號。以下是詳細解析:
1. 載入空的 Gazebo 世界
- 這行
include
指令會加載 Gazebo 空白世界 (empty_world.launch
)。 $(find gazebo_ros)/launch/empty_world.launch
來自gazebo_ros
package,這是一個標準的 Gazebo 啟動文件:- 啟動 Gazebo 模擬環境。
- 沒有預設加載機器人或其他物件。
2. 設定坐標變換 (TF)
- 這行指令啟動
tf
變換發布器 (static_transform_publisher
)。 - 作用:
- 靜態發布
base_footprint
到base_link
的坐標變換。 - 設定
(x=0, y=0, z=0, roll=0, pitch=0, yaw=0)
,代表base_link
和base_footprint
在同一個位置。 40 Hz
的頻率持續發布。
- 靜態發布
- 為什麼需要這個 TF?
- 一般來說,機器人的
base_footprint
是它與地面的接觸點,而base_link
是它的主體中心。 - 在導航應用 (如
robot_localization
) 中,這個 TF 變換通常是必要的。
- 一般來說,機器人的
3. 在 Gazebo 中生成機器人
- 這個節點 (
node
) 來自gazebo_ros
套件,負責將機械手臂模型加載到 Gazebo。 args
參數:-file $(find robot_arm_urdf)/urdf/robot_arm_urdf.urdf
:- 指定機器人的 URDF 文件 (來自
robot_arm_urdf
package)。
- 指定機器人的 URDF 文件 (來自
-urdf
:告訴 Gazebo 這個模型是 URDF 格式 (而非 SDF)。-model robot_arm_urdf
:在 Gazebo 內部的機器人名稱。
output="screen"
:確保節點輸出顯示在終端,以便檢查錯誤或加載資訊。
4. 發布假校準訊號
- 這是一個手動發布
/calibrated
訊號的 ROS 節點,目的是假裝機械手臂已完成關節校準。 rostopic pub /calibrated std_msgs/Bool true
:- 直接向
/calibrated
Topic 發布true
。 - 為什麼這樣做?
- 在真實機器人中,關節校準 (joint calibration) 需要透過感測器或外部設備進行。
- 某些控制器 (如
ros_control
) 可能會 等待/calibrated
訊號為true
才開始運行,所以這裡手動發送true
,讓控制器可以繼續工作。
- 直接向
總結
這個 launch
檔案的主要功能:
- 啟動 Gazebo (空白世界)。
- 設定
base_link
和base_footprint
的 TF 變換。 - 在 Gazebo 中加載機器人 URDF 模型。
- 發布
/calibrated
訊號,讓控制器可以運行。
適用場景
- 在 Gazebo 中測試機械手臂的加載 (不包含控制器)。
- 為了開發控制器,手動繞過關節校準 (
/calibrated
)。 - 準備讓其他 ROS 節點 (如 MoveIt!) 控制機械手臂。
如果你想讓這個 launch
檔案更完整,可以:
- 加入控制器 (透過
controller_manager
)。 - 加入 RViz 來可視化機械手臂狀態。
- 設置初始關節位置 (
spawn_model
時使用-J joint_1 0.0
這類參數)。
有任何進一步需求都可以討論!🚀
沒有留言:
張貼留言