인트로
자율 주행이 어떻게 구성되고 작동하는지
전문가가 아닌, 개발을 약간 해본 일반인이 설명하는 글입니다.
자동차 자율 주행보다는 로봇 청소기의 자율 주행에 더 가까운 내용입니다.
로봇이 어떤 과정으로 움직이는지를 설명하며,
개발을 하면서 부딪혔던 문제들(하드웨어 문제, 소프트웨어 문제, 구조에 대한 이해 부족)과 해결 과정,
그리고 적용해 보았던 알고리즘에 대한 설명을 포함시키려 합니다.
(잘못된 내용에 대한 지적 혹은 더 나은 설명에 대한 피드백은 언제나 환영입니다!)
이번 글은 제가 과거에 어떤 방식으로 개발을 했는지 과정을 훑어보고
자율 주행을 구현하기 위해 필요한 세 가지 기술에 대한 언급
그리고 앞으로 글의 방향에 대해 작성하였습니다.
1. 목표 설정 -> 수상에서 장애물을 회피하고 나아갈 수 있는 소프트웨어 만들기
2. 하드웨어 제작 -> 물에 잘 뜨고 무선통신으로 조종 가능하게 만들기 (기존 수동 조종 로봇 시스템 적용)
3. 소프트웨어 개발 -> slam, robot localization, navigation 등 상용화된 다양한 기술들 적용
4. 각종 부수적인 문제 해결 -> 통신, 제어, 배터리, 하드웨어 안정성, 계산 과부하, 센서 노이즈 등등
5. 3과 4를 반복하며 최적의 솔루션 찾기
돌이켜보면 문제를 해결하는 시간이 거의 대부분이었습니다. 특히 하드웨어의 문제인지 소프트웨어의 문제인지 확실하지 않을 때에는 해결하는데 시간이 배로 걸렸습니다. 아마 앞으로 어떤 개발을 하더라도 위와 비슷한 방식의 반복이 아닐까 싶습니다.
자율 주행 기술을 구현하기 위해서는 크게 세 가지의 미션을 해결해야 합니다.
첫 번째 : 로봇의 위치를 정확히 파악하기
두 번째 : 목적지까지 안전한 경로를 추정하기
세 번째 : 추정한 경로에 맞게 모터를 컨트롤하기
다음과 같은 상상을 하면 왜 이렇게 세 가지 미션을 수행해야 하는지 쉽게 이해할 수 있습니다.
먼저 집에 있는 랜덤 한 공간(화장실 제외)에 들어갔다고 생각합니다.
다음으로 눈을 감은 상태로 화장실까지 안전하게 도착하는 것을 목표로 움직입니다.
그렇다면 제일 먼저 무엇을 해야 될까요? 처음에는 손이나 발의 감각을 통해 현재 어디에 있는지를 파악해야 됩니다. 왜냐하면 현재 자신의 위치를 알아야 어디로 이동할지 생각할 수 있기 때문입니다. 싱크대나 식탁이 만져진다면 부엌에 있다고 추정할 수 있고, TV나 소파가 만져진다면 거실에 있다고 추정할 수 있습니다. 이것이 위치를 실시간으로 파악하는 첫 번째 미션과 같습니다. (로봇의 경우 카메라, 라이다, 레이더, 초음파 등의 센서를 통해 위치를 파악합니다.)
위치가 파악되면 다음으로 할 일은 무엇일까요? 어디로 움직일지 생각해야 됩니다. 현재 파악한 자신의 위치를 기준으로 하여 어떤 방향으로 어느 정도 움직여야 화장실에 도달할 수 있는지를 생각합니다. 이것이 목적지까지 안전한 경로를 추정하는 두 번째 미션과 같습니다.
위치도 알고 경로도 정했다면 이제는 이동하는 일만 남았습니다. 예상한 경로를 향해 다리를 움직이며 나아갑니다. 손으로는 계속해서 벽이나 물체를 만지며 현재 위치와 방향을 추정하고, 머릿속으로는 계속해서 화장실까지의 경로를 생각합니다. 이것이 추정한 경로에 맞게 모터를 컨트롤하는 세 번째 미션과 같습니다.
이렇게 최종 목적지인 화장실까지 안전하게 이동했다면 자율 주행에 성공한 것입니다!
위에서 언급한 세 가지 미션을 수행하는 방법에 대해 작성할 예정입니다.
어떤 센서와 어떤 알고리즘을 사용해 보았고 각각의 장단점은 무엇이었는지를 정리해보려 합니다.
다음 글은 첫 번째 미션인 로봇의 위치 추정 입니다!