frax
빠르고 미분 가능한 로봇 기구학, 동역학, 역기구학을 위한 JAX 라이브러리
라이선스
MIT
개요
frax는 스탠퍼드 대학교 Autonomous Systems Lab이 JAX 위에 만든 순수 Python 로봇 기구학·동역학 라이브러리입니다. URDF로부터 좌표 변환, 야코비안, 질량 행렬, 중력 항과 코리올리 항, 순동역학과 역동역학을 계산하며, 모두 JIT 컴파일되고 미분 가능합니다. 일반적인 제어기는 CPU에서 수 마이크로초 수준으로 동작하고, 같은 코드로 GPU나 TPU에서 수천 대의 로봇을 일괄 처리할 수 있습니다. 버전 0.2.0에는 ElastiQP 솔버를 기반으로 한 미분 역기구학 및 리타기팅 도구인 frax.ik가 추가되었습니다.
frax는 스탠퍼드 대학교 Autonomous Systems Lab의 Daniel Morton과 Marco Pavone이 만든 로봇 기구학 및 강체 동역학 라이브러리로, JAX 위에서 순수 Python으로 작성되었습니다. URDF나 Franka Panda, Unitree G1 같은 내장 모델에서 로봇을 불러온 뒤 관절·링크·프레임 변환, 야코비안, 질량 행렬, 중력 항과 코리올리 항, 순동역학과 역동역학을 구할 수 있습니다. 각 항이 JAX 함수이므로 JIT 컴파일하고, CPU·GPU·TPU에서 실행하고, 여러 로봇에 한꺼번에 벡터화하고, 자동 미분으로 미분할 수 있습니다.
저자들은 두 가지 작업을 겨냥합니다. 로봇 한 대를 제어할 때는 CPU가 일반적인 제어기의 항들을 수 마이크로초 수준으로 계산하며, 논문은 이를 킬로헤르츠 제어 주기에 해당한다고 봅니다. README는 이 경우 GPU가 있어도 CPU를 쓰라고 권장합니다. 일괄 처리에서는 같은 코드가 GPU에서 초당 1억 회가 넘는 동역학 계산에 이릅니다. Franka Panda/FR3와 Unitree G1용으로 미리 만들어진 구 기반 충돌 모델을 쓰면, 제어기에 자기 충돌 회피와 장애물 회피를 로봇 기구학의 간단한 함수로 추가할 수 있습니다.
버전 0.2.0(2026년 11월 4일)에는 frax.ik가 추가되었습니다. mink와 pink와 같은 방식의 미분 역기구학 도구이지만, 미분 가능하며 같은 연구실의 QP 솔버 ElastiQP를 기반으로 합니다. ElastiQP는 제약 조건이 서로 충돌해도 해를 유지합니다. 온라인 제어와 원격 조작은 1,000 Hz 이상, 오프라인 모션 리타기팅은 초당 100,000 프레임 이상으로 처리합니다. 문서에서는 사람 동작 데이터셋 LAFAN1 전체를 CPU 하나로 약 4초 만에 Unitree G1에 리타기팅합니다. 설치는 pip install "frax[ik]"입니다.
중요한 이유
로봇 제어 코드는 보통 Pinocchio 같은 빠른 C++ 동역학 라이브러리와 JAX 기반 GPU 시뮬레이터 중 하나를 골라야 합니다. frax는 동역학 항 자체를 미분 가능한 JAX 함수로 제공하며, CPU 하나에서 빠르고 가속기에서 일괄 처리도 됩니다. 그래서 같은 모델을 실시간 제어기, 그래디언트가 필요한 최적화, 대규모 리타기팅 작업에 모두 쓸 수 있습니다. frax.ik로 mink, PyRoki와 함께 휴머노이드 리타기팅을 위한 오픈 선택지가 되었으며, 동작 데이터셋 전체를 처리하는 일을 일상적인 작업으로 만드는 속도를 갖추었습니다.
해결하는 문제
킬로헤르츠 제어에 충분히 빠르고, 최적화를 위해 미분 가능하며, 대규모 일괄 처리를 위해 병렬화되는 로봇 기구학과 동역학을 얻으려면 보통 여러 라이브러리를 조합해야 합니다. frax는 이 세 가지를 하나의 Python 로봇 모델에서 모두 제공합니다.
핵심 요점
- URDF에서 얻은 기구학·동역학 항을 JIT 컴파일되고 미분 가능한 JAX 함수로 제공
- CPU에서는 제어기 항을 수 마이크로초에, GPU 일괄 처리에서는 초당 1억 회가 넘는 동역학 계산
- 0.2.0의 frax.ik: 항상 해가 존재하는 ElastiQP 솔버 기반의 미분 역기구학과 리타기팅, 오프라인 초당 100,000 프레임 이상
- 자기 충돌 및 장애물 회피를 위한 Franka Panda/FR3와 Unitree G1용 구 기반 충돌 모델
- MIT 라이선스, PyPI 패키지 이름은 frax, 논문은 arXiv(2604.04310)
대상
- Python으로 역기구학, 역동역학, 안전 필터 제어기를 설계하는 제어 연구자
- 사람 동작 데이터를 Unitree G1 같은 휴머노이드에 리타기팅하는 로봇 학습 그룹
- GPU나 TPU에서 미분 가능하거나 일괄 처리되는 강체 동역학이 필요한 개발자
한계
- 현재는 URDF만 지원하며, MJCF 지원은 저자들의 할 일 목록에 있습니다
- 충돌 형상은 구여야 하므로 다른 로봇은 먼저 구 기반 충돌 모델이 필요합니다
- 닫힌 기구학 체인은 지원하지 않으며, 관절은 회전, 직선, 고정, 부유 베이스만 지원합니다
- 그리퍼 등 주 체인 밖의 관절은 사용 전에 URDF에서 fixed로 설정해야 합니다
- 성능은 JAX 버전과 설정에 따라 달라지며, README는 CPU 전용 동역학에 JAX 0.4.30을 권장합니다
- 인터페이스가 아직 바뀌고 있으며, 0.2.0에서 부유 관절 규약과 일부 이름이 변경되었습니다