assembly

Assembly 구성

등록된 로봇들을 팔·도구·하체 슬롯에 끼워 하나의 가상 로봇(Agent)으로 묶고, 활성화 창에서 함께 움직여 보는 단계.

최근 확인 버전: v6.0.23

Assembly는 Robots → Management에 등록된 여러 로봇을 **하나의 가상 로봇(Agent)**으로 묶는 단계입니다. 등록된 로봇 자체는 "이 팔이 어떤 시리얼·어떤 IP·몇 자유도냐" 같은 하드웨어 단위 정의에 가깝고, Assembly는 그 부품들을 조합해 **"이 작업에서는 이 팔과 저 그리퍼를 한 몸처럼 쓰겠다"**라고 선언하는 일이에요.

이후의 모든 단계 — 텔레오퍼레이션 · 워크스페이스 · 데이터 수집 · 학습 · 추론 — 는 모두 이 Assembly 단위로 진행됩니다. 워크스페이스도 항상 한 Assembly에 묶여요.

왜 Assembly가 필요한가

서로 다른 회사에서 만든 팔과 그리퍼를 같이 써도, 정책(policy) 입장에서는 하나의 큰 로봇이어야 합니다. 관절각·EE 자세·그리퍼 명령이 한 묶음의 관측·액션 벡터로 들어가야 학습이 의미가 있기 때문이에요.

Assembly는 이 "한 묶음"을 사용자가 직접 정의하게 해 줍니다.

  • 단일 팔 작업 — 팔 한 대만 슬롯에 꽂으면 그대로 끝.
  • 양팔 작업 — 같은 모델 두 대를 left / right 슬롯에 각각 꽂으면 양팔 Agent가 됩니다. 두 팔이 꼭 같은 회사·같은 모델일 필요는 없어요. 좌측에 Piper, 우측에 Fairino 식으로 이종 조합도 가능합니다.
  • 외부 그리퍼 결합 — 팔에는 자체 그리퍼가 없어도 됩니다. 별도로 등록한 Custom Robot(예: 시중 전동 그리퍼, 자체 제작 손)을 tool 슬롯에 끼우면 그 팔의 그리퍼처럼 동작해요. 학습 시에는 팔 관절 + 그리퍼 명령이 하나의 액션으로 합쳐집니다.
  • 팔 + 내장 그리퍼 일체형 — Piper처럼 그리퍼가 팔에 일체로 붙어있는 모델은 한 번의 클릭으로 arm + tool 슬롯이 동시에 채워집니다.
  • 이동 베이스 결합 — 이동 베이스를 하체 슬롯에 끼웁니다. 팔·도구와 함께 묶을 수도 있고, 이동 베이스 한 대만으로 Assembly를 만들 수도 있습니다.
  • 휴머노이드 — 휴머노이드는 몸 전체가 한 로봇이라, 카드를 한 번 누르면 두 팔·양손·하체가 모두 그 한 대로 채워집니다.

5개의 슬롯

Assembly는 다음 다섯 슬롯으로 구성됩니다. 앞의 네 슬롯이 상체(팔·도구)이고, 하체가 이동을 맡습니다. 조립 창의 구성 줄에는 한글 이름으로, 어셈블리 카드에는 영문 이름으로 표시됩니다.

슬롯 (구성 줄 / 어셈블리 카드)역할비어 있어도 되나?
왼팔 / left_arm좌측 팔우측 팔만 쓸 거면 비워도 됨
오른팔 / right_arm우측 팔좌측 팔만 쓸 거면 비워도 됨
왼쪽 도구 / left_tool좌측 팔의 그리퍼/도구그리퍼 없는 팔이면 비움
오른쪽 도구 / right_tool우측 팔의 그리퍼/도구그리퍼 없는 팔이면 비움
하체 / mobile_base이동 베이스, 또는 휴머노이드의 다리·이동이동이 없는 작업이면 비움

원하는 조합 그대로 다섯 슬롯에 부품을 끼우면 그게 곧 Assembly입니다. 최소 한 슬롯은 채워야 저장되며, 하체만 채운 Assembly도 저장할 수 있습니다.

흔한 구성 예시

사용 사례left_armleft_toolright_armright_toolmobile_base
단일 팔 + 내장 그리퍼 (Piper)piper_main(자동)———
단일 팔 + 외부 그리퍼fairino_maincustom_gripper———
양팔 (동일 모델)piper_left(자동)piper_right(자동)—
양팔 (이종 + 외부 그리퍼)fairino_leftcustom_gripper_lpiper_right(자동)—
단일 팔 + 이동 베이스piper_main(자동)——base_main
이동 베이스만————sim_go2
휴머노이드 전신sim_humanoid(자동)(자동)(자동)(자동)

휴머노이드에 손 관절이 없으면 left_tool / right_tool은 비어 있습니다.

로봇의 역할

로봇 추가 단계에서 각 로봇에 정해진 역할이 Assembly에서 어느 슬롯에 들어갈 수 있는지를 결정합니다.

역할가능 슬롯예
단일 팔left_arm 또는 right_armPiper, Fairino, Jaka 같은 6/7-DoF 매니퓰레이터
도구left_tool 또는 right_tool별도 등록된 그리퍼 (Custom Robot으로 등록한 외부 그리퍼)
양팔 (바이매뉴얼)left_arm + right_arm을 한 번에 (그리퍼가 팔 관절에 함께 있으면 left_tool + right_tool까지)이미 양팔이 한 컨트롤러에 묶여 있는 통합형 (예: AI Worker, sim_bimanual)
휴머노이드left_arm + right_arm + mobile_base를 한 번에 (손 관절이 있으면 left_tool + right_tool까지)sim_humanoid, sim_igris
이동 베이스mobile_base (하체)sim_base, sim_go2

구성하기

    1. 로봇 → 어셈블리로 이동하고 + 카드를 눌러 새 어셈블리 창을 엽니다.

      어셈블리 카드 목록 끝의 + 카드를 누르면 새로 만들기 창이 열립니다. 왼쪽 위에 어셈블리 이름 칸, 오른쪽에 등록된 로봇 카드가 나열되고, 그 아래에 구성 줄과 3D 조립, 저장 버튼이 있습니다. 이미 만든 Assembly를 고치려면 그 Assembly의 카드를 누릅니다.

      스크린샷 누락/docs/assembly/02-new-dialog.png

      새로 만들기 창 — 어셈블리 이름 칸, 로봇 카드 목록, 구성 줄(왼팔 · 왼쪽 도구 · 오른팔 · 오른쪽 도구 · 하체), 3D 조립, 저장 버튼

    2. 로봇 카드를 눌러 역할에 맞는 슬롯에 넣습니다.

      카드를 누르면 그 로봇의 역할에 맞는 슬롯에 들어가고 카드 테두리가 강조됩니다. 넣은 뒤 카드에 나타나는 버튼·표시는 역할마다 다릅니다.

      • 단일 팔 — 비어 있는 팔 슬롯에 먼저 들어가고, 왼쪽 / 오른쪽 버튼으로 어느 팔로 쓸지 바꿉니다.
      • 도구 — 왼쪽 / 오른쪽 버튼으로 어느 팔의 그리퍼로 쓸지 고릅니다.
      • 양팔 (바이매뉴얼) — 한 번 누르면 왼팔·오른팔 슬롯을 모두 차지합니다.
      • 이동 베이스 — 하체 슬롯에 들어가고 카드에 하체 표시가 나타납니다.
      • 휴머노이드 — 전신이 한 번에 채워지고 카드에 전신 (팔 · 손 · 하체) 표시가 나타납니다.

      넣은 카드를 다시 누르면 그 로봇이 모든 슬롯에서 빠집니다. 다른 로봇이 있던 슬롯에 새 로봇을 넣으면 원래 로봇은 빠지는데, 양팔 (바이매뉴얼)·휴머노이드처럼 여러 슬롯을 차지하던 로봇이면 나머지 슬롯에서도 함께 빠집니다.

      로봇 카드 — 선택되어 테두리가 강조된 단일 팔 카드와 왼쪽 / 오른쪽 버튼
    3. 구성 줄에서 슬롯마다 들어간 로봇을 확인합니다.

      로봇 카드 아래의 구성 줄에는 왼팔 · 왼쪽 도구 · 오른팔 · 오른쪽 도구 · 하체 다섯 칸이 나란히 있고, 칸마다 들어간 로봇 이름이 표시됩니다. 빈 칸은 — 로 표시됩니다. 채워진 칸 오른쪽의 ✕ 를 누르면 그 칸에서만 로봇을 뺍니다. 휴머노이드처럼 여러 칸을 차지한 로봇도 ✕ 를 누른 칸에서만 빠지고 나머지 칸은 그대로입니다.

      스크린샷 누락/docs/assembly/03-slots-row.png

      구성 줄 — 왼팔 · 왼쪽 도구 · 오른팔 · 오른쪽 도구 · 하체 다섯 칸에 들어간 로봇 이름, 빈 칸의 —, 채워진 칸의 ✕ 버튼

    4. 양팔이라면 같은 방식으로 반대편에도 팔을 끼웁니다.

      같은 모델 두 대를 양팔로 쓸 수도 있고, 다른 회사 팔을 좌·우에 섞어도 됩니다. 시스템은 두 팔의 관측을 그대로 나란히 묶어서 한 Agent로 다룹니다.

      스크린샷 누락/docs/assembly/04-dual-arms.png

      양팔 구성 — 두 단일 팔 카드에 각각 왼쪽 / 오른쪽이 선택되고 구성 줄의 왼팔 · 오른팔 칸이 채워진 모습

    5. 외부 그리퍼가 있다면 도구 카드를 클릭해 같은 쪽 슬롯에 끼웁니다.

      그리퍼가 일체로 달려 있지 않은 팔(자체 그리퍼가 없는 매니퓰레이터)에 외부 그리퍼를 결합할 때 쓰는 절차예요. 예를 들어 좌측 팔에 외부 그리퍼를 붙이고 싶으면, 팔 카드의 왼쪽을 누른 뒤 그리퍼 카드의 왼쪽을 누르면 됩니다.

      스크린샷 누락/docs/assembly/05-external-tool.png

      외부 그리퍼 결합 — 팔 카드와 도구 카드에 모두 왼쪽이 선택되고 구성 줄의 왼팔 · 왼쪽 도구 칸에 각각 다른 로봇이 들어간 모습

    6. (이동 베이스) 이동 베이스 카드를 눌러 하체 슬롯에 넣습니다.

      이동 베이스 카드를 누르면 하체 슬롯에 들어갑니다. 팔·도구를 넣은 Assembly에 이동 베이스를 더하면 팔과 베이스를 한 Assembly로 묶을 수 있고, 이동 베이스만 넣고 저장하면 베이스 한 대짜리 Assembly가 됩니다.

      스크린샷 누락/docs/assembly/06-mobile-base.png

      이동 베이스 추가 — 하체 표시가 나타난 이동 베이스 카드와 구성 줄의 왼팔 · 왼쪽 도구 · 하체 칸이 채워진 모습

    7. (휴머노이드) 휴머노이드 카드를 한 번 눌러 전신을 채웁니다.

      휴머노이드는 몸 전체가 한 로봇이라 슬롯을 나눠 고르지 않습니다. 카드를 한 번 누르면 왼팔 · 오른팔 · 하체가 모두 그 휴머노이드로 채워지고, 손 관절이 있는 휴머노이드는 왼쪽 도구 · 오른쪽 도구까지 채워집니다. 그 슬롯에 있던 다른 로봇은 빠집니다. 두 팔을 쓰는 구성이라 양팔 (바이매뉴얼) 로봇처럼 Pro 이상에서 쓸 수 있습니다.

      휴머노이드만으로 된 Assembly는 팔·도구를 따로 합칠 것이 없어서, 3D 조립 자리에 3D 화면 대신 "휴머노이드는 몸 전체가 한 로봇이라 팔·툴을 따로 합치는 3D 조립이 필요 없습니다." 안내가 표시됩니다.

      이동 속도 명령 토픽과 이동 위치 토픽 중 하나라도 비어 있는 휴머노이드는 구성 줄 아래에 "이 휴머노이드는 이동 토픽이 없어 하체가 걷지 않습니다 — 로봇 편집에서 이동 속도 명령·위치 토픽을 넣으면 걷습니다." 안내가 표시됩니다. 두 토픽은 Custom Robot 등록 폼에서 입력합니다.

      스크린샷 누락/docs/assembly/07-humanoid.png

      휴머노이드 전신 — 전신 (팔 · 손 · 하체) 표시가 나타난 sim_humanoid 카드, 구성 줄 다섯 칸 모두 sim_humanoid, 3D 조립 자리의 안내 문구

    8. 어셈블리 이름을 입력하고 저장을 누릅니다.

      여기서 정한 이름이 이후 텔레오퍼레이션·워크스페이스 화면에서 그대로 보입니다. 작업/구성을 알아볼 수 있는 이름(bimanual_piper, fairino_with_custom_gripper 등)을 권장해요. 슬롯이 하나도 채워지지 않았으면 "어셈블리에 최소 한 부품을 포함해야 합니다." 안내가 뜨고 저장되지 않습니다.

      스크린샷 누락/docs/assembly/08-save.png

      새로 만들기 창 아래쪽 — 어셈블리 이름 칸에 이름을 입력하고 오른쪽 아래 저장 버튼을 누르는 모습

활성화 창에서 움직이기

저장한 Assembly는 로봇 → 어셈블리 화면에 카드로 나타납니다. 카드에는 left_arm · left_tool · right_arm · right_tool · mobile_base 줄마다 들어간 로봇 이름과 온라인 / 오프라인 표시가 있으며, mobile_base 줄이 하체 슬롯입니다. 카드의 활성화를 누르면 그 Assembly의 로봇들을 함께 움직이는 활성화 창이 열립니다. 활성화는 한 번에 한 Assembly만 할 수 있습니다.

    1. Assembly에 든 로봇을 모두 켜고 카드의 활성화를 누릅니다.

      하체 로봇을 포함해 Assembly에 든 로봇이 하나라도 꺼져 있으면 활성화되지 않고 "꺼져 있는 로봇이 있어 활성화할 수 없습니다: … — 로봇 탭에서 먼저 켜 주세요." 안내가 뜹니다. 로봇은 로봇 → 관리에서 켭니다.

      스크린샷 누락/docs/assembly/09-card-mobile-base.png

      어셈블리 카드 — left_arm · left_tool · right_arm · right_tool · mobile_base 줄의 로봇 이름과 온라인 표시, 아래쪽 활성화 버튼

    2. 활성화 창의 로봇 목록에서 로봇 상태를 확인합니다.

      활성화 창 위쪽의 로봇 목록에 Assembly에 든 로봇이 버튼으로 하나씩 나오며, 하체 로봇도 여기에 포함됩니다. 여러 슬롯을 차지한 휴머노이드는 한 번만 나옵니다. 버튼을 누르면 그 로봇을 켜고 끌 수 있고, 켜진 로봇은 초록색으로 표시됩니다.

      키보드 텔레오퍼레이션 스위치는 하체를 포함한 모든 로봇이 켜져 있어야 켤 수 있습니다. 꺼진 로봇이 있으면 "어셈블리의 모든 로봇이 켜져 있어야 텔레오퍼레이션을 켤 수 있습니다." 안내가 표시되고, 텔레오퍼레이션 중에 로봇이 하나라도 꺼지면 텔레오퍼레이션도 꺼집니다.

      스크린샷 누락/docs/assembly/10-window-robots.png

      활성화 창 — 로봇 목록에 팔 로봇과 하체 로봇 버튼(켜진 로봇은 초록색), 키보드 텔레오퍼레이션 스위치

    3. 키보드 텔레오퍼레이션을 켜면 Assembly 구성에 맞는 조작 패널이 열립니다.

      • 팔·도구가 든 Assembly — 팔·도구 펜던트가 열립니다.
      • 휴머노이드 Assembly — 휴머노이드 펜던트가 열립니다. 몸 지도에서 부위를 골라 관절을 움직이고, 이동 토픽이 있는 휴머노이드는 이동 칸으로 걷게 합니다. 사용법은 로봇 관리 탭의 휴머노이드 펜던트와 같습니다.
      • 하체가 이동 베이스인 Assembly — 팔·도구 펜던트 아래(하체만 있는 Assembly는 그 자리)에 하체 · (로봇 이름) 제목과 주행 패널이 붙습니다. 제목 옆의 직진 속도 m/s (최대 …) / 회전 속도 rad/s (최대 …) 칸에 누를 때 보낼 속도를 넣고, 위치 (odom) 줄에서 x · y · yaw를 확인하며, 주행 줄(앞·뒤 (m/s), 회전 (rad/s), 옆으로도 움직이는 베이스는 옆 (m/s))과 정지 버튼으로 몹니다. 주행 줄은 누르고 있는 동안 움직이고 떼면 멈춥니다. 속도 값은 로봇 관리 탭의 이동 베이스 펜던트와 같은 값을 씁니다.
      스크린샷 누락/docs/assembly/11-window-humanoid.png

      활성화 창 — 휴머노이드 Assembly에서 키보드 텔레오퍼레이션을 켠 뒤 열린 휴머노이드 펜던트(몸 지도 · 관절 칸 · 이동 칸)

      스크린샷 누락/docs/assembly/12-window-base-only.png

      활성화 창 — 하체만 있는 Assembly의 하체 · sim_go2 주행 패널: 직진·회전 속도 입력, 위치 (odom) 줄, 양옆에 키가 표시된 주행 줄과 정지 버튼

    4. 팔과 하체가 함께 있으면 주행은 버튼으로 합니다.

      팔(또는 도구)과 이동 베이스가 함께 든 Assembly에서는 키보드가 팔 조작에 쓰이므로 주행 패널이 키보드를 받지 않습니다. 주행 줄 양옆에 키가 표시되지 않고, 패널 아래에 "누르고 있는 동안 움직이고 떼면 멈춥니다. 키보드는 팔 조작에 쓰이므로 주행은 버튼으로 합니다." 안내가 나옵니다. 이때는 주행 줄의 + / − 버튼을 누르고 있는 동안 베이스가 움직입니다.

      하체만 있는 Assembly는 키보드로도 주행합니다. W/S로 앞뒤, A/D로 회전하고(화살표 키도 같음), 옆으로도 움직이는 베이스는 Q/E로 옆으로 이동합니다. 주행 줄 양옆에 그 키가 표시됩니다.

      스크린샷 누락/docs/assembly/13-window-arms-base.png

      활성화 창 — 팔·도구 펜던트 아래의 하체 · (로봇 이름) 주행 패널: 키 표시 없는 주행 줄과 '키보드는 팔 조작에 쓰이므로 주행은 버튼으로 합니다' 안내

등록 후 어떻게 쓰이나

Assembly가 만들어지면 시스템은 그 안의 로봇들을 다음과 같이 묶어 다룹니다.

  • 관측(observation) — 모든 슬롯의 관절각·EE 자세·이미지가 일정한 순서로 합쳐져 정책 입력이 됩니다.
  • 액션(action) — 슬롯별 명령이 같은 순서로 합쳐진 단일 액션 벡터로 출력되며, 시스템이 슬롯별로 분배해 각 로봇에 전달합니다.
  • 텔레오퍼레이션 — 키보드·Easy Controller 모두 Assembly 단위로 켜집니다. 양팔이면 두 팔이 동시에 움직이고, 외부 그리퍼는 팔의 일부처럼 같이 따라옵니다.
  • 데이터셋 — 한 에피소드의 모든 프레임은 Assembly의 관측·액션 벡터 형태로 저장돼요. 즉 같은 Assembly로 모은 데이터끼리만 학습이 호환됩니다.

이 일관성 덕분에 정책은 "팔이 두 대인지, 그리퍼가 외부인지" 신경 쓸 필요 없이 하나의 로봇을 학습한다고 가정하고 동작합니다.

다음 단계

Assembly가 만들어졌다면 텔레오퍼레이션으로 넘어가 EE 오프셋·키보드·Easy Controller를 설정하고 실제로 움직여 보세요. 그 다음 워크스페이스 만들기에서 이 Assembly를 골라 시연 데이터 수집을 시작합니다.

관련 문서