이번 글에서는 라즈베리파이와 Bluemix의 IBM Watson API를 이용한 TJBot을 만들어 보려고 합니다.

TJBot은 Watson 서비스를 보다 재밌게 접근하고 사용해 볼 수 있도록 제공되는 오픈 소스 프로젝트인 IBM Maker Kits의 첫 번째 DIY 킷 입니다. 3D 프린터와 레이저 컷으로 프레임을 만들 수 있도록 도면을 제공하고, 내부에는 라즈베리 파이와 주변 기기를 이용하여 내 말을 알아듣고 또 스피커로 문자를 읽어 주기도 합니다. 물론 관련 코드는 open source로 제공하고 있습니다.

자 그럼 TJBot을 만나 볼까요?

tjbot

TJBot을 만들기 위해 준비할 내용은 다음과 같습니다.

TJBot 재료

  • 라즈베리 파이 3
    라즈베리 파이 구동을 위한 전원 아답터 및 Raspbian Jessie Lite이 설치된 MicroSD가 있어야 합니다.
  • USB 마이크 및 스피커
    라즈베리 파이에는 내장 마이크가 없으므로 음성 인식을 위한 마이크가 필요합니다. 그리고 3.5 AUX 출력이 가능한 스피커가 필요합니다. 마이크와 스피커의 경우는 되도록 소형으로 TJBot에 마련된 50mm x 50mm x 50mm 공간에 들어갈 정도 크기면 더 깔끔하게 보일 수 있습니다. 참고로 저는 마이크와 스피커가 통합된 USB 방식의 컨퍼런스 장비를 이용하였습니다. 혹시나 Bluetooth 핸즈 프리장비가 가진 마이크를 활용 할 수 있지 않을까 해서 시도를 해 보았으나 결국 음성 Source 장비로 인식되지 않아서 사용 할 수 없었습니다.
  • 3색 RGB LED – 1EA
    하나의 LED 소자에서 3가지 색을 출력할 수 있는 LED입니다. 네오픽셀(NeoPixel)이라는 제품으로 보통은 여러개를 묶어서 모듈로 된 제품을 판매합니다. TJBot이 사용하는 LED는 WS2812으로 하나의 입력 데이터 핀에 High/Low 유지 시간을 조절하여 색 변경이 가능하도록 제어 모듈이 내장된 LED입니다.
  • 소형 서보 모터
    미니 서보 모터로 SG90 모델을 사용합니다. TJBot 케이스가 SG90의 크기에 맞춰 만들어져 있으므로 해당 제품과 동일한 규격으로 제공되는 서보 모터가 필요합니다.
  • Female-Female 점프 케이블 – 3EA
    라즈베리 파이의 I/O 커넥터와 LED를 연결할 점프 케이블이 필요합니다. 양쪽 끝이 Female 타입 세 줄이 필요합니다. 와이어에 양끝에 핀소켓 연결된 형태입니다.
  • Male-Female 점프 케이블 – 3EA
    라즈베리 파이의 I/O 커넥터와 서보 모터를 연결할 점프 케이블이 필요합니다. 한쪽은 Female 타입 반대쪽은 Male 타입으로 이것 역시 세 줄이 필요합니다.
  • IBM TJBot Case
    3D 프린트나 카드 보드 레이져 컷로 만든 TJBot 케이스입니다. 이곳에서 도면을 받아서 작업 할 수 있습니다.
    판교 스타트업 캠퍼스에 위치한 K-ICT Device Lab을 이용하면 무료로 레이져 컷팅 장비를 이용하여 가공 할 수 있습니다.
    디바이스랩이 보유한 장비에서 사용 가능한 TJBot 도면은 TJBot 카드 조립에 대한 글에서 공개 하도록 하겠습니다.

라즈베리파이 설정하기

라즈베리파이는 OS인 Raspbian의 경우도 Debian Linux 계열에서 파생된 Embedded Linux가 실행되는 일종의 Embedded PC로 볼 수 있습니다. 그런 이유로 기본적으로 모니터 및 키보드가 연결되어야 라즈베리가 정상적으로 동작하는지 확인하고 terminal에 접속해 TJBot을 위한 환경 설정을 진행 할 수 있습니다.

환경 설정을 위한 준비물은 다음과 같습니다.
  • HDMI 모니터 & 케이블
    라즈베리파이는 HDMI 출력단자가 있고 이를 기본으로 사용하고 있습니다. 일반 PC모니터가 아닌 HDMI 입력을 지원하는 TV에도 연결 가능합니다.
  • USB 키보드
  • 인터넷 네트워크 환경
    유선 케이블이 있는 경우 라즈베리파이의 이더넷 포트를 이용할 수 있습니다. 라즈베리파이3인 경우 무선 모듈이 내장되어 있으므로 무선 환경이 가능한 경우 이를 이용해도 됩니다.
모니터, 키보드를 연결하고 라즈베리파이의 전원을 넣으며 리눅스가 설치된 PC와 같이 부팅이 됩니다. 부팅이 완료되고 나면 ID, Password를 입력을 기다리는 화면이 나타납니다.

화면에 ID는 pi 비밀번호는 raspberry로 입력하여 로그인 합니다.

라즈베리 파이는 영국에서 시작된 프로젝트라 USB 키보드를 연결했을 때 영국식 키배열이 기본으로 설정됩니다. 이 배열을 우리에게 익숙한 미국식 자판으로 변경을 위해 다음과 같은 명령을 실행합니다.
sudo raspi-config
방향키를 이용하여 선택 가능한 메뉴가 나타나는 것을 볼 수 있으며 키보드 레이아웃을 변경 하려면 다음 순서대로 선택합니다.
`4 Internationalization Options` -> `I3 Change Keyboard Layout` - `Generic 103-key (Intl) PC`
기본으로 English (UK)가 선택되어 있다면 Other를 선택하여 다음 순서대로 변경합니다.
`English (US)` -> `Other` -> `English (US)` -> `The default for the keyboard layout` -> `No compose key`
만약 무선 네트워크(와이파이)를 사용하는 경우 다음 명령을 이용하여 /etc/wpa_supplicant/wpa_supplicant.conf 파일을 수정해야 합니다.
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
무선 네트워크에 대한 설정 정보는 무선 공유기 (AP)의 설정에 따라 다릅니다.
아래는 공유기 SSID가 “iptime”이며 보안 방식은 “WPA 개인” 그리고 비밀번호는 “passw0rd”에 대한 예제입니다.
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="iptime"
  psk="password"
  proto=RSN
  key_mgmt=WPA-PSK
  pairwise=CCMP
  group=CCMP
  auth_alg=OPEN
  id_str="work"
}
이제 다음 명령으로 TJ가 사용할 패키지를 업데이트 할 준비를 합니다.
sudo apt-get update
sudo apt-get dist-upgrade
실행 Runtime인 Node.js 6.x를 이용하는데 다음 명령을 이용하여 node.js를 설치합니다.
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
혹시 네트워크가 너무 느리거나 하는 이유로 node.js 설치가 너무 느린경우 다음과 같이 package를 다운로드 받아서 설치할 수도 있습니다. wget을 이용하는 경우 네트워크가 느려 timeout이 발생하는 경우라도 다시 재접속하여 일정 시간이 지나면 다운로드가 완료되는 장점이 있습니다.
wget http://deb.nodesource.com/node_6.x/pool/main/n/nodejs/nodejs_6.9.2-1nodesource1~jessie1_armhf.deb
sudo dpkg -i nodejs_6.9.2-1nodesource1~jessie1_armhf.deb
다음 명령으로 오디오 CODEC인 ALSA(Advanced Linux Sound Architecture)에 관련된 모듈을 설치합니다.
sudo apt-get install alsa-base alsa-utils libasound2-dev

TJBot 소스코드 다운로드

소스코드는 https://github.com/ibmtjbot/tjbot에서 받을 수 있습니다.
git clone https://github.com/ibmtjbot/tjbot.git
git에서 소스코드를 다운로드 한 경우 speech_to_text 디렉토리로 이동하여 node module 설치합니다.
cd ~/tjbot/recipes/speech_to_text
npm install

Bluemix Watson Speech to Text API 설정

Speech to Text 서비스는 음성 정보를 인식하여 Text로 변환해 주는 서비스입니다.

Bluemix Catalog의 Watson 서비스에서 Speech to Text를 선택후 기본 플랜으로 서비스를 생성합니다.
watson_catalog

stt_catalog
서비스를 생성하면 Speech to Text에 대한 대시보드를 볼 수 있습니다.

stt_dashboard
대시 보드 중 서비스 신임 정보 탭에서 서비스 사용을 위한 ID/Password 정보가 JSON 형식으로 저장되어 있는 것을 확인 할 수 있습니다. 이 정보를 라즈베리파이에 복사해야 하므로 잘 기억해 둡니다.

stt_credential
이제 라즈베리파이로 되돌아 가서 다음과 같이 recipe/speech_to_text/config.js 파일의 내용을 앞서 Watson API의 credential 정보로 업데이트 합니다.
cd ~/tjbot/recipes/speech_to_text
nano config.js

라즈베리 파이 동작 테스트

이제 다운로드 받은 소스가 정상 동작 하는지 확인 해 볼 차례입니다.

tjbot/recipes/speech_to_text 폴더에서 다음 명령을 이용하여 음성 인식이 잘 동작하는 지 확인 해 볼 수 있습니다.
sudo node stt.js
정상 동작하는 경우 인식된 메시지가 Text로 메시지가 출력되는 것을 확인 할 수 있습니다. tjbot_stt_console
단, 현재는 영어로 인식되며, 한국어는 Watson이 한국어 배우기를 마치는 내년 초에 가능해 질 예정이라고 합니다. 그 때는 TJBot도 한국어를 인식할 수 있겠죠?

TJBot 케이스 조립

TJBot 케이스는 카드보드 TJBot 조립하기TJBot Out of Cardboard 링크를 통해 확인 해 볼 수 있습니다.

다음 포스팅에서는 구매해 두었던 TJ에 달아 놓은 Servo와 LED를 GPIO 모듈을 이용하여 움직여 보도록 하겠습니다.

참고자료