Creative Creators
프로젝트 개요
기술개발 과제
국문 : UI로 제어하는 3축 로봇팔
영문 : 3-Axis Robot Arm Controlled By UI
과제 팀명
Creative Creators
지도교수
성민영 교수님
개발기간
2019년 9월 ~ 2019년 12월 (총 4개월)
구성원 소개
서울시립대학교 기계정보공학과 20134300** 강**(팀장)
서울시립대학교 기계정보공학과 20114300** 이**
서울시립대학교 기계정보공학과 20124300** 정**
서울시립대학교 기계정보공학과 20124300** 오**
서울시립대학교 기계정보공학과 20154300** 차**
서론
개발 과제의 개요
개발 과제 요약
가정에서나 소규모 작업 환경에서 사용할 수 있는 UI 제어 3축 소형 로봇팔을 개발한다. 책상이나 작업대 위에서 사용할 수 있도록 작고 가볍게 만들고 또한 사용자 친화적 인터페이스를 갖춰 일반 사용자가 사용하기 쉽게 설계한다.
개발 과제의 배경 및 효과
로봇팔은 이미 제조 분야나 의료 분야 등 많은 산업 분야에서 다양한 용도로 쓰이고 있다. 기술이 발전되감에 따라 가정에서나 소규모 작업 환경에서도 쓰일 수 있는 로봇팔에 대한 수요가 늘어났다. 기존의 로봇팔은 일반 사용자가 사용하기엔 과한 스펙과 복잡한 인터페이스를 가지고 있어 가정에서나 소규모 작업 환경에 쓰이기 적합하지 않다. 따라서 해당 작품은 작고 가볍게 설계하여 일반 책상 위에서도 구동 가능하고 유저 인터페이스를 디자인하여 처음 로봇팔을 접하는 사용자도 쉽게 이용할 수 있도록 설계한다.
개발 과제의 목표와 내용
소규모 작업을 위한 소형화를 중점으로 개발한다. 또한 Graphical User Interface을 제공하여 사용자가 손쉽게 위치를 제어할 수 있도록 하고 Inverse kinematics를 이용한 위치 제어 방식을 채택하여 직관성을 높인다. 그리고 Feedback System의 구현으로 각도 제어의 정확성을 높였다.
완료작품의 평가방법
평가항목 | 평가방법 | 적용기준 | 개발 목표치 | 비중(%) |
---|---|---|---|---|
구조적 안정성 | 반복 작동 시킨 후 부품이 잘 체결되어있는지 확인 | 100회 반복 작동 이후 분리된 부품개수 | 0개 | 20 |
시장성 | 제품이 합리적인 가격인지 확인 | 제작 가격 | 60만원 | 20 |
정밀성 | 실제 결과값들의 상대적 오차 | 결과값들의 표준편차 | 1cm | 30 |
정확성 | 엔드 이펙터의 지정된 위치와 실제 위치와의 오차를 확인 | 오차의 표준편차 | 0.1cm | 30 |
개발일정 및 추진체계
단계별 세부개발 내용 | 담당자 | 개발기간(월단위) | 비고 | |||
---|---|---|---|---|---|---|
9 | 10 | 11 | 12 | |||
제품 구상 및 기초 설계 | 팀 전원 | ㅇ | ||||
하드웨어 설계 및 3D 프린팅 | 이충원, 정희훈 | ㅇ | ㅇ | 10월 이후 다른 업무 보조 | ||
임베디드 개발 및 사용자 인터페이스 연동 | 강건우, 오그릴 | ㅇ | ㅇ | ㅇ | ||
테스트 및 보완 | 차돌딘 | ㅇ | 12월 외 다른 업무 보조 |
구성원 및 추진체계
개발사업비 산정내역서
관련 기술의 현황
State of art
현재 로봇팔은 제조 분야에서 활발히 사용되어지고 있는데 이런 로봇팔을 제조용 로봇이라고 한다. 자동차, 반도체 및 디스플레이 등 다양한 전자부품용 제조에 활용되어지고 있어 다양한 기술이 발달되었다. 대표적인 기술들은 다음과 같다.
1.힘 센서, 로봇간 협업(Co-work), 비전을 이용한 전자제품 조립 분야의 시스템 구현 기술(FANUC)
2.산업용 로봇 6축 다관절, 7축 다관절, 양팔로봇시스템 등 기술 (YASKAWA)
3.공장 자동화를 넘어선 일상 생활 자동화, 의료 자동화 (KUKA)
4.짧은 시간 안에 유저가 로봇 사용을 할 수 있게 해 주는 유저 친화적 인터페이스 기술 (Universal Robots)
기술 로드맵
특허조사
특허명: 산업용 로보트트의 링크 구조 LINK MECHANISM OF INDUSTRIAL ROBOT
위 특허는 3축 로봇팔이며 3번째 축에 대해서 4절링크 구조를 이용하여 3번째 링크를 동작하는 것이 특징이다.
위 특허의 장점은 모터를 밑에 위치시킬 수 있어서 무게중심이 밑에 있다는 것이다. 통상 3번째 링크를 돌리기 위해서 3번째 축에 모터가 위치하여 무게중심이 상승하지만 위 특허는 그것을 방지해준다.
특허전략
위 특허를 피하기 위해서 3번째 링크를 돌리기 위한 4절링크를 쓰지 않고 모터를 3번째 축에 직접 위치시킨다. 다만 이 경우 모터의 너비 때문에 양 옆으로 모터가 돌출되어 미관상 보기가 안좋을 뿐더러 질량 중심이 옆으로 이동한다. 이를 방지하기 위해 웜기어 모터를 활용하여 옆으로 돌출되는 부분을 최소화 시킨다.
관련 시장에 대한 분석
경쟁제품 조사 비교
마케팅 전략
개발과제의 기대효과
기술적 기대효과
DC 모터를 사용한 분해각이 작은 정밀한 소형 로봇팔을 가정이나 작은 사업장에서 사용할 수 있을 것이다. 전에 교육용으로 나온 소형 로봇팔들 보다 정밀한 제어가 가능하기 때문에 작업에 있어서 더 효율적이다. 또한 쉬운 사용자 인터페이스를 구현해 코딩을 전혀 모르는 사람도 이용할 수 있도록 할 것이다.
경제적 및 사회적 파급효과
기존 유사한 기능을 가진 제품에 비해 저렴하다. 가정, 학교 및 소규모 작업장의 로봇팔에 대한 수요가 늘어나고 있기 때문에 저렴한 가격은 충분히 로봇팔 시장에 파급효과를 줄 수 있다. 또한 작고 반복적인 업무를 줄여주어 노동시간의 감소를 가져올 수 있다.
구성원 및 추진체계
이충원 - 하드웨어 설계 및 부품 제작
정희훈 - 하드웨어 설계 및 부품 제작
오그릴 - 소프트웨어 개발
강건우 - 보고서 작성 및 임베디드 개발
차돌딘 - 보고서 작성 및 임베디드 개발
설계
설계사양
제품 요구사항
번호 | 요구사항 | D or W |
---|---|---|
1 | 집게의 힘은 적당한가 | D |
2 | 집게의 위치는 일정한가 | D |
3 | 폭표 위치까지 도달하는가 | D |
4 | 위치 변화에 따라 적절한 각도값이 설정되는가 | D |
5 | 입-출력에 걸리는 시간이 적정한가 | W |
6 | 중량물 이동 시에도 일관된 움직임을 보이는가 | W |
7 | 4축이 리얼타임으로 반응하는가 | W |
8 | 가격은 적정한가 | W |
개념설계안
시스템 구성도
DC모터와 각도센서를 이용해 자체 서보모터를 구성하며 제어보드로는 Beaglebone Black을 이용한다. Beaglebone Black과 컴퓨터를 연결하는 방법은 TCP/IP를 이용해 통신하기로 한다. 컴퓨터는 UI인터페이스를 제공하며 사용자는 이 UI를 통해 로봇팔을 제어할 수 있다.
Computed Torque PID DC모터 제어
링크2, 링크3의 각도에 따라 중력에 의해 걸리는 토크를 미리 계산한 후, 토크제어를 통해 Feed Forward로 토크에 해당하는 전압을 PID 제어와 함께 걸어준다.
Computed Torque 계산
3축 로봇팔의 2번 링크와 3번 링크 위치에 따른 중력에 의한 토크는 위와 같다.
이론적 계산 및 시뮬레이션
모터 PID 시뮬레이션
link1 모터의 서로 다른 PID값에 따른 reponse를 시뮬레이션 하였다. link1의 특징상, load를 토크 대신에 link2, link3 외 결합된 파트들의 관성 모멘트를 모터의 관성모멘트와 더해서 시뮬레이션을 진행하였다.
Inverse Kinematics 계산 식
Xc, Yc, Zc : End effector의 wrist center의 xyz좌표
Theta 1,2,3: link1,2,3의 각도
조립도
조립 완성 사진
조립순서
link1에 베어링 4개를 조립한다.
모터 브라켓과 모터와 link1_shaft를 조립한다.
모터조립결합체와 link1을 결합한다.
link2_support와 link1을 결합한다.
각도센서와 link1_shaft을 결합한다.
지금까지 결합한 모습이다.
각도센서와 link2_power를 link2_base와 조립한다.
link2_motor_mount와 모터와 커플러와 긴 샤프트를 결합한다.
이전에 결합한 것을 link2_base와 결합한다.
마운팅허브 16mm와 짧은 샤프트와 link3를 조립한다.
각도 센서와 이전에 조립한 것과 웜기어DC모터를 함께 조립한다.
부품도
link1
link1_shaft
link2_base
link2_motor_mount
link2_power
link2_support
link3
제어부 및 회로설계
건전지로 이루어진 5V를 OP-amp를 이용해 3.3V로 전압강하시킨다.
이 3.3V를 센서와 모터 드라이브 컨트롤 핀을 제어하는 데 쓴다.
모터 드라이브에 12V 파워 서플라이를 연결한다.
이 12V로 모터를 구동한다.
Beaglebone Black SPI Master 1개에 대해 센서(각도) 3개와 통신해야 한다.
이 경우 OR GATE와 Beaglebone Black의 GPIO를 이용하면 1개로 3개와 통신할 수 있다.
각각의 센서에 고유한 GPIO를 배정한다. 한 센서의 값을 알고 싶을 때 그 센서에 배정된 GPIO 신호를 LOW로 설정한다.
소프트웨어 설계
소프트웨어는 크게 2가지로 나뉜다. 첫째 PC에서 실행되는 UI프로그램과 둘째 Beaglebone Black에서 실행되는 임베디드 프로그램이다.
소프트웨어 언어는 C++를 선택하였다. 그에 따라 C++기반의 프레임워크인 QT를 이용하여 UI를 작성하였다. QT프로그램과 Beaglebone Black이 통신하는 방법은 TCP/IP를 이용하였다. 3D화면을 보여주기 위해서 Opengl 라이브러리를 이용하였다.
UI 소프트웨어 소개
View 조작 방법은 카티아의 조작 방법과 비슷하게 하였다.
화면에서 마우스 휠 버튼만 누른 상태에서 마우스를 움직이면 View가 양옆으로 이동한다.(Pan 모드)
화면에서 마우스 휠 버튼을 누른 상태에서 왼쪽 마우스를 누르면 View가 회전한다.(Rotation 모드)
화면에서 마우스 휠 버튼을 위아래로 움직이면 View가 앞뒤로 이동한다.(확대 축소와 비슷)
화면에서 xyz축에 마우스를 대고 드래그하면 inverse kinematics가 적용된다.
connect 버튼: Beaglebone Black과 연결하는 버튼
set Angle 버튼: 목표 각도를 Beaglebone Black에 송신하는 버튼
set PID 버튼: PID와 offset을 Motor 번호에 맞는 모터에 적용한다.
슬라이더와 박스를 이용해 LInk1,2,3의 각도를 조정할 수 있다.
UI 소프트웨어 클래스
Axis 클래스: 로봇팔 Axis Camera 클래스: View에 대한 행렬을 저장하고 마우스 입력에 따라 그 행렬을 수정하는 클래스.
EndEffector 클래스: End effector 위치 좌표를 저장하는 클래스.
Grid 클래스: Grid의 좌표를 저장하고 그리는 클래스.
Hexahedron 클래스: 직육면체의 좌표를 저장하는 클래스.
Process 클래스: Beaglebone Black으로부터 센서 데이터를 받아 화면에 띄우는 클래스.
Slider 클래스: UI에 있는 목표각도 슬라이더를 관리하는 클래스.
SpinBox 클래스: UI에 있는 목표각도 박스를 관리하는 클래스.
Network 클래스: Beaglebone Black과 통신할 수 있도록 소켓 descriptor등을 관리하는 클래스.
Robot 클래스: Denavit A행렬을 저장하고 정기구학과 역기구학을 계산하는 클래스.
Beaglebone Black 소프트웨어 클래스
GPIO 클래스: Beaglebone Black의 GPIO를 제어하는 클래스.
PWM 클래스: PWM의 주기와 duty cycle을 제어하는 클래스.
Motor 클래스: 모터를 제어하는 클래스로 GPIO2개(H bridge)와 PWM채널을 이용해 모터의 방향과 duty cycle을 제어하는 클래스.
Network 클래스: 컴퓨터와 통신할 수 있도록 소켓 descriptor등을 관리하는 클래스.
NetStream 클래스: Network 클래스가 관리하는 소켓을 통해 데이터를 읽고 쓰는 것을 관리하는 클래스.
SPI 클래스: SPI 통신을 통해 센서로부터 각도 값을 읽어오는 클래스.
자재소요서
부품명 | 규격 | 수량 | 구매,외주,제작 |
---|---|---|---|
자기 센서 | absolute encoder | 40 | 구매 |
점퍼 케이블 수-수 | 30cm | 40 | 구매 |
점퍼 케이블 수-암 | 30cm | 40 | 구매 |
점퍼 케이블 암-암 | 30cm | 40 | 구매 |
점퍼 케이블 수-수 | 20cm | 40 | 구매 |
점퍼 케이블 수-암 | 20cm | 40 | 구매 |
점퍼 케이블 암-암 | 20cm | 40 | 구매 |
파워 서플라이 | 12V-6A | 1 | 구매 |
파워 서플라이 케이블 | 220V 3상 | 1 | 구매 |
DC 웜기어드 모터 | 12V 55rpm | 1 | 구매 |
DC 기어드 모터 | 12V 200rpm | 1 | 구매 |
DC 기어드 모터 | 12V 60rpm | 1 | 구매 |
비글본 보드 | BeagleBone Black | 1 | 구매 |
마운팅 허브 | 내경 10mm | 1 | 구매 |
볼트류 | M2,M3,M4 | 120 | 구매 |
너트류 | M2,M3,M4 | 120 | 구매 |
모터 커플링 | 6*10 기본직결형 | 2 | 구매 |
베어링 | 내경 10mm | 3 | 구매 |
베어링 | 내경 3mm | 4 | 구매 |
3D 프린트 부품 | ABS, PLA | 외주 |
결과 및 평가
완료작품 소개
프로토타입 사진
포스터
개발사업비 내역서
항목 (품명, 규격) | 수량 | 단가 (원) | 계 (원) |
---|---|---|---|
자기 센서 | 3 | 23780 | 71340 |
점퍼 케이블 수-수, 30cm | 40 | 1030 | |
점퍼 케이블 수-암, 30cm | 40 | 950 | |
점퍼 케이블 암-암, 30cm | 40 | 800 | |
점퍼 케이블 수-수, 20cm | 40 | 1260 | |
점퍼 케이블 수-암, 20cm | 40 | 1260 | |
점퍼 케이블 암-암, 20cm | 40 | 1260 | |
파워 서플라이, 12V-6A | 1 | 16300 | 16300 |
파워 서플라이 케이블, 220V 3상 | 1 | 8000 | 8000 |
DC 웜기어드 모터, 12V 55rpm | 1 | 18000 | 18000 |
DC 기어드 모터, 12V 200rpm | 1 | 14500 | 14500 |
DC 기어드 모터, 12V 60rpm | 1 | 20590 | 20590 |
비글본 보드 | 1 | 73000 | 73000 |
비글본 케이스 | 1 | 9600 | 9600 |
알루미늄 마운팅 허브 | 1 | 14700 | 14700 |
볼트류, M2,M3,M4 | 11580 | ||
너트류, M2,M3,M4 | 3960 | ||
모터 커플링 | 2 | 1800 | 3600 |
베어링, 내경 10 | 3 | 360 | 1080 |
베어링, 내경 3 | 4 | 310 | 1240 |
3D 프린팅 비용 |
완료 작품의 평가
평가항목 | 평가방법 | 적용기준 | 개발 목표치 | 비중(%) | 평가결과 |
---|---|---|---|---|---|
구조적 안정성 | 반복 작동 시킨 후 부품이 잘 체결되어있는지 확인 | 100회 반복 작동 이후 분리된 부품개수 | 0개 | 20 | 분리된 부품 개수가 없다. 20% |
시장성 | 제품이 합리적인 가격인지 확인 | 제작 가격 | 60만원 | 20 | 60만원보다 더 저렴하며 50만원대 가격이다. 20% |
정밀성 | 실제 결과값들의 상대적 오차 | 결과값들의 표준편차 | 1cm | 30 | 상대적 오차가 1cm이내에 들지 못하였다. 10% |
정확성 | 엔드 이펙터의 지정된 위치와 실제 위치와의 오차를 확인 | 오차의 표준편차 | 0.1cm | 30 | 엔드 이펙터의 오차가 0.1cm이내에 들지 못하였다. 10% |
향후평가
전선배치에 대한 평가가 필요하다. 이번 프로젝트에서 우리 팀이 간과한 사항은 전선배치에 대한 고려였다. 전선이 너무 많아서 미관상 보기도 안좋을 뿐더러 로봇팔이 움직임에 따라 전선이 움직이며 센서 값을 읽는데에 오류가 발생했다. 향후에는 전선을 최대한 줄이는 방법과 그 전선이 최대한 움직이지 않도록 전선을 넣을 공간을 고려하는 것이 필요할 것이다.
부록
참고문헌 및 참고사이트
1. Mark W. Spong, Seth Hutchinson, and M. Vidyasagar, Robot Dynamics and Control, 2nd ed., 2004
2. Derek Molloy, Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux, Wiley, 2014
3. Franklin, Gene F., Feedback Control of Dynamic Systems, 7th ed., Pearson, 2015
소프트웨어 프로그램 소스
void Motor::control(float & reference, float & realA){
if (!run) {
return;
}
pid.error0 = reference - realA;
int dutyCycle = (int)(pid.Pgain * pid.error0 + pid.Igain * pid.errorI + pid.Dgain*(pid.error0 - pid.error1));
pid.error1 = pid.error0;
if (dutyCycle > 0) {
setDirection(DC::MOTOR_DIRECTION::B);
pid.errorI = pid.errorI + pid.error0;
go(dutyCycle);
}
else if (dutyCycle < 0) {
setDirection(DC::MOTOR_DIRECTION::A);
pid.errorI = pid.errorI + pid.error0;
go(dutyCycle);
}
else {
setDirection(DC::MOTOR_DIRECTION::N);
pid.errorI = pid.errorI + pid.error0;
}
}
Beaglebone Black 임베디드 보드에 쓰였던 모터 컨트롤 코드이다.
Robot::Qs Robot::inverseKinematics(glm::mat4& target) {
glm::vec3 position = (glm::vec3)target[3];
glm::vec3 wrist_center= position;
glm::f32 qs_[3];
wrist_center = position;
qs_[0] = atan2( wrist_center.y, wrist_center.x)*180.0/M_PI;
glm::f32 a2 = glm::length((glm::vec3)denavitA[2][3]);
glm::f32 a3 = endEffectorLength;
glm::f32 r = sqrt(pow(wrist_center.x, 2) + pow(wrist_center.y, 2));
glm::f32 s = wrist_center.z - glm::length((glm::vec3)denavitA[1][3])- glm::length((glm::vec3)denavitA[0][3]);
double D = (+pow(r, 2) + pow(s, 2) - pow(a2, 2) - pow(a3, 2)) / (2.0*a2*a3);
glm::f32 q3 = atan2( sqrt((1 - pow(D, 2))), D);
qs_[2] = q3 * 180.0 / M_PI;
qs_[1] = 90.0 - 180.0 / M_PI * (atan2(s, r) + atan2(a3*sin(q3), a2 + a3 * cos(q3)));
Qs qs;
for (int i = 0; i < 3; i++) {
qs.q[i] = qs_[i];
}
return qs;
}
QT프로그램에 쓰였던 inverse kinematics에 관한 코드이다.