로봇, 사기 전에 화면 속에서 먼저 써봤습니다 (3편) — "아무거나 잘 집을 줄 알았다"

상자는 목표 지점으로 옮겨졌습니다. 성공인 줄 알았습니다. 그런데 화면을 확대해 보니, 집게가 상자를 뚫고 들어가 있더군요. 물건을 든 채로 이동하긴 하는데 집게가 상자 속에 박혀 있는 기이한 그림이었습니다. 이번 편은 그 실패담이고, 이 시리즈를 시작한 이유를 가장 정확히 설명해 준 편이기도 합니다.

집을 물건도 없었고, 놓고 나니 잡히지도 않았습니다

처음에는 화면에 팔만 덩그러니 있었습니다. 집을 대상이 없으니 픽앤플레이스가 될 리가 없죠. 당연한 사실인데도 팔을 띄우고 나서야 알았습니다.

MuJoCo는 물리 엔진이라 씬에 물체를 추가하면 됩니다. 다만 물체를 놓는다는 게 그림 하나를 얹는 일이 아니더군요. 크기와 질량, 마찰 계수를 직접 정해 줘야 합니다. 값을 적으면서 처음으로 "내가 집으려는 게 정확히 뭔가"를 스스로에게 물었습니다. 그전까지 제 머릿속의 대상은 그냥 물건이었습니다.

중력과 마찰이 적용되는 상자를 하나 놓았습니다. 밀면 굴러가고, 그리퍼로 누르면 반응하는 진짜 물리 객체죠. 여기까지는 좋았습니다.

그다음 상자를 집으라고 시켰습니다. 그런데 잘 안 잡힙니다. 그리퍼가 헛돌거나, 상자를 밀어 버리거나, 들어도 미끄러집니다. 열 번 시켜서 열 번 다른 방식으로 실패했습니다.

여기서 첫 번째 깨달음이 왔습니다. 로봇 그리퍼로 물건을 잡는다는 것은 생각보다 정밀한 일이더군요. 실제 로봇도 마찬가지라서, 산업 현장에서는 마찰 패드를 붙이거나 진공 흡착으로 바꾸거나 접근 각도를 정교하게 잡아 이 문제를 해결합니다. 카드 한 장을 집는 손끝이 왜 그렇게 어려운 기술인지, 화면 안에서 처음으로 체감했죠.

좌표가 틀린 줄 알았는데, 손가락이 너무 길었습니다

집는 것을 도와주는 보조 장치를 넣어 어찌어찌 옮기는 데는 성공했습니다. 그리고 확대해 보니 앞에서 말한 그 장면이 나왔죠.

처음에는 좌표 계산이 틀렸나 싶었습니다. 목표 자세를 넣는 코드부터 다시 봤고, 숫자를 조금씩 바꿔 가며 열댓 번을 돌렸습니다. 그래도 결과는 같더군요. 그래서 데이터를 직접 뜯어봤습니다. 렌더링은 정확했습니다. 화면이 잘못 그린 게 아니라, 집게가 정말로 상자를 파고들고 있었던 겁니다.

원인을 파고들수록 문제는 코드가 아니라 SO-101 그리퍼의 구조에 있었습니다. SO-101의 집게는 한쪽 손가락만 움직이는 작은 비대칭 구조입니다. 그리고 손가락이 물체를 무는 지점보다 6~7cm나 아래로 길게 뻗어 있습니다.

이 숫자를 테이블 위에 그려 봤습니다. 테이블에 놓인 물건을 이 집게로 물려면, 손끝은 물체를 무는 지점보다 6~7cm 아래에 있어야 합니다. 다시 말해 테이블 표면보다 6~7cm 아래, 곧 테이블 속입니다. 물체 높이가 6~7cm보다 낮으면 그런 자세는 기하학적으로 존재하지 않습니다. 제가 집으라고 놓은 상자는 그 절반도 되지 않았습니다.

손가락이 잡는 점보다 6~7cm 더 길었습니다SO-101 그리퍼 단면을 그려 보니, 낮은 물건은 잡을 자세 자체가 없었습니다그리퍼 단면 (모식도)손목상자테이블 표면잡는 점6~7cm손끝이 테이블 속에 있어야 성립하는 자세입니다충돌 계산을 켜면손끝이 테이블과 부딪히며물체가 튕겨 나갑니다충돌 계산을 끄면막는 것이 없으니 그대로손가락이 물체를 관통합니다물체를 높이고, 얇게 바꾸고, 잡는 높이를 조정해도깨끗하게 집히는 지점은 나오지 않았습니다치수는 TheRobotStudio/SO-ARM100 공식 시뮬레이션 모델 기준이며, 그림은 비율을 과장한 모식도입니다.실물에서는 마찰 패드나 지그로 완화할 여지가 있으나, 손가락 길이라는 구조 자체는 바뀌지 않습니다.Humanoid Now · humanoidnow.kr

켜면 튕기고, 끄면 관통합니다

남은 선택지는 두 개였습니다. 충돌 계산을 켜면 손끝이 테이블과 부딪히면서 물체가 튕겨 나갑니다. 끄면 막는 것이 없으니 손가락이 그대로 물체를 통과합니다. 둘 다 실패죠. 중간이 없었습니다.

물체를 더 높게, 더 얇게 바꿔 보고, 잡는 높이를 조정하고, 위치를 옮겨 봐도 결과는 같았습니다. 이 작은 그리퍼로 상자를 깨끗하게 집을 수 있는 지점은 나오지 않았습니다.

그렇게 며칠이 갔죠. 그런데 그동안 제어에 대해 배운 것은 없었습니다. 물체가 왜 튕기는지, 접촉 계산을 어떻게 조정하는지만 계속 들여다봤을 뿐입니다. 나중에 4편에서 로봇을 고를 때 이 기억이 결정적으로 작용합니다.

정직하게 짚어 둡니다. 위 치수는 공식 시뮬레이션 모델 기준이고, 실물에서는 마찰 패드를 붙이거나 지그를 대서 어느 정도 완화할 여지가 있죠. 다만 손가락이 잡는 점 아래로 길게 뻗어 있다는 구조 자체는 코드로도 패드로도 바뀌지 않습니다. 제가 마주한 것은 설정 문제가 아니라 형상 문제였습니다.

코드로 못 고치는 것이 있습니다

이 삽질에서 배운 것이 사실 이 프로젝트 전체의 목적과 정확히 맞닿아 있더군요. 두 가지로 정리했습니다.

첫째, "아무거나 잘 집겠지"는 착각입니다. 집을 물체의 크기와 모양 하나가 성패를 가릅니다. 큰 상자, 얇은 막대, 공은 각각 다른 그리퍼를 요구합니다. 작업 대상을 정하지 않고 로봇부터 고르면 순서가 뒤집힙니다.

둘째, 기종 선택이 결정적입니다. SO-101은 배우기에는 훌륭하지만 작고 약한 입문용 그리퍼라 상자 픽앤플레이스에는 근본적으로 맞지 않습니다. 이것은 코드로 해결할 버그가 아니라 하드웨어의 성격입니다. 로봇 손의 모터를 팔뚝으로 옮기는 설계 논쟁이 왜 그렇게 치열한지도 같은 맥락에서 이해됐습니다. 손끝의 구조는 나중에 바꾸기 가장 어려운 부분입니다.

제조 현장에서 일하며 배운 것도 사실 같은 이야기였습니다. 공정을 정하지 않고 설비부터 들이면, 그 설비에 공정을 맞추게 됩니다. 그러면 어느 순간 애초에 만들려던 물건이 아니라 설비가 만들 수 있는 물건을 만들고 있죠. 순서가 뒤집히는 겁니다.

만약 제가 이걸 모르고 "픽앤플레이스를 하겠다"며 SO-101을 실물로 샀다면 어땠을까요. 1편에 적은 선반에 물건이 하나 더 늘었을 겁니다. 사기 전에 화면에서 미리 부딪혀 본 덕에 돈을 쓰지 않고 이 사실을 알았습니다.

맺음말

문제가 명확하니 답도 명확합니다. 작업에 맞는 그리퍼를 가진 로봇으로 바꾸면 됩니다. MuJoCo에는 산업용 로봇 모델도 무료로 공개돼 있고, 대칭 평행 그리퍼를 가진 기종이라면 상자를 깨끗하게 뭅니다.

SO-101에서 배운 것은 기본 구동과 코드로 동작을 만드는 법, 그리고 기종과 물체 선택의 중요성입니다. 마지막 항목은 성공했다면 결코 배우지 못했을 것입니다. 어떤 로봇을 어디에 쓸지 고르는 안목. 오늘의 실패가 그 안목의 첫 조각이었습니다. 다음 편에서는 후보를 직접 늘어놓고 다음 로봇을 고릅니다.

참고 자료

  • SO-ARM101(SO-101) 공식 시뮬레이션 모델 · 그리퍼 형상 — TheRobotStudio — 저장소 링크
  • MuJoCo 접촉·마찰 모델 문서 — Google DeepMind — 문서 링크
  • MuJoCo Menagerie — 무료 공개 로봇 모델 모음 — 저장소 링크

이 블로그의 인기 게시물

피지컬 AI, 학계는 아직 이 단어를 쓰지 않습니다

로봇 감속기, 톱니 두 개가 100배를 만듭니다

서보모터는 가만히 있을 때 가장 뜨겁습니다