# Configure the Robot in Isaac Lab
Isaac Lab 機械手臂配置教學。
> 以下內容來自 Nvidia 深度學習學院課程 -- 「Train Your Second Robot in Isaac Lab」
## 1. 什麼是 Articulation Configuration(關節結構配置)
在 Isaac Lab 中,**ArticulationCfg**(Articulation Configuration)代表「關節結構設定」,用於描述機械手臂的組成方式。
一個 **articulation**(關節結構)可以理解為一個由多個剛體(rigid bodies)與關節(joints)所構成的樹狀層級結構。
例如:UR10 機械手臂中每個旋轉關節(revolute joint)都連接不同的剛體。
## 2. 為什麼要在 Isaac Lab 再配置一次機器人?
你可能會問:「既然我們已經在 Isaac Sim 中建立了 UR10,那為什麼還要在 Isaac Lab 中再次設定?」
其實這樣做有幾個重要原因:
1. **任務獨立性(Task Modularity)**
Isaac Lab 的任務(task)常需要不同的環境元素,如桌面、物體、或感測器,我們不希望把這些都寫進機器人的 USD 檔案。
2. **實驗彈性(Experimental Flexibility)**
我們可能希望在訓練時測試不同的剛體屬性或致動器(actuator)配置。
在 Isaac Lab 中,我們可以覆寫這些屬性而不影響原始 USD。
3. **模組化設計(Reusable Components)**
同一個機械手臂可以應用於多種任務,只要修改設定檔即可重複使用。
## 3. 建立機械手臂設定檔
在 Isaac Lab 專案中,我們會將設定放在獨立檔案中,方便在不同訓練任務重複使用。
### 步驟:
1. 前往你的專案資料夾:
`Reach/source/Reach/Reach/tasks/manager_based/reach`
2. 建立一個新的 Python 檔案:
`ur_gripper.py`
這個檔案會儲存我們的機械手臂設定(Articulation Configuration)。
它不僅能用於這個「Reach」訓練任務,也能被未來其他專案引用。
---
## 4. 完整範例程式碼
```python
# Copyright (c) 2022-2025, The Isaac Lab Project Developers.
# SPDX-License-Identifier: BSD-3-Clause
"""Configuration for the Universal Robots (UR10 with gripper)."""
import isaaclab.sim as sim_utils
from isaaclab.actuators import ImplicitActuatorCfg
from isaaclab.assets.articulation import ArticulationCfg
UR_GRIPPER_CFG = ArticulationCfg(
# 機器人 USD 檔案路徑
spawn=sim_utils.UsdFileCfg(
usd_path=f"/home/ubuntu/Reach/UR-with-gripper.usd",
activate_contact_sensors=False,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
rigid_body_enabled=True,
max_linear_velocity=1000.0,
max_angular_velocity=1000.0,
max_depenetration_velocity=5.0,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=True,
solver_position_iteration_count=8,
solver_velocity_iteration_count=0
),
),
# 初始關節角度與位置
init_state=ArticulationCfg.InitialStateCfg(
joint_pos={
"shoulder_pan_joint": 0.0,
"shoulder_lift_joint": -1.712,
"elbow_joint": 1.712,
"wrist_1_joint": 0.0,
"wrist_2_joint": 0.0,
"wrist_3_joint": 0.0,
},
),
# 各致動器(actuator)設定
actuators={
"arm": ImplicitActuatorCfg(
joint_names_expr=[".*"],
effort_limit=87.0,
stiffness=800.0,
damping=40.0,
),
"gripper": ImplicitActuatorCfg(
joint_names_expr=["finger_joint"],
stiffness=280,
damping=28
),
}
)
```
🟨 **提醒**
請務必修改 `usd_path`,指向你實際儲存的機械手臂 USD 檔案路徑。
---
## 5. 程式架構解析
上面這份設定主要分為三個部分:
1. **spawn**
指定 USD 模型的來源與物理屬性。
* `usd_path`:機械手臂的模型路徑
* `rigid_props`:剛體物理參數
* `articulation_props`:關節系統參數
2. **init_state**
指定機械手臂各關節的初始角度。
通常在模擬開始前就會根據這些角度擺好姿勢。
3. **actuators**
設定致動器(actuator)的型態、彈性係數與阻尼。
我們這裡使用 **Implicit Actuator(隱式致動器)**,相當於理想化的伺服控制器。
---
## 6. 調整剛性與阻尼(Stiffness & Damping)
若你需要自行設計致動器,可能會面臨「該如何設定剛性與阻尼」的問題。
這裡的控制原理是 **PD 控制器(Proportional-Derivative Controller)**:
* **Stiffness(比例項 P)**:
代表系統想回到目標位置的「彈性強度」。值越高,反應越快,但太高會震盪。
* **Damping(微分項 D)**:
負責抑制震盪。值越大越穩定,但可能使運動變慢。
🧠 小結:
* 高剛性 = 快速但不穩定
* 高阻尼 = 穩定但反應慢
建議在 Isaac Sim 中實際測試不同組合來找到平衡點。
---
## 7. 延伸學習方向
若想更深入學習這部分,可參考以下主題:
* Isaac Sim 官方文件:「Joint Tuning」章節
* 模擬與真實控制(Sim-to-Real)之間的差異
* 不同致動器模型(如 Torque-based, Position-based)的比較
---
## 8. 下一步:配置任務管理器(Managers)
恭喜完成 UR10 與夾爪的 Articulation 設定!
接下來,我們將進入 Isaac Lab 的核心之一——**Manager Configuration**,
用於定義訓練過程中的馬可夫決策流程(Markov Decision Process, MDP)。
### Next → [從 Isaac Lab 的 @configclass 理解 Python 裝飾器的核心機制](https://hackmd.io/@10XdHCMRSDKnrGY5zVWFKA/Hk5ZNlGxbe)
---
希望我的內容對你有所幫助,想看到更多內容歡迎追蹤我的 IG、Threads 等平台。
Threads:[@minimalist_shine](https://www.threads.com/@minimalist_shine)
IG:[@minimalist_shine](https://www.instagram.com/minimalist_shine/)