콘테스트 프로젝트 진행 상황
각 Quest를 단계적으로 완성하는 프로젝트입니다.
Quest 1: 퀘스트1 개발환경 구축하기
2022.08.01
안녕하십니까?
퀘스트1 진행내용을 제출합니다.
STM32CubeIDE에서 STM32CubeMX 최신 버전으로 업데이트 수행
FP-AI-SENSING1 ST사이트에서 로그인 후 다운로드하고, 적당한 작업 폴더(workspace) 아래에 압축 해제


이후 STM32CubeIDE에서 STM32CubeMX를 실행한 후에 "Embedded Software Packages Manager"를 실행하고,
X-CUBE-AI Software pack을 설치합니다.

이제 새 프로젝트 생성하기



퀘스트에서는 X-CUBE-AI 버전이 7.1.0으로 소개되어 있는데, 벌써 업데이트가 있네요.

이 추가 작업을 한 후에 X-CUBE-AI를 위한 Windows Util을 설치하네요.

이 작업 이후에 STM32CubeMX 창에서 "Software Packs" 항목 아래에 "X-CUBE-AI.7.2.0을 선택하면,
보드 파라미터 자동 수정하는 경고창이 나타납니다.

이후 퀘스트1에서 소개하는 진행 과정을 수행하면, 큰 문제 없이 수행을 할 수 있습니다.
Analyze 수행하기

Show Graph 화면 보기
.png)

마지막으로 Analyze 결과 화면에서 보면, 출력 파일의 위치가 소개 됩니다.
사용자 폴더 아래에 .\.stm32cubemx\network_output 에 network_analyze_report.txt 파일이 존재합니다.
Quest 2: 퀘스트2 - Neural Network Model 생성 개발 환경 구축하기
2022.08.08
진행 과정에 대해서는 첨부파일로 제공하려고 합니다. (문서가 깔끔하지는 않습니다.)
진행 과정이 원활하지는 않았으며, 퀘스트에 공유해주신 글들이 많은 도움이 되었습니다.
"뾰족머리 삼돌이", "davinci", "IRON" 님의 글이 많은 도움이 되었습니다. 다시 한 번 감사드립니다.
Anaconda 설치, Pycharm IDE 설치 는 일반적인 소프트웨어 설치 과정으로 큰 문제 없이 진행할 수 있었습니다.
.png)
PyCharm IDE의 경우, 유료 버전이 아닌 Community 버전을 선택하시면 됩니다.


이후 Anaconda를 실행하고, 지속적으로 Update 창이 나타나서 귀찮음에 업데이트 진행하였습니다.
Anaconda 환경 설정페이지에서 새로운 작업 환경을 하나 생성합니다.

“Not installed” 상태로 변경하고, Search Packages Tab에서 “tensorflow”를 검색하고, tensorflow, tensorflow-base, tensorflow-datasets를 선택(체크)하고, 다시 “Keras”를 검색해서, Keras, Keras-applications, keras-base를 선택한 후 설치를 진행합니다. (아래쪽에 6개가 선택되었다는 메시지 확인)
아래쪽에 “Apply” 버튼을 클릭하면, 필요한 설치 Packages를 검색하는 작업을 진행하며, 84개의 Packages가 설치될 것이라고 나옵니다. 여기서 다시 “Apply” 클릭해서 설치작업을 진행합니다.

이제 Pycharm IDE를 실행해야 하는데, 이 때 Anaconda 메인 화면에서 "STM32_Python_3_7" 환경을 선택하고,
.png)
PyCharm Community 아이콘을 선택해서 실행합니다.

New Project 클릭해서 새로운 프로젝트 생성하기 : 프로젝트 명은 중간에 개인 닉네임 삽입 필요
STM32_Quest_AI_Telcard_2022
* 저는 이 부분을 제대로 설정하지 않아서, 여러번의 시행착오를 거쳤습니다.

새로운 환경이 아닌, Anaconda에서 생성한 환경이 있으니, Previously에서 "Add interpreter"를 선택해서

Anaconda의 위치가 조금 다르게 표시되네요. C:\Users\jobaek\anaconda3\envs\STM32_Python_3_7\python.exe
(퀘스트에서는 .conda 아래로 표기하지만, 거기에 없더라구요.)

main.py가 생성되는 부분 체크 해제 후 "Create" 버튼을 클릭해서 생성 완료.
(여기까지 하면 대부분 큰 문제 없이 잘 될 것으로 예상합니다.)
HAR 폴더를 복사하고, Pycharm IDE에 프로젝트 창에서 붙여넣기 하면,

HAR 폴더로 붙여넣기가 진행된다.
이후 "RunMe.py"을 선택하고, "Run"을 하면, 몇가지 Module이 없다고 나오는데,
이때는 다시 Anaconda에 Environment 창에서 해당 프로젝트를 선택하고, 여기서 추가로 Module을 설치한다.
(이 과정은 위에서 Keras, tensorflow 등의 설치 과정과 동일하다.)
Numpy, Pandas, Matplotlib, sklearn 에 대해서 추가로 설치를 하였다.
이후 다시 Run을 했을 때, Module이 없다는 에러는 더이상 나타나지 않으며,
FileNotFoundError: [Errno 2] No such file or directory: 'datasets/WISDM_ar_v1.1_raw.txt'
와 같이 파일이 없다는 에러가 나타나며, 이제 7번 부터 계속 진행하면 된다.
제출 1. Accuracy 그래프를 Capture하여 제출합니다. (11번)

제출 2. Model Loss Function 그래프를 Capture하여 제출합니다. (12번)

제출 3. Confusion matrix 그래프를 Capture하여 제출합니다. (13번)

제출 4. network_analyze_report.txt
Quest 3: Quest3 수행하기
2022.09.02
안녕하십니까?
보내주신 보드는 잘 받았습니다.
Quest3을 수행함에 있어서, 제공해 주신 수행 방법에 표기된 순서가 좀 애매모호 합니다.
아무튼 내용을 참고해서 저는 아래와 같이 진행하였습니다.
우선 STM32CubeIDE를 실행하고, 기존에 사용하던 Workspace를 선택합니다. (Quest 1, 2 수행 했던...)

그리고 저는 해당 Workspace 폴더 아래에 FP-AI-SENSING1 압축을 해제한 상태입니다.
이제 FP-AI-SENSING1 아래에 있는 Apllication 예제 프로젝트를 Import 합니다.

저의 경우,
D:\Work\STM32CubeIDE\STM32CubeAI\en.fp-ai-sensing1\STM32CubeFunctionPack_SENSING1_V4.0.3\Projects\B-L475E-IOT01A\Applications\SENSING1\STM32CubeIDE\B-L475E-IOT01A
와 같이 폴더 위치를 선택해서 Import 하였습니다.
그리고 정상적으로 Import 되었는지 확인을 위해서 프로젝트 Build를 해 보았습니다.
Finished building target: B-L475E-IOT01A.elf
arm-none-eabi-size B-L475E-IOT01A.elf
text data bss dec hex filename
422944 9608 83512 516064 7dfe0 B-L475E-IOT01A.elf
Finished building: default.size.stdout
arm-none-eabi-objdump -h -S B-L475E-IOT01A.elf > "B-L475E-IOT01A.list"
Finished building: B-L475E-IOT01A.list
arm-none-eabi-objcopy -O binary "B-L475E-IOT01A.elf" "../../SENSING1.bin"
arm-none-eabi-size "B-L475E-IOT01A.elf"
text data bss dec hex filename
422944 9608 83512 516064 7dfe0 B-L475E-IOT01A.elf
00:16:51 Build Finished. 0 errors, 0 warnings. (took 46s.250ms)
와 같이 정상적으로 Build가 완료되고 SENSING1.bin 파일 생성이 되었습니다.
보드의 BLE 속성을 편집하겠습니다.
main.c 파일에 Ln 1877 쯤에 보면, Init_BlueNRG_Stack(void) 함수가 보입니다.
제시한 수행 방법으로 소스 코드 추가 및 수정을 합니다.
static void Init_BlueNRG_Stack(void)
{
char BoardName[8] = {'T','e','l','c','a','r','d'};
uint16_t service_handle, dev_name_char_handle, appearance_char_handle;
int ret;
for(int i=0; i<7; i++) {
// BoardName[i]= NodeName[i+1];
NodeName[i+1] = BoardName[i];
}
BoardName[7]= 0;
그리고 다시 프로젝트 Build를 해서 정상적으로 완료되는지 확인합니다.
이제 PC와 보드를 Micro USB 케이블을 이용해서 연결합니다.
(CN7, USB STLINK 라고 표기된 곳에 연결합니다.
그리고 위에서 Import 했던 프로젝트 폴더 위치 바로 상위 폴더를 탐색기를 이용해서 찾아갑니다.

위와 같이 CleanSENSING1.bat 파일이 있는 것을 확인하고, 위에서 Build 과정이 정상적으로 완료하였다면,
SENSING1.bin 파일이 있으며, 위의 bat 파일을 실행하면 STM32CubeProgrammer를 이용해서 보드에 다운로드를 진행합니다.

이렇게 하면, 보드에 펌웨어 다운로드는 완료되었으며, CN7 옆에 LD2 녹색 LED가 1초 주기로 깜빡이면 정상입니다.
(BLE 연결 대기 상태. 연결 후에는 LD2는 꺼짐)
이제 휴대폰에 구글 Play 스토어를 실행해서 ST BLE Sensor 앱을 검색합니다.

선택해서 설치를 진행합니다.
그리고 실행을 하면,

"Connect one Device" 메뉴를 선택하면

연결가능한 Device 목록이 나옵니다. 해당 보드 속성만 표시가 되네요. (BLE 중 어떤 모드인지는 소스 확인 필요!)
해당 Device를 선택해서 연결을 합니다.

연결하면, 기본적으로 환경 모니터링이 이루어지네요.
보드에 탑재되어 있는 온습도, 압력 센서 값이 표시되네요.
화면에서 왼쪽 위에 메뉴 버튼을 클릭해서

나오는 메뉴에서 "Activity Recognition"을 선택합니다.

보드를 1초 이하의 속도로 흔들면, Running으로 감지를 하는 듯 하며,
1초 이상의 느린 주기로 흔들면 Walking으로 감지합니다.

여기까지의 진행을 하면 되는 듯 합니다.
Quest 4: 퀘스트4 Dataset 구성하기
2022.09.17
이번 퀘스트 수행을 위해서는 보드를 움직여야 하기 때문에 보드를 보조배터리등에 연결해서 작업을 해야 하네요.
저는 USB-C to MicroAB 케이블을 하나 구매했습니다.
그래서 휴대폰에서 전원을 공급받도록 하였습니다.

보드와 휴대폰을 BLE로 연결하고, 왼쪽 상단에 메뉴를 누르고, “AI Data Log” 메뉴 선택
(* 저는 Qeust3에서는 휴대폰과 연결이 잘 되었는데, 이번에는 연결이 안되네요.
몇일을 고생하다가, IDT님의 글을 혹시나 한 번 진행해 보았습니다.
최적화 옵션을 O2 -> O1로 변경하고 정상적으로 연결이 되었습니다.)
상태 확인을 위해서 LD2의 깜빡임 여부를 보면 될 듯 하네요.
(퀘스트 진행과정 문서에서 소개하는 메뉴 구성이 좀 다른 듯 하네요. APP 버전이 변경된 듯)


“Accelerometer” 선택하고,
“Inertial sensors are sampled with a frequency of : “ 항목에 대해서 26Hz 선택
“Continue” 버튼 클릭
다음 화면에서 “ADD LABEL” 이용해서 4개의 라벨을 추가합니다.

이제 각 조건에 맞게 움직이면서 Log를 해야합니다.
간단하게 “Stationary”부터 선택하고, 보드를 책상위에 오려두고 로그를 시작합니다.

이제 위와 같은 방법으로 Log를 계속 진행하면 됩니다.
오랜만에 조깅을 하니, 땀이 장난 아니네요. (잠깐 하는 건데도...)
오늘은 제가 통영에 와 있습니다. (매주 토요일)
그리고 장소가 요즘 핫한 영화의 배경. 한산도가 바로 보이는 곳입니다.

(대표 이미지 참조!)
이제 모든 Log 작업이 완료되었으면, PC에 Log 파일을 복사해야겠네요.
먼저 아래와 같이 JP4의 점퍼 위치를 변경합니다. 기존(1-2), 변경(5-6)

USB 케이블을 CN7(ST-LINK)에서 CN9(USB-OTG)로 변경합니다.
그리고 설명에서 이야기한 것 처럼, USER버튼을 누른 상태에서 RESET을 한 번 수행하고, USER 버튼도 놓습니다.

그럼, 외장 디스크가 하나 연결이 되며, 이제까지 Log한 파일을 볼 수 있습니다.
(BLE 통신을 통해서 현재 시간 정보를 가지고 있는 듯 하네요.)

이상입니다.
이제 DataSet을 활용해서 어떻게 작업이 이루어지는지 기대가 되네요.
(잘 할 수 있을지?)
Quest 5: Quest5 수행하기
2022.09.24
먼저 아무생각없이 PC를 포맷하는 상황에서 Quest1 부터 다시 시작했습니다.
1. Keras 모델 생성하기
이는 우선 수집한 Dataset을 이용해서 Quest2의 과정을 하는 것으로 보시면 될 듯 합니다.
기존에 작업했던 프로젝트를 열기 위해서, 먼저 ANACONDA.NAVIGATOR를 실행하고,
그곳에서 Pycharm IDE를 선택해서 실행합니다.

그리고 프로젝트 아래에 HAR/Log_data 폴더에 Quest4에서 저장했던 .csv 파일들을 모두 복사합니다.
이때 환경은 Keras 2.4.3, Python 3.7.13 입니다.
(* 중간에 X-CUBE-AI를 버전 5.0으로 변경하기 때문에 Keras 버전을 2.2.4)로 낮추어야 합니다.)
Pycharm IDE 창 아래 부분에 Terminal 창을 선택하고, HAR 폴더로 이동합니다.
> cd HAR
> python RunMe.py --dataDir=Log_data
그리고 RunMe.py를 수행하고 Log_data 폴더에 저장되도록 실행합니다.
이 과정이 끝나면, 그래프가 보여지며, Log_data 폴더 아래에 현재 시간으로 폴더가 생성되어 있습니다.

이제 여기서 생성된 har_ign.h5 Keras 모델을 CubeMX에서 이용해서 코드 생성을 해야 합니다.
2. quest5 프로젝트 생성하기 :
STM32CubeIDE 를 실행하고 Quest5용 프로젝트를 생성합니다. (Quest2에서 진행했을 듯 합니다.)
이때, 우리가 사용중인 B-L475E-IOT01A 응용 프로젝트 SENSING1이 X-CUBE-AI 5.0을 기준으로 작업이 되어 있다.
(현재 버전 7.0과 구조가 다르기 때문에 X-CUBE-AI 5.0을 추가로 설치하고, 프로젝트에서 사용해야 한다.)


그리고 CubeMX에서 X-CUBE-AI 5.0을 추가하고, 새로운 Network 모델을 생성

그리고 위에서 생성했던 Keras 모델을 추가합니다.

그리고 정상적으로 연결이 되는지 Analyze를 수행합니다.
저는 위에서 언급했듯이 Keras 2.4를 선택한 상태에서 Keras 모델을 생성하였는데,

그래서 저는 어쩔 수 없이, 위의 1의 과정으로 돌아가서 Anaconda 환경 설정에서 Keras 버전을 변경하였습니다.
위의 에러 메시지에 보면 2.3.1을 지원한다고 되어 있지만, 마찬가지로 에러가 발생합니다.
그냥, 2.2.4버전으로 변경하세요.
환경 설정에서 Keras를 검색하고, Keras 앞에 체크 박스 부분에서 마우스 오른쪽 버튼을 누르면 버전 정보가 표시 됩니다.

2.2.4 버전을 선택하고, "Apply" 버튼을 클릭해서 적용해 줍니다.
다시 생성된 Keras 모델을 선택하고, Analyze를 수행합니다.


이제 CubeMX에서 코드 생성을 수행합니다.

위와 같이 App 아래에 har_ign.c/h, har_ign_data.c/h 파일이 생성된 것을 확인할 수 있습니다.

이제 보드에 다운로드하기 위해서 SENSING1 프로젝트 폴더 아래에 Src/Inc 폴더에 각각 c파일과 h파일을 복사합니다.
그리고 SENSING1 프로젝트 빌드를 수행합니다.

정상적으로 build 된 것을 확인하고,
이전에(Quest3) 방법처럼 B-L475E-IOT0aA1 보드를 PC와 연결하고, CleanSENSING1.bat 를 실행하면 자동으로 펌웨어 다운로드가 진행된다.
동영상은 현재 촬영이 불가하여, 곧 업로드 하겠습니다.
Quest 6: TensorFlow Lite 이용한 HAR 구현
2022.10.08
안녕하십니까?
이번 퀘스트를 통해서 좀더 AI에 대해서 이해가 되었던거 같은데, 아직도 뭔가 많이 부족하네요.
특히 Model 생성 작업, 학습 작업 등...
Quest6을 시작하면서 막막하였습니다.
몇가지 해 보고 싶은게 있는데, Model 샘플을 찾지 못해서, 어떻게 진행해야 할지?
그래서 어쩔 수 없이, ST WiKi에서 제공하는 HAR 작업 과정을 따라하는 수준으로 우선 진행하였습니다.
(Quest5까지 하면서, 휴대폰에 App과 연동하면서 조금 의아해 했던 부분이 HAR의 판별을 휴대폰 App에서 하는 것으로 오해 했습니다.
모든 학습 및 Model을 ST 보드에 반영했는데, 왜? ... 최종 판단도 ST 보드에서 휴대폰으로 전달하는 것으로 이해 됨)
제가 해보고 싶은 것은 ToF 센서를 이용해서 좌/우 움직임 판별입니다.
이를 이용해서 도로에 차량이 역주행하는 것을 판별하는 센서 모듈 제작입니다.
(시간이 되는대로 이에 대한 진행을 해 보고 싶네요.)
아무쪼록 긴 시간동안 많은 배움이 되었습니다.
다른 분들도 모두 수고 많으셨습니다.
프로젝트 갤러리
프로젝트 제작 과정과 최종 결과물을 담은 이미지 갤러리입니다.





.png)















프로젝트 자료실
프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.
등록된 자료가 없습니다.
프로젝트 소개
아직 등록된 프로젝트 소개가 없습니다.
코드 & 회로도
등록된 코드/회로 자료가 없습니다.
댓글 2개
Telcard님 경험기 공유 감사합니다. 공유해주신 글을 읽으면서 집단지성의 중요함을 다시 체험중입니다. Quest6 미션이 따라해보기를 넘어, 각 영역별 지식의 본질적 이해를 필요로 하는 것이라, 상당이 높은 수준의 미션인거 같아요. 아참, 감사글이 늦었지만, 일전의 따뜻한 도움 댓글 진심 감사드려요.

.jpg)
이야.. 지금에서야 이 글을 읽다니.. 한참 버둥거렸는데.. 깔끔한 정리가 이해에 도움이 되네요.