프로젝트 URDF 제작

이준혁·2024년 12월 1일

manipulator

목록 보기
2/2
post-thumbnail

이번 블로그는 현재 진행하는 프로젝트에 사용되는 로봇팔을 제작하기위해 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

  <!-- 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로 구성한 대로 잘 움직이는 것을 확인할수 있었다.

profile
#자기공부 #틀린것도많음 #자기개발 여러분 인생이 힘들다 하더라도 그것을 깨는 순간 큰 희열감으로 옵니다~

0개의 댓글