๐Ÿฆ† MicroDuck RL Locomotion Policies (ONNX)

์ด ์ €์žฅ์†Œ๋Š” 2์กฑ ๋ณดํ–‰ ์ดˆ์†Œํ˜• ๋กœ๋ด‡ MicroDuck์„ ์œ„ํ•œ ๊ฐ•ํ™”ํ•™์Šต(Reinforcement Learning) ๊ธฐ๋ฐ˜ ๋ชจ์…˜ ์ œ์–ด ์˜จ์Šค(ONNX) ์ •์ฑ… ๋ชจ๋ธ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.
MuJoCo ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ํ™˜๊ฒฝ ๋ฐ ์‹ค์ œ ํ•˜๋“œ์›จ์–ด ๋กœ๋ด‡(Sim2Real)์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตฌ๋™๋ฉ๋‹ˆ๋‹ค.

๐Ÿฆ† MicroDuck Custom Walking Policy (Simulation Rollout at 60 FPS)


๐Ÿ“Œ ํฌํ•จ๋œ ๋ชจ๋ธ ํŒŒ์ผ ๋ชฉ๋ก (Policies)

ํŒŒ์ผ๋ช… ์ฃผ์š” ์—ญํ•  (Behavior) ์„ค๋ช…
my_microduck_walking.onnx ์‚ฌ์šฉ์ž ํ•™์Šต ๋ณดํ–‰ (Custom Walking) ์ง์ ‘ ํ•™์Šต๋œ MicroDuck ์ „์ง„/ํšŒ์ „ ๋ณดํ–‰ ์ œ์–ด ์ •์ฑ…
alpha_walking.onnx ๊ธฐ๋ณธ ๋ณดํ–‰ (Default Walking) ์†๋„ ๋ช…๋ น(vx, vy, vyaw) ์ถ”์ข… ๋ณดํ–‰ ์ •์ฑ…
alpha_stand.onnx ๊ธฐ๋ฆฝ ๋ฐ ์ž์„ธ ์ œ์–ด (Standing & Pose) ์ œ์ž๋ฆฌ ๊ท ํ˜• ์œ ์ง€ ๋ฐ ์‹ ์ฒด 6์ถ•(z, pitch, roll ๋“ฑ) ์ œ์–ด
alpha_sitstand.onnx ์•‰๊ธฐ / ์„œ๊ธฐ (Sit โ†” Stand) ๋ถ€๋“œ๋Ÿฌ์šด ์•‰๊ธฐ ๋ฐ ๋‹ค์‹œ ์ผ์–ด์„œ๊ธฐ ์ƒํƒœ ์ „ํ™˜ ์ œ์–ด
alpha_ground_pick.onnx ๋ฐ”๋‹ฅ ๋ฌผ์ฒด ์ค๊ธฐ (Ground Pick) ํ—ˆ๋ฆฌ๋ฅผ ์ˆ™์—ฌ ๋ฐ”๋‹ฅ ๋ฌผ์ฒด๋ฅผ ์ง‘์–ด ์˜ฌ๋ฆฌ๋Š” ๊ถค์  ์ œ์–ด
roulade.onnx ์•ž๊ตฌ๋ฅด๊ธฐ (Forward Roll) ๋‹ค์ด๋‚ด๋ฏน ์•ž๊ตฌ๋ฅด๊ธฐ ํ›„ ์ž๋™ ๊ธฐ๋ฆฝ ๋ณต์› ๋™์ž‘
ball_kick_left.onnx ์™ผ๋ฐœ ๊ณต์ฐจ๊ธฐ (Left Ball Kick) ์ „๋ฐฉ ๊ณต ํƒ€๊ฒฉ ๋ชจ์…˜
ball_kick_right.onnx ์˜ค๋ฅธ๋ฐœ ๊ณต์ฐจ๊ธฐ (Right Ball Kick) ์ „๋ฐฉ ๊ณต ํƒ€๊ฒฉ ๋ชจ์…˜
roller.onnx ๋กค๋Ÿฌ์Šค์ผ€์ดํŠธ ์ฃผํ–‰ (Roller Skates) ๋กค๋Ÿฌ ์‹ ๋ฐœ ์žฅ์ฐฉ ์‹œ ๊ณ ์† ์ฃผํ–‰ ์ œ์–ด
roller_crouch.onnx ๋กค๋Ÿฌ ์›…ํฌ๋ฆฌ๊ธฐ (Roller Crouch) ๋กค๋Ÿฌ ์ฃผํ–‰ ์ค‘ ๋ฌด๊ฒŒ์ค‘์‹ฌ์„ ๋‚ฎ์ถ”๋Š” ์ž์„ธ

โš™๏ธ ๋ชจ๋ธ ์ž…์ถœ๋ ฅ ๊ทœ๊ฒฉ (Model Specification)

๋ชจ๋“  ์ •์ฑ… ๋ชจ๋ธ์€ **ํ†ต์ผ๋œ 61์ฐจ์› ๊ด€์ธก(Observation)**๊ณผ 14์ฐจ์› ์•ก์…˜(Action) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  • ์ž…๋ ฅ (Observation): [1, 61] (float32)

    1. imu_ang_vel (3D): IMU ๊ฐ์†๋„ (X, Y, Z rad/s)
    2. projected_gravity (3D): ๋ชธ์ฒด ๊ธฐ์ค€ ์ค‘๋ ฅ ๋ฒกํ„ฐ
    3. joint_pos_rel (14D): ๊ธฐ๋ณธ ์„œ ์žˆ๋Š” ์ž์„ธ ๋Œ€๋น„ ํ˜„์žฌ 14๊ฐœ ๊ด€์ ˆ ๊ฐ๋„ ์˜ค์ฐจ (rad)
    4. joint_vel (14D): 14๊ฐœ ๊ด€์ ˆ ๊ฐ์†๋„ (rad/s)
    5. last_action (14D): ์ด์ „ ์Šคํ… ์•ก์…˜ ์ถœ๋ ฅ๊ฐ’
    6. command (13D):
      • ์„ ์†๋„/๊ฐ์†๋„ ๋ช…๋ น: [vx, vy, vyaw] (3D)
      • ๋จธ๋ฆฌ ๋ฐฉํ–ฅ ๋ช…๋ น: [neck_pitch, head_pitch, head_yaw, head_roll] (4D)
      • ๋ชธ์ฒด ์ž์„ธ ๋ช…๋ น: [x, y, z, roll, pitch, yaw] (6D)
  • ์ถœ๋ ฅ (Action): [1, 14] (float32)

    • 14๊ฐœ ๋‹ค์ด๋‚˜๋ฏน์…€ XL330 ์•ก์ถ”์—์ดํ„ฐ์˜ ๋ชฉํ‘œ ๊ฐ๋„ ์˜คํ”„์…‹ (Delta angle)
  • ์ œ์–ด ๋ฃจํ”„ (Control Loop):

    • ์ œ์–ด ์ฃผ๊ธฐ: 50 Hz (0.02์ดˆ ๊ฐ„๊ฒฉ)
    • ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์Šคํ…: 0.005์ดˆ (decimation = 4)
    • ๋ชจํ„ฐ ํƒ€๊ฒŸ ๊ณ„์‚ฐ: target_position = default_pose + action * action_scale

๐Ÿš€ ํŒŒ์ด์ฌ์—์„œ ONNX ๋ชจ๋ธ ๋กœ๋“œ ๋ฐ ์ถ”๋ก  ์˜ˆ์‹œ

import numpy as np
import onnxruntime as ort

# ONNX ๋ชจ๋ธ ๋กœ๋“œ
session = ort.InferenceSession("my_microduck_walking.onnx")

# 61์ฐจ์› ๊ด€์ธก๊ฐ’ ๋ฒกํ„ฐ ์ƒ์„ฑ (์˜ˆ์‹œ)
obs = np.zeros((1, 61), dtype=np.float32)

# ์ถ”๋ก  ์‹คํ–‰ (14์ฐจ์› ์•ก์…˜ ํš๋“)
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
action = session.run([output_name], {input_name: obs})[0]

print("์•ก์…˜ ์ถœ๋ ฅ (14๊ฐœ ๊ด€์ ˆ):", action)
Downloads last month

-

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