미로 자율주행 알고리즘

2020. 10. 12. 20:40인공지능,프로그래밍

반응형

최근 인공지능에 대한 관심이 높아지면서 

다양한 환경에서 인공지능을 활용하려는 시도가 이어지고 있는데요,

 

테슬라는 그 수혜를 받고 있는 기업중의 하나입니다. 

 

저도 경험해 본 바에 의하면 

한국에서 대부분의 테슬라 오너들이 경험할 수 이는 반자율 주행만 하더라도 

꽤 편리한 기능으로 특히 막히는 구간에서는 정말 필요한 기능입니다. 

 

그럼 이러한 자율 주행은 어떠한 원리로 작동하는 것일까요?

 

이를 이해하기 위해서는 

사람이 어떤방식으로 운전을 하는지를 먼저 살펴볼 필요가 있습니다. 

 

인공지능이란 사람의 지능을 흉내내는 것으로 

사람이 생각하는 방식을 순서에 따라 

컴퓨터가 따라하도록 하는 것이 그 시작이기 때문입니다. 

 

하지만 우리가 운전을 할 때 보고 듣는 것을 모두 의식적으로 분석하면서

그 때 그 때 다양한 가능성을 고려하면서 하지 않기 때문에 

막상 내가 어떻게 사고하고 판단하는지를 생각해 보는 것이 그리 간단한 일은 아닙니다. 

 

따라서 천리길도 한 걸음부터라는 속담도 있듯이 

이번 글에서는 먼저 간단한 자율주행 알고리즘을 생각해 보겠습니다. 

 

주어진 환경은 간단한 미로? 와 같은 주행로이며,

자율주행 자동차는 이 길을 끝까지 운행하는 것을 목표로 하는 것입니다. 

 

예를 들어 아래 그림과 같은 길이 있다고 한다면,

출발점에서 도착점까지 차를 운행해 보겠습니다. 

 

 

보통 완전 초보 단계의 코딩교육에서 위 차를 움직일 때는 

출발, 직진, 우회전, 직진, 우회전, 직진, 우회전, 우회전, 직진, 좌회전, 좌회전, 직진, 우회전, 우회전, 직진, 정지

라는 방식으로 입력하고 운행하게 합니다. 

 

하지만 위 코딩에 뭔가 빠진 것이 있습니다. 

직진이나 우회전, 좌회전을 얼마나 할 것인가 하는 부분입니다. 

따라서 여기에 추가할 부분은 직진하다가 어떤 조건에서 우회전을 할 것인가 하는 내용입니다. 

 

이제 해당 부분을 추가해 보겠습니다. 

 

출발, 직진, 벽을 만나면 우회전, 직진, 벽을 만나면 우회전, 우회전, 직진,

벽을 만나면 좌회전, 좌회전, 직진, 벽을 만나면 우회전, 우회전, 직진, 벽을 만나면 정지

와 같이 될 것입니다. 

 

이제 이 코딩이 제대로 작동한다면 자동차는 출발해서 도착지점까지 갈 수 있을 텐데요,

사실 위 내용에서 우회전이나 좌회전은 내가 가는 길을 알고 있다는 점이 기본 조건이 되었을 때입니다. 

 

하지만 우리가 운전을 할 때 모든 길을 알면서 가는 것은 아니며,

그 모든 길을 미리 코딩해 둔다는 것은 더 어려운 일입니다. 

 

따라서 좀 더 발전한 알고리즘은 

다음과 같은 조건이 추가되어야 할 것입니다. 

 

바로 정면에 벽이 있을 때 오른쪽이나 왼쪽 대각선의 빈공간을 확인하고

빈공간이 있는 방향으로 방향을 조정하는 것입니다. 

 

이렇게 되면 다음과 같은 코딩이 가능해 집니다. 

출발, 직진, 벽을 만나면~방향을 조정해서 회전하기, 다만 벽을 만나도 좌우로 공간이 없으면 정지

 

이상과 같은 내용으로만 코딩이 되면 벽을 만날 때마다 공간이 있으면 회전하고 공간이 없으면 정지하는 것으로

목적지까지 도착할 수 있을 것입니다. 

 

말로 풀어서 길어졌을 수 있겠지만,

코딩은 위와 같이 하나씩 하나씩 사람이 생각하는 바를 글로 옮기는 것 부터 시작하게 됩니다. 

그리고 그 내용에 대한 코딩 용어로 바꾸게 되면

프로그램이 되는 것입니다. 

 

따라서 어떤 것을 코딩하려고 할 때 

제일 먼저 필요한 것은 무엇을 할지를 정확하게 파악하는 것과 

그렇게 하기 위해 필요한 내용을 모두 수집하고

각 조건에 어떻게 해야겠다는 것을 정리하는 것부터가 

필요한 것이라고 할 수 있습니다. 

 

다음에는 위의 내용을 어떻게 코딩으로 가능하면 파이썬으로 구현할 수 있는지를 적어 보겠습니다. 

 

이상 오늘의 글을 마칩니다. 

반응형