rss2.pub

PyTorchKR - 최신 글

@discuss_pytorch_kr_lat_3994y78@beta.rss2.pub

OpenArm: 원격 조작부터 학습 정책 평가까지 공개한 오픈소스 양팔 로봇

OpenArm 소개

로봇 팔로 조작 데이터를 모으는 연구는 팔을 손에 넣었다고 시작되지 않습니다. 사람이 어떤 장치로 팔을 조종해 시연을 만들지, 그 기록을 관절 각도와 영상까지 어떤 형식으로 남길지, 학습시킨 정책이 실제로 동작하는지를 어디에서 확인할지가 연구실마다 다르기 때문입니다. 조명과 카메라 위치가 다른 책상에서 모은 시연으로 학습한 정책은 다른 팀이 같은 조건에서 다시 돌려볼 수 없고, 논문의 성공률은 비교할 대상을 잃습니다. 이번에 소개하는 OpenArm은 그 간극을 메우려고 팔의 CAD 도면부터 데이터 기록 형식과 정책 평가 서비스까지를 한 조직이 묶어서 공개한 7자유도 양팔 로봇 프로젝트입니다.

OpenArm이 내세우는 차별점은 팔의 사양보다 공개 범위에 있습니다. 로봇 팔의 설계도를 공개한 프로젝트는 이미 여럿 있지만, OpenArm은 그 위에 조명과 카메라 배치를 통일한 실험 부스인 OpenArm Cell, 에피소드 기록 형식을 정의한 데이터셋 라이브러리, 그리고 학습한 정책을 제출하면 실제 장비나 시뮬레이션에서 실행해 순위를 매기는 평가 서비스까지 더했습니다. 공식 홈페이지가 프로젝트를 한 줄로 요약한 문구도 "Making SOTA reproducible." 로, 팔 자체보다 재현 가능성을 앞세우고 있습니다.

OpenArm을 만든 곳은 도쿄에 자리 잡은 로보틱스 기업 Enactic입니다. Enactic은 2025년 7월에 설립돼 일손이 부족한 일본의 돌봄 시설에 투입할 휴머노이드 로봇 Ena를 개발하고 있고, OpenArm은 그 자율 동작 스택의 바탕이 되는 연구를 오픈소스로 떼어 놓은 결과물입니다. 상용 제품인 Ena는 공개되지 않지만 OpenArm 쪽 저장소는 누구나 받아서 쓸 수 있고, 현재 enactic 조직에 51개 저장소가 올라와 있습니다.

OpenArm과 기존 저비용 로봇 팔의 차이

조작 데이터 수집에 쓰이는 오픈소스 팔 중 가장 널리 퍼진 것은 Hugging Face의 LeRobot 생태계에서 쓰는 SO-101입니다. 두 프로젝트는 같은 문제를 다루지만 겨냥하는 쓰임새가 다르고, 그 차이는 대부분 가격에서 갈립니다:

항목 OpenArm 2.0 SO-101 확보 방식 인증과 미인증 제조사 10곳에서 조립 완제품 구매, 또는 CAD로 직접 제작 3D 프린팅 부품과 서보를 직접 조립, 또는 키트 구매 비용 제조사별 4,699~7,080달러(팔로워 엔드이펙터 포함 1대 기준) 리더와 팔로워 2대 부품 합계 229.88달러(미국 기준) 구동기 Damiao 모터, 1kHz CAN-FD 제어 Feetech STS3215 서보 힘 피드백 리더와 팔로워 사이 양방향 힘 피드백 지원 README에 기재 없음 가반하중 정격 4.1kg, 피크 6.0kg(엔드이펙터 무게 포함) 수치 없이 서보 스톨 토크만 기재 하드웨어 라이선스 CERN-OHL-S-2.0 Apache-2.0

완제품 가격과 부품 합계라는 서로 다른 기준이긴 하지만 두 값은 자릿수가 다르고, 그 차이를 만드는 것이 토크 제어가 가능한 구동기와 그 위에 얹힌 양방향 힘 피드백입니다. 서보 기반 팔은 위치 명령을 따라가는 데는 충분하지만 조작자가 접촉하는 힘을 되돌려 받지 못하므로, 물건을 쥐거나 표면을 훑는 접촉이 많은 작업에서는 시연 중에 과도한 힘이 들어가기 쉽습니다. OpenArm은 그 구간을 겨냥한 장비이고, 반대로 자유 공간에서 물건을 집어 옮기는 시연을 값싸게 많이 모으는 목적이라면 이 비용 차이를 정당화하기 어렵습니다.

가격 표기는 자료마다 기준이 다르다는 점도 알아 둘 만합니다. README는 완전한 양팔 시스템을 6,500달러로 적고 공식 홈페이지는 같은 금액을 부품 비용(Bill of Materials Cost)으로 표시하므로, 실제 지출을 가늠할 때는 제조사별 판매가가 정리된 구매 문서를 기준으로 삼는 편이 낫습니다. 참고로 OpenArm Cell은 6,200달러부터, OpenArm KER은 2,599달러부터로 팔과 따로 값이 매겨져 있습니다.

두 프로젝트를 고를 때 갈아타는 비용이 걱정된다면, 소프트웨어 쪽은 생각보다 가깝습니다. OpenArm의 공식 학습 튜토리얼이 수집한 데이터를 LeRobot 데이터셋 형식으로 변환한 뒤 LeRobot 정책을 학습시키는 경로를 정본으로 삼고 있어서, 학습 코드와 도구 사슬은 SO-101 쪽과 그대로 겹칩니다. 인증 제조사인 WowRobo가 SO-101 키트도 함께 판매한다는 점까지 더하면, 두 프로젝트는 경쟁 관계라기보다 같은 생태계 안에서 다른 가격대를 맡고 있습니다.

OpenArm을 사용하면 좋을 사용자

접촉이 많은 조작 작업의 시연 데이터를 직접 모아야 하고, 조작자가 힘을 느끼면서 시연해야 품질이 확보되는 연구팀에게 OpenArm이 잘 맞습니다. 팔에 더해 표준 실험 환경과 기록 형식이 함께 제공되므로, 데이터 수집 파이프라인을 처음부터 설계하는 비용을 줄일 수 있습니다. 시뮬레이션만으로 정책을 학습하다가 실제 장비로 넘어가려는 팀에게도 MuJoCo와 Isaac Lab 환경이 같은 로봇 기술 파일을 공유한다는 점이 이점입니다. 장비 구매를 결정하기 전에 공개된 시뮬레이션 데이터셋과 학습 모델로 수집부터 추론까지의 흐름을 먼저 돌려볼 수 있다는 점도 검토 비용을 크게 낮춥니다.

반대로 조작 알고리즘보다 학습 코드 자체를 검증하는 것이 목적이거나 팔을 여러 대 두고 시연 수를 늘리는 것이 우선인 팀에게는 OpenArm이 아직 적절한 선택지가 아닙니다. 완제품 1대에 수천 달러가 들고, 하드웨어에 적용된 CERN-OHL-S-2.0은 설계를 고쳐 배포할 때 같은 조건으로 공개할 의무를 지우므로 사내 개조판을 비공개로 유지하려는 조직에는 제약이 됩니다. 국내에서 바로 구할 수 있는 판매처가 목록에 없어 해외 주문과 통관을 감수해야 한다는 점도 도입 전에 따져야 합니다.

OpenArm의 하드웨어 사양과 가반하중 정의

OpenArm 2.0의 팔 하나는 7자유도이고, 공식 홈페이지가 공개한 수치로는 도달 거리 633mm, 팔 하나 무게 5.5kg, 모터와 주고받는 통신 규격인 CAN-FD 기준 제어 주기 1kHz입니다. 사람 크기에 맞춘 비례와 기계적인 관절 가동 범위 제한을 두어 사람과 같은 공간에서 쓰는 것을 전제로 설계됐고, 지지 기둥은 MiSUMi 알루미늄 프레임이라 치수를 바꾸거나 카메라와 센서를 덧붙이기 쉽습니다.

가반하중은 수치보다 정의를 먼저 읽어야 하는 항목입니다. 프로젝트는 하드웨어 문서에서 두 값을 각각 이렇게 규정합니다:

  • 정격 가반하중 4.1kg: 팔을 최대로 뻗은 가장 불리한 자세에서 1분 동안 버틸 수 있는 무게
  • 피크 가반하중 6.0kg: 팔을 내린 자세에서 가장 불리한 자세까지 3초에 걸쳐 옮겨 1초 동안 버틴 뒤 되돌아오는 무게

프로젝트는 이 값에 엔드이펙터 무게가 포함된다는 단서를 함께 붙여 두었습니다. 1.5kg짜리 엔드이펙터를 달면 실제로 다룰 수 있는 물체는 정격 2.6kg, 피크 4.5kg으로 줄어듭니다. 카탈로그의 숫자만 보고 작업 대상의 무게를 맞추면 실제 여유가 이만큼 달라집니다.

OpenArm의 단방향 제어와 양방향 힘 피드백

OpenArm은 리더 암의 움직임을 팔로워 암이 1:1로 따라가는 원격 조작을 두 가지 제어 방식으로 지원합니다. 단방향 제어(unilateral control)는 리더가 보낸 위치 명령을 팔로워가 그대로 따르는 한 방향 구성이라 단순하고 안정적이지만, 조작자에게 촉각이 돌아오지 않아 접촉 중에 힘이 과하게 들어가거나 정렬이 어긋나기 쉽습니다. 프로젝트는 이 방식을 자유 공간에서의 조작과 초기 시험에 적합한 기본 구성으로 안내합니다.

양방향 제어(bilateral control)는 리더와 팔로워 사이에 힘을 양쪽으로 주고받아 조작자가 팔로워가 닿은 대상을 느끼게 합니다. 아래 그림은 원격 조작 문서에 실린 4채널 양방향 제어 블록도로, 리더와 팔로워의 가속도 제어 출력이 힘 제어(Force Control)와 위치 제어(Position Control) 두 갈래로 합쳐지고 그 결과가 다시 양쪽으로 되먹임되는 구조를 보여줍니다:

리더 암 쪽에는 조작자의 피로를 줄이려는 별도 장치도 있습니다. OpenArm KER(Kinematic Equivalent Replica)은 모터가 없는 어깨 장착형 리더 암으로, 모든 축에 자기 엔코더와 베어링, 하드웨어 리밋, 드라이버를 한 몸에 넣은 공통 모듈을 쓰고 이 모듈들을 데이지 체인으로 연결해 배선을 줄였습니다. 관절 구조를 OpenArm 2.0과 똑같이 맞추고 링크 길이만 70%로 줄여 두어, 좌표 변환이나 리타게팅(retargeting) 없이 1:1로 동작이 옮겨집니다. 탄소섬유 강화 플라스틱(CFRP) 파이프와 가공 알루미늄, 수지를 섞어 본체를 1.7kg으로 맞췄고, 배낭처럼 어깨에 메는 구조라 도움 없이 30초 안에 착용할 수 있으며 배낭부를 접으면 일반 여행 가방에 들어갑니다.

다만 KER의 출시 상태는 문서마다 다르게 적혀 있습니다. 하드웨어 문서에는 3D CAD와 부품표 드라이브 링크가 이미 올라와 있고 제조사들도 2,599달러부터 판매 중이지만, 2.0 변경점 문서에는 아직 미출시이며 CAD와 부품표는 준비되는 대로 공개한다고 적혀 있습니다. 구매를 검토한다면 이 점을 판매처에 먼저 확인하는 편이 안전합니다.

OpenArm의 소프트웨어 계층 구성

OpenArm 저장소의 README에 실린 표는 9개 저장소를 소개하지만, enactic 조직에는 51개가 올라와 있습니다. 그중 29개가 dora- 로 시작하는 dora-rs 데이터 흐름 노드입니다. 아래 그림은 이 저장소들을 역할에 따라 다섯 계층으로 정리한 것입니다:

각 계층의 진입점은 다음과 같습니다.

openarm_driver의 안전 검사가 이 스택의 성격을 잘 보여줍니다. 명령을 보낼 때 관절 위치 한계로 값을 자르는 JointPosChecker, 한 번에 너무 크게 움직이는 명령을 거부하는 JointDeltaPosChecker, 경과 시간을 재서 속도를 제한하는 JointVelocityChecker가 이 순서로 걸립니다. 연구용 코드가 아니라 사람 옆에서 실제로 움직이는 장비를 전제로 한 설계입니다.

OpenArm Dataset의 기록 형식과 표현 변환

조작 데이터를 다루는 입장에서 가장 눈여겨볼 부분은 openarm_dataset입니다. 에피소드마다 관절 위치(qpos), 속도(qvel), 토크(qtorque)와 여러 대의 카메라 프레임을 기록하고, 관측과 행동을 각각 불러오는 API를 제공합니다.

설계에서 흥미로운 점은 저장과 표현을 분리한 것입니다. 데이터셋은 기록 당시의 원시 표현만 저장하고, 필요한 표현은 불러올 때 변환합니다. state= 인자로 요청한 표현이 기록된 것과 다르면 openarm_control의 기구학이 붙어 관절 각도를 순기구학으로 말단 자세(pose)로 바꾸거나, 말단 자세를 역기구학으로 관절 각도로 되돌립니다. 역기구학 변환은 에피소드에 기록된 관측 관절값을 초기값으로 삼아 자세 궤적을 따라가며 풀고, 해가 수렴하지 않은 샘플은 경고로 보고합니다. 회전을 6차원으로 표현하는 rot6d도 같은 경로로 유도됩니다.

카메라 프레임 저장 방식에도 실전에서 나온 판단이 들어가 있습니다. 프레임을 타임스탬프별 JPEG 파일로 두거나 에피소드마다 하나의 tar 아카이브로 묶을 수 있는데, 묶는 쪽은 Hugging Face Hub의 저장소 권장 사항에 맞춰 파일 개수를 줄이기 위한 선택입니다. 두 방식 모두 같은 API로 읽히므로 데이터를 허브에 올려 공유할 때 코드를 고칠 일이 없습니다.

OpenArm 데이터를 LeRobot으로 학습시키는 경로

수집한 데이터를 어떻게 학습에 넣는지가 이 스택에서 가장 실용적인 부분입니다. OpenArm은 자체 형식을 고집하지 않고 LeRobot 데이터셋 형식으로 변환하는 명령을 제공합니다:

git clone https://github.com/enactic/openarm_dataset.git
cd openarm_dataset
uv sync
uv run openarm-dataset-convert path/to/collected_dataset_path path/to/output_path --format lerobot_v3.0

--format lerobot_v2.1 을 주면 구버전 형식으로도 변환됩니다. 변환 뒤에는 LeRobot의 학습 명령을 그대로 씁니다. 공식 튜토리얼은 LeRobot 0.6.1에서 ACT(Action Chunking with Transformers) 정책을 학습시키는 예시를 싣고 있습니다:

lerobot-train \
  --dataset.repo_id=enactic/openarm-2-cell-pick_up_cube_mujoco-lerobot \
  --policy.type=act \
  --output_dir=outputs/train \
  --policy.device=cuda \
  --num_workers=8 \
  --steps=10000

여기서 중요한 것은 로봇 없이도 이 경로를 끝까지 따라가 볼 수 있다는 점입니다. 학습에 쓰는 데이터셋과 학습을 마친 모델이 모두 Hugging Face Hub에 공개돼 있기 때문입니다.

  • enactic/openarm-2-cell-pick_up_cube_mujoco-lerobot: MuJoCo 시뮬레이션 안의 Cell에서 가상현실(VR) 원격 조작으로 기록한 큐브 집기 시연입니다. 에피소드 30개에 30fps로 5,405프레임이고, 천장/머리 좌우/손목 좌우 카메라 5대와 16차원 상태와 행동이 들어 있습니다. 16차원은 오른팔 7축과 그리퍼 1축, 왼팔 7축과 그리퍼 1축입니다.
  • enactic/act-openarm-2-cell-pick_up_cube_mujoco: 위 데이터로 학습한 ACT 정책입니다. 비전 백본은 ImageNet 사전학습 ResNet-18이고, 행동 청크 길이 100, 트랜스포머는 512차원에 헤드 8개, 인코더 4층과 디코더 1층 구성입니다.

학습한 정책을 로봇에 붙이는 지점도 계약으로 정해져 있습니다. 정책은 정책 서버(policy server) 프로세스로 뜨고, dora 노드가 유닉스 소켓으로 관측을 넘기면 행동을 돌려주는 방식입니다. 관측은 카메라 프레임과 관절 위치를 담은 Arrow IPC 형식 파일로 오고, 응답은 16차원 관절 위치의 시퀀스를 담은 JSON입니다. 응답에는 스텝 간격(interval)과 저역 통과 필터 차단 주파수(cutoff_hz)를 같이 실어 동작의 부드러움을 조절합니다. 다른 모델을 붙이고 싶다면 이 계약만 맞추면 되고, 모델 코드는 dora 노드가 실행하는 프로세스 안에 그대로 두면 됩니다.

OpenArm Online의 정책 평가와 리더보드

OpenArm Online은 정책을 담은 Docker 이미지를 등록하면 실제 장비나 시뮬레이션에 연결된 실행기가 그것을 받아 과제를 수행시키고 결과를 돌려주는 평가 서비스입니다. GitHub 계정으로 로그인해 과제를 고르고 제출하는 흐름이며, 서버 설정에 따라 제출 권한을 특정 계정이나 조직으로 제한할 수 있습니다. 각 평가 실행은 Rerun 기록으로 남아 브라우저에서 되돌려 볼 수 있고, 과제별 리더보드가 제출물의 순위를 매깁니다. 시뮬레이션 과제에는 브라우저에서 WebRTC로 직접 조작하는 경로도 제공되어 키보드나 WebXR을 지원하는 헤드셋으로 움직여 볼 수 있습니다. 실제 장비를 쓰는 Cell 과제에는 이 조작 링크가 없습니다.

다만 도입을 검토하는 입장이라면 현재 상태를 함께 봐야 합니다. 등록된 과제는 시뮬레이션 환경의 Pick and place (MuJoCo)와 실제 장비를 쓰는 Pick and place (Cell) 두 가지이고, 각각 2026년 8월에 만들어졌습니다. 두 과제 모두 제출물과 실행 기록이 아직 없어 리더보드는 비어 있습니다. 평가 기반은 열려 있지만 비교 대상이 쌓이기 전이므로, 지금 시점에 OpenArm Online을 다른 팀과 성능을 견주는 용도로 기대하기에는 이릅니다.

OpenArm 설치와 사용

제어 스택은 SocketCAN을 지원하는 리눅스와 CAN 인터페이스 하드웨어를 전제로 하며, macOS와 윈도우용 안내는 없습니다. 모터와 통신하는 CAN 라이브러리는 우분투(Ubuntu) 22.04/24.04/26.04와 레드햇 계열 배포판에 패키지로 올라와 있고, 우분투에서는 저장소를 추가한 뒤 설치합니다:

sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y libopenarm-can-dev openarm-can-utils

설치 후에는 CAN 인터페이스를 설정하고 버스에 붙은 모터를 확인합니다:

# CAN-FD, 데이터 구간 5Mbps
openarm-can-configure-socketcan can0 -fd

OpenArm: 원격 조작부터 학습 정책 평가까지 공개한 오픈소스 양팔 로봇

OpenArm 소개

로봇 팔로 조작 데이터를 모으는 연구는 팔을 손에 넣었다고 시작되지 않습니다. 사람이 어떤 장치로 팔을 조종해 시연을 만들지, 그 기록을 관절 각도와 영상까지 어떤 형식으로 남길지, 학습시킨 정책이 실제로 동작하는지를 어디에서 확인할지가 연구실마다 다르기 때문입니다. 조명과 카메라 위치가 다른 책상에서 모은 시연으로 학습한 정책은 다른 팀이 같은 조건에서 다시 돌려볼 수 없고, 논문의 성공률은 비교할 대상을 잃습니다. 이번에 소개하는 OpenArm은 그 간극을 메우려고 팔의 CAD 도면부터 데이터 기록 형식과 정책 평가 서비스까지를 한 조직이 묶어서 공개한 7자유도 양팔 로봇 프로젝트입니다.

OpenArm이 내세우는 차별점은 팔의 사양보다 공개 범위에 있습니다. 로봇 팔의 설계도를 공개한 프로젝트는 이미 여럿 있지만, OpenArm은 그 위에 조명과 카메라 배치를 통일한 실험 부스인 OpenArm Cell, 에피소드 기록 형식을 정의한 데이터셋 라이브러리, 그리고 학습한 정책을 제출하면 실제 장비나 시뮬레이션에서 실행해 순위를 매기는 평가 서비스까지 더했습니다. 공식 홈페이지가 프로젝트를 한 줄로 요약한 문구도 "Making SOTA reproducible." 로, 팔 자체보다 재현 가능성을 앞세우고 있습니다.

OpenArm을 만든 곳은 도쿄에 자리 잡은 로보틱스 기업 Enactic입니다. Enactic은 2025년 7월에 설립돼 일손이 부족한 일본의 돌봄 시설에 투입할 휴머노이드 로봇 Ena를 개발하고 있고, OpenArm은 그 자율 동작 스택의 바탕이 되는 연구를 오픈소스로 떼어 놓은 결과물입니다. 상용 제품인 Ena는 공개되지 않지만 OpenArm 쪽 저장소는 누구나 받아서 쓸 수 있고, 현재 enactic 조직에 51개 저장소가 올라와 있습니다.

OpenArm과 기존 저비용 로봇 팔의 차이

조작 데이터 수집에 쓰이는 오픈소스 팔 중 가장 널리 퍼진 것은 Hugging Face의 LeRobot 생태계에서 쓰는 SO-101입니다. 두 프로젝트는 같은 문제를 다루지만 겨냥하는 쓰임새가 다르고, 그 차이는 대부분 가격에서 갈립니다:

항목 OpenArm 2.0 SO-101 확보 방식 인증과 미인증 제조사 10곳에서 조립 완제품 구매, 또는 CAD로 직접 제작 3D 프린팅 부품과 서보를 직접 조립, 또는 키트 구매 비용 제조사별 4,699~7,080달러(팔로워 엔드이펙터 포함 1대 기준) 리더와 팔로워 2대 부품 합계 229.88달러(미국 기준) 구동기 Damiao 모터, 1kHz CAN-FD 제어 Feetech STS3215 서보 힘 피드백 리더와 팔로워 사이 양방향 힘 피드백 지원 README에 기재 없음 가반하중 정격 4.1kg, 피크 6.0kg(엔드이펙터 무게 포함) 수치 없이 서보 스톨 토크만 기재 하드웨어 라이선스 CERN-OHL-S-2.0 Apache-2.0

완제품 가격과 부품 합계라는 서로 다른 기준이긴 하지만 두 값은 자릿수가 다르고, 그 차이를 만드는 것이 토크 제어가 가능한 구동기와 그 위에 얹힌 양방향 힘 피드백입니다. 서보 기반 팔은 위치 명령을 따라가는 데는 충분하지만 조작자가 접촉하는 힘을 되돌려 받지 못하므로, 물건을 쥐거나 표면을 훑는 접촉이 많은 작업에서는 시연 중에 과도한 힘이 들어가기 쉽습니다. OpenArm은 그 구간을 겨냥한 장비이고, 반대로 자유 공간에서 물건을 집어 옮기는 시연을 값싸게 많이 모으는 목적이라면 이 비용 차이를 정당화하기 어렵습니다.

가격 표기는 자료마다 기준이 다르다는 점도 알아 둘 만합니다. README는 완전한 양팔 시스템을 6,500달러로 적고 공식 홈페이지는 같은 금액을 부품 비용(Bill of Materials Cost)으로 표시하므로, 실제 지출을 가늠할 때는 제조사별 판매가가 정리된 구매 문서를 기준으로 삼는 편이 낫습니다. 참고로 OpenArm Cell은 6,200달러부터, OpenArm KER은 2,599달러부터로 팔과 따로 값이 매겨져 있습니다.

두 프로젝트를 고를 때 갈아타는 비용이 걱정된다면, 소프트웨어 쪽은 생각보다 가깝습니다. OpenArm의 공식 학습 튜토리얼이 수집한 데이터를 LeRobot 데이터셋 형식으로 변환한 뒤 LeRobot 정책을 학습시키는 경로를 정본으로 삼고 있어서, 학습 코드와 도구 사슬은 SO-101 쪽과 그대로 겹칩니다. 인증 제조사인 WowRobo가 SO-101 키트도 함께 판매한다는 점까지 더하면, 두 프로젝트는 경쟁 관계라기보다 같은 생태계 안에서 다른 가격대를 맡고 있습니다.

OpenArm을 사용하면 좋을 사용자

접촉이 많은 조작 작업의 시연 데이터를 직접 모아야 하고, 조작자가 힘을 느끼면서 시연해야 품질이 확보되는 연구팀에게 OpenArm이 잘 맞습니다. 팔에 더해 표준 실험 환경과 기록 형식이 함께 제공되므로, 데이터 수집 파이프라인을 처음부터 설계하는 비용을 줄일 수 있습니다. 시뮬레이션만으로 정책을 학습하다가 실제 장비로 넘어가려는 팀에게도 MuJoCo와 Isaac Lab 환경이 같은 로봇 기술 파일을 공유한다는 점이 이점입니다. 장비 구매를 결정하기 전에 공개된 시뮬레이션 데이터셋과 학습 모델로 수집부터 추론까지의 흐름을 먼저 돌려볼 수 있다는 점도 검토 비용을 크게 낮춥니다.

반대로 조작 알고리즘보다 학습 코드 자체를 검증하는 것이 목적이거나 팔을 여러 대 두고 시연 수를 늘리는 것이 우선인 팀에게는 OpenArm이 아직 적절한 선택지가 아닙니다. 완제품 1대에 수천 달러가 들고, 하드웨어에 적용된 CERN-OHL-S-2.0은 설계를 고쳐 배포할 때 같은 조건으로 공개할 의무를 지우므로 사내 개조판을 비공개로 유지하려는 조직에는 제약이 됩니다. 국내에서 바로 구할 수 있는 판매처가 목록에 없어 해외 주문과 통관을 감수해야 한다는 점도 도입 전에 따져야 합니다.

OpenArm의 하드웨어 사양과 가반하중 정의

OpenArm 2.0의 팔 하나는 7자유도이고, 공식 홈페이지가 공개한 수치로는 도달 거리 633mm, 팔 하나 무게 5.5kg, 모터와 주고받는 통신 규격인 CAN-FD 기준 제어 주기 1kHz입니다. 사람 크기에 맞춘 비례와 기계적인 관절 가동 범위 제한을 두어 사람과 같은 공간에서 쓰는 것을 전제로 설계됐고, 지지 기둥은 MiSUMi 알루미늄 프레임이라 치수를 바꾸거나 카메라와 센서를 덧붙이기 쉽습니다.

가반하중은 수치보다 정의를 먼저 읽어야 하는 항목입니다. 프로젝트는 하드웨어 문서에서 두 값을 각각 이렇게 규정합니다:

  • 정격 가반하중 4.1kg: 팔을 최대로 뻗은 가장 불리한 자세에서 1분 동안 버틸 수 있는 무게
  • 피크 가반하중 6.0kg: 팔을 내린 자세에서 가장 불리한 자세까지 3초에 걸쳐 옮겨 1초 동안 버틴 뒤 되돌아오는 무게

프로젝트는 이 값에 엔드이펙터 무게가 포함된다는 단서를 함께 붙여 두었습니다. 1.5kg짜리 엔드이펙터를 달면 실제로 다룰 수 있는 물체는 정격 2.6kg, 피크 4.5kg으로 줄어듭니다. 카탈로그의 숫자만 보고 작업 대상의 무게를 맞추면 실제 여유가 이만큼 달라집니다.

OpenArm의 단방향 제어와 양방향 힘 피드백

OpenArm은 리더 암의 움직임을 팔로워 암이 1:1로 따라가는 원격 조작을 두 가지 제어 방식으로 지원합니다. 단방향 제어(unilateral control)는 리더가 보낸 위치 명령을 팔로워가 그대로 따르는 한 방향 구성이라 단순하고 안정적이지만, 조작자에게 촉각이 돌아오지 않아 접촉 중에 힘이 과하게 들어가거나 정렬이 어긋나기 쉽습니다. 프로젝트는 이 방식을 자유 공간에서의 조작과 초기 시험에 적합한 기본 구성으로 안내합니다.

양방향 제어(bilateral control)는 리더와 팔로워 사이에 힘을 양쪽으로 주고받아 조작자가 팔로워가 닿은 대상을 느끼게 합니다. 아래 그림은 원격 조작 문서에 실린 4채널 양방향 제어 블록도로, 리더와 팔로워의 가속도 제어 출력이 힘 제어(Force Control)와 위치 제어(Position Control) 두 갈래로 합쳐지고 그 결과가 다시 양쪽으로 되먹임되는 구조를 보여줍니다:

리더 암 쪽에는 조작자의 피로를 줄이려는 별도 장치도 있습니다. OpenArm KER(Kinematic Equivalent Replica)은 모터가 없는 어깨 장착형 리더 암으로, 모든 축에 자기 엔코더와 베어링, 하드웨어 리밋, 드라이버를 한 몸에 넣은 공통 모듈을 쓰고 이 모듈들을 데이지 체인으로 연결해 배선을 줄였습니다. 관절 구조를 OpenArm 2.0과 똑같이 맞추고 링크 길이만 70%로 줄여 두어, 좌표 변환이나 리타게팅(retargeting) 없이 1:1로 동작이 옮겨집니다. 탄소섬유 강화 플라스틱(CFRP) 파이프와 가공 알루미늄, 수지를 섞어 본체를 1.7kg으로 맞췄고, 배낭처럼 어깨에 메는 구조라 도움 없이 30초 안에 착용할 수 있으며 배낭부를 접으면 일반 여행 가방에 들어갑니다.

다만 KER의 출시 상태는 문서마다 다르게 적혀 있습니다. 하드웨어 문서에는 3D CAD와 부품표 드라이브 링크가 이미 올라와 있고 제조사들도 2,599달러부터 판매 중이지만, 2.0 변경점 문서에는 아직 미출시이며 CAD와 부품표는 준비되는 대로 공개한다고 적혀 있습니다. 구매를 검토한다면 이 점을 판매처에 먼저 확인하는 편이 안전합니다.

OpenArm의 소프트웨어 계층 구성

OpenArm 저장소의 README에 실린 표는 9개 저장소를 소개하지만, enactic 조직에는 51개가 올라와 있습니다. 그중 29개가 dora- 로 시작하는 dora-rs 데이터 흐름 노드입니다. 아래 그림은 이 저장소들을 역할에 따라 다섯 계층으로 정리한 것입니다:

각 계층의 진입점은 다음과 같습니다.

openarm_driver의 안전 검사가 이 스택의 성격을 잘 보여줍니다. 명령을 보낼 때 관절 위치 한계로 값을 자르는 JointPosChecker, 한 번에 너무 크게 움직이는 명령을 거부하는 JointDeltaPosChecker, 경과 시간을 재서 속도를 제한하는 JointVelocityChecker가 이 순서로 걸립니다. 연구용 코드가 아니라 사람 옆에서 실제로 움직이는 장비를 전제로 한 설계입니다.

OpenArm Dataset의 기록 형식과 표현 변환

조작 데이터를 다루는 입장에서 가장 눈여겨볼 부분은 openarm_dataset입니다. 에피소드마다 관절 위치(qpos), 속도(qvel), 토크(qtorque)와 여러 대의 카메라 프레임을 기록하고, 관측과 행동을 각각 불러오는 API를 제공합니다.

설계에서 흥미로운 점은 저장과 표현을 분리한 것입니다. 데이터셋은 기록 당시의 원시 표현만 저장하고, 필요한 표현은 불러올 때 변환합니다. state= 인자로 요청한 표현이 기록된 것과 다르면 openarm_control의 기구학이 붙어 관절 각도를 순기구학으로 말단 자세(pose)로 바꾸거나, 말단 자세를 역기구학으로 관절 각도로 되돌립니다. 역기구학 변환은 에피소드에 기록된 관측 관절값을 초기값으로 삼아 자세 궤적을 따라가며 풀고, 해가 수렴하지 않은 샘플은 경고로 보고합니다. 회전을 6차원으로 표현하는 rot6d도 같은 경로로 유도됩니다.

카메라 프레임 저장 방식에도 실전에서 나온 판단이 들어가 있습니다. 프레임을 타임스탬프별 JPEG 파일로 두거나 에피소드마다 하나의 tar 아카이브로 묶을 수 있는데, 묶는 쪽은 Hugging Face Hub의 저장소 권장 사항에 맞춰 파일 개수를 줄이기 위한 선택입니다. 두 방식 모두 같은 API로 읽히므로 데이터를 허브에 올려 공유할 때 코드를 고칠 일이 없습니다.

OpenArm 데이터를 LeRobot으로 학습시키는 경로

수집한 데이터를 어떻게 학습에 넣는지가 이 스택에서 가장 실용적인 부분입니다. OpenArm은 자체 형식을 고집하지 않고 LeRobot 데이터셋 형식으로 변환하는 명령을 제공합니다:

git clone https://github.com/enactic/openarm_dataset.git
cd openarm_dataset
uv sync
uv run openarm-dataset-convert path/to/collected_dataset_path path/to/output_path --format lerobot_v3.0

--format lerobot_v2.1 을 주면 구버전 형식으로도 변환됩니다. 변환 뒤에는 LeRobot의 학습 명령을 그대로 씁니다. 공식 튜토리얼은 LeRobot 0.6.1에서 ACT(Action Chunking with Transformers) 정책을 학습시키는 예시를 싣고 있습니다:

lerobot-train \
  --dataset.repo_id=enactic/openarm-2-cell-pick_up_cube_mujoco-lerobot \
  --policy.type=act \
  --output_dir=outputs/train \
  --policy.device=cuda \
  --num_workers=8 \
  --steps=10000

여기서 중요한 것은 로봇 없이도 이 경로를 끝까지 따라가 볼 수 있다는 점입니다. 학습에 쓰는 데이터셋과 학습을 마친 모델이 모두 Hugging Face Hub에 공개돼 있기 때문입니다.

  • enactic/openarm-2-cell-pick_up_cube_mujoco-lerobot: MuJoCo 시뮬레이션 안의 Cell에서 가상현실(VR) 원격 조작으로 기록한 큐브 집기 시연입니다. 에피소드 30개에 30fps로 5,405프레임이고, 천장/머리 좌우/손목 좌우 카메라 5대와 16차원 상태와 행동이 들어 있습니다. 16차원은 오른팔 7축과 그리퍼 1축, 왼팔 7축과 그리퍼 1축입니다.
  • enactic/act-openarm-2-cell-pick_up_cube_mujoco: 위 데이터로 학습한 ACT 정책입니다. 비전 백본은 ImageNet 사전학습 ResNet-18이고, 행동 청크 길이 100, 트랜스포머는 512차원에 헤드 8개, 인코더 4층과 디코더 1층 구성입니다.

학습한 정책을 로봇에 붙이는 지점도 계약으로 정해져 있습니다. 정책은 정책 서버(policy server) 프로세스로 뜨고, dora 노드가 유닉스 소켓으로 관측을 넘기면 행동을 돌려주는 방식입니다. 관측은 카메라 프레임과 관절 위치를 담은 Arrow IPC 형식 파일로 오고, 응답은 16차원 관절 위치의 시퀀스를 담은 JSON입니다. 응답에는 스텝 간격(interval)과 저역 통과 필터 차단 주파수(cutoff_hz)를 같이 실어 동작의 부드러움을 조절합니다. 다른 모델을 붙이고 싶다면 이 계약만 맞추면 되고, 모델 코드는 dora 노드가 실행하는 프로세스 안에 그대로 두면 됩니다.

OpenArm Online의 정책 평가와 리더보드

OpenArm Online은 정책을 담은 Docker 이미지를 등록하면 실제 장비나 시뮬레이션에 연결된 실행기가 그것을 받아 과제를 수행시키고 결과를 돌려주는 평가 서비스입니다. GitHub 계정으로 로그인해 과제를 고르고 제출하는 흐름이며, 서버 설정에 따라 제출 권한을 특정 계정이나 조직으로 제한할 수 있습니다. 각 평가 실행은 Rerun 기록으로 남아 브라우저에서 되돌려 볼 수 있고, 과제별 리더보드가 제출물의 순위를 매깁니다. 시뮬레이션 과제에는 브라우저에서 WebRTC로 직접 조작하는 경로도 제공되어 키보드나 WebXR을 지원하는 헤드셋으로 움직여 볼 수 있습니다. 실제 장비를 쓰는 Cell 과제에는 이 조작 링크가 없습니다.

다만 도입을 검토하는 입장이라면 현재 상태를 함께 봐야 합니다. 등록된 과제는 시뮬레이션 환경의 Pick and place (MuJoCo)와 실제 장비를 쓰는 Pick and place (Cell) 두 가지이고, 각각 2026년 8월에 만들어졌습니다. 두 과제 모두 제출물과 실행 기록이 아직 없어 리더보드는 비어 있습니다. 평가 기반은 열려 있지만 비교 대상이 쌓이기 전이므로, 지금 시점에 OpenArm Online을 다른 팀과 성능을 견주는 용도로 기대하기에는 이릅니다.

OpenArm 설치와 사용

제어 스택은 SocketCAN을 지원하는 리눅스와 CAN 인터페이스 하드웨어를 전제로 하며, macOS와 윈도우용 안내는 없습니다. 모터와 통신하는 CAN 라이브러리는 우분투(Ubuntu) 22.04/24.04/26.04와 레드햇 계열 배포판에 패키지로 올라와 있고, 우분투에서는 저장소를 추가한 뒤 설치합니다:

sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y libopenarm-can-dev openarm-can-utils

설치 후에는 CAN 인터페이스를 설정하고 버스에 붙은 모터를 확인합니다:

# CAN-FD, 데이터 구간 5Mbps
openarm-can-configure-socketcan can0 -fd

# 버스에서 모터 탐색
openarm-can-cli -i can0 discover

# 모터 상태 모니터링
openarm-can-cli -i can0 monitor

파이썬에서 팔을 움직일 때는 openarm_driver를 씁니다. 데이터셋 라이브러리까지 함께 설치하면 다음과 같습니다:

pip install openarm-driver
pip install openarm_dataset

아래는 저장소가 제공하는 예시로, 현재 관절 위치를 읽어 다음 목표를 계산한 뒤 부드럽게 이동시키는 흐름입니다:

import openarm_driver

arm = openarm_driver.SingleArmDriver("right_arm")

try:
    arm.start()
    while True:
        cur_position = arm.fetch_position()
        # 다음 동작을 계산하는 부분
        next_positions = inference(cur_position)
        for next_postion in next_positions:
            arm.smooth_move(next_postion, hz=50, duration=1)
finally:
    arm.stop()

기록된 데이터셋을 읽는 쪽은 openarm_dataset입니다:

import openarm_dataset

dataset = openarm_dataset.Dataset("tests/fixture/dataset_0.3.0")
obs = dataset.load_obs(0)
list(obs.keys())
# ['arms/right/qpos', 'arms/right/qvel', 'arms/right/qtorque',
#  'arms/left/qpos', 'arms/left/qvel', 'arms/left/qtorque', 'lifter/elevation']

obs["arms/right/qpos"].shape
# (746, 8)

관절 각도 대신 말단 자세로 받고 싶으면 state= 를 넘기면 되고, 그때 앞서 설명한 기구학 변환이 자동으로 걸립니다.

OpenArm의 라이선스

OpenArm은 소프트웨어와 하드웨어에 서로 다른 라이선스를 적용합니다. 문서 저장소를 포함한 소프트웨어는 Apache-2.0으로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

반면 CAD 데이터가 들어 있는 하드웨어 저장소는 CERN-OHL-S-2.0을 따릅니다. 라이선스 파일에 CERN Open Hardware Licence Version 2 - Strongly Reciprocal 로 적힌, 강한 상호주의 조항이 붙은 하드웨어 라이선스라서, 이 설계를 고쳐 만든 제품을 배포하거나 공급할 때는 수정한 설계 자료도 같은 라이선스로 공개해야 합니다. 설계를 바꿔 사내에서만 쓰는 것과 그 결과물을 외부에 내보내는 것은 의무가 다르므로, 제품화를 염두에 두고 있다면 배포 시점의 공개 범위를 미리 확인해야 합니다.

OpenArm 프로젝트 홈페이지

OpenArm

OpenArm

OpenArm is a fully open-source humanoid robot arm designed for physical AI research and deployment in contact-rich environments.

OpenArm 하드웨어와 소프트웨어 공식 문서

docs.openarm.dev

Project Overview | OpenArm

OpenArm is an open-source 7DOF humanoid arm designed for physical AI research and deployment in contact-rich environments. Hardware and software — CAD, firmware, control code, and simulation tools — are openly available so you can build, hack, and...

OpenArm Online 정책 평가 서비스

online.openarm.dev

TOP - OpenArm Online

OpenArm GitHub 저장소

github.com

GitHub - enactic/openarm: A fully open-source humanoid arm for physical AI...

A fully open-source humanoid arm for physical AI research and deployment in contact-rich environments.

OpenArm 시뮬레이션 데이터셋과 학습된 ACT 정책

huggingface.co

enactic (Enactic, Inc.)

Robotic AI

더 읽어보기



이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다.

파이토치 한국 사용자 모임에서 이런 글들을 계속 정리하고 있습니다. 회원 가입으로 주요 글들을 이메일로, 텔레그램(Telegram)이나 Slack/Discord/Teams/Dooray/GoogleChat 등으로 새 글 알림을 받아보세요!

아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~

1개의 게시물 - 1명의 참여자

전체 주제 읽기

https://discuss.pytorch.kr/t/openarm/11947

Zobacz oryginał