OpenArm 101 설정 가이드
개봉부터 첫 번째 AI 훈련 모션까지 이 경로를 따르세요. 총 4~5시간 정도 소요됩니다.
개봉 및 안전 점검
⏱ ~30분시작하기 전에
- 안정된 표면에 1m × 1m의 깨끗한 작업 공간이 있는지 확인하십시오.
- Ubuntu 22.04가 준비된 노트북 보유(VM 작동, 기본 선호)
- 팔에 힘을 유지하세요 끄다 아래 신체검사 중
상자에
검사 체크리스트
- 8개 관절 모두 자유롭게 회전(연삭이나 저항 없음)
- 케이블 라우팅은 암 본체를 따라 그대로 유지됩니다.
- 전원 커넥터가 손상되지 않았습니다.
- 비상 정지가 가능하고 기능적입니다.
- 팔에 전원이 공급되는 동안에는 절대로 작업 공간에 접근하지 마십시오.
- 케이블을 조정하거나 하드웨어를 변경하기 전에 항상 전원을 끄십시오.
- 작동 중에는 어린이와 애완동물을 멀리 두십시오.
- 처음 작동하기 전에 베이스를 안정된 표면에 고정하세요.
소프트웨어 환경 및 CAN 구성
⏱ ~60분시스템 요구 사항
- Ubuntu 22.04 LTS(권장) 또는 20.04
- 파이썬 3.10+
- ROS2 험블
- USB-CAN 어댑터(CAN 가능 또는 호환 가능 - 전체 5Mbit/s 데이터 속도를 위해 CAN FD를 지원해야 함)
2a단계 - 모터 ID 구성
소프트웨어를 설정하기 전에 각 Damiao 모터에 CAN ID를 할당해야 합니다. 이는 Damiao USB CAN 디버거를 사용하여 Windows에서 수행되는 일회성 단계입니다.
각 관절(J1–J8)에 대한 표준 ID 할당으로 아래 표를 사용하십시오.
| 관절 | 송신기 ID | 수신자 ID |
|---|---|---|
| J1 | 0x01 | 0x11 |
| J2 | 0x02 | 0x12 |
| J3 | 0x03 | 0x13 |
| J4 | 0x04 | 0x14 |
| J5 | 0x05 | 0x15 |
| J6 | 0x06 | 0x16 |
| J7 | 0x07 | 0x17 |
| J8 | 0x08 | 0x18 |
2b단계 - OpenArm 패키지 설치
Ubuntu 시스템에서 공식 OpenArm PPA의 모든 필수 패키지를 설치합니다.
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y \
can-utils \
iproute2 \
libeigen3-dev \
libopenarm-can-dev \
liborocos-kdl-dev \
liburdfdom-dev \
liburdfdom-headers-dev \
libyaml-cpp-dev \
openarm-can-utils
2c단계 - CAN 인터페이스(CAN FD) 설정
OpenArm 모터는 CAN 2.0과 CAN FD를 모두 지원합니다. CAN FD를 권장합니다 — 데이터 단계를 5Mbit/s로 실행하고 전체 Damiao 모터 대역폭에 필요한 최대 64바이트 페이로드를 지원합니다.
| 방법 | 공칭 보드 | 데이터 보드 | 유효 탑재량 |
|---|---|---|---|
| 캔 2.0 | 1메가비트/초 | — | 8바이트 |
| 캔 FD | 1메가비트/초 | 5메가비트/초 | 최대 64바이트 |
권장 사항 - OpenArm 도우미를 사용하세요.
# CAN FD, 1M nominal / 5M data (recommended for single arm)
openarm-can-configure-socketcan can0 -fd -b 1000000 -d 5000000
# CAN 2.0 fallback (1M baud, no FD)
openarm-can-configure-socketcan can0
# 4-arm bimanual setup (can0–can3)
openarm-can-configure-socketcan-4-arms -fd
# Verify the interface is UP
ip link show can0
수동 IP 링크 명령(도우미를 사용하지 않는 경우):
# CAN 2.0
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up
# CAN FD — 1M nominal / 5M data
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up
can0. 이중 수동 설정은 다음을 사용합니다. can0 (오른쪽 지시선) + can1 (왼쪽 리더) + can2 (오른쪽 추종자) + can3 (왼쪽 추종자).
2d단계 - 모터 제어 명령 및 디버깅
이것을 사용하세요 cansend 낮은 수준의 디버깅을 위한 명령입니다. 명령을 보내기 전에 먼저 버스를 모니터링하십시오.
# Monitor all CAN frames
candump -x can0
# Change motor baudrate (replace 1 with target motor CAN ID)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0
# Persist across power cycles (max ~10,000 flash writes per motor — use sparingly)
openarm-can-change-baudrate --baudrate 5000000 --canid 1 --socketcan can0 --flash
CAN 2.0 모터 제어 - 바꾸다 001 위 표의 타겟 조인트의 송신기 ID로:
# Clear motor error
cansend can0 001#FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001#FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001#FFFFFFFFFFFFFFFD
CAN FD 모터 제어 — 추가 사항에 유의하십시오 #1 ~ 후에 ## (BRS 플래그):
# Clear motor error
cansend can0 001##1FFFFFFFFFFFFFFFB
# Enable motor
cansend can0 001##1FFFFFFFFFFFFFFFC
# Disable motor
cansend can0 001##1FFFFFFFFFFFFFFFD
--flash 플래그는 전송 속도 변경을 지속합니다. 각 모터는 최대 ~10,000 플래시 쓰기 주기를 지원합니다.
모터 LED 상태
각 Damiao 모터에는 현재 상태를 나타내는 온보드 LED가 있습니다. 전원을 켠 후 빠른 상태 점검으로 이를 사용하십시오.
| LED 패턴 | 의미 |
|---|---|
| 녹색(지속) | 모터 활성화 및 준비 |
| 빨간색(지속) | 모터 비활성화 |
| 빨간색(깜박임) | 모터 오류 상태 - 다시 활성화하기 전에 Clear Error 명령을 보냅니다. |
2e단계 - ROS2 패키지 설치
sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers
git clone https://github.com/enactic/openarm_ros2
cd openarm_ros2 && colcon build
Python SDK 설치
pip install roboticscenter
python -c "import roboticscenter; print('SDK ready')"
첫 번째 모션
⏱ ~30분가짜 하드웨어로 시작(안전 - 물리적 움직임 없음)
실제 팔을 움직이기 전에 항상 시뮬레이션에서 확인하십시오. 다음을 사용하여 시작 파일을 실행하십시오. use_fake_hardware:=true — CAN 연결이 필요하지 않습니다.
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=true
ros2 run openarm_ros2 test_trajectory
RViz를 열어 시뮬레이션된 팔이 테스트 궤적을 통해 올바르게 움직이는지 확인합니다. 8개 관절 모두 부드럽게 애니메이션되어야 합니다.
실제 하드웨어로 전환
시뮬레이션이 올바르게 보이면 CAN 어댑터를 연결하고 암의 전원을 켜십시오.
ros2 launch openarm_ros2 openarm.launch.py
첫 번째 모션 명령 보내기(홈 위치)
ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory "{...}"
교정 및 원점 복귀
⏱ ~45분정확한 제어를 위해서는 조인트 제로 위치가 물리적 현실과 일치해야 합니다. 잘못 보정된 조인트로 인해 다운스트림 정책 실패가 발생합니다. 이 단계를 건너뛰지 마십시오.
원점 복귀 절차
- 팔이 안전한 위치에 있는 상태에서 전원을 켭니다(대체로 뻗어 장애물에서 멀리 떨어져 있음).
- 호밍 스크립트를 실행합니다:
ros2 run openarm_ros2 homing - 스크립트는 각 관절을 하드 스톱으로 수동으로 안내하라는 메시지를 표시합니다. 천천히 움직입니다.
- 메시지가 표시되면 각 관절에 대해 0 위치가 저장되었는지 확인하세요.
교정 확인
ros2 topic echo /joint_states # check all positions read near zero
원격조작
⏱ ~60분통신사 장치를 선택하세요
우지핸드
손재주와 미세한 조작 작업에 가장 적합
VR 컨트롤러
Meta Quest / Steam VR — 공간 작업에 적합
키보드/게임패드
기본 테스트 및 대략적인 위치 지정용
운영자 장치 연결
ros2 launch openarm_ros2 teleop.launch.py operator:=wuji_hand
지연 시간 확인
대상 종단 간 대기 시간은 50ms 미만입니다. 대기 시간 테스트를 실행하고 다음을 확인합니다.
ros2 run openarm_ros2 latency_check
데이터 수집
⏱ 진행 중데이터 형식 선택
- 르로봇 (권장) — 모방 학습 및 모델 훈련을 위해 특별히 제작되었습니다.
- RLDS — Open-X-Embodiment 및 교차 로봇 데이터 세트와 호환 가능
녹음 시작
ros2 launch openarm_ros2 record.launch.py \
output_format:=lerobot \
task_name:=pick_and_place \
episode_id:=0
각 에피소드는 관절 상태, 카메라 프레임 및 동작 레이블이 포함된 독립형 파일로 저장됩니다. 여러 에피소드를 실행한 다음 SVRC 플랫폼을 사용하여 검토하고 필터링하세요.
에피소드 품질 체크리스트
- 카메라 피드가 동기화됩니다(5ms 이내의 타임스탬프).
- ≥ 50Hz에서 기록된 관절 상태
- 작업 라벨이 시연된 동작과 일치합니다.
- 실패한 에피소드는 삭제되지 않고 제외 표시됩니다.
is_failure:=true — 플랫폼은 이를 대조 학습 또는 필터링에 사용할 수 있습니다.
AI 모델 훈련 및 배포
⏱ 진행 중OpenArm에 권장되는 모델
- ACT(액션 청킹 트랜스포머) — 픽 앤 플레이스에 가장 적합합니다. 카메라 관찰을 통해 액션 청크를 예측합니다.
- 확산정책 — 접촉이 많은 작업에 가장 적합합니다. 노이즈 제거를 통해 부드러운 궤적을 생성합니다.
- 오픈VLA — 언어 조건 작업에 가장 적합합니다. 시각 언어 이해와 로봇 행동을 결합합니다.
데이터에 대한 ACT 미세 조정
pip install lerobot
python train.py --config act_openarm --data-path ./recordings/
소비자 GPU(RTX 3090 이상)에서의 훈련은 일반적으로 50개 에피소드에 대해 2~4시간이 걸립니다. 사용 --resume 체크포인트에서 계속하도록 플래그를 지정합니다.
엣지에 배포
ros2 launch openarm_ros2 inference.launch.py \
model_path:=./checkpoints/best.pt
추론 노드는 카메라 프레임을 읽고, 모델을 실행하고, 제어 빈도에 따라 공동 명령을 게시합니다. 실시간 제어를 위한 대상 추론 지연 시간은 20ms 미만입니다.
전체 설정 경로를 완료했습니다!
OpenArm은 보정되고, 원격 조작되고, 데이터가 수집되고, AI를 실행합니다. 당신이 구축한 것을 커뮤니티와 공유하세요.