解析 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_1
到 joint_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
) 作為視覺顯示。
- 採用 3D 模型 (
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>
<plugin name="control" filename="libgazebo_ros_control.so">
<robotNamespace>/</robotNamespace>
<disable_self_collisions>true</disable_self_collisions>
</plugin>
</gazebo>
</robot>
沒有留言:
張貼留言