STM32MP1 보드가 탑재된 개발 보드를 활용하여 독자적인 애플리케이션을 개발하는 'STM32MP1 완전 정복 퀘스트 챌린지' 대회가 막을 내렸다. 최종 순위에 이름을 올린 두 엔지니어, '칩헤드'와 '메이슨'에게 대회를 통해 얻을 수 있었던 것들에 관해 물었다.
딥러닝으로 게이머 안내하는 기능 탑재한 게임,
외부 음성 데이터 처리 과정 시각화한 기능 등
STM32MP1 완전 정복 퀘스트 챌린지에서 수상
전기·전자 시스템 설계에 관심만 있다면 그 누구나 참여할 수 있는 STM32MP1 퀘스트 챌린지가 지난 6월 22일, 막을 내렸다.
ST마이크로일렉트로닉스 코리아가 주최하고 e4ds 메이크(Make)가 주관한 'STM32MP1 완전 정복 퀘스트 챌린지'는 4월 13일부터 6월 14일까지 진행됐다.
STM32MP1 보드가 탑재된 'STM32MP157C-DK2 디스커버리 키트'를 이용하여 독자적인 애플리케이션을 개발하는 이번 대회는 총 7개의 퀘스트가 매주 1개씩 진행됐다. 애플리케이션을 완성하는 마지막 퀘스트는 특별히 2주 동안 진행됐다.
직전 퀘스트를 통과해야만 다음 퀘스트에 도전할 수 있으며, 파이널 퀘스트까지 모두 마친 참가자는 ST 코리아에서 선정한 순위에 따라 갤럭시 S20, 갤럭시 워치, 갤럭시 버즈 등을 경품으로 받았다.
총 238명의 엔지니어가 STM32MP1 완전 정복 퀘스트 챌린지에 도전했으며, 14명만이 모든 퀘스트를 끝마쳤다. 6월 22일, 최종 순위가 발표되며 갤럭시 워치를 가져갈 4명의 엔지니어가 확정됐다.
e4ds 뉴스는 '칩헤드', '메이슨' 엔지니어에게 대회에 입상한 소감과 겪었던 과제들, 그리고 엔지니어로서 얻을 수 있었던 경험에 관해서 물었다.
▲ 딥러닝 기반 AI Bird 게임 [사진=칩헤드]
칩헤드 엔지니어가 개발한 'Deep Learning-based AI Bird Game'은 화면을 터치할 때마다 위로 솟는 'AI Bird'를 제어하여 좁은 공간을 최대한 많이 통과하는 게임이다. AI 기능을 켜면 학습된 딥러닝이 게이머에게 AI Bird가 있어야 할 위치를 알려준다.
게이머가 게임을 많이 할수록 정확도가 높아지는 이 AI 기능을 구현하기 위해 칩헤드 엔지니어는 딥러닝 모델을 경량화했고, 3D GPU와 NEON SIMD를 활용하여 딥러닝 속도를 최대한 가속하는 데 중점을 뒀다.
Q1. STM23MP1 완전 정복 퀘스트 챌린지에 입상하신 걸 축하드립니다. 간단한 자기소개 부탁드리겠습니다.
A. 안녕하세요. 모바일 디바이스를 위한 임베디드 시스템 소프트웨어를 연구 및 개발 중인 40대 엔지니어, 칩헤드입니다.
Q2. 이번 대회는 어떤 경로로 알게 되신 겁니까? 평소 전자 회로 설계에 관심이 많으셨는지?
A. e4ds 이메일 구독을 통해 알게 됐습니다.
Q3. 개발하신 과제에 대한 설명 부탁드립니다.
A. AI 네트워크 모델을 이용하여 임베디드 보드에서 훈련 및 추론 앱이 실행될 수 있도록 구현하고 싶었습니다. ARM NEON SIMD를 사용하여 훈련속도를 가속화 했습니다.
Q4. 개발 과정 중에 특히 생각나는 어려움이 있다면?
A. 개발 보드에 딥러닝 학습 예제들이 많지 않아서 관련 개발을 할 때 많은 개발 착오를 반복할 수밖에 없었습니다.
Q5. STM23MP1 보드와 Qt를 사용한 소감은 어떻습니까? 어렵거나 힘들진 않았습니까?
A. Qt를 사용해본 결과 개발 툴킷의 기능이 많고 문서화가 잘되어 있어서 GUI 앱 개발 생산성을 높일 수 있었습니다.
Q6. 이번 퀘스트 챌린지와 같은 대회가 다시 열린다면 참여하실 생각입니까?
A. AI 관련 NPU를 내장한 개발 보드를 활용하는 대회가 아니라면 참여하지 않을 생각입니다.
Q7. 대회 진행에 있어 개선되었으면 하는 부분이 있다면?
A. 추가적인 하드웨어 사용 없이 모든 지원자가 같은 하드웨어 조건에서 개발을 진행했으면 좀 더 공정한 평가가 이뤄졌으리라 생각합니다.
▲ 음성 신호 주파수 처리 및 필터링 후 qt앱 송출
[사진=메이슨]
메이슨 엔지니어가 개발한 '음성 신호 주파수 처리 및 필터링 후 qt앱 송출'은 마이크로폰 모듈로 STM32MP1의 A7 코어로 전해진 외부 음성 데이터가 어떻게 처리되었는지 STM32MP157C-DK2 개발 보드의 디스플레이를 통해 시각적으로 표시하는 기능이다.
Q1. STM23MP1 완전 정복 퀘스트 챌린지에 입상하신 걸 축하드립니다. 간단한 자기소개 부탁드리겠습니다.
A. 안녕하세요. 저는 임베디드에 갓 입문한 20대 대학생입니다. 미국에서 대학을 다니다가 최근 휴학하고 한국에 돌아와 생활하고 있습니다.
Q2. 이번 대회는 어떤 경로로 알게 됐습니까? 평소 전자 회로 설계에 관심이 많으셨는지?
A. 사실 6개월 전만 해도 임베디드에 대해 알지도 못했습니다. 전자 회로에 대해서도 간단한 지식만 갖고 있었습니다. 휴학 중에 뭐라도 배워봐야겠다 싶어 AI에 대해 독학하기 시작했습니다. 그러다 보니 자연스럽게 전자 회로에 관해 관심이 갔고, MCU도 접하게 되었습니다.
처음에는 아두이노로 시작해서 현재는 STM32 MCU를 중점으로 공부하고 있습니다. STM32 MCU에 대해 검색하다 보니 우연히 e4ds에 들어오게 되었고, 이번 대회 또한 알게 되었습니다. 어찌 보면 우연히 공부를 시작해서 우연히 대회도 알게 된 셈입니다.
Q3. 개발하신 과제에 대한 설명 부탁드립니다.
A. 처음 STM32MP1을 봤을 때 “이걸 어떻게 써야 제대로 썼다고 말할 수 있을까?”라는 고민을 많이 했습니다. A7 코어는 고성능에 고전력이라는 특징이 있지만, M4 코어는 적당한 성능에 저전력이라는 강점이 있습니다.
“M4 코어로 배터리 효율을 크게 높일 수 있지 않을까”라는 생각으로 조사해본 결과, STM32MP1은 'C Sleep'이라는 기능을 지원한다는 것을 발견했습니다. M4 코어가 C Sleep 상태에 들어간 A7 코어를 필요할 때만 깨울 수만 있다면 배터리 효율을 높일 수 있을 것이라 생각했습니다.
그래서 ST가 제공하는 Cube AI를 통해 M4 코어에 음성인식을 구현한 뒤, 특정 단어가 들리면 M4 측에서 A7 코어를 깨우는 방향으로 구성했습니다. △프로젝트 내에서 ADC를 이용해 마이크로폰에서 데이터를 추출하고, △사운드 전처리(Pre-processing)를 적용하고, △음성인식 모델을 통해 단어를 추론하고, △C Sleep을 실행해서 A7 코어를 깨우고, △Qt앱에서 사운드 스펙트럼을 보여주는 것이 저의 목표였습니다.
안타깝게도 지식과 시간의 한계로 사운드 처리한 결과를 RPMsg로 Qt앱에 송출하는 것까지 완성하지 못했습니다. 따로 구매한 마이크로폰 모듈이 도착하면 시간을 내서 다시 위의 시도를 해볼 생각입니다.
Q4. 개발 과정 중에 특히 생각나는 어려움이 있다면?
A. 프로젝트를 진행하며 받은 STM32MP157C-DK2 보드에는 M4 코어가 쓸 수 있는 메모리가 SRAM1과 SRAM2를 합해 총 256KB가 있었습니다. 256KB로 플래시와 램을 모두 해결해야 했기 때문에 안타깝게도 링커 스크립트와 함께 'optimization level'을 조정할 필요가 있었습니다. 만약 라이브러리를 나중에 더 추가하게 된다면 256KB는 부족한 용량이 될 수 있겠다는 생각이 들었습니다.
해결방안으로 QSPI를 통해 외부 플래시를 메모리 맵에 매핑하는 방법도 있었지만, 안타깝게도 평가 보드에서만 QSPI 핀을 쓸 수 있습니다. 또한, 보드에 있는 엔지니어링 모드(engineering mode)를 모르고 진행했기 때문에 만약 알고 진행했다면 개발 과정이 더 쉬웠지 않았을까 생각이 듭니다. 덕분에 M4 코어를 매번 실행하고 난 뒤 보드를 통째로 리셋하는 수고를 여러 번 했습니다.
마지막으로 임베디드 리눅스와 Qt는 이번 대회에서 처음으로 접해 어려웠지만, 그래도 나름대로 공부가 되어서 즐거운 경험이었습니다.
Q5. STM23MP1 보드와 Qt를 사용한 소감은 어떻습니까? 어렵거나 힘들진 않았습니까?
A. 저는 임베디드 리눅스와 앱 개발에 대해 처음 접했기 때문에 모든 것이 새롭고 어려웠습니다. 사실상 Qt로 거의 모든 것을 구현할 수 있었습니다. 특히 QT 디자이너를 통해 QML UI를 개발하기 정말 쉬워서 좋았습니다. 나중에 STM32MP1 보드와 QT 앱을 이용해 음식점 서빙 로봇을 만들면 좋겠다고 상상해봤습니다
Q6. 이번 퀘스트 챌린지와 같은 대회가 다시 열린다면 참여하실 생각입니까?
A. 정말 많이 배우고 재미있게 이번 대회를 진행했기 때문에 이런 대회가 다시 열린다면 바로 참여하고 싶습니다. 다음에 참여한다면 지금보다 더 많은 사람과 교류하면서 진행하고 싶습니다.