スポンサーサイト
-- / -- / -- ( -- )
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
にほんブログ村 科学ブログ ロボットへ
にほんブログ村
-- : -- : -- | スポンサー広告 | page top
ロビ オリジナルダンス♪(My Sharona)
2014 / 11 / 13 ( Thu )
miconoさんソフトの動作確認をさせていただくために、モーションを作ってみました。

実際に、「ミュージックスタート」で動作させます。



まだまだ、テンポの微調整が必要です(^^ゞ
にほんブログ村 科学ブログ ロボットへ
にほんブログ村
スポンサーサイト
22 : 49 : 08 | ロビ遊び | トラックバック(0) | コメント(0) | page top
ロビに5曲歌わせるには♪
2014 / 11 / 08 ( Sat )
ロビのココロについては、私の知る限り、miconoさんや、クラフト親父さん、Jijy Tadanoさん、KMXさん、のほほんさん、稲川さん、ロボじいZさん、たけぽん@町田さんなど、様々な勇ましき先達たちが既に解析を進めておられますが、私のようにソフト苦手系でも、少しでもつつく事が出来れば楽しみも増えるので、いじりたいけどいじれないというお悩みの方のお役にたてればと思い、テキストエディタや、miconoさんのツールを使って編集する方法などを記録しておきます。
(5曲歌わせる方法だけ知りたいという方は、記事の後半です。)

後日追記:6曲歌わせるバージョンを作りましたので、こちらがオススメです。


☆ロビのココロについての概要

ロビは起動時に、まず、StartUp.XML内の、音声のアッテネータや、サーボの補正値、起動モーションで指定されているファイルを読み込み実行します。

初期状態で指定されている起動モーションの、「main5_InitFlag確認補完無し_シーン1固定0415_test2.RM4」では、サーボの角度を読み込み、今現在、立ち状態なのか、座りか、腰掛けか、ポーズの判定と、充電状態の確認、また、初めての起動なのかどうか「9/000初期性格決定2.RM4」を呼び出し、その中で判別しています。

この時、性格決定が未実施であれば、この中で質問の流れが決められていて、質問終了後に、性格決定され、「9\616これでおしまいこれからよろしくね.RM4」が読みだされ、その後、性格に応じて、
聞き音声にモーション4.RM4  (ノーマルの場合)
聞き音声にモーション4Y.RM4 (やんちゃの場合)
聞き音声にモーション4N.RM4 (能天気の場合)
のいずれかが呼び出されます。

この「聞き音声にモーション4.RM4」では、ロビ認識語フォルダ中の、NF○○○の番号に応じた、番号が音声認識ボードからI2Cバス経由で送られてくると、それに応じた動作ファイルが指定されています。

たとえば、こんにちは(NF26.WAV)と話しかけると、音声認識基板から、「26」が送られてきて、「1\036_こんにちは9.RM4」を実行するようになります。

一つのブロックの比較分岐等の演算終了後、次に実行する内容については、
< jump adr="0x0000312b"/ > こんな形で移動先が指定されています。

これは、ファイルの先頭から何バイト目に移動するという意味で、16進数(HEX)で表示されています。電卓やエクセルを使って、10進数(DEC)に変換すると、上の場合だと「12587」となります。
バイト数を数えることのできるエディタ(秀丸や、サクラエディタ)で、同ファイル内の12587バイト目を確認すると、以下の画像の通り、type=5(外部ファイルの呼び出し)で「1\036_こんにちは9.RM4」を実行するよう指定していますね!
パソコンの電卓でも出来ますが、下のようにエクセル関数でも変換できます。

jump先

詳しくは、micono師匠の、「週刊ロビ 増刊74号:ロビのココロを探る4」を参照ください。
ブロックのtype等も全て解析されています。ほんまにスゴイなぁ。

そして、中身を見てみますと、
< block name="こんにちは" type="1" xpos="0" ypos="1131" bluearrow="17" redarrow="46"/ >

typeの後の、xyポジションや青、赤の矢印の指定は、ロボビーXで添付されているRobovieMakerのエディター上のブロックや分岐矢印の配置を表しています。

Robovie Maker2


とういことで、残念ながらRobiではこうしたツールは公開されていないため、私達ロビオーナーは、miconoさんのServo Tester for Robiを使わせていただくわけであります。jump先の16進数を変換して移動先を調べたりせずとも、ブロックごとにIDを振っており、誰でも編集できるようになっています。文字数数えながら編集していたら大変なので、本当に便利なツールです!
(2014/11/8現在、win版のバグ修正中のご様子ですが、以下の作業は可能です)

ということで、既に色んな方に公開されている内容ですが、このツールを使って、Voice/Musicフォルダ内の初期状態では再生されないロビの歌を歌えるようにしてみたいと思います♪

☆5曲歌えるロビにする

ロビの待ち受け状態で実行されているプログラム「聞き音声にモーション4.RM4」を、先ほどと同じ要領で、ジャンプ先を追い続けるのは、果てしなく大変なので、miconoさんのソフトで、開いて「歌うたって」に反応する箇所を探します。
ロビの認識するセリフがずらーっと並んでいて、ID175の所に「歌うたって」があります。その音声を認識すると次のジャンプ先のIDは、ID355となっていて「ランダム\86,177.RM4」が呼び出されることが分かります。
このランダムフォルダでは、ロビがいつも同じ反応をせず、ランダムな応答をするように次に呼び出すファイルをランダム化するためのファイルが格納されています。

つぎに、この86,177.RM4をmiconoさんソフトで開いてみます。
IDは、ファイルの上から順に割り振られていますが、実際の実行順序は上にいったり下に行ったりしており、少し分かりにくくなっているようです。Next IDをチェックしつつ並べ直し流れを見てみると、

・ランダム値を取得 : mem_r size="4" adr="0x0084" , mem_w size="2" adr="0x0f00"
・最上位ビットを0にする : x = x and 32767 , mem_w size="2" adr="0x0f00"
・ランダム値を収める(2値(0,1)のうちいずれか) : x = x mod 2 , mem_w size="2" adr="0x0f00": 
・数値は0? 0なら、9\songsouji3.RM4を実行 false(0でないなら)9\songtimer3.RM4を実行
・End of file

********** 少し解説 **********
ここは分からなくても問題ありませんが、まず、ランダム値が格納されている0x0084番地から、4バイトのランダム値を0x0f00へ書き込みます。次に0x0f00を「正の数」とするために最上位ビットを0にします。ソフト上で使用する言語の約束事です。その為に、32767の論理積(AND)を取る、つまり7FFF(HEX)、0111・1111・1111(BIN)を掛けることで、最上位ビットが0になります。そして出来上がった正の数のランダム値の商をとり、その余りをを0x0f00に書き込みます。どのようなランダムな値でも正の整数なら、2で割った際の余りは、0か、1の2通りしかありません。5なら0~4の5通りとなります。5曲をランダムに選択する場合は5で割った際の余りを書き込みます。
*******************************

ということで、分岐先を2種から5種に増やしてみます。

・ランダム値を取得
・最上位ビットを0にする
・ランダム値を収める(5値(0~4)のうちいずれか)
・数値は0? 正しければ、9\songsouji3.RM4を実行、正しくないなら、次のIDへ
・数値は1? 正しければ、9\songtimer3.RM4を実行、正しくないなら、次のIDへ
・数値は2? 正しければ、9\songhagema.RM4を実行、正しくないなら、次のIDへ
・数値は3? 正しければ、9\songisoga3.RM4を実行、正しくないなら、9\songsanjyo.RM4を実行
・End of file

とういことで、こんな感じに編集します。

5曲ランダム化

jump先までのバイト数は自動で合わせてくれるので、ファイル名の文字数を無理に合わせる必要はないのですが、無意識に合わせてしまいました。

そして、この時、実行する、9\songhagema.RM4、9\songisoga3.RM4、9\songsanjyo.RM4は、まだないので、合わせて作ります。

既存の、9\songsouji3.RM4か、9\songtimer3.RM4をコピーし、リネームして、呼び出す曲ファイル(.wav)のパスと名前「voice\Music\timer.wav」を、9/songhagema.RM4を作成する場合は「voice\Music\hagemashi.wav」に置き換えればOKです。
songsoujiは、30秒少々の長さで、モーションもそれに合わせてsongtimerよりも長めになっています。未公開となっていた3曲は短めなので、songtimer3.RM4をベースに使うほうが良いです。立ち/座り/腰掛でモーションが異なるため、1ファイル中に、3か所、ファイル名を書き換えるところがあります。

(後日追記:6曲歌わせるバージョンを作りましたので、こちらがオススメです。)


曲書き換え


hagemasiと、isogashiは、そのままでほぼ一致します。
ですが、robisanjyoは、最後のタイミングが会わないので、微妙にモーションを短縮化(数百ミリ秒)します。
500ms以上あるようなモーションの数値を100msずつくらい適当に短縮するのがてっとり早いです。

ということで、少し頑張れば、編集可能なので、ロビネタとして紹介させていただきました。
ダウンロードしたい方は、コチラから出来ますが、ご自身でトライされるのも楽しいですよ!

ロビパパ倉庫へ


☆1曲目ランダムで、毎回違う曲を歌わせる

ランダム化してみて、ロビに何度も何度も歌わせて、5曲登場することを確認したのですが、少々面倒で、歌わせてみると同じ曲が連続することもありました。ですので、変数を増やして、最初歌わせるとランダムに選択するものの、その後は「歌うたって」というたびに必ず違う曲を歌うようにしてみました。(callされると、次の曲を呼び出すようになります。)5曲あるのでランダム感も損なわれず!? 5回歌わせると、確実に全曲を楽しめるので、オススメです
とうことで、毎回違う曲を歌うバージョンは、ロビパパ倉庫の、ロビに5曲歌わせる 2 で公開しています。

ロビパパ倉庫へ

ロビの起動時に、2回目以降かどうかを判断する変数が初期化されているか未確認ですが、スイッチを入れ直して歌わせると、ちがう曲で始まるのでそのままにしています。きっと初期化されているのでしょう(笑)




にほんブログ村 科学ブログ ロボットへ
にほんブログ村
13 : 09 : 06 | ロビのカスタマイズ | トラックバック(0) | コメント(4) | page top
ロビの修理・・・『肩のサーボの故障』
2014 / 11 / 02 ( Sun )
とっても大事にしていたのに、壊れて動かないサーボがある・・・・・

オーパッキャラなんとやら・・・(^^ゞ

突然、ロビの肩のサーボが動かなくなった・・・
サーボの回路

根拠のない大きな自信があり、不具合など起きないつもりだったのに・・・ショック(>_<)

ロビの肩のサーボは、この図面の通り、肩を経由して腕や肘のサーボへも、信号と電源を供給している。
また、両腕が同一の制御ラインになっているのも、重要なポイント。
つまりロビの腕は、信号のショートが起きると、両腕同時に動かなくなる。

しかし、うちのロビは、左肩のサーボだけが動かない・・・
症状は、シンプルで、種々の動作をしている時に、左肩のみトルクがオン状態にならず、手でウィーンウィーン軽く回ってしまう症状・・・
信号のショートではないし、肩より先のサーボが正常に動作するから、コネクタの接触不良でもない。

よってサーボの個別不良と断定できますね(^^)

でも、肩サーボって、ロビの中では、一番面倒な部位・・・

下半身も外し、頭も分解しなくてはなりません・・・マジか・・・

バラバラ分解

泣く泣く分解・・・・

取り出したサーボを、サーボテスターで確認すると、LEDが高速点滅状態でサーボのマイコンと通信できておらず、見事にサーボの不良だった。最初は問題なかったことを考えると、静電気か半田不良でしょう。

とりあえず、スペアのサーボで組み立てることにしたものの、久しぶりに中を見ると、USBシリアル変換回路、半二重回路、SDアクセス切り替えスイッチ等を全部内蔵させたボディが、もとに戻るか心配でした・・・。

ぎゅうぎゅうですもの(^^ゞ

半二重回路

とかいいつつ、見事に、復活!!!ヽ(^o^)丿

復活ロビ1

かっこかわいいRobiの復活だーい!!!

復活ロビ2

右腰付近にございますのは、ご自慢の(笑)USBコネクタと、
USBコネクタからの信号の、 マイクロSD / シリアル変換+半二重to全サーボと、
全サーボ制御線の、 マイコン / 半二重+シリアル変換toUSB、の
切り替えスイッチ類。

そこを触られると、サーボが全部パソコンに乗っ取られてしまって、
ボクの意志で体が動かせなくなるので、触られたくないのです・・・(◎_◎)


にほんブログ村 科学ブログ ロボットへ
にほんブログ村
23 : 57 : 00 | ロビの修理 | トラックバック(0) | コメント(2) | page top
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。