2016년 1월 13일 수요일

메이커가 알아야 할 볼트 규격표

프레임을 제작할 때, 알뉴미늄 프로파일 등의 결속을 위해서는 볼트 너트가 중요하다.


다음 링크는 볼트 규격 표이다.

육각 머리 볼트 (KS B 1002-86 JIS B 1180-1994)


________________________________________________________________________________________________
태    나사의 호칭
d
d1HBC
D
R
(최소)
da
(최대)
k
자리붙이
머리일때
S길이
통나사 가는나사  h
D1
최소
l≤125일때130~220l≥220일
육각볼트
M3x0.5-325.56.45.30.13.60.6125~32
(M3.5)-3.52.466.95.80.14.10.6145~32
M4x0.7-42.878.16.80.24.70.8146~40
(M4.5)-4.53.289.27.80.25.20.8166~40
M5x0.8-53.589.27.80.25.70.90.47.2167~50
M6-641011.59.80.256.810.49187~70
(M7)-751112.710.70.257.810.4102011~100
M8M8 * 185.5131512.60.49.21.20.411.72211~100
M10M10 * 1.251071719.616.50.411.21.50.415.82614~100
M12M12 * 1.251281921.9180.614.220.617.6303618~140
(M14)(M14 * 1.5)1492225.4210.616.220.620.4344020~140
M16M16 * 1.516102427.7230.618.220.622.3384422~140
(M18)(M18 * 1.5)18122731.2260.62.22.50.625.6424825~200
M20M20 * 1.520133034.6290.82242.50.628.5465228~200
(M22)(M22 * 1.5)22143237310.824.42.50.630.4505628~200
M24M24 * 224153641.6340.826.430.634.2546030~220
(M27)(M27 * 2)27174147.339130.4360667935~240
M30M30 * 230194653.144133.43.566728540~240
(M33)(M33 * 2)33215057.748136.43.572789145~240
M36M36 * 336235563.553139.4478849750~240
(M39)(M39 * 3)39256069.357142.44849010350~240
M42-42266575621.245.64.5909610955~325
(M45)-45287080.8671.248.64.59610211555~325
M48-48307586.5721.652.6510210812160~325
(M52)-52338092.4771.656.65116129130~400
M56-56358598.1822635.5124137130~400
(M60)-603890104872675.5132145130~400
M64-644095110922716140153130~400
(M68)-6843100115972756148161130~400
-M72 * 672451051211022796156169130~400
-(M76 * 6)76481101271072836164177130~400
-M80 * 680501151331122876172185130~400
육각볼트
M6-641011.59.80.256.810.49187~70
(M7)-751112.710.70.257.810.4102011~100
M8M8 * 185.5131512.60.49.21.20.411.72211~100
M10M10 * 1.251071719.616.50.411.21.50.415.82614~100
M12M12 * 1.251281921.9180.614.220.617.6303618~100
(M14)(M14 * 1.5)1492225.4210.616.220.620.4344020~140
M16M16 * 1.516102427.7230.618.220.622.3384422~140
(M18)(M18 * 1.5)18122731.2260.620.22.50.625.6424825~200
M20M20 * 1.520133034.6290.822.42.50.628.5465228~200
(M22)M22 * 1.522143237310.824.42.50.630.4505628~200
M24M24 * 224153641.6340.826.430.634.2546030~220
(M27)(M27 * 2)27174147.339130.4360667935~240
M30M30 * 230194653.144133.43.566728540~240
(M33)(M33 * 2)33215057.748136.43.572789145~240
M36M36 * 236235563.553139.4478849750~240
(M39)(M39 * 3)39256069.357142.44849010350~240
M42-42266575621.245.64.5909610955~325
(M45)-45287080.8671.248.64.59610211555~325
M48-48307586.5721.652.6510210812160~325
(M52)-52338092.4771.656.65116129130~400
M56-56358598.1822635.5124137130~400
(M60)-603890104872675.5132145130~400
M64-644095110922716140153130~400
(M68)-6843100115972756148161130~400
-M72 * 672451051051022796156169130~400
-(M76 * 6)76481101271072836164177130~400
-M80 * 680501151331122876172185130~400
육각볼트
보통
M6-641011.59.80.257.21187~70
(M7)-751112.710.70.258.212011~100
M8M8 * 185.5131512.60.410.21.22211~100
M10M10 * 1.251071719.616.50.412.21.52614~100
M12M12 * 1.251281921.9180.615.22303618~100
(M14)(M14 * 1.5)1492225.4210.617.22344020~140
M16M16 * 1.516102427.7230.619.22384422~140
(M18)(M18 * 1.5)18122731.2260.621.22.5424825~200
M20M20 * 1.520133034.6290.824.42.5465228~200
(M22)M22 * 1.522143237310.826.42.5505628~200
M24M24 * 224153641.6340.828.43546030~220
(M27)(M27 * 2)27174147.339132.4360667935~240
M30M30 * 230194653.144135.43.566728540~240
(M33)(M33 * 2)33215057.748138.43.572789145~240
M36M36 * 236235563.553142.4478849750~240
(M39)(M39 * 3)39256069.357145.44849010350~240
M42-42266575621.248.64.5909610955~325
(M45)-45287080.8671.252.64.59610211555~325
M48-48307586.5721.656.6510210812160~325
(M52)-52338092.4771.662.65116129130~400
형 태보통나사가는나사d1HBC
D
R
(최소)
da
(최대)
k
h
D1
최소
l≤125일때130~220l≥220일때길이
나사의 호칭
d
자리붙이
머리일때
S
____________________________________________________________________________________________________
길이 ℓ 의 기본 치수
5, 6, (7), 8, (9), 10, (11), 12, 14, 16, (18), 20, (22), 25, (28), 30, (32), 35, (38), 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, (95), 100, (105), 110, (115), 120, (125), 130, 140, 150, 160, 170, 180, 190, 200, 220, 240, 260, 280, 300, 325, 350, 375, 400
수나사부의 유효 단면적 및 인장 하중 (미터보통나사일 경우) ㎏ (참고)
__________________________________________________________________________________________________________________
나사의
호칭
피치
유효
단면적
볼트의 강도 구분
4.6
4.8
(4T)
5.6
5.8
(5T)
6.8
(6T)
(7T)8.810.912.94.6, 4.85.6, 5.86.88.810.912.9
최소 인장 하중최대 인장 하중
M3 * 0.50.55.03200250300350400500600280350400500600700
M3.50.66.78270340405470540680815370470540680815950
M4 * 0.70.78.78350440525610700875105048061070087510501230
M4.50.7511.345056568079090011301360620790900113013601580
M5 * 0.80.814.25707108509901140142017007809901140142017001990
M6120.1800100012001410160020002400111014101600200024002800
M7128.91150145017302020230029003470159020202300290034704000
M81.2536.61450183022002560290036504300201025602900365043005100
M101.558.02300290035004060460058006950319040604600580069508100
M121.7584.33350421050505900670084001000046405900670084001000011800
M14211546005750690080809001150013800633080809200115001380016100
M1621576300785094001100012600157001880086401100012600157001880022000
M182.5192770096001150013500154001920023000106001350015400192002300026900
M202.52459800122001470017100196002450029400135001710019600245002940034300
M222.530312100151001820021200242003030036400167002120024200303003640042500
M24335314100176002120024700282003530042300194002470028200353004230049400
M27345918400230002760032200367004590055000252003220036700459005500064300
M303.556122400280003360039200448005610067300309003920044800561006730078500
M333.569427800347004160048600555006840083300382004860055500694008330097000
M364817327004080049000572006530084700980004490057200653008170098000114400
M39497639000488005850068300780009760011700053700683007800097600117000136700
M424.511214480056100673007850089700112100134500617007850089700112100134500179400
M454.51306522006530078400914001045001306001567007180091400104500130600156700209000
M485147347800737008840010310011780014730017680081000103100117800147300176800235700
M5251758703008790010550012310014060017580021100096700123100140600175800211000281300
M565.5203081200101500121800142100162400203000243600111700142100162400203000243600324800
M605.5236294500118100141700165300189000236200283400129900165300189000236200283400377900
M6462676107000133800160600187300214100267600321100147200187300214100267600321100428200
M686305512220015280018330021390024440030550036600168000213900244400305500366600488800
나사의 호칭피치
유효단면적
최소 인장 하중최대 인장 하중
4.6
4.8
(4T)
5.6
5.8
(5T)
6.8
(6T)
(7T)8.810.912.94.6, 4.85.6, 5.86.88.810.912.9
볼트의 강도 구분
__________________________________________________________________________________________________________________
수나사부의 유효단면적 및 인장 하중 (미터가는나사일 경우) ㎏ (참고)

__________________________________________________________________________________________________________________
나사의
호칭
피치
유효
단면적
볼트의 강도 구분
4.6
4.8
(4T)
5.6
5.8
(5T)
6.8
(6T)
(7T)8.810.912.94.6
4.8
5.6
5.8
6.88.810.912.9
최소 인장 하중최대 인장 하중
M8 * 1139.21570196023502740310039004700216027403100390047005500
M10 * 1.251.2561.22400306037004280490061007350337042804900610073508550
M12 * 1.251.2592.13700460055006450740092001100050706450740092001100012900
M14 * 1.51.512550006250750082701000012500150006880872010000125001500017500
M16 * 1.51.516767008350100001170013400167002000091901170013400167002000023400
M18 * 1.51.52168600108001290015100172002160025800119001510017200216002580030200
M20 * 1.51.527210900136001630019000218002720032600156001900021800272003260038000
M22 * 1.51.533313300166002000023300266003330040000183002330026600333004000046600
M24 * 2238415400192002300026900307003840046000211002690030700384004600053800
M27 * 2249619900248002980034700397004960059500273003470039700496005950069500
M30 * 2262124800310003730043500497006210074500342004350049700621007450087000
M33 * 22761304003800045600533006080076100914004190053300608007610091400106500
M36 * 3386534600432005190060500692008650010400047600605006920086500104000121000
M39 * 3310304150051900618007200082500103000124000567007200082500103000124000144000
M72 * 663460138400173000207600242200276800346000415200190300242200276800346000415200553600
M76 * 663889155600194500233300272200311100388900466700213900272200311100388900466700622200
M80 * 664344173800217200260600304100347500434400521300238900304100347500434400521300695000
나사의 호칭피치
유효단면적
최소 인장 하중최대 인장 하중
4.6
4.8
(4T)
5.6
5.8
(5T)
6.8
(6T)
(7T)8.810.912.94.6
4.8
5.6
5.8
6.88.810.912.9
볼트의 강도 구분
_______
출처 - http://boltmall.co.kr/library/standard/





























2016년 1월 2일 토요일

Processing 기반 LED dot 매트릭스 그래픽 만들기

LED dot 매트릭스 그래픽을 프로세싱 기반으로 만들어 본다.



이 내용은 다음 레퍼런스를 참고하였다.



PGraphics circles;

void setup() {
  size(100, 100);
  circles = createGraphics(width, height); circles.beginDraw();
  circles.background(0);
  circles.noStroke();
  circles.fill(255, 100); circles.endDraw();
  noCursor();
} 

void draw() {
  image(circles, 0, 0);
  stroke(255);
  line(mouseX, 0, mouseX, height);
  line(0, mouseY, width, mouseY);
}

void mousePressed() {
  circles.beginDraw();
  circles.ellipse(mouseX, mouseY, 40, 40);
  circles.endDraw();
}

Processing 과 Arduino 간 시리얼 통신 방법

이 내용은 프로세싱에서 얻은 데이터를 아두이노에 보내, 전자 장치를 제어한다던지, 반대로, 아두이노에 연결된 전자 장치로 부터 얻은 데이터를 프로세싱에 보내, 그래픽 등을 생성한다던지 할 때 필요한 내용이다.

스파크펀에는 이와 관려된 아주 좋은 튜토링얼이 있다. 다음 링크를 참고하기를 바란다.



아울러, 프로세싱 기반 전자 공작을 위한 내용은 아래 링크를 살펴보길 바란다.




Processing + Kinect + Syphon을 사용한 VPT 프로젝션 맵핑

Processing + Kinect + Syphon을 사용한 VPT 프로젝션 맵핑을 위해서는, 다음 프로그램 및 라이브러리가 필요하다.
  • Processing 2.2
  • OpenNI 1.96 for Processing
  • Syphon library for Processing (Processing에서 Add library 메뉴에 Syphon 를 검색해 바로 설치할 수 있다)
이를 이용하면, 키넥트를 통해, Processing에서 취득한 3D 포인트 클라우드 데이터를 Syphon을 통해, VPT 7에 출력할 수 있다. 아두이노와 연계한다면, 인터렉티브한 프로젝션 맵핑이 가능하다.


다음은 이와 관련된 소스 코드이다. 


import codeanticode.syphon.*;
import SimpleOpenNI.*;

PGraphics canvas;
SyphonServer server;

SimpleOpenNI context;
float        zoomF =0.3f;
float        rotX = radians(180);  // by default rotate the hole scene 180deg around the x-axis, 
                                   // the data from openni comes upside down
float        rotY = radians(0);

void setup()
{
  size(640, 480,P3D);
  canvas = createGraphics(640, 480, P3D);
  server = new SyphonServer(this, "Processing Syphon by mac");

  context = new SimpleOpenNI(this);
  if(context.isInit() == false)
  {
     println("Can't init SimpleOpenNI, maybe the camera is not connected!"); 
     exit();
     return;  
  }
  
  // disable mirror
  context.setMirror(false);

  // enable depthMap generation 
  context.enableDepth();

  canvas.stroke(255,255,255);
  canvas.smooth();
  canvas.perspective(radians(45),
              float(width)/float(height),
              10,150000);
}

void draw()
{
  // update the cam
  context.update();

  canvas.beginDraw();
  
  canvas.background(0,0,0);

  canvas.translate(width/2, height/2, 0);
  canvas.rotateX(rotX);
  canvas.rotateY(rotY);
  canvas.scale(zoomF);

  int[]   depthMap = context.depthMap();
  int     steps   = 3;  // to speed up the drawing, draw every third point
  int     index;
  PVector realWorldPoint;
  canvas.translate(0,0,-1000);  // set the rotation center of the scene 1000 infront of the camera

  canvas.stroke(255);

  PVector[] realWorldMap = context.depthMapRealWorld();
  
  // draw pointcloud
  canvas.beginShape(POINTS);
  for(int y=0;y < context.depthHeight();y+=steps)
  {
    for(int x=0;x < context.depthWidth();x+=steps)
    {
      index = x + y * context.depthWidth();
      if(depthMap[index] > 0)
      { 
        // draw the projected point
//        realWorldPoint = context.depthMapRealWorld()[index];
        realWorldPoint = realWorldMap[index];
        canvas.vertex(realWorldPoint.x,realWorldPoint.y,realWorldPoint.z);  // make realworld z negative, in the 3d drawing coordsystem +z points in the direction of the eye
      }
      //println("x: " + x + " y: " + y);
    }
  } 
  canvas.endShape();
  
  // draw the kinect cam
  // context.drawCamFrustum();
  
  
  canvas.endDraw();
  image(canvas, 0, 0);
  server.sendImage(canvas);
}


void keyPressed()
{
  switch(key)
  {
  case ' ':
    context.setMirror(!context.mirror());
    break;
  }

  switch(keyCode)
  {
  case LEFT:
    rotY += 0.1f;
    break;
  case RIGHT:
    // zoom out
    rotY -= 0.1f;
    break;
  case UP:
    if(keyEvent.isShiftDown())
      zoomF += 0.02f;
    else
      rotX += 0.1f;
    break;
  case DOWN:
    if(keyEvent.isShiftDown())
    {
      zoomF -= 0.02f;
      if(zoomF < 0.01)
        zoomF = 0.01;
    }
    else
      rotX -= 0.1f;
    break;
  }
}




2015년 11월 14일 토요일

로봇암 움직이는 기구학/역기구학과 ROS MoveIt

ROS로 로봇암을 움직이는 MoveIt에 대해, 잘 설명한 글을 링크한다.

1. 기구학/역기구학 개념
일반적으로, 로봇암은 회전각 을 제어하는 모터로 구성된다. 하지만, 우리가 원하는 것은 로봇암의 End effector 를 정확한 x, y, z 위치와 effector의 자세각을 제어하는 것이다.

그러므로, 로봇암을 제어하는 문제는 다음 수식과 같이 회전각 공간을 위치와 자세각으로 표현되는 작업공간으로 행렬변환하는 문제가 된다.



이는 기하학적인 운동을 계산하는 것이므로, 기구학(FK. Forward Kinematic), 역기구학(RK. Reverse Kinematic)이라 칭한다.

좌표를 변환할 때 주로 사용하는 것은 동차행렬이며, 이는 4x4 행렬로 표현될 수 있다. 한 행렬안에, 이동, 회전, 스케일을 모두 표현할 수 있다. 변환행렬은 좌표 변환 기능(TF. transform function)을 담당한다.

로봇암은 joint와 link의 쌓으로 구성되므로, 각 joint별 회전각 를 이용해 변환행렬 t을 계산할 수 있으며, 이들 t1...tn의 행렬곱으로 작업공간의 위치와 자세각을 계산하는 tm 손쉽게 얻을 수 있다.

이를 역으로 풀면, 각 joint별 회전각을 얻을 수 있다. 결론적으로, 획득된 회전각들은 로봇암의 각 모터를 제어할 때 사용하면 된다.


이는 마치 게임 개발 시, 모델 지역좌표와 월드좌표를 계산하는 과정과 매우 유사하다. 이런 좌표변환은 컴퓨터 그래픽스에서 고전적인 좌표 표현 방식 중 하나이다.

2. ROS기반 로봇암 제어 순서
ROS을 이용한 로봇암 제어 방법은 다음과 같다.

1. ROS MoveIt 패키지 설치
2. URDF(Universal Robotic Description Format) 파일에 로봇암의 기구부의 조인트, 링크 지점, 형상, 물성(무게중심 등), 재질(색상 등) 정의하고 로봇암을 모델링함
3. MoveIt Setup Assistant 프로그램을 통해, 로봇암 정보 설정

이와 관련해, 다음 레퍼런스를 참고하였다.


상세 내용은 다음과 같다.



3. ROS URDF 파일 기반 로봇암 모델링
로봇암은 관절에 해당하는 조인트(joint), 관절과 관절을 연결하는 링크(link)로 다음 그림과 같이 구성된다. URDF는 조인트와 링크의 관계를 정의하는 포맷이다.

위의 링크는 다음과 같은 URDF 포맷으로 정의할 수 있다. 파일명은 my_robot.urdf로 저장한다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />

  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
  </joint>
</robot>

URDF를 사용하려면, 다음 라이브러리를 설치해야 한다.
  $ sudo apt-get install liburdfdom-tools

제대로 작성했는 지를 체크하려면, 다음과 같은 명령을 입력한다.
  $ check_urdf my_robot.urdf

이제 여기에, 로봇암 조인트 위치, 링크 치수를 정의한다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />


  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="5 3 0" rpy="0 0 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-2 5 0" rpy="0 0 1.57" />
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz="5 0 0" rpy="0 0 -1.57" />
  </joint>
</robot>

다음과 같이 조인트 회전축을 정의한다. 조인트 회전축은 벡터이며, 정규화되어 있다.
<robot name="test_robot">
  <link name="link1" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />

  <joint name="joint1" type="continuous">
    <parent link="link1"/>
    <child link="link2"/>
    <origin xyz="5 3 0" rpy="0 0 0" />
    <axis xyz="-0.9 0.15 0" />
  </joint>

  <joint name="joint2" type="continuous">
    <parent link="link1"/>
    <child link="link3"/>
    <origin xyz="-2 5 0" rpy="0 0 1.57" />
    <axis xyz="-0.707 0.707 0" />
  </joint>

  <joint name="joint3" type="continuous">
    <parent link="link3"/>
    <child link="link4"/>
    <origin xyz="5 0 0" rpy="0 0 -1.57" />
    <axis xyz="0.707 -0.707 0" />
  </joint>
</robot>

이제 다시 URDF 파일을 체크하고, 로봇암을 시각적으로 확인해 본다.
  $ check_urdf my_robot.urdf
  $ urdf_to_graphiz my_robot.urdf
  $ evince test_robot.pdf
그럼 다음과 같은 로봇암 그래픽을 확인할 수 있다.

로봇암을 직접 프로그램으로 제어하면, 로봇암 부품끼리 충돌하는 문제가 빈번히 발생한다. 잘 생각하고 코딩했더라도, 충돌 문제를 피하기 어려우며, 부품끼리 충돌하면 로봇암 기구가 부서질 수도 있다. URDF는 충돌 범위를 각 링크 별로 지정할 수 있다.

아울러, 링크는 자중이 있어, 로봇암 움직임에 영향을 줄 수 있으므로, 무게중심을 정의할 필요가 있다.

다음은 하나의 링크에 대한 충돌 영역, 무게 중심 및 시각적으로 보이는 정보를 정의한 예이다.

  <link name="link1">
    <collision>
      <origin rpy="0 0 0" xyz="0 0 0.25"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="0 0 0.25"/>
      <geometry>
        <box size="0.1 0.1 0.5"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.25"/>
      <mass value="1"/>
      <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
    </inertial>
  </link>

여기서 material "black"은 URDF 파일에 미리 사전 정의되어 있어야 한다.

  <material name="black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>

이런 방식으로, 로봇암을 상세히 정의할 수 있다.

3축 로봇암 MoveIt테스트를 위해, 오로카 세미나 자료인 URDF파일을 이용해 본다. 상세 내용은 다음 링크를 참고한다.
로봇암 구조는 다음과 같다.

각 조인트를 시뮬레이션할 수 있도록 launch파일을 구성하고, roslaunch를 실행한다.


rviz를 실행해 확인하면, 정의한 바와 같이 잘 동작되는 것을 확인할 수 있다.


다음은 turtlebot 패키지에 정의된 로봇암을 rviz 로 확인한 것이다.




4. ROS MoveIt
역기구학적 계산을 위해, 직접 앞의 변환행렬을 계산하고, 역함수를 계산해, 원하는 모터의 회전각을 얻을 수 있으나, ROS에서는 이미 이를 계산해 주는 MoveIt 패키지가 나와 있다.


MoveIt은 ROS Desktop 버전을 설치하였다면, 이미 설치되어 있을 것이다. 만약, 그렇지 않다면, 다음 링크를 참고해 설치를 한다.
MoveIt을 편리하게 설정하는 MoveIt Setup Assistant 도구가 있다. roscore를 실행하고, 다음 명령을 터미널에서 입력한다.

roslaunch moveit_setup_assistant setup_assistant.launch

그럼 다음과 같은 프로그램이 실행된다.


MoveIt을 이용하면, 다음과 같이 자기 충돌이 있는 지를 체크할 수 있다.


기타, 링크 설정, 로봇 포즈 설정 등을 할 수 있다.

MoveIt Setup Assistant를 이용한 MoveIt 설정 및 실행 방법은 다음을 참고하자. 


MoveIt 패키지를 제대로 설정하고, 실행하면, 다음과 같은 로봇암 제어를 할 수 있다.

ROS + MoveIt + Gazebo (Wiki)


3. 레퍼런스
자세한 내용은 다음 링크를 참고한다.


2015년 11월 1일 일요일

2015 miniDRC 참가기



국내 로봇 동호인 커뮤니티 오로카의 이름으로 미니 재난구조로봇 챌린지에 참가하게 됨. 본인이 관심있는 건설자동화와 역설계에 매우 관련성이 높은 비전 인식 기반 자율 주행 로봇을 개발하기로 함. 자율 주행에 대한 전략은 이 링크를 참고.


로봇을 팀원들과 함께 개발하면서, 이제까지 경험하지 못한 헬 개발, 주말반납과 밤샘을 하게됨. 게다가 예기치 않은 회사출장까지. 다들 직장인, 취준생이라, 개발할 시간은 퇴근 후, 주말, 새벽밖에 없었다. 가족과 애인의 절대적 이해와 희생이 필요한 일이다. 


팀원들은 40~50일 전부터 개발장비가 그나마 잘 갖춰져 있는 무한상상실에서 주말 집중 작업 (작업사진). 






챌린지 몇 주 전부터 행사 당일까지는 새벽까지 테스트와 튜닝의 연속.. 그리고 출전하였으나.. 결과는 모터 과부하와 통신 문제로 인해, 개발했던 기술들을 시연만 해야 했다.T.T

다른 팀 역시, 통신, 모터 과부하, 헬 장애물, 기구적 문제로 인해 포기하거나, 고생한 팀들이 많았다. 특히, 사다리 장애물은 헬 그 자체였는데, 참가 10팀중 통과한 팀은 거의 없었다. 

통신 간섭 및 노이즈 문제도 헬 상황이라, 안보이는 상황에서 장애물을 통과해야하는 경우도 많았다. 



이런 악조건 상황에서, 한땀한땀 만든 로봇들이 인명구조 미션을 수행하기 위해, 노력하다 다운되었다. 장애물을 통과하려 하다, 모터 과부하로 다운되거나, 걸려 못움직이거나, 통신문제로 제어가 안되는 등.. 안타까운 시간이 흘러갔다. 이런 상황을 이겨내려고 팀원들이 노력하는 모습, 많은 사람들이 로봇을 응원하는 모습이 참 감동적이다. 사람과 로봇과 교감하는 느낌.



포기하지 않고 끝까지 참가함으로 기구/캐터필러 제작, 로봇운영기술과 ROS, DX모터 제어, 통신 기술 뿐만 아니라, 그 과정에서 수많은 시행착오 속에 얻은 경험은 참으로 소중한 것이다.



이번 대회를 글 몇자로 요약한다면...

'사다리 올라가기가 이렇게 어려울 줄이야'
'경기장 헬 통신.. 어쩌란 말인지T.T'
'그래도, 쪽팔려도, 포기하지 않고 끝까지 참가하길 잘했다'

추신 - 재난구조로봇 챌린지에서 발생한 몇 가지 헬 상황과 대처 방법을 확인해 보았다.

1. 기구부 문제 - 기구부는 철저하게, 대회 규정과 장애물에 완벽하게 맞게 설계되어야 한다. 배선 공간을 고려하고, 보드, 배터리 탈착 가능하도록 디자인하는 것이 좋다. 간단하게 가 디자인한 모델을 기구부 제작 경험이 많은 분들에게 자문을 받는 것이 좋다.

2. 통신 문제 - 통신 문제에 대한 명확한 대처 방법은 없지만, 최소한, RF, ROS제어 및 카메라 제어는 가능하게 할 수 있다. 이 링크를 참고한다. 증폭기를 달면 좋다. 미리 경기장의 와이파이 상황을 확인할 필요가 있다. 

3. 모터 문제 - DX와 같은 모터는 내부적으로 모터의 최대 토크 등 리미트가 넘어가면, 데이지 체인으로 연결된 모터들이 모두 다운된다. 그러므로, 이를 체크해 로봇을 제어할 기법이 필요하다. 

무엇보다, 통합 테스트는 대회 한달전에는 끝내는 것이 좋다. 현장 테스트는 가능한 빠르면 빠를 수록 좋다. 이후에도 매우 다양한 문제들이 발생하기 때문이다. 그렇지 못하면, 밤샘 무한 반복과 헬 게이트를 경험하게 된다. 팀의 전문성도 중요하지만, 프로젝트 및 시간 관리가 제일 중요하다. 



그리고, 무엇보다 제일 중요한 것이 팀플임을 절실이 느낀다.