학생 연구원에서 연구과제로 Muse 2를 받게 되었다.
그런데 기존에 다른 분이 조사하신건 Python으로 Muse LSL를 설치해서 하는 방법인데, 이 방법은 Python으로만 할 수 있는걸로 알고 있는데 프로젝트가 C++로 해야하는데 이 언어도 지원 안하고 심지어 추가적인 BlueMuse인가 하는 것도 설치해야한다.
그렇기 때문에 나는 BrainFlow를 알게되서 이 방법을 사용하기로 했는데 굉장히 어려웠다.. 4시간을 이러고 있었으니.. 내일 수업인데도 새벽 3시까지..
(혹시나 몰라서 말하는거지만 아래 글에 있는 경로 그대로 붙여넣으면 안된다. pkdpm은 그냥 내 컴퓨터 이름이기 때문에 자신의 컴퓨터 이름으로 바꿔야한다.)
Muse 2, Muse S 블루투스에 대해서
일단 Muse의 경우 블루투스로 연결하게 된다. 여기에서 문제는 아마 이게 BLE 같은데.. 저전력 블루투스.. 그렇다 보니 연결도 BlueMuse 같은 방법으로 연결하는 듯 하다..
그런데 다행이도 BrainFlow에선 무언가 설치 안하고 바로 동작할 수 있게 되어있는데 기존에는 BLED112라는 제품을 사용해야했다. https://brainflow.org/2021-06-22-muse-bled/ 이게 처음 Muse 지원했을 때 글 같은데 BLED112라는게 필수적으로 필요했다.
그런데 https://brainflow.org/2021-11-01-new-release/ 지원 4개월 후 쯤에 BLED112를 사용하지 않고도 가능하게 바뀌었다라는 소식이 있었다.
이거를 할려면 글에 나온 것 처럼 빌드 할 때 --ble를 추가하던지, CMake에서 DBUILD_BLE를 ON으로 해야하는 것 같다.
(참고로 일반적으로 블루투스 연결할려고 하면 전혀 목록에 뜨지 않는게 정상이다. 모바일은 뜨긴 하지만..)
아무튼 일단 Python으로 설치해보기! - (전 안되네요..)
일단 공식적으로 파이썬으로 빠르게 설치하는 방법이 있는데.. 이상하게도 기본 방법은 설치가 되는데 --ble 라는 파라미터를 추가하면 빌드가 이상하게 오류가 뜬다.. 왜인지는 잘 모르겠지만..
일단 관련 글은 여기에 있다.
git clone https://github.com/brainflow-dev/brainflow.git
python -m pip install cmake
cd brainflow/tools
python build.py --help
일단 위에 명령어 처럼 친다. 명령어는 원하는 폴더에서 치면 되는데 나는 그냥 Downloads 폴더에서 했다.
이렇게 하면 brainflow 깃허브 파일이 모두 다운로드 되고 cmake 라이브러리를 설치하고 brainflow의 tools 폴더로 이동해서 build.py의 도움 내용을 출력하는 것이다.
usage: build.py [-h] [--oymotion] [--no-oymotion] [--msvc-runtime {static,dynamic}] [--generator GENERATOR]
[--arch {x64,Win32,ARM,ARM64}] [--cmake-system-version CMAKE_SYSTEM_VERSION] [--build-dir BUILD_DIR]
[--brainflow-version BRAINFLOW_VERSION] [--cmake-install-prefix CMAKE_INSTALL_PREFIX] [--use-openmp]
[--onnx] [--warnings-as-errors] [--debug] [--clear-build-dir] [--num-jobs NUM_JOBS] [--bluetooth]
[--no-bluetooth] [--ble] [--no-ble] [--tests] [--no-tests]
options:
-h, --help show this help message and exit
--oymotion
--no-oymotion
--msvc-runtime {static,dynamic}
how to link MSVC runtime
--generator GENERATOR
generator for CMake
--arch {x64,Win32,ARM,ARM64}
arch for CMake
--cmake-system-version CMAKE_SYSTEM_VERSION
system version for win
--build-dir BUILD_DIR
build folder
--brainflow-version BRAINFLOW_VERSION
BrainFlow Version
--cmake-install-prefix CMAKE_INSTALL_PREFIX
installation folder, full path
--use-openmp
--onnx
--warnings-as-errors
--debug
--clear-build-dir
--num-jobs NUM_JOBS num jobs to run in parallel
--bluetooth
--no-bluetooth
--ble
--no-ble
--tests
--no-tests
일단 이게 내용인데 일단 내가 아는 것 중에 먼저 말하자면 나중에 C++에서 사용할 때 Release로 빌드 해야하는 것 같다.. 만약에 Debug로 빌드를 하고 싶으면 --debug를 추가해야하는 것 같다. 근데 또 저거 추가하면 Release가 안먹힌다...
그리고 기본적으로 --bluetooth는 켜져있다. (bluetooth는 일반 블루투스 장치를 지원하는 것 ble와는 다른 것)
그리고 --ble가 필요한건데 저전력 블루투스를 지원하게 하는 것이다. 그렇기 때문에 명령어는 아래 처럼 치면 된다.
python build.py --ble
그런데 위에 소제목에서 말한 것 처럼 나는 이게 이상하게도 안된다.. (더 신기한건 --ble를 제거하면 되긴 한다)
실행하면 아래처럼 오류가 뜬다. (글 쓰면서 실행하는데.. 역시 C++ 빌드는 너무 오래걸리는..)
Brainflow.vcxproj -> C:\Users\pkdpm\Downloads\brainflow\build\Release\Brainflow.lib
Traceback (most recent call last):
File "C:\Users\pkdpm\Downloads\brainflow\tools\build.py", line 306, in <module>
main()
File "C:\Users\pkdpm\Downloads\brainflow\tools\build.py", line 302, in main
build(args)
File "C:\Users\pkdpm\Downloads\brainflow\tools\build.py", line 287, in build
run_command(cmd_build, cwd=args.build_dir)
File "C:\Users\pkdpm\Downloads\brainflow\tools\build.py", line 22, in run_command
raise ValueError('Process finished with error code %d' % p.returncode)
ValueError: Process finished with error code 1
이런 오류가 뜨게 된다.. 아무리 해도 지우고 다시 해보고 다른 것도 켜보고 하는데도 안되었다.. (이것 때메 1시간을 날린..)
그래서 결국 안되서 그냥 수동으로 빌드하기로 했다..
2024-09-15 변경 - 해결 방법
지금 이건 9월 15일인 오늘 추가로 작성하는 것이다.
나는 이 문제가 다시 무엇인지 볼려고 확인을 해보니.. 문제를 알아냈다.
간단하게 말한다면 컴파일을 하는데 UTF-8로 컴파일이 되지 않고 다른 인코더로 컴파일이 되면서 오류가 발생한 것 같다.
이 문제를 해결하는 제일 간단한 방법은 윈도우 검색 창에 "국가 또는 지역"을 검색하고 창을 열어서 관리자 옵션에 들어가면
이런식으로 "시스템 로캘 변경"이라고 뜬다. 저걸 눌른 후
아래 보이는 "Beta: 세계 언어 지원을 위해 Unicode UTF-8 사용"를 활성화 한다.
이렇게 한 후에 다시시작하고 컴파일을 하면 정상적으로 된다.
아마도 한국어 윈도우나 일본어 윈도우 이런건 아마도 EUC-KR EUC-JP 같은 인코더로 되어있어서 컴파일할 때 저걸로 컴파일 해서 오류 나는 것 같은데 이건 윈도우에서 기본으로 쓰는 인코더를 UTF-8로 바꿔서 해결할 수 있는 것 같다.
일단 나는 이 문제를 발견해서 빌드할 때 처음부터 UTF-8로 빌드되도록 소스코드를 수정해서 풀 리퀘스트를 했다.
그래서 지금은 수정이 된 상태이다.
https://github.com/brainflow-dev/brainflow/pull/745
그래서 파일을 다운받고 그냥
python build.py --ble
이렇게 빌드해도 오류 없이 정상적으로 컴파일이 된다..!
그리고 컴파일 되면 "installed"라는 폴더가 생기는데 여기에 inc 폴더와 lib 폴더가 생긴다. 이거를 가져다가 이 글 아래에 설명되어있는 대로 하면 정상적으로 작동한다! (도데체 왜 저 문제를 이제야 찾은걸까..)
추가적으로 Muse에 대한 내용이 잘 못 기재되어있다.
구글에 검색해보면 Muse 기기의 EEG 이름이 TP9, AF7, AF8, TP10 로 되어있는데 여기에서는 TP9, Fp1, Fp2, TP10 이걸로 설정 되어있다. 그래서 결국에는 이 정보를 어디에서 가져오는지 찾아내고 정확한 정보를 기재해서 이것도 풀 리퀘스트를 했다. (심지어 Muse 관련 코드를 열어봐도 Fp1, Fp2는 없고 AF7, AF8만 있다.. 엄..) (처음으로 남의 프로젝트에 풀 리퀘스트를 해보았어서.. 심장이 엄청 뛰어댔었다.. 내가 수정해도 되는게 맞을까 하고..)
https://github.com/brainflow-dev/brainflow/pull/744
아무튼 오늘 날짜 기준으로 최신버전이 5.13.3인데
pip install brainflow
를 해도 최신버전으로 수정이 안되어있다.
이유는 간단하다. 그냥 새로운 버전을 개발자가 안올렸기 때문에..
뭐.. 5.13.4 쯤에는 올라와 있을테니 그 때 까지 기달려야 할 것 같다..
아무튼 이 아래 부터는 전에 쓴 내용이 어이진다.
CMake로 BrainFlow 수동 빌드하기
일단 아쉽게도 나는 CMake를 예전에 OpenCV 빌드하다가 빡쳐서 포기했던 녀석이라.. 왠만하면 쓰기 싫었다.. (지금은 VCPKG 쓰는..)
그렇지만 일단 이건 연구 과제이기 때문에 해야했다.
마찬가지로 아까 위에 올린 링크에 같이 설치 방법이 있다. (저거 링크 들어가보면 In VS installer make sure you selected “Visual C++ ATL support” 저거를 VS 인스톨러에서 설치하라는건데 2022 버전에선 사라진 것 같다. 없기도 하고 설치 안해도 문제가 없는 것 같다.)
만약에 전에 위 글 처럼 파이썬으로 빌드 해보셨다면 지울게 있습니다!
혹시라도 위에 글 처럼 빌드를 한번 해보았다면 지울게 있다.
compiled, build 폴더이다. 이건 brainflow 폴더에서 모두 지우고 실행해야한다. 아니면 그냥 brainflow 폴더를 지우고 다시 git clone 하는 것도 방법..
CMake 설치 & 설정!
https://cmake.org/download/ 여기에서 나는 Windows 이기 때문에 Windows x64 Installer 이걸로 선택해서 설치했다.
설치하는건 별로 어려운게 아니여서 패스..
이제 CMake로 구성 설정하고 프로젝트를 만들어야 한다.
CMake를 설치하면 실행이 가능한데 실행을 한다!
이렇게 뜨는데 여기에서 Where is the source code에는 Browse Source... 버튼을 눌러 brainflow 위치로 잡는다.
나 같은 경우는 다운로드 폴더에 brainflow를 넣었기 때문에 이걸로 지정했다.
C:\Users/pkdpm/Downloads/brainflow
그러면 그 후에는 Where to build the binaries 폴더를 선택하는건데 이건 빌드 폴더를 만드는거다.
Browse Build...을 눌러서 폴더를 지정한다. 하지만 이건 일단 위에 있는 경로로 설정을 하고 뒤에 build만 붙이면 된다.
이렇게
C:/Users/pkdpm/Downloads/brainflow/build
이렇게 하면 아래처럼 된다.
이제 여기에서 프로젝트를 만들어야 하는데
아래에 있는 Configure 버튼을 눌른다.
혹시 만약에 아래 사진 처럼 경고 같은거 뜨면 Yes 눌르면 된다. build 폴더 지정했으면서 build 폴더를 안만들었으니 만들어주겠다는 표시이다.
암튼 Configure 눌르게 되면 이렇게 뜨는데
여기에서 맨 위에 있는 Visual Studio 17 2022는 그냥 자신이 설치한 Visual Studio 버전이다. BrainFlow에선 2019를 권장하고 2017만 말하고 있는데 테스트 해보니 2022도 상관없는 것 같다. 그냥 바로 Finish 눌른다.
그런 후에는 아무것도 없던 곳에 이런 화면처럼 바뀐다.
이제 여기에서 어떤걸 빌드할지 선택할 수 있는데 여기에서 Muse 2나 Muse S가 지원될 수 있는 BUILD_BLE를 선택한다.
그리고 여기에서 좀 고생한건데.. 나중에 컴파일 하다 보면 이상하게 INSTALL 프로젝트를 빌드하면 setlocal 이러면서 오류가 뜬다.. 대충 나한테 권한 없는 곳에 폴더 두라 했다면서 화내는 오류인 것 같다.
그렇기 때문에 미리 방지하기 위해 CMAKE_INSTALL_PREFIX 부분을 수정한다. 저게 이제 INSTALL 프로젝트를 빌드하면 빌드된걸 모으는건데 어디로 모을껀지인거다.
폴더 위치는 아무데나 잡아도 되는데 관리자 권한 필요없는 폴더로 지정한다. 나는 그냥 brainflow 안에 install 폴더 안에 넣기로 했다.
내가 말한거 키면 이렇게 아래처럼 된다.
이제 아래쪽에 Generate 버튼 눌르면 바로 프로젝트가 만들어지게 된다.
다 만들어지고 나면 아래 사진처럼 원래는 Open Project 버튼이 비활성화였는데 활성화로 바뀌게 된다.
그러면 빌드 하기위해 바로 Open Project를 눌른다!
빌드하기
Open Project를 눌르면 바로 Visual Studio가 켜지는데 만약에 안켜지만 직접 build 폴더 가서 키는걸로..
암튼 킨 후에 위에 보면
이렇게 생긴게 있다. 어떤걸로 빌드할지인데 아까전에 CMake 설정할 때 Debug는 따로 설정안했기 때문에 Release로 바꾼다. 그냥 눌러서 Release로 바꾸면 된다.
이렇게
그 후에는 이제 빌드를 해야하는데 ALL_BUILD를 눌러서 전부 빌드하면 좋겠지만 이상하게도 아까 추가했던 BLE에 대한건 ALL_BUILD에 추가가 안되어있는 것 같다. (BLE 프로젝트 빌드 안하고 하면 뭐 없다면서 오류남)
그래서 먼저 BLE 프로젝트 부터 빌드 해야하는데 그냥 simpleble 프로젝트를 오른쪽 클릭해서 빌드 버튼 눌르면 된다.
조금 시간이 걸리긴 하는데.. 하다보면 뜰 수도 있고 안뜰 수도 있는데 나 처럼 오류가 생길 수 있다.
오류 C2220 다음 경고는 오류로 처리됩니다. simpleble chrono.h
사진 아래 경고는 딱히 상관없다. 그냥 인코더 오류인 것 같은데.. (아까는 안뜨던데..)
어쨋든 chrono.h가 뭔 문제인지 경고가 뜨는거다. simpleble 프로젝트를 보면 chrono.h가 fmt/chrono.h에 있다고 분명 정의가 되어있고 아무 문제가 없는 것 같은데도 저런 오류가 뜬다. 근데 저건 경고인데 오류로 처리한거라 그냥 무시하도록 바꾸면 된다.
simpleble 프로젝트를 오른쪽 클릭하고 속성에 들어간다.
그럼 대충 이런식으로 뜰텐데
여기에서 왼쪽 리스트에서 C/C++ 안에 일반에 보면 사진처럼 경고를 오류로 처리는 항목이 있다.
이거 떄문에 아까 오류가 뜬건데 그냥 아니요(/WX-)로 바꾸면 된다.
그 후에 확인을 눌러서 저장하고 다시 simpleble 프로젝트 오른쪽 클릭해서 빌드 눌러서 빌드한다.
그러면 정상적으로 빌드가 되게 된다.
이런식으로 아래에 출력창에 뜬다.
이제 필요한건 다 빌드 했으니 ALL_BUILD를 빌드하면 된다.
똑같이 그냥 ALL_BUILD 프로젝트를 오른쪽 클릭하고 빌드 버튼 눌러서 빌드 하면 된다.
이건 좀더 많이 오래걸린다.. 전부 빌드해야해서..
다 하면 이렇게 3분 동안 빌드한게 뜬다..
이제 마지막으로 이걸 한 폴더안에 전부 모을 수 있게 프로젝트를 빌드해야하는데 바로 INSTALL 프로젝트이다.
이것도 그냥 똑같이 INSTALL 프로젝트를 오른쪽 클릭해서 빌드 버튼 눌르고 빌드하면 된다.
(만약에 혹시 setlocal인가 하는 오류 뜨면 위에 못보고 지나친 글 보면 된다.)
이렇게 하면 위에서 말한 대로
C:/Users/pkdpm/Downloads/brainflow/install
사전에 CMake에서 설정한 곳에 빌드된게 생긴다. inc 와 lib 폴더이다. 어떤 역할인지는 대충 폴더 보면 알 수 있고.. 암튼 이거를 사용할 수 있게 어디 C 안에 두면 된다.
나 같은 경우는 전에 VCPKG 설치하면서 만들어 두었던 dev 폴더에 넣기로 했다.
C:/dev/brainflow
나는 이 폴더에 inc와 lib 폴더를 넣었다.
예제 프로젝트 만들어서 실행해보기
이제 잘 되는지 테스트 해보기 위해 프로젝트를 만들어서 실행해봐야 한다.
일단 Visual Studio를 실행한다.
새 프로젝트 만들기 해서 빈 프로젝트를 하나 만든다.
소스 파일 오른쪽 클릭해서 새 파일로 main.cpp 파일 만들고 그 안에 아래 링크에 있는걸 복사해서 붙인다.
그냥 어쩌다가 예제 찾다보니 찾은건데 저거 하면 CSV로 레코딩된거 10초간 기록되는 것 같다.
일단 코드에서 수정할 것이 있는데 만약에 자신꺼가 Muse S라면 상관없는데 Muse 2면
int board_id = (int)BoardIds::MUSE_S_BOARD;
23번째 줄에 있는 이 코드를 아래처럼 바꾼다
int board_id = (int)BoardIds::MUSE_2_BOARD;
그런 후에 실행하면 당연하게도 안된다.
일단 Debug 모드에서 실행한 것도 있고 아까 빌드한걸 연결 안했기 때문이다.
일단 이걸 Release로 우선 바꾸고
이제 빌드한걸 연결해야하는데
프로젝트를 오른쪽 클릭해서 속성에 들어간다.
아까 본 것 처럼 이런 화면 뜨는데
먼저 C/C++의 일반에 들어간다.
그러면
추가 포함 디렉토리가 뜨는데 여기에 아까전에 빌드한거 뒀던 곳의 inc 경로를 붙여넣으면 된다. 나 같은 경우엔 dev의 brainflow에 넣었기 때문에 여기 안에 있는 inc 폴더의 경로를 넣으면 된다.
이런식으로 그 후에는 lib 퐇더를 연결시켜야 하는데
링커의 일반에 추가 라이브러리 디렉터리 부분에 lib 폴더를 넣으면 된다.
이런식으로
이제 어떤 lib 파일을 쓰는건지 넣는 것 같은데 암튼 이것도 해야한다.
위 사진 처럼 링커의 입력에 추가 종속성 부분에 또 뭔가를 넣어야 한다.
이건 아래꺼를 그냥 넣으면 된다. 복사해서 넣어도 되고 파일 이름 찾아서 넣어도 되고
Brainflow.lib
BoardController.lib
DataHandler.lib
MLModule.lib
넣을 때는 저거 오른쪽에 화살표 같은거 눌러서 편집 버튼 눌러서 맨 위에 빈칸에 넣으면 된다.
그 후에 아래에 확인 버튼을 눌르면 설정이 완료된다.
이제 모두 파일을 연결했다!
오류 LNK2038 'RuntimeLibrary'에 대해 불일치가 검색되었습니다. 'MT_StaticRelease' 값이 'MD_DynamicRelease'(main.obj에 위치) 값과 일치하지 않습니다.
그런데 또 실행해보면 이런 문제가 발생한다.
대충 그냥 런타임 라이브러리가 이상하게 설정되어있다는 건데 뭐.. 설정하면 된다..
다시 프로젝트 속성에 가서
C/C++의 코드 생성에서 런타임 라이브러리를 수정하면 된다. 보통은 다중 스레드 DLL(/MD)로 되어있을 텐데 이걸 다중 스레드(/MT)로 바꿔주면 된다. 아래처럼
(뭐.. Debug 모드에선 MTd로 설정해야 하긴 하는데 어차피 Debug 껀 빌드 안했으니 뭐..)
(참고로 이후에 프로젝트 진행하면서 MD로 빌드 해야해서 해보니 CMake로 Open Project 했을 때 열리는 것에서 오른쪽 ALL_BUILD 등등의 프로젝트 속성에서 C/C++의 코드 생성에서 런타임 라이브러리를 모두 MD로 바꿔주고 빌드하면 MD로 빌드된다.)
그 후에 확인 버튼을 눌르고 다시 실행한다! 실행하는건 Ctrl + F5로
그러면 드디어 빌드가 되고 실행이 된다!
근데 이런식으로 오류가 뜨게 된다.
컴파일 한걸 실행할려는데 DLL 파일이 없어서 안되는거다. 그냥 옮기면 된다.
아까전에 빌드 했던거 옮겨놓은 폴더에 가서 lib 폴더로 들어간다.
그러면 .dll로 되어있는 파일들이 여러개 보이는데 뭐인지 확인하는건 귀찮으니깐 .dll로 되어있는 파일은 모두 복사한다.
(Ctrl 키 눌르고 여러개 선택해서 복사하면 된다.)
붙여 넣는 곳은 프로젝트를 오른쪽 클릭해서 파일 탐색기에서 폴더 열기(X) 버튼을 눌른 후 뜨는 폴더에 다 붙여넣으면 된다.
그렇게 되면 이렇게 붙여넣어졌을 것이다.
이러면 끝이다!
이제 Muse 제품의 전원을 키고 실행해보면? 정상적으로 연결이 된다!
실행하면 아래처럼 뜨는데
Found Muse device, Connected to Muse Device 이거 뜨면 정상적으로 연결된거다!
이렇게 된 후에는 자동으로 10초간 정보가 기록되고
이렇게 csv 파일로 기록이 된다!
만약에 연결이 안되거나 하면 전원을 켜보거나 자신의 PC에 블루투스 동글이나 블루트스 연결할 수 있는 장치가 있는지 확인해보는걸 추천한다..
마무리
그리고 csv에 저장된건 사실 봐도 지금은 뭔지는 모르겠다.. 일단 연구 과제가 이걸로 뭐 UI 만들어서 기록하도록 만드는건데 암튼 이걸 할려고 좀 이상한 짓을 한 것 같다.. 그냥 파이썬을 커맨드 라인으로 실행해서 하는 것도 빨랐을지도.. (뭐 시간이 중요해서 이렇게 하는거지만..)
아무튼 어쩌다 보니 10분안에 쓸려고 했었는데 1시간 30분 동안 쓰고 있다..
이 외의 오류는 저도 해결은 잘 못하겠지만.. 암튼 잘해보시길요..
오늘 수업 있는데.. 왜 시계에 오전 4:38 이라고 떠있는거지..
그리고 위에 말한 것 처럼 이 이외에 오류나는건 나도 모른다.
'설치 > C++' 카테고리의 다른 글
Visual Studio 자동 완성 규칙 변경 (0) | 2024.01.25 |
---|---|
VCPKG 버전 업데이트 (0) | 2024.01.08 |
DLIB & OPENCV 진짜 쉽게 깔아보기 C++ (0) | 2022.11.06 |
윈도우에서 VCPKG 설치하기 (0) | 2022.11.06 |