
이번 블로그는 현재 진행하는 프로젝트에 사용되는 로봇팔을 제작하기위해 urdf을 직육면체를 활용해서 기다 디자인을 구사하였다.

로봇팔은 다이나믹셀 AX-12A로 구현하였고 openmanipulator-x의 외형을 모티브 삼아 제작하였다.
하단 urdf 파일에 대한 설명이 있을건데 그 부분은 살짝 미숙할수 있지만 양해 부탁한다.
현재 우리가 제작한 로봇팔은 base_link, link1,2,3,4로 제작하였다. 그뜻은 joint가 필요한 부분은 총 4개가 된다
<?xml version="1.0"?>
<robot name="three_dof_arm">
이부분은 버전 부분과 현재 이름을 기입한다
<!-- Material definitions -->
<material name="blue">
<color rgba="0 0 1 1"/>
</material>
<material name="orange">
<color rgba="1 0.5 0 1"/>
</material>
<material name="green">
<color rgba="0 1 0 1"/>
</material>
<material name="red">
<color rgba="1 0 0 1"/>
</material>
각부위에 색깔을 정하기 위해 작성하였다. 이 부분에서는 보면
총 4가지의 색을 사용하였고 각 색의 이름과 rgba 값을 사용하여 (red, green, blue, alpha)값을 가진다. alpha가 1이 되면 불투명한다.
<!-- Base link -->
<link name="base_link">
<visual>
<geometry>
<cylinder radius="0.088" length="0.049"/>
</geometry>
<material name="blue"/>
</visual>
<collision>
<geometry>
<cylinder radius="0.088" length="0.049"/>
</geometry>
</collision>
<inertial>
<mass value="1"/>
<inertia ixx="0.05" ixy="0" ixz="0" iyy="0.05" iyz="0" izz="0.1"/>
</inertial>
</link>
상단은 base_link에 대한 설명이다.
외부 부터 설명하겠다
link : 하나의 링크를 정의
visual : 시각적 요소 부분으로 들어가는 부분입니다
geometry : 형상적인 부분으로 들어가서 크기를 나타냅니다
현재 cylinder로 원기둥을 뜻하고 반지름이 0.088m, 높이 길이가 0.049를 뜻한다.
그외로 box, sphere, cylinder, 그리고 mesh가 있으니 잘 찾아보고 쓰기를 바란다.
다음 상단에 언급한 material부분은 색깔을 지정하는것이다.
다음 collision 부분이다. 이 부분같은경우 충돌요소를 뜻하는 부분으로 또 한번의 geomerty 부분을 사용하여 충돌요소를 넣는 것이다.
다음 inertial이다. 이부분은 관성특성을 정의 하는 부분으로 현재 이부분은 1kg을 뜻하는 것이다.
inertial 이란 부분은 관성 모멘트에 대한 설정이다.
이 부분은 링크가 특정 축을 기준으로 회전할때 저항하는 정도를 나타내는 것으로 로봇의 회전 운동 방적식을 계산할때 사용된다. ixx, iyy, izz 등의 값으로 사용되는데
ixx, iyy, izz: 각각 X, Y, Z 축 기준으로 회전할 때의 관성 모멘트
ixy, ixz, iyz: 축 간 관성 커플링 값으로 나온다.
<!-- Link 1 -->
<link name="link1">
<visual>
<origin xyz="0 0 0.035" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.03"/>
</geometry>
<material name="orange"/>
</visual>
<collision>
<origin xyz="0 0 0.045" rpy="0 0 0"/>
<geometry>
<box size="0.03 0.03 0.03"/>
</geometry>
</collision>
<inertial>
<origin xyz="0 0 0.035" rpy="0 0 0"/>
<mass value="1"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
</inertial>
</link>
이부분은 base link와 유사하다.
이렇게 link까지 설정하고 다음 joint 부분을 이야기하겠다.
<!-- Joint 1 -->
<joint name="joint1" type="revolute">
<parent link="base_link"/>
<child link="link1"/>
<origin xyz="0 0 0.008" rpy="0 0 0"/>
<axis xyz="0 0 1"/>
<limit lower="-3.14159" upper="3.14159" effort="10" velocity="1"/>
</joint>
이 부분에서도 joint의 이름을 기입하고 tyepe은관절의 종류를 기입한다.
관절의 종류는
revolute: 회전 관절로, 지정된 축을 중심으로 회전이 가능합니다.
fixed: 고정 관절(움직이지 않음).
prismatic: 선형 운동 관절(직선 운동).
continuous: 제한 없는 회전 관절(무제한 회전).
이렇게 있다.
다음 parent 링크적인 부분은 부모링크로써 child 즉 자식 링크와 연결되는 것을 의미한다.
origin 같은경우 관절의 위치와 방향을 설정하는것으로 xyz 관절의 위치를 기입하고 관절의 외전방향을 작성한다. 현재 rpy 값이 0 0 0은 회전없이 기본 방향을 따르는것을 알수 있다.
axis는 관절의 회전 축을 정의하는것으로 0 0 1 즉 z축을 중심으로 회전하는 것을 알수 있다.
마지막 limit값은
lower : 관절이 회전할 수 있는 최소 각도-3.14159 → -180°
upper : 관절이 회전할 수 있는 최대 각도를 기입한다 3.14159 → +180°
effort : 관절에 가해질 수 있는 최대 토크를 기입하는 것으로 현재 10Nm으로 나오고 velocity에 대한것은 관절의 최대 회전 속도를 나오게 한다.
현재 1은 최대 1 rad/s의 속도로 회전한다.
그렇게 설계된 파일을 확인해 보도록 해보겠다.


유사하게 구현이 되었다.

물론 joint로 구성한 대로 잘 움직이는 것을 확인할수 있었다.