프로젝트 요구분석서
자율주행 시스템 개발 : NXT로봇 접목
2014.03.28.금요일
팀명 동물농장
팀원 20094033 정진수
20094003 김길호
20094069 이하늘
목 차
1. 작품 소개··· 3
2. 작품 기능 목록··· 3 2.1. 주 행...
2.2. 길 찾기 ...
2.3. 교통신호 인식...
2.4. 스마트 폰과 NXT로봇 연결 ...
3. Use Case Diagram··· 5 3.1. Use Case Diagram & 명세 : NXT로봇을 접목한 자율주행 시스템
3.2. Use Case Diagram & 명세 : 라인트레이서 3.3. Use Case Diagram & 명세 : 출발지 목적지 설정 3.4. Use Case Diagram & 명세 : 경로 탐색
3.5. Use Case Diagram & 명세 : 주행 종료, 다음 목적지 설정 3.6. Use Case Diagram & 명세 : 교통신호 인식
3.7 Use Case Diagram & 명세 : 환경설정
4. UI 프로토타입··· 14
[부록] ··· 17 부록1. 라인트레이서 ···
부록2. 길 찾기 ···
부록3. 교통신호 인식 ···
부록4. 스마트 폰과 NXT로봇 연결 ···
1. 작품 소개
자율주행이란, 운전자 없이 센서, 카메라와 같은 ‘장애물 인식장치’와 GPS 모듈과 같은
‘자동 항법 장치’를 기반으로 조향, 변속, 가속, 브레이크를 도로 환경에 맞춰 스스로 제어 해 목적지까지 스스로 주행하는 기술을 말한다. 본 프로젝트에서는 제한된 주행환경을 배 경으로 NXT로봇과 스마트 폰(Android)을 이용하여 자율주행시스템을 설계하고 구현할 것 이다.
2. 작품 기능 목록
2.1. 라인트레이서
라인 트레이서는 어떤 공간에 주행을 하는 데 필요한 정보, 라인을 따라서 주행을 하는 로 봇을 말한다. 단, 자율주행도로는 2차선으로 제한한다. 라인 트레이서의 동작 원리는 주어진 주행선을 센서로 검출하여 목적위치까지 이동하는 자율주행 로봇을 구현하는데 기본 기능이 다. (부록1. 참조)
Ÿ 출발 조건
우선 시작하기 위해서는 사용자의 출발신호의 입력을 필요로 한다. 출발신호는 사용자가 버튼을 눌러 명령을 주는 것으로 제한한다.
Ÿ 주행 의미
주행에는 단순히 직진 주행뿐만 아니라 곡선 주행과 라인을 벗어나는 경우에 다시 자리 로 되돌아오는 경우도 포함되어있다.
Ÿ 정지 조건
라인 트레이서를 하는 도중 로봇이 정지선을 만날 경우 정지한다.
2.2 길 찾기
길 찾기란 자율 주행 시 출발지에서 목적지까지 이동하는 경로를 알 수 있도록 해주는 기능을 말하는 것으로 차량 네비게이션의 길 찾기 기능이다. 단, 길 찾기를 수행하는 지도 는 다음과 같은 시뮬레이션 맵으로 제한한다.
<시뮬레이션 맵>
위와 같은 시뮬레이션 맵에서 보는 것과 같이 5가지의 장소(P1~P5)정해져 있으며 이 장소는 모두 출발지와 목적지가 될 수 있다. 또한 출발지에서 목적지까지 가는 길에는 반드시 한 개 이상의 갈림길을 만나게 될 것이다. 길 찾기 기능은 로봇이 이와 같은 갈 림길을 만날시 어떤 방향으로 가는지를 결정할 수 있도록 알려주는 것을 말한다. 길 찾 기 기능의 관련 세부 기능은 다음과 같다.
① 출발지, 목적지 설정
출발하는 장소 및 도착할 장소를 지정하는 기능이다. 시뮬레이션 맵을 기반으로 출발지 와 목적지를 선택할 수 있게 된다. 이때 출발지의 경우에는 목적지에 도착할 시 목적지 가 출발지로 자동 설정될 수 있으므로 최초 한번만 지정하여 주면 된다. 출발지, 목적지 설정이 끝나면 경로 탐색 기능으로 넘어가게 된다.
② 경로 탐색
미리 입력된 맵 데이터를 바탕으로 탐색알고리즘을 사용하여 최단의 경로를 탐색하여 주는 기능이다. 탐색된 경로를 따라 로봇이 이동하게 되고 경로를 이동하는 중에 현재의 대략적인 위치를 맵 데이터에 매핑(Mapping)시켜 탐색에 의해 탐색된 경로의 특정 지점 을 확인할 수 있게 된다. 경로이동이 끝나게 되면 길 찾기 기능이 완료 되며 목적지에 도착하게 되고 경로 탐색이 종료되며 길 찾기 완료 기능으로 넘어가게 된다. (부록2. 참 조)
③ 길 찾기 완료시 동작
목적지에 도착하여 경로 탐색기능이 종료 된 경우, 사용자에게 새로운 목적지를 입력 받도록 대기하게 된다. 여기서 이전에 목적지로 선택했던 장소를 출발지로 자동 등록되 기 때문에 다시 출발지를 등록할 필요가 없게 된다.
2.3 교통신호 인식
교통신호 인식기능이란 영상처리를 사용하여 색상, 형태를 인식한 후 NXT로봇에 명령을 내려 멈춤, 주의, 주행의 교통신호에 따라 행동하게 한다. 우선적으로 신호등 앞의 정지선에 서 멈춘다. 멈춘 상태에서 스마트 폰의 카메라를 통해 들어오는 영상에 대하여 교통 신호 이미지를 실시간으로 처리한다. 현 기능은 제한된 환경에서의 기능으로써 교통신호 인식기 능을 방해하는 요소가 없음을 원칙으로 하며 삼색등만을 인식하여 기능을 수행한다. (부록3.
참조)
2.4 스마트 폰과 NXT로봇 연결
스마트 폰과 NXT로봇은 블루투스를 이용하여 연결한다. 블루투스를 사용하여 NXT로봇 의 브릭과 안드로이드 폰과의 데이터 송수신 기능을 수행한다. (부록4. 참조)
3. Use Case Diagram
3.1. Use Case Diagram 1
▶ use case 명세 : NXT로봇을 접목한 자율주행 시스템
3.1.1 개요
Ÿ 출발지에서 목적지로 자율 주행하는 시스템이다.
Ÿ 시스템은 맵 데이터를 사용하여 경로를 산출한다.
Ÿ 시스템은 교통신호인식과 같은 기능을 수행한다.
3.1.2 주요 액터
액터명 유형 설명
사용자 사용자 시스템을 사용하는 사용자
라인 시스템 NXT로봇이 따라갈 라인
신호등 시스템 교통신호를 조작
3.1.3 선행 조건
Ÿ 자율주행 로봇이 주행을 하려면 맵 데이터가 필요하다.
Ÿ 자율주행 로봇이 주행을 위해 바닥에 라인이 있어야 한다.
Ÿ 자율주행을 하기 전 미리 출발지와 도착지를 설정해야 한다.
Ÿ 신호등을 인식하기 위해 이미지 데이터를 가지고 있어야한다.
Ÿ 신호등은 3구 신호등으로 제한한다.
3.1.4 후행 조건
Ÿ 주행을 시작한 후에 외부의 방해는 배제한다.
3.1.5 시나리오
1. 사용자가 시스템을 시작하면 화면으로 사용자에게 출발지 및 목적지를 묻는다.
2. 사용자에게 입력받은 출발지 목적지 정보를 사용하여 경로를 산출한다.
3. 산출된 경로를 따라 출발하게 된다. 이때, 로봇은 라인을 따라 이동하게 된다.
4. 주행하던 중 갈림길을 만나게 되면 산출된 경로를 토대로 방향을 결정하게 된다.
5. 교차로의 신호등을 만나게 되면 일시정지 하여 신호등을 인식한다.
6. 목적지에 도착하게 되면 정지하여 새로운 입력을 받을 준비를 한다.
3.2 Use Case Diagram 2
▶ use case 명세: 주 행
3.2.1 개요
Ÿ 라인트레이서는 도로에 있는 선을 따라서 주행을 한다.
Ÿ 주행 중 정지선을 인식하면 NXT 로봇은 멈춘다.
액터 명 유형 설명
사용자 사용자 라인트레이서를 사용하는 사용자
라인 시스템 NXT로봇이 따라갈 라인
3.2.2 주요 액터
3.2.3 선행 조건
Ÿ 주행을 위해 맵의 바닥에는 NXT로봇이 따라갈 라인이 있어야 한다.
Ÿ 정지를 위해 맵의 도착지점에는 정지선이 있어야 한다.
Ÿ 라인은 시작지점부터 도착지점까지 이어져있어야 한다.
3.2.4 후행 조건
Ÿ 주행을 시작한 후에 외부의 돌발 상황은 배제한다.
Ÿ 주행 도중 건전지의 방전으로 인한 정지의 상황은 배제한다.
3.2.5 시나리오
1. 사용자에게 출발 신호를 받는다.
2. 광센서가 감지한 색이 검은색 이외의 색일 경우 직선 주행을 한다.
3. 주행 중 라인에 닿는 경우 닿은 쪽의 주행속도를 감소시킨다.
4. 닿지 않는 쪽의 주행속도가 상대적으로 빨라져 차체가 벗어난 반대방향으로 틀어지 게 되어 다시 자리로 돌아온다.
5. 3에서 5번을 반복한다.
6. 주행 도중에 정지선을 감지한다면 정지하게 된다.
3.3 Use Case Diagram 3
▶ use case 명세: 출발지 목적지 설정
3.3.1 개요.
Ÿ 시스템은 사용자에게 출발지 및 목적지의 조회, 검색, 변경 기능을 제공하여 출발지 와 목적지를 선택하도록 한다.
Ÿ 사용자에게 입력받은 출발지와 목적지를 이용하여 경로를 산출하게 된다.
Ÿ 입력이 완료되면 사용자는 출발요청을 하여 자율주행을 시작하도록 할 수 있다.
3.3.2 주요 액터
액터명 유형 설명
사용자 사용자 길 찾기를 사용하는 사용자
주행시스템 시스템 주행을 담당하는 액터
3.3.3 선행 조건
Ÿ 출발지와 목적지의 선택을 위해 맵 데이터를 저장하고 있어야 한다.
3.3.4 후행 조건
Ÿ 주행 중에는 출발지 및 목적지 변경이 불가능하다.
Ÿ 주행 중에는 맵 데이터를 변경할 수 없다.
3.3.5 시나리오
1. 사용자가 시스템을 시작하면 화면으로 사용자에게 출발지 및 목적지를 묻는다.
2. 사용자는 출발지 및 목적지의 조회, 검색, 수정기능을 사용하여 출발지와 목적지를 선택할 수 있다.
3. 사용자는 주행시작을 요청을 통해 주행요청을 할 수 있다.
4. 시스템은 주행요청을 받게되면 입력 된 출발지와 목적지 및 맵 데이터를 토대로 경 로 탐색을 수행한다.
3.4 Use Case Diagram 4
▶ use case 명세: 경로 탐색
3.4.1 개요.
Ÿ 사용자가 주행요청을 하게 되면 경로를 탐색하게 된다.
Ÿ 시스템은 맵 데이터를 참조한 탐색 알고리즘을 사용하여 경로를 탐색한다.
Ÿ 경로를 안내하면서 현재 위치를 추적한다.
3.4.2 주요 액터
액터명 유형 설명
사용자 사용자 길 찾기를 사용하는 사용자
주행시스템 시스템 주행을 담당하는 액터
3.4.3 선행 조건
Ÿ 미리 입력된 맵 데이터가 있어야한다.
Ÿ 시뮬레이션 맵 위에서 실행되어야 한다.
Ÿ 출발지와 목적지가 정해져 있어야 한다.
3.4.4 후행 조건
Ÿ 주행 중에는 출발지 및 목적지 변경이 불가능하다.
Ÿ 주행 중에는 맵 데이터를 변경할 수 없다.
3.4.5 시나리오
1. 출발지와 목적지를 입력한 후 사용자는 주행시작 요청을 통해 주행을 시작할 수 있 다.
2. 시스템은 입력받은 출발지와 목적지를 바탕으로 경로 탐색을 실시한다.
3. 경로 탐색을 맵 데이터를 참조하여 탐색 알고리즘에 적용하여 경로를 탐색하게 된 다.
4. 시스템은 탐색된 경로를 이용하여 자율주행 로봇의 위치를 추적하여 대략적인 위치 를 출력할 수 있다.
5. 목적지에 도착하여 주행을 종료하고 다음 목적지 설정 기능을 수행한다.
3.5 Use Case Diagram 5
3.5.1 개요.
Ÿ 목적지에 도착하게 되면 시스템은 사용자에게 주행 종료를 알리게 된다.
Ÿ 시스템은 사용자에게 새로운 목적지를 입력 요청하게 된다.
3.5.2 주요 액터
액터명 유형 설명
사용자 사용자 길 찾기를 사용하는 사용자
주행시스템 시스템 주행을 담당하는 액터
3.5.3 선행 조건
Ÿ 목적지에 도착하여 주행이 종료된 상태이어야 한다.
Ÿ 목적지에 도착한 후 새로운 목적지 입력을 사용자에게 받아야 한다.
Ÿ 미리 입력된 맵 데이터를 저장하고 있어야 한다.
3.5.4 후행 조건
Ÿ 주행 중에는 출발지 및 목적지 변경이 불가능하다.
Ÿ 주행 중에는 맵 데이터를 변경할 수 없다.
3.5.5 시나리오
1. 목적지에 도착하여 주행이 완료되면 시스템은 사용자에게 주행종료 상태를 알리고 새로운 목적지 입력을 대기한다.
2. 사용자는 목적지의 조회, 검색, 수정기능을 사용하여 출발지와 목적지를 선택할 수 있다.
3. 사용자는 새로운 목적지를 입력하면 주행요청을 할 수 있다.
4. 시스템은 주행요청을 받게 되면 입력 된 출발지와 목적지 및 맵 데이터를 토대로 경로탐색기능을 실행한다.
액터 명 유형 설명
사용자 사용자 영상처리를 사용하는 사용자
주행시스템 시스템 영상 처리된 데이터를 전송받는 시스템
3.6 Use Case Diagram 6
▶ use case 명세: 교통신호 인식
3.6.1 개요.
Ÿ 신호 인식 시스템을 실행 중, 신호등 앞에서 일시정지 된 상태에서 영상처리를 통한 신호 인식을 통해 신호등의 색깔에 따라 주행시스템에 명령을 전달하는 시스템이다.
3.6.2 주요 액터
3.6.3 선행 조건
Ÿ 스마트 폰에 신호인식 시스템이 저장되어 있어야하며 전원이 켜져 있어야 한다.
Ÿ 영상처리 프로그램을 실행한 후 신호인식 시스템을 실행해야한다.
Ÿ 신호등을 앞의 정지선에서 일시 정지 한다.
Ÿ 데이터를 송수신하기위해서는 블루투스를 활성화하고 다른 장치를 검색한 후 채널을 설정한다. 그리고 장치를 연결해야한다.
3.6.4 후행 조건
Ÿ 교통신호를 인식하기 위해서는 정지선 앞에 멈춘다.
Ÿ 멈춘 후의 인식 중일 때는 외부의 방해요소인 색상 값 저하, 신호등을 가리는 행위 를 제한한다.
1. 주행 중에 신호등 앞의 정지선에 일시 정지한다.
2. 정지되어있는 동안 신호등의 색을 검출을 한다.
3. 검출된 데이터를 주행시스템에 전송한다.
3.7 Use Case Diagram 7
▶ use case 명세: 환경설정
3.7.1 개요.
Ÿ 사용자는 안드로이드 스마트 폰을 이용하여 환경설정이 가능하다.
Ÿ 환경설정을 이용하여 각 기능에 대해서 설정 변경이 가능하다.
Ÿ 입력이 완료되면 사용자는 설정한 대로 주행요청을 하여 자율주행을 시작하도록 할 수 있다.
3.7.2 주요 액터
액터명 유형 설명
사용자 사용자 환경설정을 사용하는 사용자
3.7.3 선행 조건
Ÿ 스마트 폰과 브릭이 블루투스 연결이 되어야 한다.
3.7.4 후행 조건
Ÿ 주행 중에는 길 찾기와 신호인식의 변경이 불가능하다.
3.7.5 시나리오
1. 사용자는 주행시작 전 환경설정을 실행 한다
2. 환경설정에서 원하는 항목을 선택하여 설정을 변경한다.
3. 입력을 완료하고 사용자는 설정한 대로 주행요청을 하여 자율주행을 시작하도록 명령한다.
4. UI 프로토 타입
4.1 APP 설치 및 환경 설정
4.2 NXT로봇과 Android Phone 연결 설정
Ÿ 블루투스 설정
Ÿ 기기 검색 된 후 NXT 로봇 설정
[부록4 참고]
4.3 APP으로 길 찾기 설정
4.4 NXT로봇의 주행 모습 : 프로토타입
4.5 교통신호 인식될 때 App화면
[부록]
부록1. 라인트레이서
이 라인트레이서의 기능을 만들기 위해서 이 프로젝트에서는 2개의 광센서와 두 개의 모터, 길에 표시되어 NXT로봇이 따라갈 라인, 상황을 판단해줄 브릭 등을 사용한다.
Ÿ 출발 조건 설명
사용자는 브릭에 출발하라는 명령을 주고 브릭은 그 명령을 따라서 출발할 준비를 한다. 출 발할 준비를 마치면 2개의 컬러센서에서 길의 라인을 판단한다. 2개의 모터에서 라인이 검 출되지 않으면 로봇은 2개의 모터를 동작하여 직진 주행을 시작한다.
Ÿ 주행 의미 설명
모터의 속도는 코딩 과정에서 포함되어있고 곡선 주행이나 라인을 벗어나는 경우를 제외하 고는 등속도로 주행을 한다. 곡선주행을 할 경우나 라인을 벗어나는 경우에는 모터의 회 전을 조절하여 다시 자리로 돌아올 수 있다.
Ÿ 정지 조건 설명
브릭은 모터에게 정지 신호를 보내고 모터는 정지한다. NXT 로봇이 정지선을 판별하는 방 식은 2개의 광센서가 둘 다 라인을 인식하는 경우이다.
- 빛 센서의 작동원리
발관부와 수관부로 이루어진 적외선 센서가 반사된 빛을 감지하여 물체의 유무와 거리를 인식하게 된다.
- 라인트레이서의 기본원리
바닥에 빛 센서를 부착하여, 반사되어 들어오는 광량으로 라인을 구분한다.
오른쪽 센서로 입력을 받으면 왼쪽 바퀴의 모터 회전수를 높이고 왼쪽 센서로 입력을 받으면 오른쪽 바퀴의 속도를 올린다. 결과적으로 로봇은 라인을 따라서 주행하게 된다.
라인트레이서의 대략적인 구조는 다음과 같다.
이 프로젝트에서는 2개의 빛 센서를 이용하게 될 것이며 개발 범위는 1차선 도로이고
중앙에 라인이 있는 상태에서 주행을 하게 될 것이고 갈림길을 만나게 되는 경우에 맵 데이터를 이용하여 이동할 방향을 선택하게 되고 신호등을 만나게 될 경우에 신호등을 인식하여 동작을 수행하게 된다.
부록2. 길 찾기 기능
- A* 알고리즘
저장되어 있는 맵 데이터를 이용하여 최단거리를 찾는 방법으로 탐색알고리즘의 하나 인 A*알고리즘을 사용하게 된다. A* 알고리즘은 주어진 출발지에서부터 목적지까지 가는 최단 경로를 찾아내는 알고리즘으로 이 알고리즘은 각 장소에 대해 그 장소를 통과하는 최상의 경로를 추정하는 순위 값인 “휴리스틱 추정값”을 매기는 방법을 쓴다. 이 알고리 즘은 휴리스틱 추정 값을 이용하여 탐색범위를 늘여가기 때문에 이런 A*알고리즘을 best first search의 한 예로 분류할 수 있다.
시뮬레이션 맵과 같은 경우 갈림길에서 목적지 노드까지의 최상의 경로인 휴리스틱 추 정 값을 이용하여 출발지에서 목적지까지 가는 경로를 탐색해 나간다.
부록3. 교통신호 인식 기능
▲ 교통신호 인식기능 순서도
NXT로봇의 컬러센서로 정지선을 인식하여 일시 정지한다. 그 후 카메라로 들어오는 이미지인 신호등을 인식하여 데이터를 처리한다. 데이터 처리에는 색상을 구별하여, 인식 된 색상에 따른 NXT로봇에 명령을 주어 행동하게 한다. 신호등을 인식에 대한 설명은 카메라로 들어오는 영상에 대하여 이미지의 R.G.B 값 중 가장 수치가 큰 값을 효과를 주 어 돋보이게 하고 이를 분석하여 가장 큰 수치를 차지하는 색상을 인식한다.
부록4. 스마트 폰과 NXT로봇 연결
무선으로 스마트 폰과 NXT로봇과 연결하는 방법으로 블루투스를 사용한다. 안드로이드 플 랫폼에는 무선으로 다른 블루투스 장치와 데이터를 교환하는 프로그램을 개발할 수 있도록 API를 제공하고 있다. 블루투스 API를 사용하여 Android에서 브릭으로 통신을 한다. 이를 수 행하는 순서는
① 다른 블루투스 장치를 검색 Ÿ 블루투스 지원 확인.
Ÿ 활성화 확인.
Ÿ 블루투스 장치 검색
Ÿ 검색된 경우 장치 이름, 클래스, 고유 MAC주소 등의 일부정보 공유
② 페어링 된 블루투스 장치에 대한 로컬 블루투스 어댑터 쿼리
Ÿ 장치 검색을 수행하기 전에 원하는 장치가 알고 있는 것인지에 대한 확인 Ÿ 모든 페어링 된 장치를 조회한 후 각 장치의 이름을 표시
③ RFCOMM 채널을 설정
Ÿ RFCOMM을 이용한 시리얼 포트 에뮬레이션
Ÿ 포인트-투-포인트 연결을 기본으로 하여 데이터 스트림을 의존적으로 교환 Ÿ 데이터의 일부분을 정해진 시간 내에 전송 할 수 없다면 연결 종료
④ 서비스 검색을 통해 장치에 연결
Ÿ 두 개의 장치 연결 시 하나의 장치는 서버 소켓을 열고 다른 하나는 서버 디바이스의 MAC 주소를 사용하여 연결을 시작
Ÿ 서버 소켓의 목적은 연결 요청을 수신, 수신 허용시 연결 제공 Ÿ 각각 연결 한 경우 서로가 서버와 클라이언트가 되어 연결 됨
⑤ 양방향 데이터 전송