개발 일지/자율주행 개발일지

국민대 자율주행 경진대회 예선(이자 마지막..)

Woouuk 2026. 6. 24. 15:33

자율주행 경진대회에 5명이 한 팀으로 출전했다. 

예선을 붙고 나서 본선을 보는데, 예선은 크게 두 가지 미션으로

1. 국민대 시뮬레이터에서 정해진 코스를 미션을 수행하며 빠른 시간 안에 완주

2. 자율주차 시스템을 디자인하여 보고서 제출

이다.

 

예선에 대해 말해도 되는지 몰라 시뮬 코스와 미션에 대해 간략하게 설명하겠다.

1. 먼저, 라바콘으로 이루어진 길을 따라 코스까지 도달한다.

2. 코스는 일방 통행의 2차선으로, 코스에 도달하여 잠시 길을 따라 전진 후, 정지선과 신호등 구간을 만난다.

3. 신호등은 빨간불, 좌회전, 초록불 신호로 구성되어 좌회전 시 지름길로 갈 수 있다.

4. 단, 랜덤으로 경찰차가 지름길로 가는 길을 막고 있을 수 있다. 지름길에는 아무런 장애물이 없다.

5. 직진을 하게 되면 S자 코스가 나오고, 도중에 보행자가 가로지른다.

6. 당연히 보행자는 멈추거나, 가로질러서 부딪히면 안되고, S자 코스를 지나면 차량 두 대가 기다리고 있다.

7. 차량 두 대는 2차선을 막고 있으나, 두 대가 함께 전진을 시작한다.

8. 이 두 대는 서로 속도가 다르다. 속도가 느린 차를 추월해서 진행해야만 한다.

9. 이 부분을 지나면 지름길에서 빠져나오는 부분과 만난다.

10. 직후에, 어린이 보호구역이 나와 차량 속도가 15 이하로 제한된다.

11. 이후 맨 처음 라바콘을 지난 시점의 코스를 다시 만난다.

12. 이렇게 총 두 바퀴 반을 돌면 완주

 

기본적으로 국민대에서 제공하는 ROS2 기반의 아키텍처가 있다(cam, pointcloud, imu 패키지 등). 이를 따라서 만들었다.

맨 처음, 감지할 수 있는 원시 데이터들과 우리가 주행해야 하는 코스 및 미션을 토대로 필요한 패키지들(서브시스템들)을 명세하여 인터페이스를 정의하였고, 다 같이 "판단부"를 어떻게 만들지 정했다. (yolo 객체감지나 차선 감지가 워낙 오픈소스가 잘 되어 있어 오히려 판단이 key라고 생각했기 때문이다.)

 

판단부는 최근에 구현해 본 경험이 있던 state_machine으로 만들었다.

 

state machine

 

그리고 위의 판단부 중 상태머신 패키지를 시작으로 lidar 패키지, vision 패키지, 경로 생성 패키지, 컨트롤 패키지로 설계를 나누었고, 나는 이 중 상태머신과 컨트롤 패키지 알고리즘 설계 및 구현을 담당했다.

 

대회에서 제공해주는 imu 패키지 등이 파이썬 기반이라 상태머신도 파이썬으로 만들었다.

단, 제어부는 cpp로 구현하였고, ROS2 기반으로 구현된 stanley 오픈소스를 찾아 만들었다.

 

https://github.com/Team-Stier/kookmin-Stier1-src/tree/main

 

(현재 해당 github는 private으로 되어있다.)

 

중간에 상태머신을 구현하며, 한 바퀴 돌고 끝이 아니기 때문에 다음 상태로 전이하며 기존 상태로의 전이를 판단한 bool 값 등의 파라미터들을 초기화해줘야 하는 문제가 있었다. 이를 제외하고는 SW 규모가 크지 않고, 초반에 명세서를 만드는 데에 공을 많이 들여 비교적 수고가 적었다. (또한 내가 맡은 파트가 크게 신경써야 할 부분이 없었던 것 같다. 제어는 수신/발행 인터페이스와 그 로직이 거의 정해져 있고, 상태머신 또한 실차 테스트에서 파라미터 수정 정도뿐이 없기 때문이다.)

 

다행히 예상한 대로 코드는 잘 흘러갔다.

 

 

 

 

 

 

 

 

 

 

 

 

상반기에 자율주행 직무로 나가고 싶어 커피챗도 해보고, 교육도 듣고 했지만

알아볼수록 현재 나의 상황으로는 모빌리티 직무를 맡기에는 전망이 좋지 않다는 판단이 서 이번 국민대 자율주행 대회 참가를 마지막으로 더 이상 자율주행 SW를 개발할 일은 없을듯 하다. 또한 이 대회를 참가하는 도중, ax에도 관심이 많아 skala에 지원하였는데

감사하게도 나를 붙여주셔서 다음 글은 skala 활동이 될 듯 하다..! 자율주행 안녕 ㅠ