動作設定に関する覚書

YSFSの機体製作における動作設定とその私的手順の解説。文章は固いけど内容的には、初心者向けかも。

はじめに

以下の文章は、あくまでも筆者の私的見解・私的手順を紹介したものであり、これがすべてではありません。

もっと良い方法があったらぜひご教授下さい。

なお、途中登場するPerlスクリプトはすべてF22愛好会氏が、製作・公開なされているものです。このような便利な数々のスクリプトを提供してくださっている同氏に感謝しております。

この文章は一部スクリプトの使用を前提とした箇所がありますが、スクリプトの導入方法に関する解説は行いません。

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

update log
2006-03-06:表記ゆれ、誤字脱字などの修正。
2005-09-18:新βバージョンに追加されたCLA21に関する記述を追加。(情報提供:SHIN221氏)
2005-09-07:一部単語にYSFSモデリング用語集Wikiへのリンクを設置。
2005-06-12:Mqo2SrfのsrfalignしながらDNM生成機能に関する記述を追加。
2005-06-05:CLA18,20は回転運動しないのを勘違いしてたので修正。
2005-03-10:CLA解説に図9,図10を追加。
2005-03-05:新βバージョンに追加されたCLA9/18/20に関する記述を追加。
2005-02-20:初出。

動作設定の意義

YSFSの機体製作においての山場の1つがこの動作設定である。いうまでも無いことであるが、YSではVGW(可変翼)やフラップ、エルロン、ギヤなどの様々な種類の動作が再現できる。一概には言い難い面もあるが、やはり様々な動作が設定されている機体というものは飛ばしていて楽しいものである。

だがこの動作設定は、初めて機体製作に挑戦する者にとっては概念的な理解が難しく、挫折しやすいところでもある。筆者が初めて機体を製作したときも、この動作設定のところでかなり苦労した記憶がある。だが実際は、一旦動作原理が分かってしまえばすべて同じなので、以後動作設定に困るということはまずなくなるであろう。

動翼の動作原理

ではまず始めに、動作設定がどこで行われているのかということから説明していくことにしよう。

当然といえば当然であるが、それはDNM内である。もう少し細かく言うとDNMでもそのSRFノードである。

DNMのSRFノードについてはDNM製造に関しての覚書が詳しいので、そちらもあわせて参照して欲しい。以後、SRFノードの各行に関する説明は割愛する場合がある。

SRFノードそのものが動作設定であるといっても過言ではないであろう。では、動作設定がいかにしてSRFノードで行われているかということだが、ここが概念的な理解の難しいところである。そこで簡単のため、実際の例に当てはめて見ていくことにしよう。

なお大前提だが、動翼設定は下記の例を見れば分かるとおりSurf単位で行うため、事前に動作させる部品を個別のSurfにしておく必要がある。

SRF "0030"
FIL wing/l_flap.srf
CLA 5
NST 2
STA 0 0 0 0 0 0 1
STA 0 0.015 -0.03 0 5500 0 1
POS -3.522 0.217 -1.78 2868 0 1214 1
CNT 0 0 0
REL DEP
NCH 0
END

FIL行を見れば明白だが、これはフラップである。そのためCLAは5となっている。フラップにおいては、非展開時と展開時との二種類の状態が必要となるため、STAは二行存在している。上の行は非展開時、下の行は展開時である。なぜ非展開時と展開時との二種類が必要かといえば、フラップなどほとんどの動作は、STAで指定された動作開始時の状態と動作完了時の状態との間で行われているからである。

ところでモデリングの段階では、通常フラップは非展開の状態であるので一行目は全く問題ない。問題は次である。

動作設定というが、X/Y/Z軸方向への平行移動及びX/Y/Z軸を軸とした回転しか行うことができない。これはSTAの書式からしても明らかである。平行移動の場合はさして問題ないのだが、多くの部品は回転を伴った動作を必要とする。このときの回転軸が非常に問題となる。多くの場合、モデリング後にただ部品を分離しただけでは動翼の回転軸とX/Y/Z軸が一致していることはまずない。(図1)

図1 図2

そのため、何らかの操作(詳しい手順は後述)を行うことにより回転させたい軸とX/Y/Z軸(のいずれか)とを一致させる必要がある。(図2)に示した例ではX軸と一致させているのがおわかりだろう。こうすることで、X軸基準の回転角度の指定によりフラップの動作が再現できるのだ。またこのとき、初めにフラップが存在していた場所(図1の位置)に戻すための帳尻あわせがPOS行で行われる。

さてここまで見てきたように、動作設定の下準備として回転させたい軸とX/Y/Z軸のいずれかが一致するようにSurfを移動するという作業、つまり軸合わせが必要となることがわかった。

実はこの軸合わせの手順が不要になる場合−回転させたい軸がX/Y/Z軸のいずれかに平行である場合−がある。CNTを上手く利用することになるのだが、この特別の場合については後述することにしよう。

・・・と簡単に言うが、これを手動で行うのは非常に面倒な作業である。筆者はこれを手動で計算したことは無いが、おそらく関数電卓と格闘せねばならないであろう。特に、元の位置で表示させるためのPOS行の値をいかにして求めるかということが手計算ではこの上なく面倒そうである。

では実際は、具体的にどのような手順で軸合わせを行えばもっとも効率的(と考えられる)のであろうか。これについて見ていくことにしよう。

軸合わせ手順−SurfAlign利用法

前節で述べたように、動作設定の準備として、回転軸とX/Y/Z軸のいずれかを一致させかつ元の位置で表示させるためのPOS行の取得を効率的に行う必要がある。

そこで登場するのがSurfAlignである。その名の通りSurfを座標軸に合わせるスクリプトだが、この最大の特長はPOS行の自動生成である。詳しい操作方法は後述するが、結論から言えば回転させたい軸上にある任意の二点の座標を取得するだけで軸あわせが可能になるのである。出力されたSurfをDNMに組み込み、出力されたPOS行を入力すれば、後はただSTA行での設定のみとなる。

DFB中でこのスクリプトを実行した場合、Surf及びPOS行の更新も自動で行われる。さらに、Mqo2SrfにはsrfalignしながらDNM生成を行うという強力な機能がついているので、Metasequoiaで機体を製作している人は要チェックだろう。

では、手順を追いながら確認していくことにしよう。

Step1:回転したい軸上の二点の座標を取得する

まず初めに、回転したい軸(図1では黄色で示された軸)上にある二点の座標を取得し、書き留めておく(どこでこの値を使うかは後述。)取得方法については、筆者はGepolyXの"Move Vertex"で目的の頂点を選択し、鉛筆型のカーソルを右クリックすることにより取得する方法(図3)を用いている。他にもMetasequoia上での絶対座標を利用する方法や、座標をSurfをテキストエディタで開くことにより直接取得する方法などがあるので、各自やりやすい方法を採用するのがよかろう。

ただしMetasequoia上での取得に関しては、X軸に関して正とする方向が逆であったり、縮尺の違いがあったりするので注意が必要である。(図4)

図3 図4

Step2:SurfAlignを起動しSurfを処理する

下準備が整ったところで、いよいよSurfの処理となる。スクリプトを起動すると、(図5)のようなウィンドウが出現するはずだ。

図5 図6

まず、先ほど取得した二点の座標をそれぞれBase/Edgeフィールドに入力する。どちらをどちらに入れるかは大抵問題にならないが、Baseフィールドに入力された座標は、Targetフィ−ルドに入力された座標(通常は原点)に移動されるのでこのことは踏まえておくべきだろう。このような役割をもつため、通常はTargetフィールドの値を変更する必要はない。軸あわせの妨げにも成りかねないので、むしろ変更すべきではない

Base/Edgeフィールドへの入力が終わったら、次はAxisラジオボタンの設定を行う。Axisラジオボタンではその名の通り軸の設定を行う。ここで、回転させたい軸をX/Y/Z軸のどれに一致させるかを決定するのである。どの部品はどの軸に一致させねばならない、という決まりはないので、各自でわかりやすいものに一致させるとよいだろう。Max Accurate(小数点以下の桁数)/Add POS to SRF(Surf内にコメントとしてPOSを出力)については特筆する必要もあるまい。

あとはSurfを処理するだけである。ウィンドウにSurfをドラッグアンドドロップすれば処理されたSurfが生成される。出力時のファイル名は説明書にある通りである。POS Lineフィールドは最初空白であるが、Surfを処理した後に出力されるので忘れずに控えておきたい。ここで出力されるPOS行がもとの位置で表示させるために必要となる。(図6)なお、POS行の値は自動的にクリップボードにもコピーされる。

繰り返しになるが、DFBでこのスクリプトを実行した場合、Surf及びPOS行の更新も自動で行われる。そのため、Add POS to SRF・POS Lineフィールドは存在しない。

Step3:POS行とSurfの変更を適用する

ここで一度SurfViewで出力されたSurfを確認して、回転させたい軸が、X/Y/Z軸のいずれかに一致しているかどうかを確認する。もしイメージと違っていた場合は、もう一度Step1からやり直す。その後元のSurf名にリネームすれば完成である。なお、処理前の部品は別の場所にわけて保存しておいてもいいだろう。

あとはDNMに(Surf/POS行の)変更を適用すればこの部品に関する動作設定(の下準備)は完了ということになる。(DFB使用の場合はこの手順は不要である)


このような工程を経た後にようやく実質的な動作量調整であるSTA行の編集を行うこととなる。面倒かもしれないが避けては通れない道である。だが、多少なりともこの作業を行う回数を少なくすることは可能である。具体的には、

といった方法が考えられる。まずは前者について軽く説明を加えておくことにしよう。

DNMMirror、その名の通りDNM内のデータをミラーリングするスクリプトである。このすぐれている点は、Surf本体だけでなくそのSRFノードもミラーリング可能な点である。これにより、左右対称な動作を行う部品−例えばフラップ・エルロン・メインギヤなど−は、片側のみを作業しておけばよいということになる。

なお、この操作はDFBで行った方が編集効率は格段に向上すると思われる。DFBチュートリアルでも触れられているので是非参照しておきたい。

当然のことだが、ミラーリングはSTA行設定完了後に行うので、ミラーリング前に動作量の確認を行うべきである。その他詳しい機能の解説は説明書が詳しいのでそちらを参照して欲しい。

では後者のCNTの利用とは、いかなるものであろうか。前節の末尾でも軽くふれたが、CNTを利用すると今まで述べてきたような軸合わせの作業がいらなくなるのである。もちろん条件はあるが、この方法を覚えておけば動作設定がかなりラクになる局面も多々あるであろう。

これについて次節で見ていくことにしよう。

軸合わせが不要であることの十分条件−CNT活用術

具体的な手順の解説の前にまず、この方法が使える条件をまず確認しておくことにしよう。この条件を満たしていない場合は正常な動作は期待できない。その条件とは回転させたい軸とX/Y/Z軸のいずれかが平行というものである。ギヤ関連の部品やキャノピなどはこれに当てはまるのではないだろうか。

なぜこのような条件が必要かということはこの仕組みを理解すれば容易に想像できることなので、とりあえず実例に当てはめながら見ていくことにしよう。

SRF "0003"
FIL ng.srf
CLA 0
NST 2
STA 0 0 0 0 17000 0 0
STA 0 0 0 0 0 0 1
POS 0 -0.43 4.589 0 0 0 1
CNT 0 -0.43 4.589
REL DEP
NCH 0
END

これはノーズギヤである。展開時の状態を基準にモデリングをしたため、非展開時(STA一行目)において回転量が設定されている。

ここで、ng.srfを覗いてみると(図7)のようになっている。そう、全くSurfの移動処理を行っていないのだ。しかしながらこの設定でも問題なくギヤの展開動作は行われている。ここでCNTの値に注目してみよう。この三桁の値はいかなる意味を持つのであろうか。

お察しの方もいると思われるがこれは座標である。ではどこの座標なのだろうか。それは(図8)を見れば想像がつくかもしれないが、実は回転させたい軸上の一点なのである。

図7 図8

この例は、この点を通ってX軸に平行な軸を回転軸と想定しているので、先ほど述べた条件−回転させたい軸とX/Y/Z軸が平行−は満たされている。X軸(と平行な軸)を回転させたい軸としているため、STA行にはX軸方向の回転量が指定されている。

この結果を整理すると、回転させたい軸上の座標をCNTに代入することで、軸合わせと同様の効果が得られたということになる。では何故このようなことが可能となるのであろうか。これを知るためにはCNT行のはたらきを考える必要がありそうだ。DNM製造に関しての覚書によれば、CNT行には以下のような役割があるという。

CNT *.** *.** *.**

配置したいSRF内において、CNTの行で指定された座標をDNM側の基準点(0,0,0)と同値させる。故、CNTだけを指定すると配置したいSRFが指定した座標と逆の方向に動くように見える。

普段CNTを使うときはPOSにも同じ値を入れて使う。そうした場合、CNTで配置したいSRFを回転させる軸部分を設定し、POSに同じ値を入れることによってCNTによって移動された分を相殺することが出来る。

即ち、X,Y,Z軸に沿った動翼その他の可動設定が非常に簡単に出来るようになる。

強調・マークアップは筆者による。

この説明で理解できた方も多いとは思うが、少し補足しておこう。

おそらくもっとも直感的に理解しにくいのは、DNM側の基準点(0,0,0)と同値させるということであろうが、これをCNT行で指定した座標が原点に来るように平行移動すると置き換えて考えてみることにしよう。ここで、CNT行で指定した座標は回転させたい軸上にあることとその軸はX/Y/Z軸のいずれかに平行であることとを総合して考えると、軸合わせと同様の効果が得られることに納得がいくのではなかろうか。なぜPOS行に同じ値をいれるのか、という疑問もこれで納得がいく。

以上がCNTを利用した手順である。多少理解しにくい部分もあるかもしれないが、慣れればこの方法が確実に早いので是非慣れておきたい。

動作量決定−STA行の編集

さて、いよいよメインとなる動作量決定である。ここまで来ると理論的に難解な部分はほとんど無いに等しい。最初にも述べたとおり、そのSurfの役割(CLA行の値)によって、必要なSTAの数は異なってくる。各CLAの値とSTAの数(NST行の値)、YS上での対応キーなどは以下のようになっている。

CLAの値とその対応関係
CLA値 意味 NST 各行の意味 対応キー(初期設定) 備考
0 胴体 1 - - ギヤの場合はNST2
0 ギヤ 2 収納/展開 G 胴体の場合はNST1,(図9)参照
1 VGW(可変翼) 2 非展開/展開 W/S -
2 アフターバーナー 2 OFF/ON Tab -
3 スピナー(回転翼) 1 - スロットル開度 回転軸はY軸
4 エアブレーキ(スポイラー) 2 非展開/展開 B Spoiler連動(CLA16とは別)
5 フラップ(高揚力装置) 2 非展開/展開 F -
6 エレベータ(昇降舵) 3 ニュートラル/アップ/ダウン ピッチ操作 -
7 エルロン(補助翼) 3 ニュートラル/左旋回/右旋回 ロール操作 -
8 ラダ−(方向舵) 3 ニュートラル/左/右 Z/X/C -
9 爆弾倉 2 非展開/展開 1,BOM投下(展開のみ) 20050305β以降の新機能,投下時展開はDATにBOMINBAY TRUEが必要
10 VTOL装置(推力偏向) 2 通常/使用時 PageUp/PageDown -
11 スラストリバーサ(逆噴射) 2 OFF/ON . -
12 CLA10連動 2 通常/使用時 PageUp/PageDown -
13 CLA10連動二倍速 2 通常/使用時 PageUp/PageDown -
14 ギヤドア(自動再収納) 2 収納/最大展開 G 収納→展開→収納,(図9)参照
15 ギヤ(動作速度遅) 2 収納/展開 G (図9)参照
16 アレスティングフック(ギヤブレーキ) 2 収納/展開 B Brake連動(CLA4とは別)
18 回転翼ブレード 0 - スロットル開度(Phase1,2) 20050305β以降の新機能
20 回転翼ブレード(残像?) 0 - スロットル開度(Phase2,3) 20050305β以降の新機能
21 回転銃座 0 - マウス操作(joystick接続時のみ) 20050917β以降の新機能,作動角などはDATで設定,POS/CNTで軸合わせ

DNM製造に関しての覚書,Nanjara JAPANの解説文書を参考にして作成。

この表と見比べつつ、時には既存機体の設定を参考にしながら動作量設定を行えばまず間違いはないだろう。ちなみに、特にDATでその部品に関する性能が定義されていなければ、実際のSurfがその通りの役割を果たさなくても構わない。CLA10のキャノピーなどはその好例であろう。

また最近では歩行化モデルや人型変形機体などといった非常に複雑な動作を行うモデルも登場するなど、その応用例は多岐にわたっている。

図9 図10

(図9)はMakoto氏がWFTCのBBSに投稿したものを許可を得て転載したものです。わかりやすい図に感謝。

DFBにはSTA行の編集を強力にサポートするControl wing wizardという機能が存在する(図10)。DFBチュートリアルに図入りで紹介されているので是非確認しておきたい。

仕上げ

STA行の設定が終わったら動翼設定は終了である。初めて行う方にとってはかなりの長い道のりではないだろうか。やはりいくら頭で分かっていても慣れるまでにはある程度の場慣れが必要であろう。動翼設定ができたらひとまずDNMをSurfViewで開き、1,2,3キーただし、テンキーでないを押してみるとよい。各キーが各STA行に対応しているので、動作イメージを容易に確認することが出来る。

初めのうちは失敗もするであろうから、Surfを処理したりする前にはバックアップを一応取っておくことをお勧めする。

実はまだ触れていない応用例に、CLDによる入れ子関係というものがある。これにより1つの部品に複数の役割(CLA)を割り当てることが出来る。代表例はラダー連動のノーズギヤや、フラッペロンなどである。このことに関する記事を追記するかどうかは未定であるが、DNM製造に関しての覚書において軽く触れられているので参照してもよいだろう。また、既存機体の設定を参考にするのも非常に有効である。

どのような形であれ、この文章が動作設定に対する理解の一助になれば幸いである。

Return to top T