로봇 손이 물체에 닿자, 문제는 팔에서 전신으로 번졌습니다 — 접촉을 하나씩 빼며 확인한 것

지난 글에서 손목을 정해진 위치로 옮기는 것까지는 통과했고, 실제로 물체에 닿아 쥐려는 순간 멈춰 섰다고 적었습니다. 그 뒤로 이어서 확인한 것을 남깁니다. 결론부터 말하면 아직 풀리지 않았습니다. 다만 실패가 어디에 있는지는 조금 더 좁혀졌고, 그 과정에서 제가 던지던 질문의 형태가 바뀌었습니다.

진행 중인 기록입니다. 이 글은 결론이 아니라 앞선 매니퓰레이션 기록의 후속 중간 보고입니다. 모두 시뮬레이션 안에서의 결과이고, 원인이 확정된 항목은 아직 없습니다.

위치를 맞추는 일과 잡는 일은 다른 문제입니다

밖에서 보면 “손을 뻗어 물건을 쥔다”는 하나의 동작입니다. 그런데 제어하는 쪽에서 보면 이건 최소한 네 개의 서로 다른 문제가 이어 붙은 것입니다.

첫째, 손을 목표 지점으로 보내는 일. 이건 기하학 문제에 가깝습니다. 목표 좌표가 주어지면 관절 각도를 계산해 그쪽으로 보내면 됩니다. 둘째, 손의 방향을 물체에 맞추는 일. 같은 지점에 도달해도 손이 엉뚱한 각도로 향하고 있으면 쥘 수 없습니다. 셋째, 닿은 뒤에도 그 접촉을 유지하는 일. 여기서부터는 위치가 아니라 힘의 문제로 바뀝니다. 얼마나 눌러야 미끄러지지 않고, 얼마나 눌러야 물체가 밀려나지 않는가. 넷째, 실제로 들어올리는 일. 이때는 물체의 무게가 로봇 전체의 균형에 되돌아옵니다.

이 구분을 굳이 적어 두는 이유가 있습니다. 첫 번째 단계는 이미 통과했기 때문입니다. 손목을 원하는 좌표로 보내는 것은 됩니다. 그래서 이걸 “잡기에 성공했다”로 세고 싶은 유혹이 생깁니다. 하지만 나머지 세 단계는 전부 접촉이 생긴 다음에 시작되고, 지금 막혀 있는 곳은 정확히 그 이후입니다. 손목 도달을 파지 성공으로 표현하지 않는다는 기준은 그대로 유지하고 있습니다.

코드를 한 군데 고쳤지만, 그것으로 태스크가 통과하지는 않았습니다

제어 계산 경로에서 고쳐야 할 곳을 하나 찾아 수정했습니다. 그런데 수정한 뒤에도 접촉이 있는 조작 시도는 여전히 종료 조건을 넘지 못했습니다.

그래서 이번에는 코드 수정의 타당성과 태스크 성공을 따로 판정했습니다. 이게 당연한 얘기처럼 들리지만, 실제로는 잘 지켜지지 않습니다. 무언가를 고치고 나면 그 방향으로 좋아졌을 거라고 믿게 되고, 다음 실패를 “아직 다른 데도 남아 있어서”라고 설명하게 됩니다. 고친 것은 고친 것대로 맞고, 태스크는 여전히 실패입니다. 두 문장을 한 문장으로 합치지 않는 것이 이번에 지킨 규칙이었습니다.

접촉을 하나씩 빼 보았습니다

게인이나 계수를 더 만지는 대신, 실패하는 조건에서 접촉을 하나씩 제거하고 무엇이 남는지를 봤습니다. 세 가지 조건을 비교했습니다.

조건 관측 여기서 말할 수 있는 것
태스크 접촉을 전부 제거 제어 계산이 중단 없이 끝까지 진행됨 계산 구조 자체가 무조건 깨지는 것은 아님. 단, 물체를 잡을 접촉까지 함께 사라졌으므로 조작 성공에서는 명시적으로 제외
테이블과의 충돌만 제거 실패가 그대로 남음 실패가 테이블 하나로 환원되지는 않음. 다만 테이블의 영향이 전혀 없다고 결론 내릴 근거도 아님
물체의 고정을 해제 실패. 다만 보고된 제약 항목이 이전과 다름 이전과 같은 현상으로 단정할 수 없음. 물체가 움직이면 목표 자체가 달라지므로 비교 해석에 주의가 필요

세 번째 조건이 특히 까다로웠습니다. 물체를 고정해 두면 실험이 단순해지지만 현실과 멀어지고, 고정을 풀면 현실에 가까워지는 대신 물체가 움직이는 순간 손이 가야 할 목표도 함께 움직입니다. 실패했다는 사실은 같아도 그 실패가 같은 원인인지 아닌지를 판정하기가 훨씬 어려워집니다. 실제로 보고된 제약 항목이 달랐고, 그래서 “같은 벽에 다시 부딪혔다”고 쓰지 않았습니다.

접촉 없이 얻은 안정성을 성공으로 세지 않은 이유

위 표에서 겉보기에 가장 좋은 결과는 첫 번째 조건입니다. 중단 없이 끝까지 갔으니까요. 그런데 그 조건에서는 물체를 잡을 접촉도 함께 없앴습니다. 접촉이 없는 조작은 조작이 아닙니다.

이런 종류의 함정을 지난 기록에서 이미 한 번 겪었습니다. 그때는 팔에 내려가는 명령이 내부적으로 끊겨 있어서, 팔이 사실상 움직이지 않은 채로 “균형을 지켰다”는 결과가 나왔습니다. 지표만 보면 성공이었고, 실제로는 아무 일도 일어나지 않은 것이었습니다. 지표가 좋아지는 조건 중 일부는 문제를 푼 게 아니라 문제를 화면 밖으로 치운 것입니다. 접촉을 제거한 진단은 그 자체로 유용하지만, 그 결과를 성공 칸에 적어 넣는 순간 다음 판단이 전부 틀어집니다.

질문이 바뀌었습니다

이번 비교에서 얻은 가장 큰 소득은 답이 아니라 질문의 형태였습니다.

그전까지 제가 던지던 질문은 “어떤 값을 더 조절해야 통과할까”였습니다. 게인을 올릴까, 여유를 줄까, 속도를 낮출까. 접촉 조건을 나눠서 본 뒤에는 이 질문이 “예측한 움직임과 실제 움직임이 처음 갈라지는 그 순간에, 어떤 접촉이 있었고 목표가 어떻게 변했나”로 바뀌었습니다.

앞의 질문은 답이 무한합니다. 조절할 값은 언제나 하나 더 있고, 어떤 조합에서는 지표가 조금 좋아지기 때문에 계속할 명분도 생깁니다. 뒤의 질문은 그렇지 않습니다. 갈라지는 시점은 하나뿐이고, 그 시점의 접촉 상태와 목표 변화는 확인할 수 있는 대상입니다. 이건 원인을 찾았다는 뜻이 아닙니다. 어디를 봐야 하는지가 정해졌다는 뜻입니다.

지금 서 있는 자리

현재 경계선을 정리하면 이렇습니다. 지정한 조건에서 검증해 보존한 보행 기준점이 있습니다. 골반을 고정한 시뮬레이션에서 물체를 집고 놓은 제한된 기록도 있습니다. 반대로 자유롭게 서 있는 로봇의 전체 조작은 아직 통과하지 못했고, 이동한 뒤 잡고 옮겨 돌아오는 연속 태스크도 완성되지 않았습니다.

앞선 글에서 다뤘던 언어 모델에게 로봇 팔을 직접 맡긴 외부 평가에서도 가져다 놓는 과제와 맞물리게 하는 과제 사이에 큰 계단이 있었습니다. 전혀 다른 접근인데 막히는 자리가 비슷하다는 점은 계속 눈에 밟힙니다. 다만 사례 두 개로 일반화할 수 있는 이야기는 아니고, 지금은 제 쪽 실패의 시점을 정확히 짚는 것이 먼저입니다.

다음 글에서는 예측과 실제가 갈라지는 그 지점을 어떻게 관측했는지, 그리고 그 관측이 원인을 하나로 좁혀 주었는지를 이어서 남기겠습니다. 좁혀지지 않았다면 그것도 그대로 적겠습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤