第6回 動き(モーション)を分解して可視化する

 ロボゼロの関節は24個もあり、最初は、何がどうなっているの良く分かりませんでした。しかし、いろいろやっていくうちに、鉄棒で調整する必要がある関節は、そう沢山ある訳では無いことが分かってきました。


モーションは、モーションエディタで確認しながら作っていきますが、モーションの数が増えてくるとテストが大変になってくるので、いくつかの部分に分割して作成していきます。有る程度モーションが固まってくると、分割させたモーションを合体させるために、プログラムエディタでの作業に移っていきます。

プログラムエディタの作業に入ると、もう、モーションエディタでの作業はできなくなります。プログラムエディタのデータは、モーションエディタでは読見込めないからです。

プログラムエディタではモーションエディタのようにステップごとのモーションの確認はできません。プログラムエディタでの修正の結果は、一連の連続動作の中でしか確認をすることができないのです。

鉄棒の動作は速いので、プログラムの変更の結果がイメージ通りになっているかを確認ができません。動画のスロー再生という方法を主に用いていますが、この方法でも、それぞれのモーションデータがどの動作に対応しているのか、その動作を改善するには、どのモーションのどこを修正すべきなのか、などの見当を付けることが難しいことがよく起こります。また、視点が一方向なので、なかなかうまく確認できないこともあります。
こんなときには、静止させた状態で、その動きを観察することが有効です。

今回は、クマゲラは、このような場合は、こんなことをしています。みたいなお話です。「そんなことは既にやっているよ。」という方も多いとは思いますが、よろしかったらしばらくお付き合い下さい。


逆に、これからプログラムに挑戦しようとする方には、何かの参考して頂ければ嬉しいです。

∞……∞……∞……∞……∞……∞……∞……∞……∞

◆鉄棒で使う関節とMOVEコマンド

鉄棒で主に使う関節は、肩(R01,R24)、肘(R04,R20)、手(R05,,R21)、腰(R06)、股(R08,R17)です。
自立した2足歩行動作に比べ極端に少ないのが特徴です。このことは、転倒等のへの配慮が不要で、比較的早く結果が確認できので、プログラム作成の入門用には適しているのではないかと思います。

下図に、鉄棒で主に使う関節を図示してみました。


同様に、鉄棒で主に使う関節のプログラムで用いるMOVEコマンドのパラメータの位置を図示してみました。(図中の1~24の数値は、パラメータの位置です。 例)17:17番目の位置 )


右と左では、符号が逆になる

◆鉄棒で使う関節のパラメータと稼働位置 

 以下の図は、コウヘイ君に個々のパラメータを与えたときの写真を切り張り(合成)したものです。
 
個々の関節のバラメータの値と、稼働位置の関係がイメージとしてわかると思います。そもそもMOVEコマンドなんてコウヘイ君には理解できても、、数値の羅列でしかないので、人間様には、いくらにらめっこしてても、よくわかりません。しかし、1800でバンザイ(真上)、900で前へならえ(水平)くらいイメージができると、MOVEコマンドも、少しは親しみが湧くかも知れません。「だいたいこんな感じくらい」の感覚で眺めてもらえば、いいと思います。クマゲラもこれを作成してみて、始めて「こんな感じなんだ」と改めて感心しているくらいです。
 
 
 
 今回、作成するまでは、もっと簡単なスケッチ程度の絵を参考にしながら、ラフにモーションをつくっていきました。
 
 (値と図の角度の関係は、初期設定の状態や、これまでの負荷状態の影響などの稼働状況、、さらに、切り張りの関係などで正甚だ正確性を欠くかも知れません。参考程度としてご利用いただければと思います。)
 

◇肩関節(R01、R24)の動きとバラメータの値

肩(R1左)関節の動きとバラメータの値との関係では、[0]で真下。[-560]で後ろいっぱい。[-600]では、前回りで[後ろへならへ] してしまいました。[1800]で真上、[2200]まで回転しました。

この資料を作成しててやっと気付いたのですが、[1800]で真上なので180度回転したんですね。
ということは、[900]で90度で前に水平ってことで、[300]で30度回転するってことだったんですね。
(そういえば、1で0.1度回転ってどっかに書いてあったような・・・・)<(_ _)>
(注 下記の図のパラメータの)




◇肘関節(R04、R21)の動きとバラメータの値

肘(R4左)関節の動きとバラメータの値では、[0]で水平ではありませんでした。そういえばホームポジションで肘は少し曲がっていますね。ホームで[0]なっているので水平に伸ばせて見るとしと少し曲がるようです。[400]で水平になりました。これ以上は、サーポが当たって動けませんでした。
[400-900= -500] なので 90度曲げるには、[-500] となるのですね。



◇腰関節の動きとバラメータの値

腰(R6)関節の動きとバラメータの値では、300刻みで撮影してみました。ちょっとだれて下がっているようです。実際には、自力では[600]まで持ち上げることがてきませんでした。(下記の動画も合わせてみてください。) 自力で足を持ち上げることができるとグルグルも簡単にできそうですが・・・。


 

◇股関節の動きとバラメータの値

股関節(R8左)関節の動きとバラメータの値では、120度までが稼働範囲ですね。実際には[1280]まで動くことができました。
後方は撮影していませんが、[-200]まで回転できました。



◇上記以外の関節(サーボ)の動きと設定

上記以外の関節についても若干の設定を加えて使っています。これらを簡単にご紹介します。

・手(R5,R20)は、準備姿勢のとき、[450]、鉄棒にぶら下がっているとき[950]、フィニッシュのとき[1500]で使用しています。(値は符号省略です)

・膝関節(R9,R12とR16,R13)は、腿と膝飾りの間に鉄棒がはまってしまうことがあるため、その対策です。膝飾りの上の隙間を狭く(R9)、その状態で脚が直線に見えるように(R12)設定しました。

・つま先を伸ばすための設定がR10,R15です。

・脚を曲げた時に振ったときに足先が互いに接触するためR11,R14を調整しましたがうまく解消できなかった覚えがあります。どこかの組み付けが悪かったのかもしれません。
・腕を振る時、ケープルがひっかかるので、肩(R2,R23)を若干広げた覚えがあります。適当な値に調整下さい。


◆モーションを目で確認する

次の動画は、前回掲載した後ろ回りの振り子の動作を、通常の動作、スロー再生、固定させた動作、固定させた分解動作の4つの動画です。(4つとも同じプログラムです。)

この4つの観察することで、モーションの動きを掴むことがかなりできるようになります。








◇通常のモーション

動画を再生することで、見逃した動きを何度でも確認できます。モーション作成には欠かせないツールです。前回の記録のところでも触れましたが、モーションの動きの条件を同時に記録することで、後から参照することが可能となります。

鉄棒運動など、動きの速いモーションの場合には、細かいところの確認は難しいです。

◇スローのモーション

動作を細かく検討する場合に使います。モーションの[姿勢]を確認するとき、モーションの[時間]を検討する場合に無くてはならない、非常に有効な方法です。[姿勢]と[時間]を正確に視認できるので、様々な改善のヒントを提供してくれます。


モーションと動作の正確な関係を確認するためには、不向きな場合があります。また、視点が一方方向のため、映らない個所など詳細が確認できないこともあります。

◇本体を固定したときのモーション

一連のモーションの特定の動きを確認する場合に有効です。プログラムの中から、確認したい動きを抽出して、別プログラムとして実行させることで実現します。

負荷がない状態で動作するので、モーションと動作の正確な関係をみることができます。左右のモーションの設定の間違いなどが動作として現れるので、簡単に見つけることができます。

動きが早いところの確認は、ビデオ観察と併用することでさらに効果できに観察ができます。


具体的には、次の手順を参考にして下さい。

① プログラムエディタに予め空のプログラムを登録しておきます。プログラム名は、[動作確認]など分かりやすい名称が良いと思います。
手順:プログラムエディタの画面で、[新規登録]>[OK]>[プログラム名(動作確認)]>[OK]

② 確認したいモーションを、[動作確認]プログラムにコピーし、[実行]する
手順:[プログラム名(動作確認)]>[読出し]>※1>[再現したいプログラム名]>[参照]>[再現したいステップをドラッグ]>[Ctrl+C(コピー)※2]>[Close]>[プログラムエリアへCtrl+V(貼り付け)※2]

※1 前のプログラムが表示されたら、[Ctrl+A(ALL選択)]+[DELL]キーで消去する
※2 漢字モードだと[Ctrl+C]、[Ctrl+V]、などはうまく効かない

③ ロボ君を高台に仰向けに寝かせしっかり固定する(手で押さえる)。手足をバタつかせても回りに当たらないことを確認する

④ 準備ができたら、[実行]をクリックする

◇本体を固定したときの分解モーション

本体を固定したときのモーションをさらに、ステップごとに動作させることで、より細かな動きを確認することができます。

時間的要素を遅くするため、通常の動作ではてきていたものが、速度が遅くなることや、タイミングが狂うことで、でできなくなることもあります。(最後の腰を振り上げるところなど。)

動作をゆっくり再現させることて、時間をもって観察できるため、思わぬ発見があるかもしれません。
どうしても思い通りに動いてくれないときに、何が悪いのか、どうしたら良いのか、など問いに対するヒントを与えてくれるかも知れません。

具体的には、上記の②のステップの後、再現するプログラムに次の処理を加えます。
②-2 個々のステップの時間パラメータを2400(1秒)程度に変更する

②-3 個々のステップとステップの間に WAITE(200)を2つ程度入れる

最後に動画で使用した分解モーションのブログラムを本ページの最後に掲載しました。
以前にご紹介させて頂いた連続後ろ回りのプログラムの一部です。

今回は、8ステップのモーションの流れを分解して見てみましたが、この方法の利用が最も多いのは、1ステップのモーションです。

このフェーズに入っているころには、モーションデータも細かな修正が加えられているため、モーションエディタには戻れません。それぞれのデータをモーションデータに再入力しなければならないからです。

このようなときに、この方法がモーションエディタの代わりとして重宝します。
修正したいモーション(行)をコピーし、[動作確認]プログラムに張り付け、1行実行させます。
その結果を見ながら、さらなる修正を加え、実行を繰り返します。納得するモーションができたら、その結果を元のプログラムに反映させます。

このようにして、その部分のいくつかのモーションの修正が完了したら、連続した動きの確認を繰り返しながら、プログラムを作成していきます。
クマゲラは、このようにして回転のモーションを作成していきました。

◆鉄棒の動きをモーションから考える

今回、この原稿を執筆することで、改めて鉄棒のモーションを考えてみました。先にも述べましたが、鉄棒の動きは、自立動作に比べ非常に単純なことに気がつきました。制御するサーポは、なんと肩、肘、股、腰の7つだけでした。しかも左右対称なので、常に片方だけ考えることで済みますので、検討個所は4個所で大丈夫です。バランスを考える必要もありません。
こういった意味では、プログラムを作成を習得するには適しているかも知れません。

しかし、鉄棒は、なかなか思うような動作がてきません。ひとつには、重力に逆らっているからです。重力に勝つために、スピードとタイミング、そしてなにより適切な姿勢が大切です。この3つのバランスの良い組み合わせを見つけることが成功の秘訣かも知れません。

特に、スピードを確保するには、比較的高い安定した電圧が必要で、電圧の変動に対し、動作時間で対応させてきました。しかしながら、時間のコントロールでは、自分の姿勢を把握できていなために、甚だ無理がありそうです。

この対策として、考えられるのが、今この巷で盛り上がっているジャイロではないかと思っています。
ジャイロにより自分の姿勢が有る程度でも把握できると、時間のコントロールから解放されるかも知れません。

コウヘイ君のジャイロの実装はこれからですが.、少しジャイロについて、試してみようと思います。鉄棒への適用ができるようになりましたら、グルグルについて、時間のコントロールとジャイロの効果も含めてご紹介していきたいと思います。

今後ともお付き合いのほど、よろしくお願いします。


◆分解モーションで使用したサンプルプログラム

 今回、ご紹介したモーションの説明で使用したプログラムは、先日ご紹介させて頂いた[鉄棒 連続後回りができたよ (プログラム掲載)]  の一部を、時間を延ばして観察できるようにしたものです。

ご参考までに、掲載させていただきました。

;∞∞∞∞∞∞∞∞ この次の行から ∞∞∞∞∞∞∞∞∞∞∞∞∞∞
;=============================================
;プログラムNo:5-121208
;プロラム名:振子-逆上がり
;プログラム機能:振子-逆上がりの動作をステップ実行する
;=============================================
WAITE(200)
MOVE(1600,-440,950,200,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1100,-200,-950,440,-1600,4800)
WAITE(200)
WAITE(200)
WAITE(200)
WAITE(200)
;後振り-1
MOVE(1600,-440,950,200,1000,100,0,-100,300,200,0,-300,300,0,-200,-300,100,0,0,-1100,-200,-950,440,-1600,2400)
WAITE(200)
WAITE(200)
;前振り-1
MOVE(1400,X,X,350,X,-100,X,500,0,200,X,0,0,X,-200,0,-500,X,X,X,-350,X,X,-1400,2400)
WAITE(200)
WAITE(200)
;後振り-2
MOVE(1600,X,X,200,X,100,X,-200,300,200,0,-300,300,0,-200,-300,200,X,X,X,-200,X,X,-1600,2400)
WAITE(200)
WAITE(200)
;前振り-2
MOVE(1000,X,X,350,X,-100,X,600,0,200,X,0,0,X,-200,0,-600,X,X,X,-350,X,X,-1000,2400)
WAITE(200)
WAITE(200)
;後振り-3
MOVE(1600,X,X,200,X,100,X,-200,300,200,0,-300,300,0,-200,-300,200,X,X,X,-200,X,X,-1600,2400)
WAITE(200)
WAITE(200)
MOVE(-580,X,X,-990,X,-750,X,640,-180,X,X,-120,120,X,X,180,-640,X,X,X,990,X,X,580,2400)
WAITE(200)
WAITE(200)
MOVE(1600,-440,950,200,1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1100,-200,-950,440,-1600,4800)
;∞∞∞∞∞∞∞∞ この前の行まで ∞∞∞∞∞∞∞∞∞∞∞∞∞∞

0 件のコメント:

コメントを投稿