「How to Train Virtual TJBot in Node-RED」記事を訳して試してみた

[How to Train Virtual TJBot in Node-RED](https://medium.com/@jeancarlbisson/how-to-train-virtual-tjbot-in-node-red-df118b47a4e3) の記事が興味深かったのですが、日本語の情報がうまく見つからなかったので簡単に訳してみました。また今日時点の環境で動作するか、 [IBM Cloud](https://ibm.biz/BdzB7B) 上の Node-RED v0.20.8 を使用して動作を確認してみました。

# はじめに

今週は、IBM Watsonを搭載した独自のプログラム可能な段ボールロボット、愛らしい [TJBot DIYメーカーキット](https://ibmtjbot.github.io/) の2周年を迎えます。

【訳注】1年前の記事なので3周年ですね。また日本生まれの [TJBot Zero キット](https://www.ibm.com/developerworks/jp/code/open/projects/tjbot/) も誕生しています

オリジナルの [tjbot npm ライブラリ](https://github.com/ibmtjbot/tjbot) とともに、TJBot の可能性を体験する多くの方法が発表されてきました。 [TJBot Swift Playground](http://ibm.biz/tjbot-playground) は、楽しいインタラクティブなストーリーを通して TJBot を学べます。 [TJBot シミュレーター](https://ibm.biz/meet-tjbot) は、Node.js の仮想 TJBot アバターを制御するためのオンライン・サンドボックスを提供します。また、[TJBot Node-RED ノード](http://ibm.biz/node-red-contrib-tjbot) は、物理的な TJBot をドラッグ＆ドロップ・インターフェイスで制御するためのノード群を提供します。

この TJBot を仮想的にプログラムする別の方法を共有します。Node-RED を使用して、[node-red-contrib-virtual-tjbot](http://ibm.biz/node-red-contrib-virtual-tjbot) ノードをインストールし、仮想ロボットアバターで同じエクスペリエンスを取得できるようになりました。ロボットやコーディングの経験は必要ありません！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/40c14c94-7a90-f53f-2cb2-6ee5bf9818d8.png)
これは、TJBot の機能と、コミュニティによって構築された優れたオープンソースエディタである Node-RED を組み合わせて提供し、すべてが Web ブラウザーで快適に利用できるエキサイティングな追加です。 さらに、仮想 TJBot を Twilio に接続したり、Twitter を監視したり、IoT デバイスとやり取りしたり、Instagram に投稿したり、お気に入りの API とやり取りしたりすることもできます。

# ノードをインストールする

仮想 TJBot ノードをインストールするには、Node-REDを開きます(ローカルまたはIBM Cloudで実行できます)。 [メニュー]-> [パレットの管理]をクリックします。

【訳注】訳者は [IBM Cloud](https://ibm.biz/BdzB7B) 上で、Node-RED v0.20.8 を使用して動作を検証しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/1b1c9b8e-963c-02f1-fbac-707435811591.png)
[ノードを追加] タブで node-red-contrib-virtual-tjbot を検索し、[ノードを追加] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/2d753357-5f0c-07ed-266d-bdaecbf33809.png)
ノードは左側のパレットに　[Virtual TJBot] というラベルの付いたカテゴリで追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/b8febe7b-e7f4-77e5-4f2c-b7ec28c137f6.png)
 右側のパネルで、下向きの三角形をクリックし、[仮想TJBot] を選択して、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/4702cfff-e6a8-828d-1f3d-871b1b7a6d58.png)
仮想 TJBot アバターを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/695f28ba-112a-97c5-7c42-6439ff0503d6.png)

# 仮想 TJBot プロファイルを作成する

ワークスペースに配置される各仮想 TJBot ノードは、TJBot 構成に関連付けられています。 TJBot構成プロファイルを使用すると、たとえば異なる言語を話すなど、さまざまなタイプのロボットを構成し、必要に応じて動作をカスタマイズできます。

どれかの仮想 TJBot ノードをワークスペースにドラッグし、ダブルクリックします。 Botドロップダウンメニューの横にある鉛筆をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/02ceafbf-803f-a9eb-880e-8f25b6199dc8.png)
この構成画面では、仮想TJBotが理解および話す言語、ハードウェアのハードウェアを選択し、基礎となる機能に必要な IBM Watson サービス資格情報を設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/fbd80487-d560-bf9f-0507-748977842075.png)

# LEDを黄色に光らせてみる

仮想 TJBot を制御して頭部にある LED を黄色に照らす方法の例を示します。Shine ノードをワークスペースにドラッグします。TJBot プロファイル構成で、LEDの横にあるチェックボックスをオンにして、LED を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/a8a19515-ffca-a805-0c2c-da30bf1ba293.png)
Shine ノードの設定で、[Mode] ドロップダウンメニューから [Shine] を選択し、[Color]ドロップダウンメニューから [Yellow] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/759f7653-e090-aa11-7c79-d2d2d319041f.png)
shineノードを Inject ノードに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/a9f5fead-f167-6a69-85d7-6825f7015d1b.png)
変更を保存して有効にするには、[デプロイ]をクリックすることを、お忘れなく！Inject ノードがトリガーされると、仮想 TJBot の頭部にある LED が黄色に光ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193519/1903c2ab-3907-1b64-bae2-88069fa0124d.png)

# 実際の TJBot ノードとの違いは？

TJBot で元の TJBot Node-RED ノードを使用したことがある場合、これら2つのノードセットがどのように関連しているか気になるかもしれません。良いニュースとして、わずかな違いがあるだけで、多くの類似点を共有していることがあげられます。

TJBot ノードは(実際のハードウェアを使用するため) Raspberry Pi で TJBot ノードのみを実行でき、仮想 TJBot ノードは Web ブラウザーでのみ実行できる(Webブラウザー経由で使用可能なコンピューターのハードウェアを使用するため)という点で異なります。

一部のノードには、追加の機能、またはわずかに変更された機能があります。たとえば、一部のランタイム(Cloud Foundryなど)はファイルシステムへのアクセスを提供しない、もしくはそれが永続的でない場合があるため、Virtual TJBot see ノードでは、写真を撮影して画像データを(ファイルシステムに保存する代わりに) msg.payload に送付する方法も提供します。


ただし、2組のノードは、それぞれの TJBot ノードを同等の仮想 TJBot ノードに置き換えるのに十分なほど同一性を保っており、その逆も同様です。フローの残りの部分に多くの変更を加える必要はありません。

より多くの Node-RED レシピに興味がある場合は、最初に物理 TJBot Node-REDノード用に作成した Node-RED シリーズの [TJBot のトレーニング](https://github.com/jeancarl/tjbot-node-red-skills) をご参照ください。JSONフローをインポートして仮想的に使用する場合のコツです。`"type":"tjbot-****"` のインスタンスを `"type":"vtjbot-****"` に置き換えてください！このトリックは100％保証されているわけではありませんが、これらのレシピの多くで機能します。

何か面白いものを作成したら、教えてくださいね！