AIY Voice Kit V2로 구글 스피커 만들기

(이 포스트는 macOS 기준으로 설명하는 포스트입니다.)

구글에서 AIY Voice Kit이라는 자기 스스로 스마트 스피터를 만드는 키트가 있다. 가장 처음 나온건 v1이고 새롭게 나온게 v2다.

프로젝트 공식 홈페이지는 이곳 (영문)

v1과 v2의 가장 큰 차이점은 바로 raspberrypi의 버전. v1은 raspberrypi 3 기판을 사용하고 v2는 raspberrypi zero WH 기판을 사용한다는 점이다.

이 차이점이 중요한 이유는 Google Assistant SDK의 Voice Activation, 그러니까 "오케이 구글" 이라고 음성으로 명령을 해서 스피커를 구동시키는 소스 코드가 raspberrypi 2와 3의 cpu에만 대응하고, zero의 cpu에는 대응하지 않기 때문이다.

이러한 이유로 나처럼 AIY Voice Kit v2를 산 사람은 기본적으로 들어있는 데모코드를 사용했을 때, "오케이 구글"로 스피커를 구동시키고 명령을 할 수가 없다. 버튼을 눌러서 명령하는 방법만 실행된다. 처음에 이걸 몰라서 혼자서 몇번이고 "오케이 구글"을 외쳤지만 스피커는 반응을 해주지 않았고, 그 이유를 알아내는데 꼬박 이틀이 걸렸다.

이렇게 중요한 차이점을 공식 홈페이지에 적어 놓지 않았다는 것이 매우 화가 난다.

Google Assistant SDK로는 안되지만 Snowboy라는 Api서비스를 이용하면 Voice Activation이 가능해진다. 이에 대해서는 다음 포스트에서 설명하도록 한다.


기본적인 준비

최신 OS 이미지 파일은 프로젝트 github 페이지에서 다운 받을 수 있다. 이 포스트는 2018/11/16일 릴리스 버전을 기준으로 작성되었다.

이미지 파일을 microSD카드에 Flashing하는 건 Etcher를 사용하여 간단하게 할 수 있다. 프로그램을 다운 받은 후, 컴퓨터에 microSD카드를 연결한 다음, etcher를 실행시키고 이미지 파일을 마운트하고 sd카드 선택해주고 flash를 시작하면 5분정도 걸려서 자동으로 완성된다.

이미지 Flash가 끝났으면 한번 microSD를 빼주고 다시 컴퓨터에 연결해준다.

Finder를 이용해 SD카드 안에 있는 파일들을 본다. 이 안에 있는 cmdline.txt를 텍스트 에디터등으로 오픈하여 다음 라인을 rootwait 뒤에 추가해준다.

modules-load=dwc2,g_ether

위 이미지에서도 볼 수 있듯, rootwait 뒤에 스페이스 한칸, quiet전에 스페이스 한칸이다. 추가했으면 저장하고 파일을 닫아준다.

이걸 추가해주는 이유는, 나중에 usb로 Voice Kit을 컴퓨터에 연결했을 때, usb를 통해 Voice Kit가 인터넷에 연결되게 해주기 위함이다.

그 다음 터미널을 실행시킨 뒤, 다음 커맨드를 넣어 엔터를 눌러준다.

touch /Volumes/boot/ssh

이건 뭘 하는거냐면 sd카드에 ssh라는 파일을 만들어주는 것이다. raspberrypi의 기본값으로는 ssh로 접속하는 것이 막혀있기 때문에, 이렇게 함으로서 ssh로 연결하는 걸 허용하는 설정으로 바뀐다.

이것으로 기본 설정은 끝. sd카드를 빼서 Voice Kit에 넣은 다음 usb로 Voice Kit을 컴퓨터로 연결한다. 이 때 Voice Kit의 Power가 아니고 Data에 연결해야한다.


인터넷 공유 설정

Raspberrypi가 usb로 맥의 인터넷 연결을 통해 인터넷으로 연결되려면 인터넷 공유 옵션을 설정해줘야한다. 우선 Raspberrypi를 맥에 연결한 다음, 맥의 "설정 -> 공유" 페이지에 가서 다음과 같이 설정해준다.

위에 사진처럼 체크를 해주면 인터넷 공유 설정이 완료된 것.


Raspberrypi에 ssh로 연결

Voice Kit을 연결해주고 2~3분 기다린 다음, 터미널에서 아래 커맨드를 실행해준다.

ssh pi@raspberrypi.local

그러면 ECDA어쩌고 하면서 뭐가 나오는데 yes라고 타이핑 해주고 엔터를 눌러주면 된다. 참고로 ECDA어쩌고 하며 나오는 메세지는 "연결된 라즈베리파이의 신빙성을 증명할 수 없지만 그래도 ssh로 연결할래?" 뭐 이런 뜻이다.

그러면 패스워드를 치라고 나오는데 초기 패스워드는 "raspberry"다. 터미널에서 패스워드를 칠 때는 화면에 아무런 반응이 없어서 타자가 인식이 안된 것 처럼 오해할 수 있는데, 인식 다 되고 있으니 딱 한번만 raspberry라고 친 다음 엔터를 눌러주자.

위 그림처럼 나오면 ssh 성공한 것.

그럼 이제 인터넷이 연결되었는지 확인하기 위해 다음 커맨드를 실행해본다.

ping google.com

이런 식으로 나오면 연결이 Raspberrypi가 인터넷에 연결이 된 것이다. 확인이 되었으면 control + z를 눌러서 종료해주면 된다.


tightvncserver 설치

raspberrypi의 설정은 sudo raspi-config 커맨드를 사용하면 대부분의 설정을 다 할 수 있다.

하지만 커맨드 라인만으로 이것저것 하기가 불편한 사람, raspberrypi를 hdmi로 따로 모니터에 연결하는건 더욱 더 귀찮다. 따로 연결할 수 있는 모니터가 없는 사람도 많을 것.

그런 사람들은 맥의 Finder를 이용하여 vnc로 raspberrypi에 연결하면 가상 화면으로 raspberrypi의 GUI를 조작하여 리눅스OS를 사용할 수 있다!

raspberrypi에는 기본적으로 realvnc라는게 깔려있는데, 이건 realvnc 클라이언트를 따로 컴퓨터에 설치해줘야 vnc로 연결할 수 있다. 난 이것저것 컴퓨터에 설치하는게 싫기 때문에, 맥에 기본적으로 깔려있는 Finder로 연결하는 방법을 선택했다.

그러기 위해선 raspberrypi에 tightvncserver가 설치되어있어야 한다. 설치하기에 앞서, 다음 커맨드를 실행하여 패키지 리스트를 먼저 업데이트 해준다.

sudo apt-get update

패키지 리스트가 업데이트 되면 tightvncserver 설치 커맨드를 실행해준다.

sudo apt-get install tightvncserver

이 커맨드를 치면 여러 메세지가 나오다가 마지막에 "Y/n" 선택하라고 나온다. Y를 치고 엔터를 눌러줘야 설치가 진행된다.

설치가 끝났으면 tightvncserver를 구동해준다.

tightvncserver

그러면 패스워드를 설정하라고 나온다. 첫번째가 패스워드 설정이고, 두번째가 패스워드 확인이다. 그러면 view-only 패스워드를 설정할건지 물어보는데, 화면 조작은 못하고 보기만 되는건 필요없기 때문에 n을 치고 엔터를 눌러준다.

이걸로 raspberry쪽의 설정은 끝! 이제 맥의 Finder를 실행하고 cmd + k를 눌러준다. 그럼 서버에 연결하는 화면이 나오는데 vnc://raspberrypi.local:5901 이라고 치고 연결을 눌러준다.

그러면 패스워드를 입력하라고 나오는데, 방금 설정해준 패스워드를 치면 된다.

이런 화면이 뜨면서 raspberrypi의 화면이 나오는 걸 볼 수 있다. 여기서 와이파이라던지 지역 설정 같은 걸 마우스 클릭으로 해주면 된다.


이번 포스트에서는 기본적인 셋업에 대해 알아보았다. 다음 포스트에선 구글 어시스턴트 API에 연결하는 방법에 대해서 알아보도록 한다.