8ロビの同期テスト
2017年10月19日
10月26日改訂
ロビ東京例会で8ロビの同期テストを行いましたのでそのテスト結果を報告します。
前回のロビクラブではFlashAirを使った同時送信のテストを行いました。
無線ルーターを介して8体のロビのFlashAirに対して同じ認識語を同時に送信して8体のロビを動かせるかの実験を行いました。
結果としては同時に動かす事はできたのですが標準のリモート接続用メインプログラムのまま行ったのでプログラムの動き出しがバラバラになりロビの動作がそろいませんでした。(下記動画参照)
標準のプログラムではアイドリング中に音声認識やFlashAirのリモートデータの読込みを行っているのでデータを読込むタイミングがロビによってバラバラ(最大1秒位)になってしまいプログラムの開始時間が異なってしまいます。
今回はメインプログラムを改造してリモートデータの読込み周期を0.04秒位にしています。
またFlashAirの送信順序やロビやFlashAirの個体差によるタイミングのずれを個別に調整する機能も付けました。
まず8ロビにリモートデータを送信して同時に動かす仕組みを説明しておきます。
ロビに搭載したFlashAirとはステーションモードでを無線ルーターに接続します。
通常はアクセスポイントモードでPCやスマホがFlashAirをアクセスポイントとして直接接続します。
ステーションモードではFlashAirに電源が入ると予め設定された無線ルーターに自動的に接続しにいきます。
PCやスマホは無線ルーターをアクセスポイントとして接続します。
どのFlashAirに対して送信するかは各FlashAirで設定されたIPアドレス(192.169.0.3x)を指定して送信します。
最新版のWindows版ロビボイスプレイヤーでは複数のFlashAirに対して操作する機能があります。
ロビボイスプレイヤーの複数のFlashAirの接続の詳細については
こちら
を参照してください。
今回のテスト用にロビのメインプログラムを修正しました。
リモート接続用のメインプログラムを改造して短い間隔でリモートデータを読むようにしました。
また個別のロビに対してプログラムを開始するタイミングを調整する機能にも対応しています。
標準のメインプログラムと区別するため目のLEDの色を変えています。
リモートデータを読み込んでいる時は青く点滅します。
リモートデータが送信されていると目のLEDは赤く点滅します。
この点滅時間がプログラムの開始を調整するタイミングとなります。
ロビの電源を入れてFlashAirが無線ルーターに接続して最初の送信は時間がかかったり送信に対してロビが反応しなかったりする事があります。
同期テストの本番前に2,3回、「挨拶して」などの簡単な命令を一斉に送信しておいてください。
今回のテストに使ったロビプログラムは以下のURLよりダウンロードする事ができます。(10月26日改訂)
sync_test.zip
詳しくは含まれるReadMe.txtをお読みください。
同時送信はWindows版ロビボイスプレイヤー(最新版)で行えます。
同時送信を行うにはメモ帳等でRBPlayer.ini(ロビボイスプレイヤー設定ファイル)の[REMOTE]に次の記述を追加してください。
[REMOTE]
FLASHAIR=192.168.0.31,192.168.0.32,192.168.0.33,192.168.0.34,192.168.0.35,192.168.0.36,192.168.0.37,192.168.0.38
FLASHAIR_TIME=10,10,10,10,10,10,10,10
FLASHAIRは各FlashAirに割り当てられたIPアドレスでカンマ区切りで接続するFlashAir分定義してください。
FLASHAIR_TIMEはプログラムの開始を調整する時間で指定した数字の時間、プログラムの開始を遅らせます。(1/30秒単位)
FlashAirに対しては順番に送信するため先に送信するFlashAirに対しては大きい数字を指定してプログラムの開始を遅らせます。
なお今回は時間がなかったので各ロビのプログラムを起動かるタイミングの調整は行っておらず全て10で指定しています。
今回のテスト結果(Excel)
です。
最初に送信したロビと最後に送信したロビでは約0.3秒位の差があります。
ただセッションが違っても(ロビの電源入れ直し)この傾向は変わらないので送信の順番よるものだと思います。
今回のテスト結果から以下のように設定するとタイミングを合わせる事ができると思います。
テスト結果(Excel)
の032_こんにちは僕ロビ9.RM4(セッション1)の受信時間のID1との差分を元に計算します。
0.00,0.01,0.02,0.03,0.06,0.07,0.10,0.11
この値の0.01は動画のフレーム(30FPS)に相当するのでFLASHAIR_TIMEは1/30秒単位なので以下のような値になります。
FLASHAIR_TIME=12,11,10,9,6,5,2,1
ただしこの値はPC、無線ルーター、FlashAir、ロビなどの実行環境によって違ってくるので実行環境に合わせて調整してください。
予想通りFlashAirに送信する順序によりプログラムが開始されるタイミングが違ってくるようです。
開始のタイミングを調整する事によりもう少し同期がとれるようになると思います。
今回の東京例会で行った同期テストの動画です。
8ロビによる踊りで踊りで後列一番左のロビが踊らなかったのは踊りのプログラムがFlashAirにコピーされておらずオリジナルのプログラムが動いてしまいました。
オリジナルは「どういたしまして」としゃべるプログラムなのですぐに終了してしまいました。
また課題としては時々、送信に対して全く反応しないロビがありました。
反応しないロビも次の送信で動くのロビが送信データを読み損ねている訳でもなさそうです。
ボイスプレイヤーは全てのFlashAirに対して連続して順番に送信しているので送信抜けが起こる事は考えにくいです。
無線ルーターの問題なのかFlashAirの問題なのかは分かっていません。
課題としては上げた時々反応しないロビの件ですが原因が分かりました。
FlashAirの特性(不具合?)でファイルの読込みのタイミングが早すぎるとデータが更新されても古いデータのまま読まれてしまいます。
8ロビで同期を取るためにかREMOTE.LOGの読込み周期を0.03秒としたのでロビのメインプログラムでFlashAirからの送信データが受け取れませんでした。
これを回避するためにREMOTE.LOGを読んだ後、データに何も書かれていない場合、読込んだデータをそのままREMOTE.LOGに書き込んでいました。
書き込む直前にFlashAirからデータが送信されると書き込まれたデータにより送信コマンドがクリアされてしまいます。
なお通常のリモート接続用のロビメインプログラムは、REMOTE.LOGを読込む周期が長いので書込み処理を行わなくても更新されたデータが正しく読み込まれます。
今回はREMOTE.LOGを書き込み処理を行わなくてもFlashAirのデータを正しく受け取れるようにしました。
なおFlashAir(バージョンではなく個体差)によっては稀にデータが正しく受け取れない場合があるようです。
その場合は再度FlashAirを立ち上げ直してください。
目次に戻る