Skip to content

system architecture

root edited this page Jan 2, 2020 · 1 revision

id: ros-galapagos-system-architecture title: Galapagos System Architecture sidebar_label: Galapagos System Architecture

변경 사항

  • 본 문서를 수정한 이력이 있다면 다음 표에 작성해주시기 바랍니다.
순번 일자 수정자 수정자 이메일 수정 내용 비고
1 2019. 08. 25 김지형 100kimch@naver.com Initial Documentation

개요

갈라파고스코끼리거북팀의 갈라파고스 ROS 패키지 구성에 대한 설명입니다.

주요 특징

3개의 센서를 이용한 자율주행 알고리즘

갈라파고스 패키지에서는 3개의 센서를 이용한 자율주행 알고리즘을 설계하였습니다.

stream

  • 전면 카메라(frontcam)은 전방 표지판 인식 및 원거리 차선을 인식하여 표지판을 통한 코스 인식 및 가속도 조절을 수행합니다.

image

  • 광각 카메라(fishcam)은 하방 차선을 인식하여 안정적인 차선 주행을 수행합니다.

  • 라이다(lidar)는 전방위 장애물을 인식하여 장애물 회피 구간과 터널에서의 장애물 회피, 차단바 미션을 수행합니다.

Pub/Sub Model (발행-구독 모델)

ROS Framework를 이용해 패키지를 구성하면서 전형적인 발행-구독 모델을 이용했습니다. 이는 메시지 큐 모델과 옵저버 패턴 에서 진보한 모델로서 발행자는 구독자들과 느슨하게 결합되어 시스템 토폴로지를 몰라도 동작을 지속할 수 있으며, 때문에 몇 개의 ROS 노드(터틀봇)들이 결합되어도 동작할 수 있는 넓은 확장성을 지니고 있습니다. 전통적인 클라이언트-서버 패러다임에 비해 독립적인 패키지를 개발하기에 용이했습니다.

State Pattern

자율주행 알고리즘을 일괄적으로 처리하는 processor.py에서는 상태 머신 다이어그램을 이용해 디자인했는데, 본 대회의 미션을 기준으로 다음과 같은 6개의 STATE를 정의하였습니다.

STATE 설명 비고
traffic_light 초록불이 켜질 때 주행을 시작하는 알고리즘
normal 미션 간 이동 시 주행하는 알고리즘
intersection 삼거리 교차로에서 주행하는 알고리즘
construction 장애물 회피 미션에서 주행하는 알고리즘
parking 주차 구간 기션에서 주행하는 알고리즘
blocking_bar 차단바가 내려올 때 일시정지하는 미션의 알고리즘
tunnel 터널 구간을 지나는 미션의 알고리즘
  • 터틀봇으로부터 센서값이 들어올 때 CURRENT_STATE에 따라 다르게 알고리즘을 수행합니다.
  • 터널을 제외한 STATE에서는 Front Camera의 이미지가 들어올 때마다 주 연산을 수행하고, 터널 구간에서는 Lidar 데이터가 들어올 때마다 주 연산을 수행합니다.

다양한 디버깅 모드 지원

lib_runner.py라는 별도의 실행 모듈을 구성함으로써 안정적인 주행 종료를 유도함과 동시에 다양한 디버깅 모드를 지원합니다. RUN_TYPE라는 인자는 기본적으로 모든 미션을 수행하는 full이라는 값으로 세팅되어있는데, 이를 다음과 같이 수정하면, 다양한 방법의 디버깅이 가능합니다.

RUN_TYPE 설명 비고
line_tracing 하단 차선만 인식하여 주행
traffic_light 전면 카메라가 전방 신호등을 인식하는지 여부 판단
intersection 삼거리 미션을 수행 후 종료
construction 장애물 회피 미션을 수행 후 종료
parking 주차 미션을 수행 후 종료
tunnel 터널 미션을 수행 후 종료
lidar 라이다 센서가 올바르게 작동하는 지 판단

전체 시스템 아키텍처

flow_chart_ver_1_0_0

Clone this wiki locally