Skip to content

2족 보행 로봇 걸음걸이 강화학습 따라하기

Git : https://github.com/HighTorque-Robotics/livelybot_pi_rl_baseline

이 프로젝트는 NVIDIA Isaac Gym 기반의 강화 학습(Reinforcement Learning, RL) 환경을 제공하여 HighTorque Robotics의 Pi 이족 보행 로봇을 위한 정책(policy)을 훈련하고 검증할 수 있도록 돕는 베이스라인입니다.

이 베이스라인은 NVIDIA Isaac Gym을 기반으로 하는 강화 학습 환경을 제공하며, HighTorque Robotics의 Pi 이족 보행 로봇을 대상으로 합니다.

Pi_rl_baseline은 또한 Isaac Gym에서 MuJoCo로의 sim2sim(시뮬레이션 간 시뮬레이션) 프레임워크를 통합하여, 사용자가 훈련된 정책을 다른 물리 시뮬레이션 환경에서도 검증할 수 있도록 합니다. 이는 정책의 견고성(robustness)일반화 능력(generalization capabilities)을 보장하는 데 도움이 됩니다.

설치 (Installation)

1. 가상 환경 생성

Miniconda 또는 Anaconda를 사용하여 가상 환경을 생성합니다:

bash
conda create -n pi_env python=3.8
conda activate pi_env

2. NVIDIA 드라이버 설치

apt를 사용하여 NVIDIA 드라이버를 설치합니다. 드라이버 버전은 최소 515 이상이어야 합니다 (525 버전을 권장합니다). 상위 버전도 하위 호환성을 지원하므로 설치 가능합니다:

bash
sudo apt install nvidia-driver-525

설치 후, nvidia-smi 명령어를 사용하여 그래픽 드라이버의 CUDA 버전을 확인합니다.

3. 최신 PyTorch 설치

PyTorch 웹사이트(https://pytorch.org/)를 방문하여 다음을 선택합니다:

  • Package: Conda
  • Compute Platform: 적절한 CUDA 버전

참고: CUDA는 하위 호환성을 지원하지만, 상위 호환성은 지원하지 않는 소프트웨어 라이브러리입니다. 따라서 선택한 CUDA 버전은 컴퓨터에 설치된 CUDA 버전보다 작아야 합니다.

bash
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia

4. NumPy 설치

Conda를 사용하여 NumPy를 설치합니다:

bash
conda install numpy=1.23

5. Isaac Gym 설치

NVIDIA 공식 웹사이트를 방문하여 Isaac Gym Preview 4를 다운로드하고 설치합니다:

  1. conda 환경을 활성화합니다.
  2. isaacgym 리포지토리에 접근하여 설치합니다:
bash
cd isaacgym/python && pip install -e .

환경이 성공적으로 설치되었는지 확인하기 위해 예제 파이썬 스크립트를 실행해봅니다:

bash
cd examples && python 1080_balls_of_solitude.py

문제 해결을 위해서는 isaacgym/docs/index.html 문서를 참조하십시오.

6. 강화 학습 패키지 설치

아래 Git repository를 clone 합니다.:

bash
git clone https://github.com/HighTorque-Robotics/livelybot_pi_rl_baseline.git
cd livelybot_pi_rl_baseline && pip install -e .

사용 가이드 (Usage Guide)

7. 강화 학습 훈련하기

아래 명령을 입력하면 훈련을 시작합니다.:

bash
# 4096개의 환경을 사용하고, "v1"을 학습 버전으로 사용하여 PPO 정책 학습을 수행합니다.
# 이 명령은 로봇의 학습 작업을 시작합니다.
python scripts/train.py --task=pai_ppo --run_name v1 --headless --num_envs 4096

TIP

이렇게 하면 Wandb 등록 웹사이트에 계정을 등록하라는 메시지가 표시됩니다(Wandb는 Isaac Gym에서 실험 추적, 하이퍼파라미터 기록, 훈련 지표 시각화를 위한 보상 곡선에 사용됩니다).

8. 학습된 정책을 평가하고 변환하기

onnx 패키지를 설치

bash
pip install onnx

아래 명령을 입력하면 학습된 정책 변환을 실행합니다.

bash
python scripts/play.py --task=pai_ppo --run_name v1

결과물인 policy.onnxlogs/Pai_ppo/exported/policies에서 찾을 수 있습니다.

9. 시뮬레이션으로 검증하기

Mujoco Sim2sim 테스트를 실행합니다. (환경 100개를 사용하며, "v1" 훈련 버전의 모델을 로드):

bash
# 학습된 정책 평가
# 이 명령은 해당 환경에서 성능 평가를 위해 "v1" 정책을 로드합니다.
# 또한, 배포 목적에 적합한 JIT 모델을 자동으로 내보냅니다.
python scripts/play.py --task=pai_ppo --run_name v1

# Mujoco를 사용하여 sim2sim 구현
python scripts/sim2sim.py --load_model /path/to/logs/Pai_ppo/exported/policies/policy_torch.pt

# 저희가 제공한 학습된 정책을 실행합니다.
python scripts/sim2sim.py --load_model /path/to/logs/Pai_ppo/exported/policies/policy_example.pt

매개변수 설명

  • CPU 및 GPU 사용량 : CPU를 사용하여 시뮬레이션을 실행하려면 --sim_device=cpu--rl_device=cpu를 동시에 설정합니다. 특정 GPU를 사용하여 시뮬레이션을 실행하려면 --sim_device=cuda:{0,1,2...}--rl_device={0,1,2...}를 동시에 설정합니다.
    참고: CUDA_VISIBLE_DEVICES는 적용되지 않으며, --sim_device--rl_device와 일치하는 설정이 매우 중요합니다.
  • 헤드리스 작업 : 렌더링 없이 실행하려면 --headless 매개변수를 사용합니다.
  • 렌더링 제어 : 학습 중 'v' 키를 눌러 렌더링을 열거나 닫습니다.
  • 정책 위치 : 학습된 모델은 humanoid/logs/<experiment_name>/<date_time><run_name>/model<iteration>.pt에 저장됩니다.

명령줄 인수

RL 학습을 실행하려면 humanoid/utils/helpers.py를 참조하세요. sim2sim을 실행하려면 humanoid/scripts/sim2sim.py를 참조하세요.

  1. 모든 환경은 env 파일(legged_robot.py)과 config 파일(legged_robot_config.py)을 사용합니다. config 파일에는 LeggedRobotCfg(모든 환경 매개변수 포함)와 LeggedRobotCfgPPO(모든 학습 매개변수 포함)라는 두 클래스가 있습니다.
  2. env 클래스와 config 클래스는 모두 상속을 사용합니다.
  3. cfg에서 0이 아닌 보상은 해당 이름의 함수를 총 보상에 포함합니다.
  4. task_registry.register(name, EnvClass, EnvConfig, TrainConfig)를 사용하여 작업을 등록해야 합니다. 등록은 envs/__init__.py 내부 또는 저장소 외부에서 수행할 수 있습니다.

새로운 환경 추가 (Add a New Environment)

새로운 환경을 추가하려면 다음 단계를 따르십시오:

  1. 기존 환경에서 상속받아 필요한 기능을 오버라이딩(재정의)하거나 새로운 보너스 기능을 추가합니다.
  2. humanoid/envs/__init__.py 파일에 새 환경을 등록합니다.
  3. 필요에 따라 cfg 또는 cfg_train에서 다른 매개변수를 수정하거나 조정합니다. 보상을 제거하려면 해당 보상의 scale을 0으로 설정하십시오.

    경고: 다른 환경의 매개변수는 수정하지 마십시오!

  4. 새로운 로봇/환경에서 sim2sim을 구현하려면 humanoid/scripts/sim2sim.py 파일을 변경해야 할 수 있습니다:
    • MJCF와 URDF 간의 로봇 관절 매핑을 확인합니다.
    • 훈련된 정책에 따라 로봇의 초기 관절 위치를 변경합니다.

기본 환경

  • 기본 환경인 "legged_robot"은 거친 지형 이동(rough terrain locomotion) 작업을 구축합니다. 해당 구성(configuration)은 로봇 자산(URDF/MJCF) 및 보상 스케일을 명시하지 않습니다.
  • 새로운 환경을 추가해야 하는 경우, "envs/" 아래에 새 리포지토리를 생성하고 그 안에 구성 파일 "<your_env>_config.py"를 포함해야 합니다.
  • 새로운 구성은 기존 환경 구성에서 상속받아야 합니다.
  • 새로운 로봇을 사용하려는 경우, 해당 자산(assets)을 "resources/" 리포지토리에 삽입하십시오.

구성 파일 (Configuration)

  • envconfig 클래스는 모두 상속(inheritance)을 사용합니다.
  • cfg에서 0이 아닌 값으로 지정된 보상은 전체 보상에 해당하는 이름의 함수를 기여합니다.
  • task_registry.register(name, EnvClass, EnvConfig, TrainConfig)를 사용하여 작업을 등록해야 합니다. 등록은 envs/__init__.py 내 또는 리포지토리 외부에서 발생할 수 있습니다.