welcom ! Handel home

2025年2月26日 星期三

(Robot_arm)arm_urdf.launch 分析

 這個 launch 檔案是用於 ROS (Robot Operating System) 的一個 Gazebo 模擬環境啟動文件,負責載入機械手臂 (robot arm) 模型,設定機器人初始位置與狀態,並啟動相關控制節點。以下是詳細解析:


1. 定義引數 (Arguments)

xml
<arg name="arg_x" default="0.00" /> <arg name="arg_y" default="0.00" /> <arg name="arg_z" default="0.00" /> <arg name="arg_R" default="0.00" /> <arg name="arg_P" default="0.00" /> <arg name="arg_Y" default="0.00" />
  • 這些 arg 用來設定機器人模型在 Gazebo 中的初始位置與旋轉角度 (RPY)。
  • arg_x, arg_y, arg_z:機器人初始的 X、Y、Z 位置座標。
  • arg_R, arg_P, arg_Y:機器人初始的旋轉角度 (Roll, Pitch, Yaw)。

2. 載入機器人模型 URDF

xml
<param name="robot_description" textfile="$(find robot_arm_urdf)/urdf/robot_arm_urdf.urdf"/>
  • 這行參數 (param) 負責加載機器人模型的 URDF (Unified Robot Description Format) 文件。
  • 這個 URDF 檔案描述機器人的連結 (links) 和關節 (joints) 配置。
  • $(find robot_arm_urdf) 會尋找 ROS package robot_arm_urdf,並載入該 package 中的 URDF 檔案。

3. 加載空的 Gazebo 環境

xml
<include file="$(find gazebo_ros)/launch/empty_world.launch" />
  • 這行指令會啟動一個空的 Gazebo 世界,準備讓機械手臂模型加入。
  • $(find gazebo_ros)/launch/empty_world.launch 來自 gazebo_ros 套件,提供一個基礎的 Gazebo 模擬環境。

4. 設定 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 是 ROS 提供的變換坐標系統工具,用於機器人模型的不同參考點轉換。
  • static_transform_publisher 負責發布一個靜態的坐標變換:
    • 位置 (x=0, y=0, z=0)
    • 旋轉 (roll=0, pitch=0, yaw=0)
    • 這個變換描述 base_footprint 座標系與 base_link 之間的靜態關係。
    • 發布頻率為 40 Hz

5. 在 Gazebo 中生成機器人模型

xml
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model robot_arm_urdf -x $(arg arg_x) -y $(arg arg_y) -z $(arg arg_z) -Y $(arg arg_Y) -J joint_1 0.0 -J joint_2 0.0 -J joint_3 0.0 -J joint_4 0.0 -J joint_5 0.0 -J joint_6 0.0"/>
  • 這個節點 (node) 來自 gazebo_ros 套件,負責將機器人模型加載到 Gazebo 中。
  • -param robot_description:使用前面定義的 robot_description URDF 來加載機器人。
  • -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. 加載關節軌跡控制器

xml
<rosparam file ="$(find robot_arm_urdf)/config/joint_trajectory_controller.yaml" command="load"/>
  • rosparam 讀取並加載 joint_trajectory_controller.yaml 檔案。
  • 該 YAML 檔案內部應該包含關節控制器的設定,例如:
    • 控制模式 (位置控制、速度控制、力矩控制等)
    • 關節名稱與限制
    • PID 參數

7. 啟動控制器

xml
<node name= "controller_spawner" pkg= "controller_manager" type="spawner" respawn="false" output="screen" args="joint_state_controller robot_arm_controller hand_ee_controller"/>
  • 啟動 controller_manager 來管理 ROS 控制器。
  • joint_state_controller:負責發布當前關節的狀態 (如位置、速度)。
  • robot_arm_controller:控制機械手臂的運動 (應該對應 joint_trajectory_controller)。
  • hand_ee_controller:可能負責機械手末端執行器 (End Effector, EE) 的控制。

8. 啟動 robot_state_publisher

xml
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen"/>
  • robot_state_publisher 是 ROS 用來發布機器人關節狀態 (TF 變換) 的工具。
  • 這樣 RViz (ROS 視覺化工具) 就可以根據機器人狀態來顯示其模型。

總結

這個 launch 檔案的主要作用:

  1. 初始化變數:定義機器人的初始位置與旋轉角度 (arg_x, arg_y, arg_z, arg_R, arg_P, arg_Y)。
  2. 加載 URDF 模型:載入機器人模型 (robot_description)。
  3. 啟動 Gazebo:打開一個空的 Gazebo 模擬環境。
  4. 發布靜態坐標變換 (tf 用於 base_linkbase_footprint)。
  5. 在 Gazebo 中生成機器人 (spawn_urdf)。
  6. 加載關節控制器 (joint_trajectory_controller.yaml)。
  7. 啟動控制器管理器 (controller_manager)。
  8. 發布機器人狀態 (robot_state_publisher),讓 TF 可以正確顯示關節運動。

這樣的 launch 檔案主要用於 ROS + Gazebo 模擬機械手臂,確保:

  • 機器人模型能正確載入。
  • 在 Gazebo 中出現並能被控制。
  • 透過 controller_manager 管理機械手臂關節的運動。


沒有留言: