ソケットサーバー「HAL」の概要 (version 1.4対応版)
※2016/08/10追記 緑色 の文字は、version 1.4 で追加・改変された機能です。
ソケットサーバー「HAL」は Raspberry Pi で動作する、カスタマイズ可能なサーバーアプリケーションフレームワークです。ソケットサーバー「HAL」をセットアップすれば、プログラムに関する難しい知識がない方でも簡単なPHPコードを書くだけで Raspberry Pi を制御することが出来るようになります。
Raspberry Pi を買ってひとしきり遊んだが「さて、これからどうしよう?」とお考えの方はいらっしゃいませんか? ソケットサーバー「HAL」を使えば、あなたの Raspberry Pi で効率的なIoT活用が出来ます。ソケットサーバー「HAL」で、あなたの Raspberry Pi をもっと便利で楽しいデバイスにしましょう!
ソケットサーバー「HAL」の概要
ソケットサーバー「HAL」は PHP で構築された軽量なサーバーアプリケーションフレームワークです。BSDソケットを用いたテキストベースの通信によって、あなたのアプリケーションや音声クライアントからの指示を受け取り、あなたが定義した処理を行います。どのような処理をさせるかはあなた次第です。
音声クライアントは Julius から送信された音声認識結果を HAL に伝えるクライアントプログラムです。Julius は日本の大学やIPAによって開発されているオープンソースの音声認識システムです。ソケットサーバー「HAL」を利用するにあたって必須ではありませんが、Julius を導入する事で HAL をより高度に扱うことが出来るようになるでしょう。
また、同様にオープンソースで開発されている音声合成ライブラリ「Open JTalk」を併用することで、対話型の IoT システムを、とても簡単に構築できるようになるでしょう。
サーバーフレームワークってなぁに?
サーバーフレームワークというのは、あまり聞き慣れない言葉です。ソケットサーバー「HAL」がどんなものなのかを知るには、実際にどんなプログラムを書く必要があるのかを知るのが一番手っ取り早いでしょう。
HALのプログラム例 ※version 1.3 まで
HALのプログラム例(準備中) ※version 1.4 から
このリンクでは、HAL にあなたが望んだことをさせるために、どんなプログラムを書けば良いのかをご紹介しています。こちらを一読いただければきっと、ソケットサーバー「HAL」がどんなアプリケーションであるか、どれほど簡単に思っていることを実現できるのかを大体御理解いただけるのではないかと思います。
必須条項
- Raspberry Pi 本体 ※1
- PHP 5.4以上(5.6を推奨。最新の Raspbian Jessie から apt-get で入る PHP は 5.6.22 です。 PHP7 は Loader の対応が待たれます)
- Raspberry Pi、及び HAL に接続するシステムの IPアドレスの固定化
- ionCube Loader のインストール
※1 RPi Model B+、RPi 2 Model B、RPi 3 Model B で動作を確認しています※2が、本製品ご利用にあたっては、念のためお試し版でお望みの動作をするかテストを行ってください。
※2 RPi Model B+ は CPU パワーが貧弱なため、Julius の動作によりパフォーマンスが大きく低下します。音声認識をさせつつソフトウェア PWM 信号を送信するなどの処理には不向きです。高速な CPU を搭載した Pi 2 以上であれば問題ないと思われます。詳しくは Raspberry Pi のパフォーマンス比較~B+と2Bの比較です を参照してください。
推奨条項
- WiringPi、及び WiringPi-PHP のインストール
- Julius
- Open JTalk
- eSpeak text to speech
- Apache2(Apache2.4を推奨)
WiringPi 及び WiringPi-PHP が無くともサーバーとして利用することは可能ですが、あなたがやりたい事の殆どはかなり大変になるでしょう。ぜひインストールをおすすめします。
※なお、上記すべてのインストール方法は、Raspberry Pi 簡単セットアップマニュアル として纏められ、随時更新・追加が行われています。
HALの構成(version 1.3 まで)
HALのプログラムファイル構成は以下のようになっています。
これらのファイルのうち、あなたが編集する必要があるのは赤い字のファイルのみです。それ以外は暗号化されていて編集できないか、大抵の場合編集する必要はありません。
HALの構成(version 1.4 以降)
HAL version 1.4 からは、ユーザー定義ファイルとシステム・コアファイルの分離が行われました。HALのファイル・ディレクトリ構成(version 1.4 以降) をご参照下さい。
導入方法
2016/08/10追記 Raspberry Pi への OS のインストールから HAL 実行に必要な一通りのインストールを行うための覚書を Raspberry Pi 簡単セットアップマニュアル に纏めました。最短でセットアップを行いたい場合はご参照下さい。なお、将来的には半自動で実行できるシェルスクリプトをご提供する予定です。
ソケットサーバー「HAL」は PHP プログラムのため、PHP の実行環境が必要です。PHP の実行環境をインストールして下さい。
あとは HAL をフォルダごとお好きな場所にアップロードしてください。HAL は コマンドラインプログラムとして起動させるため、多くの PHP プログラムのように公開ディレクトリに置く必要はありませんし、置くべきではありません。上記の Apache のインストールで公開ディレクトリが /var/www/html ディレクトリに設定されている場合、例えば、/var/www ディレクトリに HAL を配置すると良いかもしれません。
ソケットサーバー「HAL」のプログラムは暗号化されているため、導入にあたってはデコード用ライブラリを導入する必要があります。ionCube社(イギリス)のサイトにある ionCube Loader のページから Raspberry Pi 用の Loader をダウンロードし、Raspberry Pi にインストールする必要があります。
また、Raspberry Pi で GPIO を簡単に操作するためのライブラリである Wiring Pi と、それを PHP から操作するためのライブラリである WiringPi-PHP もインストールするととても可能性が広がります。
>> WiringPiとWiringPi-PHPのインストール
いずれも、簡単なコマンドを実行するだけでインストールできます。
HAL の設定
HAL の設定はとても簡単です。
まず、HAL を搭載した Raspberry Pi の IPアドレスの固定化を行ってください。あとは、固定化したIP アドレスを /HAL/setting/HALSetting.php ファイルの HAL_ADDRESS に記述するだけです。必要に応じて、HAL 及び Julius で使用するポートを変更することができます。デフォルトではそれぞれ 9001(以前は9000番に設定されていました)、10500となっています。詳しくは、HALSetting.phpの詳細をご確認ください。
HAL の起動
HAL の起動は、以下のコマンドを実行して下さい。
sudo php -q (HALディレクトリまでのパス)/system/hal.php
例えば、/var/www ディレクトリに HAL ディレクトリを設置した場合、コマンドは
sudo php -q /var/www/HAL/system/hal.php
となります。
Raspberry Pi の GPIO を PHP から操作するには root 権限が必要なため、上記のように sudo をつけて実行するか、su - コマンドで root としてログインしてから実行を行ってください。
Julius を音声認識エンジンとして利用する場合は、
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module
のように -module オプションを付加し、モジュールモードとして起動します。上記の kaden は音声認識に利用する文法ファイルの指定です。文法ファイルの作り方や Julius の使い方については、
>>Juliusによる音声認識~国産オープンソースライブラリの活用
をご参照ください。
-nostrip と -nolog はそれぞれ、Warning と 動作ログの出力を抑制するオプションです。(2016/05/22 追記)
Julius を利用する場合、Julius の音声認識結果を解析して HAL に伝達するための voice_client.php を起動する必要があります。
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php
voice_client を起動すると、voice_client はまず、HAL とのコネクション接続を試行します。HAL との接続が確立すると、次は Julius との接続を試みます。このため、voice_client は HAL と Julius を起動した後に起動するようにして下さい。
HAL の起動について、詳しくは HALの起動方法 を参照してください。
また、HAL の起動と終了に際して実行したい事がある場合については、セットアップとクリーンナップ を併せてご参照ください。
HALの名前の由来
HALの名前の由来は、スタンリー・キューブリックの「2001年宇宙の旅」の人工知能 HAL9000 です。HAL のデフォルトポートが 9000番に設定されているのもこれに由来します。2001年宇宙の旅で HAL9000 は電源を切られることを恐れ乗務員を殺害しますが、ソケットサーバー「HAL」があなたに危害を加えるかどうかはあなたの書いたコード次第です。
なお、講談社のコミック「ハルロック」(西餅著)に登場するハルちゃんでは決してありません。
※ 加えて、余談ですが、本来の「ソケットサーバー」という用語は TCP や UDP の通信を中継するプロキシサーバーのような物を指すようです。ですから『ソケットサーバー「HAL」』というネーミングはあまり適切ではないので、そのうちに名称変更するかもしれません。
HALの起動でエラーが出てしまいます
お名前:62ki
2016-05-31 15:41:21
お名前:管理者ウェブサイト
2016-05-31 19:40:29
お名前:62ki
2016-05-31 22:07:01
お名前:62ki
2016-06-01 12:46:05
お名前:管理者ウェブサイト
2016-06-01 19:03:29
お名前:62ki
2016-06-01 20:24:24
お名前:62ki
2016-06-03 12:50:52
お名前:管理者ウェブサイト
2016-06-03 19:38:45
お名前:管理者ウェブサイト
2016-06-04 09:50:21
お名前:62ki
2016-06-04 15:55:22
お名前:管理者ウェブサイト
2016-06-05 13:37:01