---
# System prepended metadata

title: Configure the Robot in Isaac Lab
tags: [Isaac-Lab, Isaac]

---

# 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/)