反応速度の向上と技のキャンセル


ぱぱっちさんが、ロボゼロのプログラムの実行速度の検証 をされました。
結論として、IF文やCALL文は、いまどきのコンピューターにしてはかなりの時間を食うようです。
ロボゼロで採用されているのは、昔の8bit機のBASICのように、命令を逐次翻訳して実行するタイプのプログラム言語のようです。




さて、ロボゼロの姫路ボードとコマンドサーボの関係ですが、

1)ボードがサーボに目標位置と移動時間のコマンドを発信。
2)サーボは受け付けたコマンド通り、指定時間で動作が完了するよう最大限頑張る。
3)ボードは、自らが指定した時間だけ待った後、次のコマンドを実行する。

と言う風になっていると推測できます。




サーボの運動能力を超えた速度が必要な一連のモーションコマンドを送ると、
動作終了前に次々と新しい目標位置が指定され、十分な動作をしないということになります。

具体的かつ極端な例で言えば、0.1秒で腕を90度回す、次に0.1秒で腕を90度戻す、というコマンドを繰り返し送った場合、小刻みに震える動きになるということです。




逆に言えば、
たとえば腕を90度回すのに最速2秒必要だったとした場合、

・2秒で動作が終わるように指示

というプログラムと、

・1秒で動作が終わるように指示しつつ、
 次の行に1秒のWAITをおく。

というプログラムでは、同じ結果が得られるハズです。
サーボは新しいコマンドを受け付けるまで、現状の目標に向かい続けるはずです。





ここからが本論です。

savojitan.gif

条件判断などの重いプログラムをキビキビと実行したい場合には、
モーションの実行時間を、サーボ能力の最速完了時間よりも短く設定し、サーボの実行完了までの間に、必要なプログラム処理を行ってしまう。

ということが可能なはずです。




すぐにでも使えそうな例としては、攻撃モーションのキャンセルがあります。
パンチのモーション時間を短く設定し、
ボタンが入力されている限りループ、ボタンの入力がなければ手を戻すモーションに進む、
とすれば、ボタンを長押しすればパンチ、そして突き出した状態をキープ、
ボタンをリリースすればいつでも手をひっこめる、という動作になるハズです。

歩行モーション時に歩行を続けるかどうかの判断も、
条件判断のIF文の直前のモーションの移動時間を減らす調整をすることで、最適化されるハズです。
(ちなみに、カルネージハートというゲームで、同様のテクニックを多用して遊んでいました。)




さっそく実機で試してみました。

:RIGHT_PUNCH
;足を開いて構える
MOVE(18,-34,742,-830,0,-3,-172,370,404,-470,-30,-404,404,-10,480,-404,-370,171,0,0,815,-638,-62,-136,120)
;突き出し
MOVE(21,230,802,-455,0,-1,-172,370,404,-470,-30,-404,404,-10,480,-404,-370,171,-658,0,-46,-632,-412,-450,1)
:KEY_LOOP
JUMPIF(V121,=,64,KEY_LOOP)

;構え戻る
MOVE(18,-34,742,-830,0,-3,-172,370,404,-470,-30,-404,404,-10,480,-404,-370,171,0,0,815,-638,-62,-136,120)
;ファイティングホームに戻る
MOVE(-450,-250,931,-930,x,0,-50,383,331,-329,-60,-331,331,60,329,-331,-383,60,0,x,940,-928,260,450,240)
JUMP(KEYCHECK)

上記は、一般的なキー判定後、Aボタンで:RIGHT_PUNCHにジャンプした後の処理例です。
赤文字部分がミソで、実行速度を最短の1、その後にIF文でキー入力を再判定しています。
キー入力に変更がなければ、ループします。
この場合、

・Aボタンをちょい押しすれば、少しだけ攻撃モーションになり、その後腕を戻すフェイントのアクション。
・Aを長押しすれば、パンチが最後まで届いた後も、腕を伸ばした状態を保つアクション

となります。
行動時間がたったの1(=0.0013秒)では、腕を伸ばしきれるわけがないのですが、ループによって次のコマンドの発信を止めているので、サーボはMOVEコマンドによる指示時間に関係なく、目標を目指し続けるという仕組みです。
処理速度の都合でモーションの分解能力が思ったよりも低くなりますが、実際に、フェイントと完全パンチを使い分けられる、想定に近い動きがコントロールできました。




せっかくサーボ自体にコンピューターが搭載されているのですから、
ボードはサーボに命令を出した後は、他の作業をする分散処理になっている方が効率が良いわけで、
今回の小ネタは、自然なボードの運用方法のような気がしています。
ちょっと考えれば当たり前のテクニックなので、すでに実用されているかもしれませんが、
プラレス3四郎で言うところの「ホビー派」から「武闘派」へ、ロボゼロはまた一歩前進できた気がします。
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

No title

なるほど!たしかに、最速じゃないサーボが含まれるモーションの時は、たしかに細かな制御が必要になってしまいますね。
シンプルなパンチなどは、すべての関節がなるべく同じ角度だけ開いた時に距離がMAXになるよう、手を引っ込めたファイティングポーズを逆算して作っておくと、最高パンチスピードとキャンセル導入が同時解決しますね。
分割が必要なこともやっと理解できました。分割やMOVEコマンドのxを駆使すればなんとかなりそうですが、一つ一つ組み込むのは大変そうですね。。。一般化して一括変換できれば、理想的ですが・・・ぱぱっちさんにほんのり期待しています。

友人に作ってもらったロボ用なんちゃらツール( ttp://uterogomi.web.fc2.com/2.html ) をいじる事で私にも出来るかもしれませんが、Javaとか算数とかを1から勉強する必要があるので、ちょっと厳しいです。

自分でもうまく説明できないのですが

ニナガワさんが、発見した裏ワザだと、どのサーボも最高速度だと思います。
子供の運動会でトラックを回る場合の徒競走だと、スタートラインを横並びにすると外周の子供の距離が長くて不利ですよね。あれに例えると

①MOVE文で本来必要な時間指定した場合
 横一線でスタートするけど、内側の子供は心優しくて、走る速さを加減して全員同時にゴールする。
 つまり、全員走っている間は常に横並びのまま。
②MOVE文で極端に短い時間を指定した場合
 全員同じ足の速さだとすると、内側の子供はどんどん先に行って、(距離が短い)内側の子供が常に1位。
 つまり、内から外に向けて斜めになった状態。

①と②はスタートとゴールの位置が同じなのに、途中子供たちが描く”形”が違いますよね。
この通りだとすると、モーションAとモーションBの間の”軌跡”というか”軌道”が重要な場合、例えば

例A:ジャブを打つ場合は、手先は地面に水平にまっすぐ相手に向かって欲しい。
例B:ゼムネスの「えいえいおー」では、手先は肩口からまっすぐ垂直に向かって上げて欲しい。

というようなときは、①ならよいのですが、②にすると極端な場合、

例A:ジャブのつもりが上から下への猫パンチになってしまう。
例B:「えいえいおー」のつもりが、ヨコ方向のバイバイみたいになってしまう。

というモーションになってしまうのではないかと。
逆に”軌道”を気にしないで結果だけが重要な場合、例えば「低くしゃがむ」とか「旋回する」とかは②でも
良いと思います。

とは言っても”軌道”が重要なモーションのほうが多いと思いますので、②をやるときには、次のいずれかの方法で
擬似的に①にするのかな、と考えました。
(1)子供が一人ゴールするごとに、残りの子供がどの位置にいるかを確認して、①の場合のように横並びに
  近い(=希望した軌道に近い)場合だけ②を使う。
(2)時間がかかる順で第2位のサーボの時間を指定して①にすると、1位と2位の時間差の部分だけ②が使える。

(1)のときは、24分割するスローモーション機能がいりそうですよね。

No title

こちらこそ、大会動画ありがとうございました!

24分割について・・・ちょっと分からなかったのでお会い出来た時にまた教えてください。理解不足すみません。

No title

練習会ではパーツ等いろいろとありがとうございました。

ご説明いただいた後に、ブログを拝見して、この説明で更に良くわかりました。
いままで気になっていたことがかなりスッキリしました。

今まで一番時間がかかるサーボの所要時間を元に最短モーションを作るようにしてましたが、今回の実験結果から考えると、実際のモーションには使わないかもしれませんが、時間に1が指定してあるモーションAに対して直前のモーションBとの間を各サーボがAの目標値に到達する時間が短い順に24分割する機能があった方が、どんなポーズを経て目標の状態になるかわかって良いかもしれませんね。
プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク