LeRobot documentation
OpenArm
OpenArm
OpenArm은 물리적 AI 연구 및 배포를 위해 설계된 오픈소스 7DOF 휴머노이드 암입니다.
조립형 또는 DIY 방식의 OpenArm을入手하고 전 세계 커뮤니티에 참여하려면, openarm.dev에서 전 세계 검증 및 인증된 제조업체를 확인해 보세요.
무엇이 특별할까요?
인간 규모 설계: OpenArm은 약 160~165cm 키의 사람을 기준으로 한 인간과 유사한 비율로 설계되었습니다. 이를 통해 안전하고 반응이 빠른 작동을 위해 실용적인 도달 거리와 관리 가능한 관성 사이의 최적의 균형을 제공합니다.
안전 우선 아키텍처: QDD 백드라이브 가능 모터와 높은 컴플라이언스로 설계된 OpenArm은 실제 작업에 필요한 실용적인 페이로드 성능(피크 6.0kg / 정격 4.1kg)을 유지하면서 안전한 인간-로봇 상호작용을 우선시합니다.
내구성 설계: 핵심 구조 부품은 알루미늄과 스테인리스 스틸로 제작되어 반복적인 데이터 수집 및 지속적인 연구 사용에 견고한 성능을 보장합니다.
완전한 접근성 및 조립 가능성: CNC 부품과 3D 프린팅 케이스, 전기 배선 등 모든 구성 요소는 개별 연구자 및 연구실에서 구매하고 조립할 수 있도록 설계되었으며, 완전한 제작 데이터가 제공됩니다.
실용적이고 합리적인 가격: 완전한 양팔 시스템의 가격이 6,500달러(USD)인 OpenArm은 기존 휴머노이드 로봇 비용의 일부만으로도 연구 수준의 기능을 제공합니다.
플랫폼 요구 사항
**Linux Only**: OpenArm currently only works on Linux. The CAN bus USB adapter does not have macOS drivers and has not been tested on Windows.
안전 가이드
OpenArm을 조작하기 전에 공식 안전 가이드를 읽어 주세요. 주요 사항:
- 안전한 설치: 나사나 클램프를 사용하여 팔을 평평하고 안정적인 표면에 고정합니다
- 안전 거리: 작동 중에는 신체 부위와 물체를 운동 범위 밖으로 유지하세요
- 보호 장비: 항상 안전 고글을 착용하고 필요 시 추가 PPE를 사용하세요
- 페이로드 한도: 지정된 페이로드 한도(팔당 최대 6.0kg / 정격 4.1kg)를 초과하지 마세요
- 비상 정지: 비상 정지 장치의 위치와 작동 방법을 숙지하세요
- 정기 점검: 느슨한 나사, 손상된 기계적 한계, 이상 소음, 배선 손상을 확인합니다
하드웨어 설정
다음 항목에 대해서는 공식 OpenArm 하드웨어 문서를 따르세요:
- 부품 목록 및 소싱
- 3D 프린팅 지침
- 기계 조립
- 전기 배선
하드웨어 저장소는 github.com/enactic/openarm에서 사용할 수 있습니다.
CAN 버스 설정
OpenArm uses CAN bus communication with Damiao motors. Once you have the CAN bus USB adapter plugged into your Linux PC, follow the Damiao Motors and CAN Bus guide to configure the interface.
빠른 설정:
# Setup CAN interfaces
lerobot-setup-can --mode=setup --interfaces=can0,can1
# Test motor communication
lerobot-setup-can --mode=test --interfaces=can0,can1LeRobot 설치 🤗
설치 가이드를 따르고, Damiao 모터 지원을 설치하세요:
pip install -e ".[damiao]"사용
팔로어 암(로봇)
lerobot-calibrate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_followerfrom lerobot.robots.openarm_follower import OpenArmFollower, OpenArmFollowerConfig
config = OpenArmFollowerConfig(
port="can0",
side="right", # or "left" for left arm
id="my_openarm_follower",
)
follower = OpenArmFollower(config)
follower.connect()
# Read current state
obs = follower.get_observation()
print(obs)
# Send action (position in degrees)
action = {
"joint_1.pos": 0.0,
"joint_2.pos": 0.0,
"joint_3.pos": 0.0,
"joint_4.pos": 45.0,
"joint_5.pos": 0.0,
"joint_6.pos": 0.0,
"joint_7.pos": 0.0,
"gripper.pos": 0.0,
}
follower.send_action(action)
follower.disconnect()리더 암(텔레오퍼레이터)
리더 암은 텔레오퍼레이션을 위해 사용되며, 수동으로 움직여 팔로워 암을 제어합니다.
lerobot-calibrate \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leaderfrom lerobot.teleoperators.openarm_leader import OpenArmLeader, OpenArmLeaderConfig
config = OpenArmLeaderConfig(
port="can1",
id="my_openarm_leader",
manual_control=True, # Disable torque for manual movement
)
leader = OpenArmLeader(config)
leader.connect()
# Read current position (as action to send to follower)
action = leader.get_action()
print(action)
leader.disconnect()원격 조작
리더-팔로워 제어 방식으로 OpenArm을 텔레오퍼레이트하려면:
lerobot-teleoperate \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leader교정 시 사용한 --robot.id와 --teleop.id를 그대로 사용하세요. 그러면 LeRobot이 교정 파일을 찾을 수 있습니다.
양손 텔레오퍼레이션
리더 암 2개와 팔로워 암 2개로 구성된 양팔 OpenArm 설정을 원격 조작하려면:
lerobot-teleoperate \
--robot.type=bi_openarm_follower \
--robot.left_arm_config.port=can0 \
--robot.left_arm_config.side=left \
--robot.right_arm_config.port=can1 \
--robot.right_arm_config.side=right \
--robot.id=my_bimanual_follower \
--teleop.type=bi_openarm_leader \
--teleop.left_arm_config.port=can2 \
--teleop.right_arm_config.port=can3 \
--teleop.id=my_bimanual_leader데이터 기록
원격 조작 중에 데이터셋을 기록하려면:
lerobot-record \
--robot.type=openarm_follower \
--robot.port=can0 \
--robot.side=right \
--robot.id=my_openarm_follower \
--teleop.type=openarm_leader \
--teleop.port=can1 \
--teleop.id=my_openarm_leader \
--dataset.repo_id=${HF_USER}/my_openarm_dataset \
--dataset.single_task="Describe your task here" \
--dataset.fps=30 \
--dataset.num_episodes=10lerobot-record는 세션의 날짜와 시간을 데이터셋 이름에 추가하여 my_hf_username/my_openarm_dataset_YYYYMMDD_HHMMSS 형식으로 저장합니다. 카메라, 키보드 제어 및 나머지 워크플로우는 녹화 가이드를 참고하세요.
구성 옵션
팔로워 구성
| 매개변수 | 기본값 | 설명 |
|---|---|---|
port | - | CAN 인터페이스 (예: can0) |
side | None | Arm 쪽: "left", "right" 또는 커스텀 한도를 위해 None |
use_can_fd | True | 높은 데이터 전송률을 위해 CAN FD 활성화 |
can_bitrate | 1000000 | 명목 비트레이트(1 Mbps) |
can_data_bitrate | 5000000 | CAN FD 데이터 비트레이트 (5 Mbps) |
max_relative_target | None | 상대 목표 위치의 안전 한계 |
position_kp | 관절별 | 위치 제어 비례 이득 |
position_kd | 관절별 | 위치 제어 미분 이득 |
리더 구성
| 매개변수 | 기본값 | 설명 |
|---|---|---|
port | - | CAN 인터페이스 (예: can1) |
manual_control | True | 수동 이동 시 토크 비활성화 |
use_can_fd | True | 높은 데이터 전송률을 위해 CAN FD 활성화 |
can_bitrate | 1000000 | 명목 비트레이트(1 Mbps) |
can_data_bitrate | 5000000 | CAN FD 데이터 비트레이트 (5 Mbps) |
모터 구성
OpenArm은 다음 기본 구성을 가진 Damiao 모터를 사용합니다:
| Joint | 모터 유형 | ID 보내기 | Recv ID |
|---|---|---|---|
| joint_1 (어깨 회전) | DM8009 | 0x01 | 0x11 |
| joint_2 (어깨 들어올리기) | DM8009 | 0x02 | 0x12 |
| joint_3 (어깨 회전) | DM4340 | 0x03 | 0x13 |
| joint_4 (팔꿈치 굽힘) | DM4340 | 0x04 | 0x14 |
| joint_5 (손목 롤) | DM4310 | 0x05 | 0x15 |
| joint_6 (손목 피치) | DM4310 | 0x06 | 0x16 |
| joint_7 (손목 회전) | DM4310 | 0x07 | 0x17 |
| gripper | DM4310 | 0x08 | 0x18 |
문제 해결
모터에서 응답 없음
- 전원 공급 장치 연결 확인
- Verify CAN wiring (CAN-H, CAN-L, GND)
- 진단 실행:
lerobot-setup-can --mode=test --interfaces=can0 - 자세한 내용은 Damiao 문제 해결 가이드를 참조하세요.
CAN 인터페이스를 찾을 수 없음
CAN 인터페이스가 구성되었는지 확인하세요:
ip link show can0