기술적 주제, 코딩 튜토리얼 및 최신 기술 인사이트를 심층적으로 알아보세요.
Isaac Lab에서는 로봇을 시뮬레이션 환경에 배치하고 학습을 시키기 위해 로봇의 구성 정보(config)를 정의해야 합니다. 이 구성 파일은 ArticulationCfg라는 클래스를 기반으로 작성되며, 로봇의 불러오기(Spawn), 초기 상태(Initial State), 액추에이터(Actuator) 설정 등을 포함합니다. 이번 글에서는 Isaac Lab에서 커스텀 로봇을 구성하기 위한 ArticulationCfg 작성법을 소개합니다. PDF에 포함된 내용을 기반으로 구성 요소별 역할과 작성 방법을 예제와 함께 정리하였으며, 모든 이미지를 자연스럽게 포함할 수 있도록 구성했습니다. 🔗 공식 가이드: https://isaac-sim.github.io/IsaacLab/main/source/how-to/write_articulation_cfg.html ArticulationCfg란? Isaac Lab에서 로봇을 학습시키기 위해서는 반드시 ArticulationCfg 구성이 필요합니다. 이 구성은 다음과 같은 세 가지 핵심 요소로 이루어져 있습니다: Spawn: 로봇 불러오기 (USD 또는 URDF 기반) Initial State: 초기 위치, 관절 각도 등 초기 상태 Actuator: 로봇 관절 제어를 위한 액추에이터 설정 모든 구성은 Python 코드에서 하나의 설정 객체로 정의되며, 이후 다양한 씬(Scene)에서 재활용될 수 있습니다. Spawn 설정 Spawn은 로봇의 모델을 시뮬레이션에 불러오는 부분으로, USD 파일 또는 URDF 파일을 사용할 수 있습니다. 주요 속성: usd_path: 로봇 모델이 포함된 USD 파일 경로 rigid_props: 로봇의 물리적 속성 (질량, 관절 속도 제한 등) articulation_props: 관절 관련 속성 (자체 충돌 여부, solver 반복 횟수 등) 이 설정을 통해 로봇의 기본 형태와 물리 특성이 시뮬레이션에 반영됩니다. Initial State 설정 Initial State는 로봇이 시뮬레이션에 처음 생성될 때의 상태를 정의합니다. pos: 로봇의 초기 위치 (x, y, z) 좌표 rot: 초기 회전 (선택 사항) joint_pos: 각 관절의 초기값 (예: 직립 상태 등) 이 설정을 통해 로봇이 시작 위치에서 원하는 자세로 배치되도록 구성할 수 있습니다. Actuator 설정 로봇이 움직이기 위해서는 액추에이터(Actuator) 설정이 필요합니다. Isaac Lab에서는 다음과 같은 모델을 사용할 수 있습니다: 내장 모델 (Implicit Actuator Model): Isaac Lab에서 제공하는 기본 모델 사용자 정의 모델 (Explicit Actuator Model): 사용자가 직접 정의한 제어 모델 액추에이터는 로봇의 각 관절에 어떤 힘(force) 또는 목표 위치(position)를 적용할지를 결정합니다. ArticulationCfg 불러오기 ArticulationCfg가 정의되면, 이를 사용할 수 있도록 Python 코드 상단에서 import 합니다: from omni.isaac.lab_assets import HUMANOID_CFG 그리고 씬 구성 시 다음과 같이 사용합니다: humanoid: ArticulationCfg = HUMANOID_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot") humanoid는 씬에서 해당 로봇을 참조할 때 사용되는 이름입니다. replace()를 통해 로봇의 경로를 씬 구조에 맞게 바꿔줄 수 있습니다. 로봇의 동작 테스트: run_simulator() run_simulator() 함수 내에서 직접 로봇의 동작을 테스트해볼 수 있습니다. 예를 들어, 다음과 같이 랜덤한 관절 힘을 생성하고, 이를 로봇에 적용할 수 있습니다: efforts = torch.randn_like(robot.data.joint_pos) robot.set_joint_effort_target(efforts) 이 코드는 로봇 관절에 랜덤한 힘을 가해 다양한 동작을 확인하고, 액추에이터 설정을 테스트하는 데 유용합니다. 마무리 이번 글에서는 Isaac Lab에서 로봇의 구성 파일인 ArticulationCfg를 작성하는 방법을 상세히 살펴보았습니다. 핵심 구성 요소인 Spawn, Initial State, Actuator를 통해 로봇의 물리 특성과 동작 제어를 설정할 수 있으며, 이 구성을 기반으로 다양한 강화학습 시나리오를 설계할 수 있습니다. 요약: ArticulationCfg는 로봇을 시뮬레이션에 추가하는 핵심 설정 Spawn: 모델 불러오기 및 물리 속성 설정 Initial State: 초기 위치 및 관절 상태 설정 Actuator: 관절 제어 방식 정의 정의된 cfg는 다양한 씬에서 재사용 가능 이 구성을 마스터하면 이후 강화학습 환경 구축, 다양한 로봇 동작 시뮬레이션 설계에 큰 도움이 됩니다.
2025년 3월 28일
Isaac Lab은 NVIDIA Isaac Sim 기반의 강화학습 시뮬레이션 프레임워크로, 로봇, 센서, 환경 등을 구성하고 제어할 수 있는 기능을 제공합니다. 이번 글에서는 Isaac Lab에서 제공하는 InteractiveScene 클래스를 활용해 시뮬레이션 환경(Scene)을 효율적으로 생성하고 제어하는 방법을 다룹니다. 기존에는 바닥, 조명, 로봇 등을 수동으로 하나씩 생성해야 했다면, InteractiveScene을 활용하면 코드 몇 줄로 원하는 구성 요소들을 자동으로 배치할 수 있습니다. 또한 CLI 인자를 통해 시뮬레이션 환경 개수도 동적으로 지정할 수 있어, 강화학습을 위한 병렬 환경 구성에 매우 유용합니다. 🔗 공식 튜토리얼: https://isaac-sim.github.io/IsaacLab/main/source/tutorials/02_scene/create_scene.html Interactive Scene의 개념 scene.InteractiveScene 클래스는 바닥, 조명, 로봇, 센서(LiDAR, 카메라 등) 등 다양한 시뮬레이션 요소를 손쉽게 구성할 수 있도록 도와줍니다. 직접 모든 요소를 생성하는 대신, 설정(Configuration)을 기반으로 자동 생성되며 유지 관리도 훨씬 수월합니다. CLI 인자를 통한 환경 개수 설정 예를 들어, 다음과 같이 --num_envs 인자를 추가하면 CLI에서 실행 시 환경 개수를 지정할 수 있습니다: type=int: 정수만 입력 가능 default=2: 별도 인자 없이 실행하면 2개의 환경 생성 여러 환경을 병렬로 학습시킬 때 매우 유용 Isaac Lab 코드 구조 이해하기 Isaac Lab 프로젝트 디렉토리 구조는 아래와 같이 구성됩니다: source/standalone: 튜토리얼과 강화학습 관련 스크립트 extensions: Isaac Lab의 핵심 기능 및 자산 포함 omni.isaac.lab: 주요 엔진 기능 omni.isaac.lab.assets: 로봇 및 환경 설정 파일 포함 lab.tasks: 로봇 동작 정의 (조작, 이동 등) 주요 클래스와 구성 요소 Isaac Lab에서 환경을 구성할 때 주요하게 사용되는 클래스들: ArticulationCfg: 움직이는 로봇 등의 설정 AssetBaseCfg: 고정된 환경 요소(예: 바닥, 벽) 설정 InteractiveSceneCfg: 로봇, 조명, 센서 등 전체 설정 클래스 InteractiveScene: 실제로 씬을 생성하는 클래스 SimulationContext: 시뮬레이션 실행/제어 (play, pause, step 등) 또한 설정 클래스에는 @configclass 데코레이터를 사용하여 자동화된 설정 구조를 정의할 수 있습니다. CartpoleSceneCfg 예제 분석 다음은 InteractiveSceneCfg를 상속받아 구성된 CartpoleSceneCfg 예제입니다: GroundPlaneCfg: 바닥을 기본 위치에 생성 DomeLightCfg: 실내 환경을 위한 기본 조명 CARTPOLE_CFG: 카트-폴 로봇의 설정을 불러오고 위치를 상대 경로로 지정 절대 경로 vs 상대 경로 /World/...와 같은 절대 경로는 씬에서 한 번만 생성되며, 바닥, 조명과 같이 하나만 존재해야 하는 요소에 사용 {ENV_REGEX_NS}와 같은 상대 경로는 환경 수만큼 복제 가능 예: -num_envs=32 설정 시, 32개의 Sphere 생성 가능 즉, 강화학습을 위한 다중 환경 시뮬레이션에서는 로봇, 테이블 등 환경별로 고유해야 하는 요소는 상대 경로로 지정해야 합니다. CLI 인자를 통한 병렬 환경 구성 아래와 같이 CLI 인자를 사용하면 실행 시 동적으로 환경 수를 조절할 수 있습니다: 입력 예: ./isaaclab.sh -p my_scene.py --num_envs 32 결과: Sphere 32개 생성, 각 환경에 하나씩 배치 이 구조는 특히 강화학습에서 병렬 환경을 구성하여 학습 속도를 높이는 데 필수적입니다. 마무리 이번 글에서는 Isaac Lab의 InteractiveScene 클래스를 활용한 시뮬레이션 환경 구성 방법을 정리했습니다. 주요 내용은 다음과 같습니다: InteractiveScene과 설정 클래스를 통해 바닥, 조명, 로봇을 자동 구성 @configclass를 활용한 직관적인 환경 정의 절대/상대 경로 사용 방식의 차이와 병렬 환경 구성의 핵심 개념 CLI 인자를 통한 환경 수 조정 이처럼 Isaac Lab은 복잡한 로봇 환경도 코드 몇 줄로 효율적으로 구성할 수 있도록 설계되어 있으며, 강화학습 워크플로우에 최적화된 시뮬레이션 구조를 제공합니다.
2025년 3월 28일
Isaac Lab은 NVIDIA의 Isaac Sim 기반 강화학습 프레임워크로, 커스터마이징된 로봇 시뮬레이션 환경을 쉽게 구성할 수 있도록 지원합니다. 이번 글에서는 Isaac Lab에서 가장 기초적인 시뮬레이션 예제인 empty 시뮬레이션 scene을 만드는 방법을 다룹니다. 단순해 보일 수 있지만, 이 예제는 CLI 실행 환경 설정, SimulationConfig 구성, SimulationContext 초기화, 그리고 렌더링과 시뮬레이션 루프 실행이라는 핵심 개념들을 모두 포함하고 있어, 이후 복잡한 환경 구성에도 꼭 필요한 기초입니다. 공식 튜토리얼 링크: https://isaac-sim.github.io/IsaacLab/main/source/tutorials/00_sim/create_empty.html Isaac Sim 환경에서 CLI 사용 Isaac Lab은 GUI 환경이 아닌 CLI 기반으로 실행하여 시뮬레이션 성능을 최적화합니다. 이를 위해 Omniverse AppLauncher의 명령줄 인터페이스(※ CLI)를 사용하는 것이 기본 방식입니다. 예를 들어, 다음과 같은 명령줄 인자들이 자주 사용됩니다: -headless: GUI 없이 실행 (백그라운드 실행) -device cuda: CUDA 기반 GPU에서 실행 -enable_cameras: 카메라 센서 활성화 -livestream: 실시간 스트리밍 옵션 -verbose, -info: 디버깅 및 로그 활성화 -experience: 특정 환경 파일(.json 등) 로딩 argparse로 CLI 인자 처리 Python의 argparse 라이브러리를 통해 CLI 인자를 파싱할 수 있습니다. 위 코드는 AppLauncher에서 기본 실행 인자들을 받아들일 수 있도록 구성하며, 이후 AppLauncher(args_cli)를 통해 시뮬레이터를 실행합니다. 이제 Omniverse의 simulation_app 객체를 통해 환경을 제어할 수 있는 기반이 마련됩니다. SimulationCfg와 SimulationContext 시뮬레이션을 구성하려면 다음 두 가지가 필수입니다: 1. SimulationCfg Isaac Lab에서 제공하는 시뮬레이션 설정 클래스입니다. 주요 설정: device: 실행 장치 (CPU / CUDA) dt: 물리 연산 타임스텝 (예: 0.01 → 1초에 100번 계산) physics_scene: 물리 엔진 환경 설정 (중력, 충돌 등) 2. SimulationContext 시뮬레이션 실행을 위한 컨텍스트 객체입니다. SimulationContext(sim_cfg)를 통해 sim_cfg에서 설정한 값들이 적용된 시뮬레이션이 생성됩니다. sim.play(), sim.pause() 등 제어 가능 중력, 충돌, 광원, 강체 등 물리 요소를 쉽게 설정 가능 카메라 뷰 설정 시뮬레이션 씬을 시각화하기 위해 카메라 뷰를 설정할 수 있습니다. 첫 번째 인자: 카메라 위치 (x, y, z) 두 번째 인자: 카메라가 바라보는 타겟 포인트 이 설정을 통해 초기 시점에서 장면이 어떻게 보일지를 조정할 수 있습니다. 시뮬레이션 초기화: sim.reset() sim.reset() 이 함수는 시뮬레이션 타임라인을 초기화합니다. ※ 이 과정을 생략하면 물리 핸들이 제대로 초기화되지 않아 오류가 발생할 수 있으므로 반드시 한 번 호출해야 합니다. 메인 루프 실행: while simulation_app.is_running() Isaac Lab은 simulation_app이 실행되는 동안 루프를 유지하면서 각 프레임을 처리합니다. while simulation_app.is_running(): sim.step() print("Step completed") sim.step()을 호출하면 물리 엔진이 한 스텝(프레임)을 계산합니다. print()를 통해 각 스텝마다 로그를 남길 수 있으며, headless 모드에서 디버깅에 유용합니다. 마무리 이번 글에서는 Isaac Lab에서 빈 시뮬레이션 씬(empty scene)을 생성하는 과정을 단계별로 설명했습니다. 이 튜토리얼은 매우 기본적인 형태이지만, 향후 로봇 추가, 센서 구성, 강화학습 환경 구축 등 다양한 확장 작업의 기초가 됩니다. 정리하면, 아래와 같은 개념들을 학습할 수 있었습니다: Isaac Sim 기반의 CLI 실행 구조 AppLauncher와 argparse를 통한 실행 인자 처리 SimulationCfg와 SimulationContext의 역할 카메라 뷰 설정과 물리 연산 루프 구성 Headless 환경에서의 실행 및 로그 출력 Isaac Lab의 강력한 시뮬레이션 환경을 제대로 활용하기 위해서는 이와 같은 기반 구성에 대한 이해가 반드시 필요합니다.
2025년 3월 28일
Isaac Lab은 NVIDIA의 Isaac Sim 위에 구축된 강화학습 환경 라이브러리로, 다양한 로봇 시뮬레이션 환경을 빠르게 구성하고 실험할 수 있게 도와줍니다. 이번 글에서는 Isaac Lab의 대표적인 데모 스크립트를 실행하는 방법과 함께, 각 스크립트 구성 요소의 핵심 키워드를 정리합니다. 특히 로컬 환경에서 Showroom Demo를 실행하고, 시뮬레이션 환경 구성, 로봇 배치, 랜덤 동작 부여 등 다양한 기능을 확인하는 과정을 단계적으로 설명합니다. Showroom Demos란? Isaac Lab에서는 Showroom Demos를 통해 다양한 로봇 시뮬레이션 데모를 제공하고 있습니다. 공식 링크: 🔗 Isaac Lab Showroom Demos 실행 가능한 데모 예제 아래는 Isaac Lab에서 제공하는 대표적인 데모 예제입니다: quadrupeds.py – 4족 보행 로봇 시뮬레이션 amrs.py – AMR(Autonomous Mobile Robot) 시뮬레이션 hands.py – 로봇 핸드 관련 시뮬레이션 1. Isaac Lab 설치 및 예제 실행 Isaac Lab을 로컬에 설치한 후 다음과 같은 순서로 데모를 실행합니다. GitHub에서 Isaac Lab 저장소 clone 로컬 디렉토리 /isaac/isaacLab 로 이동 실행 명령어 입력 2. quadrupeds.py 구성 설명 해당 스크립트는 from omni.isaac.lab_assets를 통해 사전에 정의된 로봇 설정(Configuration)을 불러옵니다. 이 구성은 여러 종류의 4족 보행 로봇의 물리적 속성과 동작 세팅이 포함되어 있어, 다양한 로봇 테스트에 활용됩니다. 3. define_origins() 함수 define_origins() 함수는 시뮬레이션 내 각 환경(환경 = 로봇 하나)의 시작 위치를 정의합니다. 이때 생성되는 env_origins는 (num_envs x 3) 크기의 텐서이며, 3은 x, y, z 좌표를 의미합니다. num_cols: 환경을 가로로 배치할 개수 (예: 정사각형 배치 위해 √N 사용) num_rows: 총 환경 수를 열로 나눈 행 수 이러한 방식으로 수십~수백 개의 로봇을 한 화면에 동시에 배치할 수 있습니다. 4. design_scene() 함수 시뮬레이션 씬(Scene)을 구성하는 함수로, 다음과 같은 요소들이 포함됩니다: Ground plane (지면) Light sources (광원) 환경 조명 강도 설정 이 구성은 Isaac Sim의 UI에서도 수동으로 설정 가능하지만, 코드를 통해 자동화하면 반복 실험에 효율적입니다. 5. origin 및 run_simulator() origin은 학습에 사용될 로봇들의 위치를 일괄 지정합니다. run_simulator()는 설정이 완료된 후 시뮬레이션을 실제로 실행하는 함수입니다. 또한, 카메라 뷰를 설정하기 위해 sim.set_camera_view()를 호출해 관찰 포인트를 정의할 수 있습니다. 6. 반복적 행동 설정 및 랜덤 동작 부여 각 로봇은 시뮬레이션 시작 시 자동으로 spawn되며, 관절의 초기 위치도 설정됩니다. 이때 무작위성(Randomness)을 부여해 다양한 동작을 학습할 수 있게 구성됩니다. 예: 이와 같은 랜덤 초기화는 로봇이 특정 상황에 과적합되지 않도록 방지하는 데에 중요한 역할을 합니다. 7. random function 조정: 0.1 → 5.1 랜덤 함수의 스케일 값을 변경하면 관절의 움직임에도 큰 차이가 발생합니다. 0.1: 상대적으로 안정적인 동작 5.1: 관절 움직임에 큰 변동성 (학습에 따라 더 많은 시나리오를 다룰 수 있음) 이러한 파라미터 조정은 강화학습 성능 향상 또는 테스트 다양성 확보에 중요한 영향을 미칩니다. 마무리 이번 글에서는 Isaac Lab의 대표적인 데모 예제(quadrupeds.py)를 중심으로 시뮬레이션 환경 구성과 실행 과정을 설명했습니다. 또한 각 구성 함수의 역할과 핵심 키워드를 정리해, 로봇 학습 환경을 어떻게 구성하고 동작을 확장할 수 있는지에 대한 기초를 다졌습니다. 특히 Isaac Lab은 다음과 같은 목적에 적합합니다: 멀티 로봇 시뮬레이션 강화학습 환경 셋업 관절 제어 및 커스텀 동작 실험 카메라 시점 설정 및 렌더링 최적화 Isaac Sim 기반의 학습/검증 워크플로우를 계획 중이라면, Isaac Lab을 통해 손쉽고 확장성 있는 구조를 구성할 수 있습니다.
2025년 3월 28일