AIC Cable Insert SFT OpenPI Pi0.5 UR5e

์ด ์ €์žฅ์†Œ๋Š” AIC cable insertion ์ž‘์—…์„ ์œ„ํ•ด UR5e ๊ธฐ์ค€์œผ๋กœ ํ•™์Šตํ•œ RLinf/OpenPI Pi0.5 SFT checkpoint๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•™์Šต ๋ฐ inference์— ์‚ฌ์šฉํ•˜๋Š” RLinf OpenPI config ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pi05_aic_cable_insert_ur5e

ํ•„์š”ํ•œ RLinf PR

์ด checkpoint๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด RLinf์— AIC UR5e OpenPI config, policy transform, normalization stats, inference script๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ตœ์†Œ ๋ณ€๊ฒฝ์€ ์•„๋ž˜ PR์— ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/Phy-Lab-aic/RLinf/pull/6

PR์ด merge๋˜๊ธฐ ์ „์—๋Š” PR branch๋ฅผ checkoutํ•ด์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/Phy-Lab-aic/RLinf.git
cd RLinf
git fetch origin pull/6/head:aic-ur5e-openpi-inference
git checkout aic-ur5e-openpi-inference

RLinf ํ™˜๊ฒฝ ์ค€๋น„

RLinf venv ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e ".[embodied,openpi]"

์ด๋ฏธ RLinf venv๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๋ฉด source .venv/bin/activate๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Checkpoint ๊ตฌ์„ฑ

๊ฐ checkpoint๋Š” ๋ณ„๋„ ํด๋”๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

global_step_2208
global_step_4416
global_step_6624
global_step_8832
global_step_11040

๊ธฐ๋ณธ inference checkpoint๋Š” global_step_11040์ž…๋‹ˆ๋‹ค.

๊ฐ checkpoint ํด๋”์—๋Š” ๋‹ค์Œ ํŒŒ์ผ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

actor/model_state_dict/full_weights.pt
actor/dcp_checkpoint/
Phy-lab/pretrained_dataset_v3_lerobot_v21_compat/norm_stats.json

norm_stats.json์€ OpenPI ์ž…๋ ฅ/์ถœ๋ ฅ normalization์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ Observation ํ˜•์‹

AIC UR5e policy๋Š” RGB ์นด๋ฉ”๋ผ 3๊ฐœ์™€ 7D state๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

env_obs = {
    "main_images": center_rgb_image,
    "wrist_images": left_or_wrist_rgb_image,
    "extra_view_images": right_or_extra_rgb_image,
    "states": ur5e_state_tensor,
    "task_descriptions": ["Insert the SFP-to-SC cable into the target port"],
}

7D state/action ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[shoulder_pan, shoulder_lift, elbow, wrist_1, wrist_2, wrist_3, gripper]

policy ์ถœ๋ ฅ action chunk์˜ shape์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[batch, 5, 7]

๋งˆ์ง€๋ง‰ ์ฐจ์›์˜ 7๋ฒˆ์งธ ๊ฐ’์€ gripper command์ž…๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์‹คํ–‰

RLinf PR branch ์•ˆ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด Hugging Face์—์„œ global_step_11040 checkpoint๋ฅผ ๋‚ด๋ ค๋ฐ›๊ณ , zero image/zero state๋กœ inference ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

python examples/sft/aic_ur5e_openpi_inference.py \
  --model-path Phy-lab/aic_cable_insert_sft_openpi_pi05_pretrained_v3_bs128_mb16_step11040 \
  --checkpoint global_step_11040

๋‹ค๋ฅธ checkpoint๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด --checkpoint ๊ฐ’์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

python examples/sft/aic_ur5e_openpi_inference.py \
  --model-path Phy-lab/aic_cable_insert_sft_openpi_pi05_pretrained_v3_bs128_mb16_step11040 \
  --checkpoint global_step_8832

์‹ค์ œ UR5e ์ž…๋ ฅ์œผ๋กœ ์‹คํ–‰

ํ˜„์žฌ UR5e 7D state๋ฅผ JSON ํŒŒ์ผ๋กœ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

[-0.49, -1.74, -1.55, -1.56, 1.88, 1.11, 0.007]

๊ทธ ๋‹ค์Œ RGB ์ด๋ฏธ์ง€ 3์žฅ๊ณผ state JSON์„ ์ง€์ •ํ•ด์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

python examples/sft/aic_ur5e_openpi_inference.py \
  --model-path Phy-lab/aic_cable_insert_sft_openpi_pi05_pretrained_v3_bs128_mb16_step11040 \
  --checkpoint global_step_11040 \
  --center-image /path/to/center.png \
  --left-image /path/to/left_or_wrist.png \
  --right-image /path/to/right_or_extra.png \
  --state-json /path/to/ur5e_state.json

์ถœ๋ ฅ์€ JSON ํ˜•์‹์ž…๋‹ˆ๋‹ค.

{"actions": [[[... seven action values ...]]]}

PR ๋ฒ”์œ„

PR #6์€ Hugging Face checkpoint๋ฅผ UR5e OpenPI inference๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋ณ€๊ฒฝ๋งŒ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. IsaacLab, Gazebo, RL runtime integration์€ ํ›„์† PR์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading