Choregraphe入っているPCにNode-REDを入れてPepperとMQTT連携するメモ

Pepperを動かす時はChoregrapheで動かしているPCがあります。これを利用してPCにNode-REDを入れてNode-REDで立てたMQTTブローカー(node-red-contrib-mqtt-broker)と接続して連携してみます。

今回の仕組み

image

今回の仕組みはノート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

こちらを参考に構築していきます。

image

このようなフローを書きます。

MQTTブローカー

Node-RED内のMQTTメッセージを待ち受け、Pepperとも接続するMQTTブローカーの処理をつくります。

image

こちらのフローの部分です。このようにMQTTブローカーノード→debugノードの順につなげてフローを作ります。

image

MQTTブローカーの設定です。

image

特に設定することはなくMQTT portが1883であることを確認しておきます。

image

末端のdebugノードの設定です。

image

そのままの設定で大丈夫です。

Node-REDからPepperへMQTTメッセージを発行する部分

つづいて、Node-REDからPepperへMQTTメッセージを発行するフローを作ります。

image

こちらの部分です。このように、injectノード→functionノード→MQTT outノードの順でつなげてフローを作ります。

image

injectノードの設定です。

image

ペイロードを文字列に設定して いえーい という文言を入力しておきます。

image

functionノードの設定です。

image

こちらは何も設定しなくてOKです。

image

MQTT outノードの設定です。

image

こちらは、トピックは

hotj78i2p14/message/push

を指定します。サーバの部分は鉛筆ボタンから新規作成をします。

image

接続先の設定です。サーバーは自分自身なので127.0.0.1にします。ポートは1883のはずなのでそのままで大丈夫です。

image

セキュリティ欄のユーザーパスワードは両方空欄で大丈夫です。慣れてくれば設定してもよいのですが、最初うまくいかないと心が折れやすいので空欄でやっていきましょう。

image

こちらを作り終えたらデプロイボタンを押して機能するようにします。

image

無事デプロイが済むとグレーアウトします。

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の設定です。

image

IPアドレスを確認しておきます。

PepperのALMemoryとMQTTを相互接続するボックスを作った話 – Qiita

を参考に構築します。

image

MQTTアダプターボックスとLogボックスをそれぞれつなげています。

MQTTアダプターボックスの設定

image

MQTTアダプターボックスは起点となるonStartからつなげて、起動時にすぐMQTTがつながるようにします。

image

変数の設定をします。

image

今回は「Pepper内の MQTT/Test/Sample1/Message メモリイベントから、Node-REDのMQTTブローカのトピック名 hotj78i2p14/message/push に送る」ので以下のようにKey-Topic Bindingsに設定します。

MQTT/Test/Sample1/Message:hotj78i2p14/message/push

メモリイベントの設定

Key-Topic Bindingsで設定したメモリイベントを作ります。

image

image

ALMemoryからのイベント追加をします。

image

新しいキーの追加ボタンを押します。

image

image

新しいキーを設定しOKを押します。

MQTT/Test/Sample1/Message

image

無事キーが作られたことを確認しチェックされていることも確認します。

image

無事キーが作られたので、Logボックスとつなげます。

実行してみる

image

バーチャルロボットで実行してPepperとNode-REDをつないでみましょう。

image

ログを見ると無事つながっているようです。Connedted with result code 0 のところです。

Node-RED側のデバックログを確認

image

無事、MQTTブローカーからメッセージが出ていてつながっているようです。

image

データ階層を開いてみると、Pepper側からの接続である paho ではじまるものがつながっています。

メッセージを送ってみる

image

Node-RED側でinjectノードのボタンを押します。

image

押すとNode-REDの上部に実行されたと結果が出ます。

Pepper側のログを見てみる

image

無事Logボックスに到達してログビューワーにログが出ているようです。

うまくいきました!

まとめ

PepperとChoregraphe入っているPCにNode-REDを入れてMQTTブローカで連携させてみました。

image

これを更に発展させて実機Pepperの場合は、LogボックスをSay Textボックスに入れ替えれば以下のようにNode-REDで決めた文言を喋らせることが可能です。

それでは、よき Pepper & Node-RED Lifeを!