振り子運動についての考察

歩行化モデルで実装されている振り子運動がいかにして実現されているかについての考察。DNMのことをある程度分かっている人向け。STA,CLA,SRFノードって何という方は、まず動作設定に関する覚書を参照してください。

はじめに

以下の文章は、あくまでも筆者の私的見解・私的手順を紹介したものであり、確実なものではありません。

なお、この文章はCarbonCro氏がMakoto氏の歩行化プロトタイプモデルを解析した結果を元に私kazuが再編集したものです。

途中動作サンプルをベースに解説する箇所があります。なおこのサンプルはCarbonCro氏が製作したものです。

途中登場する単語のうち、特殊な単語や一般的な意味とは違った使われ方をする単語についてはYSFSモデリング用語集Wikiへのリンクを設置してあります。

update log
2006-02-24:表記ゆれ、誤字脱字などの修正。
2005-6-12:初出。

DNM鳥瞰図

具体的な考察に入る前に、まずは振り子モデルのDNMのSRFノードを覗いてみることにしよう。話をわかりやすくするため、振り子運動のサンプルを用意した(sample1.dnm)。以後の説明はこのサンプルをベースにして行うことにしよう。

とりあえずこれをDNMViewerで開いてCLA3をEnableにすれば確かに振り子運動をしている。SRFTreeを見ると、細かいことを抜きにすればどうやらCLA3とCLA0の入れ子関係によって成り立っているらしい。ここで、SRFTreeだけ抽出してみると(図1)のようになっていることがわかる。

図1

各SRFノードを覗くとわかることだが、1-3と4-6は全くの同内容となっている。ここで便宜上前者3つのグループをBlock1,後者3つのグループをBlock2と呼ぶことにしよう。(図1)

では、SRFノードの中身を抽出してまとめてみよう。

 - SRF "1" - CLA3 - NST0
B|  |
L|  ---SRF "2" - CLA0 - NST2
O|     |                -STA 0 0 0 0 32768 5000 1
C|      |                -STA 0 0 0 0 32768 0 1
K|      |
1|      ---SRF "3" -CLA3 - NST0
 -          |
B|          ---SRF"4" -CLA3 - NST0
L|              |
O|              ---SRF "5" -CLA0 - NST2
C|                  |               -STA 0 0 0 0 32768 5000 1
K|                  |               -STA 0 0 0 0 32768 0 1
2|                  |
 -                  ---SRF "6" -CLA3 - NST0
                        |
                        ---SRF "leg"  ←表示用パーツ
                        
付記:
1. STA (X座標) (Y座標) (Z座標) (Y軸方向回転量) (X軸方向回転量) (Z軸方向回転量) (表示/非表示)
2. 32768[YSAngle] = 180[degree] i.e., 1[YSAngle] = 180/32768[degree]
                                      1[degree]  = 32768/180[YSAngle]

SRF"2"と"5"には、STAが二行あるが、これは振り子運動を停止させるためのギミックである。動作ロジックの解説は後に譲るが、1行目は動作・2行目は静止となっている。これもDNMVeiwerで確認してみるとよいだろう。なお、この例ではCLA0となっているが、これをCLA1にすれば速度に応じた振り子の振れ幅の変化を再現することも可能となる。

さて、それ以外のSRFノードをみてみても回転移動量・平行移動量も記されていない。よって必然的にこの2つのSRFノードでの指定が振り子運動を可能にしているといえよう。では具体的にこの2つのSRFノードはいかなる働きをもって振り子運動を可能にさせているのであろうか。

動作の相殺

ところでDNMViewerでみながら実際にこのSTAの回転量をいろいろと弄ってみると、Z軸方向回転量がどうやら振れ幅となっていることに気づく。ここでSRF"2"と"5"には同じ値を入れないと正しく振り子運動を行ってくれない。また、振れ幅を大きくしすぎるとぶれてしまってやはり振り子運動と呼べる動きはしてくれない。

この現象を理解するには、まずBlock1のみの動作の状態を知る必要があるだろう。そこで、Block1に棒のパーツをぶらさげただけのサンプル(sample2.dnm)を用意して、その運動を観察してみた。すると、棒はy軸正方向(上側)を向いており、さらに反時計回りに回転しているということが観察された。また棒は初め右に傾いている状態から動作を開始したものとする。

ここで、棒の先端の運動方向をX軸(左右)方向とZ軸(前後)方向に分割して考える。ただし、X軸正方向は右、Z軸正方向は正面とし、簡便のため以後前後左右という表現をもって軸の方向を定義するものとする。すなわちBlock1では、1:前+左 → 2:後+左 → 3:後+右 → 4:前+右 を一単位とする運動を行っていると考えられる。

またこのときBlock2は−−Block1においてX軸について180°回転されているため−−Block1とは逆の初位置から逆方向への運動が行われると想定される。つまり左に傾いた状態から時計回りに回転するということである。すなわちBlock2では、1:前+右 → 2:後+右 → 3:後+左 → 4:前+左 を一単位とする運動を行っていると考えられる。もちろんZ軸方向についての回転があるため完全に真逆方向ではないが、Z軸方向への回転角があまり大きくない条件下においては、真逆であると近似できる。

さて、棒のパーツはBlock1,Block2の運動をあわせた運動を行う。ここで各Blockについて、各Phaseの左右方向への運動を比較するとPhase1,2:左+右、Phase3,4:右+左となり結果的に相殺されるといえる。また、前後方向についてはほぼ二倍に増幅されるといえよう。先ほどのサンプル同士を比較してもほぼそうなっているのが確認できる。

この結果、棒の動きは前後方向のみの往復運動すなわち振り子運動になるといえる。

結論

同じ動作部分の片方を180°回転してぶらさげることで、左右方向への動作は相殺し、前後方向については増幅する。端的に言えばこういうことになる。

このパーツをぶらさげて動作を相殺するという考え方は、振り子に限らずなにかと応用が可能なように思われる。実際に「ギヤダウン中はキャノピーの展開不可」とか「可変翼非展開時はエルロンスポイラー無効」などといったことも、動作の相殺により可能になっている。

以上が、振り子運動についてMakoto氏の歩行化プロトタイプモデルを解析して得られた考察である。本当にこの通りであるかは定かでないが、このように考えれば一応のつじつまは合う。

この文書が、振り子運動の理解の一助になれば幸いである。

Return to top T