[서식 A-8]

2015학년도

기계설계프로젝트 최종 보고서

과제명 : 자동제어 로봇팔

(2014년 9월 1일 ∼ 5월 25일)

팀명: 최적화

기계공학 설계프로젝트 최종보고서를

붙임과 같이 제출합니다.

2015. 5.

대구대학교 기계자동차공학부(기계공학전공)

제 출 문

대구대학교 기계자동차공학부 학부장 귀하

본 보고서를 대구대학교 기계자동차공학부 설계프로젝트 과제 “자동제어 로봇팔”의 결과보고서로 제출합니다. (과제기간 : 14. 09. 01 ~ 15. 05. 25)

2015. 5.

지도교수 : 윤강섭           (인)

대표학생 : 서경화           (인)

참여학생 : 박종혁            (인)

서용훈           (인)

이상직           (인)

장철민           (인)

보고서 작성 윤리 서약서

대구대학교 기계자동차공학부 학부장 귀하

본인은 보고서를 작성함에 있어 다음과 같이 연구 윤리 및 보고서 작성 윤리를 준수하였음을 서약합니다.

1. 본인은 다른 학생의 보고서를 복사(copy)하지 않았습니다.

2. 본인은 다른 사람의 보고서 내용 중 전부 또는 일부를 무단으로 도용하거나 인터넷에서 내려받기(download)하여 대체하지 않았습니다.

3. 본인은 보고서에 참고자료를 인용할 경우 원본의 출처를 반드시 표시하였습니다.

2015. 5.

지도교수 : 윤강섭           (인)

대표학생 : 서경화           (인)

참여학생 : 박종혁            (인)

서용훈           (인)

이상직           (인)

장철민           (인)

목  차

최종보고 요약문 제1장 개발내용 및 목표 제1절 목적 및 필요성 제2절 정량적 목표 제2장 과제도출 과정 제1절 후보 및 선정과제 제2절 제품 사양 제3장 기본설계 및 요구기능 제1절 기본설계 제2절 요구기능 제4장 상세설계 제1절 링크 위치 해석 제2절 하중 및 토크 제3절 제어 알고리즘 제4절 부품 선정 제5장 CAD도면 제1절 기구도면 제2절 회로도면 및 배선도 제3절 3D도면 제6장 설계과정 및 해석 제1절 설계과정 및 해석 제7장 결론 제1절 진척상황 제2절 문제점 및 해결방안	1 2 2 3 4 9 10 11 12 12 17 19 20 21 21 34 35 36 36 39

최종보고 요약문

과제명	자동제어 로봇팔
팀명	최적화
팀원	서경화, 박종혁, 서용훈, 이상직, 장철민
과제기간	2014 년 9 월 1 일 ~ 5 월 25 일
1. 개발내용 및 목표 개발내용 : 기존 로봇청소기의 문제점중 하나 (작은 장애물을 벽으로 인식)를 고려하여 로봇청소기 상부에 장착할 수 있는 자동제어 로봇팔을 설계 및 제작하였다. 초음파센서2개와 RC서보모터4개의 제어부, 공학적으로 최적화된 기구부로 구 성되어 있다. 정량적 개발목표 ‧최대 길이 : 450mm ‧사물 인식 반경 : 80~150mm ‧허용 중량 : 150~200g ‧사물 인식 높이 : 20~80mm ‧제작 가격 : 50만원 2. 개념설계 및 요구기능 개념설계 : 두개의 초음파센서를 상/하부에 설치해 물건과 장애물을 분별하여 각 링크 에 설치된 RC서보모터로 링크를 일정한 각도로 회전 및 정지시켜 물건을 집어 들도록 한다. 요구기능 : 초음파센서의 입력값에 따른 RC서보모터 제어, 링크의 하중을 최소한으로 하기 위한 특별한 기구부 설계가 필요하다. 3. 상세설계 기존 로봇청소기의 높이와 크기를 고려하여 로봇팔이 최대한의 거리로 뻗어 특정 무게의 물건을 집어들었을 경우의 하중을 계산한다. 그 값을 통해 로봇팔의 전체 길이를 정하고 각 링크의 하중을 줄이기 위해 RC서보모터를 상판에 장착하도록 기구부를 설계한다. 로봇팔의 재료로는 링크의 하중과 강도를 고려하여 AL(알루미늄)을 사용한다. 유압이 아닌 RC서보모터를 사용하기 때문에 충분한 힘을 낼 수 있는 토크값(9.0kg*cm)을 가진 모터를 선별한다. 링크구조가 4절 링크이기 때문에 기구학적 지식을 고려하여 초음파 센서의 입력값에 따라 서보모터를 제어한다. 4. 개발현황 및 향후계획 15. 5월 현재까지 시제품 아이디어가 여러번 바뀌고 부적절하다는 판정이 계속되어 가장 간단한 구조인 로봇팔을 최종적으로 선정하였다. 하지만 중간보고에서 너무 공학적인 지식이 접목되어있지 않다는 피드백을 받고 기구부를 모두 수정하여 최종적으로 4절링크를 가진 로봇팔을 설계하게 되었다. 기구부는 제작이 완료되었고 시운전을 통해 문제점을 도출하려고 하고있다.

제 1장 과제내용 및 목표

제1절 목적 및 필요성

1. 과제개발의 목적

: 기존 로봇청소기의 취약점을 생각해보다가 로봇청소기에 부착하여 앞에 있는 큰 쓰레기를 치울 수 있는 로봇팔을 만들어보자 하여 제작하게 되었다. 유압식의 로봇팔은 구조가 단순하지만 가격이 비싸며 무겁다는 단점이 있기 때문에 RC서보모터를 이용한 로봇팔을 생각했다.

2. 필요성

: 시중의 청소기는 바닥의 먼지만 청소할 수 있다는 기능적 한계가 있다. 결국 비싼 로봇청소기를 보유하고 있더라도 부피가 큰 쓰레기는 직접 주워야 한다는 번거로움이 있다. 우리가 계획 중인 ‘자동제어 로봇 팔’은 스스로 전방의 사물(크기가 있는 간단한 쓰레기)을 인식하고 집어들 수 있다. 두 제품을 접목한다면 더 완벽한 자동청소를 할 수 있다. 또 이것을 다른 일상이나 산업현장에 사용한다면 여러 방면에서 큰 이율이 생길 것이라 생각한다.

제 2절 과제의 목표

1. 과제 목표

: 엔지니어로서의 전문성이 부족한 학생들이 처음으로 여태 배웠던 전공지식을 활  용하여 개발하는 첫 기회인만큼, 특출나게 돋보이는 목표를 가지기에는 벽이 많다고 판단했다. 우리의 실력으로 만들 수 있는 기준을 정하다보니 초기의 목표보다 기능이 단순하고 간단한 구조의 설계가 되었다. 초기엔 단순주행이라는 목표도 있었으나 둘을 모두 시현하기엔 불가능이라 판단하였다. 그런 점을 고려하여 로봇 팔이란 하나의 개발에 집중하는 대신 완성도 높은 시제품을 개발에 중점을 두었다.

2. 정량적 목표

‧최대 길이      : 450mm

‧사물 인식 반경 : 80~150mm

‧허용 중량      : 150~200g

‧사물 인식 높이 : 20~80mm

‧제작 가격      : 50만원

시제품명	자동제어 로봇팔	지도교수	윤강섭 (인)

기능/성능	정량적 목표	시제품 사양
1. 전방에 있는 사물과의 거리와 방향을 측정한다. 2. 사물의 높이를 측정하여 벽/물체를 구분한다. 3. 판별이 끝난 사물의 방향으로 팔을 이동시킨 후 GRIP으로 집는다. 4. 4절링크 구조로 하여 자유로운 움직임이 가능하다. 5. 링크는 각각의 RC서보모터와 연결 되어 움직인다. 6. RC서보모터와 초음파 센서는 MCU(ATmega128)에 의해 제어된다.	최대길이 : 450mm 사물인식반경 : 80~150mm 허용 중량 : 150~200g 사물 인식 높이 : 20~80mm	원통형 몸체 : [eqn: EMPTYSET]250 x 106mm 4절 로봇팔 : 최대 길이 약 450mm - 허용중량 : 150~200g 센서 : 초음파 센서 - 사물인식거리 : 80~150mm - 사물인식높이 : 20~80mm 배터리 : 9.6V, 2700mA - 구동시간 : 50분 재원 - 팔의 무게 : 2.5kg - 높이 : 380mm - 팔의 길이 : 480mm - 총 길이 : 700mm - 총 폭 : 300mm

팀명	최적화	작성일	’15. 4. 6

제 2장 과제도출 과정

제 1절 후보 및 선정과제

아이디어 명	수상구조드론
사진
기존제품의 단점	기존에 출시되고 있는 드론은 아직까지 놀이용품 정도의 수준이며, 인간의 삶에 실질적 도움을 주는 역할로는 여러 가지 연구의 단계에 있음
아이디어 도출	목적지까지의 빠른 이동, 사람의 접근이 제한적인 곳에서의 비행이 가능하다는 장점을 생각해 볼 때, 사람이 정복하기 어려운 환경에 활용됨으로서 최상의 효율을 낼 수 있을 것으로 기대된다. 수상구조용 드론은, 물에 사람이 빠진 긴급한 상황에서 어떤 방법보다도 빠르게 사고지점으로 이동할 수 있다. 또한 사고 지점에 수상구조용 자동팽창튜브를 투하함으로써 구조대가 현장에 도착하기까지 시간을 벌 수 있을 것으로 효과가 기대 된다.

아이디어 명	자동 압축 쓰레기통
사진
기존제품의 단점	기존에 설치되어 있는 쓰레기통의 경우 정기적으로 비우기는 하지만 장소에 따라, 시간에 따라 차이가 커서 자칫 잘못하면 길거리로 쓰레기가 넘쳐흐르는 현상을 자주 목격하게 된다. 미관상으로도 문제가 되지만 오래 지속될 경우 악취가 난다.
아이디어 도출	쓰레기통에 일정 수준 이상으로 쓰레기가 차면 자동으로 쓰레기를 압축해주는 시스템을 도입하여 부피를 크게 줄임으로 기존의 일반 쓰레기통이 가지고 있던 문제들을 완화할 수 있을 것으로 기대된다. 쓰레기 투입 시에는 안전장치가 작동되어, 사용자가 있을 경우 압축기능을 수행하지 않도록 구상하였다.

아이디어 명	창틀 청소기
사진
기존제품의 단점	가정이나 사무실, 어디에나 흔한 창틀은 청소할 때 잊고 빠뜨리기 쉬운 부분이며, 청소하기에도 쉽지 않은 좁은 구조를 가지고 있다.
아이디어 도출	창틀 전용 청소로봇으로 아이디어의 요점은 좁은 공간의 효율적인 청소이다. 양쪽의 바퀴로 창틀을 따라 이동하며, 중앙 브러쉬와 양측 고무클리너로 창틀 속 묵은 때 및 구석진 부분을 쉽게 청소할 수 잇도록 구상하였다.

아이디어 명	분리형 로봇 청소기
사진
기존제품의 단점	사용자가 원하는 부분을 깨끗하게 청소할 수 있는 핸디형 청소기의 장점을, 최근 부상한 로봇청소기에서는 찾아볼 수가 없다.
아이디어 도출	과거부터 현재까지도 많이 쓰이는 핸디형 청소기와, 최근 부상한 자율로봇 청소기의 각 장점을 병합하여 한 제품으로 설계 해보았다. 로봇청소기가 가지는 이점인 자율청소기능은 물론이고, 사용자가 원하는 부분 또한 효과적으로 청소할 수 있도록 핸디형 청소기 기능을 적용하였고 이를 위해 구조적으로 해로운 형상을 만들어 보았다.

아이디어 명	자동제어 로봇팔
사진
기존제품의 단점	로봇청소기의 경우 바닥청소만 가능하기 때문에, 먼지를 제외한 부피가 큰 쓰레기들은 청소할 수 없다는 한계점이 있다.
아이디어 도출	로봇청소기 위에 물체를 인식 시 스스로 작동하여 쓰레기를 집을 수 있는 로봇 팔을 장착한다. 장애물 인식과 쓰레기 인식의 차이를 두기 위해 초음파센서 두 개를 높이의 차를 두고 설치되도록 설계한다.

선정결과

선정된 아이디어		자동제어 로봇팔
선정이유	경제성	기존 제어용 비해 제작비용이 절감되고, 기구부에 알루미늄을 사용함으로 전체 중량을 줄여 에너지 효율을 상승시켰으며 그에 최적화된 모터를 사용
	독창성	기존의 로봇청소기는 바닥청소를 목적으로 하기 때문에 그에 맞는 기능만 가지고 있어 청소반경 내에 있는 부피가 있는 쓰레기는 청소하지 못하는 반면, 쓰레기 발견 시 스스로 인지하여 청소 가능
	기술성	로봇팔 구조를 4절 링크로 구성하여 링크의 기구학적 위치해석이 가능하도록 한다. 로봇팔에 적용되는 하중을 고려하여 그에 알맞은 모터를 사용한다. 적절한 소재 선정 및 2D, 3D 모델링
	실용성	로봇청소기의 기존기능에 청소기능이 추가되어 비교적 적은 단가에 높은 효율을 기대해 볼 수 있다. 자동제어이기 때문에 사용자가 따로 조작이나 설정을 해 줄 필요가 없어 사용하기에 편리하다.

제2절 사양 설계

사양서

형태	원통형 몸체, 4관절 로봇 손
외형 재질	aluminum(팔) ss400(몸체)
사물 인식 거리	전방 80~150mm
사물 인식 높이	20~80mm
허용 중량	150~200g
구동 시간	50분
배터리 종류	9.6V 2700mAh 수소충전지 (1.2V 2700mAh AA전지 8개 직렬)
재원	무게(팔) : 2.5kg
	높이 : 380mm
	길이(팔) : 480mm
	길이(팔+바디) : 700mm
	폭 : 300mm

제3장 기본설계 및 요구기능

제1절 기본설계

:  ‘자동제어 로봇 팔’은 기본적인 팔의 구조를 가지고 있다. 구동방식은 유압식이 아닌 RC서보모터로 이루어진다. RC서보모터는 각 관절에 부착 하는 것 이 아닌 기구부의 아래쪽에 설치하여 각 링크의 하중을 줄일 수 있도록 한다. (기존 공업용 로봇팔도 이러함) RC서보모터가 아래에 위치하므로  기존 로봇청소기의 크기와 높이를 고려하여 팔의 최대길이를 정하고 재질은 특정 물건을 집을 수 있는 하중과 강도를 가지는 AL(알루미늄)을 사용한다.  원회전판은 로봇 팔 지지대가 있어 팔의 시작점이 된다. 팔은 4절 링크로 되어있으며 손 부분을 제외한 모든 RC서보모터는 시작점 주위에 위치한다.  팔의 끝에는 톱니바퀴를 이용해 움직이는 손(GRIP)이 초음파센서와 R/C서보모터의 제어 상호작용에 의해 물건의 높이를 가늠하고 집어 든다.  이때 이 물건을 집어들었을 경우의 하중, 모멘트를 계산하여 물체의 최대무게를 지정한다. 물체의 최대무게는 RC서보모터의 최대토크와 팔의 재질, 길이, 손의 그립이 결정하게 된다.

제2절 요구기능

:  RC서보모터가 가진 토크 값(9.0kg*cm) 이 한정되어 있기 때문에 이를 고려하여 팔의 재질, 길이, 구조 등을 설계하여야 하고 로봇 손 또한 로봇청소기에 부착하여 사용한다는 점을 감안하였을 때 휴지조각은 물론이고 가벼운 장난감 정도는 들고 옮길 수 있을 정도의 악력과 크기를 가지도록 설계 하여야 한다. 제어부는 2개의 초음파 센서를 이용하여 물체의 최대높이, 위치 등의 입력 값을 토대로 어떠한 알고리즘을 따른 RC서보모터의 제어가 필요로 하다.

제4장 상세설계

제1절 링크 위치 해석

a = 8.5cm

b = 15cm

c = 15cm

d = 초음파로 측정된 거리 e에 종속되는 상수 (길이, cm)

[eqn: theta _{2}]= 초음파로 측정된 거리 e에 종속되는 상수 (각도, degree)

-4절 링크에서 4개의 링크 길이를 알고 입력 각([eqn: theta _{2}])하나를 알면 나머지 2개의 각도를 알 수 있다. 그림에서 나타낸 것처럼 하나의 링크d를 좌표계의 한 축으로 잡으면 나머지의 각도를 나타내는 것에 용이하다. 4절 링크의 위치 해석 중 벡터루프 식을 사용하여 [eqn: theta _{3}], [eqn: theta _{4}]를 찾아내어 RC서보모터 제어에 사용한다. 실제 사용되는 좌표계는 일반 좌표계와 마찬가지로 선분 e를 [eqn: chi]축으로 하는 좌표계 이므로 [eqn: theta _{3}], [eqn: theta _{4}]에 대해 각을 더하거나 빼준다. 이 항목은 추후에 다시 설명할 것이며 먼저 벡터루프 식을 이용하여 4절 링크의 위치해석을 한다.

sol) 위의 그림에 대해 다음과 같은 벡터루프 식을 표현할 수 있다.

[eqn: vec{R _{2}} `+` vec{R _{3}} `-` vec{R _{4}} `-` vec{R _{1}} `=`0]

각 위치벡터를 복소수 형태로 대치시키면 다음과 같다.

[eqn: ae ^{j theta _{2}} `+`be ^{j theta _{3}} `-`ce ^{j theta _{4}} `-`de ^{j theta _{1}} `=`0]

[eqn: theta _{1}]의 값은 0이므로

[eqn: ae ^{j theta _{2}} `+`be ^{j theta _{3}} `-`ce ^{j theta _{4}} `-`d`=`0]

[eqn: e ^{j theta }]항을 Euler 변환공식으로 대치하면 다음과 같이 표현할 수 있다.

[eqn: a(cos theta _{2} `+`jsin theta _{2} )`+`b(cos theta _{3} `+`jsin theta _{3} )`-`c(cos theta _{4} `+`jsin theta _{4} )`-`d`=`0]

위의 식을 만족하기 위해서는 실수부의 식과 허수부의 식이 0이 되어야 한다.

(실수부)

[eqn: acos theta _{2} `+`bcos theta _{3} `-`ccos theta _{4} `-`d`=`0]         …①

(허수부)

[eqn: asin theta _{2} `+`bsin theta _{3} `-`csin theta _{4} `=`0]             …②

[eqn: a,`b,`c,`d,` theta _{2}]는 모두 상수이기 때문에 ①, ②식을 연립하여 [eqn: theta _{2}]와 [eqn: theta _{3}]를 구할 수 있다.

이 삼각 2원 방적식의 풀이는 첫 단계로 좌표의 두 미지수 중의 하나만 남겨서 정리하는 것이다.

[eqn: b`cos theta _{3} `=`-a`cos theta _{2} `+`c`cos theta _{`4} `+`d# b`sin theta _{3} `=`-a`sin theta _{2} `+`c`sin theta _{4}]

위의 두 식 양변을 제곱하여 더하면

[eqn: b ^{2} (sin ^{2} theta _{3} `+`cos ^{2} theta _{3} )`=`(-a`sin theta _{2} `+`c`sin theta _{4} ) ^{2} `+`(-a`cos theta _{2} `+`c`cos theta _{4} `+`d) ^{2}]

[eqn: sin ^{2} theta `+`cos ^{2} theta `=`1]이고, 각 항을 전개하여 정리하면 다음과 같다.

[eqn: b ^{2} `=`a ^{2} `+`c ^{2} `+`d ^{2} `-2ad`cos theta _{2} `+`2cd`cos theta _{4} `-`2ac(sin theta _{2} sin theta _{4} `+`cos theta _{2} cos theta _{4} )]

식을 좀 더 단순화하기 위해 반각공식을 이용하여 [eqn: sin theta _{4}]와 [eqn: cos theta _{4}]를 [eqn: tan theta _{4}]항으로 바꾸면 된다.

[eqn: sin theta _{4} `=` {2tan {theta _{4}} over {2}} over {1`+`tan ^{2} {theta _{4}} over {2}} `````````````````````````cos theta _{4} `=` {1-tan ^{2} {theta _{4}} over {2}} over {1+tan ^{2} {theta _{4}} over {2}}]

본래의 식에 대입하고 나머지 상수를 A, B, C로 표현하면 다음과 같다.

[eqn: A`tan ^{2} {theta _{4}} over {2} `+`B`tan {theta _{4}} over {2} `+`C`=`0]

위의 식은 2차 방정식이므로 근의 공식을 사용하여 풀면

[eqn: tan {theta _{4}} over {2} `=` {-B`±` sqrt {B ^{2} `-`4AC}} over {2A}# # theta _{4 _{1,2}} `=`2`tan ^{-1} {-B`±` sqrt {B ^{2} `-`4AC}} over {2A}]

의 결과가 나타난다.

상수 A, B, C의 값은 다음과 같다.

[eqn: A`=cos theta _{2} `-` {d} over {a} `-` {d} over {c} cos theta _{2} `+` {a ^{2} `-`b ^{2} `+`c ^{2} `+`d ^{2}} over {2ac} `# B`=-2sin theta _{2} `# C`=`` {d} over {a} `-`( {d} over {c} `+`1)cos theta _{2} `+` {a ^{2} `-`b ^{2} `+`c ^{2} `+`d ^{2}} over {2ac}]

위의 식은 2개의 해를 가지고 있다. 값이 서로 다른 두 실근이라면 이를 링크의 열린 형태와 엇갈린 형태로 구분할 수 있다. 열린 형태일 때는 [eqn: theta _{4}]가 음의 값이고, 엇갈린 형태일 때는 [eqn: theta _{4}]가 양의 값이 된다.

[eqn: theta _{3}]의 값도 연립해서 풀면

[eqn: c`cos theta _{4} `=`a`cos theta _{2} `+`b`cos theta _{3} `-`d# c`sin theta _{4} `=`a`sin theta _{2} `+`b`sin theta _{3}]

위의 과정과 동일하게 구하면

[eqn: {d} over {a} `cos theta _{3} `+` {d} over {b} `cos theta _{2} `+` {c ^{2} `-`d ^{2} `-`a ^{2} `-`b ^{2}} over {2ab} `=`cos theta _{2} `cos theta _{3} `+`sin theta _{2} `sin theta _{3}]

이 식도 반각 공식을 사용하면(D, E, F는 상수)

[eqn: D`tan ^{2} {theta _{3}} over {2} `+`E`tan {theta _{3}} over {2} `+`F`=`0]

근의 공식을 사용하여 값을 구하면

[eqn: theta _{3 _{1,2}} `=`2`tan ^{-1} {-E`±` sqrt {E ^{2} `-`4DF}} over {2D}]

각 상수들의 값은 다음과 같다.

[eqn: D`=`cos theta _{2} `-` {d} over {a} `+` {d} over {b} cos theta _{2} `+` {c ^{2} `-`d ^{2} `-`a ^{2} `-`b ^{2}} over {2ab}# E`=`-2sin theta _{2}# F`=` {d} over {a} `+`( {d} over {b} `-1)cos theta _{2} `+` {c ^{2} `-`d ^{2} `-`a ^{2} `-`b ^{2}} over {2ab}]

[eqn: theta _{4}]도 열린 형태와 엇갈린 형태의 두 근을 가지고 있다.

마지막으로 다시 한 번 정리하여 [eqn: theta _{2}]와 [eqn: theta _{3}]의 근을 나타내면 다음과 같다.

[eqn: theta _{4 _{1,2}} `=`2tan ^{-1} ( {-B± sqrt {B ^{2} -4AC}} over {2A} )# # theta _{3 _{1,2}} `=`2tan ^{-1} ( {-E± sqrt {E ^{2} -4DF}} over {2D} )]

마찬가지로 정리하자면, 각 A, B, C, D, E, F는 상수며 그 값은 다음과 같다.

[eqn: A`=cos theta _{2} `-` {d} over {a} `-` {d} over {c} cos theta _{2} `+` {a ^{2} `-`b ^{2} `+`c ^{2} `+`d ^{2}} over {2ac} `# B`=-2sin theta _{2} `# C`=`` {d} over {a} `-`( {d} over {c} `+`1)cos theta _{2} `+` {a ^{2} `-`b ^{2} `+`c ^{2} `+`d ^{2}} over {2ac}# D`=`cos theta _{2} `-` {d} over {a} `+` {d} over {b} cos theta _{2} `+` {c ^{2} `-`d ^{2} `-`a ^{2} `-`b ^{2}} over {2ab}# E`=`-2sin theta _{2}# F`=` {d} over {a} `+`( {d} over {b} `-1)cos theta _{2} `+` {c ^{2} `-`d ^{2} `-`a ^{2} `-`b ^{2}} over {2ab}]

처음에 언급했듯, 계산을 쉽게 하기 위해 좌표계를 회전하여 사용하였는데 이를 원래 좌표계로 회전시키면 각 [eqn: theta _{3} ,` theta _{4}]에 회전 한 만큼의 각을 더하거나 빼주어야 한다. 이 회전한 각도는 (360˚ -[eqn: theta _{2}])이다.

RC서보모터의 각도 제어범위를 -90˚ ~ 90˚로 설정하면 모터의 방향에 따라 90˚, 270˚를 더하거나 빼주어야 한다.

───────────────────────────────────────────

참고 문헌 : Robert L. Norton,(2009), 「기구학」, (주)한국맥그로힐

- 초음파에 종속되는 상수?

위에서 언급했듯, [eqn: d]와 [eqn: theta _{2}]는 초음파로 측정된 거리에 종속되는 상수이다.

[eqn: d]와 [eqn: theta _{2}]를 구하는 식은 다음과 같다.

링크의 구조로 [eqn: d]와 [eqn: theta _{2}]에 관련된 삼각형을 나타내면 위의 그림과 같다.

[eqn: d]의 값은 피타고라스 정리에 의해 구해진다.

[eqn: d`=` sqrt {(8`+`e) ^{2} `+`14.1 ^{2}} `=` sqrt {262.81`+`16e`+`e ^{2}}]

[eqn: theta _{2}]의 값은 삼각함수에 의해 구해진다.

[eqn: tan(360 DEG - theta _{2} )`=` {14.1} over {8`+`e}# # theta _{2} `=`360 DEG -`tan ^{-1} ( {14.1} over {8`+`e} )]

제2절 하중 및 모멘트 해석

<조립된 기구부의 측면 자유물체도>

*각 링크의 무게 및 길이 값은 CatiaV5 프로그램을 통해 실제 물품에 근사한 값을 얻어냄

B점에 대한 모멘트(RC서보모터가 설치된 지점)를 쉽게 구하기 위해 완전히 조립된 기구부의

한쪽 측면을 자유물체도로 간략히 표현하였다.  전체적인 물체도는 실제 물품의 3:1 비율로 그

려 나타내었고 길이나 무게는 CatiaV5 프로그램을 통해 실제와 근사한 값을 얻어내어  표시하

였다.

정량적 목표 중 한가지인 들 수 있는 물품의 최대 중량 150g을 수용하기 위해 자유 물체도에

그 하중을 함께 표시하여 모멘트 계산에 접목시켰다.

굵은 선은 링크를 표시한 것이며 중간에 수평으로 그어 숫자를 나타낸 것은 모멘트를 계산하

기 위해 각 하중에 직결된 수평 거리를 계산한 것이다.

<R/C서보모터가 장착된 B점의 모멘트를 구하는 식>

링크가 고정되는 A, B 각각의 응력 및 모멘트를 구하기 위해

① A점에 대한 모멘트를 구하여 By(B점의 수직반력), Mb(B점의 모멘트) 식을 얻어냄

② B점에 대한 모멘트를 구하여 Ay(A점의 수직반력), Mb(B점의 모멘트) 식을 얻어냄

③ Ay, By 두 수직 반력을 합한 값은 모든 링크의 하중을 더한 값이므로 Ay+By = 총 하중

이라는 식을 얻어냄

④ 미지수 세 개와 식 세 개가 구해졌으므로 모멘트 Mb 값을 구할 수 있음

이렇게 구해진 Mb 값은 7.31kg-cm로(최대길이로 팔을 늘렸을 때 정량적목표 150g의 물체

를 집어 들었을 경우) R/C서보모터는 토크 8kg-cm 이상인 제품을 선정하는 것이 바람직한

것으로 나타났다.

제3절 제어 알고리즘

모터1	portC 5번핀 - 가장 아래에 있는 모터

모터2	portB 4번핀 - c링크를 움직이는 모터

모터3	portB 7번핀 - b링크를 움직이는 모터

모터4	portA 5번핀 - 집게부분 모터

	제어 알고리즘
	각 모터의 초기값 설정 모터① : -90° 모터② : -60° 모터③ : -60° 모터④ : -90°
□
	초음파센서ⓐ 값으로 물체가 120~200mm 사이에 있으면 작동 시작
□									초기값의 설정으로 모터를 구동한다
	모터② 작동 (초음파로 측정한 거리를 벡터루프로 각도를 구함)
											□
									모터① 작동 (관절부 원위치)
□
	모터③ 작동 (모터② 작동 방식과 동일)										□
									모터④ 작동 (물체를 놓음)
□											□
	모터④ 작동 (물건을 집음)
									모터① 작동 (관절부 전체를 회전)
	□
	모터②, 모터③ 을 위로 올림 (물체를 집은 체 올리는 관절을 접는 동작)						□

제4절 제품 선정

앞서 계산 된 토크 값 및 초기에 설정한 정량적 목표를 만족할 제품을 조사하여 선정.

초음파 센서	제품명 : HC-SR04 제조사 : Iteadstudio 판매처 : 디바이스마트 무게 : 15.0g 유효 각도, 거리 : 15[eqn: DEG], 20~5000mm 주파수 : 40kHz 크기 : 20 * 43 * 15 mm 가격 : 4,000 - 2EA = 8,000원
R/C서보모터	제품명 : NTS0090 제조사 : HYX 판매처 : 디바이스마트 용량 및 전압 : 4.8~9.6V 34~70W 무게 : 56.0g 토크 : 9.0kg-cm(4.8V) 10.2kg-cm(9.6V) 크기 : 41.3 * 21.3 * 38.7 mm 가격 : 21,000 - 4EA = 84,000원
MCU	제품명 : AVR MEGA 128pro 제조사 : 주식회사 뉴티씨(NEWTC) 판매처 : 디바이스마트 특징 : ATMEL 사의 AVR 마이크로 컨트롤러 ATMega128 사용 16MHz X-tal 사용 내부에 롬(ROM)과 램(RAM)을 내장 4Digit 7-Segment 내장 크기 : 124 * 75 mm 가격 : 75,000 - 1EA = 75,000원

제5장 CAD도면

제1절 기구도면

제2절 배선도

제3절 3D도면

1차 모델링

2차 모델링 (현재 모델)

제6장 설계과정 및 해석

직전학기에(14년도 2학기) 자율주행 로봇청소기를 아이디어로 선정하고 겨울방학까지 설계 및 제작까지 진행을 해오는 도중에 부품이 너무 많고 직접 제작하기에 너무 어려움이 보인다는 문제점에 시중에 나와 있는 로봇청소기에 그냥 자율주행 제어만 중점적으로 제작하려고 하였다. 하지만 자율주행이 아직까지 많은 전문가들에게도 숙제가 되고 있는 어려운 제어임에 이것 하나만 중점적으로 설계프로젝트를 진행하기에 학생으로서 부적합함이 보였다.  그래서 이번 15학년도에 들어 기존 로봇청소기의 단점(작은 장애물에도 벽으로 인식하여 방향을 전환)을 보완할 ‘자동제어 로봇팔‘로 아이디어를 수정하여 진행하기로 하였다.

초기에 설계된 ’자동제어 로봇팔‘은 사진에서 보다시피 RC서보모터가 각 관절에 장착되어 있고 로봇손이 팔에 고정되어 있는 3절 링크 구조이다.

사진에서 보다시피 초기에 제작된 ‘자동제어 로봇팔’은 현재 제작된 것과 달리 로봇손이 팔에 고정되어있는 3절링크 구조이고 RC서보모터가 각 관절에 고정되어 있다. 때문에 각 관절이 받는 하중이 상당히 크고 3절링크이기 때문에 물건을 집는데 어려움이 있다. 이처럼 초기 모델은 공학적인 지식을 전혀 고려하지 않은것이 보인다.

초기모델의 로봇손 부분 이다. RC서보모터로 물건을 집는 움직임은 수행할 수 있다. 하지만 너무 RC서보모터의 주축에 힘이 직접적으로 닿아 물건을 집는데 어려움이 있었다. 또한 손의 두께와 표면 재질이 물건을 들어 올리는데 부적합 하였다.

초기 모델은 먼저 로봇팔을 만들어 놓고 시험 운전을 한뒤 하중을 계산하는 역설계 방식으로 진행하였지만 이러한 방식은 나중에 설계를 전면 수정해야 하는 문제점을 나타냈다. 문제점의 예로 팔의 전체를 움직이는 2번 서보모터가 팔의 무게와 물체의 무게를 견디지 못해 덜덜 떠는 증상을 보였고 로봇손의 구조가 물체를 집어 들어 올리는데 부적합 하다는 것이다.

때문에 우리는 이러한 문제점을 계기로 아예 새롭게 설계를 시작하였다. 모든 기구부를 전면 수정하여 RC서보모터를 링크의 시작점에 설치하였고 로봇 손 부분은 RC서보모터의 주축에 직결되는 방식이 아닌 톱니바퀴를 이용한 4절링크 방식을 사용하였기 때문에 작동 범위에 큰 효율을 보이도록 하였다.

수정된 모델의 로봇 손 구조는 왼쪽 사진과 같이 톱니형태를 이용하여 RC서보모터의 주축이 작동할 시 두개의 손이 함께 움직이도록 하였다. 따라서 이전 모델의 작동방식과 달리(한쪽 손만 움직이는 방식) RC서보모터의 주축이 조금만 회전해도 손이 움직이는 작동범위가 큰 효율을 보인다.

왼쪽 집게에 링크를 연결하여 RC서보모터 주축에 연결 시킨다. 이러한 4절링크 구조로 움직임에 무리가 없게 설계를 하였다.

로봇 팔의 전체적인 길이 선정은 기존 로봇청소기의 높이를 고려해서 몸체 바로앞에 놓인 물체를 집을 수 있는 최소한의 길이로 선정을 하였다.

또한 로봇 손을 로봇 팔에 고정시키지 않고 중간에 조인트를 두어 4절 링크구조로 설계하여 물건을 집어 드는데 용이하도록 하였다.

각 링크의 길이와 입력각 정해졌으므로 그 길이와 각을 토대로 기구학의 링크 위치해석 중 벡터루프를 사용하여 각 링크의 각도를 선정해준다.

기존의 모델은 RC서보모터가 각 관절에 부착되어 있기 때문에 너무 하중이 크다는 문제점이 있어  RC서보모터를 링크의 아랫부분에 설치하려고 하였다. 따라서 팔의 구조는 전체적으로 큰 4절 링크로 되어있고 그 큰 4절 링크를 움직이는 보조 링크(RC서보모터 주축과 직결된 링크)로 이루어진 형태를 구상하였다. RC서보모터를 아래쪽에 설치하기 때문에 링크가 왼쪽, 오른쪽으로 나뉘어진다. 오른쪽 링크는 1번  RC서보모터와 직결되어 팔의 전체적인 움직임을 담당한다. 왼쪽링크(2번)는 2번 RC서보모터와 직결되어 로봇 손의 위치를 이동시킨다.

이렇게 초기모델보다는 복잡한 링크 구조를 가지지만 RC서보모터가 아래쪽에 위치하기 때문에 하중을 줄일 수 있고 로봇 팔의 각도가 변해도 로봇 손이 수평을 유지하는 이점을 가진다.  이러한 링크 구조로 초기모델에는 불필요 했던 부품들이 생겼고 제작하는데 어려움이 있어 레이저 외주 가공을 맡기게 되었다.

*설계 시 발견된 문제점

부품은 우리가 처음에 생각했던 것과 달리 더 필요한 부품이 생기기도 하였다. 예를 들면,

이 사진에서 보이는 것처럼 오른쪽 링크와 왼쪽 링크를 연결하는 네모난 부품이 있어야 하는데 처음엔 이것을 고려하지 않아 왼쪽, 오른쪽 링크가 따로 놀게 되는 문제점이 생겼다.  문제점을 발견한 이후에 어떻게 해결을 할까 고려하다가 두 링크를 연결해주는 사진의 네모 부품을 만들어 주었다.

또한 각 링크에 탭을 내어 나사로 체결하였더니 링크가 회전하며 나사가 풀려 링크 간 유격이 생겨 헐렁헐렁해지는 문제점이 생겼다.    문제점을 발견한 이후 탭을 낸 구멍을 밀링으로 다시 드릴 가공을 해 왼쪽 사진처럼 볼트, 너트 체결을 하는 방식으로 수정을 하였다.  이렇게 하니 링크의 움직이 더욱 수월해 졌고 링크간 유격이 생기는 문제점이 사라졌다.

이렇게 제작 및 조립은 왼쪽 사진과 같이 완료가 되었다. 마지막으로 모든 부품을 토대로 최대길이가 되었을 때의 하중, 모멘트를 구해 RC서보모터의 토크 값과 비교하여 문제점이 없는지 계산을 해보았다.

제7장 결론

1절 진척상황

설계프로젝트 강의 중 당시 제작한 로봇팔이 구조와 설계과정에서 공학적이지 못하다는 윤강섭 교수님의 지적을 받아 로봇팔과 관련된 특허와 메카 실험실에 있는 소형 로봇팔 제품을 참고하여 새로이 설계했다.

부품의 길이와 재질을 선정하고 이에 따라 링크에 적용되는 하중 및 모멘트를 계산하여 필요 토크를 구했다. 결과 값을 바탕으로, 시제품의 정량적 목표를 달성하기 위한 RC서보모터와 배터리를 선정했다. 또 기구학적 설계를 통해 무게 중심이 고려된 팔의 위치를 정했고 목표 지점까지 도달하기 위한 링크의 움직임 제어방법을 제시했다.

현재 기구는 모두 완성 된 상황이며 제어를 위한 프로그래밍 중이다. 아직 완벽한 자동제어는 불가능하고 초음파 센서를 통해 설정된 거리 내에 사물이 존재하면 RC서보모터가 지정 된 각도로 움직임을 하는 정도이다.

2절 문제점 및 해결방안

초기 설정한 정량적 목표 중 유효거리 설정이 기구 구조상 불가능함을 파악해 수정했다.

(초기 50~120mm 수정 후 120~200mm)

제어 프로그래밍의 진행이 느리다.

(5월 11일 피드백 이후 기구부의 전면적인 수정이 있어 제어 프로그래밍을 신경 쓰지 못했다. 이 후 제어부에 집중적으로 시간을 투자하여 6월 둘째 주까지 제어를 마무리 할 계획이다.)

집어올린 사물이 GRIP에서 미끄러 떨어짐.

(GRIP의 끝에 고무밴딩을 한다. 또 압력센서를 부탁해 GRIP과 연결 된 RC서보모터의 움직임을 제어한다.)

참조 특허

기술참조문헌

Robert L. Norton, 「기구학(2009)」, (주)한국맥그로힐

호종관, 「이동식크레인 = Mobile crane(2012)」, 구미서관

유승원, 이종신, 이경로, 조남철, 이근희, 재료역학(수정 3판), 청호

Phillip. J. Cornwell, 「공학도를위한동역학(Sl units 9판)」, McGraw-Hill education Korea

ATmega128(MCU) datasheet

HC-sr04 datasheet

nts0090, hs-311 datasheet

제어코드

#include <avr/io.h>

#include <util/delay.h>

#include <stdio.h>

#include <avr/interrupt.h>

#define F_CPU 16000000L

#define OC0 PB4	//모터2

#define OC2 PB7	//모터3

#define PRESCALE  1024L

#define OCR_NUTRAL (int)((0.0015*F_CPU)/PRESCALE - 1)

#define OCR_PER_DEG ((double)((0.0008*F_CPU)/(double)(PRESCALE*90.0)))

volatile unsigned long timer0;	//

volatile unsigned long timer2;  // 오버플로마다 1씩 증가될 변수

#define Trigger1_1       PORTD|=1  //초음파 트리거, portD 0

#define Trigger1_0       PORTD&=~1 //초음파 트리거

#define Echo1            (PIND&2) //초음파 에코, portD 1

unsigned int range1;

ISR(TIMER0_OVF_vect)

{

timer0++;                   // 오버플로마다 1씩 증가

}

ISR(TIMER2_OVF_vect)

{

timer2++;                   // 오버플로마다 1씩 증가

}

void getEcho1(void)

{

while(!Echo1) PIND =0x02 ;               // high가 될때까지 대기 //

TCNT1=0; TCCR1B=2;         // 카운터 시작, 8분주 = 0.5us //

while(Echo1);                // low가 될때까지 대기 //

TCCR1B=8;                   // 카운터 정지 //

range1=TCNT1/116;            // Cm로 변경 //

}

int main(void)

{

DDRB |= 1<<OC0;  // OC0 = PB4 출력

TCCR0 = 1<<WGM01 | 1<<WGM00; // 고속 PWM 파형 발생모드

TCCR0 |= 1<<CS02  | 1<<CS01 | 1<<CS00; // 프리스케일러 CS22:20 = (1,1,1) 1024 분주

TCCR0 |= 1<<COM01;  // TCNT0 0xFF에서 1, 상승 도중 OCR0와 일치하면 0

DDRB |= 1<<OC2;  // OC2 = PB7 출력

TCCR2 = 1<<WGM21 | 1<<WGM20; // 고속 PWM 파형 발생모드

TCCR2 |= 1<<CS22 | 1<<CS20; // 프리스케일러 CS22:20 = (1,0,1) 1024 분주

TCCR2 |= 1<<COM01;  // TCNT0 0xFF에서 1, 상승 도중 OCR0와 일치하면 0

TIMSK |= 1<<TOIE0;

TIMSK |= 1<<TOIE2;  // 타이머/카운터0 인터럽트 활성화

timer0 = 0;

timer2 = 0;

sei();

//	OCR0 = OCR_NUTRAL + (i4)*OCR_PER_DEG;

//	OCR2 = OCR_NUTRAL + (i7)*OCR_PER_DEG;

DDRD = 1;

TCCR1A=0;	//초음파 카운터 초기값

TCCR1B=8;	//초음파 카운터 정지값

int a = 8.5;	//링크 a길이

int b = 15;	//링크 b길이

int c = 15;	//링크 c길이

int d = sqrt((8+range1)*(8+range1)+14.1*14.1);	//링크 d길이

int ang2 = 360-atan(14.1/(8+range1))*180/3.14;	//세타2 각도

int A = cos(ang2)-d/a-d/c*cos(ang2)+(a*a-b*b+c*c+d*d)/(2*a*c);	//벡터 루프 상수

int B = -2*sin(ang2);

int C = d/a-(d/c+1)*cos(ang2)+(a*a-b*b+c*c+d*d)/(2*a*c);

int D = cos(ang2)-d/a+d/b*cos(ang2)+(c*c-d*d-a*a-b*b)/(2*a*b);

int E = -2*sin(ang2);

int F = d/a+(d/b-1)*cos(ang2)+(c*c-d*d-a*a-b*b)/(2*a*b);

//	int ang31 = 2*atan((-E+sqrt(E*E-4*D*F))/(2*D))*180/3.14;

int ang32 = 2*atan((-E-sqrt(E*E-4*D*F))/(2*D))*180/3.14;	//계산된 각도

//	int ang41 = 2*atan((-B+sqrt(B*B-4*A*C))/(2*A))*180/3.14;

int ang42 = 2*atan((-B-sqrt(B*B-4*A*C))/(2*A))*180/3.14;	//계산된 각도

int angc = ((360-ang2)+ang42)-270;	//실제 사용되는 링크c에 연결된 각도

int angb = 90-((360-ang2)+ang32);	//실제 사용되는 링크b에 연결된 각도

//모터 1번은 180도만 움직이게 함.

//모터 4번은 30도만 움직이게함.

int i = 0;	//for문을 수행하기 위한 변수선언

DDRA = 0x60;	//portA 5번 핀

DDRC = 0x60;	//portC 5번 핀

while(1)

{

Trigger1_1;

_delay_us(10);

Trigger1_0;

getEcho1();

if(range1>=12 && range1<=200)

{

OCR0 = OCR_NUTRAL + (angc)*OCR_PER_DEG;	//2번 모터 작동

_delay_ms(5000);

OCR2 = OCR_NUTRAL + (angb)*OCR_PER_DEG;	//3번 모터 작동

_delay_ms(5000);

for(i=0;i<100;i++)	//4번모터

{

PORTA = 0x20;	//핀에 High 출력

_delay_us(1800);

PORTA = 0x00;	//핀에 Low 출력

_delay_ms(23);

}

for(i=0;i<100;i++)	//4번모터 30도 움직임

{

PORTA = 0x20;

_delay_us(2100);	//1500+180

PORTA = 0x00;

_delay_ms(23);

}

_delay_ms(5000);

OCR0 = OCR_NUTRAL + (-60)*OCR_PER_DEG;

_delay_ms(5000);

OCR2 = OCR_NUTRAL + (-60)*OCR_PER_DEG;

_delay_ms(5000);

for(i=0;i<100;i++)	//1번모터

{

PORTC = 0x20;	//핀에 High 출력

_delay_us(600);

PORTC = 0x00;	//핀에 Low 출력

_delay_ms(23);

}

for(i=0;i<100;i++)	//1번모터 180도 움직임

{

PORTC = 0x20;

_delay_us(2400);	//600~2400

PORTC = 0x00;

_delay_ms(23);

}

/////////////////////////////////////////////////////////////////////

_delay_ms(5000);

for(i=0;i<100;i++)	//4번모터

{

PORTA = 0x20;	//핀에 High 출력

_delay_us(2100);

PORTA = 0x00;	//핀에 Low 출력

_delay_ms(23);

}

for(i=0;i<100;i++)	//4번모터 30도 움직임

{

PORTA = 0x20;

_delay_us(1800);

PORTA = 0x00;

_delay_ms(23);

}

_delay_ms(5000);

for(i=0;i<100;i++)	//1번모터

{

PORTC = 0x20;	//핀에 High 출력

_delay_us(2400);

PORTC = 0x00;	//핀에 Low 출력

_delay_ms(23);

}

for(i=0;i<100;i++)	//1번모터 180도 움직임

{

PORTC = 0x20;

_delay_us(600);	//600~2400

PORTC = 0x00;

_delay_ms(23);

}

_delay_ms(5000);

}

else

{

OCR0 = OCR_NUTRAL + (-60)*OCR_PER_DEG;

OCR2 = OCR_NUTRAL + (-60)*OCR_PER_DEG;

}

}

return 0;

}