3.1 SO-101 기구학 모델
3.1.1 링크, 관절, 구동기의 구분
URDF(Unified Robot Description Format)는 로봇을 링크(link)와 관절(joint)의 트리로 표현한다. SO-101의 일반적인 의미론적 관절 순서는 다음과 같다.
| 순서 | 의미 | 대표 이름 | 역할 |
|---|---|---|---|
| 1 | 베이스 회전 | shoulder_pan | 작업 공간의 방위각 변경 |
| 2 | 어깨 굽힘 | shoulder_lift | 팔의 높이와 반경 변경 |
| 3 | 팔꿈치 굽힘 | elbow_flex | 도달 거리 변경 |
| 4 | 손목 피치 | wrist_flex | 그리퍼 접근 각도 변경 |
| 5 | 손목 롤 | wrist_roll | 그리퍼 축 주위 회전 |
| 6 | 그리퍼 | gripper | 손가락 개폐, 팔의 pose DoF에는 미포함 |
이름은 LeRobot/URDF 버전에 따라 다를 수 있다. 이름을 정수 인덱스로 암묵적으로 치환하지 말고, 항상 메시지의 name 배열을 기준으로 재정렬한다. JointState의 position[i], velocity[i], effort[i]는 같은 인덱스의 name[i]에 대응하며, 각 배열은 비어 있을 수 있다. 타임스탬프는 모든 관절 값이 획득된 시각 또는 가능한 한 가까운 시각을 나타내야 한다.[ROS 2 JointState 명세]
3.1.2 URDF에서 읽어야 할 정보
회전 관절의 핵심 URDF 요소는 다음과 같다.
<joint name="elbow_flex" type="revolute">
<parent link="upper_arm"/>
<child link="forearm"/>
<origin xyz="0 0 0.115" rpy="0 0 0"/>
<axis xyz="0 1 0"/>
<limit lower="-1.6" upper="1.6" effort="..." velocity="..."/>
</joint>
origin은 부모 링크에서 관절 프레임으로 가는 고정 변환이다.axis는 관절 프레임에서 표현된 회전축이다.lower,upper는 radian 단위의 위치 한계다.velocity와effort는 허용 가능한 변화율과 힘/토크 한계를 표현한다.
공식 SO-ARM100 저장소는 새로운 캘리브레이션 모델에서 관절 가상 영점(virtual zero)을 범위 중앙에 두며, 과거 모델은 팔을 수평으로 편 자세를 영점으로 사용한다. 서로 다른 영점 규약의 URDF와 캘리브레이션 JSON을 섞으면 같은 숫자가 다른 실제 자세를 의미한다.[TheRobotStudio, 2026]
3.1.3 URDF에서 USD Articulation으로
OpenUSD의 UsdPhysicsArticulationRootAPI는 여러 강체와 관절을 축약 좌표(reduced coordinate) 관절계로 묶는다. 회전 관절은 축, 상·하한, 위치/속도 드라이브의 강성(stiffness)과 감쇠(damping)를 가진다. URDF를 Isaac Sim으로 가져올 때 다음을 검토한다.
- 단위: URDF 길이는 관례상 m, 각도는 radian이다. USD 스테이지의
metersPerUnit, 회전 관절 한계의 단위와 임포터 변환을 확인한다. - 축과 부호: 화면에서 회전 방향만 보고 맞다고 판단하지 말고, 작은 양의 관절 명령으로 축을 검증한다.
- 루트: 고정 베이스인지 부유 베이스(floating base)인지 명시한다.
- 질량과 관성: 시각 메시만 있는 링크에 임의의 물리 질량이 생성되지 않았는지 확인한다.
- 충돌 형상: 시각 메시와 충돌 메시를 분리한다. 복잡한 삼각 메시를 동적 충돌체로 그대로 쓰지 않는다.
- 드라이브: 너무 큰 stiffness는 수치적으로 불안정하거나 실물보다 과도하게 단단한 응답을 만든다.
- Mimic/그리퍼: 단일 구동기로 양쪽 손가락을 묶는 관계가 임포트 후 유지되는지 확인한다.
USD Physics 명세는 관절계 루트, 관절, 강체 목록으로 articulation을 구성하며 회전 관절 한계와 드라이브를 명시한다.[OpenUSD, 2026]