heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

声で家電を制御する:その4(OpenRTM-aist インストール、起動スクリプト作製)

目的

声で家電を制御する。ただし安価に。

経過(その3)

arduinoの赤外線送信の出力アップを図った。
トランジスタ FET 2SK2962を使用して、扱える電流を 1A までにアップ(今までは50mA)。
arduinoの耐用アンペアなどは以下を参照。
http://arms22.blog91.fc2.com/blog-entry-408.html


今回の概要

今回のコンポーネント群は OpenHRI を利用していて、そもそもそれらは RTミドルウェア(RTM)の RTコンポーネントに則ったものだったのです。*1,

そして今回はそれら RTコンポーネント群をコマンドラインから使用するための環境を構築しました。
また、PC 起動と同時にコンポーネント群が起動するようスクリプトを作りました。

OpenRTM-aist とは

RTミドルウエアの実装の1つで産業技術総合研究所によって開発されています。*2,*3

そして面白いのは、この技術がもともと「柔軟なロボットシステムの効率的開発を支援する基盤ソフトウエア技術を開発」するために作られていることです。*4
実際に、自分が昔から気になっていたミームさん(HRP-4C、Miim、未夢))には、この技術が使われているみたいです。

f:id:maijou2501:20160909013132j:plain
By ELiveFdragon (Own work) [CC BY-SA 3.0*5], via File:HRP-4C UCROA.jpg - Wikimedia Commons

OpenRTM-aist インストール

以下のページを参照した。
http://www.openrtm.org/openrtm/ja/node/5014/

環境は以下。
Linux ubuntu 2.6.32-43-generic #97-Ubuntu SMP Wed Sep 5 16:42:26 UTC 2012 x86_64 GNU/Linux

sudo echo "deb http://www.openrtm.org/pub/Linux/ubuntu/ lucid main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install omniidl4-python
sudo apt-get install python-omniorb2-omg

cd ~/Downloads
wget http://pyyaml.org/download/pyyaml/PyYAML-3.10.tar.gz
wget https://github.com/downloads/gbiggs/rtshell/rtshell-3.0.0.tar.gz
wget https://github.com/downloads/gbiggs/rtctree/rtctree-3.0.0.tar.gz
wget https://github.com/downloads/gbiggs/rtsprofile/rtsprofile-2.0.0.tar.gz
sudo tar zxvf PyYAML-3.10.tar.gz -C /opt
sudo tar zxvf rtshell-3.0.0.tar.gz -C /opt
sudo tar zxvf rtctree-3.0.0.tar.gz -C /opt
sudo tar zxvf rtsprofile-2.0.0.tar.gz -C /opt

cd /opt/rtshell-3.0.0
sudo python setup.py install
echo "source /usr/local/share/rtshell/shell_support" >> ~/.bashrc

cd /opt/rtctree-3.0.0
sudo python setup.py install
echo "export RTCTREE_NAMESERVERS=127.0.0.1" >> ~/.bashrc

cd /opt/rtsprofile-2.0.0
sudo python setup.py install

cd /opt/PyYAML-3.10
sudo python setup.py --without-libyaml install

起動スクリプト

rtshell の rtcryo コマンドで RTシステムを保存し、再生する方法もありましたが、ローテクに作製しました。*6

start.sh

#!/bin/bash

cd /home/ito/Dropbox/Programing/workspace/121104_consoleIn/src

#start component
pulseaudioinput &
pulseaudiooutput &
openjtalkrtc &
juliusrtc ir.xml &
python ConsoleOut.py &
seat ir.seatml &
sleep 10;

#スクリプトからは下記コマンドが無効でした。
#rtcwd 127.0.0.1/

#active component
rtact 127.0.0.1/PulseAudioInput0.rtc
rtact 127.0.0.1/JuliusRTC0.rtc
rtact 127.0.0.1/SEAT0.rtc
rtact 127.0.0.1/ConsoleOut0.rtc
rtact 127.0.0.1/OpenJTalkRTC0.rtc
rtact 127.0.0.1/PulseAudioOutput0.rtc

#connect component
rtcon 127.0.0.1/PulseAudioInput0.rtc:AudioDataOut 127.0.0.1/JuliusRTC0.rtc:data
rtcon 127.0.0.1/JuliusRTC0.rtc:result 127.0.0.1/SEAT0.rtc:speechin
rtcon 127.0.0.1/SEAT0.rtc:speechout 127.0.0.1/OpenJTalkRTC0.rtc:text
rtcon 127.0.0.1/SEAT0.rtc:commandout 127.0.0.1/ConsoleOut0.rtc:in
rtcon 127.0.0.1/OpenJTalkRTC0.rtc:result 127.0.0.1/PulseAudioOutput0.rtc:AudioDataIn

感想

いつか、この技術の本来の目的であるロボットを作ってみたいなと思わせられた技術でした。
簡単なフィードバックのあるロボットなら作れそう、と思いました。

コンポーネントとして機能を分散させ、さらにこれが1番素晴らしいと思うのですが各コンポーネント間のデータのやり取りをすごく簡単にしているんですよね。


追記

予想はできていましたが、Julius の誤検知が問題となってきました。
現在6文字以下の声をスイッチにしているのですが、くしゃみをしたら「アップ」と認識していました。

W3C-SRGS形式の文法を利便性を損ねない程度に複雑に作り、誤検知を回避できるか試してみたいと思います。

チェックも兼ねて、検証ツールを用いて文法をグラフ表示させてみました。


※しかし複雑にすると利便性が損なわれますし、検知率を上げる方法を後日探してみたいと思います。


以上