« 2015年10月25日 - 2015年10月31日 | トップページ | 2015年12月13日 - 2015年12月19日 »

2015年11月25日 (水)

週刊ROBIを作ろう(75)

今は、秋たけなわ。
都内でも紅葉が見られ・・というよりも、枯葉が風に舞っています。
あと1ヶ月でクリスマスですね。
寒暖の差が激しい今日この頃、皆様、お体をご自愛ください。
Illust1935

●ロビにモーションを付けてみる(その2)
いろいろやる事が多すぎてブログの更新が遅くなってしまい、誠に申し訳有りません。

前号に引き続き、ロビの「村まつり」を歌うモーション(RM4)を作成していきます。

○「ロビ モーションエディタ」
前号、「ロビ モーションエディタ」でやり残した作業として、「イントロ(前奏)部」(Mura01a.RM4)のモーションデーターに、BGMの音声(wav)データーを組み込む事にします。
まず「ロビ モーションエディタ」で、「イントロ(前奏)部」(Mura01a.RM4)を読み込み、画面上部中央付近にある「前後処理」ボタンを押します。
すると「開始/終了処理設定」ウインドーが開きます。
Robi_editor01a1
「前後処理」ボタンで開く「開始/終了処理設定」ウインドー

まず、「開始時」欄に「レ」点を付け、次に「参照ボタン」を押して、前号で名前を付けて格納してあるBGM(Mori.wav)の音声ファイルを選択します。
また、モーションプログラム開始と同時にサーボにトルクが入るように、「サーボトルクON」にも「レ」点を付けておきました。
そして「OK」ボタンを押し、「プログラム書き出し」ボタンで「(Mura01a.RM4)のモーションデーター」を指定してファイルを上書きします。
これで、Mura01a.RM4というモーションデーターを動かせば、BGM音声再生と同時に、モーションが開始されるようになりました。

ただし、音声ファイルの再生時間よりも、モーション再生時間の方が短い場合、音声ファイルの音声が濁った音になってしまいますので注意が必要です。
今回、「Mura01a」~「Mura01d」の4つのファイルを組み合わせると、音声ファイルと同じ再生時間になるようにしました。

○モーションRM4ファイルを編集
前号でキャプチャーした以下の4つのモーション(RM4)ファイルを用意します。

それでは、前号でキャプチャーしたモーションを順に列挙してみます。
①「イントロ(前奏)部」    Mura01a.RM4(BGM音声付)
②「歌前半フレーズ」     Mura01b.RM4
③「歌後半フレーズ(1番)」 Mura01c.RM4
④「歌後半フレーズ(3番)」 Mura01d.RM4

これのモーションデーターを、BGMに合うように①②③②④という順に並べ替えます。

①「イントロ(前奏)部」    Mura01a.RM4(BGM音声付)
②「歌前半フレーズ」     Mura01b.RM4
③「歌後半フレーズ(1番)」 Mura01c.RM4
②「歌前半フレーズ」     Mura01b.RM4
④「歌後半フレーズ(3番)」 Mura01d.RM4

○RM4データーの組上げ
それでは、具体的に作業を進めていきましょう。

メモ帳(エディター)などで「新規作成」を選択、空白のテキスト画面を開き、先ほどのRM4ファイルを順に貼り付けていきます。

①「イントロ(前奏)部(Mura01a.RM4)は全てのデーターを貼り付けます。
「Mura01a.RM4」をメモ帳(エディター)などでテキスト画面開き、「全て選択」を選びコピー。
続いて、「新規作成」での空白テキスト画面に「貼り付け」ます。

次の②Mura01bについては、読み込んでテキスト画面を開き、上から4行以降の残り全てをコピーします。
言葉を変えると、1~3行目を除いた残り全ての部分という事になります。
Robi_scope04f
4行目以降を選択

そして、先ほど貼り付けた①Mura01aデーターの最後尾部分に貼り付けます。

同じ作業を、最後尾部分に③②④の順に貼り付けていきます。
これでアクションプログラムの貼り付け作業は修了となります。
何か名前を付けて(例:Mura01など)「ロビのココロ」に保存すれば、ロビがモーション付きで歌をうたってくれる事になります。

次に、BGMとなる音声(wav)ファイルを「ロビのココロ」の「voice」フォルダーの中にある「music」フオルダーの中にコピーします。
この「ロビのココロ」をロビ本体に入れておかないと、ロビが「森の鎮守・・♪」を歌ってくれませんので注意が必要です。

●テスト前のモーションをチェック
出来上がったモーションが正しく組みあがっていて、音声ファイルが「ロビのココロ」に入っていれば動いてくれる筈ですが・・・
新規に組み上げた時の一発勝負は、意外と動いてくれません。

わたしは、クラフト親父さんの「「ロビ モーションエディタ」」でモーションデーターを作成し、そのデーターを編集&チェックをする時にはmiconoさんの「Robiscope」を使用するようにしています。

先ほど編集したMura01aファイルを「Robiscope」で開いてみます。
まず、「Robiscope」左上にある「ツールウインドー」の上から4つめにある「RM4フィアルを開く」ボタンを押し、Mura01aを開きます。
Robi_scope07a

○通常処理
1番上の行にカーソルを合わせ左クリックすると、選択した行が青く、次に進む行が緑で表示されます。
ループ処理で分岐する部分以外は、基本的に次の行が緑色になっていなければいけません。
上の行からキーボード「下矢印キー」を押して、次の行が緑色になっていから順番にチェックしていきます。
Robi_scope07b

○ループ(繰り返し)処理
チェックする行が進んでいくと、ピンク色に表示される部分が出てきます。
ここが、ループ(繰り返す)処理で、条件内なら「元に戻る」、それ以外だったら「先へ進む」という分岐を判定する部分になります。
Robi_scope07c1
クリックで拡大

条件内なら・・は緑色、それ以外・・の部分はピンク色で表示されます。
この分岐は条件内なら・・の緑色がありません。
戻る行を指定しないかぎり、このプログラムは動きません。

①戻る行をさがす
戻る行は「ポーズ1」~「ポーズ4」の上にある「RBMOTION CHECK COUNTER」 X=X-1となり、11行目となります。

②戻る行を指定
戻る行のとび先を指定するには、右欄上側にある「次の行き先(Next)」の右にある数字を選択します。
すると、選択できる行番号が表示されますので、「11(行目)」を指定します。
Robi_scope07c2
クリックで拡大

「11(行目)」を指定した事により、戻る行は緑色、それ以外の行はピンク色で表示されました。
このように分岐を判定する行は、緑色とピンク色の行がペアになっている必要があります。
Robi_scope07c3
クリックで拡大

ループしている行は、その先にもう1つあります。
先ほどと同様に戻り先をみつけ、Next欄で戻る行を指定してください。
Robi_scope07d
クリックで拡大

上から下の行までの飛び先を全てチェックしたら、今迄修正した内容をモーションデーター(Mura01a)に上書きします。
修正結果を反映するボタンが左上で赤く光っていますので、クリックすれば上書きが完了です。
Robi_scope07e

以上で、作成したモーションデーターは内容が間違ってなければ動くはこびとなりました。
  
○モーションデーターのテスト
1)「ロビボイスコンバーター」

「FlashAir」や「USB」でロビとPCを接続をされている方は、クラフト親父さんの「ロビボイスコンバーター」により、先ほどのプログラムの単体テストを行なう事が出来ます。

具体的には、PCの適当なフォルダーに先ほどのプログラムを入れた「ロビのココロ」をコピーしておきます。
次に「ロビボイスコンバーター」でこのモーションファイルを選び、「直接送信」ボタンで実行させます。

ロビ本体に装着する「ロビのココロ」の書き換えを行なわず、PC側の修正・改良作業で事が運びますので非常に効率的です。
そして気に入ったモーションが完成したら、ロビ本体の「ロビのココロ」を書き換えるなどしてください。
「ロビボイスコンバーター」の詳細は、クラフト親父さんのHPを参照して頂ければ・・・と思います。

2)「ロビのココロ」のモーションファイルを書き換える
これから行なう作業により、「ロビのココロ」の中身が変更されてしまいますので、トライされる方はかならずバックアップを取り、元に戻せるようにしておいてください。
作業はあくまでも自己責任でお願いします。

たとえば、「なんでやねん」というと、ロビが「えへ!」と答える「545えへ9.RM4」というモーションファイルが、「ロビのココロ」のホルダー「6」の中に入っています。

バックアップを取った「ロビのココロ」を使用し、この「545えへ9.RM4」の中身を、先ほど作成したモーションデーターに書き換えると、演奏モーションが始まる準備がととのった事にになります。
先ほども述べましたが、BGMとなる音声(wav)ファイルのコピーを忘れずにしておいてください。

以上の作業で、ロビのスイッチを入れ、「なんでやねん」と声をかけると、モーションデーターが正常でしたらアクションが始まります。
動作の様子は、前号でHD動画「ロビの村まつり」をご覧にいれましたので、宜しければご覧ください。

●3アクションに改良
その後いくつかの改良をして、「村まつり」のプログラムの中に「炭鉱節」を組み、1つのプログラムで3つのアクションが楽しめるように改良しました。
1)ロビがイスに座っている時 「村まつり」
2)立っている時         「炭鉱節」
3)座った状態          「立ち上がる」+「炭鉱節」
ロビに「体重は?」と声をかけると、この3アクションのどれか・・が始まります。

「炭鉱節」は盆踊り風な振り付けにしようとしましたが、わたしには踊りのセンスも知識もありません。
そこで、Youtubeでも有名な、”とうはくさん”のロビモーション動画などを参考に、見よう見真似で「なんちゃって盆踊り」風に仕上げてみました。
宜しければご笑覧いただければ・・・と思います。

3アクションの中の「炭鉱節」 HD動画

11月中旬にKENさんのロボ集会があり、参加された方々に恥ずかしながらこの「3アクションプログラム」をお披露目させていただきました。
その節は、暖かいご声援ありがとうございました(涙)
出来栄えはともかく、これらの作業で、「アクションプログラムの組み立て方」のさわりが理解出来たのでは・・と感じています。

●「メモマップ」ってなに?
ロビのモーションプログラムを触っているうちにいろいろ分かってきた事があります。
「ロビのココロ」の中に「ini」フォルダーがあり、その中に「メモマップ(memmap.csv)」というファイルがあります。

この「メモマップ」は、ロビの状態管理(姿勢、首の位置、電圧、サーボ角度・トルク、人感センサー、音声認識)や、ユーザメモリーなど、ロビの運用に関わる重要なファイルとなっています。

このファイルはCSV形式ですので、エクセルなどカルクソフトをお持ちの方であれば、中身をご覧頂けると思います。
1列目は「関数名」、2列目は「関数の桁数」、3列目は「その内容」となっています。

ロビの電源を入れると、ロビの現在の状態をこの「メモマップ」に書き込み、それに従って、姿勢を制御や、「お腹がすいた」などのモーションが始まります。
また、音声応答で動き出したモーションプログラムでは、この「メモマップ」の内容を読み取り、次のモーションプログラムに分岐させていくような仕組みになっています。

先ほどの「3アクション」モーションプログラムで説明します。
姿勢関数(NowPose)はX:0F82(0x0f82)となっており、ロビの状態が「立ち位置では0」、「座り位置では1」、「イス座り位置では2」というように、状態に応じた夫々の数値が入っています。
この数値を読み取る事により、立ち上がらせたり、何を踊るか?などの判定が可能となり、夫々のアクションに分岐させます。
ちなみにエクセルで見た場合、姿勢関数(NowPose)X:0F82(0x0f82)は313行目になっています。

また、電圧監視関数(Voltage)はX:0090(0x0090)となっており、実際の「ロビのココロ」では、値が2000を下回ると「お腹がすいた」などのモーションプログラムに飛ぶようになっています。

○プチ・プログラム
これを利用して、「ロビの内部電圧により目の色を変える」などのチェックプログラムが簡単に作成できます。

わたしは、mikonoさんの「Robiscope」を利用して、簡単なプチプログラムを作成しました。
内容は、電圧監視関数の値を読み取り、その値により目の色を変えるだけです。
2000より上なら「緑」、同じなら「黄」、下なら「赤」を其々3秒間表示して終了・・・という感じです。
Robi_scope06
非常にシンプルな「電圧チェックプログラム(Robi_Vcheck)」

こんな簡単なプチ・プログラムでも、ロビがそのとおりに動いてくれると嬉しくなるものです。

いくつもの組み合わせではなく、単機能の動作確認だけですので、組む時間、そのテストなども短時間で出来てしまいそうです。
現在トライ中のプチ・プログラムの例です。
 ・サーボトルクのON/OFF
 ・目の感熱センサーの左右差異による首の回転・目の点滅
 ・性格の変更
 ・音声認識の活用他
 ・メモリー利用の「複合(入れ子)ループ処理」、フラグ活用等

各々の動作原理や機能の理解を積み重ねておけば、次のモーションプログラムを作るときに、いろいろ組み合わせたプログラミングが可能となり、なにかと役立ちそうです。
みなさまもプチ・プログラムにトライされてみては如何でしょうか?

『「ロビのココロ」は、テクニックの宝石箱や~』

Illust2702

●「FlashAir」の収納

モーションによる振り付けなどを始めてみましたが、背中でブラブラしている「FlashAir」に閉口しだしました。
腰を回転するモーションでは、遠心力で近くのものに当たったり、背中に収納させようとすると、肩サーボの連結金具にあたってしまいます。
「FlashAir」保護のためにも、なんとかしなければいけないと思いました。
Robi_flashair01
改造前の剥き出しになった「FlashAir」

そこで思い出したのが、先日「ロビ東京例会」でお会いしたKMXさんのロビくんです。
なんと、「FlashAir」が内蔵されてるのに、背中のふたが閉まっているのです。

早速、KMXさんにお願いして背中の中を見せていただきました。
すると、マイコンボードと胴体右側壁の間に「FlashAir」がきれいに収まっていました。
さすがロボットの達人!
見えないところに、さりげなく凄い改造を施していっらしゃいます。

数日後、あの凄いアイデアを思い出しながら、うちのロビにも改造を施してみました。

方法は、右ボディの側面、裏側にあるマイコン取り付けの出っ張りや梁などを、左ボディの平面部分のようになるまで削ります。
出っ張った梁部分を削った事による強度の保障については??ですが、今の所、全く問題は出ておりません。
たまたま、右ボディのスペアを持っていたので、心おきなく削れました。

さらに、「変換名人」をケーブル長が60mmの変換アダプターに交換し、マイコンボードの周囲を巻きつけるように裏側に回してとめました。
これにより、マイコンボードとボディ右側面の間から「FlashAir」が顔を出すようになります。

とりあえず固定はせずにマイコンボードの背中に「FlashAir」を詰め込んでみると、背中から2~3mmくらい「FlashAir」がはみ出してしまいます。
これでは、背中のふたが閉まりません。
Img_2060
少しはみ出ている「FlashAir」、となりはマイコンボード

一方、マイコンボードの発熱が気になります。
そこで、外部電源の電圧を8.6Vまで下げ発熱を抑えました。
さらにマイコンボードの背中と「FlashAir」の間に、プラスチックでセパレーターをつくりました。
これにより、すこしでも熱を逃がす作戦です。
Dsc00357
改造後は「FlashAir」がすっきり?収まった

この状態でいろいろアクションさせてみましたが、「FlashAir」がブラブラしなくなったので当面の問題はクリア・・となりました。
「FlashAir」のはみ出しについては、あわてず騒がず解決方法を考えていこうか・・・と思っています。
KMXさん、素晴らしいアイデアをありがとうございました。

なお、改造にトライされる方は自己責任でお願いします。
Illust2702_2

現在、仕掛中のものがいくつもありますので、次号の内容はおって考えたいと思います。
宜しくお願いします。

つづく

| | コメント (4)

« 2015年10月25日 - 2015年10月31日 | トップページ | 2015年12月13日 - 2015年12月19日 »