ROS URDF 작성하기
URDF
URDF는 “Unified Robot Description Format”의 줄임말로 로봇모델에 대한 정보들을 명세해놓은 규격서라고 볼수 있다.
로봇개발에 필요한 로봇모델 정보들을 여기에 기록해두고, 해당 정보를 필요로하는 다른 패키지, 노드에서 활용하게 된다.
URDF를 보다 더 잘 이해하기 위해서는 TF를 알고 있으면 좋은데, ROS Wiki에서 튜토리얼을 제공하고 있으니 읽어보자.
Concept
URDF를 통해 우리는 아래의 것들을 표현할 수 있다.
- Kinematic and dynamic description of the robot
- Visual representation of the robot
- Collision model of the robot
위 세가지는 이후 XML 작성시 주로 다루게 되는 중요한 요소들이다. 그리고, 모든 로봇을 다 표현할 수는 없다. 아래의 것들은 현재까지는 지원하지 않는다.
The main limitation at this point is that only tree structures can be represented, ruling out all parallel robots. Also, the specification assumes the robot consists of rigid links connected by joints; flexible elements are not supported.
소개한 세가지 요소를 만족하는 간단한 로봇의 예는 아래 그림처럼 나타낼 수 있다. 로봇을 구성하는 하나의 구성요소를 링크(Link)라고 부르고, 링크와 링크를 연결하는 연결부를 조인트(Joint)라고 부른다. 우리는 링크과 조인트의 조합을 통해 우리가 원하는 형태의 로봇을 URDF를 통해 표현할 수 있다.
Link
링크는 앞서 소개했듯이 로봇을 이루는 구성요소 중 하나다. 링크는 아래의 세가지 속성을 지닌다. 세가지 속성 모두 필수입력 옵션은 아니며, Intertial의 경우 미입력 시 0 mass와 0 inertia 로 생성된다.
- <intertial>
- 링크에 대한 관성 정보다. 링크의 관성 중심과 질량, 관성계수 등을 정할 수 있다. - <visual>
- 시각화 속성으로, Rviz와 같은 시각화 툴을 사용할때 효과적으로 개발할 수 있다. - <collision>
- 물리적인 충돌 속성을 정한다. Visual 속성과 다르게 설정할 수 있다.
예)
Joint
조인트는 링크와 링크를 연결하는 로봇의 구성요소다. URDF 조인트는 6가지 타입을 지원한다. 로봇의 조인트에 맞게 골라 사용하면 된다. 조인트의 경우에도 입력 가능한 속성들이 있으며, 링크와 달리 조인트는 필수입력 속성들도 지닌다.
- <origin>
- 부모(parent) 링크에서 자식(child) 링크에 관한 변환(transform) 정보 - <parent>
- 부모 링크 이름 - <child>
- 자식 링크 이름
그 외 속성들은 모두 필수입력 속성은 아니며, <origin> 또한 링크와 마찬가지로 기본 입력값이 있기 때문에 옵션으로 입력가능하다. 조인트에 맞춰 속성들을 작성해주자.
예)
끝으로..
링크와 조인트 조합으로 필요한 로봇구성을 작성하면 된다. 익히 알려진 형태의 로봇은 대부분 참조할만한 프로젝트들이 있으니 참고하여 개발하자.