AI 프로그래밍(무인이동체제어) 민간기능경기대회

작성일 2025.09.20 조회 82회

본문

◆ 수상내역​

6983856f70f3aad7a0dfd555b88f1371_1758941089_1275.jpg
 



● 개요 : 고용노동부, 한국산업인력공단, 국제기능올림픽대회 한국위원회에서 후원하고, 사단법인 한국기능연합회에서 주최/주관하는 코딩 드론 대회.

 

● 종목명 : AI프로그래밍(무인이동체제어 드론 코딩)

 

● 대회 일정 :

지방(예선)마감 : 6월 20일(금)

지방(예선)발표 : 6월 23일(월)

전국(본선)진행 : 8월 23일(토)

시 상 식 : 10월 21일(일)

 

● 참가자 : 정 진 우 (항공모빌리티 하이테크과정 : 2523340018)

● 예선 과제 :



 ce3afe8ebe2c66e29d44211d58e41428_1758420510_2627.png



● 과제 주요 내용 분석 :

 

  요구 사항

 분석 결과

의자의 등받이를 마주 본 상태에서 2m 이상 떨어진 지점을 이륙장으로 한다. 

이륙 지점으로부터 의자까지의 최소거리는 2m 이상

수동 컨트롤러가 아닌 코딩으로 비행 메커니즘을 입력하여 드론을 조작한다.

Open Source Library를 활용한 드론 프로그래밍 코딩 능력 요구

 ③ 

이륙한 드론은 의자의 측면을 지나 정면으로 이동한 후 의자 위에 착륙해야 한다.

최소 5번(전진, 측면, 전진, 측면, 후진) 이상의 비행 행동 양식 제어 필요

의자 가운데에 기체의 중심이 가까운 순서대로 배점하여 순위를 선정.

 의자의 가운데에 대한 착륙 정확도를 요구




● 과제 해결 방안 수립 :

거리제어 이동 방식

- 직관적인 방법으로, 의자로부터 2m의 거리를 두고 이륙하는 환경조건을 고려해 드론의 이동 경로 및 거리를 단순 수치값으로 제어하여 착륙장으로 유도하는 방식.


센서활용 경로 판단 방식

- 드론에 탑재된 센서를 활용하는 방법으로, 제어 단계에서 의자와의 거리를 고려하지 않고 센서로부터 입력받은 외부 환경 조건의 변화를 감지하여 비행 경로 및 행동 양식을 자율적으로 판단하는 방식.


● 사용 드론 제원 :

ce3afe8ebe2c66e29d44211d58e41428_1758421878_2727.jpgce3afe8ebe2c66e29d44211d58e41428_1758421884_4053.jpg

기종명 : BYROBOT - CoDrone EDU

크기 : 138.8 * 138.5 * 34.8 (mm)

중량 : 54.8 g

프로펠러 개수 : 4개

사용 모터 : DC Brushed Motor

제어 방식 : Hand Controller, Coding (Python, Blocky)


*상기 제원은 민간기능경기대회 안내페이지 <PM사무국 블로그> PM사무국 : 네이버 블로그 에 공고된 기체 요구 조건에 부합함을 확인*


● 거리제어 이동 방식 : 

 - 직관적인 방법으로, 의자로부터 2m의 거리를 두고 이륙하는 환경 조건을 고려해 드론의 이동 경로를 거리값으로 제어함으로써 착륙장으로 유도하는 방식.

 - Python 프로그래밍 언어를 이용해 드론 패키지에서 기본 제공되는 라이브러리를 설치하여 드론의 최종 목적지까지 비행 경로를 프로그래밍 한다.

ce3afe8ebe2c66e29d44211d58e41428_1758422640_024.PNG

- CoDrone Open Source Library 인터프리터 -



 - 거리제어 이동 방식에서 사용된 코드는 다음과 같다.

ce3afe8ebe2c66e29d44211d58e41428_1758426383_6083.PNG
ce3afe8ebe2c66e29d44211d58e41428_1758426390_0168.PNG




 
본 코드는 라이브러리에서 제공하는 가장 기본적인 동작 조정 메커니즘만을 사용하였다. 등받이로부터 떨어진 거리에 따른 드론의 이동속도와 이동시간을 계산하였고, 측면기동 시 의자의 손잡이와 충돌하지 않을 정도의 충분한 안전거리를 확보하였다. 이후, 최초 좌측 기동 시 소요한 시간과 동일한 시간 동안 다시 의자의 정면으로 우측 기동 시켰으며, 이 시점에서 의자 위 착륙장과의 거리를 계산해 일정량 후진시킨 후 최종적으로 목표한 착륙장에 착륙하도록 코드를 설계했다.


 과제 내용에서 의자는 등받이라는 변수를 제공한다. 드론이 당초 목표한 착륙장으로의 경로에서 변수를 조우하였을 때, 이 변수를 우회하여 목표에 도달하기 위한 경로를 자율적으로 재설정함으로써 문제를 해결할 수 있는 능력을 탑재시키는 것이 무인이동체제어의 핵심이다.


 거리제어 이동 방식은 만약 동일 조건에서 변수와의 거리가 변동되거나 주변환경에서 혼입 변인에 의한 영향이 발생하였을 때 목표에 도달하는 데에 명확한 한계를 가진다.


 - 예를 들어 의자와의 거리가 2m가 아닌 1m로 조정되었다 가정한다면, 최초 전진 비행 시 드론은 2m 전방에 위치한 등받이와 충돌하지 않을 안전범위에 접근하기 위해 입력된 거리만큼 전진하고자 할 것이다. 그러나 1m 앞에 위치한 등받이는 최초 이동거리 선정 시 감안하지 못한 변수며 결과적으로 드론은 1m 앞에 위치한 의자의 등받이와 충돌할 것이다.


 - 따라서 거리제어 이동 방식은 통제된 환경에서 사람이 직접 드론의 이동거리를 산출하여 입력해야 하므로, 본 대회에서 요구하는 문제해결능력에는 적용 범위가 다소 제한적이다.



● 센서활용 경로 판단 방식 : 

 - 드론에 탑재된 센서를 활용하는 방법으로, 제어 방식에서 의자와의 거리를 감안하지않고 센서로부터 외부 환경 조건의 변화를 감지하여 비행경로 및 행동양식을 판단한다.


 - 센서로부터 수용한 정보를 해석하여 외부 조건 변화에 따른 문제 해결방식을 선택해 실행하도록 지정하는 프로그래밍 방식이다.


 - 센서활용 경로 판단 방식에서 사용된 코드는 다음과 같다.


ce3afe8ebe2c66e29d44211d58e41428_1758426434_5917.PNGce3afe8ebe2c66e29d44211d58e41428_1758426440_5651.PNG
 


 센서활용 경로 판단 방식은 거리제어 이동방식과 달리 센서로부터 수용한 정보를 활용해 기동방식을 취한다는 특징이 있다. 드론의 전면과 저면에 부착된 센서는 각각 전방, 고도에 관한 정보를 수집한다. 이를 활용해 최초 전진 비행 시 의자의 등받이에 접근하다가 등받이와의 간격이 일정거리 이내로 좁혀질 시, 전진비행을 중단하고 경로를 우회하는 기동을 시작한다. 만약 전방에 감지되는 장애물이 없다면 드론은 장애물이 감지될 때 까지 계속해서 전진비행을 할 것이다.


 이후 과정으로 다시 의자의 정면으로 돌아오는 일련의 기동비행을 마친 후 착륙장을 탐색하기 위해 후진하며 저면의 센서를 통해 고도에 대한 정보를 수집한다. 후진 기동 중 드론이 의자 위로 진입 시 바닥으로부터 상대적으로 가까워진 고도 데이터가 감지되고, 드론은 그 즉시 현재 위치를 착륙장이라 판단하여 후진을 멈추고 착륙을 시도한다.


 - 이를 통해 의자 등받이와의 거리에 관계없이 드론이 착륙장으로 유도될 수 있다. 의자와의 거리가 1m로 변동되어도 드론은 등받이와 충돌할 위험이 있는 거리정보가 감지되면 즉시 우회기동을 시작할 것이다. 또한, 착륙장을 향해 후진기동을 하던 중 의자의 위치가 기존보다 더 멀어진다 하더라도 고도변화로 착륙장을 판단하기 때문에 착륙장의 고도 정보가 감지될 때 까지 후진기동을 계속한다.


ce3afe8ebe2c66e29d44211d58e41428_1758427026_0958.PNG
ce3afe8ebe2c66e29d44211d58e41428_1758427031_0003.PNG
-센서로부터 수용한 정보를 토대로 기동 방식을 변경-

 - 이러한 방식은 최초 프로그래밍 시 주변환경의 변화나 조건에 따른 행동방식을 제시하여 탑재시킴으로써, 드론이 수집한 정보를 토대로 자체적으로 비행경로를 재설정한다는 점에서 무인이동체제어라는 과제의 핵심에 부합한다고 할 수 있다.


▶단계 별 기동 과정 

ce3afe8ebe2c66e29d44211d58e41428_1758427337_9827.PNG
1. 최초 이륙 후 전진하며 센서를 통해 등받이와의 거리 정보 수집


ce3afe8ebe2c66e29d44211d58e41428_1758427346_1293.PNG

2. 등받이에 일정 거리 이내로 접근 시 전진 중단, 좌측으로 우회 기동 시작


ce3afe8ebe2c66e29d44211d58e41428_1758427346_2393.PNG

3. 의자와의 충분간 간격을 확보한 후 좌측 기동 중단, 의자를 지나쳐 전진 기동 시작


ce3afe8ebe2c66e29d44211d58e41428_1758427346_3538.PNG

4. 의자를 지나쳐 이동한 후 다시 의자의 정면으로 복귀하기 위해 우측 기동 시작


ce3afe8ebe2c66e29d44211d58e41428_1758427346_4286.PNG

5. 착륙장을 탐색하기 위해 고도 변화 정보를 수집하며 후진 시작


ce3afe8ebe2c66e29d44211d58e41428_1758427346_5872.PNG

6. 고도 변화 감지 시 착륙장 위에 도착했다 판단, 후진 기동 중단


ce3afe8ebe2c66e29d44211d58e41428_1758427346_7358.PNG

7. 최종적으로 착륙장에 착륙 시도



▶테스트비행 일지


날짜

테스트 내용

작업 소요 시간

비행결과 및 수정 요구 사항 

2025. 06. 02.

 (0,0) 트리밍

 

2시간

(16:00 ~ 18:00) 


 Roll -5만큼 트리밍, 여전히 불균형. 전진기동 시와 후진기동 시 각기 다른 방향으로 이동하는 현상 확인.

2025. 06. 04.

 이륙 후 전진비행 및 전방센서 작동

 

3시간 30분

(19:00 ~ 22:30)


 전방센서 인식 범위 및 작동 메커니즘 파악 완료, 범위 밖의 값을 수집할 때 이따금 None값을 반환하는 문제 발생.

2025. 06. 05.

 첫 좌측 롤링 및 의자 전면 방향 기동

 2시간

(19:00 ~ 21:00)

 좌측 롤링 지점에서 등받이와 너무 가깝거나 기수가 특정 방향으로 기울어 의자 팔걸이에 충돌하는 문제 발생. 트리밍 해결 및 전방 센서 메커니즘 정밀화 요망.

2025. 06. 07.트림 작업 및 전방 센서 거리 수정

5시간

(13:00 ~ 18:00)

직진 가능한 트림값 도출 완료, 전방 센서의 안전거리 범위를 2배로 확대 조정. 전방 센서의 작동 횟수를 초당 1번에서 4번으로 증대하여 안전거리 유지에 대한 정밀성 확보.

2025. 06. 12.

의자 전면 기동 후 우측 롤링 및 의자 정면

복귀 


2시간

(19:00 ~ 21:00)


 좌측 롤링과 동일한 출력으로 우측 롤링을 시도하였으나 의자의 정면에 위치하지 못하고 더 멀리 이동해버리는 문제 발생.
2025. 06. 13.트림 작업 및 측면기동 감속 보정 3시간 30분

(19:00 ~ 22:30)

 전날 발생한 문제로부터 확보한 데이터를 토대로 트리밍 재시도, 우측 롤링 완료 후 의자 정면에 위치하도록 조정하는 데에 성공.
2025. 06. 14. 고도 센서 활용 후진 착륙 시도


5시간

(13:00 ~ 18:00)


착륙장 감지 시 후진 제동력 부족으로 의자 등받이에 충돌하는 문제 발생 
2025. 06. 16.후진 기동 안정화 및 고도 센서 재조정  4시간

(08:00 ~ 12:00)

 후진 기동 속도를 1/3 감속 조정, 고도 센서 초당 작동 횟수를 1번에서 10번으로 증대. 착륙 정밀도가 매우 향상되었으나, 이에 따른 배터리 소모량이 극단적으로 증가.





 ▶동영상 참조링크


 날짜

 링크

 내용

2025. 06. 12.

https://youtu.be/SOpg1vdwHEc 

우측 롤링으로 의자 정면 위치 시도, 실패 

2025. 06. 14.

https://youtu.be/6_yXQ0PRxlE

착륙장(의자 중앙) 감지 시도, 제동력 부족으로 등받이와 충돌하여 실패 

2025. 06. 16.

https://youtu.be/nyLQKVTIyWg 

등받이에 충돌하지 않고 착륙장 감지 성공, 착륙 정밀도 개선 시도 

2025. 06. 16. https://youtu.be/WiDpmtljTkA 후진 감속 조정 및 센서 작동 횟수 증대, 중앙 착륙 성공