KHR-3HV 知能化

製品を基に作成・改造したモノについての解説は、載せてよいとの事でした。

花の育て方や料理を本や授業で見聞きして、作ったモノについて、自分独自なモノについては、載せてよいというのと、似ているとの事です。

また、これは放送大院の武内の研究テーマを基に作りましたが、著作権は武内にある上に積極的にホームページに載せたり、発表して欲しいとの事でした。

ソースコードをGit Hubに公開しました。

(近藤科学さん から許可をいただきました)

https://github.com/shinya-tokyo/khr-3hv-remodel

ロボットとRaspberry Pi 4(以下RPi)を接続し、RPiを使って、単純な動きを複数、呼び出したりして、再生する事による、複雑な動きを実現する。

また、RPiを基点に音声合成をしたり音声認識をしたりする。

それによって人間から発せられた言葉に対して反応したり、人間にとって意味のある音声で話をしたりする事が可能になる。

 

まずRPiの記録媒体にOSをインストールする必要がある。SSH (Secure SHell)で、コマンドを実行できるように設定を変更した。

VNC (Virtual Network Computing)で外部のPCからRPiにリモート接続するソフトを使えるように設定した。リモート接続するのには、いくつか方法があるが、Windowsに備わっているリモートデスクトップを使った。

PCとRPiとの間で、ファイルを転送するのに、便利であるため、PCにファイルをやり取りするためのFTP (File Transfer Protocol)設定を入れた。Filezilla(FTP用ソフト)を入れて、ファイル操作をした。

Python 3もインストールした。RPiにはPythonが元々入っているが、それより新しいバージョンである。PIP/PIP3、yumもインストールした。これは、外部のサーバーからファイルをダウンロードするのに便利な道具である。enumやpyserialという、Python用のライブラリーも、インストールした。

 

ソフトやツール、ライブラリーを、次の表にまとめた。

まず、RPiとロボットのマイコンボードを接続する。

毎回起動しなくても済むように、crontabでshellファイル(ko_usb.sh)が、自動実行されるようにした。

@reboot sudo bash /home/pi/Desktop/ko_usb.sh

音声合成

次の資材を使って、実現した。
  • RCB-4基盤、DUAL USB ADAPTER HS (近藤科学)
  • RCB-4用Pythonライブラリー (近藤科学サイトに無料公開)
  • Open JTalk (音声合成の無料Pythonライブラリー)

音声合成の模式図は、次の通りである。

speech.py(Pythonファイル)を基に音声ファイルを作成して音声ファイルを基に音を再生する。

また音声テキストファイルを作成して、音声テキストファイルを読み取る。

音声認識

音声認識プログラムを動かすためにJulius(音声認識API)を、ネット上からダウンロードした。日本語の音声認識をするのにはdictation-kitが必要だがRPi上ではなくWindowsで、一度ダウンロードする必要があった。ホームページにある通りに構築していった。

学習リモコン接続

RPiに、「ADRSIR ラズベリー・パイ専用 学習リモコン基板」を取り付けた。

公式ホームページから必要なソフトをDLすると、ファイルが入った、フォルダーが格納されている。

(エアコンのオンオフのファイルは後から作った)

コマンドで、エアコンをつけたり切ったりする信号を保存する。

 

統合動作

基本動作 (音声認識によるエアコン入切制御)

先述の音声認識により、エアコンのオンオフをできるようにした。juliusを使って、音素ファイルと自作辞書で音声認識させた。 これでソケット通信をしてエアコンのオンオフをする。 ソケット通信の概要は、次の通りである。
  1. juliusで音声認識した結果を、ソケット通信で受け取る
  2. 受け取ったものから必要な文字を抽出
  3. その文字を基にエアコンのオンオフをする
これらの技術を用いて、「暑い」等と言うと、お辞儀をしながらエアコンをつける動作を実現した。

次のように、右手が上がる。

動作結果は次の通りである。

メモ(shell上で別Windowを起動してコマンド実行):

次のコマンドでRPi上のターミナルで新しいターミナルを呼び出して、かつ、そこでコマンドを動かす事が出来るという事を、今更、知りました。基本的過ぎるからか、現時点でネットにも載っておらず、自分で見つけました。
“lxterminal -e ./何とか.sh”
ちなみに「”-e”をつけないと、出来ない」のと、”./何とか.sh”はPG呼び出しとかでもよいと思います。 (例: python3 何とか.py”)

親の.sh内で、次を呼び出したら、マルチタスク擬きが出来ました。

“lxterminal -e ./何とか1.sh”

“lxterminal -e ./何とか2.sh” ← 敢えて「何とか.sh」内のタイマーで遅れて起動するようにしてある

※ 「何とか1.sh」を起動して一定程度処理していてしばらくした時に、「何とか2.sh」を起動して、かつ、その後、協調動作させたいためです。
※※ lxterminalコマンドも、そうですが、”-e”を見つけるのに時間がかかりました