본문 바로가기
Programming/Capstone Design

[Capstone Design]3. 차선인식(Lane Detection) - 0

by NoiB 2021. 10. 29.
반응형

이번 포스팅에서는 차선인식을 진행하기에 앞서서 이것저것 먼저 짚고 넘어가고자 합니다.

 

자율주행

여러분은 '자율주행'이란 말을 들으면 무엇이 떠오르시나요? 저는 상당히 막연하게 '사람이 아무것도 안해줘도 알아서 달리는 기능'이라고 생각했습니다. 하지만 이런 자율주행에도 기능별로 레벨이 구분되어 있다는 사실 알고 계신가요? 국제자동차기술자협회(SAE)에서 발표한 내용을 표로 정리해 보았습니다.

Level 0 수동 운전(비자율화) 운전자가 기능 제어 및 조작 책임
Level 1 운전자 지원 차선 이탈 경보, 크루즈 컨트롤 등 시스템이 운전 보조
Level 2 부분 자동화 차선 유지, 어댑티브 크루즈 컨트롤 등 2개 이상의 자동제어 기능이 함께 작동하며 시스템이 운전
Level 3 조건부 자율주행 시스템이 교통 상황 파악해 운전(시스템 요청시 운전자가 운전)
Level 4 고도 자율주행 악천후 등 특정 상황 제외하고 시스템이 운전
Level 5 완전 자율주행 시스템이 모든 도로 환경에서 직접 운전

제가 막연하게 생각하고 있던 자율주행은 사실상 레벨 5에 해당하는 완전 자율주행이었는데요. 뭐 그 정도에 대해서는 잠깐 제쳐두고, 그렇다면 도대체 이 자율주행은 어떻게 하는걸까요?

 

운전면허가 있으신 분들은 혹시 처음에 기능 연습, 도로 주행 연습을 할 때가 기억나시나요? 저는 1종보통으로 면허증을 땄는데 핸들이 제 생각보다 많이 돌려야 차가 회전이 된다는게 신기하고 또 신경쓰이는 부분이었습니다. 왜 저희는 운전을 할 때 핸들을 돌려야할까요? 그냥 액셀러레이터 페달만 밟고 있으면 쭉 직진하다가 큰 사고가 나겠죠. 물론 브레이크도 있지만 저희가 차를 타고 달리는 도로는 직진구간만 있는게 아니기 때문에 적절하게 핸들을 이용해서 커브를 돌아야 합니다. 그렇다면 마구잡이로 핸들만 돌려도 될까요? 그랬다가는 옆에 있는 구조물이나 다른 차량 및 사람을 들이받는 일이 일어나겠죠. 따라서 저희는 운전을 하면서 최소한 적절하게 액셀과 브레이크를 밟아가며 내가 지금 있는 차선을 벗어나지 않게끔 운전을 하는게 사고의 위험을 상당히 낮추는 일이 되겠죠(차선변경은 제외하겠습니다).

 

차선인식

그렇다면 이제 왜 우리가 차선인식을 해야하는지에 대해 감이 좀 오시리라 생각이 됩니다. 주행 중에 계속해서 우리가 목표로 하는 양쪽 차선 내부에 위치하는게 차선인식을 하는 이유가 되겠습니다. 그렇다면 이 차선인식은 어떻게 해야할까요? 방법은 여러가지가 있지만 저는 가급적이면 기본적인 경우를 이용하도록 하겠습니다. 여러가지 좋은 알고리즘들이 많지만 저희는 라즈베리파이에서 구동하는게 목표라 시간이 오래걸리는 알고리즘은 사용할 수 없어서요. 아마 영상처리를 살짝이라도 경험해보신 분들이라면 익숙한 Gaussian Blur, Canny Edge Detection, Hough Transformation 등의 방법들을 소개시켜드릴 예정입니다.

 

뭔가 이것저것 많이 써놨지만 결국 차선인식을 어떻게 하는지는 안적어놓아서 실망하셨을지도 모르겠습니다만 제 개인적인 생각으로는 기능 그 자체를 구현하는 것도 물론 중요하지만 기능을 구현하려고 했던 이유와 목적을 항상 잊지 않아야 한다고 생각을 하기 때문에 앞서서 이렇게 한 번 정리하고 가는 것이 좋겠다고 판단해서 이렇게 긴 글을 하나 올려봅니다.

반응형