mjfit
MuJoCo용 정확한 볼록 충돌 형상: 페그, 구멍, 나사산, 기어
라이선스
MIT
개요
mjfit은 MuJoCo의 조립 작업을 위한 충돌 형상을 생성하는 Python 라이브러리입니다. 임의의 윤곽에서 페그와 그 구멍, 볼트와 너트, 또는 서로 맞물리는 기어 한 쌍을 만들며, 각각을 합집합이 정확히 그 부품이 되는 볼록 조각들로 구성합니다. MIT Pulkit Agrawal의 Improbable AI Lab에서 논문 Blind Precise Assembly: Proprioceptive Sim-to-Real Peg-in-Hole for Diverse Parts의 정책을 학습시키기 위해 작성되었으며, MIT 라이선스로 GitHub에 공개되어 있습니다.
해결하는 문제는 구체적입니다. MuJoCo는 볼록 형상끼리만 충돌을 계산하는데, 구멍은 오목합니다. 일반적인 해결책은 CoACD나 V-HACD를 이용한 근사 볼록 분해, 또는 메시에 대한 MuJoCo의 부호 거리장(SDF) 충돌입니다. 볼록 분해는 조립 작업이 의존하는 바로 그 틈새를 메워 버리고, SDF 충돌은 더 느리며 접촉을 놓칩니다. mjfit은 대신 구멍 주변의 판을 볼록 쐐기로 자르고, 페그를 구멍을 틈새만큼 안쪽으로 오프셋한 형상으로 만들며, 나사산과 기어 이빨을 볼록 단면에서 스윕하여 만듭니다. 그래서 페그의 모든 모서리가 구멍 모서리에서 정확히 틈새 하나만큼 떨어져 있고, MuJoCo는 모든 조각을 네이티브로 충돌 계산합니다. 곡선은 그것에 외접하는 다각형이 되므로, 둥근 구멍이 도면보다 작아지는 일은 없습니다.
각 생성기는 Python이나 mjfit 명령줄에서 MJCF 문자열을 반환하며, 윤곽과 치수가 매개변수이므로 한 번의 학습에 수천 가지 서로 다른 조립품을 담을 수 있습니다. 프로젝트 페이지에서는 논문의 정책과 mjfit의 비교 실험을 브라우저에서 실시간으로 실행합니다.
mjfit에는 세 가지 생성기가 있습니다. mjfit.peg는 구멍 또는 페그 중 하나의 윤곽을 꼭짓점 목록이나 mjfit.shapes의 도형(원, 직사각형, 스타디움, 사다리꼴, 정다각형, 별, 임의의 다각형, 모서리가 둥근 베지어 윤곽, 또는 CSV 파일)으로 받아, 나머지 하나를 간극만큼 정확히 오프셋한 형상으로 만듭니다. 옵션으로 USB 텅이나 커넥터 핀처럼 구멍 안에 서 있는 재료(이 경우 페그는 그 주위를 감싸는 속이 빈 셸이 됨), 더 넓은 그립 부분, 최소 테두리를 갖춘 볼록한 바깥 플레이트, 막힌 구멍, 고정된 페그 질량을 추가할 수 있습니다. mjfit.thread는 ISO 미터, 사다리꼴, ACME, 사각, 버트레스, 원형 와이어 또는 사용자 정의 나사산 프로파일로 볼트와 너트를 만들며, 한 줄 또는 여러 줄, 왼나사 또는 오른나사를 지원합니다. mjfit.gear는 힌지에 달린 인볼류트 치형의 스퍼 기어 또는 맞물리는 기어 쌍을 만들며, 모터를 선택적으로 추가할 수 있습니다. 각 이는 하나의 볼록 프리즘입니다.
구성은 생성기의 인자를 담은 YAML 파일이며, 패키지에는 바로 쓸 수 있는 구성이 포함되어 있습니다. 원, 별, USB-A, USB-C, HDMI, RJ45, D-sub(DB9), XLR3 페그, M10 및 M6 나사와 FurnitureBench 다리, 여러 기어 쌍입니다. 학습용으로는 mjfit.sample_pegs가 두 계열(모서리가 둥근 무작위 볼록 윤곽, 또는 구멍 안에 최대 세 개의 섬이 있는 기본 도형)에서 재현 가능한 무작위 조립체를 뽑고, mjfit.grid가 여러 조립체를 이름이 절대 충돌하지 않게 하나의 씬에 배치합니다.
출력은 바로 사용할 수 있습니다. 모든 geom은 단단한 접촉 설정을 가진 기본 클래스에 속하고, 파일은 단독으로 실행하거나 더 큰 씬에 포함할 수 있으며, USD 변환기가 필요로 할 때는 메시를 OBJ 파일로 출력할 수 있습니다. 저장소의 벤치마크는 간극이 20 µm까지 작은 16 mm 원형 또는 사각 페그에서 mjfit을 CoACD, V-HACD, MuJoCo의 메시 SDF와 CPU 및 MuJoCo Warp를 사용한 GPU에서 비교하며, 모든 수치를 재현하는 명령을 함께 제공합니다.
중요한 이유
접촉이 많은 조립은 시뮬레이션에서 학습하기 가장 어려운 작업 중 하나이며, 가장 어려운 부분은 학습 자체보다 형상인 경우가 많습니다. 시뮬레이션 속 구멍이 실제보다 작거나, 거칠거나, 느리면 그 위에서 학습한 정책은 잘못된 것을 배웁니다. mjfit은 정확하고 빠르며 절차적으로 변형된 페그, 구멍, 나사산, 기어를 MuJoCo 사용자 누구에게나 pip install 한 번으로 제공하며, GPU에서 대규모 학습을 하는 MuJoCo Warp에서도 쓸 수 있습니다. 이 도구가 만들어진 논문은 그것이 무엇을 가능하게 하는지 보여 줍니다. 전적으로 시뮬레이션에서 학습한 블라인드 삽입 정책이 실제 로봇 팔로 이전되어, 본 적 없는 모양의 페그를 삽입합니다.
해결하는 문제
MuJoCo는 볼록 형상끼리만 충돌을 계산하므로, 구멍이 있는 판은 근사해야 합니다. 볼록 분해는 페그 삽입, 나사 체결, 기어 맞물림 작업이 의존하는 틈새를 막아 버리고, 거리장 충돌은 느리며 접촉을 놓칩니다. mjfit은 합집합이 정확히 부품이 되는 볼록 조각으로 각 부품을 만들어 틈새를 유지하고, 매개변수로 수천 가지 다양한 조립품을 생성합니다.
핵심 요점
- 합집합이 정확히 부품이 되는 볼록 조각으로 MuJoCo용 페그와 구멍, 볼트와 너트, 맞물리는 기어를 만든다
- 페그의 모든 모서리가 구멍 모서리에서 정확히 틈새 하나만큼 떨어져 있고, 원은 외접 다각형이 되므로 구멍이 도면보다 작아지지 않는다
- 저장소 벤치마크에 따르면 CPU에서 페그와 구멍은 MuJoCo 메시 SDF보다 한 자릿수 빠르게 시뮬레이션되며, 정확도는 같거나 더 높다
- 실제 커넥터와 체결 부품 설정 포함: USB-A, USB-C, HDMI, RJ45, D-sub, XLR, M10과 M6 나사산, 기어 쌍
- 절차적 샘플링으로 한 번의 학습에 쓸 재현 가능한 조립품 수천 개를 생성
- MIT 논문 Blind Precise Assembly를 위해 만들어졌으며, 그 삽입 정책은 시뮬레이션에서 실제 팔로 이전된다
대상
- MuJoCo나 MuJoCo Warp에서 조립, 삽입, 나사 체결, 기어 맞물림 정책을 학습시키는 연구자
- 좁고 정확한 틈새를 가진 다양한 부품이 대량으로 필요한 로봇 학습 팀
- 오목한 부품에서 볼록 분해나 SDF 충돌의 한계에 부딪힌 시뮬레이션 엔지니어
- 접촉이 많은 조작을 배우며 바로 쓸 수 있는 커넥터와 체결 부품 모델을 찾는 학생
한계
- 초기 릴리스: 버전 0.1.0으로 저자 한 명이 관리하며, PyPI가 아닌 GitHub에서 설치한다
- MuJoCo 전용이며, 다른 시뮬레이터는 접촉 모델이 아니라 OBJ 파일 형태의 메시만 받는다
- 임의의 CAD 모델이 아니라 매개변수형 부품(페그와 구멍, 나사산, 평기어)만 생성한다
- 강한 접촉에는 1 ms 이하의 시간 간격이 필요하고, 힌지 위의 기어에는 기본 Newton 솔버 대신 MuJoCo의 PGS 솔버가 필요하다
- 나사산 쐐기는 나선의 이산화로 재료가 약간 줄어들므로, 나사산은 그 공차 범위에서만 정확하다