teleoperation

Easy Controller 세팅

Dynamixel 모터로 만든 리더 팔(Easy Controller)을 슬레이브(워커) 로봇과 매핑·캘리브레이션하는 전체 과정.

최근 확인 버전: v5.0.0

Easy Controller 모드는 사람이 리더 팔(leader) 을 직접 잡고 움직이면 그 자세를 그대로 따라가도록 워커 팔(follower, 실제 로봇) 을 제어하는 방식입니다. 키보드보다 자연스러운 동작을 만들기 좋아 양손 협조나 미세 조작에 적합합니다.

리더 팔이란?

리더 팔은 보통 가벼운 3D 프린팅 프레임에 Dynamixel 시리즈 스마트 서보(예: XL330, XL430)를 워커 팔과 동일한 자유도(DoF)·형상으로 배치해 만든 마스터 디바이스입니다.

  • Dynamixel 모터 — Robotis사의 시리얼 버스 기반 스마트 서보. 각 모터는 1바이트 ID(0~252)와 baudrate를 가지며, 한 줄의 시리얼 라인에 여러 개를 데이지체인으로 연결합니다.
  • U2D2 / OpenRB 등 인터페이스 보드 — Dynamixel 버스를 USB(/dev/ttyUSB0, /dev/ttyUSB1...)로 변환합니다. 한 포트당 한 줄(=한 팔)이 일반적입니다.
  • 별도 12 V 전원 — 모터에는 USB가 아니라 12 V 어댑터로 전원이 공급되어야 합니다. 전원이 없으면 모터가 검출되지 않습니다.

리더 팔의 각 관절은 워커 팔의 같은 관절에 1:1로 대응되며, 사람이 리더를 움직일 때 측정된 각도가 워커의 목표 각도로 흘러갑니다.

지원되는 리더 팔 종류

Easy Trainer는 모터 동작 모드를 자동으로 감지하기 때문에, 같은 캘리브레이션 절차로 두 가지 종류의 리더 팔을 모두 다룰 수 있습니다.

리더 팔 종류모터 모드sync 동안의 처리
자체 제작 / 일반 리더 팔Position(3) 또는 Extended Position(4)그대로 사용 — 기존 동작과 동일
ROBOTIS OMX (5-DoF) 리더 팔대부분 Current(0), 그리퍼는 Current-based Position(5)Current 모터는 sync 동안 임시로 Position으로 전환되었다가 종료 시 원복

OMX처럼 출고 시 Current 모드로 설정된 모터도 별도 모드 변경 작업 없이 그대로 사용할 수 있습니다. 캘리브레이션이 끝나고 텔레옵을 중지하면 모터 모드가 자동으로 원래 값으로 돌아가므로 backdrivable(손으로 자유롭게 움직일 수 있는) 특성을 잃지 않아요.

사전 준비

    1. 리더 팔 프레임을 안전한 위치에 둡니다.

      리더는 토크가 거의 없어 사람이 자유롭게 움직이지만, 시작 직후에는 워커가 리더 자세를 향해 빠르게 따라갑니다. 워커 주변에 사람·물체가 없는지 먼저 확인하세요.

    2. U2D2/OpenRB를 PC에 USB로 연결하고, 12 V 어댑터를 모터 버스에 연결합니다.

      ls /dev/ttyUSB*로 포트가 보이는지 확인합니다. 보이지 않으면 dialout 그룹 권한이나 어댑터 케이블을 점검하세요.

    3. 워커 로봇을 먼저 ON 시킵니다.

      Easy Controller 탭은 좌측에서 워커 로봇을 켜기 전까지는 우측 Stepper가 잠겨 있습니다.

다이얼로그 열기

    1. Teleoperation 페이지 → Assembly 카드의 ⚙️ → Easy Controller 탭으로 이동합니다.

      텔레오퍼레이션 설정 다이얼로그 — Easy Controller 탭. 좌측에 워커 로봇 ON 토글과 'Easy Controller 시작' 버튼, 우측에 원점 설정 Stepper
    2. 좌측 상단의 워커 로봇 버튼을 눌러 모두 ON으로 만듭니다.

      Assembly에 묶인 모든 팔이 초록색이 되어야 우측 Stepper가 활성화됩니다.

    3. 좌측의 Start Easy Controller를 누릅니다.

      Easy Controller 프로세스가 시작되고, 아래 ProcessConsole에 검출된 Dynamixel 모터의 ID·port·current position이 로그로 찍힙니다. 검출된 모터는 Stepper 1단계 하단의 DXL 카드(ID xx (/dev/ttyUSBx)) 영역에 자동으로 나열됩니다.

      모터가 검출되지 않으면 12 V 전원, USB 케이블, baudrate(자동 탐색이 4 M/1 Mbps만 시도하므로 그 외 값으로 설정된 모터는 검출되지 않음)를 차례로 점검하세요.

Step 1 — 원점 설정 (Origin Setting)

    1. 워커 로봇과 리더 팔을 같은 자세로 맞춥니다.

      두 로봇이 같은 자세이기만 하면 됩니다 — 워커가 꼭 home pose(모든 관절각 0)일 필요는 없습니다. 워커를 보고 사람이 리더 팔을 손으로 같은 모양으로 맞춰 놓으면, 그 시점의 워커 관절각이 그대로 리더 모터의 원점에 매핑됩니다. 워커는 토크 ON이어야 자세가 흔들리지 않고 비교가 안정적입니다.

    2. Stepper 상단의 슬레이브 조인트 슬롯을 봅니다.

      각 슬롯에는 워커의 Robot 이름Joint 이름(예: piper_left.joint1)이 표시되어 있습니다. 슬롯은 워커 팔의 자유도 수만큼 비어 있습니다.

    3. 하단의 DXL 카드를 슬레이브 조인트 슬롯으로 드래그&드롭합니다.

      드롭하면 그 모터의 현재 각도가 슬롯의 Origin 값으로 들어갑니다. 이 값은 "리더 모터가 이 위치일 때 워커는 현재 자세"라는 기준점이라, 이후 리더가 움직이면 그만큼의 차이가 워커의 관절 변화로 전달됩니다. 잘못 매핑했다면 슬롯의 X로 분리한 뒤 다시 드래그하세요.

    4. 포트가 다르게 잡혔다면 슬롯의 ttyUSB 버튼을 클릭해 순환합니다.

      ttyUSBx 버튼을 한 번 누를 때마다 0→1→2→3→4→0으로 바뀝니다. 부팅 순서에 따라 포트가 섞이는 환경에서는 udev 규칙으로 고정하는 것이 안전합니다.

      Step 1 원점 설정 — joint1~joint6 + gripper 슬롯에 DXL 카드(ID/현재값/ttyUSB)가 매핑된 모습. gripper 슬롯의 도구 관절 체크박스가 켜져 있고 하단에 '저장 후 다음' 버튼
    5. 모든 매핑이 끝나면 Save & Go Next를 눌러 다음 단계로 갑니다.

Step 1 보강 — Toggle Joint (구 Set as Gripper)

리더 팔에는 사람이 손으로 쥐는 위치에 보통 추가 모터가 하나 더 달려 있습니다. 이 모터의 역할은 워커 쪽 구성에 따라 달라집니다.

워커 측 상황Toggle Joint 모터의 역할
워커에 그리퍼가 있다워커 그리퍼 관절로 직접 매핑됩니다. 리더 손잡이를 열고 닫는 정도가 워커 그리퍼의 열림/닫힘 정도로 그대로 전달돼요. (Step 2에서 저장하는 Open/Close 위치가 이 매핑의 양 끝점이 됩니다.)
워커에 그리퍼가 없다워커 관절에는 들어가지 않고, 텔레옵 일시정지 트리거로만 쓰입니다. (자세한 동작은 아래 Step 2 callout 참고)

어느 경우든 일반 관절 슬롯에 드롭하지 말고, 해당 DXL 카드의 Set as Toggle Joint 버튼을 눌러 토글 전용 슬롯으로 등록하세요. 그래야 다음 Step 2에서 Open/Close 위치를 저장하는 화면이 열립니다.

    1. 그리퍼/토글 용도의 DXL 카드를 찾습니다.

      리더 팔에서 손잡이에 달린 모터(ID로 식별)를 확인하세요.

    2. 그 카드의 Set as Toggle Joint 버튼을 누릅니다.

      카드가 일반 슬레이브 슬롯이 아니라 toggle joint 슬롯으로 옮겨갑니다 (내부적으로 is_gripper=true).

    3. 워커에 실제 그리퍼가 있다면 도구 관절(Tool Joint) 체크박스도 사용할 수 있습니다.

      각 슬레이브 조인트 슬롯에는 Tool Joint 체크박스가 있어, 워커 팔의 마지막 관절을 그리퍼로 표시할 수도 있습니다. 워커가 일반 6-DoF 팔이라면 체크하지 않습니다.

Step 2 — 그리퍼 / 토글 위치 저장 (Gripper Setting)

이 단계는 Step 1에서 Toggle Joint로 등록한 모터마다 표시됩니다. 토글 모터가 0개라면 이 화면에는 입력 필드가 없습니다.

    1. 리더 손잡이를 끝까지 엽니다.

    2. Open Position 필드 옆의 Save 버튼을 누릅니다.

      현재 모터 각도가 "열림 위치"로 저장됩니다.

    3. 리더 손잡이를 끝까지 닫습니다.

    4. Close Position 필드 옆의 Save 버튼을 누릅니다.

      "닫힘 위치"로 저장됩니다.

    5. 두 위치가 모두 저장되면 Go Next 버튼이 활성화됩니다.

      Step 2 그리퍼 설정 — 열림 위치 / 닫힘 위치 입력 필드와 각각의 저장 버튼

ROBOTIS OMX 그리퍼 — 스프링백(트리거) 동작

ROBOTIS OMX의 그리퍼 모터는 출고 시 Current-based Position(모드 5) 으로 설정되어 있어요. 이 모드는 Easy Trainer가 자동으로 감지하며, 다음과 같이 트리거 같은 동작을 합니다.

  • 사람이 손잡이를 쥐고 닫으면 그리퍼가 닫힌 상태로 따라옵니다.
  • 손을 떼면 모터가 자동으로 Open 위치로 돌아갑니다 (저장한 Open 값으로 항상 복귀).
  • 즉 마우스 클릭처럼 "누르고 있는 동안 닫힘 / 떼면 열림" 으로 동작합니다.

Position 모드 그리퍼처럼 손잡이를 어느 각도에 두면 그 각도가 그대로 유지되는 방식과 다르므로, OMX 리더를 처음 쓰는 분은 이 차이를 알아두세요. 별도 설정은 필요 없고 모드 감지가 자동으로 이뤄집니다.

Step 3 — 관절 방향 설정 (Direction Setting)

리더와 워커는 같은 형상이라도 모터를 반대로 끼웠거나 좌우 대칭으로 만들어 놓아 회전 방향이 반대인 관절이 흔히 있습니다. 이 단계에서 텔레옵을 켠 채 직접 움직여 보고 부호를 뒤집어 줍니다.

    1. 상단의 Start Teleoperation 버튼을 누릅니다.

      워커가 현재 리더 자세를 따라가기 시작합니다. 버튼은 주황색 Stop Teleoperation으로 바뀝니다.

    2. 리더의 한 관절만 살살 움직여 봅니다.

      예: 리더 1번 관절을 시계방향으로 돌렸을 때 워커도 시계방향으로 도는지 확인.

    3. 반대 방향으로 움직이는 관절은 토글 스위치를 켭니다.

      각 관절 옆 토글은 부호(sign) 1 ↔ −1을 바꿉니다. 토글이 켜진 관절은 부호가 반전됩니다.

    4. 모든 관절을 한 번씩 검증한 뒤 Stop Teleoperation으로 멈추고 Go Next.

      Step 3 관절 방향 설정 — '텔레오퍼레이션 중지' 버튼이 켜진 상태에서 joint1~joint6, gripper 각각의 방향 토글 (joint3 토글이 켜져 있음)

Step 4 — 모션 필터 설정 (Filter Setting)

워커가 리더를 너무 거칠게 따라가거나 너무 느리게 따라가면 여기서 조정합니다.

    1. Start Teleoperation으로 다시 텔레옵을 켭니다.

    2. 세 개의 입력 값을 조정하면서 워커의 반응을 확인합니다.

      항목의미크게 하면작게 하면
      EMA filter (0~1)지수 이동 평균 가중치. 직전 명령을 얼마나 끌고 가는지부드럽지만 지연 ↑빠르지만 거칠어짐
      Max step (rad/tick)한 publish tick에서 허용할 각도 변화량 상한큰 동작도 빠르게 따라감점프를 차단해 안전 ↑
      Publish rate (Hz)워커에게 명령을 보내는 주기반응성 ↑, 부하 ↑부드러움 ↑, 지연 ↑
    3. 만족스러우면 Stop Teleoperation으로 끄고 Finish를 눌러 다이얼로그를 닫습니다.

      Step 4 모션 필터 설정 — EMA 필터(0.2) / 최대 스텝(0.04 rad/tick) / 퍼블리시 주기(100 Hz) 입력 필드와 '완료' 버튼

트러블슈팅

  • 모터가 검출되지 않습니다. 12 V 어댑터가 켜져 있는지, U2D2가 잘 꽂혀 있는지, ls /dev/ttyUSB*로 포트가 보이는지 확인하세요. Easy Trainer는 baudrate를 4 Mbps와 1 Mbps에 한해서 자동으로 시도하므로, 그 외 값(예: 57600)으로 설정된 모터는 R+ Manager로 1 Mbps 또는 4 Mbps로 통일해 주세요.
  • 리더 시작 후 검출까지 좀 걸립니다. baudrate 자동 탐색 때문에 포트별로 4 Mbps → 1 Mbps 순서로 시도합니다. 보통 1.5~3초 정도이며 정상입니다.
  • ttyUSB 포트가 매번 다르게 잡힙니다. udev rule로 시리얼 번호별로 고정 alias(/dev/dxl_left, /dev/dxl_right)를 만드세요. 또는 슬롯의 ttyUSB 버튼으로 매번 순환시켜 맞춥니다.
  • 워커가 시작 직후 갑자기 점프합니다. Step 1의 Origin이 안 맞은 것입니다. 리더와 워커를 같은 자세로 다시 맞추고 Origin을 다시 잡으세요. Step 4의 Max step을 잠시 작게 줄이는 것도 안전합니다.
  • 워커가 리더와 반대로 움직입니다. Step 3의 토글이 누락된 관절입니다. 해당 관절 토글을 켜세요.
  • Toggle Joint 모터가 워커에 영향을 주지 않습니다. 정상입니다. 워커에 그리퍼가 없으면 Toggle Joint는 텔레옵 활성/비활성 트리거로만 쓰입니다.
  • There is no status packet 에러가 자주 떴었습니다. Easy Trainer가 검출 직후 모든 모터의 Status Return Level을 정상값으로 자동 정규화하므로 이 에러는 더 이상 나오지 않아야 합니다. 그래도 동일한 메시지가 보인다면 케이블 접촉/전원을 우선 점검하세요. (특히 ROBOTIS lerobot OMX 코드를 한 번이라도 같은 모터로 돌렸던 경우 해당 모터의 Status Return Level이 비표준 값으로 남아 있을 수 있는데, 이 케이스도 자동 복구 대상입니다.)
  • OMX 리더 팔에서 텔레옵을 끄면 모터가 뻣뻣합니다. OMX의 Current 모드 모터는 sync 동안 임시로 Position으로 전환되지만, 텔레옵이 정상 종료되면 원래 Current 모드로 자동 원복되어 backdrivable로 돌아옵니다. 만약 강제 종료(kill)나 비정상 종료로 끝났다면 모드가 Position에 남아 뻣뻣할 수 있는데, 이 경우 Easy Controller를 한 번 더 시작했다가 정상 종료하면 원복됩니다.
  • 리더 로봇 중지 버튼을 눌렀는데 멈추지 않습니다. 더 이상 발생하지 않아야 합니다. baudrate가 안 맞아 SDK가 busy-loop에 빠지더라도 Stop 신호를 받으면 즉시 중지됩니다. 그래도 멈추지 않으면 ProcessConsole 로그를 확인하고 이슈로 보고해 주세요.