1학기가 끝나고 방학 중 AI Turret에 대한 설계를 이어갔다. 특히 H/W와 YOLO에 대해 지속적인 설계를 하였다.
YOLOv3-Tiny을 Custom을 해보았고 대해 문제점들을 찾았으며, 이에 대한 해결 방안을 고민하고 있다.
또한 AI Turret의 Frame과 필요한 부품들 모두 설계하여, 실제로 Turret을 구현해 볼 수 있을 것으로 판단된다!
"Google Colab" 환경을 이용하여 Custom을 진행했다. Darknet과 YOLOv3-Tiny를 기반으로 모델 학습을 진행했으며, 미리 준비한 약 800장의 사진과 Labelling 파일을 사용했다.
모델을 학습하는 데에 있어, 여러 경우의 수를 두어 학습했다. 학습에 사용되는 사진의 수와 batch, subdivision 조정함으로써 Custom된 YOLO 모델에 대한 결과물의 차이를 확인하기 위함이다.
위 사진은 학습이 완료된 파일의 결과를 확인 한 것이며, 사진에서 볼 수 있듯이 탐지하고자 하는 Santa 인형에 Bounding Box가 나타나지 않고 객체를 인식하지 못한 결과물이 나왔다.
최종 결과로는 앞서 설정한 3가지의 경우 모두 같은 결과를 나타냈다. 학습에 사용된 사진의 양이 부족해서, 혹은 학습 횟수가 충분하지 않아서 등 여러 요소를 변경해 반복적으로 학습했다.
결과적으로 같은 상황이 반복됐고 문제가 있음을 짐작했다.
따라서 YOLOv3-Tiny의 필요성과 다른 대체재에 대해 한 번 더 고민해볼 필요가 있을 것으로 보인다.
AI Turret System의 “Object Detection”를 위한 프로세서로 Raspberry Pi 4 B를 선택하였다. 그러나 위에서 언급한 YOLOv3-Tiny의 문제가 아닌 Raspberry Pi 환경에서 YOLO 모델을 구동하는 데에 있어 몇 가지 중요한 문제에 맞닥뜨리게 되었다.
기존에 사용하던 모델인 YOLOv3-Tiny가 아닌 YOLO-Tiny에서도 이러한 문제가 발생하는 것으로 보아, Object Detection을 수행하는데 어려움이 있을 것으로 판단된다.
이로써 더 이상 Raspberry Pi 4 B는 “Object Detection 및 Tracking”에 적 합하지 않은 프로세서로 결론지었다.
Raspberry Pi 4 B 환경에서 Object Detection에 어려움이 생겨, 원활한 Object Detection 실험을 위해 더 우수한 성능을 가진 프로세서가 필요했다.
CPU(SoC) | GPU | Memory | OS | |
---|---|---|---|---|
Raspberry Pi 4 B | Cortex-A72 1.5GHz | 500MHz VideoCore VI | 4GB | Raspbian OS |
samsung galaxy book | Intel Core i5 | NVIDIA Geforce MX250 | 8GB | Windows10 |
PC(samsung galaxy book)와 Raspberry Pi 4 B를 비교해본 결과, 당연하게도 모든 면에서 PC의 성능이 Raspberry Pi 4 B를 압도하였다. 가장 중요한 YOLO 실행 시, 프레임 감소 역시 PC에서는 문제가 되지 않았다.
AI Turret System의 목적은 Raspberry Pi 4 B를 사용하여 프로젝트를 구성하는 것이 아닌 “YOLO를 활용한 Object Detection 및 Tracking”이기에, 더욱 적합하며 높은 성능을 가진 PC로 프로세서를 변경하여 YOLO를 통한 Object Detection 기능의 설계를 계속하기로 결정하였다.
PC로 개발 환경을 변경하지만, 기존의 설계에 미치는 큰 변화는 없다. Python 기반의 OpenCV를 그대로 사용하고, 기존의 Raspberry Pi 환경에서 ESP32와 통신하기 위해 사용한 UART 통신을 동일하게 적용할 방안이다.
이때, PC와 ESP32가 통신하기위해 아래의 사진과 같은 "USB to UART Module"을 사용할 예정이다.
또한, Object를 탐지하기 위한 카메라가 Raspberry Pi CSI Camera에서 PC에 연결될 Web Cam으로 변경 되었다.
AI Turret의 성능에 더욱 알맞고 구체적인 활용 방안에 대해 고민해봤다. 비둘기와 같은 “유해 동물”보다 더욱 실용적으로 적용이 가능한 주제로 생각한 결과, 목표로 하는 Object를 기존의 “비둘기(Santa 인형으로 대체)”에서 "권총(Pistol)"으로 변경하였다.
국내에서는 총기소지가 불법이지만 합법인 해외 여러 국가에서는 매년 총기관련 사건이 발생한다. 이러한 배경적 상황이 목표물을 탐지, 추적 및 발사체를 통한 사격이 가능한 AI Turret이 권총을 탐지하여 발생한 문제를 해결하기에 더욱 적합할 것 같아 대상 Object를 수정하였다.
비둘기 대신 사용한 산타 인형보다는 BB탄 권총으로 System의 동작시키는 것이 더 보기에도 좋을 것 같다!
앞서 밝힌 결과에 따르면 인식률을 높이고 인식 시간을 줄이는 것이 Object Detection에 있어 중요하다고 판단된다. 따라서 기존의 YOLOv3-Tiny가 아닌 상대적으로 더욱 복잡한 신경망 및 빠른 인식속도, 높은 정확도를 가진 YOLOv5를 사용할 예정이다.
또한, 모델을 학습하기 위해 필요한 학습 Image는 이전처럼 직접 촬영하는 것이 아닌 미리 Labeling 작업을 하여 Dataset으로 구성되어 있는 “Roboflow”의“Pistols Dataset”을 활용하여 YOLOv5를 기반으로 모델을 학습할 예정이다.
AI Turret System을 구성하는 Frame을 설계하기 전, 이에 사용되는 모든 부품을 정리하여 정확한 크기와 형태 등의 기반으로 "Google SketchUP"을 통해 설계하였다.
Servo Motor 및 Servo Motor Bracket에 대한 설계
각종 Sensor 및 MCU 설계
Airsoft Gun 및 관련 부품 설계
AI Turret System의 Frame을 각종 부품의 크기와 비례하도록 설계하기 위해 상향식 설계를 선택하였으며 필요한 부품을 우선적으로 Modeling을 한 후, 전반적인 설계를 진행하였다.
Modeling된 각 부품들을 활용하여 AI Turret System의 Frame을 설계하였으며, Frame 또한 상향식 설계를 적용하여 가장 기초가 되는 Airsoft Gun - Gear Box에 대한 Frame부터 설계를 하였다.
Airsoft Gun의 동작 범위는 상-하로 각각 약 26°의 가동범위를 가지도록 설계하였다.
Tilt Module의 뒷면을 보면 Servo Motor의 배선이 별도로 수납되어 정리될 수 있도록 설계하였다.
Pan Module은 360°의 가동범위를 가지도록 설계되었고, Gyro Data를 생성하기 위해 하단에 MPU-6050 Gyro Sensor을 부착하였다.
위에서 설계한 Turret System을 안정적으로 유지하기 위해 Stabilizer를 구성하였으며, Pan Module에 2개의 Servo Motor를 부착하여 동작시키도록 설계하였다.
1st Axis Stabilizer Module은 최대 약 40°에서 최소 약 30°의 가동범위를 가지도록 설계되었다.
2st Axis Stabilizer Support Module은 상위 Module의 크기가 점진적으로 켜지며, 3D Printer의 출력 가능한 크기를 뛰어넘어 하나의 출력물이 아닌 2개의 출력물로 분할하였다.
크게 2가지 Part로 나뉘어 설계를 하였는데 이를 각 Part 별로 조합해보면 아래와 동일하다.
위의 두 기능을 하나로 연결하여 동작시키면 AI Turret System이 완성된다.
AI Turret System 부품 배치도
AI Turret System 부품 조립도
이렇게 설계한 부품 중, 2st Axis Stabilizer Support Module을 제외하고 나머지 부품들을 STL 파일로 변환하여 출력물에 대한 설정을 하여 Gcode 파일로 변환하여 3D Printer를 통해 출력하게 된다.
2st Axis Stabilizer Support Module은 AI Turret System의 아래에 Power Supply와 같은 무거운 물체를 두고 볼트의 체결로 하중을 버티는 것이 효율적이라 판단하여, 최종 형상이 결정되면 그때 출력할 예정이다.