はじめに
世間でリモートワークが推奨されてから、ビデオ通話システムが幅広く普及しました。その中でも無料で手軽に使えるzoomはスタンダードと言えるほど利用されています。
この情勢を鑑みて、zoomミーティングを利用した等身大台車型ロボットによる、「安くてお手軽に作れるテレイグジスタンスロボット」を構築してみたいと思います。
「お手軽」と書いた割には、全3回と非常に長丁場になってしまいましたが、一度環境を構築したら後は楽に運用できるのと、カスタマイズも比較的容易なので何卒お付き合いください…
今回はメガローバーver2.1を拡張して目線の位置にモニタ・カメラ・オーディオ類を取り付け、等身大ロボットとします。また、ソフトウェアはビデオ通話にzoomアプリ、ロボット制御にgoogle firebaseを使います。ハードウェアの拡張以外は無料で準備できます。
メガローバー ver2.1 385,000円(税込)
ハードウェアの準備
素のメガローバーに対して、下記の拡張を行います。これらの別途機材を調達して同様の環境を構築できるほか、ヴイストン株式会社より、これらの機材一式を本体に組付けた「リモート制御オプション」を提供しています。
ロボットショップ内「研究開発用搬送ロボット・AGV」にて、PCあり・無しの各オプションをお求めいただけます。
https://www.vstone.co.jp/robotshop/index.php?main_page=index&cPath=156_923
NUC PC(Intel NUC8i5BEK) + 8GB DRAMM + 250GB SSD
Intelの小型PCです。PC単体にはSSD・メモリが含まれていないので別途準備が必要です。ここにubuntu18.04・ROS(melodic)・zoomをそれぞれインストールします。インストール方法は、メガローバーを購入したら取得できるROS用ドキュメントを参照します(今回はここは省略)
メガローバーには「ROS PCオプション」として同型のPCを搭載し、ubuntuとROSのセッティングまで完了したパッケージを販売しております。こちらのオプションを利用しない場合、PCの電源を別途準備する必要があるためご注意ください。
HDMIモニタ EVICIV 13.3インチ/モバイルモニター EVC-1301
USB給電で動作可能なものを選定します。今回はその中でも背面にVESA規格(75mm)の取り付け穴が付いているものを選びました。
スピーカーフォン OREK 会議用 マイクスピーカー CP910 携帯用
マイク機能付きのWebカメラを利用する方法もありますが、ロボットの駆動音を考慮し、エコーキャンセルが有効でそれなりの音質や収音性の物を選定します。
Webカメラ Homemax ウェブカメラ 720p HD 30fps 高画質 100万画素
今回は1対1の対話ができる想定で、簡易なwebカメラを用います。ただ、後述のように振動・落下防止のためテープで固定するので、傾きを変更できる機種を推奨します。また、防犯・監視目的の場合、用途に応じてより高画質・広角なカメラに差し替える方が良いかもしれません。
以上が今回必要な機材です。細かい機材を揃えるのが面倒ならノートPC1台でカバーする方法もありますが、カメラ画角・振動・音質(エコーキャンセル)等の影響で、ビデオ通話の品質が悪く感じられるかもしれません。
取り付け方法
テレイグジスタンスロボットとして運用するためには、通話用のインターフェースを人の目線を想定した高さに配置する必要があります。ロボットの天板にはいくつかのねじ穴が開いているので、これを実寸して、MISUMIなどから適時フレーム材を購入して、別途組付ける必要があります。ここでは、設計する上での必要最低限の要件についてまとめます。
まずモニタの位置を考慮します。対話者の身長差及び見下ろして対話する想定から、目線を少し下げて地上110㎝程度の位置をモニタの中心とします。更に可能であれば、モニタの傾斜を調整する機構もあると良いでしょう。
通話に必要な機材は、専用設計による固定だと安定しますが、カメラやマイクは流通商品や用途に応じてかなり流動性が高いので、ここでは天板を作ってそこにテープで固定するようにします。天板は場合によってPCの操作としても使えるよう、28㎝各の正方形とします。
モニタと天板上の機器が干渉しないように、モニタの下端が一番下がる状態から天板まで最低6㎝程度の余白が必要です。ここから天板の高さを逆残します。
ざっくりと図を起こすとこのような感じです。あくまで概寸なので、実際の設計時にはちゃんと寸法を実寸して精密に計算してください。
システム構成
本システムは主にロボット・クライアント(PC・タブレット等)・独自クラウドサーバの三つで構成されます。それぞれの関係性は下図の通りです。
クラウドサーバはgoogle firebaseを利用しています。Firebaseは、webサービスを迅速かつ容易に開発できるサービスで、リアルタイムDBのFirestore、nodejsでwebファンクションを実行できるCloud Function、htmlなど静的なwebコンテンツを提供できるFirebase Hostingと言った便利な機能が内包されています。
今回は、クラウドサーバ上でロボットとクライアントのマッチング及びビデオ通話・操作パネルを提供します。通話が成立すれば音声・映像はzoom社のサーバを通じて行われますが、ロボットの操縦はクラウドサーバ内の機能を利用して行います。アプリはクラウドサーバ上で完結するため、クライアントは、プラットフォームに関係なくwebブラウザでアクセスすればロボットを利用できます。
なお、2020年9月現在、Firebase functionを利用するには従量課金プランでの利用が前提となり、クレジット情報が必須となります。実際には無料枠があるため、本件をロボット1台で個人利用する程度であれば無料、もしくは請求が発生しても数円程度※と少額なケースが多いです。
※参考として、本記事制作にあたり発生したfirebaseの請求額は、月間で3円でした。
zoomの準備
Zoomの新規アカウントを作成し、そのアカウントの個人用ミーティングで通話を行います。ロボットが個人のアバターとなるイメージです。また、一部の機能を利用するため、zoom SDKを登録しAPIキーを取得する必要があります。
zoomアカウントの作成
下記webページより、ロボット用のzoomアカウントを新規作成してください。既に利用できるアカウントをお持ちの場合は、それをご利用いただいてもOKです。
個人ミーティングID・パスワードの確認
ミーティングに関する各種設定を行います。設定は下記のzoom内の個人プロフィールページで行います。ログインを求められたら、先ほどzoomアカウントの作成時に設定したメールアドレスとパスワードでログインしてください。
設定ページの「ミーティング」→「個人ルーム」を表示し、ミーティングIDとパスワードを確認してください。パスワードは「表示」をクリックすると表示されます。これらの情報は重要ですので、関係者以外に漏らさないようにご注意ください。また、セキュリティの観点より、パスワードは定期的な変更を推奨します。
ミーティングの設定
遠隔から手動操作なしにスムーズにミーティングを開始できるよう、設定を変更します。
「ミーティング」→「個人ルーム」のページの下部にある「編集」ボタンをクリックし、下図のように「待機室」のチェックをOFF、「ビデオ ホスト」の項目をONにします。これで、クライアントがミーティングに接続したら、すぐにミーティングを開始し、ロボット側のビデオもONになります。
続いて、Webページ左の「個人」欄にある「設定」をクリックし、細かいセキュリティ等の設定を行います。
差し当たり、代表的な項目設定を列挙します。
「待機室」はOFFにします。先程と同様、手動操作なしでミーティングを開始するための変更です。
招待リンクにパスコードを埋め込まないようにします。今回のシステムでは招待URLの生成は直接的には関係ありませんが、待機室をOFFにしてミーティングの開始を自動化するため、今後同アカウントを運用する際のセキュリティ強化のため変更します。
認証されているユーザしかwebクライアントからミーティングに参加できないようにします。こちらも、ミーティングの自動化の関係で、無関係な第三者からのアクセスを極力排除するための設定です。
ホストビデオをONにします。自動的にロボット側のビデオをONにするための設定です。
遠隔操作をOFFにします。セキュリティ強化を考慮した変更です。
上記は、極力ロボット側の操作を自動化するためにしていますが、運用上ロボット側の操作を容認できるなら、セキュリティレベルに合わせて待機室やビデオONの設定を行ってください。その他、設定ページでは、画面の共有方法などミーティングに関する設定を行うことができます。用途に応じて必要な設定をご確認ください。
zoom SDKの登録
ZoomSDKに登録してAPIキーを取得します。具体的な手順は下記のwebページを参考にしました。
https://qiita.com/nanbuwks/items/ed74a76a0f294c0bf4ed
まず下記URLにアクセスし、作成したzoomアカウントでサインインしてください。サインインしたら、ページ上部のDevelopのプルダウンより「Build App」をクリックします。
「JWT」のCreateをクリックします。
続いてアプリ名を求められるので、任意の名前を入力してください。
アプリの詳細を入力します。最低限、入力必須項目のみ埋めればOKです。
Continueで進めると、次のページに「API Key」「API Secret」が表示されるので、それぞれ数値を確認してください。これらの情報は後で使用します。また、これらの情報が外部に漏れないように注意してください。
あとは、Continueを押していって最後まで進めれば、自動的にアプリがアクティベートされて終わります。
記事が長くなったので、若干中途半端ではありますが、今回はここまでとします。次回はFirebaseを使ってクラウドサーバ側の実装を進めていきます。