자율주행차량은 센서 기술의 완전체라 할 수 있습니다. 핵심적인 기술이 다양한데 오늘은 자율주행차의 간단한 구조와 원리 그리고 GPS를 활용한 다양한 장치들이 최단 거리를 구하는 방법의 하나인 하버사인 공식에 대하여 포스팅하겠습니다. 고등학교 수학1에 나오는 삼각함수의 심화 과정으로 대학교 1~2학년 정도의 삼각 함수식을 활용하여 하버사인 공식을 정리하고 아두이노 구현과 세특 주제 정리를 해보겠습니다!
1. 자율주행차는 어떤 기술을 사용할까?
자율주행차는 복합적인 센서의 융합기술입니다. 레이더 센서, 카메라 비전 기술, 라이다 센서, GPS, 초음파 센서, 모터 드라이브, 컴퓨터 시스템 등 수많은 기술이 복합적으로 작동합니다. 자율주행차는 스스로 운전에 필요한 의사결정을 내립니다. 그렇기 때문에 주변에 존재하는 각종 정보를 수집하는 센서의 역할이 중요합니다. 우선 각각의 기능을 담당하는 센서와 부품들의 역할을 정리해보겠습니다.
- 레이더(Radar) - 전후방 차량 인식
- 초음파 센서 - 측면 근접 차량 인식
- 카메라 - Computer Vision 기술을 이용하여 신호등, 차량, 도로, 보행자 등 분별
- 라이다(LiDAR) - 주변 환경 360도 인식
- GPS - 차량의 경로와 위치 파악
- 컴퓨터 시스템 - 센서의 복합 데이터를 분석하여 움직임 제어, 스스로 운행
엘피의 전자책이 출시했습니다!!
자율 주행 자동차는 자동화 수준에 따라 5단계로 나뉘어 있습니다. 레벨에 따라 운전 지원 또는 자율 주행이라 합니다. 일반적인 자동차의 자동화 수준을 설명하자면 다음과 같습니다.
- 레벨 0: 지원하지 않는 단계. 운전자가 항상 모든 조작(가속, 조향, 제동)을 한다. 즉 자율 주행을 지원하지 않는다.
- 레벨 1: 안전 운전 지원 단계. 가속, 조향, 제동 중 어느 하나를 시스템이 담당한다.
- 레벨 2: 준 자율 주행 단계. 가속, 조향, 제동 중 복수의 조작을 시스템이 담당한다. 운전자는 항상 운전 상황을 감시하고 필요에 따라 조작한다.
- 레벨 3: 준 자율 주행 단계. 고속도로 등 특정 장소에 한해 시스템이 교통 상황을 인지하여 운전과 관련된 모든 조작을 한다. 단 긴급 사태나 시스템이 작동하기 어려워졌을 경우 등 시스템이 요청하면 운전자는 이에 따라야 한다.
- 레벨 4: 완전 자율 단계. 고속도로나 한정된 지역 등 특정 장소에서 시스템이 교통 상황을 인지하여 운전을 모두 조작하고, 긴급 사태에도 시스템이 대응한다.
- 레벨 5: 완전 자율 단계: 완전 자율 주행으로 시스템이 장소나 지역 제한 없이 교통 상황을 인지하여 운전과 관련된 모든 조작을 한다. 운전자가 운전에 개입할 필요가 전혀 없어 가속 페달이나 핸들이 없는 자동차도 실현할 수 있다.
레벨 1~2를 운전 지원이라 하고 레벨 3 이상을 자율 주행이라 합니다. 자율 주행 자동차는 다음과 같은 기대효과를 갖고 있습니다.
- 교통사고는 운전자 실수나 무모한 행동에 기인하는 경우가 대부분으로 운전 조작을 기계에 맡겨 교통사고를 줄일 수 있다.
- 서로 속도를 확인하면서 주행하므로 교통체증이 감소한다.
- 노동 인구 감소로 운송 종사자는 줄어들고 있다. 이 노동력을 대체하면 수송력을 유지&확보하여 경제 규모를 유지할 수 있다.
- 과소 지역에서 대중교통을 대체하는 수송 수단을 낮은 비용으로 제공한다.
2. 자율주행차의 GPS는 어떻게 사용될까?
GPS는 global positioning system이란 뜻으로 미국이 관리하는 위성항법 시스템입니다. 세계 어디에 있던 3대 이상의 인공위성을 통해 자신의 위치를 정확하게 알아낼 수 있는 시스템입니다. 인공위성의 위치정보는 위도, 경도, 고도로 이루어져 있습니다. 그렇다면 위도, 경도, 고도를 통해 최단거리를 어떻게 구할 수 있을까요?
지구는 둥글기 때문에 단순하게 공간좌표상의 직선거리를 계산할 수 없습니다. 구면좌표계에서의 거리를 구하기 위해 Haversine 공식을 사용합니다. 위도와 경두가 주어진 구 위의 두 점 사이의 대원 거리를 구하는 공식입니다. 지구를 구라 가정하고 (사실 지구는 살짝 타원에 가깝다.) 두 지점의 좌표를 (위도, 경도)라 하고 지구 표면을 따라 측정한 거리를 구하는 방법이다.
Haversine 공식은 다음과 같다. 구의 두 지점 사이의 중심각을 θ 라 한다. d는 구의 두 점 사이 거리 대원 거리이다. r은 구의 반지름이고, d = rθ이다. 그렇다면 θ의 Haversine( hav(θ) )을 두 지점의 위도와 경도에서 구할 수 있다.
여기서 φ1, φ2는 두 지점의 위도(단위: 라디안), λ1, λ2는 두 지점의 경도(단위: 라디안)이다. 중심각θ와 두 지점의 위도 차, 경도차 모두 적용된 Haversine 함수 hav(θ)는 다음과 같다.
Haversine 함수는 각도θ/2의 Versine을 계산한다. 이때 거리 d를 구하려면 Haversine의 역함수 arcHaversine을 구하거나 arcsine을 이용하면 된다.
이때, Haversine 법칙은 다음과 같다. 단위구가 주어졌을 때 구 표면의 삼각형은 구의 세 점 u, v, w를 연결하는 하나의 큰 원으로 정의할 수 있다. 이때 세 변의 길이 a, b, c에 대하여 c의 대각을 C라 하면, Haversine 법칙은 아래와 같다.
하버사인 공식을 아두이노에 적용하여 코드를 작성하면 다음과 같다. 상당한 정확도를 도출하고 재미있으니 꼭 해보길 바란다.
/*---------------Distance & Bearing Calculator-----------
*
haversine기반 거리계산 공식 알고리즘
gnss모듈을 이용하여 자신의 위치 정보를 저장합니다.
haversion기반 두 곡선 사이 거리 & 방위 계산각
x좌표, y좌표, 실제거리(m), 방위각 계산
*/
void calcHav(){
lonR1 = lon1*(PI/180);
lonR2 = lon2*(PI/180);
latR1 = lat1*(PI/180);
latR2 = lat2*(PI/180);
dlon = lonR2 - lonR1;
dlat = latR2 - latR1;
pa = (sq(sin(dlat/2))) + cos(latR1) * cos(latR2) * (sq(sin(dlon/2)));
pc = 2 * atan2(sqrt(pa), sqrt(1-pa)) ;
distance = R * pc;
x = cos(latR2)*sin(lonR2-lonR1);
y = cos(latR1)*sin(latR2)-sin(latR1)*cos(latR2)*cos(lonR2-lonR1);
float brRad = atan2(x, y);
float reqBear = toDegrees*brRad;
Serial2.print("Bearing: ");
Serial2.println(reqBear, 4);
}
3. 세특 심화 탐구 주제 정리
- 구글 지도를 통해 위도와 경도를 파악하고 하버사인방법을 이용하여 직접 좌표 간의 거리 측정하기 - 수학, 물리
- 파이썬 이용하여 하버사인 직접 구현하기 - 수학, 물리, 정보
- 아두이노 GPS 파싱하여 위도, 경도를 받아 하버사인 활용하여 거리 측정하기 - 수학, 물리, 정보
- 구면 위의 자 만들기 (직접 코딩하고 구글 지도의 데이터를 활용해도 좋고 손으로 계산해도 좋다.) - 수학, 물리, 정보
- GPS의 최단거리와 실제 경로의 차이 분석하기 - 수학, 물리, 정보
4차 산업혁명과 관련된 탐구 주제가 궁금하다면 아래 포스팅을 확인해주세요.
댓글