Skip to content

The relationship among Link, Joint and Axis

kyungmin5257 edited this page Feb 15, 2018 · 10 revisions

Overview

이번 장에서는 Link, Joint, Axis 관계에 대해서 설명 하려고 합니다. 좀 더 명확하게 그 관계에 대한 개념을 잡는 것이 이번장의 목표 입니다. 앞서 튜토리얼에서 만들었던 모바일 로봇을 토대로 설명을 진행 하겠습니다.

1. Link

위 그림에서 보듯이 가제보를 실행하면 중심에 빨간색, 초록색, 파란색의 선이 나오게 되는데 이를 전역좌표로 지칭 하겠습니다. 각 각은 전역좌표의 X(빨간색), Y(초록색), Z(파란색)를 나타나게 됩니다. 링크로 사각형, 구, 원기둥을 생성 할 수 있습니다. 여기에서는 사이즈 0.4X0.2X0.1(m)인 박스를 하나의 링크로 만들었습니다. 기본적으로 만들고자 하는 링크의 기하학적인 중심이 전역좌표에 있다고 생각하면 됩니다. 그 전역좌표에서 X방향으로 0.4m, Y방향으로 0.2m, Z방향으로 0.1m인 사각형이 생성됩니다.

위 그림에서 보듯이 SDF파일에 내가 생성한 Link tag 내의 <pose>0 0 0 0 0 0</pose>를 통해서 위치를 조정 할 수가 있습니다. tag안에 숫자는 x,y,z,Rx,Ry,Rz를 의미합니다. 앞서 기본적으로 링크를 생성할 때는 링크의 기하학적인 중심이 가제보의 전역좌표에 있게 됩니다. 그리고 이 전역좌표와 같은 좌표가 링크에 붙게 됩니다. 이후 pose tag의 값을 변화시키게 되면 가제보의 전역좌표를 기준으로 링크의 중심에 붙은 좌표가 이동하게 됩니다. 가제보에서 Insert 탭에서 내가 만든 모델을 누르면 처음에 가제보의 전역좌표에 위치하게 되고 이후 모델을 이동시켜 내가 원하는 위치에 모델을 위치 시킬 수 있습니다. 위의 그림에서 번호1은 <pose>0 0 0 0 0 0</pose>으로 어떤 변화가 없는 상태 입니다. 번호2는 <pose>0 0 0.05 0 0 0</pose>로 z방향으로 0.05m 만큼 올린 상태입니다. 번호3은 <pose>0 0 0.05 0 0 1.57</pose>만큼 이동시킨 상태입니다. 여기서 회전은 가제보의 전역좌표계 기준으로 링크의 붙어있는 좌표계를 회전하게 됩니다. 여기에서는 전역좌표계의 z방향으로 1.57만큼 링크의 붙어있는 좌표를 회전시켰습니다. 번호4는 <pose>0 0 0.05 0 1.57 1.57</pose> 여기에서 회전은 전역좌표계의 y방향으로 1.57만큼 링크에 붙어 있는 좌표를 회전시키고 다시 전역좌표계의 z방향으로 1.57만큼 링크의 좌표계를 회전시켰습니다.

2. Link - Link 관계

위 그림에서 번호1은 원기둥을 하나의 링크로 그린 것으로 앞서 설명한대로 기본적으로 생성은 원기둥의 기하학적인 중심에 링크 좌표계가 전역좌표계와 동일하게 붙게 됩니다. 번호2는 사각형 박스와, 원기둥을 각 각 링크로 그린 것입니다. 최초 생성시 두 링크의 기하학적인 중심이 가제보에 전역좌표에 있다고 생각하겠습니다. 사각형 박스의 Link tag 내에 pose는 <pose>0 0 .1 0 0 0</pose>로 사각형 박스의 링크 좌표계가 전역좌표계 기준으로 z방향으로 0.1m만큼 이동하게 됩니다. 왼쪽 바퀴 원기둥 Link tag 내에 pose는 <pose>0.1 0.13 0.1 0 1.5707 1.5707</pose>으로 전역좌표계 기준으로 링크의 좌표계를 회전한 후 x,y,z만큼 이동하게 됩니다. 이렇게 두 링크의 관계가 정해지게 되고 이후 두 링크가 결합된 모델을 가제보내에서 원하는 위치에 놓을 수 있게 됩니다.

3. Link - Joint 관계, Joint - Axis 관계

위 그림에서 보듯이 왼쪽 바퀴와 오른쪽 바퀴가 각 각의 링크로 각 링크에 조인트가 붙어 있고 그 조인트에 회전축이 설정 되어 있습니다.

왼쪽 바퀴에 붙어 있는 조인트의 SDF 코드는 아래와 같습니다.

      	<joint type="revolute" name="left_wheel_hinge">
        	<pose>0.03 0 -0.03 0 0 0</pose>
        	
		<child>left_wheel</child>
        	<parent>chassis</parent>
        	<axis>
          		<xyz>0 1 0</xyz>
        	</axis>
      	</joint>

최초에 조인트에 붙어 있는 좌표계는 child로 지정 해놓은 왼쪽 바퀴에 붙어 있는 링크 좌표계와 동일합니다. 여기에서 pose tag를 보면 왼쪽 바퀴의 링크 좌표계 기준으로 조인트의 좌표계가 x방향으로 0.03m, z방향으로 -0.03m 이동 되었습니다.

주의해야 할 점은 회전축은 가제보의 전역좌표계 기준으로 설정 된다는 것입니다. 여기에서 axis tag를 보면 전역좌표계의 x방향으로 0m, y방향으로 1m, z방향으로 0m를 가르키는 방향 벡터가 조인트의 좌표에 붙게 되고 이 방향벡터를 기준으로 회전축이 설정 됩니다.

오른쪽 바퀴에 붙어 있는 조인트의 SDF 코드는 아래와 같습니다.

      	<joint type="revolute" name="right_wheel_hinge">
        	<pose>0 0 0.03 0 0 0</pose>
        	
		<child>right_wheel</child>
        	<parent>chassis</parent>
        	<axis>
          		<xyz>3 1 0</xyz>
        	</axis>
      	</joint>

최초에 조인트에 붙어 있는 좌표계는 child로 지정 해놓은 오른쪽 바퀴에 붙어 있는 링크 좌표계와 동일합니다. 여기에서 pose tag를 보면 왼쪽 바퀴의 링크 좌표계 기준으로 조인트의 좌표계가 z방향으로 0.03m 이동 되었습니다.

axis tag를 보면 전역좌표계의 x방향으로 3m, y방향으로 1m, z방향으로 0m를 가르키는 방향 벡터가 조인트의 좌표에 붙게 되고 이 방향벡터를 기준으로 회전축이 설정 됩니다.

Table of Contents




Clone this wiki locally