今日も微速転進

ここではないどこかへ

ラズパイ関連本の比較(2018/09)

Raspberry Pi(以下、ラズパイ)の関連書籍の紹介です。 数が多いので2017年以降のものを中心にレビューします。

おすすめは『みんなのRaspberry Pi入門 第4版』。電子工作をがっつりやりたいならブルーバックスの本。

前置き

ラズパイ関連書において重要なのは、Raspberry Pi固有のノウハウ、Linuxの基本操作、電子工作、プログラミング(ほぼPython)の3つのどれに重点をおくか、その配分。またはラズパイを何に使うか(用途)。

ページ数という制約があるのでどこかでトレードオフが発生します。そのため想定読者からマッチしているかが本を選ぶ上での最重要ポイント。

本を書いている人の経歴によって得意分野が違うので本によっては説明に問題があるケースがあります。

ハードよりの人はどうもLinuxのお作法*1やセオリーを知らずに書いているケースがあります。非常に残念です*2

ブルーバックス

内容はいいが新書サイズなので開いたまま固定しにくいのが難点。新書サイズでブックスタンドに固定しにくいのでKindle版か洗濯ばさみで固定するとか。

『カラー図解 最新 Raspberry Piで学ぶ電子工作 作って動かしてしくみがわかる 』

評判の良かったRaspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス)(モノクロ版)の改訂版+カラー化したもの。

面白いのはタミヤの工作キット+WebIOPiを使ったキャタピラ式のラジコン製作記事など。

回路図、配線図がしっかりしていて丁寧。

あえてモノクロの方を買う必要はまったくないです(内容が古いので)。

かなり丁寧で初心者向け。発売時期の関係で新しいモデルについて記載がありません。

『実例で学ぶRaspberry Pi電子工作 作りながら応用力を身につける』

上記の応用編的な位置づけ。他のシリーズ本と違ってカラーではない点に注意。

『カラー図解 Raspberry Piではじめる機械学習

Tensorflowについては記載されてない(Kerasは紹介している)。 前半はちょっと退屈かも。

『みんなのRaspberry Pi入門』

みんなのRaspberry Pi入門 第4版

みんなのRaspberry Pi入門 第4版

出版社サイト:リックテレコム、「みんなのRaspberry Pi入門 第4版」発刊——Python 3に対応 | fabcross

書店の店頭に古い版が置いてあることがあるので購入時は注意。

  • カラー
  • 紙質がいい感じ
  • Python 3
  • 日本語の入力はibus-mozc
  • RaspbianのインストールはNOOBS経由

Pythonの解説とRaspbianのセットアップに重点を置いている。 LED、モーター、カメラモジュール、センサなど基本は押さえている。

良書。一番バランスがいい本。

Raspberry Piで遊ぼう! 改訂第2版 』

Raspberry Piで遊ぼう! 改訂第2版

Raspberry Piで遊ぼう! 改訂第2版

2017年発行の版が最新です。改訂第4版というのが存在しますが、内容が古いです。購入時は発行年を確認して下さい。

どういう経緯なのかさっぱりですが、改定第2版をリニューアルして2017年に発行しており、こちらが最新です*3

他とはちょっとタイプが違う本。ラズパイをデスクトップPCのように使ったり小型サーバーとして使うノウハウなど何でもあり。

装丁が非常にいい。

  • 実用性はともかく、帯の折返しにgpioのピン配置図がある(表紙側と裏表紙側)。
  • 章ごとに見出しの色とサンプルコードの背景色が違うようになっている
  • Raspberry Pi 3 model B+についての補足のチラシがはさまっている
  • PythonだけでなくJavascriptを使用したサンプルあり(逆に言うとPythonの解説はほとんど無い)
  • WebIOPi *4
  • radikoや動画再生、Webカメラなど
  • ラジコン戦車

サポートページのURLが不明です。

『これ1冊でできる! ラズベリー・パイ 超入門 改訂第4版』

サポートページ:これ1冊でできる!ラズベリー・パイ 超入門 改訂第4版 サポートページ

総論賛成各論反対という感じ。ちょっとどうかと思う。正直微妙。

なぜかsloginコマンドを使用している。とっても不思議。sshなにか恨みでもあるのか?

素直にsshコマンドを使うべき。

  • raspbianのguiを解説
  • 小型pcとしてのラズパイ
  • Lチカ、センサなど
  • 日本語入力にibus-mozc、フォントはIPAフォントとtakaoフォント
  • pythonの解説は数ページ。

本文のコマンド紹介でkillコマンドをー9オプション付きで載せている。むやみに使うコマンドではないのですけど。

また巻末のコマンド解説は順序がちょっと変。いきなりリダイレクトの説明とか。

ちょっと偏った知識で書いているようにと思います。

同じ著者の他の本はともかくこの本はおすすめしない

『電子部品ごとの制御を学べる! Raspberry Pi 電子工作実践講座』

  • 部品の仕組みや構造の解説は有意義
  • Python3
  • 個別の部品をつかうサンプル付き
  • RaspbianのインストールはNOOBS
  • Raspbianの解説はイマイチ
  • Wringpi
  • 索引が貧弱
  • 巻末付録の部品リストはなかなか良い(特に通販の商品コード)

見開き2ページの右ページ右下にPythonのコードが掲載されている。しかし掲載エリアの比率としてはページの6分の1〜2分の1ぐらい。

Pythonのコードがいわゆるラムネ付きの食玩のラムネみたい。

センサやモーターの解説書と電子工作の本とラズパイについての解説を足して2.5ぐらいで割ったような本。

子供の好奇心を満たすという上ではいい本だけど、人によっては中途半端。コンセプトは悪くないが索引がしょぼくて本としてのつくりに疑問。

『ここまで作れる! Raspberry Pi 実践サンプル集』

ここまで作れる! Raspberry Pi 実践サンプル集

ここまで作れる! Raspberry Pi 実践サンプル集

確かにAmazonのレビューどおり、あまり読みやすい文章という感じではない。

なぜか日本語フォントとしてkochi-gothicパッケージをインストール……。他に利用できる日本語フォントがあるのに東風ゴシックは選ぶ必要性がわからない*5

2017年7月発行の本でIPAフォントのパッケージがあるのにわざわざ古いフォントをインストールする理由はない。ラズパイの日本語フォントが問題になることはまずない。その点では細かいことを気にする必要はどこにもない。書くならちゃんと調べてほしいという話。

また冒頭部で唐突にswapを無効化する手順を説明しているけどswapの仕組みの説明はなく、ちょっと不親切。

作例サンプル集としては有意義だと思う。ただし目次をよく見て自分がつくりたいものと類似しているサンプルがあるか要チェック。

なお、日本語フォントとしてはfonts-ipafont-gothicfonts-noto-cjkというパッケージがあり、コマンド一発でインストールできます。

まとめ

本を買わなくてもネット情報で十分なことも多いですが、電子工作にガッツリ取り組みたいならラズパイ関連の本を1冊、ラズパイ関連ではない電子工作系の本を1冊でやっぱり2冊は買う必要があると思います。

ラズパイの初期設定に関してはどの本もちょっと中途半端な印象です。ラズパイで何をするか、はっきり目的を決めないと、どの本も中途半端だと思います。

*1:常識といったほうがいいか

*2:出版社に紹介してもらってチェックしてもらえばいいのに

*3:混乱させてどうするのか

*4:新しいモデルでは動かないかも

*5:ライセンス問題の発覚前ならともかく、それほど品質がいいわけでもない。

Voice Kit とサーボモーター その1

最終的な目標は音声でVoice Kit につないだカメラの首振りなどの制御。

まずは下準備としてラズパイからサーボをコントロールする。

f:id:atuyosi:20180115222935j:plain:w480

やりたいこと

  • Voice HAT (Voice Kitの拡張ボード)のカメラマウント用のサーボモーターをつなぐ
  • Pythonからサーボモーターの制御

用意するもの

  • ラズパイ本体(Raspberry Pi model 3B)
  • microSD
  • Google AIY Voice Kit
  • サーボモーター制御のカメラマウント


※ マーケットプレイス注意

なお、Voice Kit付属のプラスチックスペーサーは取り外しが不便なので下記で代用しています。

ピンヘッダの取り付け

Voice HAT accessory board(Voice Kit付属のメイン拡張基盤)にはサーボモーターやDCモーター、ステレオスピーカー化するためのはんだ付け用のパターンが用意されています。逆いうと自分でピンヘッダなり必要な端子をはんだ付けする必要があるということ……。

今回はサーボモーターを2個つなげることができれば良いので、3ピンのピンヘッダを2つ取り付けることにします。

f:id:atuyosi:20180115222434p:plain:w320

電子部品ショップにレッツゴーするか秋葉原詣でに行くか、あるいは通販でピンヘッダを入手します。

寺町通のマルツに行って確保してきました*1。10個入りで21円(税抜き)。交通費に比較してなんと微妙な価格でしょう……。

f:id:atuyosi:20180115222536j:plain:w320

f:id:atuyosi:20180115222830j:plain:w320

配線

f:id:atuyosi:20180117020103j:plain:w320

f:id:atuyosi:20180115223517j:plain:w320

取り付けたピンヘッダにつなぐ。オレンジ色の線が制御信号で、Voice Hat の端側に来るように接続する。

内部でどのGPIOピンにつながっているかは付属の冊子の最後の方の配線図で判断できる。

動作テスト

Voice Kit付属の小冊子に記載されているコードをちょっとだけ改造。

from gpiozero import Servo
from time import sleep

servo_0 = Servo(26)
servo_1 = Servo(6)

#servo_1.mid()
servo_1.max()

while True:
    servo_0.min()
    servo_1.max()
    sleep(1)
    servo_0.mid()
    servo_1.mid()
    sleep(1)
    servo_0.max()
    servo_1.min()
    sleep(1)
    servo_0.mid()
    servo_1.mid()
    sleep(1)

Servo()関数に、サーボモーターの信号線のつながっているGPIO番号を指定する。 一番上側がGPIO 26、その下がGPIO 06。

停止させるときはCtrl-C。

動作の様子

gif にしたらファイルサイズがちょっと残念な感じだったので省略。ちゃんと動きました。

まとめ

次はカメラマウントにセットして、任意の角度で可動させたい。

流石にそろそろ出発準備しないとまずいのでどこまでいけるかちょっと微妙だけど。

*1:Pi Zero Wと一緒に……

Raspberry Pi Zero W のセットアップ

初詣のついでに買った*1ヤツをセットアップしたのでメモ。

概要

f:id:atuyosi:20180115010205j:plain:w480

公式:Raspberry Pi Zero W - Raspberry Pi

購入したのはマルツで販売されていたセット商品。

www.marutsu.co.jp

不満な点としてはmicroSDが8GBなのと、インストールされているのが2017年7月のイメージだったところ(NOOBS 2.4.2)。 

別に上書きしちゃえばいいんだけどさ。

はんだ付けしたのはいいけれど……

f:id:atuyosi:20180115005110j:plain:w480

純正ケースのフタは3種類ありますが、GPIO用の40ピンのピンヘッダを取り付けると干渉してしまうので1種に限定されます。皆さんご注意を。

f:id:atuyosi:20180115005723j:plain:w320

用途を検討の上ではんだ付けするのがいいと思います。というか、普通はそうしますよね……。

導通確認はしていませんが、どうにかこうにかはんだ付けできたっぽいです。

はんだ付けの手順については下記を参考にさせていただきました。

Raspberry Pi ZeroのGPIOピンをはんだ付けする(Rev.C) | 電子工作の環境向上

goot 高密度集積基板用はんだ SD-60

goot 高密度集積基板用はんだ SD-60

公式の動画チュートリアルもいいと思います。

Getting started with soldering - Video tutorial | Raspberry Pi Projects

なお、拡大鏡の類がないとつらいです。 私は手元にあった拡大鏡をどっちもクリップという製品で保持して作業してました。

長さ的に微妙だったのでロングタイプの方がいいかも。

YAZAWA(ヤザワ) どっちもクリップ ロングタイプ  CLW5

YAZAWA(ヤザワ) どっちもクリップ ロングタイプ CLW5

純正ケースの脱着

4カ所のピンと赤い出っ張り部分で固定しているので、長辺側をたわませるとスムーズにケースから本体を取り外すことができます。

f:id:atuyosi:20180115005333j:plain:w320

ちょっとコツがありますが、慣れればどうということはない、かな。

OSのインストール

セット商品なのでOSインストール済みのmicroSDが付属するわけですが、どうもNOOBSを使ってインストールされているようです(マルツの場合)。

これでは/bootにファイルを置くことによるギミックが機能しないのでインストールし直します。

公式サイトから"Raspbian Stretch Lite"の方をダウンロードする。

Download Raspbian for Raspberry Pi

イメージファイルの書き込みはEtcher。

etcher.io

セットアップ

下準備

microSDの/bootパーティション直下にファイルを作成し、Wifiの設定を書き込む。

$ vim /Volumes/boot/wpa_supplicant.conf

下記の内容を入力。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
        ssid="your-SSID"
        psk="your-passphrase"
}

内容は環境に応じて修正する。

起動時にsshを有効化するために、同じ要領で空のファイルを作成。

$  touch /Volumes/boot/ssh

/VolumesというのはmacOSにおけるデバイスのマウントポイント。Windowsのドライブレター(D:とかE: みたいなもの)だと思えばいい。

sshでログインする

$ ssh pi@raspberrypi.local

初期設定

まずはパッケージのアップデート。

$ sudo apt update
$ sudo apt upgrade

Wifi の確実化

rfkillフラグのリセット問題が発動すると面倒なので、念のため。

$ sudo apt install rfkill
$ sudo vi /etc/rc.local

適当な場所に下記を追加。

$ sudo vi /etc/rc.local

参考:Raspbian Stretch Lite で突然無線LANに接続不能になったとき - ながいものには、まかれたくない

パッケージの追加

ひとまず最低限。

$ sudo apt install tmux vim

ホスト名の変更

$ sudo vi /etc/hostname

任意で書き換える。

$ sudo vi /etc/hosts

raspberrypiという箇所を上記と同じホスト名になるように書き換え。

パスワード変更

$ passwd
Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

雑多な設定

$ sudo raspi-config

f:id:atuyosi:20180115004150p:plain

"4. Localization Options"から"11. Change Locale"を選択して、"ja_JP.UTF-8"を有効に。 f:id:atuyosi:20180115004201p:plain

同様に"4. Localization Options"から"12 Change Timezone"。"Asia"、"Tokyo"と順にたどっていく。

感想

まあ、スペック通りに小さくて……、遅い。これはOpenCV3系列入れるならクロスコンパイル環境の作り方を調べないとダメか。

ラズパイ3Bの2台目とどっちが良かったのかちょっと微妙な感じ。

まとめ

特別なことは基本的に何もしていないです。何より用途を決めずに勢いで購入してしまったので。

純正のカメラモジュールをつなごうかと思いましたが、それだとなおさらGPIOピンヘッダをつないだ意味がないのでLEDで遊ぼうかどうするか。

それではまた。

参考URL

ラズパイマガジン 2018年2月号 (日経BPパソコンベストムック)

ラズパイマガジン 2018年2月号 (日経BPパソコンベストムック)

*1:買ってしまった

Raspbian Stretch Lite で突然無線LANに接続不能になったとき

引き続きラズパイ関連ネタで。無線LANのトラブルに関して(Voice Kitは無関係です)。

問題なく無線LANに接続できていたのに突然接続できなくなってしまった場合の話。

Qiitaに書こうと思ったが、唐突に買収されたらしいのでちょっと様子見。

非常に冗長な記事なので結論を先に書いておくと、rfkillコマンドがポイント。インストールして/etc/rc.localrfkill unblock wifと1行入れれば解決。

その場しのぎの解決策ではあるけど。

環境

  • ブロードバンドルーター: NEC WX01 (WiMAX2+)
  • Raspbian Stretch Lite (2017/11/29 ver. )
  • Raspberry Pi model 3B

環境要因ではなさそう。

現象

初回セットアップ直後は問題はなく、普通に無線LANに接続できていた(はず)。

接続が不安定とかそういうのではなく、特定のタイミングからさっぱりつながらなくなってしまった。

パッケージを追加後の後処理が実行されている最中(systemd 関係のフック処理?)で通信が途切れて再起動しても接続できず。

$ sudo ip link set wlan0 up
RTNETLINK answers: Operation not possible due to RF-kill

"RF-kill"に関してはArch LinuxのWikiが参考になった。無線LANデバイスをソフトウェア側で無効化するスイッチがあり、これを"RF-kill"と呼ぶらしい。

ワイヤレス設定 - ArchWiki

理由はわからないが、無線LANデバイスを無効化するための内部ロックがセットしたまま解除されてない状態。

ソフトウェア的に無線LANが無効化されているので接続処理が実行されない。

対処

無線LANデバイスの内部ロックを外すためにrfkillコマンドが必要だがRaspbian Liteではインストールされていない。 有線ネットワークにつないでrfkillパッケージをaptでインストールする。

$ sudo apt install rfkill

以下のコマンドでロックを外すことができる。

$ rfkill unblock wifi

この状態で、再度ipコマンドでデバイスを有効化する。

$ sudo ip link set wlan0 up

成功していれば、無事にIPアドレスを取得できるはず。

その他

rfkillコマンドの他のオプションとして、listで現在のデバイスのブロック状態を確認できる。

$ rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: yes
    Hard blocked: no

ラズパイの無線LANモジュール用のカーネルモジュール名はbrcmfmacなので、以下のようにしてカーネルのログを絞り込んだりできる。

$ dmesg | grep brcm

あとはjournalctl -lでログを見る。

再起動のたびに接続不能になる場合

上記で問題が解決するかと思いきや、手元の環境では解決せず。とりあえずudevsystemdが容疑者。

systemd-udevd[169]: Process '/usr/lib/raspberrypi-sys-mods/rfkill-persist' failed with exit code 1

頑張って調べていくと、udevは/lib/udev/rules.d/15-rfkill.rulesというルールにより、/usr/lib/raspberrypi-sys-mods/rfkill-persistというスクリプトを実行している。

このスクリプトはどういうスクリプトかというと、/dev/rfkill の状態が変化した時にudev経由で実行されるもの。 こいつは何をしているかというと、/lib/systemd/systemd-rfkillというコマンドを引数付きで実行するのだが……。

ところがこのsystemd-rfkillコマンドは引数を要求しない。よって必然的にエラーになる。

$ /lib/systemd/systemd-rfkill save wifi
This program requires no arguments.

このコマンドは何をするかというと、ソースを見る限り、udevイベントの状態をチェックして、/var/lib/systemd/rfkill/ディレクトリ配下のファイルに状態を記録あるいは読み出すコマンド。

マニュアルによるとカーネルのコマンドラインオプションをチェックするので無効化自体はできるみたいだけど、そもそも状態の保存に失敗しているので、オプションに関係なくうまく動いていないのでは……。

試行錯誤のメモ

とりあえず問題のあるスクリプトを修正してみた。

$ sudo vi  /usr/lib/raspberrypi-sys-mods/rfkill-persist

要するに引数なしで実行すればいいので、3行目のコマンドの引数2つを削除。

#!/bin/sh
#RFKID=`basename $DEVPATH`
#/lib/systemd/systemd-rfkill save $RFKID
/lib/systemd/systemd-rfkill

2行目をコメントアウト。3行目をコピーして元の行をコメントアウト。コピーした行は引数を除去。

もう一度、sudo rfkill unblock wifiを実行して再起動。やはり解決せず。

結論

仕方がないので、/etc/rc.localでお茶を濁す。まあその場しのぎなんだけど。

以下の1行を/etc/rc.localの、# By default this script does nothing.という行の下に追加。

/usr/sbin/rfkill unblock wifi

systemd、バグってんじゃないのかと思いつつ、ググってもそれらしいバグは上がってない。それとRaspbianのGUIなしを使うユーザはあまり無線LANは使わないのかな……。

適切かどうか断言できないけど、udevルールのうち、/lib/udev/rules.d/15-rfkill.rulesというのは無駄ではないかと思う。理由としては"systemd-rfkill"というサービスが存在しており起動時と終了時に実行されるはずなので*1

参考情報

古いバージョンのRaspbian向けの情報だと、/etc/network/interfacesを編集しろと書いてあるけどこれは不要。 同時に、/etc/network/interfaces.dも空で問題なく無線LANは接続できる(前述のRF Kill問題さえなければ)。

pi@raspberrypi:~ $ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

上記の設定ファイルでインクルードしているディレクトリは空。

pi@raspberrypi:~ $ ls /etc/network/interfaces.d
pi@raspberrypi:~ $

なお、天下無双の嫌われ者?、systemd様がよろしくやってくれるので、wpa_supplicant.serviceも無効のままで問題ない。

$  systemctl is-enabled  wpa_supplicant.service
disabled

IPアドレスを固定したいとかそう言うのはdhcpcdでやるか、systemd-networkdにやらせろということらしい。

なお、ifupおよびifdownコマンドの応答を見ると、デバイスがみつからないように見えるが、この状態でも正常につながるので気にしなくていい。

$ ifup wlan0
ifup: unknown interface wlan0

まとめ

ちゃんとRaspbianのネットワークまわりの初期化処理の流れを把握していないので勉強しないとまずそう。

良くも悪くもハードウェアの知識が知らずと身につくのがLinux系のいいところ。Windows にrfkill相当のコマンドがあるのか知りませんが。 トラブルの度に今まで知らなかった知識が増えるんでこういうのも(たまには)悪くない*2

関連リンク

*1:サービスの"status"が"static"になっている

*2:もちろんお金とか締め切りが絡んでいない時に限る

Google AIY Voice Kit (Google Homeもどき)のセットアップ

月曜日に到着したGoogle AIY Voice Kitを日曜日にセットアップしているってのはどうなんでしょう。

f:id:atuyosi:20171225033004j:plain:w320

Google AIY Voice Kit 販売開始のご案内 - Raspberry Pi Shop by KSY

国内正規品の初回ロット。最近の出荷分には日本語ガイドがついているそうです*1

何はともあれ、セットアップ。

Google AIY Voice Kitとは

ざっくり言うとGoogleがリリースしたスマートスピーカー(ホームスピーカー)の組み立てキットです。
発表されたのは少し前ですが、日本国内でも正式に販売が開始されたということで購入。

Google のAI Yourself プロジェクトの第一弾としてリリースされたもの。現在は第二弾のVision Kitというのもリリースされています。

このVoice KitはRaspberry Pi model 3Bと組み合わせることで、音声認識を活用した「何か」を作れますよ、というキット。

Voice Kit 自体は税抜き3,000円ですが、別途、Raspberry Pi model 3Bと電源アダプタ、microSDなどを用意する必要があります(Vision Kit の方はRaspberry Pi Zero WとPi Cameraが必要)。

Google Home もどきの自作キットという認識でよろしいかと。


Raspberry Pi mdel 3Bを組み込むので、ラズパイ関連のノウハウなり周辺機器の一部を利用できて色々と遊べる、はず……。

開封の儀

公式のページの写真と何も変わりはないですが、一応。

f:id:atuyosi:20171225033211j:plain:w480
英語のガイド本つき。

f:id:atuyosi:20171225033215j:plain:w480
外装のダンボールがお目見え。

f:id:atuyosi:20171225033222j:plain:w480

部品一式。

用意するもの

  • Raspberry Pi moedel 3B
  • 両面テープ
  • 精密ドライバー
  • microSD & SDカードアダプタ
  • HDMI接続のディスプレイ(VNCを使わない場合)
  • キーボードおよびマウス(VNCを使わない場合)

ドライバーは"#00"のサイズのものが必要と書いてあります。ダイソーの精密ドライバーセットで全く問題ないです。

ディスプレイとキーボード、マウスは無くてもSSH+VNCで作業するので無くても問題ない、です。

準備

事前にOSのイメージファイルをダウンロード。

2017年12月23日時点でaiyprojects-2017-09-11.img.xzというファイル名でした。

Etcherで書き込み。圧縮ファイルに対応しているので、xz形式のファイルを直接指定してOK。

一度microSDを取り外し、ssh接続用に小細工しておきます。

$ touch /Volumes/boot/ssh

Finderからbootというボリュームをマウント解除して取り出し。

2017年12月現在、旧式のRaspbian Jessie、つまりDebian 8ベースのRaspbianにサンプルコード一式を追加した代物のようです。

セットアップ作業

注意点

ラズパイ側に放熱用のヒートシンクを取り付けている場合、高さによっては接触するので取り外す必要あり。

基盤の取り付けと配線

それほど難しい英語ではないので、写真を見ながらゆっくり作業して行けば問題ないです。ドライバーはちゃんと寸法のあったものを使う、ぐらいでしょうか。

ちょっと拍子抜けするレベル。スペーサーの取り付けがちょっと力がいるので手こずるかも。

一通り取り付けて、配線を確認したら外装に組み込み。

f:id:atuyosi:20171225033707j:plain:w480

f:id:atuyosi:20171225034245j:plain:w480

片方の側面にだけ穴があるのはやはり内部からケーブルを取り出せということ?


分解はできなくはないですが、ラジオペンチでスペーサーの頭をつまむ必要があります。

電源投入

microSDをセットして電源ケーブルを接続。 無線は面倒なのでネットは有線に逃げました。

説明書にLEDの状態をチェックしろと書いてありますが、、本体上部の赤いボタンのLEDはプログラムを動かさない限り光らないようです。説明書の記述が間違っているとか。

ソフトウェア側の設定

前述のとおり、公式ページで提供されているOSはRaspbianそのものなので基本的にRaspbian Jessieのセットアップと同じ。まずはsshでログインしてVNCを有効化。

VNC

$ sudo raspi-config

VNCを有効化する。

過去記事を同じなので省略。

Raspbian Stretch Lite とVNC - ながいものには、まかれたくない

$ sudo vi /boot/config.txt

以下の2行の行頭のコメント記号を外す。

framebuffer_width=1280
framebuffer_height=720

スピーカーとマイクの動作チェック

とりあえずVNCで接続する。

警告が出るのでパスワードは変更しておく。

ログインするとデスクトップに"Check audio"というアイコンがあるのでおもむろにダブルクリックすると、端末エミュレータのウィンドウが開いていきなりスピーカーから音声が聞こえる。

テキストメッセージの指示に従ってEnterを押してから"Testing 1,2,3"と読み上げるとスピーカーから自分が読み上げた音声が再生される。

なぜか音量でかいので注意。

f:id:atuyosi:20171225031857p:plain:w480

Assistant APIの動作確認

APIの有効化

https://console.cloud.google.comにアクセスする。ラズパイ上でアクセスしてもいいし、普段使いのマシンで作業してJSONを転送してもいい。

  1. プロジェクトを作成
  2. Assistant APIを有効化
  3. OAutuの認証キーを作成してJSONファイルをダウンロード

別のマシンからVoice Kit内部のラズパイに送る場合は、以下のようにする。

$ scp Downloads/client_secret_*.json pi@raspberrypi.local://home/pi/

ラズパイ側で、ファイル名をassistant.jsonにリネームする。

$ mv client_secret_*.json assistant.json

`https://myaccount.google.com/activitycontrols'にアクセス。

  • ウェブとアプリのアクティビティ
  • 端末情報
  • 音声アクティビティ

の3つを有効化する。

[2017/12/27 追記]

「ウェブとアプリのアクティビティ」という項目に関しては、以下のチェックボックスをオンにしないと定形応答しか帰ってきません。チェックしなくても音声認識は動作するようです。

Chrome の閲覧履歴と Google サービスを使用するウェブサイトやアプリでのアクティビティを含める

f:id:atuyosi:20171227184742j:plain

何を話しかけても同じ応答メッセージが帰ってくる場合はアクティビティの設定を確認。

権限不足の場合は何かが足りないのでGoogleのページを参照しろ、という応答が返ってきます。

"Actually? There are silence? XXX your development? Going to Google web site your phone? for more detail."(イマイチ聞き取れず)。

参考:Configure a Developer Project and Account Settings  |  Google Assistant SDK  |  Google Developers

[追記ここまで]

デモプログラムの実行

デスクトップ上にある、"Start dev terminal"をダブルクリック。端末エミュレータのウィンドウが起動するので、``と入力してEnterキーを押す。

デモプログラもの動作が始まると、赤いボタンの内蔵LEDが点滅する。

"OK, Google"と話しかけると反応がある。ただし、発音を英語っぽく”オーケイ、ゴオゥゴォ”みたいに呼びかけないと反応しない……。

なんか早口で会話が成立していない。

付属のデモプログラムについて

全部で4つデモプログラムが付属。Assistant API のAPIキーで動くのは以下の3つ。

  • AIY-voice-kit-python/src/assistant_library_demo.py : "OK, google"という呼びかけに反応するサンプル
  • AIY-voice-kit-python/src/assistant_library_with_button_demo.py : "OK, google"という呼びかけか、ボタンを押すと反応するサンプル
  • AIY-voice-kit-python/src/assistant_grpc_demo.py : ボタンを押すと認識した音声がコンソールに表示されるサンプル

デモプログラムの返答は固定っぽい。"OK, google"ではなく"Hey, Google"でも反応する。

最後の1つはCloud Speech APIを有効化する必要があるサンプル。月1時間までは無料ですが、それ以上は課金されるので注意。

  • AIY-voice-kit-python/src/cloudspeech_demo.py : ボタンを押すと音声がテキストに変換される(要カスタマイズ?)

Assistant APIと同じ要領で、Google Cloud Speech APIのAPIを有効化し、サービスアカウントのAPIキーを作成する必要あり。認証情報のJSONファイル(プロジェクト名で始まるファイル)を入手してcloud_speech.jsonにリネームしてホームディレクトリに配置すると動く。

公式ドキュメント参照:Create a service account and credentials  

普通のRapsbianとの違い

再配布に制限のあるパッケージを除去して拡張基板(VoiceHat)用のドライバ類がインストールされただけ?

dmesgコマンドの出力を見ると、voicehat-codeというのが認識されています。

$ dmesg | grep voicehat
[    2.687675] voicehat-codec voicehat-codec: property 'voicehat_sdmode_delay' not found default 5 mS
[    3.880121] snd-googlevoicehat-soundcard soc:sound: voicehat-hifi <-> 3f203000.i2s mapping ok
[   18.092070] voicehat-codec voicehat-codec: Enabling audio amp...
[   19.201221] voicehat-codec voicehat-codec: Disabling audio amp...
[   34.730969] voicehat-codec voicehat-codec: Enabling audio amp...
[   34.737530] voicehat-codec voicehat-codec: Enabling audio amp...
[   37.056762] voicehat-codec voicehat-codec: Disabling audio amp...

カーネルまわりは普通っぽいし。

 uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux

いまいちよくわかりませんでした。

所感など

どこからどこまでラズパイ側で処理しているのかちょっと不明です。"OK, Google"だけラズパイ側でTensorflowでやってるとか?

構造上、Pi Camera は使えないです。それとヒートシンクが干渉するというのはちょっと盲点でした。いわゆるHATシリーズは今まで試したことがなかったので気づきませんでしたよ。

ダンボール筐体にボタンというのも趣があります。

問題は自宅に赤外線リモコン対応機器がロクにないとか、遠隔操作可能な家電がないってことですかね。

はんだ付けしてやればスピーカーをモノラルからステレオに拡張できるみたいですし、付属の冊子を読む限りサーボモータをつないだり色々できるようです。

入手方法について

KSYから買うのが確実ですが、、入門セットがamazonでも購入できる状態になっているようです。

はてなのAmazon商品紹介、検索にヒットしてもうまくリンクされないのはちょっと困るんですが。

まとめ

なんだかんだで遊べそうです。基本的にスピーカーとマイクとプラスアルファなのに。

次の目標は日本語の呼びかけに反応させることと、USBのカメラの制御ぐらいはやらせたい。

*1:別にいらないけど

広告