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