"Whatever"의 두 판 사이의 차이
(→설계) |
(→설계) |
||
157번째 줄: | 157번째 줄: | ||
====Tank Turn==== | ====Tank Turn==== | ||
− | [[vL]]과 | + | [[파일:vL.png]]과 [[파일:vR.png]]을 각각 기기의 왼쪽 속도와 오른쪽 속도로 표기하고 이를 기기의 너비로 표기하도록 한다. 그러면 기기는 어떤 동심원을 따라 원운동을 하게 된다. 이를 그 동심원의 반지름 (회전 반경)으로 두면 다음이 성립한다. |
[[파일:Whatever_자료8.png]] | [[파일:Whatever_자료8.png]] |
2021년 6월 11일 (금) 23:24 판
프로젝트 개요
기술개발 과제
국문 : 실내 자율주행 배달 로봇
영문 : Indoor Autonomous Delivery Robot System
과제 팀명
Whatever
지도교수
이동희 교수님
개발기간
2019년 3월 ~ 2019년 6월 (총 4개월)
구성원 소개
서울시립대학교 컴퓨터과학부 2016860038 조재형(팀장)
서울시립대학교 컴퓨터과학부 2016920005 김경석
서울시립대학교 컴퓨터과학부 2015920022 박현정
서울시립대학교 기계공학과 2018430023 노민
서론
개발 과제의 개요
개발 과제 요약
- 실내 자율주행 배달 로봇 시스템(Indoor Autonomous Delivery Robot System)을 구축함.
- 여기서 실내 자율주행 배달 로봇이란 한정된 실내 공간에서 원하는 목적지로 무언가를 배달하는 로봇을 말함.
- 본 프로젝트에서는 차륜형 배달 로봇의 하드웨어와 특정 목적지까지 안전하게 자율 주행하여 물건을 배달할 수 있는 소프트웨어 시스템을 개발하고자 함.
개발 과제의 배경
- 코로나 확산에 따른 비대면 수요가 증가하고 있는 요즘, 배달 로봇에 대한 시장 규모가 확대되고 있음.
- 실내 배달 로봇은 단순 반복 업무나 무거운 짐을 나르는 일을 도맡아 일의 효율성을 높여주는 역할을 할 것으로 기대됨.
- 비대면 배달이 가능해짐으로써 코로나 19 예방에 도움을 줄 수 있고 사생활 또한 보호될 수 있을 것이라 기대됨.
- 개발되고 있는 배달 로봇보다 저렴한 비용으로 실내 자율주행 배달 시스템을 개발함으로써 사무 공간과 공장 같은 특정 장소에서 더욱 효율적인 배달 시스템을 구축할 수 있을 것이라 기대됨.
개발 과제의 목표 및 내용
- 실내 공간을 한정으로 하여 원하는 목적지까지 무언가를 배달할 수 있는 차륜형 로봇 시스템을 제작함.
- 적외선 센서를 이용하여 검은색 라인을 따라가면서 특정 목적지까지 이동하도록 하며, QR 코드로 목적지를 인식하거나 특정 명령을 수행하도록 함.
- 초음파 센서를 이용하여 장애물을 인식 후 대응할 수 있도록 함.
- 배달 물품의 하중이나 방향 및 속도에 따라 모터를 제어하고 안전하게 이동할 수 있도록 제작함.
관련 기술의 현황
State of art
- 트위니에서 사람을 따라 움직이는 카트 로봇이 현재 개발되었고 상용화 단계에 있다. 레이저 거리 측정 및 초음파 센서를 통해 안전성을 확보하고 자동 충전 스테이션을 사용한다.
- 배달의 민족과 DL이앤씨의 자율주행 배송로봇 기술 업무협약을 맺고 광화문에 실내 자율 주행 및 층간 이동이 가능한 배달 로봇 ‘딜리타워’가 도입될 예정이다.
- 인천 공항 공사에서 세계 공항 최초로 실내 자율주행 전동차 및 카트로봇을 시범 도입하였다.
특허조사 및 특허 전략 분석
- 운송 로봇의 실내자율주행 시스템 – 씨제이올리브네트웍스 : 운송 로봇이 실내 공간을 촬영하고 해당 이미지를 기반으로 주행 가능 영역을 추출하여 주행 가능 영역을 학습한다. 해당 학습을 기반으로 확정 주행 경로를 생성하여 로봇으로 송신한다. 장애물이 발견된 경우 상대 거리를 산출하고 이를 기반으로 주행 경로를 보정하고 재전송한다.
- 에지 컴퓨팅환경에서 마그넷 트리거링과 마커를 이용한 실내 자율주행 차량의 위치 마킹 방법 – 경희대학교 산학협력단 : QR코드를 통한 자율주행은 인식된 위치에 따라 측위를 진행하기 때문에 정확한 위치를 기대할 수 없다. 또한 QR코드를 놓치는 상황에서 새로운 변수가 발생한다. 이를 해결하기 위해 QR 코드 근방에 자석을 배치하여 QR코드가 전방에 있음을 인지하고 전달된 명령어를 실행한다. 이를 통해 명확한 측위를 돕는다.
- 실내 토폴로지맵 생성 방법 및 이를 위한 자율주행 로봇 – 선문대학교 산학협력단 : 실내 토폴로지맵 생성 방법 및 이를 위한 자율주행 로봇이 개시된다. 실내 토폴로지맵 생성 방법은, 실내에서 주행을 시작하는 단계, 라이다 센서를 이용하여 주변형태 데이터를 획득하는 단계, 기주행경로에 대한 폐루프(loop closure) 검사를 수행하는 단계, 폐루프 검사 결과에 따라 기주행경로와 주행예정경로가 교차되지 않도록 주행예정경로를 설정하는 단계, 주행이 종료되면, 획득된 주변형태 데이터를 이용하여 실내 지도를 생성하는 단계 및 생성된 실내 지도를 이용하여 실내 토폴로지맵을 생성하는 단계를 포함한다.
기술 로드맵
- 주행 기능은 라인트래킹 및 조향 구현을 단기에 걸쳐 수행하였고 중기에 두 기술을 조합해 팀에서 목표로 하는 주행 기능을 완성하였다. 직선이 아닌 선이나, 조향이 어긋난 경우에 대해 로봇의 위치를 보정하게끔 하여 로봇 주행의 강인성을 보완하고자 한다.
- QR 코드 인식은 라즈베리 카메라를 통한 pybar 라이브러리를 적용하여 QR 코드를 인식하고 해당 텍스트를 읽어들이게끔 하였다. 해당 기능 구현 외에도 이 QR 코드에 어떤 값을 저장하여 해당 노드의 위치를 알게 할지에 대해 표준화를 단기에 걸쳐 진행하였다. 이후 중기에서 이를 조합하여 QR 코드의 기능을 완성하였다.
- 장애물 인식 및 피드백의 경우 초음파 센서로 전방에 장애물이 감지될 경우 일시정지되도록 구현하였다. 해당 반응 시간을 줄여서 안전성을 더욱 확보하는게 좋을 듯 하다.
- 경로 추적 기능의 경우 개발 콘셉트에 맞게 맵 기반이며 Dijkstra 알고리즘을 채택하여 적용하였다.
- 통신의 경우 사용자 인터페이스와 Navigator 서버를 Python으로, 클라이언트를 자바 기반으로 구현하여 서로 socket 통신이 가능하도록 한 다음 어플과 통합시켰다. 다만 초기 연결 때 시간 지연이 불규칙하고 늘어지는 경향이 있어, 통신 안정성을 보완할 필요가 있다.
시장상황에 대한 분석
경쟁제품 조사 비교
국내 기업을 대상으로 조사 진행한 결과,
- Thordrive에서 자율주행 인식, 측위, 고정밀지도제작 및 주행경로 생성, 제어까지 Full-stack 기술 및 특허를 보유중이며 미국 실리콘밸리에서 자율주행 배송 서비스 및 인천 공항과 협력하여 항공기 운항편에 맞춰 제1여객터미널 입국장 도착게이트에 자동 배치되며 도착게이트에서부터 검역대까지 교통약자의 이동을 지원하는 서비스를 시행하였다.
- 트위니에서 카메라, 초음파, 거리측정 센서를 활용하여 물품을 운반하는 물류로봇을 적재형과 추종형 두가지 유형으로 선보이고 있다.
- 브이디컴퍼니에서 서빙로봇인 푸드봇과 방역로봇이 푸닥터를 선보이고 있으며, 이 중 푸두봇은 국내 서빙로봇의 90%이상을 점유중이다.
- 베어로보틱스에서 사각지대 없이 사물 및 사람을 인식하는 AI 기반 인지능력을 보유한 서빙로봇을 선보이고 있다.
마케팅 전략 제시
- 실내 인프라를 많이 요구하는 기존 실내 배달 로봇과 초기비용에 있어 차별화 두었음을 강조한다.
개발과제의 기대효과
기술적 기대효과
- 적외선 센서, 라즈베리 카메라를 통한 QR 인식, DC 모터와 드라이버, 초음파 센서를 결합하여 상호 간 기능의 충돌 없이 안정성 확보에 대한 기술적 기대를 예상하고 있음.
- 해당 로봇이 동시간에 수행해야 할 작업에 대한 스레드 구성 및 우선순위 배치, 상호배제 영역의 설정을 통해 멀티스레싱 프로그램의 완벽성 구현을 기대하고 있음.
경제적, 사회적 기대 및 파급효과
- 사용자 입장에서는 원격, 비대면, 비접촉 배송 수요를 충족하리라 기대된다.
- 코로나의 감염증 예방을 기대할 수 있다.
- 기존 실내 로봇이 요구하던 고비용의 인프라 문제를 어느정도 해소 가능하리라 기대된다.
- 단순 반복 업무 및 무거운 짐을 나르는 일을 도맡아 일의 효율성을 크게 높여주는 역할을 하리라 기대된다.
기술개발 일정 및 추진체계
개발 일정
Short term으로 각 모듈에 맞는 단편적 기능을 구현하였으며, Medium term에서는 기능 1차 통합 진행을 추진하였다. 이는 비슷한 기능끼리 통합을 의미한다. 모듈 구현 및 통합을 진행하면서 하드웨어 프레임 워크 제작을 같이 추진하였다. Long term에서는 모든 모듈을 라즈베리 파이 및 아두이노에 통합 연결하고, 모든 기능이 원하는 우선순위와 동시성을 가지고 작동할 수 있도록 소프트웨어/하드웨어 통합을 추진하였다.
구성원 및 추진체계
- 조재형 팀장은 통합 테스트 이후 최종 블랙박스 테스트를 통해 전문적 지식이 없는 고객이 이를 충분히 이용할 수 있는지 상세히 검토했다. 각 바퀴에 로드셀을 통해 짐을 실었을 때의 실제 하중이 어떻게 나가는를 검사하고 이를 기반으로 로봇 주행의 강인성을 보완하며, 적외선 센서를 통해 바닥의 선을 인식하게 하며 최대 인식 범위 테스트를 진행하였다. 이후 담당 모듈을 통합하여 라인 트래킹 기능을 총괄 담당하였다. 또한, 팀의 재무담당으로 지출 관리를 하고 매주 팀원들에게 지출 명세를 정리하여 보내주었다. 또한, 팀원 간의 소통 조율 및 진척 상황 체크, 목표 수립에 힘썼다.
- 김경석 팀원은 소프트웨어 아키텍처 설계 및 프레임워크 제작 관련 UML을 통합 및 조율하며, 로봇이 회전해야 하는 경우 의도한 대로 바퀴가 회전할 수 있도록 하는 모터 드라이버의 제어를 담당하였다. 또한, 자이로 센서를 통해 얻어지는 데이터를 통해 로봇의 이동 및 회전에 따른 객관적 위치를 파악할 수 있도록 하였다. 이후 담당 모듈을 통합하여 경로 추적기능을 총괄 담당하였다.
- 노민 팀원은 기계공학 전공을 활용하여 모든 모듈을 통합했을 시 로봇의 설계도 및 호환성 체크를 담당했다. DC 모터 드라이버의 제어를 통해 의도한 속도로 로봇이 주행할 수 있도록 값을 체크 및 조율하고, 초음파 센서를 통해 센서 반경 내 인식 가능 물체가 나타난 경우의 값의 변동을 파악하고 이를 이용해 실제 주행 중 경로상의 장애물을 인식하고 더 나아가 어떻게 대응할 것인지에 대해 연구했다. 이후 담당 모듈을 통합하여 장애물 감지 및 피드백 기능을 총괄 담당하였다. 또한, 매주 보고서 작성을 담당하였다.
- 박현정 팀원은 모든 모듈 통합 및 기존의 설계도대로 프로토타입을 제작하고 팀원 각자가 맡은 모듈 관련 작업이 통합된 프로토타입 상태에서도 의도한 대로 이전과 같이 동작하는지에 대해 테스트 및 피드백을 담당하였다. 그리고 라인 상 분기점에서 로봇이 QR 코드를 읽어내는 작업에 대해 카메라와 QR 스캐너 모듈 두 가지의 경우에 대해 모두 정상 작동할 수 있도록 하며, QR 코드를 통해 읽어내는 텍스트의 구조체 및 분기의 구조 설계를 담당하였다. 이후 담당 모듈을 통합하여 QR 코드 인식 및 지정 명령 수행 총괄 담당하였다.
설계
설계사양
제품의 요구사항
- 사용자
- R1: 사용자가 UI를 통해 목적지 설정
- 로봇
- F1: 라인 주행 기능 - 속도 20cm/s
- F2: QR 인식 후 분기 기능 - 오차범위 10도 이내
- F3: 장애물 감지 기능 - 전방 30cm 이내 물체 감지
- 클라이언트
- F4: 목적지 입력기능 - 100% 정확도
- 서버
- F5: 경로 계산 - 최단 경로
설계 사양
- 라인 인식에는 초기에 OpenCV를 이용한 라인 검출 방법을 활용하였으나 사소한 노이즈에도 라인 검출에 실패하는 상황이 발생하였다. 따라서 노이즈에 대한 저항성을 가지길 기대하고 딥러닝 방법으로 변경하였다. 이에 라즈베리파이와 같은 한정된 자원을 가진 기기에서 작동하는 텐서플로우 라이트를 활용하였다.
- QR Code 인식에는 Python의 pybar 라이브러리를 활용하였다.
- 로봇의 조향은 양측 바퀴의 속도차이를 활용한 탱크턴(Tank Turn)방법을 채택했다. 또한 양측 바퀴에 가해지는 하중과 목표 회전각에 따라 양측 바퀴가 내야 하는 속도를 계산하는 모델을 만들기 위해 무게센서와 IMU센서를 활용하였고 이들의 데이터를 모아 텐서플로우 라이트를 활용하여 머신러닝으로 모델을 구축하였다. 하지만 바닥의 마찰계수를 고려하지 못해 다양한 바닥 환경에서의 성능은 매우 떨어지게 되어 결국 IMU 센서의 피드백을 받아 조정하는 방법을 채택하였다.
- 로봇은 라인과 QR Code, 그리고 장애물을 모두 실시간(Real Time)에 측정해야 하며, 주행을 위한 모터의 제어 또한 실시간으로 이루어져야 한다. 따라서 실시간성을 높이기 위해 위 작업들이 병렬적으로 이루어지도록 Python의 multiprocessing 라이브러리를 활용하였다.
개념설계안
- 본 시스템은 서버, 클라이언트, 그리고 로봇으로 구성된다.
- 서버는 지도를 그래프 형태로 저장한다.
- 여기서 지도란 라인과 QR 코드로 이루어진 지도를 의미하며 이 지도를 그래프화 시키면 라인은 간선(Edge)이 되며 QR 코드는 노드(Node)(또는 정점(Vertex))가 된다.
- 라인은 일종의 레일 역할을 하며, QR 코드는 분기 역할을 한다.
- 클라이언트에서는 서버로부터 지도정보를 받아와 사용자가 목적지를 설정할 수 있도록 하는 기능을 갖는다. 클라이언트가 사용자로부터 목적지를 입력받으면 설정된 목적지가 서버로 다시 전송되며 서버는 해당 목적지로의 최단 경로를 계산하여 경로를 리스트형태로 로봇에 전달한다.
- 로봇은 서버로부터 경로를 받아 경로대로 주행을 시작한다. 주행을 성공적으로 하기 위해서는 다음 목적을 달성하여야 한다.
Line을 이탈하지 않고 주행 QR Code 인식 시, 올바른 방향으로 전환 장애물 인식 시, 정지
- 이를 위해 총 4가지 프로세스가 병렬적으로 실행되도록 설계하였다. 이 중 3개는 로봇의 주행 방향을 제시하는 프로세스이고 다른 하나는 이들로부터 주행 방향을 받아 그 주행을 수행하는 프로세스이다.
Line을 인식하여 로봇이 주행을 제대로 하기 위한 방향을 제시하는 Liner Process QR Code를 인식하여 로봇의 분기 방향을 제시하는 Director Process 장애물을 인식하여 로봇에 정지명령을 내리는 Detector Process 위 프로세스들로부터 로봇이 가야할 방향을 받아 모터를 제어하는 Main Process
- Main Process가 나머지 세 개의 프로세스로부터 주행 방향을 받을 수 있도록 로봇의 주행 방향을 공유 변수에 저장하도록 설계하였다. 위 프로세스들은 이 공유 변수의 값을 바꾸고 Main 프로세스는 이 공유 변수로부터 주행 방향을 얻는다.
- 이때, 공유 변수에 대한 각 프로세스의 논리적 충돌을 최소화하기 위해 프로세스들의 주행 방향 공유 변수에 접근하는 우선 순위를 Detector, Director, Liner 순이 되도록 하는 장치로 로봇의 상태변수를 공유 변수로 추가하였다. 이 상태 변수는 각 프로세스가 바꾸기도 하지만 역으로 상태 변수가 프로세스의 작업을 바꾸기도 한다.
- Python 내의 multiprocessing 모듈을 활용하여 구현하기 위해 Liner, Director, 그리고 Detector라는 이름의 클래스로 만든 뒤, 프로세스 동작을 work라는 이름을 가진 메소드에 정의하는 방법을 사용하였다.
- 클라이언트 - 서버 - 로봇 간의 통신은 소켓 통신을 사용하기로 설계하였다.
이론적 계산 및 시뮬레이션
QR Code 정보 정의
QR Code가 분기점 역할을 충실히 수행하기 위해서 담아야 하는 정보를 정의하였다. QR Code로부터 얻은 수(텍스트)로부터 단순 산술 연산 몇 번만으로도 로봇의 주행 방향을 도출할 수 있도록 하였다. 구체적인 방법은 다음과 같다.
1. 노드 번호는 모두 소수(Prime)로 주어진다. 이때 그래프에서 최대 분기 개수보다 큰 소수로 부여한다. (여기서 최대 분기 개수란 그래프 상의 노드에 대해서 각 노드에 연결된 간선 수의 최댓값을 의미한다.) ex: Figure 2.1에서 나타난 최대 분기 개수는 8이다. 2. 라인과 라인이 이루는 각도는 단위적(Unitary)이도록 구성한다. ex: Figure 2.1의 경우 인접 라인간 각도는 45도의 배수로 구성 3. 현재 노드를 중심으로 단위 각 방향에 특정 방향으로 각순서(Angle Order)를 부여한다. 이때 시작 지점(1번을 받는 지점)은 어디가 되어도 상관없다. ex: Figure 2.1 참고 4. 해당 노드 번호로 나누었을 때 3번에서 부여한 순서가 나오도록 중국인의 나머지 정리를 사용하여 n을 생성한다. ex: Figure 2.1에서는 다음이 성립한다.
5. QR Code에 담기는 정보(QR Code로부터 인식되는 Text)는 수의 형태이고 맨 앞자리 5자리는 현재 노드 번호를 저장하는데 사용한다. 그리고 나머지 부분은 앞서 구한 n을 저장한다. ex: Figure 2.1에서 11번 노드의 QR Code에 담기는 정보는 0001113387572이다.
6. 다음과 같은 director 함수를 구현하여 로봇의 주행 방향을 QR Code로부터 단순 산술 연산만으로 도출해 낼 수 있다. 여기서 qr_Value에는 앞서 구한 n이 대입된다.
예시) 41 – 11 – 13 경로에서 11번 노드의 Landmark QR Code를 인식하여 값 13387572을 얻으면 이를 이전 노드 번호인 41과 다음 노드 번호인 13으로 나누었을 때 나머지로 각각 6과 3을 얻는다. 41 – 11경로를 따라온 것이라면 로봇의 전면이 향하는 방향은 6번 방향의 반대 방향인 2번 방향이므로 (3 - 2) x 45 = 45도를 얻는다. 이는 순서를 부여한 방향의 반대 방향인 시계방향으로 회전하라는 것이다. 반면 반대의 경우, 즉 13 – 11 – 41 경로에서는 13 – 11 로봇이 경로를 따라왔으므로 로봇 정면이 향하는 방향은 3번 방향의 반대 방향인 7번 방향이다. 같은 방법으로 (6 - 7) x 45 = - 45도를 구할 수 있다. 이는 순서를 부여한 방향인 시계 반대 방향의 반대 방향, 즉 시계방향으로 회전하라는 것이다. 즉, 회전각의 크기는 물론 방향까지 얻을 수 있다.
Tank Turn
파일:VL.png과 파일:VR.png을 각각 기기의 왼쪽 속도와 오른쪽 속도로 표기하고 이를 기기의 너비로 표기하도록 한다. 그러면 기기는 어떤 동심원을 따라 원운동을 하게 된다. 이를 그 동심원의 반지름 (회전 반경)으로 두면 다음이 성립한다.
상세설계 내용
하드웨어 설계
본 시스템의 로봇 하드웨어 컴포넌트는 다음과 같다.
무게센서(로드셀+ADC) (2개) -> 양측 바퀴에 가해지는 하중을 측정 초음파 센서 -> 전방 충돌 방지 IMU -> 차체 회전각 피드백 카메라 -> 라인인식과 QR Code 인식 모터드라이버 (2개) -> 바퀴 제어 라즈베리파이 -> 로봇의 컴퓨터 아두이노 우노 (2개) -> 라즈베리파이와의 시리얼 통신 (이는 라즈베리파이의 GPIO 핀을 전부 사용하기 보다 비교적 실시간성이 떨어져도 괜찮은 정보인 하중과 회전각의 측정은 별개의 MCU 보드를 두어 필요시에만 시리얼 통신으로 측정값을 받아오도록 구성한 것이다.)
프레임 설계
소프트웨어 설계
Diagram
Liner
Director
Detector
Main
Activity Diagram
라인 인식 모델 학습을 위한 이미지 매트릭스(Image Matrix) 구조
데이터 수집은 먼저 작성한 Open CV 기반 알고리즘을 적절한 환경에서 구동하여 이미지 매트릭스와 해당 이미지에 대해 알고리즘이 도출한 주행 방향을 기록하는 방법으로 수집한다.
양측 바퀴에 가해지는 하중이 서로 다른 경우, 양측 모터에 같은 전압을 부여해도 바퀴의 회전 속도가 달라진다. 따라서 로봇 위에 실리는 짐의 하중에 따라같은 움직임이더라도 모터에 가해져야 하는 전압이 달라질 수 있다. 이를 해결하기 위해 딥러닝을 활용하여 모델을 구성한다.
이를 해결하기 위해 딥러닝을 활용하여 하중과 목표 회전각을 입력으로 받아 양측 모터에 가해야 하는 전압을 출력하는 모델을 구축하는 방법을 활용. 다음은 해당 데이터 수집을 순서도로 도식화한 것이다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
내용
포스터
내용
관련사업비 내역서
내용
완료작품의 평가
내용
향후계획
내용
특허 출원 내용
내용