2. 프로젝트 요구사항 설계 및 소프트웨어적 해석
프로젝트를 진행하면서 예상되는 문제점은
팀 내부적으로 실내와 실외로 나눌 경우 발생할 문제가 걱정이였고
그냥 한 번 에 다같이 할 경우 발표를 어떻게 해야할지 문제가 생겼다.
UML에 관한 책을 하나 읽었는데
여기서 소프트웨어 개발에 대한 내용 중에서
고객에 어떤 요구사항을 제시하면,
이를 소프트웨어적으로 번역한다. 이 상태에서 UML을 통해서 큰 흐름을 한 번 그려본다.
여기서 설계를 해야할 모듈이 보일 때 이 모듈에 들어가야할 이야기를
주간단위로 분리하고 태스크로 분리한다.
각 태스크별로 소요되는 예상시간을 적고
주간으로 분리된 태스크를 개발자들에게 제시한다.
개발자들에게는 각자 주어진 시간이 있으며
주어진 시간에서 예상시간을 빼고 시간이 0이 될때까지 일을 나눠가진다.
이 과정을 한 번 진행해보고자 한다.
1. 고객의 요구사항 파악하기
택배 배송로봇을 하나 의뢰하고자 합니다.
지금의 택배시스템은 물류창고에서 택배기사가 물건을 들고 아파트단지로 들어가서
물건을 하나씩 문앞까지 배송하고 있습니다.
저희는 이 모든 과정을 자율주행 로봇에게 맡기고 싶습니다.
그러면 실외와 실내에서 동시에 작동하는 자율주행 로봇이 필요합니다.
저희의 아이디어는 바로 스타크래프트의 캐리어처럼 하나의 모선에서
수십대의 배송로봇이 각각의 가정으로 출발해 물건을 배송하게 하고 싶습니다.
즉 모선이 물류창고부터 자율주행해서 고객의 건물까지 접근하면,
그 안에서 수십대의 자율주행로봇들이 가정으로 배송을 할 수 있는 시스템을 만들어주세요.
그리고 그들의 현황을 실시간으로 모니터링하거나 제어할 수 있는 관제 프로그램도 하나 만들어주셨으면 합니다.
고객의 요구사항을 요약하기
1. 모선은 도로 혹은 인도를 자율주행하는 실외 배송로봇이다.
2. 모선이 목적지에 도착하면 모선내부에 탑승한 수십대의 배송로봇들이 고객을 향해 물건을 배송한다. 그리고 그 로봇들은 다시 모선으로 모여야 한다.
3. 그리고 모선과 배송로봇을 실시간으로 모니터링하거나 제어(관제)하고 싶다.
2. 고객의 요구사항을 소프트웨어 관점으로 해석하기
물류창고와 목적지에 도착한 이후로 어떠한 일이 일어나는지는 일단 고려하지 않는다.
이는 자율주행 프로젝트와 어긋나는 주제이기 때문에
배송로봇이 목적지에 도착해서 물품을 내리고 드는 과정은 구현하지 않는다.
우선 실외배송로봇을 생각해보자.
1. 모선(엄마로봇)의 경우에는 다른 로봇들보다 더 무거운 중량을 버틸 수 있어야한다. 그렇기에 그 로봇에 대한 초기설정이 필요하다. -> 유비쿼티 로봇의 경우 ROS1의 노에틱을 공부해야한다.
2. 인도를 인식해야한다. 그 방법으로는 Image Segmentation 기술이 사용된다. -> 라벨링은 누가할거냐 엄청난 시간이 소요될 것으로 보인다.
3. localization 파트로 실내에서 사용되는 SLAM 기술은 사용하지 않는다. 그러나 Visual SLAM을 사용하거나 간단한 네비게이션을 내장할 수는 있다.
4. 종착지를 어떻게 설정할 것이고, 거기까지 경로를 계획하는 방법을 어떻게 할지 고민해보야 한다. 종착지에는 아르코마커를 사용할 수 있을 것이다.
5. 보행신호등을 인식할 수 있어야한다. 이는 YOLO(객체 탐지)를 통해 해결할 수 있다.
6. 로봇의 모터를 제어하는 알고리즘을 고려해야한다. 또한 장애물을 어떻게 회피할지 생각해보야한다.
7. 로봇의 통신을 어떻게 할 것인가도 고려해야한다. ROS를 사용하지만, 그 외 프로토콜을 정의해야한다.
8. 작업을 할 수 있는 영역이 있어야한다.
9. docker에 대해서 연구를 해야한다.
그리고 실내배송로봇을 생각해보자.
1. 실내에서 SLAM 과정을 통해 MAP을 생성해야한다.
2. 생성된 맵을 통해 지정된 장소로 이동할 수 있게 해야한다. 이에 경로생성알고리즘은 ROS 컨트롤을 사용하면된다 생성된다. 배송을 마친 로봇은 모선으로 복귀한다.
3. 사람과 장애물을 탐지할 수 있어야하나. 이는 별도의 학습이 필요가 없고 라이다선에서 해결이 가능하다.
4. Fleet Management가 실질적인 문제다. SLAM을 통해서 경로 MAP을 만들어야한다.
5. (Fleet Management)경로 MAP의 특정 구간이 empty인지 occupied 상태인지 reserved 된 상태인지 지속적으로 업데이트 되어야한다.
여기서 경로 MAP을 알아보자.
이게 경로맵이라 하면 검정색선은 현재 empty를 나타낸다. 특정구간에서 이동하고 있는 로봇이 있다면
로봇의 위치와 현재 사용불가능한 경로를 빨간색으로 표현한다.
다음과 같은 상황이 발생했을때 어떻게 할 것인가?
6. 각 로봇들의 교통을 어떻게 제어할 것인지 알고리즘을 생각해보고 이를 구현해야한다. 이 부분이 난이도가 굉장히 높으며 Fleet Management의 핵심이다. 그렇기 때문에 시작은 2대의 로봇을 통해 구현한다.
7. 실내배송로봇은 서버로 지속적으로 현 상태를 보고할 수 있어야한다. 그래야 관제 (Fleet management)가 가능하다.
8. 모터를 제어하는 알고리즘이 있을 것이다. 이는 각 센서들의 동작을 봐야할 것이다.
전체적인 플로우를 그려보자 (Architecture design)
객체지향적이나 버전관리를 통해 프로젝트를 진행하고 싶지만, 우선 특정 UML을 사용하지 않는다.
아직 소프트웨어적으로 어떻게 구현해야할지 모르는 상태이기도 하고
전체적인 플로우를 그려보면서 어떤 요소가 어떻게 연결될 수 있을지 각 연결관계를 찾아보면서
추가 설명이 필요한 부분에 대해서 FSM과 시퀀스다이어그램을 그려가면서 해결한다.
UML은 언제든지 수정될 수도 있고, 버릴 수 있기 때문에
이쁘게 꾸미지 말고, 최대한 상대방에게 우리의 계획을 빠르게 설명할 수 있게 사용한다.
로봇의 세부사항을 제외한 전체적인 플로우