歩行プログラムの謎
2014年8月31日
2014年9月1日改訂


 ロビに長距離歩行をやらせてみたでロビの歩行距離を延ばす方法をご紹介しましたが。
 時々修正前の2歩で止まってしまう事があります。
 そこで歩行に関するプログラムを解析してみました。

 まずロビが音声に反応するため「聞き音声にモーション4*.RM4」というのが動いています。
 このプログラムはロビの性格により異なり「聞き音声にモーション4N.RM4」が脳天気で「聞き音声にモーション4Y.RM4」がやなちゃだと推測されます。(実際に確かめた訳ではないのでちがっていたらゴメンなさい)(記事末尾参照)
 ノーマルの場合「聞き音声にモーション4.RM4」なのでこれを調べてみました。

 音声「歩いてきて」「こっちへおいで」「こっちに来て」「前に進んで」「前に来て」「近くに来て」「こっちにおいで」に対しては同じ処理をします。
 まず「ランダム56-63.RM4」というプログラムを呼びます。
 これはロビの応答の音声をランダムに発するものだと思います。
 次に000クレのみスイッチ切って3.RM4というプログラムが呼ばれていますが何をするものか分かりません。(歩行には関係ないと思います)

 次に「000起き上がり歩行9.RM4」というプログラムが呼ばれますがこれがロビの歩行プログラムを決定するものです。
 どのプログラムが呼ばれるかはロビの状態によって決定されます。



 まず「立ち状態?」かどうかチェックします。
 立ち状態であれば「右向き?」かどうかチェックします。
 右向きであれば「歩行右4S.RM4」というプログラムが呼ばれます。

 同様に「正面向き?」や「左向き?」がチェックされます。
 正面向きなら「歩行4S.RM4」が呼ばれ、左向きなら「歩行左4S.RM4」が呼ばれます。

 ロビの向きはサーボの状態(角度)を読み取って行われるのだと思いますが、正面を向いているように思ってもサーボの状態によっては歩行右4S.RM4や歩行左4S.RM4が呼ばれてします事があるようです。



 「歩行右4S.RM4」と「歩行左4S.RM4」にも「歩行4S.RM4」と同様の修正を行えばどの状態でも長距離歩行できるはずですが今回は違った方法でやってみました。



 ロビのSDカードの「1」フォルダーにある「000起き上がり歩行9.RM4」を修正します。



 メモ帳等で33行目のJUMP先を変更します。メモ帳の場合、編集メニューの「行へ移動」コマンドで行番号を指定すると目的の行にカーソルが移動します。
 0x00000460は、ロビが立ち状態なら向きのチェックにJUMP先のですがここを正面向き?のチェックでYESの場合のJUMP先(0x00000dd2)に変更します。
 これでロビの向きには関係なくロビが立っている時は正面向きと判断して必ず「歩行4S.RM4」が呼ばれるようになります。



 修正後もバイト数が変わらない事を確認します。
 なお修正に当たっては必ずオリジナルファイルのバックアップを取っておいてください。

 今回行ったロビのプログラム変更やSDカードの書き換えは、ロビ本体への影響を伴うのであくまでも自己責任という事でお願いします。
 またロビの向きに関わらず必ず直進をするようになりますので必要に応じて元の状態に戻してください。


 聞き音声にモーション4*.RM4の呼ばれ方について調べてみました。
 これらの振り分けは、最初に呼ばれるプログラム「main5_InitFlag確認補完無し_シーン1固定0415_test2.RM4」で決定されます。
 このプログラムはサーボや音声認識などの初期化を行います。
 以前行ったロビの脱力化(サーボのトルクをONにしない)はこのプログラムを修正しています。

 まずロビの性格が「やんちゃ」かどうか判定してその場合、聞き音声にモーション4Y.RM4が呼ばれます。
 それ以外の場合は「ノーマル」かどうか判定してその場合、聞き音声にモーション4.RM4が呼ばれます。
 それ以外の場合(脳天気)は聞き音声にモーション4N.RM4が呼ばれます。

 なお「聞き音声にモーションE.RM4」は「main5_E.RM4」から呼ばれていますがこのプログラムはどこからも呼ばれていません。
 おそらくテストで使われた初期化プログラムだと思われます。
 なお最初に呼ばれるプログラム(初期化プログラム)は「STARTUP.XML」の最後で定義されています。

目次に戻る