이것좀사조

MIE capstone
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 00000000..

영문 : 00000000..

과제 팀명

이것좀사조

지도교수

신동헌 교수님

개발기간

2019년 9월 ~ 2019년 12월 (총 4개월)

구성원 소개

서울시립대학교 기계정보공학과 2013430018 박**(팀장)

서울시립대학교 기계정보공학과 2012430019 유**

서울시립대학교 기계정보공학과 2015430004 김**

서울시립대학교 기계정보공학과 2015430010 김**

서론

개발 과제의 개요

개발 과제 요약

 기존에 청소노동자가 직접 끌고 다녀야 했던 청소카트에 자율 주행 기능, 자율 이동 기능, 무게 알림 기능, 그리고 청소카트를 스마트폰 어플리케이션으로 연결하는 기능을 융합해 적용하여 사용자에게 편리함을 제공하고자 한다. 이런 기능들을 통하여 기본 청소카트의 무게에 추가되는 부수적인 물품의 무게와 쓰레기들의 무게를 힘을 들이지 않고 이동시켜 청소 노동자들의 근로 여건을 개선하고자 한다. 이는 보통 고령의 여성이 많은 청소 노동자의 노동 환경을 개선시킬 수 있을 것이다. 또한 3개월의 개발 기간동안 청소카트의 기구적인 부분까지 설계를 하는 것은 어렵다고 판단하여, Yujin Robot 사의 kobuki 로봇 플랫폼을 사용할 것이다.

개발 과제의 배경 및 효과

(1) 배경

수원시 청소노동자 근무환경실태 및 개선방안 연구 결과에 따르면, 현재 사회에서 청소 노동자들의 평균 연령은 58.6세이고, 전체 청소 노동자의 약 70% 정도가 여성이다. 또한, 근무강도는 기본 근로 시간을 초과하는 주 44.3시간으로 조사되었다. 시중에서 판매중인 청소용 카트의 평균 무게는 15kg이고, 이에 청소용품들과 청소 중간에 쓰레기들을 더 수거하게 되면 그 무게가 상당하다. 이런 노동환경에서 청소 카트가 사용자가 원하는 방향으로 자율 주행하게 되면 상당한 노동 환경 개선 효과가 있을 것이다. 추가적으로 어플리케이션을 고령의 사용자가 쉽고 간편하게 이용하도록 만들고자 하였다. 

(2) 기대 효과

 본 개발을 통해 완성될 스마트 청소 카트 시스템은 사용자의 휴대전화를 통해서 원격으로 주행 기능 명령이 가능하여 청소 카트와 떨어져 있어도 원하는 위치로 이동시킬 수 있는 장점을 갖고 있다. 따라서 청소카트를 계속해서 이동시켜야 하는 넓은 건물을 청소하는 청소 노동자들에게 유용한 보조 장비로 사용될 것이다. 그리고 이동 시에 사람이나 새로운 물체등 장애물을 만났을 때에 그 물체를 카트가 스스로 피하여 원하는 위치로 이동할 수 있을 것이다. 또한, 쓰레기통의 무게가 일정 수치 이상이 되었을 때에 알려주는 시스템을 통해, 쓰레기를 비워야 할 타이밍에 대해 신경 쓰고 있지 않아도 즉시 처리가 가능하다.

개발 과제의 목표와 내용

(1) 개발 목표

 본 개발의 목표는 스마트 청소 카트가 스스로 현재 위치를 파악하여 사용자가 원하는 위치로 이동하고, 스스로 자율주행하며 쓰레기통의 무게를 감지하여 쓰레기의 무게를 초과하였을 때 사용자에게 알려주는 시스템을 만드는 것이다. 사용자 친화적 인터페이스를 갖춘 스마트폰 어플리케이션과 연동하여 고령의 사용자가 위 시스템을 편리하게 이용할 수 있도록 한다. 실제 사양의 스마트 청소 카트를 만드는 것에는 한계가 있다고 판단하여, 본 개발 과제는 ‘스마트 청소 카트 시스템’을 설계하는 것으로 한다.

(2) 세부 개발 내용

(가) 시스템 개략도

(나) 필요한 기술 및 장치

- SLAM (Simultaneous Localization And Mapping)

 이동로봇이 현재시간 동안 자신의 위치를 계측하면서 동시에 주변 환경의 지도를 작성하는 기술이다. 이 기술을 이용하여 청소 카트가 특정 지역(지정 공간)을 Mapping 할 수 있게 하고, 지도에서 자신의 위치를 파악할 수 있으며, 지도에서 지정한 특정 위치로 이동할 수 있게 하고자 한다. 

-Machine to Machine (M2M) / Internet of Thing (IoT)

 기계와 기계 사이의 통신. 사물 통신(M2M)은 기계, 센서, 컴퓨터 등 다양한 장치들이 유무선 통신 기술을 이용해 서로 정보를 교환하게 함으로써 개별 장치들의 기능이나 성능을 개선시켜 주고 개별 장치들이 제공하지 못했던 새로운 지능형 서비스를 제공한다. 사물 통신의 개념을 일반 사물이나 사람은 물론 공간, 프로세스 등 세상에 존재하는 유무형의 객체로 확장한 것이 사물 인터넷이다. 이번 프로젝트에서는 센서와 라즈베리파이 간에 서로 정보를 교환하게 하고 어플리케이션을 통해 사용자가 스마트 청소 카트를 제어함으로써 구현하고자 한다. 어플리케이션을 통해 기본적인 위치 지정부터, 쓰레기 무게 초과 시에 알림을 받을 수 있다.


-라이다(Lidar) 센서

 라이다는 레이저 펄스를 발사하고, 그 빛이 주위의 대상 물체에서 반사되어 돌아오는 것을 받아 물체까지의 거리 등을 측정함으로써 주변의 모습을 정밀하게 그려내는 장치이다. SLAM을 활용할 때 센싱해주는 역할로 사용하고자 한다. 


-로드셀 센서

로드셀 센서를 이용하여 쓰레기의 무게가 일정 수준을 초과하면 사용자에게 알려주어 쓰레기통을 비울 수 있도록 하여 사용자에게 편의성을 제공하고자 한다. 


-3D 프린팅

 3D 프린팅은 3차원 공간 안에 실제 사물을 인쇄하는 기술이다. 실제 크기의 청소 카트를 만드는 것은 아니지만 실제 모델이 제작되었을 때 대략적 모습을 보여주기 위해 3D 프린팅을 이용하여 청소 카트를 설계하고자 한다.

관련 기술의 현황

State of art

(1)Exyn Technologies의 드론

 소형 기체에 3차원 라이다를 탑재해 실시간 SLAM을 하여 지하 동굴 등에서 자율 비행하며 데이터를 획득하는 드론이다.

(2) M1

 네이버 랩스에서 개발한 M1에는 크게 real-time 2D SLAM (simultaneous localization and mapping) 기술, 실내 자율 주행 기술, photo-realistic indoor 3D map generation 기술이 적용되어 있다. 코엑스나 IFC 몰과 같은 초대형 건축물 내부의 목적지로 안내하는 길 찾기 서비스가 가능하다. 실제로 많은 방문객들이 원하는 서비스이다. 

(3) 샤오미 로봇청소기

 샤오미 로봇 청소기 LSD 센서를 통해 측정된 데이터를 기반으로 로봇청소기가 어떤 곳을 청소했고 앞으로 남아있는 구간이 어디인지 실시간으로 위치를 확인하는 슬램 기술을 통해 자율주행을 매핑한다. 

LSD는 레이저 거리 센서를 의미한다.

기술 로드맵

내용

특허조사

내용

특허전략

차별화 전략 : 기존의 특허 기술 1과 2의 장점 살리고 유저 어플리케이션을 제작하여 능동적으로 카트를 제어하는 새로운 시스템을 개발한다.

(1) 자율 주행 및 위치 저장 기능 라이더 센서를 활용하여 SLAM 알고리즘을 적용 하고, 360 방향의 위험요소를 감지할 것이다.

(2) RFID 방식으로 사용자 위치 추적 스마트폰이 RFID 송신의 역할을 할 것이다.

(3) 로드셀 센서를 사용해 편의 기능 제공 라즈베리파이에 로드셀 센서를 추가하여 적재용량 측정 하는 편의 기능을 제공할 것이다.

(4) 스마트폰을 통한 원격 제어 어플리케이션을 제작하여 능동적인 카트 제어를 하는 컨트롤 타워가 될 것이다.

관련 시장에 대한 분석

경쟁제품 조사 비교

내용

마케팅 전략

내용

개발과제의 기대효과

기술적 기대효과

(1) 새로운 청소 카트 시스템

◇ 자율주행 기능 : 무거운 청소 도구를 손쉽게 운반할 수 있다.
◇ 현재 위치를 파악하고 지정한 위치로 이동할 수 있다. 

(2) 사용자 친화적 인터페이스

◇ 사용자 스마트폰 APP 연동을 통해 고령의 사용자가 직관적으로 사용할 수 있다.
◇ 초과 무게 감지 시스템으로 쓰레기의 무게가 초과되면 사용자에게 알릴 수 있다.

경제적 및 사회적 파급효과

◇ 청소노동자의 무거운 청소도구의 운반 수고를 줄임으로써 노동조건을 개선할 수 있다.
◇ 대부분의 노동자들이 고령이기 때문에 생기는 과로로 인한 사회적 문제를 개선할 수 있다.
◇ 다가오는 로봇시장의 보편화에 기여하여 로봇 시장에 발전을 이룰 수 있다.

구성원 및 추진체계

내용

설계

설계사양

내용

개념설계안

내용

이론적 계산 및 시뮬레이션

내용

조립도

조립도

내용

조립순서

◇ LCD touch screen과 Raspberry Pi(이하 파이)를 결합시킨 후, ①의 위치에 배치시킨다. 
◇ Raspberry Pi의 뒤에 배터리를 연결하여 ①의 위치에 배치시킨다.
◇ LiDAR 센서를 ② 위치에 각각 배치시킨다.
◇ 로드셀 센서와 카트를 ③의 위치에 배치 시킨다.

부품도

◇ 왼쪽의 [부품도]와 같이 실제카트와는 달리 자율주행 로봇으로 사용하는(tutlbot2, kobuki) 에 올릴 수 있어야 하기 때문에 실제 카트 사이즈의 1/5 스케일로 제작
◇ 따라서 예상 최종 형상은 오른쪽의 [예상 최종 형상]과 같다.

제어부 및 회로설계

가. 회로 시나리오

전체 제어 파트 중 제어부가 어떻게 구성되어 있는지 아래 그림과 같이 나타낼 수 있다.


스마트 카트 자체 내의 제어부는 세 가지 파트로 나눌 수 있다. 첫 번째로 전원부가 있다. 두 번째로는 센서부와 라즈베리파이 간의 연결을 제어하는 센서부, 마지막으로는  아래에서는 각 파트별로 회로 구성이 어떻게 되고 제어를 어떻게 하는지에 대해 기술한다.

나. 회로 설계

◇ 전원부

H17.JPG

전원부는 라즈베리파이와 LCD모니터의 정격전압인 5V 전력을 공급한다. 그리고 라즈베리파이와 LCD모니터의 정격전압은 USB 멀티 charger를 이용에 5V의 정격 전압을 가한다.

◇ 센서부

(1) 무게 센서 ( 로드셀 센서 hx711 5kg )
온도 센서는 라즈베리파이와 연결이 가능하고 꼬부기의 적재 하중과 제작한 카트 모형의 하중을 고려하여 5kg 측정가능한 로드셀 센서를 부착한다. 이 무게 센서는 라즈베리파이에서 SCK, DT가 GPIO 5, 6 핀에 대해 커널 모듈로 구현이 가능하기 때문에 아래와 같이 회로를 구성한다.

H18.JPG


위와 같이 연결된 온도 센서는 라즈베리파이에 측정한 무게를 GPIO선을 통해 실시간으로 전송한다.

(2) 라이다 센서 ( RPLidar A1 )

라이다 센서는 현재 프로젝트에서 주어지는 예산 범위내에서 사용가능한 rplidar A1 기종을 사용한다. USB 어뎁터를 이용하여 라이다의 핀을 라즈베리파이에서 USB 포트로 연결한다. 라즈베리파이의 ubuntu mate 16.04에서 ttyUSB0 으로 인식하며, 카트를 실행하였을 때 항상 포트를 인식할 수 있도록 /dev에 rplidar_ros 그룹을 생성하여 포트인식을 자동화 한다.

H19.JPG

소프트웨어 설계

가. 소프트웨어 설계 목적

 소프트웨어 설계의 목적은 크게 세 가지이다. 하나는 카트의 이동 공간을 구성하는 slam mapping과 자율주행(이동)을 위한 navigation 수행이다. 이는 라즈베리파이에 연결된 라이다센서와 Tutlebot2(kobuki)를 원격 PC를 통해 내부 프로그래밍에 의해 이루어진다. 또 다른 하나는 카트의 무게를 측정하고 사용자에게 전달하는 기능이다. 라즈베리파이에 연결된 로드셀센서와 안드로이드와의 통신을 통해 이루어진다. 나머지 하나는 사용자의 편의를 위하여 스마트폰 어플리케이션으로 사용자의 입력을 받고 카트의 정보를 제공하는 것이다. 이는 스마트폰의 내부 프로그래밍과 원격 PC, 라즈베리파이와의 통신으로 이루어진다.  

나. 소프트웨어 개발 목표 및 기능 설명

아래의 기능들을 모두 가지며 안정적으로 작동하고 편리한 UI를 통해 사용자에게 편리함을 제공하는 청소카트 소프트웨어를 개발하는 것을 목표로 한다.

◇ 스마트 청소카트 자율 주행 기능

 사용자의 입력에 따라 알맞게 청소카트가 지정 위치로 자율주행할 수 있는 능력을 확보한다. 여기에는 slam mapping, navigation 기능이 포함된다.

◇ 스마트 청소카트 무게 측정

 로드셀 센서를 통해 청소카트의 무게를 사용자에게 전달한다. 어플리케이션을 통해 사용자에게 적절한 알림을 제공한다.

◇ 스마트 청소카트 원격 제어 기능

 스마트 청소카트에의 사용자 편의를 위한 기능으로 사용자의 어플리케이션에 위의 자율주행 기능과 무게 측정 기능을 수행할 수 있도록 기능을 제공한다. 원하는 장소에서 청소카트와 어플리케이션을 실행했을 때 사용자 각자의 스마트폰에서 각각의 청소카트를 제어할 수 있도록한다.  이 기능을 통해 사용자에게 편리함을 제공한다.

다. 소프트웨어 구성

 소프트웨어는 아래의 도식와 같이 크게 카트의 자율주행을 제어하는 원격 PC에서의 프로세스와, 센서부와 주행로봇의 직접적인 제어를 다루는 라즈베리파이 프로세스, 센서데이터와 map 데이터를 받아 사용자에게 제공하는 스마트폰 어플리케이션 프로세스로 나뉜다. 추가로 라즈베리파이의 LCD 터치 스크린 UI의 화면 제공 시스템을 제공한다.

H20.JPG

 원격 PC에서 동작하는 소프트웨어는 크게 청소카트와 연결된 tutlebot(자율주행로봇)과 연결된 라즈베리파이를 SSH 통신을 통해 제어하는 제어 프로세스, 자율주행에서 그린 map정보를 보내고 사용자가 원하는 위치 정보를 사용자의 휴대폰 어플리케이션으로 전달받는 통신 프로세스로 나뉜다. 제어 프로세스에서는 라즈베리파이와 토픽으로 전달받은 로봇의 위치(odom)값과 장애물에 대한 스캔값(scan)을 인식하는 인식부와 인식한 상황을 바탕으로 Slam Gmapping을 처리하고 Navigation 기능을 처리하는 처리부로 나뉜다. 통신 프로세스에서는 사용자 어플리케이션과 mqtt 서버를 통하여 현재의 맵정보(map.pgm,map.yaml)와 2D 위치 정보(odom) 값을 주고 받는 어플리케이션 통신부와 라즈베리파이와 SSH 통신을 통하여 원격 통신을 제공하는 라즈베리파이 통신부로 나뉜다.
 라즈베리파이에서 동작하는 소프트웨어는 크게 라이다센서와 tutlebot(자율주행로봇)을 직접적으로 제어하고 무게를 측정을 제어하는 제어프로세스와 SSH 통신을 통하여 마스터 pc(원격 pc)로 자율주행 데이터를 통신하고, 로드셀(무게)센서의 측정값을 사용자 어플리케이션에 통신하는 통신 프로세스로 나뉜다. 제어 프로세스에서는 USB 포트를 통해 직접 연결되어 있는 라이다 센서에서 laser scan 값을 인식하는 인식부와 tutlbebot(자율주행로봇) 토픽을 을 런치하여 원격PC에서 이를 전달받아 제어할 수 있도록 하고, 무게센서의 측정을 수행하는 처리부로 나뉜다. 마지막으로 통신부에서는 휴대폰 어플리케이션과는 mqtt 통신을 통해 무게센서의 데이터를 전달하고 원격PC과는 SSH 통신을 통해 제어가 가능하도록 한다.
 스마트 어플리케이션은 원격 PC와 라즈베리파이와 통신하여 맵정보, 위치정보 무게정보를 주고받는다. 어플리케이션은 크게 UI를 구현하는 부분과 사용자의 입력을 처리하는 부분, 그리고 라즈베리파이와 원격 PC와 통신을 처리하는 부분으로 나뉜다. UI에서는 사용자의 편의를 위하여 카트를 연결하는 과정과 카트의 무게를 알려주는 화면, 사용자가 원하는 위치를 입력받는 화면으로 이루어진다. 처리부는  사용자로부터 입력받은 위치정보를 맵정보의 odom 값으로 변환하여 입력값을 처리한다. 마지막으로 통신부는 라즈베리파이와 mqtt 통신을 통해 전달받은 무게 데이터를 mosquitto 서버에 저장하고 pc로부터 받은 map정보를 google firebase의 realtime data에 저장한다.
 원격 PC와 라즈베리파이, 사용자 류대폰은 각각 와이파이에 연결되어 있으며 이들 사이에서는 MQTT 통신(TCP)과 SSH통신으로 데이터를 주고받는다.


라. 개발환경

◇ 원격 PC
   - 운영체제 : Ubuntu 16.04

 : Ros-kinetic

   - 컨트롤프로세스 : Python, Cpp

◇ 라즈베리파이

   - 운영체제 : Ubuntu Mate 16.04

 : Ros-kinetic

   - 컨트롤프로세스 : Python, Cpp
   - UI 프로세스 : Python 3.5 PyQt
◇ 안드로이드 어플리케이션
   - 안드로이드 8.0 버전부터 지원 (권장 target version 28)
   - 안드로이드 스튜디오 (Java)


마. Usecase Diagram / Sequence Diagram ◇ 사용자의 입력이 스마트폰으로 들어올 경우

H21.JPG

① 사용자가 어플리케이션을 실행하고 시작버튼을 누른다. ② wifi 연결상태를 확인하고, 사용자가 연결하기 버튼을 누른다. 이때, 라즈베리파이와 통신을 시작하고 라즈베리파이로부터 무게 정보를 받아 화면에 무게값이 나타나게 되면 사용자가 다음 버튼을 누른다. ③ 사용자의 스마트폰에서 원격 PC로 mapping 신호가 보내지고, 청소 카트가 mapping 을 시작한다. (단, 본 프로젝트에서는 이 과정을 생략하고 미리 지도를 그려놓고 시뮬레이션 하였음.) 원격 PC에서 보낸 map 정보를 스마트폰에서 전달받아 화면에 업로드 되고, 사용자가 다음 버튼을 누르면 청소 카트를 원하는 위치로 이동시키는 네비게이션 이벤트로 넘어간다. ④ 사용자가 다음 버튼을 누르면 마지막 카트 자율주행 이벤트 화면이 나타난다. 사용자가 지도의 특정 위치를 클릭하거나 저장되어 있는 목록 내의 위치를 클릭하면 해당하는 위치에 표시 마커타 나타나고 위치의 이름이 나타나며 해당 위치로 이동시킨다는 알람의 다이알로그가 팝된다. 사용자가 다이알로그의 이동버튼을 누르면 해당 위치의 값을 청소카트와 연결된 원격 PC로 전달하고 청소 카트가 위치로 이동하게 된다. (단, 본 프로젝트에서는 특정 위치를 미리 설정하여 listView 형태로 미리 데이터를 구성하였음.) ⑤ 사용자가 어플리케이션을 종료하면 mqtt 서버가 닫히고 카트와의 연결을 종료한다. ◇ 제어 프로세스

H22.JPG

제어 프로세스는 크게 라즈베리파이에서 전달하는 센서부 제어, 원격 PC에서 제어하는 위치 정보와 map 정보 제어 두가지로 나뉜다. 위의 그림은 각각의 제어프로세스의 상호관계를 나타낸 계략도이다. 
원격 PC는 실제 자율주행로봇(tutlebot)이 시행하는 slam_mapping과 slam_navigation을 실행하는 CPU로 라즈베리파이로와 스마트폰과 통신을 통해 스캔정보, 맵정도, 이동정보를 주고 받는다.
라즈베리파이는 자율주행로봇(tutlebot), 라이다 센서, 무게 센서가 직접적으로 연결되어 이들을 제어한다. 또한 처리한 센서값과 자율주행로봇의 토픽을 원격 PC와 스마트폰에 통신을 통해 전달한다.
사용자 스마트폰은 통신을 통해 전달받은 무게정보와 맵정보, 위치정보를 원격PC와 라즈베리파이와 주고 받음으로서 사용자에게 UI를 제공한다.

바. 원격 PC 소프트웨어

◇ 제어 프로세스 (1) 제어 프로세스 설계도

제어 프로세스에서는 라즈베리파이와 토픽으로 전달받은 로봇의 위치(odom)값과 장애물에 대한 스캔값(scan)을 인식하는 인식부와 인식한 상황을 바탕으로 Slam Gmapping을 처리하고 Navigation 기능을 처리하는 처리부로 나뉜다. 

H23.JPG

인식부에서는 라즈베리파이에서 실행하여 rplidar_ros 패키지에서 발행한 /scan 토픽에서 전달받은 laser scan 값을 인식하고, kobuki_node 패키지에서 발행한 /mobile_base 토픽에서 전달받은 odom 정보를 인식한다. 이를 바탕으로 oroca-ros 에서 제공하는 kobuki_slam 패키지에서 실행하는 kobuki_tf 패키지의 tf_brodcater.cpp 노드에서 위의 그래프와 같이 값이 전달받을 수 있도록 기존의 패키지를 수정한다.

H24.JPG

처리부에서는 먼저 라즈베리파이에서 /scan 토픽으로 전달 받은 rplidar_ros의 laser값과 kobuki_node에서 실행한 odom값을 받는 slam_gmapping이 이뤄진다. 이때 프로세스 성능을 높이기 위해 라즈베리파이에서 실행하지 않고 원격PC에서 실행하기 위하여 앞선 kobuki_tf에서 변환한 로봇의 위치(odom)을 map으로 인식할 수 있도록 kobuki_slam 패키지의 slam.launch 에 새로 생성한 tf_base_to_laser 노드를 추가한다. 또한 map.server에서 맵정도를 save하는 과정을 추가한다.

H25.JPG H26.JPG

마지막으로 kobuki_navagation 패키지에서 로봇이 원하는 위치값을 통신 받았을 때, 받은 위치값으로 이동할 수 있도록 target_set_node와 target_get_node를 추가하여 위치를 제어한다.

(2) 원격 PC 제어 알고리즘

H27.JPG

제어프로세스 알고리즘 순서도는 위와 같다. 먼저, 라즈베리파이와 통신으로 전달받은 laser와 odom 데이터가 안정적으로 인식되면 kobuki_tf를 통해 frame 변환하고 mapping 모드로 넘어간다. mapping이 이뤄지고 어플케이션으로 map 데이터 전송이 성공하면, 이동 모드로 진행한다. 어플리케이션으로부터 위치(odom) 데이터를 전달받으면 카트가 이동하는 신호를 보낸다. 이동모드가 끝나거나 각각의 모드에서 오류가 발생하면 종료한다.

◇ 통신 프로세스

(1) 통신 프로세스 설계도
라즈베리파이와 원격 PC와의 통신은 ssh 통신으로 이루어진다. 원격 PC와 스마트폰에서의 통신은 Paho.Mqtt 서버를 통하여 이루어진다. 단, mqtt 서버의 통신 알고리즘은 publish.py와 subscrib.py 로 python을 이용하여 publish하고 subscribe한다.

H28.JPG

사. 라즈베리 파이 소프트웨어 ◇ 제어 프로세스

(1) 제어 프로세스 설계도
제어 프로세스에서는 USB 포트를 통해 직접 연결되어 있는 라이다 센서에서 laser scan 값을 인식하는 인식부와 tutlbebot(자율주행로봇) 토픽을 런치하여 원격PC에서 이를 전달받아 제어할 수 있도록 하고, 무게센서의 측정을 수행하는 처리부로 나뉜다.

H29.JPG

인식부에서는 라이다 센서를 인식하는 rplidar_ros 패키지와 kobuki(자율주행로봇)의 현재 위치값을 인식하고 odom 정보를 base_Footprint로 전환하는 kobuki_node 패키지로 이루어진다. Slamtec에서 제공하는 rplidar_ros 패키지의 rplidarNode을 이용하여 라이다 센서의 레이저 센서값을 인식(스캔)한다. rplidarNode에서는 장애물의 범위를 laser frame으로 출력한다. 이를 kobuki_slam의 스캔값에 넣어주기위하여 kobuki_tf 패키지에 laser scan을 base scan으로 바꾸는 작업을 추가한다.

처리부에서는 로드셀 센서의 데이터를 hx711 변환기를 통해서 무게 값을 유용한 데이터로 변환하는 프로세스가 이뤄진다. python 코드를 이욯하여 라즈베리파이의 GPIO 핀에서 인식한 dck 값을 아날로그 값으로 변환한다.

(2) 라즈베리파이 제어 알고리즘

H30.JPG

제어프로세스 알고리즘 순서도는 위와 같다. 로드셀 센서에서 무게 data를 인식하고 이를  mqtt 서버로 전송한다. 이를 성공하면 라이다 센서를 인식하고 kobuki_node를 런치하여 ROS 마스터인 원격 PC로 데이터가 전송된다. 원격 PC로부터 종료 신호가 도착하거나 오류 메시지가 발생하면 종료한다.

◇ UI 프로세스

H31.JPG

사용자에게 스마트 카트가 실행중임을 안내하고 카트의 무게가 한계 데이터를 넘었을 때 알림을 표시하는 부분으로 사용자와 직접적으로 마주하는 부분이다. 알고리즘은 Pyqt를 기반으로 구성된다. 
(1) UI 프로세스 설계도

(2) UI 디자인

H32.JPG

① 초기 화면 스마트 청소 카트의 전원이 켜지면 시작하는 초기 화면이다. ② 무게 측정

청소 카트가 구동되면 mqtt 서버에 접근하여 무게 데이터를 전달받는다.

③ 무게 안내

전달받은 data를 UI에 표시한다.

아. 안드로이드 어플리케이션

어플리케이션은 크게 UI를 구현하는 부분과 사용자의 입력을 처리하는 부분, 그리고 라즈베리파이와 원격 PC와 통신을 처리하는 부분으로 나뉜다. UI에서는 사용자의 편의를 위하여 카트를 연결하는 과정과 카트의 무게를 알려주는 화면, 사용자가 원하는 위치를 입력받는 화면으로 이루어진다. 처리부는 사용자로부터 입력받은 위치정보를 맵정보의 odom 값으로 변환하여 입력값을 처리한다. 마지막으로 통신부는 라즈베리파이와 mqtt 통신을 통해 전달받은 무게 데이터를 mosquitto 서버에 저장하고 pc로부터 받은 map정보를 google firebase의 realtime data에 저장한다.

H33.JPG

◇ 클래스 다이어그램

시스템을 구성하는 클래스들 사이의 관계를 표현하는 클래스 다이어그램이다. MainActivity는 초기화면을 나타내는 클래스이다. 초기화면의 시작 버튼의 클릭이벤트를 받으면 ConnectActivity가 시작된다. MqttHelper_sub은 ConnectActivity의 MqttAndroidclient를 대신하는 핸들러 이다. connect 버튼의 클릭 이벤틀르 받으면 startMqtt() 메소드가 실행되면서 mqtt 서버와 연결된다. 그 후, next 버튼의 클릭이벤트를 받으면 MappingActivity로 이어진다.

MappingActivity는 map 정보를 받기위한 MqttHelper_Sub 핸들러와 Animation 효과를 위한 zoomimageFrom() 메소드를 받으며 전달 받은 map data는 readmap DAO로 저장된다. GoSlam 버튼의 클릭 이벤트가 들어오면 SlamActivity로 전환된다.
SlamActivitysms 전달받은 map으로부터 위치 이름과 data를 입력받아 firebase realtime data에 입력받은 data를 저장하고 이를 listView에 나타내어 사용자로부터 아이템 클릭 이벤트를 받을 수 있게 한다. 아이템클릭 이벤트가 들어오면 MqttHelper로 위치 정보를 publish한다.

◇ 클래스 명세 (1) 전체 클래스 명세

H34.JPG

(2) 클래스 상세 명세 – Activity ① MainActivity [1] 개요

 앱을 시작하는 로딩 화면과 카트와의 연결 button 을 제공하는 activity 클래스

[2] 관련 UI 레이아웃

 activity_main.xml : LinearLayout, ImageView, Button 로 구성됨 

[3] 오퍼레이션 목록

H35.JPG

② ConnectActivity [1] 개요

 서버(라즈베리파이)와 Mqtt 통신을 연결하는 Activity 클래스

[2] 속성

H36.JPG

[3] 오퍼레이션 목록

H37.JPG

H38.JPG

③ MappingActivy [1] 개요

 연결된 청소 카트 (서버 :라즈베리파이 )로 부터 map 정보를 전달 받고, 이를 화면에 표시하는 액티비티

[2] 관련 UI 레이아웃 activity_mapping.xml : LinearLayout, ImageView, Sequence, Scroll, ImageButton, Fragment 로 구성됨

[3] 오퍼레이션 목록

H39.JPG

④ SlamActiviy [1] 개요

 사용자로부터 원하는 위치를 입력 받아 카트가 이동하는 Activity 클래스

[2] 관련 UI 레이아웃

main_slam.xml : RelativeLayout, listView 로 구성됨

[3] 오퍼레이션 목록

H40.JPG

H41.JPG

(3) 클래스 상세 명세 – DAO(data), UI(Layout)

① Pos (DAO)

[1] 개요

 카트가 이동해야 하는 장소의 지도 정보를 저장하는 DAO 클래스 (Data Access Object)

H42.JPG

② activity_main - 클래스 명시

H43.JPG

- UI 디자인

H44.JPG

③ activity_connect - 클래스 명시

H45.JPG

- UI 디자인

H46.JPG

④ activity_mapping

H47.JPG

- UI 디자인

H48.JPG

⑤ activity_slam

H49.JPG

- UI 디자인

H50.JPG

(이 외에도 꽃반, 계단, 사물함, 여자화장실, 남자화장실의 데이터를 입력 받는 것을 가정하여 data simulation 하였음.)

◇ 시나리오 (시퀀스 다이어그램) ① 사용자가 어플리케이션을 실행하고 시작버튼을 누른다. ② wifi 연결상태를 확인하고, 사용자가 연결하기 버튼을 누른다. ‘연결되었습니다. 다음을 눌러주세요’ 라고 화면에 텍스트가 나오면 사용자가 다음 버튼을 누른다. 하지만 ‘연결하는 중입니다...’ 로 멈춘 후 ‘시간이 초과되었습니다. 연결하기를 다시 눌러주세요’ 라고 화면에 나오면 사용자가 연결하기 버튼을 다시 누르거나 wifi 연결상태 문제나 카트의 연결상태의 오류가 생긴 것으로 어플리케이션을 종료한다. ③ 사용자가 다음 버튼을 누른 후, 스크롤 바가 3단계에 해당하는 지도 그리기 항목을 가리키며 청소 카트가 mapping 시작한다. (단, 본 프로젝트에서는 이 과정을 생략하고 미리 지도를 그려놓고 시뮬레이션 하였음.) 청소카트가 그린 map 정보를 원격 PC로부터 스마트폰으로 전달 받으면 어플리케이션에 ‘지도설정이 완료되었습니다. 다음을 눌러주세요.’ 라고 화면에 나온다. 이 때, 사용자가 지도를 클릭하면 지도를 자세히 보고 원하는 위치를 체크할 수 있다. 사용자가 지도 외의 어느 곳을 한번 터치하면 확대된 이미지는 다시 축소된다. 사용자가 다음 버튼을 누르면 청소 카트를 원하는 위치로 이동시키는 네비게이션 이벤트가 시작된다. 만약 ‘청소 카트가 지도를 그리는 중입니다...’에서 멈춘 후 시간이 초과되었다는 알림이 뜨면 오류 메시지를 띄우고 어플리케이션이 종료된다. ④ 사용자가 다음 버튼을 누르면 마지막 카트 자율주행 이벤트 화면이 나타난다. 사용자가 지도의 특정 위치를 클릭하거나 저장되어 있는 목록 내의 위치를 클릭하면 해당하는 위치에 표시 마커타 나타나고 위치의 이름이 나타나며 해당 위치로 이동시킨다는 알람의 다이알로그가 팝된다. 사용자가 다이알로그의 이동버튼을 누르면 해당 위치의 값을 청소카트와 연결된 원격 PC로 전달하고 청소 카트가 위치로 이동하게 된다. 만약 사용자가 취소 버튼을 누르면 다이알로그는 닫히고 마커와 위치의 이름은 사라지지 않는다. (단, 본 프로젝트에서는 특정 위치를 미리 설정하여 listView 형태로 미리 데이터를 구성하였음.) ⑤ 사용자가 어플리케이션을 종료하면 mqtt 서버가 닫히고 카트와의 연결을 종료한다.

자재소요서

내용

결과 및 평가

완료작품 소개

프로토타입 사진

내용

포스터

Poster4.jpg

특허출원번호 통지서

내용

개발사업비 내역서

내용

완료 작품의 평가

내용

향후평가

내용

부록

참고문헌 및 참고사이트

내용

관련특허

내용

소프트웨어 프로그램 소스

내용