welcom ! Handel home

2025年2月26日 星期三

(Robot_arm),gazebo.launch 分析

 gazebo.launch  檔案的作用是 在 Gazebo 中加載機械手臂模型,並提供基本的坐標變換與校準信號。以下是詳細解析:


1. 載入空的 Gazebo 世界

xml
<include file="$(find gazebo_ros)/launch/empty_world.launch" />
  • 這行 include 指令會加載 Gazebo 空白世界 (empty_world.launch)。
  • $(find gazebo_ros)/launch/empty_world.launch 來自 gazebo_ros package,這是一個標準的 Gazebo 啟動文件:
    • 啟動 Gazebo 模擬環境。
    • 沒有預設加載機器人或其他物件。

2. 設定坐標變換 (TF)

xml
<node name="tf_footprint_base" pkg="tf" type="static_transform_publisher" args="0 0 0 0 0 0 base_link base_footprint 40" />
  • 這行指令啟動 tf 變換發布器 (static_transform_publisher)。
  • 作用:
    • 靜態發布 base_footprintbase_link 的坐標變換
    • 設定 (x=0, y=0, z=0, roll=0, pitch=0, yaw=0),代表 base_linkbase_footprint 在同一個位置。
    • 40 Hz 的頻率持續發布。
  • 為什麼需要這個 TF?
    • 一般來說,機器人的 base_footprint 是它與地面的接觸點,而 base_link 是它的主體中心。
    • 在導航應用 (如 robot_localization) 中,這個 TF 變換通常是必要的。

3. 在 Gazebo 中生成機器人

xml
<node name="spawn_model" pkg="gazebo_ros" type="spawn_model" args="-file $(find robot_arm_urdf)/urdf/robot_arm_urdf.urdf -urdf -model robot_arm_urdf" output="screen" />
  • 這個節點 (node) 來自 gazebo_ros 套件,負責將機械手臂模型加載到 Gazebo
  • args 參數:
    • -file $(find robot_arm_urdf)/urdf/robot_arm_urdf.urdf
      • 指定機器人的 URDF 文件 (來自 robot_arm_urdf package)。
    • -urdf:告訴 Gazebo 這個模型是 URDF 格式 (而非 SDF)。
    • -model robot_arm_urdf:在 Gazebo 內部的機器人名稱。
  • output="screen":確保節點輸出顯示在終端,以便檢查錯誤或加載資訊。

4. 發布假校準訊號

xml
<node name="fake_joint_calibration" pkg="rostopic" type="rostopic" args="pub /calibrated std_msgs/Bool true" />
  • 這是一個手動發布 /calibrated 訊號的 ROS 節點,目的是假裝機械手臂已完成關節校準
  • rostopic pub /calibrated std_msgs/Bool true
    • 直接向 /calibrated Topic 發布 true
    • 為什麼這樣做?
      • 在真實機器人中,關節校準 (joint calibration) 需要透過感測器或外部設備進行。
      • 某些控制器 (如 ros_control) 可能會 等待 /calibrated 訊號為 true 才開始運行,所以這裡手動發送 true,讓控制器可以繼續工作。

總結

這個 launch 檔案的主要功能:

  1. 啟動 Gazebo (空白世界)
  2. 設定 base_linkbase_footprint 的 TF 變換
  3. 在 Gazebo 中加載機器人 URDF 模型
  4. 發布 /calibrated 訊號,讓控制器可以運行

適用場景

  • 在 Gazebo 中測試機械手臂的加載 (不包含控制器)。
  • 為了開發控制器,手動繞過關節校準 (/calibrated)。
  • 準備讓其他 ROS 節點 (如 MoveIt!) 控制機械手臂

如果你想讓這個 launch 檔案更完整,可以:

  • 加入控制器 (透過 controller_manager)。
  • 加入 RViz 來可視化機械手臂狀態。
  • 設置初始關節位置 (spawn_model 時使用 -J joint_1 0.0 這類參數)。

有任何進一步需求都可以討論!🚀

沒有留言: