welcom ! Handel home

2025年3月2日 星期日

(Robot_arm)解析 URDF (robot_arm_urdf.urdf)連結 (link)、關節 (joint)

解析 URDF (robot_arm_urdf.urdf),分析其中的元素與參數,並將其重整,

使其更容易閱讀與理解。

這份 URDF (robot_arm_urdf.urdf) 主要描述了一個機械手臂機器人的結構,

包括連結 (link)、關節 (joint)、慣性 (inertial)、視覺 (visual)、碰撞 (collision) 等元素。


1. URDF 元素概覽

機器人基本資訊

  • 名稱robot_arm_urdf
  • 來源:此 URDF 是由 SolidWorks URDF Exporter 自動生成的。

主要結構

元素說明
<robot>定義機器人的整體架構
<link>定義機器人的各個組件 (基座、手臂、手爪等)
<joint>連接不同 link,定義運動方式 (旋轉、平移、固定)
<inertial>設定質量與慣性矩,影響動力學模擬
<visual>設定模型的 3D 外觀 (使用 .dae.stl 檔案)
<collision>設定碰撞範圍,用於物理模擬

2. URDF 解析與重整

以下是整理過的 URDF 結構,並標註其關鍵參數與功能:

🔹 定義機器人 (robot)

xml
<robot name="robot_arm_urdf">
  • 設定機器人的名稱。

🔹 環境基座 (world link)

xml
<link name="world"/>
  • 這是虛擬的參考點,不會影響機器人本身。

🔹 機器人基座 (base_link)

xml
<joint name="base_joint" type="fixed"> <parent link="world"/> <child link="base_link"/> <origin xyz="0.0 0.0 0.1" rpy="0 0 0"/> </joint> <link name="base_link"> <inertial> <origin xyz="0.017 0.062 0.1" rpy="0 0 0"/> <mass value="17"/> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01"/> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://robot_arm_urdf/meshes/base_link.dae"/> </geometry> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://robot_arm_urdf/meshes/base_link.dae"/> </geometry> </collision> </link>
  • base_joint:固定 (fixed),機器人的基座不會移動。
  • base_link
    • 質量 (mass)17 kg
    • 慣性 (inertia):設定轉動慣量
    • 視覺 (visual):載入 3D 模型 (.dae)
    • 碰撞 (collision):與 visual 相同,但可調整簡化

🔹 連接臂節 (joint_1joint_6)

xml
<joint name="joint_1" type="revolute"> <parent link="base_link"/> <child link="link_1"/> <origin xyz="0.1 0 0.2" rpy="0 0 0"/> <axis xyz="0 0 1"/> <limit effort="50" lower="-1.57" upper="1.57" velocity="1.5"/> </joint> <link name="link_1"> <visual> <geometry> <mesh filename="package://robot_arm_urdf/meshes/link_1.stl"/> </geometry> </visual> </link>
  • 關節 (joint_1)
    • 類型 (type):旋轉 (revolute)
    • 旋轉軸 (axis)(0 0 1),代表 Z 軸旋轉
    • 範圍 (limit)
      • 力矩 (effort):50 N·m
      • 旋轉角度 (lower & upper):±1.57 rad (±90°)
      • 速度 (velocity):1.5 rad/s
  • link_1 (連結)
    • 只定義視覺部分,無慣性或碰撞資訊。

這樣的關節與連結結構會一直延續到 joint_6,定義每個手臂的旋轉方式。


🔹 末端執行器 (End Effector)

xml
<joint name="joint_6" type="revolute"> <parent link="link_5"/> <child link="gripper"/> <origin xyz="0.05 0 0.1" rpy="0 0 0"/> <axis xyz="0 1 0"/> <limit effort="30" lower="-1.0" upper="1.0" velocity="1.0"/> </joint> <link name="gripper"> <visual> <geometry> <mesh filename="package://robot_arm_urdf/meshes/gripper.stl"/> </geometry> </visual> </link>
  • joint_6:旋轉關節,控制手爪的角度。
  • gripper (夾爪)
    • 採用 3D 模型 (.stl) 作為視覺顯示。

3. URDF 重整與清單化

元素參數/功能
robot設定機器人名稱
link定義機械手臂的各部分
joint連接 link,決定運動方式
inertial設定質量與慣性
visual設定 3D 外觀 (.dae.stl)
collision設定物理碰撞範圍

4. 重整後的關鍵設定

  • 關節 (Joint) 設定

    • joint_1 ~ joint_6:旋轉 (revolute)
    • 旋轉範圍:±1.57 rad (±90°) ~ ±1.0 rad (±57°)
    • 旋轉軸:大部分關節使用 z 軸 (0 0 1)
  • 質量與慣性 (Inertia)

    • base_link 質量:17 kg
    • link:未提供詳細數據
  • 視覺與碰撞

    • 使用 .dae.stl 作為視覺模型
    • collision 通常與 visual 相同

結論

這份 URDF 描述了一個 6 自由度 (6-DOF) 的機械手臂,使用固定基座 (base_link),並透過 joint_1 ~ joint_6 來控制手臂運動,最後以 gripper 作為末端執行器。

#進一步的修改或最佳化,例如添加 PID 控制參數、簡化碰撞模型、調整關節限制


===========================================================

URDF 架構

<robot name="urdf">     定義機器人的整體架構

<link name=" "/>     定義機器人的各個組件 (基座、手臂、手爪等) 

<inertial>        定義機器人的整體架構

<origin>

<mass>

<inertia >

<visual>        設定模型的 3D 外觀 (使用 .dae 或 .stl 檔案)

<collision>    設定碰撞範圍,用於物理模擬

 </link>

<joint name="joint_1" type="revolute">  關節 (joint_1),類型 (type):旋轉 (revolute)

<origin xyz="-0.02 0 0" rpy="0 0 0" />

<parent link="base_link" />

<child link="link_1" />

<axis  yz="-1 0 0" />          旋轉軸 (axis):(0 0 1),代表 Z 軸 

<limit lower="-0.7853" upper="0.7853" effort="20" velocity="0.3" />

                        範圍 (limit)力矩 (effort) 旋轉角度 (lower & upper)  速度 (velocity)

</joint>

<transmission name="link_1_trans">

<type>transmission_interface/SimpleTransmission</type>

<joint name="joint_1">

<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>

</joint>

<actuator name="link_1_motor">

<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>

<mechanicalReduction>1</mechanicalReduction>

</actuator>

</transmission>

    <gazebo>
    <plugin name="control" filename="libgazebo_ros_control.so">     <robotNamespace>/</robotNamespace>     <disable_self_collisions>true</disable_self_collisions>     </plugin>     </gazebo>
</robot>

沒有留言: