Pepperを動かす時はChoregrapheで動かしているPCがあります。これを利用してPCにNode-REDを入れてNode-REDで立てたMQTTブローカー(node-red-contrib-mqtt-broker)と接続して連携してみます。
今回の仕組み
今回の仕組みはノートPCにNode-REDを入れてある前提で、Node-REDで立てたMQTTブローカー(node-red-contrib-mqtt-broker)を立てた上で、PepperはMQTTブローカーへsubscribe(購読)します。Node-RED自身もメッセージを出すためにpublish(メッセージ発行)できるようにします。
PCへのNode-REDの設定
1分でIoT環境を構築!Node-RED上でMQTTブローカを立ち上げる手順 – Qiita
こちらを参考に構築していきます。
このようなフローを書きます。
MQTTブローカー
Node-RED内のMQTTメッセージを待ち受け、Pepperとも接続するMQTTブローカーの処理をつくります。
こちらのフローの部分です。このようにMQTTブローカーノード→debugノードの順につなげてフローを作ります。
MQTTブローカーの設定です。
特に設定することはなくMQTT portが1883であることを確認しておきます。
末端のdebugノードの設定です。
そのままの設定で大丈夫です。
Node-REDからPepperへMQTTメッセージを発行する部分
つづいて、Node-REDからPepperへMQTTメッセージを発行するフローを作ります。
こちらの部分です。このように、injectノード→functionノード→MQTT outノードの順でつなげてフローを作ります。
injectノードの設定です。
ペイロードを文字列に設定して いえーい という文言を入力しておきます。
functionノードの設定です。
こちらは何も設定しなくてOKです。
MQTT outノードの設定です。
こちらは、トピックは
hotj78i2p14/message/push
を指定します。サーバの部分は鉛筆ボタンから新規作成をします。
接続先の設定です。サーバーは自分自身なので127.0.0.1にします。ポートは1883のはずなのでそのままで大丈夫です。
セキュリティ欄のユーザーパスワードは両方空欄で大丈夫です。慣れてくれば設定してもよいのですが、最初うまくいかないと心が折れやすいので空欄でやっていきましょう。
こちらを作り終えたらデプロイボタンを押して機能するようにします。
無事デプロイが済むとグレーアウトします。
Node-RED JSONフロー
構築済みのNode-RED JSONフローも置いておきます。上記の流れを行わずに、いきなりこちらを使う場合は、1分でIoT環境を構築!Node-RED上でMQTTブローカを立ち上げる手順 – Qiitaをよく読んでnode-red-contrib-mqtt-brokerのインストール手順を対応ください。
js [{"id":"b3d12b4a.8a69e8","type":"mosca in","z":"eb55360a.271718","mqtt_port":1883,"mqtt_ws_port":8080,"name":"","username":"","password":"","dburl":"","x":170,"y":160,"wires":[["37cb43d9.8321fc"]]},{"id":"37cb43d9.8321fc","type":"debug","z":"eb55360a.271718","name":"","active":true,"console":"false","complete":"payload","x":670,"y":160,"wires":[]},{"id":"fbe0015.0273c","type":"comment","z":"eb55360a.271718","name":"MQTT ブローカー","info":"","x":170,"y":80,"wires":[]},{"id":"32e38298.0d655e","type":"mqtt out","z":"eb55360a.271718","name":"","topic":"hotj78i2p14/message/push","qos":"","retain":"","broker":"ea9c480a.255328","x":640,"y":340,"wires":[]},{"id":"4bdebef1.d32e9","type":"inject","z":"eb55360a.271718","name":"","topic":"","payload":"いえーい","payloadType":"str","repeat":"","crontab":"","once":false,"x":180,"y":340,"wires":[["e094a8bf.3d7ad8"]]},{"id":"e094a8bf.3d7ad8","type":"function","z":"eb55360a.271718","name":"ハブ(なにもなし)","func":"\nreturn msg;","outputs":1,"noerr":0,"x":380,"y":340,"wires":[["32e38298.0d655e"]]},{"id":"4308cd94.d41d84","type":"comment","z":"eb55360a.271718","name":"↓ ただ喋らせる","info":"","x":160,"y":300,"wires":[]},{"id":"76d2100.17e0ef","type":"comment","z":"eb55360a.271718","name":"ノートPC→Pepper","info":"","x":170,"y":260,"wires":[]},{"id":"83d7db43.c9cea8","type":"comment","z":"eb55360a.271718","name":"PepperとノートPCをつなぐためにNode-RED内で動作している","info":"","x":310,"y":120,"wires":[]},{"id":"ea9c480a.255328","type":"mqtt-broker","z":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]
Choregrapheの設定
つづいてPepperのChoregrapheの設定です。
IPアドレスを確認しておきます。
PepperのALMemoryとMQTTを相互接続するボックスを作った話 – Qiita
を参考に構築します。
MQTTアダプターボックスとLogボックスをそれぞれつなげています。
MQTTアダプターボックスの設定
MQTTアダプターボックスは起点となるonStartからつなげて、起動時にすぐMQTTがつながるようにします。
変数の設定をします。
今回は「Pepper内の MQTT/Test/Sample1/Message メモリイベントから、Node-REDのMQTTブローカのトピック名 hotj78i2p14/message/push に送る」ので以下のようにKey-Topic Bindingsに設定します。
MQTT/Test/Sample1/Message:hotj78i2p14/message/push
メモリイベントの設定
Key-Topic Bindingsで設定したメモリイベントを作ります。
ALMemoryからのイベント追加をします。
新しいキーの追加ボタンを押します。
新しいキーを設定しOKを押します。
MQTT/Test/Sample1/Message
無事キーが作られたことを確認しチェックされていることも確認します。
無事キーが作られたので、Logボックスとつなげます。
実行してみる
バーチャルロボットで実行してPepperとNode-REDをつないでみましょう。
ログを見ると無事つながっているようです。Connedted with result code 0 のところです。
Node-RED側のデバックログを確認
無事、MQTTブローカーからメッセージが出ていてつながっているようです。
データ階層を開いてみると、Pepper側からの接続である paho ではじまるものがつながっています。
メッセージを送ってみる
Node-RED側でinjectノードのボタンを押します。
押すとNode-REDの上部に実行されたと結果が出ます。
Pepper側のログを見てみる
無事Logボックスに到達してログビューワーにログが出ているようです。
うまくいきました!
まとめ
PepperとChoregraphe入っているPCにNode-REDを入れてMQTTブローカで連携させてみました。
これを更に発展させて実機Pepperの場合は、LogボックスをSay Textボックスに入れ替えれば以下のようにNode-REDで決めた文言を喋らせることが可能です。
それでは、よき Pepper & Node-RED Lifeを!