본문 바로가기

My Project

2021 국방로봇경진대회

대한민국 육군본부, 한국로봇융합연구원이 주최하고 한화디펜스가 후원하는

2021 국방로봇경진대회에 한성대학교 대표로 출전해서 본선 17개팀중 4위를 하면서,

한국로봇융합연구원장상을 수상했다.

 

나는 로봇 "삵"에 들어가는 로봇메인엔진 소프트웨어를 만들었다.

 

쉽게 말하면 특정한 명령을 받으면 로봇이 움직일 수 있는 체계를 만들었다.

포지션 특성상 로봇의 몸체를 설계하고 만드는 기계팀과 협업을 많이 했었다.

 

그때 알파벳이 숫자보다 많은 수학식을 보면서 정말 컴공온것을 잘 했다는 생각을 했었다. (ㅋㅋㅋ)

 

 

#1. 무선수동주행

 

로봇의 메인 엔진프로그램은 RaspberryPi에서 Python으로 코딩했다.

직전학기 때 배운 RaspberryPi GPIO와 MQTT통신체계로 로봇을 무선수동조작할수 있게 만들었다.

(황기태 교수님 감사합니다)

버튼을 누르면 RaspberryPi안에 있는 특정 함수를 실행하여 모터를 구동하는 방식이다.

당연히 이들은 같은 네트워크상에 위치해야 한다. 

(리모컨은 Android Studio 제작되었다)

 기어의 역할까지 해줬어야 해서 버튼을 저렇게 무식하게 많이 배치하였다. (애초에 Pad로 조작할거였으니)

 

 

(첫 주행 모습)

 

 

 

 

 

 

#2. 자율주행

 

맨처음엔 RaspberryPi의 연산능력을 고려하지 않은 채로 RaspberryPi에서 OpenCV를 구동하려 했었다 (ㅋㅋㅋㅋㅋㅋ)

(RaspberryPi : ㅈ..죽여줘..)

테스트이미지로 차선을 잘 검출하는지 테스트해본것인데 1프레임 연산하는데 2초나 걸렸다.

 

때문에 GPU가 달려있는 노트북에서 RaspberryPi가 전송한 사진을 받아 OpenCV를 구동하고 진행방향까지 계산하여 다시 RaspberryPi에게 돌려주는 방식으로 코딩하였다.

 

근데, 이 사진을 넘겨받는 작업이 상당히 골때렸었다.

MQTT는 이미지 전송을 지원하지 않았기에, 사진을 ByteArray형식의 문자열로 인코딩하여 전송하고

이것을 다시 외부컴퓨터가 이미지로 디코딩해야 했다.

#보내는 놈
def cameraPub():
    imgData = camera.takePicture()
    imgData = bytes(imgData)
    client.publish("image", imgData, qos=0)
    print("Image Published")
    pass
#받는 놈
def on_message(client, userdata, msg):
    image = msg.payload
    imageArray = np.frombuffer(image, dtype=np.uint8)
    img =cv2.imdecode(imageArray, cv2.IMREAD_COLOR)
    LineTrace(img)

저기 "받는 놈" 코드 4줄 작성하는데 한 2시간 걸렸었다.

(잘 받는지 테스트중...)
(검출은 아주 성공적!)

이제 검출한 데이터를 토대로 1초에 한번씩 RaspberryPi로 외부컴퓨터가 진행방향을 전송해주어 자율주행을 수행하는 방식이였다.

 

 

 

 

 

 

#3 소감

(대회장에서 우리것만 왤케 허접해 보였나 몰라)

 

대회전날 팀원 전원이 마지막테스트를 하느라 밤을 새고 가서 너무 정신이 없었다.

그래도 정신 부여잡고 마지막 보수를 마치고, 대회장에 들어가 우리의 최선을 다했던 것 같다.

 

결과까지 너무 좋았다.

추억도 많았고, 개발하는 동안 너무 재밌었고

프로젝트 하면서 사귄 친구들도 너무 좋았다.

 

죽을 때 까지 잊지 못할 경험이 되었건 것 같다.