LeRobot documentation

YAM

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

YAM

YAM은 I2RT Robotics의 모방 학습 및 embodied AI를 위한 6-DOF 로봇 팔입니다. LeRobot에서 yam_follower는 선형 DM4310 그리퍼가 장착된 표준 YAM v1 팔 하나를 구동하고, bi_yam_follower는 두 개를 구동합니다. lerobot-calibrate, lerobot-rollout, lerobot-replay와 함께 사용하세요. LeRobot에는 아직 YAM 리더 팔이 없으므로, YAM은 정책(policy)에 의해 또는 데이터셋을 재생하는 방식으로 구동됩니다.

I2RT의 가이드를 참고하여 팔을 조립하고 배선하세요. 이 페이지는 LeRobot 측에 대해 다룹니다.

가이드포함 내용
YAM Arm 시리즈Unboxing, mounting, wiring, motors and grippers
소프트웨어 설정CAN 어댑터, 비트레이트 및 고정 인터페이스 이름
YAM Cell팔로우어와 리더가 두 개인 양손 조작 스테이션
YAM follower arm with the linear gripper YAM Cell bimanual station

YAM 팔로워(왼쪽)와 YAM Cell 양손 작업 스테이션(오른쪽). LeRobot이 팔로워를 제어합니다. 이미지 출처: I2RT Robotics.

하드웨어 및 안전

각 팔에는 ID 1부터 7까지의 7개 모터가 있습니다: 1~3번 관절에는 DM4340, 4~6번 관절과 그리퍼에는 DM4310이 사용됩니다. YAM Pro, Ultra, BIG YAM 및 기타 그리퍼는 아직 지원되지 않습니다.

다음이 필요합니다:

  • Linux, and one USB-to-CAN adapter per arm (SocketCAN, classic CAN at 1 Mbit/s).
  • 모든 모터의 CAN 타임아웃은 최대 400 ms(8000 틱, I2RT의 값)로 설정해야 하며, 예를 들어 I2RT SDK의 set_timeout.py --timeout를 사용할 수 있습니다. 타임아웃은 LeRobot이 명령을 보내지 않는 경우의 마지막 안전장치이므로, 이 설정이 없으면 LeRobot은 토크를 활성화하지 않습니다.
  • 처음 연결할 때 인터넷 접근이 필요합니다. 중력 보상은 lerobot/robot-urdfs 버킷에서 YAM 모델을 다운로드하여 HF_LEROBOT_HOME/robot-urdfs/yam/v1 아래에 캐시합니다.

팔을 안정적인 표면에 고정하고 작업 공간을 비워 두세요. 연결을 해제하면 토크가 비활성화되고 팔이 중력에 의해 떨어지므로, 먼저 팔을 지지해야 합니다. 구동 중 전원이 또는 CAN 어댑터가 연결 해제되면, 프로그램을 중지하고 팔을 지지한 후 다시 연결하세요.

LeRobot 설치 🤗

설치 가이드를 따르고, YAM 지원을 설치합니다:

pip install -e ".[yam]"

이 명령은 팔에 motorbridge와 python-can을, 중력 보상에 placo를 설치합니다.

하드웨어 연결

두 팔은 동일한 모터 ID를 사용하므로 각각 자체 CAN 인터페이스가 필요합니다.

lerobot-setup-can --mode=setup --interfaces=can0 --use_fd=false

두 팔을 사용하는 경우 --interfaces=can0,can1을 사용합니다. 이 명령은 sudo ip link를 사용하여 Linux 인터페이스를 구성하며 모터 명령을 전송하지 않습니다. 두 팔을 사용하는 경우 재부팅 후 can0와 can1이 교체될 수 있습니다. 각 인터페이스가 어떤 팔을 구동하는지 확인하거나, I2RT의 software setup을 사용하여 can_follower_l과 같은 고정된 이름을 부여한 후 해당 이름을 포트 olarak 사용하세요.

장치 유형

유형장치
yam_follower단일 팔로워
bi_yam_follower양손 팔로어

두 개의 팔을 사용하는 경우, 각 팔의 옵션을 --robot.left_arm_config.<option> 및 --robot.right_arm_config.<option>으로 설정합니다.

교정

Calibration은 완전히 닫힌 상태와 완전히 열린 상태의 gripper 한계만 측정하며, 관절은 공장 출하 시 제로 값을 유지합니다. 아래에 표시된 대로 먼저 팔을 접습니다. 측정하는 동안 Torque는 꺼져 있습니다: 팔을 지지하고, gripper만 손으로 움직이며, 각 프롬프트에서 Enter를 누릅니다. 이미 보정이 존재하는 경우, 연결 시 제어가 시작됩니다: 재사용하려면 Enter를 누르거나, 다시 측정하려면 c를 입력합니다. LeRobot은 Torque를 끄기 전에 팔을 지지하도록 요청합니다.

YAM arm in its folded position Linear DM4310 gripper

모든 관절이 0인 접힌 자세(왼쪽)와 선형 DM4310 그리퍼(오른쪽). 이미지 제공: I2RT Robotics.

단일 암
두 개의 팔
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam

이후 명령에서 동일한 --robot.id를 사용하여 LeRobot이 저장된 파일을 로드하도록 합니다.

관찰과 행동

한 팔은 관찰과 동작 모두에서 joint_1.pos부터 joint_6.pos, 그리고 gripper.pos를 가집니다. 관절은 도 단위 절대 각도이며, 그리퍼는 0(닫힘)에서 100(열림)까지의 값을 가집니다. use_degrees=false를 설정하면 I2RT 및 MolmoAct2 데이터와 동일하게 라디안과 0에서 1 범위로 전환됩니다. use_velocity_and_torque=true를 설정하면 .vel 및 .torque 관찰이 추가됩니다. 동작은 관절 한계 값으로 클리핑된 절대 관절 목표 값입니다.

두 팔은 left_와 right_ 접두사가 붙은 동일한 이름을 사용합니다. 팔에 설정된 카메라에도 접두사가 붙지만, 최상위 --robot.cameras는 이름을 그대로 유지합니다.

정책 실행

연결하기 전에 팔을 접힌 위치에 두되, 모든 관절을 0으로 설정하세요. LeRobot은 모든 관절이 해당 위치에서 11.5° 이내인지 확인한 후, 측정된 위치에서 제어를 시작합니다. 정책이 동작을 보내기 전까지는 아무것도 움직이지 않습니다.

lerobot-rollout \
  --robot.type=yam_follower --robot.port=can0 --robot.id=yam \
  --robot.cameras='{"wrist": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
  --policy.path=<user>/<policy> \
  --task="Pick up the cube"

두 개의 팔을 사용하는 경우 --robot.type=bi_yam_follower --robot.id=bimanual_yam --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1을 사용합니다. 롤아웃을 기록하려면 --dataset.repo_id=<user>/rollout_<name>을 추가하고, 추론 실행 및 정책 평가를 참고하세요. lerobot-replay는 동일한 --robot.* 옵션으로 기록된 에피소드를 재생합니다.

첫 번째 동작 이전, 그리고 command_timeout_s(1초) 동안 동작이 도착하지 않으면 팔은 현재 위치를 유지합니다. idle_mode=float인 경우, 관절은 중력 보상과 약한 감쇠가 적용되어 팔을 손으로 움직일 수 있으며, 그립퍼는 현재 개방 상태를 유지합니다. 추적은 사용자가 팔을 이동시킨 위치에서 재개됩니다.

안전

  • 모터 고장 또는 피드백 누락은 모든 명령을 중단합니다. 두 개의 팔이 있는 경우, 어느 쪽에서든 고장이 발생하면 두 팔 모두 중단됩니다. 계속하려면 연결을 해제하고 다시 연결하세요.
  • gravity_factors는 카메라나 페이로드 없이 표준 암만 대상으로 합니다. 카메라 또는 페이로드를 추가한 후에는 float 모드에서 암이 표류하지 않는지 확인하고, 표류가 발생하면 gravity_factors를 조정하세요.

구성 옵션

옵션기본값설명
port필수예를 들어 can0와 같은 SocketCAN 인터페이스
use_degreestrue도(degree)와 0~100 그리퍼; false는 라디안과 0~1
use_velocity_and_torquefalse.vel 및 .torque 관측값 추가
idle_modeholdhold로 포지션을 유지하거나, 액션이 도착하지 않으면 float
command_timeout_s1.0유휴 모드로 전환되기 전까지 동작이 없는 초
initial_position_deg모두 0필수 초기 위치; None은 검사를 건너뜁니다
initial_tolerance_deg11.5초기 위치로부터 허용되는 거리
gripper_force_limit_n50.0그리퍼가 물체에 막힌 후의 손가락 힘
gravity_factors[1.0, 1.1, 1.1, 1.2, 1.0, 1.0]중력 보상의 관절별 배율
cameras{}팔에 부착된 카메라

예: MolmoAct2

lerobot/MolmoAct2-BimanualYAM-LeRobot은 allenai/MolmoAct2-BimanualYAM을 LeRobot 형식으로 변환한 것으로, 공개된 정규화 통계가 포함되어 있습니다. 두 개의 YAM 팔을 라디안 단위로, 그립퍼는 0–1 범위로 학습했으며, 카메라는 상단, 좌측, 우측 순서로 세 개가 사용되었습니다. MolmoAct2를 참고하세요.

pip install -e ".[yam,molmoact2,dataset]"

lerobot-rollout \
  --robot.type=bi_yam_follower --robot.id=bimanual_yam \
  --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1 \
  --robot.left_arm_config.use_degrees=false --robot.right_arm_config.use_degrees=false \
  --robot.cameras='{
    "top": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/TOP_CAMERA", "width": 640, "height": 480, "fps": 30},
    "left": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/LEFT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"},
    "right": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/RIGHT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"}
  }' \
  --policy.path=lerobot/MolmoAct2-BimanualYAM-LeRobot \
  --inference.type=rtc --inference.rtc.execution_horizon=20 --inference.queue_threshold=20 \
  --device=cuda --interpolation_multiplier=2 \
  --interactive=true --play_sounds=false \
  --task="Pick up the red block and place it in the green bin"

/start를 입력하여 정책을 실행하고, /subtask <text>를 입력하여 지시를 변경하며, /reset를 입력하여 초기 위치로 복귀하고, /stop를 입력하여 종료합니다. 복귀 동작은 고정된 시간 동안 지속되며 YAM의 속도 제한이 여전히 적용되므로, 초기 위치에서 멀리 떨어진 팔은 완전히 복귀하지 못하고 중간에 멈출 수 있습니다.

Float 모드는 정책을 임의의 위치에서 시작할 수 있게 합니다: --robot.left_arm_config.idle_mode=float --robot.right_arm_config.idle_mode=float를 추가하세요. 첫 번째 /start 실행 전과 /reset 완료 후 1초 동안, 팔을 원하는 위치로 수동으로 이동한 후 /start를 입력하여 해당 위치에서 정책을 실행하세요. 이 용도로 /stop를 사용하지 마세요: 세션을 종료하고 토크를 비활성화합니다.

문제 해결

문제확인
CAN 인터페이스가 없거나 중단되었습니다어댑터의 전원과 USB 케이블을 확인하고 ip link show를 실행합니다. lerobot-setup-can을 다시 실행합니다.
missing or stale motor feedback24 V 전원, CAN 배선 및 종단, 모터 ID 1~7, 그리고 port가 해당 팔의 인터페이스인지 확인하세요.
잘못된 팔이 움직입니다각 인터페이스가 어떤 arm을 구동하는지 확인하거나, 인터페이스에 고정된 이름을 지정하세요.
unsafe motor CAN timeoutI2RT SDK를 사용하여 모든 모터의 CAN 타임아웃을 최대 400 ms로 설정합니다.
not within initial_tolerance_deg…
Connecting에서 다시 보정을 요청합니다교정 시 사용한 --robot.id를 동일하게 사용하세요.
팔이 float 모드에서 표류합니다팔의 카메라 또는 페이로드에 대해 gravity_factors를 조정합니다.
MolmoAct2가 팔을 잘못된 위치로 이동시킵니다use_degrees=false를 두 팔 모두에 설정하세요: 모델은 라디안과 0~1 그리퍼를 사용합니다.

참고

Update on GitHub