A 문서 원본 보기
←
A
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
이 문서는 편집하거나 다른 명령을 할 수 없도록 보호되어 있습니다.
문서의 원본을 보거나 복사할 수 있습니다.
<div>__TOC__</div> ==프로젝트 명== ROS를 활용한 서비스 산업용 모바일 로봇 “게부기” 설계 (Designed “Geboogi" for Mobile Robot for Service Industry using ROS) ==팀 소개== 서울시립대학교 기계정보공학과 2011430018 배준호(팀장) 서울시립대학교 기계정보공학과 2011430037 정한슬 서울시립대학교 기계정보공학과 2011430039 조진원 서울시립대학교 기계정보공학과 2011550003 남현수 ==개발과제 개요== === 요약 === 이 모바일 로봇은 ROS 시스템을 바탕으로 하는 Kobuki 와 Xtion 카메라, Gripper를 활용하며, 앱을 이용해 원하는 목표물을 운반하는 명령을 내리면 지도를 그리며 맵을 돌아다니다가 목표물을 카메라로 포착시 해당 목표물로 접근하여 Gripper 로 Kobuki 상단의 상자에 담아 미리 지정한 목표지로 이동하는 알고리즘을 구현한다. 그리고 수동 모드로 조작할 시 안드로이드 운영체제가 탑재된 스마트폰에서 애플리케이션으로 조작이 가능하므로 물체 인식이 어려운 환경에서는 사용자가 직접 조종하여 원하는 물건을 집어서 수집할 수 있습니다. ===개발 배경=== 최근 핵가족화와 고령화 현상 및 맞벌이 부부 증가로 인한 가사노동력 부족과 풍요와 여유에 대한 욕구로 인해 기업 뿐만 아니라 일반 가정에서도 사용 가능한 서비스 로봇의 필요성이 대두되고 있으며, 그에 비해 서비스 로봇 제작에 대한 플랫폼은 부족한 상황이다. 이러한 욕구를 충족시키기 위해 사용자가 원하는 사물을 인식 및 구별하고 물건을 집는 기능이 포함된 모바일 로봇 플랫폼을 제작한다. ===프로젝트 기대효과=== 이러한 시스템은 범용성이 높은 센서와 Gripper Arm을 가지고 있으므로 추가 연구 개발을 통해 복지, 탐사, 수집 등의 다양한 역할 수행으로 개조할 수 있을 것이라 기대됩니다. ===프로젝트 기간=== 2017. 03. 03 ~ 2017. 06. 16 ===개발 목표=== ROS 시스템의 기본 로봇인 Kobuki에 카메라와 수집할 수 있는 장치를 연결하여 스스로 물체를 인식하여 원하는 물체를 집어서 수집할 수 있도록 하고자 합니다. 그리고 사용자가 스마트폰 애플리케이션을 통해 조작이 가능하도록 하여 수동으로도 조작이 가능하게 하고자 합니다. ===개발 과정=== 먼저 라즈베리 파이에 ROS를 설치하여 Kobuki를 조작할 수 있도록 해줍니다. 그 다음 인텔 CPU가 포함된 Upboard에도 ROS를 설치해 카메라에서 영상을 받아 네비게이션과 슬램 기능을 구현할 수 있도록 해줍니다. 그리고 물체 인식은 Open CV에서 사물인식 알고리즘을 차용하여 테니스공을 인식할 수 있도록 최적화해줍니다. 그리고 가로 * 세로 * 높이 각 2.7m * 3m * 0.6m 크기의 하얀색 세트장 안에 박스로 장애물을 설치합니다. 그리고 이 안에 테니스 공을 곳곳에 두고 꼬부기를 두어 전원을 켜둡니다. 이때 라즈베리파이는 서버의 역할을 수행하며 안드로이드폰의 애플리케이션으로부터 명령이 주어지면 그에 맞게 구동을 하게 됩니다. ====그리퍼 개발과정==== [[파일:그리퍼.png|섬네일|200픽셀|물체를 집는데 사용되는 그리퍼]] 그리퍼를 개발하기 위하여 먼저 그 원리를 이해하고자 하였습니다. 그래서 과학상자를 이용해 그리퍼의 모형을 제작하여 움직여주었습니다. 그 결과 그리퍼는 평행사변형의 원리를 이용해 작동한다는 사실을 알 수 있었습니다. 그래서 이를 착안하여 그리퍼를 CAD로 설계하고 창작터에서 3D프린터로 각 부품을 출력하여 나사못과 볼트로 조립해주었습니다. 그리고 그리퍼가 물체를 잘 집을 수 있도록 넓은 면적을 가진 보조장치를 추가로 설계하여 그리퍼의 집는 부분에 장착해주었습니다. 또한 그리퍼에 서보모터를 장착하여 집는 운동과 들었다 내렸다 하는 운동을 할 수 있도록 해주었습니다. ====Image Processing 구현과정==== Image Processing은 Open CV를 활용하여 이미지를 처리하는 형태로 구현되었습니다. 카메라로 촬영되는 연속적인 이미지를 받으면 색깔과 명암을 구분하여 원하는 목표물을 인식하게 됩니다. 이때 프로젝트에서 인식하게 될 물체인 테니스공에 맞는 색깔의 채도와 명암을 넣어주면 테니스공을 인식하게 되는데 이를 위한 최적화 작업도 진행하였습니다. 그 결과 테니스공을 잘 인식하는 모습을 확인할 수 있었습니다. 이미지처리의 구체적인 알고리즘은 이렇습니다.영상을 촬영하여 색조, 명암, 색채를 표현하는 FSV형식으로 변환한 다음 원하는 색깔 범위를 뽑아내는 스레시 홀드를 실행하고 여기서 모포 업스을 실행하여 작은 부분은 하얀부분은 줄이고 큰 부분은 검은 부분은 더욱 키워서 목표물이 부각되도록 해줍니다. ====슬램과 네비게이션 구현과정==== [[파일:Upboard.jpg|섬네일|150픽셀|오른쪽|인텔CPU가 장착된 Upboard]] ROS 시스템에서 사용할 수 있는 RGB-D 카메라로 주변의 영상을 촬영하면 주변 사물과의 거리를 인식할 수 있습니다. 이 공간정보를 ROS에 포함된 노드인 SLAM에서 받아들여 공간지도를 제작할 수 있습니다. 이때 네비게이션에서 현재 위치를 파악할 수 있기에 슬램과 네비게이션을 활용하면 원하는 위치까지 이동하거나 돌아오는 것이 가능해집니다. 그런데 라즈베리파이의 경우 영상처리 능력이 떨어지기 때문에 고성능의 인텔 CPU가 포함된 Upboard에서 이 기능을 수행하도록 변경해주었습니다. ====애플리케이션 개발과정==== [[파일:ApplicationMode.png|200픽셀|섬네일|오른쪽|게부기컨트롤러 애플리케이션의 화면]] 안드로이드폰에서 애플리케이션을 개발하기 위하여 윈도우즈 PC에 안드로이드 스튜디오를 설치하였습니다. 그 다음 XML형식의 화면 레이아웃을 구성해줍니다. 그리고나서 Java형식의 파일에서 화면의 각 버튼을 눌렀을 때 원하는 기능이 구현되도록 해줍니다. 메인화면에서는 무선연결, 슬램, 자동모드, 수동모드, 귀환모드를 실행할 수 있도록 해줍니다. 무선연결에 들어가면 게부기에 연결된 IP주소를 입력하여 무선연결을 해줍니다. 이때 스마트폰으로부터 게부기에 신호를 전달할 수 있게 됩니다. 그리고 슬램모드에서는 "40"신호를 게부기에 보내는데 이때 게부기의 서버에서 이를 받아들여 슬램을 실행하게 됩니다. 그리고 자동모드는 "10", 수동모드는"20", 귀환모드는 "30" 문자열 신호를 보내게 되고 이때 게부기에서 각 신호를 받아들여 그 신호에 맞는 명령을 구분하고 실행합니다. ===결과물 요구사항=== 세트장 안에 있는 게부기에 애플리케이션으로 슬램 명령을 하달하였을 때 카메라로 촬영된 영상을 통해 주변 지형물을 파악해 지도를 그려주어야 합니다. 그리고 자동모드를 명령하면 게부기가 자동으로 테니스공을 인식하고 그곳을 바라본 뒤 다가가 그리퍼로 공을 집어서 들어올린 뒤 박스에 떨어뜨려 수집하여야 합니다. 그리고 귀환 명령을 하달하면 도킹 스테이션으로 귀환하여 자동으로 충전할 수 있도록 정확히 안착하여야 합니다. 그리고 수동모드로 구동할 시에는 전진, 후진, 왼쪽으로 돌기, 오른쪽으로 돌기, 그리퍼를 내려서 집기, 올려서 놓기 기능을 사용자가 조작하여 원하는 물체에 다가가 그리퍼로 수집할 수 있어야 합니다. ===목적계통도=== [[파일:목적계통도.jpg|중간]] * 편리성<br /> 모바일 장치(kobuki)와 위에 올려진 박스 그리고 장착된 집게를 보는 순간 해당 로봇이 어떠한 용도로 쓰일지 직관적으로 느낄 수 있다. 이러한 직관은 자연스레 사용자의 활용목적으로의 생각을 이끈다. 모바일 장치를 통한 이동과 장착된 집게 손을 통하여 다양한 목적으로 그 목적에 부합하는 물건들을 수집 할 수 있다. 앱과 연동하여 명령을 주고받는 통신 서버를 구축하기 때문에 사용자 입장에서 편리하게 로봇을 조작할 수 있고 직접 연결이 되어 있지 않은 상황에서도 무선으로 조작이 가능하다. 따라서 사용자가 거리에 상관없이 원거리에서도 로봇 조작이 가능하며 개발자가 이를 잘 활용한다면 접근이 불가한 위험지역이나 통제 지역에서 위험물을 수집하는 로봇을 구현할 수 있다. 이 뿐만 아니라 시간에 제약받지 않고 명령할 수 있으므로 언제든지 원하는 때에 로봇을 사용할 수 있다. 가로 세로 30cm정도의 작은 크기는 로봇의 구동공간의 제약으로부터 자유로울 수 있다. 즉 넓은 공간 뿐만 아니라 좁고 협소한 실내에서도 얼마든지 활용할 수 있으며 로봇의 성능을 최대한으로 발휘할 수 있다. * 실용성<br /> 기존에 개발된 가정용 로봇들은 어느 한 가지 역할에 특화된 외부기기를 갖고 있어서 하드웨어적인 수정없이는 기존에 주어진 역할이 아닌 다른 역할을 수행하기 힘들었다. 그래서 이 로봇에는 어느 한 가지 역할에 특화된 외부기기가 아닌 다양한 역할 수행이 가능한 시각센서와 로봇팔을 설치하여 소프트웨어적인 수정만으로도 다양한 역할을 수행할 수 있게 하였다. 가정에서는 산업현장하고는 달리 장비를 정비하는 역할을 전문적으로 수행하는 사람이 없어 정기적으로 로봇을 점검하고 부품을 교체하는 것이 매우 힘들다. 이러한 불편함을 감안하여 이 로봇은 반영구적으로 사용이 가능한 부품들을 사용하여 가정에서 운용하는데 필요한 유지비를 최소화 하였다. * 발전가능성<br /> 오픈소스를 활용하여 로봇을 구동하는 시스템을 구축하기 때문에 누구든지 이를 활용하여 유용한 로봇을 개발하고 발전시킬 수 있다. 다시 말해 사용자가 원하는 목적을 위하여 얼마든지 소스를 수정이 가능하므로 폭넓게 사용할 수 있다. 그리고 본 로봇은 카메라, 집게, Kobuki, 안드로이드 앱 등 각 부분이 모듈화 되어있다. 이러한 모듈화는 필요에 따라서 각 모듈을 바꿈으로써 보다 폭넓은 기능을 수행하도록 할 수 있다. 또한 현재 부착된 모듈 부분뿐만 아니라 그 외에 다른 기능도 쉽게 추가 할 수 있다. ==프로젝트 결과== ===동작시나리오=== 초기에 설치된 2.7m x 3m의 공간 내부에 몇가지 장애물이 설치되어있습니다. 그리고 그 안에는 테니스공이 여러개 흩어져있습니다. 그리고 게부기는 맵 내부에 위치하고 있습니다. 이때 안드로이드폰 애플리케이션에서 IP주소를 통해 게부기와 무선연결을 시도합니다. 무선연결이 된 후에 슬램모드를 실행하면 게부기가 슬램을 실행하여 주변의 지형을 촬영하고 맵으로 그려줍니다. 그 다음 자동모드를 누르면 자동수집 명령이 게부기에게 하달되어 게부기가 자동으로 주변을 탐색하며 테니스공을 수집하게 됩니다. 그러나 만약 수동모드로 작동시키면 사용자의 명령에 따라 게부기가 구동하게 됩니다. 수동모드에서는 게부기를 전진, 후진, 왼쪽으로 회전, 오른쪽으로 회전으로 움직임을 조작할 수 있고 그리퍼에는 집기, 올리기, 놓기, 내리기 동작을 제어할 수 있습니다. 이러한 조작을 통해 사용자가 원하는 물체에 게부기가 다가가 물체를 수집하도록 조작해줄 수도 있습니다. 만일 수집이 완료되었다면 귀환 모드를 눌러 게부기가 도킹스테이션에 스스로 돌아와 안착하도록 할 수 있습니다. 이 도킹스테이션에서 게부기는 자동으로 충전이 됩니다. ===시스템 구성=== [[파일:게부기하드웨어구성.png|200픽셀|오른쪽|섬네일]] 안드로이드 애플리케이션에서 라즈베리파이에 명령을 보내면 라즈베리파이에서 명령을 받아 게부기의 움직임과 그리퍼의 모션을 제어하게 됩니다. 그리고 이 명령이 슬램이라면 라즈베리파이에서는 그래픽 처리가 어려우므로 Upboard에서 그래픽처리를 통해 맵을 구현합니다. 그리고 자동 모드에서 실행되는 카메라를 통한 영상 촬영과 ROS의 Open CV를 활용한 물체인식도 Upboard에서 처리되어 인식된 물체의 위치와 방향 정보를 라즈베리파이로 전송해줍니다. 그러면 인식된 물체의 위치와 방향을 인식한 게부기는 물체 쪽으로 회전한 뒤 접근합니다. 충분히 접근하면 초음파 센서가 정확한 거리를 측정하고 알맞은 거리에 도착했을 때 그리퍼를 내려 테니스공을 집은 뒤 들어올려 박스에 떨어뜨립니다. 그러면 박스에 걸쳐놓은 판에 공이 닿아 굴러서 박스 내부로 떨어지게 됩니다. 그러면 수집이 완료됩니다. 이러한 과정을 반복하다가 귀환 명령이 떨어지면 게부기는 네비게이션 정보를 통해 현재 위치를 파악하고 초기위치로 돌아갑니다. 그다음 도킹 스테이션을 향해 나아가 안착하게 됩니다. 게부기는 도킹스테이션에서 자동으로 충전이 되므로 장시간 구동이 가능합니다. ===기구부 구현=== 물건을 집기 위한 장치로서 그리퍼를 설계하여 장착해주었습니다. 잡고 놓는 모션을 위한 서보모터 하나와 들어올리고 내리기 위한 서보모터 하나, 총 두개의 서보모터를 이용해 수집이 가능하도록 하였습니다. 이때 수집한 테니스공은 박스에 저장됩니다. ===제어부 구현=== 라즈베리파이가 Kobuki의 동작을 구현하고 인텔칩이 포함된 Upboard에서 카메라 영상처리를 통한 물체인식, 슬램과 네비게이션을 통한 공간과 위치 인식을 수행합니다. ===소프트웨어 구현=== ROS 시스템의 노드를 차용해 Kobuki를 구동하고 슬램과 네비게이션 기능을 수행합니다. 그리고 Open CV의 이미지 처리 알고리즘을 차용해 테니스공을 구분할 수 있도록 해주었습니다. 그 밖에 그리퍼 제어는 서보모터를 PWM으로 제어해주었고 안드로이드 애플리케이션과 라즈베리파이간의 통신은 서버 클라이언트 통신을 활용하였습니다. ===미구현 내용=== {| cellpadding="10" cellspacing="0" border="1" width="100%" |- ! 항목 !! 계획 !! 실제 구현 !! 원인 분석 |- ! 네비게이션 | 스스로의 위치를 파악하고 목표물의 위치를 파악 || 목표물의 위치 파악에 오차가 있고 초기 위치를 입력해주어야 움직였을 때 자신의 위치를 정확하게 파악할 수 있습니다. || Depth 카메라가 거리를 정확히 인식하지 못하기 때문입니다. |- ! 물체 인식 | 테니스공을 인식 || 테니스 공이 너무 가깝거나 멀리 떨어져있으면 인식하지 못하고 조명이 강해도 인식하지 못함 || 색깔과 명암비를 이용해 물체를 인식하기 때문에 크기에 대한 고려가 부족하고 조명의 밝기에 의해 명암비와 색깔을 다르게 인식할수도 있습니다. |- ! 수동조작 | 영상을 전송하여 원거리에서 수동으로 조작이 가능하도록 함 || 수동으로 조작만 가능함 || 영상 전송을 위한 서버통신을 구성할 능력이 부족하였습니다. |- ! 물체 수집 | 그리퍼로 물체를 박스에 넣어 수집합니다. || 그리퍼가 충분히 젖혀지지 않아 부득히 하게 중간에 물체를 박스에 떨어뜨리도록 하였습니다. || 서버모터가 실제 구동할 수 있는 각도에 한계가 있습니다. |} ===제약사항=== 라즈베리파이가 영상을 처리하는 능력이 떨어져서 주요 기능인 이미지처리와 슬램을 수행하기에는 역부족이었습니다. 그래서 추가적인 하드웨어 설치가 불가피하였습니다. 때문에 고성능의 인텔 CPU를 장착한 Upboard를 장착하여 라즈베리파이에서 감당하기 힘든 영상처리와 슬램 기능을 수행하도록 역할을 분담해주었습니다. ==프로젝트 평가== ===팀원 역할 분담 및 평가=== {| align="center" cellpadding="10" cellspacing="0" border="1" width="100%" |- ! '''팀원''' !! '''역할''' !! '''완성도''' |- ! 배준호 | 네비게이션과 슬램 || 90% |- ! 조진원 | 그리퍼 설계 || 100% |- ! 정한슬 | 이미지처리를 통한 물체인식 || 90% |- ! 남현수 | 게부기 조작을 위한 안드로이드 애플리케이션 설계 || 70% |- |} ===결과물 평가=== 애플리케이션을 통한 게부기 제어는 성공적입니다. 그러나 영상 정보를 애플리케이션에서 받아볼 수 있다면 멀리 떨어진 거리에서도 게부기를 제어하여 원하는 물체를 수집하는 기능을 수행할 수 있을 것이기에 아쉬움이 남습니다. 그리고 슬램과 네비게이션에 있어서는 만족할만한 결과를 얻었습니다. 그렇지만 네비게이션에서 초기 위치를 설정해주어야만 한다는 점이 아쉽습니다. 자동 모드에서 수집을 할 때 정확하게 인식하고 물체에 다가가 수집을 하여야 하는데 이 부분에 대해선 충분한 시현을 통한 확인이 요구되어집니다. 그리고 귀환의 경우에도 도킹스테이션이 초음파 센서에 걸리지 않고 정확하게 안착하여야 충전이 가능해지는데 이에 대한 성공율도 확인해보아야 합니다. {| align="center" cellpadding="10" cellspacing="0" border="1" width="100%" |- ! '''주제''' !! '''달성률''' !! '''설명''' |- ! 전력 | 40% || - Kobuki의 자체 전력 한계치: 약 1시간 가량 사용 가능 - Kobuki에서 Upboard와 Raspberry Pi의 전력 공급회로 구성 - Docking Station으로 귀환 문제를 해결하지 못함 |- ! 수동 | 70% || - App을 통한 수동 제어 원활 - 일부 조작 버튼 불안정 |- ! 부하 | 60% || - 코어를 노트북 대신 Upboard로 변경 - Raspberry Pi3 만으로는 CPU 부하를 감당할 수 없음을 확인 |- ! 자동 | 60% || 명령 기반의 움직임은 가능하나, 명령 중복시 진동 현상 발생 및 일부 명령 불복 현상 발생 |- ! SLAM | 90% || - 충분히 좌표인식이 가능한 지도 제작 가능 |- |} ==느낀점== [[파일:회의중.jpg|섬네일|200픽셀|오른쪽|게부기를 설계하기 위해 회의중인 모습]] 물체를 인식하고 수집하는 단순한 기능을 수행하는 로봇을 제작하기 위하여 정말 많은 노력을 들여야 함을 알 수 있었습니다. 그래도 기존에 공개된 오픈소스를 잘 활용한다면 이러한 기능을 구현하는 로봇을 제작할 수 있다는 사실에 감탄하였습니다. 또한 그리퍼를 제작하기 위해 CAD를 이용해 부품을 설계하고 이를 3D프린팅으로 출력하여 조립하였는데 이처럼 원하는 기구를 설계하고 제작하는 것이 정말 어렵지 않다는 사실을 알게 되었습니다. 그리고 안드로이드의 애플리케이션을 제작하고 로봇에 연결된 라즈베리파이와 통신을 수행하면서 우리가 만든 안드로이드 애플리케이션으로 로봇 조작이 가능하다는 사실에 놀라웠습니다. 이처럼 기존에 공개된 다양한 코드들을 활용하고 우리가 가진 능력을 십분 활용한다면 이렇게 멋진 기능을 수행하는 로봇도 제작할 수 있다는 사실에 참 놀랍고 감사하였습니다.
A
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
더 보기
검색
둘러보기
대문
최근 바뀜
임의 문서로
도움말
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보