[Isaac Lab Part 3] RSL-RL로 Unitree Go2 보행 Policy 학습하기
Isaac Lab manager-based 환경과 RSL-RL PPO runner가 Go2 보행 학습을 구성하는 흐름을 정리한다.
이번 글에서는 Unitree Go2가 걷는 policy를 Isaac Lab의 manager-based 환경과 RSL-RL PPO 학습 파이프라인으로 학습하는 과정을 정리했다. 이후 추론 단계에서 같은 config를 다시 써야 하므로, 학습 스크립트가 어떤 순서로 환경과 agent 설정을 조립하는지 이해하는 것이 중요하다.
1. RSL-RL 학습 프레임워크
RSL-RL은 로봇 locomotion 실험에서 많이 쓰이는 on-policy 강화학습 라이브러리다. Isaac Lab에서는 PPO runner와 vectorized environment wrapper를 통해 수천 개 병렬 환경에서 빠르게 경험을 모으고 policy를 업데이트한다.
2. train.py의 역할
scripts/reinforcement_learning/rsl_rl/train.py는 학습 진입점이다. CLI 인자를 받고, Isaac Sim app을 띄운 뒤, task 이름에 연결된 environment config와 agent config를 불러온다.
1
2
3
4
from isaaclab.app import AppLauncher
# ... (중략) ...
app_launcher = AppLauncher(args_cli)
simulation_app = app_launcher.app
--video는 학습 중 rollout 영상을 저장할지 결정한다.--num_envs는 병렬 환경 수를 덮어쓴다.--distributed는 멀티 GPU 학습을 사용할 때 켠다.--resume은 기존 checkpoint에서 학습을 이어갈 때 사용한다.
3. Hydra config와 환경 생성
CLI에서 task를 지정하면 Hydra가 해당 task에 매핑된 YAML 설정을 읽고, 이를 ManagerBasedRLEnvCfg와 RslRlOnPolicyRunnerCfg 객체로 주입한다. 사용자가 넘긴 num_envs나 max_iterations 같은 값은 파일의 기본값보다 우선 적용된다.
환경은 Gym 형식으로 생성된다. 이때 env config에 정의된 로봇, 지형, 센서가 Isaac Sim stage 안에 실제 prim으로 배치된다.
RSL-RL은 단일 agent 관측 텐서를 기대하므로, Isaac Lab에서 나온 관측값은 wrapper를 거치며 학습 라이브러리가 요구하는 형태로 정리된다.
4. task 등록과 PPO 설정
Go2 보행 task는 Isaac Lab registry에 등록되어 있으며, 등록 정보에는 environment entrypoint와 reward, observation, command 구성이 연결된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import gymnasium as gym
from . import agents
##
# Register Gym environments.
##
gym.register(
id="Isaac-Velocity-Flat-Unitree-Go2-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.flat_env_cfg:UnitreeGo2FlatEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:UnitreeGo2FlatPPORunnerCfg",
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_flat_ppo_cfg.yaml",
},
)
Agent 쪽에서는 PPO runner 설정을 통해 rollout 길이, mini-batch 수, learning rate, entropy coefficient, value loss weight 같은 학습 하이퍼파라미터가 정해진다.
5. 학습 실행과 결과
실제 학습은 아래 명령처럼 task, 병렬 환경 수, iteration 수를 지정해 실행했다.
1
2
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task Isaac-Velocity-Rough-Unitree-
Go2-v0 --num_envs 4096 --max_iterations 10000 --video --headless
학습이 진행되면 일정 iteration마다 checkpoint와 rollout 결과가 저장된다. 아래 이미지는 rough terrain에서 학습된 Go2 policy가 명령 속도를 따라 걷는 모습을 확인한 결과다.


정리하면 Part 3의 핵심은 PPO 알고리즘 자체보다 Isaac Lab task config, RSL-RL runner config, vectorized wrapper가 어떻게 맞물리는지 확인하는 것이다. 이 구조를 알아야 Part 4에서 같은 policy를 추론 환경에 다시 올릴 수 있다.







