산업용 로봇 전문가, 예술가, 그리고 방송인

미국에서 학교다닐 때, scheduling 과목 교수한테 들은 재미있는 이야기.  

“scheduling은 sex와 같다”

이게 무슨 말인가 하면, 모든 사람이 약간의 경험은 있고 자기가 전문가라고 주장하지만, 대상이 다르기 때문에 객관적으로 실력을 비교하기가 어렵기 때문이란다.

산업용 로봇 분야은 이런 분야와는 달리 실력을 평가할 수 있는 간단한 방법이 있다. 

현재 많이 판매되는 산업용 로봇을 개발했으면,  “산업용 로봇 전문가”. 

“나도 옛날에 해 봤는 데” 하면서 자신이 전문가라 주장하면 , “고장난 전직 엔지니어”. 

연구, 개발만 하거나 이런저런 논문을 열심히 쓰고 있으면,  마음 속에  “자신만의 로봇”을 만들고 있는 “예술가”.

로봇 들고 예능 프로에 나오는 사람은 출연료 받는  “방송인”.       

“웃자고 하는 이야기에 죽자고 달려들면”, 이 건 재미없는 이야기가  되겠지요.  

우리도 산업용 로봇 개발합니다

옛날 이야기 하나.  

10년 쯤 전에 어떤 회사 사장님이 그 회사에서 수입 판매하던 일본 로봇 제어기를 가리키면서 말하기를, “김박사, 우리 저런 거 만들수 있나?”

“그런 말을 20년 전에도 들었는데요.”

“누가 그런 말을 했는 데 ?”

“20년 전에도 고 교수님이 PUMA 560 robot을 가리키면서, “이 봐 자네들. 내 평생 소원이야. 저런 거 하나 만들어 줘” 하셨는데요.”

(그 후 PUMA 560 robot을 역설계해서 scara robot을  개발했고, 국내  대기업 A가 이를 상품화하였다).     

“기능 구현은 문제가 아닌 데,  만들어도 사람들이 사겠습니까 ?”

(당시 그 회사의 brand power를 고려하면, …)

“한 반값이면 사지 않을까?”

“판매 물량이 적어서  그렇게 싸게 만들기 어려울텐데요.”

그 사장님이 잠시 생각하더니, 다시 물었다. 

“그럼 어떻게 해야 되는 데 ?”

(몇 년 후, 그 회사는 더 이상 일본 회사의 로봇 제어기를 구매하지 않게 되었다). 

 

다른 이야기.

몇 년 전 국내  대기업 B에서 그룹 차원의 로봇 개발을 담당한다는 분을 만났는 데, 하는 말이 “우리도 kinematics, dynamics 이런 건 다 아는 데, 제어 소프트웨어는 어떻게 해야 하는 지 모르겠어요.” 

(음, 참신한 용어.  연구원 중에 로봇해 본 사람이 없나 ?)

“그 부서 연구원 중에  몇 명이나 로봇 개발에 참여하고 있나요 ?”

“직접 로봇 개발에 참여하는 사람은 20명 쯤 되지요”

“그 중 산업용 로봇 개발해 본 사람은 몇 명인데요 ?”

“직접 로봇 개발해 본 사람은 없지만, 로봇에 들어가는 기술은 다 해 본 사람들이지요”

(어!!!  만들어 본 사람도 없는 데  필요한 기술을 다 안다고.)

아직까지 조용한 걸 보니 다른 걸 개발하시나 ?   

 

기존 산업용 로봇에 대한 이해가 부족한 상태에서,  이것 저것 사다가 붙이고, 외주 업체 하청 주고,  프로그램 좀 짜서 로봇이 30분 정도 “움직이면”,  개발 성공했다고 언론사 기자 부르고, 참여 연구원들 표창받고, 다음 정부 과제 또 따고, 회사 주가도 좀 오르고.

과연 그렇게 개발 과시용으로 만든 걸 실제 판매할 수 있을까 ? 지난 30년 동안 국내 로봇 회사와 연구소가 개발 성공했다고 전시회에서 보여 준 다양한 로봇들은 과연 어디로 갔을까  ?  

Ethercat digital IO test with Beckhoff modules

beckhoff-digital-io-1

  • Hardware setup:
    – EK1100 ethercat coupler.
    – Four EL2008 modules for 32-bit digital output.
    – Four EL1018 modules for 32-bit digital input.
    – Two DC 24V SMPS
  • Software setup:
    (1) Debian Jessie and Xenomai dual kernel.
    (2) Ubuntu 14.04 and RT-preempt kernel.
    (3) Debian Wheezy and RTAI dual kernel.
  • Test result: cycle-time 190 us in DC mode.

URDF model of a PUMA 560 robot

<?xml version="1.0"?>
<robot name="PUMA560">

 <material name="color3">
     <color rgba="0.4 0.4 0.4 1"/>
  </material>

  <material name="color4">
     <color rgba="0.7 0.7 0.7 1"/>
  </material>

  <link name="base_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link0.dae" />
      </geometry>
      <material name="color3" />
    </visual>

    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link0-convex.dae" />
      </geometry>
    </collision>
  </link>

  <joint name="J1" type="revolute">
    <parent link="base_link"/>
    <child  link="Link1"/>
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="56" lower="-2.792526803" upper="2.792526803" velocity ="1.92" />
  </joint>

  <link name="Link1">
    <visual>
      <origin xyz="0 0 0.664" rpy="-1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link1.dae" />
      </geometry>
      <material name="color4" />
    </visual>

    <collision>
      <origin xyz="0 0 0.664" rpy="-1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link1-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="0 0 0.664" rpy ="0 0 0" />
        <mass value="0" /> 
	<inertia ixx="0" ixy="0" ixz="0" iyy="0.35" iyz="0" izz="0" />	
    </inertial>
  </link>

  <joint name="J2" type="revolute">
    <parent link="Link1"/>
    <child  link="Link2"/>
    <origin xyz="0 0 0.664" rpy="-1.570796 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="97" lower="-3.892084232" upper="0.750491578" velocity ="1.51" />
  </joint>

  <link name="Link2">
    <visual>
      <origin xyz="0.4318 0 0.129100" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link2.dae" />
      </geometry>
      <material name="color4" />
    </visual>

    <collision>
      <origin xyz="0.4318 0 0.129100" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link2-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="0.13 0.524 0.539" rpy ="0 0 0" />
        <mass value="17.4" /> 
	<inertia ixx="-0.3638" ixy="0" ixz="0" iyy="0.006" iyz="0" izz="0.2275" />	
    </inertial>
  </link>

  <joint name="J3" type="revolute">
    <parent link="Link2"/>
    <child  link="Link3"/>
    <origin xyz="0.4318 0 0.1291" rpy="0 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="52" lower="-0.907571211" upper="4.049163865" velocity ="2.40" />
  </joint>

  <link name="Link3">
    <visual>
      <origin xyz="-0.020300 0 0" rpy="1.570796327 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link3.dae" />
      </geometry>
      <material name="color4" />
    </visual>

    <collision>
      <origin xyz="-0.020300 0 0" rpy="1.570796327 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link3-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="-0.0203 -0.0141 0.07" rpy ="0 0 0" />
        <mass value="4.8" /> 
	<inertia ixx="0.066" ixy="0" ixz="0" iyy="0.086" iyz="0" izz="0.0125" />	
    </inertial>
  </link>

  <joint name="J4" type="revolute">
    <parent link="Link3"/>
    <child  link="Link4"/>
    <origin xyz="-0.0203 0 0" rpy="1.570796 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="10" lower="-1.919862177" upper="3.141592654" velocity ="5.34" />
  </joint>

  <link name="Link4">
    <visual>
      <origin xyz="0 0 0.433100" rpy="-1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link4.dae" />
      </geometry>
      <material name="color3" />
    </visual>

    <collision>
      <origin xyz="0 0 0.433100" rpy="-1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link4-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="0 0.19 0" rpy ="0 0 0" />
        <mass value="0.82" /> 
	<inertia ixx="1.8e-3" ixy="0" ixz="0" iyy="1.3e-3" iyz="0" izz="1.8e-3" />	
    </inertial>
  </link>

  <joint name="J5" type="revolute">
    <parent link="Link4"/>
    <child  link="Link5"/>
    <origin xyz="0.0 0.0 0.4331" rpy="-1.570796 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="10" lower="-1.745329252" upper="1.745329252" velocity ="5.09" />
  </joint>

  <link name="Link5">
    <visual>
      <origin xyz="0 0 0" rpy="1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link5.dae" />
      </geometry>
      <material name="color4" />
    </visual>

    <collision>
      <origin xyz="0 0 0" rpy="1.570796 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link5-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="0 0 0" rpy ="0 0 0" />
        <mass value="0.34" /> 
	<inertia ixx="0.3e-3" ixy="0" ixz="0" iyy="0.4e-3" iyz="0" izz="0.3e-3" />	
    </inertial>
  </link>

  <joint name="J6" type="revolute">
    <parent link="Link5"/>
    <child  link="Link6"/>
    <origin xyz="0 0 0" rpy="1.570796 0 0"/>
    <axis   xyz="0 0 1"/>
    <limit  effort="10" lower="-4.64257581" upper="+4.64257581" velocity ="5.74" />
  </joint>

  <link name="Link6">
    <visual>
      <origin xyz="0 0 0.04125" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link6.dae" />
      </geometry>
      <material name="color3" />
    </visual>

    <collision>
      <origin xyz="0 0 0.04125" rpy="0 0 0"/>
      <geometry>
        <mesh filename="file:///root/puma-urdf/vrml/link6-convex.dae" />
      </geometry>
    </collision>

    <inertial>
	<origin xyz="0 0 0.032" rpy ="0 0 0" />
        <mass value="0.09" /> 
	<inertia ixx="0.15e-3" ixy="0" ixz="0" iyy="0.15e-3" iyz="0" izz="0.04e-3" />	
    </inertial>
  </link>

</robot>