콘텐츠로 이동
GitHub

Hermit 과 teleoperation

Hermit 은 Pinkrab 팔의 gripper 와 같은 claw, jaw, 카메라를 손잡이에 단 handheld 입니다. 카메라가 claw 를 기준으로 팔과 같은 자리에 있어서, Hermit 으로 작업하며 찍은 영상은 팔이 같은 자세에서 찍을 영상과 같습니다. 그래서 로봇 없이 사람 손으로 모은 시연으로 policy 를 학습할 수 있는데, 이것이 UMI(Universal Manipulation Interface)의 방식입니다. 같은 Hermit 을 들고 팔을 직접 움직이는 teleoperation 과 실행 중의 교정도 합니다.

부품 역할
claw, jaw 팔의 gripper 와 같은 형상입니다. jaw 는 검지로 여닫습니다
그리퍼 카메라 팔과 같은 AR0234 global shutter 어안 카메라(200°)로, policy 가 보는 영상을 찍습니다
jaw 서보 STS3215 를 모터가 아니라 각도 센서로 씁니다. calibration 때 jaw 를 닫은 tick 과 연 tick 을 기록해 두고, 그 사이의 위치를 열림 0–1 로 읽습니다
UMI 마커 30 mm 정사각형 면 18개로 된 다면체(rhombicuboctahedron)로, 그중 16면에 ArUco 마커 타일을 끼웁니다. 왼손은 id 0–15, 오른손은 16–31 이라 어느 손인지는 마커가 정합니다

탑 카메라(global shutter AR0234, 1920×1200, 60 fps 요청에 실제 약 50 fps, 노출 10 ms 고정)가 매 프레임 ArUco 마커의 모서리를 찾습니다. 각 마커가 다면체의 어느 면에 붙어 있는지 알기 때문에, 보이는 모든 모서리로 PnP 를 풀어 카메라에 대한 다면체의 pose 를 한 번에 구합니다. 재투영 오차가 3.5 px 를 넘는 풀이는 버립니다.

평면 마커 하나는 +θ 와 −θ 로 기운 두 pose 가 거의 같은 그림을 만듭니다(twofold ambiguity). 70 cm 거리에서 30° 기운 25 mm 마커라면 두 pose 의 차이가 0.6 px 정도라 모서리 검출 잡음에 묻히고, pose 가 프레임마다 뒤집힐 수 있습니다. 다면체는 서로 45° 꺾인 면이 두 개 이상 함께 보이므로 pose 가 하나로 정해집니다.

다면체의 pose 에 손잡이 설계에서 정해진 변환(solid_T_tcp)을 곱하면 Hermit tool 중심(TCP)의 pose 가 됩니다. 탑 카메라는 노출을 10 ms 로 고정합니다. 자동 노출은 어두운 방에서 노출을 20–33 ms 로 늘려 움직이는 손을 번지게 하고, 밝기를 계속 바꾸면서 가장자리 면의 검출을 깜박이게 만들기 때문입니다.

팔은 Hermit 이 있는 자리가 아니라 Hermit 이 움직인 만큼을 따라갑니다. 따라가기 시작한 순간의 팔 tool pose 를 T_start, Hermit tool pose 를 H_0 이라 하면, 그 뒤 매 프레임의 팔 목표는 다음과 같습니다.

Δ = H_0⁻¹ · H_t Hermit 이 움직인 양, H_0 의 tool frame 기준
T_target = T_start · Δ 팔 tool 에 같은 양을 그 tool frame 기준으로

Δ 는 Hermit 자신의 frame 에서 잰 변화라서 Hermit 이 앞으로 5 cm 가면 팔의 tool 도 자기 앞쪽으로 5 cm 갑니다. 두 pose 를 같은 frame 에서 쟀다면 그 frame 이 어디에 있든 Δ 는 같지만, 따라가는 동안 그 frame 이 움직이면 그만큼 Hermit 이 움직인 것으로 보입니다. 탑 카메라는 시연자 머리에 달려 고개와 함께 움직이므로, Hermit pose 를 카메라 frame 이 아니라 책상에 놓인 테이블 마커 frame 에서 잽니다. 그래서 고개를 돌려도 팔은 움직이지 않고, 테이블 마커는 책상 어디에 두어도 되지만 화면에서 사라지면 Hermit 이 보여도 그 팔은 멈춥니다.

  • 기준 다시 잡기: Hermit 이 0.5 초 넘게 보이지 않으면 그 팔은 멈추고, 다시 보인 자리가 새 H_0, 그때 팔의 자리가 새 T_start 가 됩니다. 손이 닿지 않는 곳까지 팔을 보낼 때 Hermit 을 가렸다가 편한 자리에서 다시 보이게 하는 것이 이 동작입니다.
  • 왼팔: description 이 오른팔의 거울상이라 왼팔 tool frame 은 접근 축을 중심으로 반 바퀴 돌아 있습니다. 왼팔에는 Δ 를 그만큼 돌려 적용합니다.
  • 떨림: 손을 멈추고 있어도 추적 잡음이 1 mm, 0.5° 정도 있고, IK 가 이것을 관절에서 수 도로 키웁니다. pose 를 0.1 초 시간 상수로 평활한 뒤 따라갑니다.
  • jaw: Hermit jaw 의 열림 비율을 팔 jaw 의 가동 범위에 그대로 옮깁니다.

T_target 은 differential IK 한 step(track())으로 관절각이 됩니다. 매 프레임 직전의 관절각에서 이어 풀기 때문에, 같은 목표를 두 번 풀었을 때 다른 자세로 튀는 일이 없습니다. 이 손목은 위치와 자세를 모두 정확히 맞출 수 없는 자리가 많아 위치를 우선합니다. 자세의 가중치는 0.1 로, ready 자세에서 80 mm 움직이며 15° 흔드는 동작에서 자세는 5° 까지 양보하고 위치는 14 mm 안에 둡니다.

IK 가 낸 관절 명령은 첫 구동의 safety gate 를 거쳐 관절 범위, 책상·보드와의 충돌, 관절 속도(초당 300° 이하)를 검사받은 뒤에야 서보에 갑니다. gate 는 이 명령도 policy 의 명령처럼 shaping 해서, 탑 카메라가 초당 30번 푸는 pose 가 계단처럼 끊기지 않고 마커를 놓쳤다 다시 찾을 때도 팔이 가속도를 줄였다 늘리며 멈추고 출발합니다. 상한은 가속도 900 °/s², jerk 15000 °/s³ 이고, jaw 는 손이 잡고 놓는 순간을 그대로 따르도록 속도 상한만 지킵니다.

실행 중 policy 에게서 넘겨받는 교정(DAgger)도 같은 상대 방식을 씁니다. 차이는 두 가지입니다.

  • 넘겨받은 직후에는 팔이 Hermit 을 따라가지 않고 서 있습니다. 손에 든 Hermit 을 팔이 tool 을 쥔 모양과 비슷하게 맞춘 뒤 페달 1 로 따라가기 시작해야, Δ 의 축이 팔의 축과 맞습니다.
  • jaw 는 policy 가 마지막으로 보낸 열림을 유지하다가 Hermit 의 열림이 그 값에 닿은 뒤부터 따라갑니다. 물체를 쥔 팔을 넘겨받는 순간 jaw 가 열리지 않게 하기 위해서입니다.

teleoperation 과 교정에서 테이블 마커는 Hermit 의 움직임을 재는 기준일 뿐이라 어디에 두어도 됩니다. 테이블 마커의 자리가 의미를 갖는 곳은 시연을 로봇 좌표계에 놓을 때입니다.

시연할 때 Pinkrab 은 그 자리에 없으므로 시연 속 Hermit 의 위치를 로봇 기준으로 직접 잴 방법이 없습니다. 그래서 시연자의 가슴을 로봇 보드의 자리로 보기로 하고, 시연자 바로 앞에 둔 테이블 마커를 두 팔 사이 보드 앞에 있는 것으로 계산합니다. 테이블 마커에 대한 Hermit 의 pose 에 이 변환을 곱하면 로봇 base frame 의 pose 가 됩니다.

쓰는 곳 하는 일
시연 판정 로봇 좌표로 옮긴 두 손의 궤적을 두 팔의 IK 로 따라가 보고, 팔이 자리에 못 미치거나 튀거나 책상에 닿는 프레임의 비율로 시연을 판정합니다. 관절 한계에 닿은 채 따라가는 프레임은 경고로만 표시합니다
Convert 매 프레임 그 프레임의 테이블 마커로 탑 카메라의 자리를 잡아 Hermit pose 를 테이블 마커 frame 으로 표현합니다. 학습에 쓰는 동작은 프레임 사이의 상대 변화라서 이 frame 은 상쇄되고, 절대 pose 는 pose.tcp_<hand> 로만 따로 남습니다
실행 시작 자세 시연들의 첫 자세를 평균해 로봇 좌표로 옮기고, policy 를 실행하기 전에 두 팔을 그 자리로 보냅니다

시연 판정과 시작 자세는 모두 이 규약에 기대므로, 테이블 마커를 시연자에게서 멀리 둔 시연은 팔이 보드에서 그만큼 먼 자리에서 일하는 시연이 됩니다.