FlightGear2.9.0以前/ジョイスティックの設定
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
注意:本文書はFlightGear2.9.0以前のものを対象としています...
2.10.0以降で、より簡単にジョイスティックを設定する方法は[...
* 手動設定ガイド [#re6faac7]
#contents
#br
#hr
#br
#br
** [Joystick Information] の確認 [#e8160fe4]
- ジョイスティックをつないだ状態でFlightGearを起動し、[He...
- グレー表示でクリック出来ない場合:
-- システムがジョイスティックを認識していないようです。
ジョイスティックが正しく接続されていることを確認してくだ...
#br
** Driver: 行の確認 [#b610d572]
- Driver: C:/Program Files/FlightGear/data/Input/Joystick...
-- 自動認識されているので追加設定は不要です。そのままお使...
- Driver: C:/Program Files/FlightGear/data/Input/Joystick...
-- 自動認識が正常に機能しなかったため、汎用のジョイスティ...
このため、基本的な操作しかできません。ジョイスティックの...
#br
** Joystick #0: 行の確認 [#v84b8034]
- 文字化けしている場合:
-- Vistaでこの現象が発生するようです。
自動認識させることはできませんが、手はまだあります。
ひとまず手順2に進んでください。
- "Saitek X45 Flight Controller"のように正常に表示される...
自動認識させることができるかもしれません。
同じく手順2に進んでください。
#br
#br
* ジョイスティック定義ファイルの調査 [#z3c7f8f4]
- FlightGear をインストールしたフォルダ内のFlightGear/dat...
使おうとしているジョイスティックの機種に該当しそうなジョ...
-- 存在する場合: もうすぐ設定完了です。手順3に進んでくだ...
-- 存在しない場合:
--- 残念ですが、既存のジョイスティック定義ファイルを雛形...
--- 作成方法については、以下の[[「ジョイスティック定義フ...
-- 基本的な操作のみでも構わなければ、汎用のジョイスティッ...
#br
#br
* $FG_ROOT/joysticks.xmlの修正 [#pcd6d7cb]
** 手順1.2でJoystick #0: が文字化けしていた場合: [#s482b5...
- FlightGear\data\joysticks.xml ファイルをテキストエディ...
<PropertyList>
<!--
<js-named include="Input/Joysticks/Local/X45-modi...
<js n="0" include="Input/Joysticks/Local/joystick...
-->
<js n="0" include="Input/Joysticks/Saitek/ST290-P...
</PropertyList>
- 再び手順1.の [Joystick Information] を確認し、正しく設...
** 手順1.2でJoystick #0: が"Saitek X45 Flight Controller"...
- 手順2で確認したジョイスティック設定ファイル(たとえばFli...
<PropertyList>
<name>Saitek X45</name>
<name>Saitek Saitek X45</name>
<name>Saitek X45 Flight Controller USB</name>
<name>Saitek X45 Flight Control Stick </name>
<name>Saitek Saitek X45 Flight Control Stick </name>
<name>Saitek X45 Flight Controller</name>
- 再び手順1.の [Joystick Information] を確認し、正しく設...
#br
#br
* ジョイスティック定義ファイルの作成 [#j761ff1f]
さて、先ほど「残念ですが」と言いましたが、「FlightGearの...
実は、翻訳文書の[[「訳)特徴」の、「内部プロパティは公開さ...
で出てきた「プロパティツリー」の値を書き換えることで飛行...
少々面倒に感じるかもしれませんが、ここを理解しておくと後...
#br
** 設定の前に[#y70211e6]
Windows版では、FlightGearのインストール先を"C:\Program Fi...
MacOSX版では、"/Applications"にインストールしていると仮定...
#br
** js_demoの入手方法 [#x0b79df1]
本来ならjs_demoはFlightGearに同梱されている(べき)なのです...
//筆者はMacを所有していないので、MacOSX版FlightGearにjs_d...
*** Windowsの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?p...
C:\Program Files\FlightGear\binフォルダに保存してください。
*** MacOSXの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?p...
解凍してできた js_demo を
/Applications/FlightGear.app/Contents/Resourcesフォルダに...
#br
** js_demoの起動 [#c62dc28e]
ここでは、js_demoの起動方法だけを書きます。出力結果の読み...
*** Windowsの場合 [#hc62daa8]
先ほど入手したjs_demoをコマンドプロンプトから起動してくだ...
c:\
cd "\Program Files\FlightGear\bin"
js_demo.exe
*** MacOSXの場合 [#hc62daa8]
先ほど入手したjs_demoをダブルクリックで、またはターミナル...
cd /Applications/FlightGear.app/Contents/Resources
./js_demo
#br
** js_demoの出力結果の読み方と、操作割り当ての決定手順 [#...
Joystick test program.
~~~~~~~~~~~~~~~~~~~~~~
Joystick 0 is "Saitek X45 Flight Controller"
Joystick 1 not detected
+---------------JS.0-----------------+---------------JS...
| Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4 Ax:5 Ax:6 Ax:7 | ~...
+------------------------------------+------------------...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
最初の何行かの出力はスクロールが早くて画面を通り過ぎてし...
まず、最初の "Joystick 0 is "Saitek X45 Flight Controller...
先ほどの「1.2 Joystick #0: 行の確認」で認識された名前と同...
ただし、日本語版WindowsVistaでは "Microsoft PC ジョイステ...
次に、出力の読み方の解説をします。
左側の「JS:0」に注目してください。「JS:1」は繋いでいない...
一番左の列の値がボタンの状態を示していて、軸0〜軸7の順で...
- 初めに、何か適当に操作してみてください。ジョイスティッ...
--モード切り替えスイッチを「ボタン」として検出している場...
--その場合、モード切替スイッチを操作して、その値を記録し...
- モード切替スイッチのチェックが終わったら、それ以外のボ...
- 他のボタンについてもこのチェックを繰り返してください。
- 次に、スティックを左右に倒して、「どの軸の数値が変化す...
- その軸の、「中立位置での値」「右一杯に倒した時の値」「...
- 同様に他の軸についてもチェックしてください。
- HAT(POV)スイッチを操作してください。HATスイッチがボタン...
すると、以下のような表ができると思います。
さて、スティックのどの軸/ボタンに何を割り当てるかは人それ...
もし、適切な役割が思い浮かばない場合、取り合えず何も設定...
--軸
, 軸番号 , 実際の軸 , 方向 , 備考
, 0 , 左スティック左右 , 右に操作して正 , エルロン
, 1 , 左スティック上下 , 上に操作して正 , エレベータ
, 2 , 右スティック左右 , 右に操作して正 , ラダー
, 3 , 右スティック上下 , 上に操作して正 , エレベータトリム
, 4 , N/A , N/A , この軸は無い
, 5 , N/A , N/A , この軸は無い
, 6 , 左右ボタン , 右に操作して正 , POV左右
, 7 , 上下ボタン , 上に操作して正 , POV上下
--ボタン
, ボタン番号 , 数値 , 実際のボタン , 役割
, N/A ,0000 , ,
, 0 , 0001 , △ , ラダートリム(右)
, 1 , 0002 , ○ , ミクスチャ リッチ
, 2 , 0004 , × , ミクスチャ リーン
, 3 , 0008 , □ , ラダートリム(左)
, 4 , 0010 , L2 , スロットル閉
, 5 , 0020 , R2 , スロットル開
, 6 , 0040 , L1ボタン , プロペラ回転下げ(高ピッチ)
, 7 , 0080 , R1ボタン , プロペラ回転上げ(低ピッチ)
, 8 , 0100 , スタート , セルモータを回す
, 9 , 0200 , セレクト , 見る方向をリセット
, 10 , 0400 , L3 , 車輪ブレーキ
, 11 , 0800 , R3 , 使用せず
#br
** 実際にXMLファイルを記述する [#hab46326]
- その前に、「1.2 Joystick #0: 行の確認」で、文字化けして...
<PropertyList>
<!--
<js-named include="Input/Joysticks/Local/X45-modified.x...
<js n="0" include="Input/Joysticks/Local/joystick_0.xml...
-->
<js n="0" include="Input/Joysticks/manufacture/urjoystic...
</PropertyList>
これは、ジョイスティックの自動認識の結果を上書きして、使...
実際のところ、2バイト文字を含まないファイル名なら何でもい...
(他のジョイスティック定義ファイル同様、$FGROOT\Input\Joys...
#br
** ジョイスティック設定ファイルを実際に書く [#ncd462e5]
多くの場合、「既存のジョイスティック定義ファイルを元に・・・...
もちろん、既存のジョイスティック定義ファイルの中に、あな...
-まず、(メモ帳以外の)テキストエディタを開き、先頭に<Prope...
-次に<name></name>と書き、両タグの間に先ほどjs_demoで表示...
-以下の物を軸の数だけコピー&ペーストしてください。
<axis n="">
<desc></desc>
<dead-band>0<dead-band>
<binding>
<command></command>
</binding>
</axis>
+まず、<axis n="'''軸番号'''">に変更して、どの軸か指定し...
+軸の概要を<desc>タグと</desc>タグの間に書きます。(<desc>...
+デッドバンドを設定したい場合、<dead-band>と<dead-band>の...
+また、動かした方向「だけ」が必要な場合は<high>と<low>の2...
---<high>と<low>を使って、軸をエレベータートリムの調整に...
<axis n="1">
<low>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/elevator-trim</property>
<step type="double">0.001</step>
</binding>
</low>
<high>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/elevator-trim</property>
<step type="double">-0.001</step>
</binding>
</high>
</axis>
+<command>と</command>の間に、使いたいコマンドを書きます...
--property-scale:生のジョイスティックの出力を加工してプロ...
--優先順位はdead-band,offset,factorの順です。別の表現をす...
---<property>'''設定したいプロパティ'''</property>で設定...
---<offset>'''オフセット量'''</offset>で0点をいくらズラす...
---<factor>'''倍率'''</factor> ↑で0点をずらした場合に操作...
---エルロンを操作するための使用例
<binding>
<command>property-scale</command>
<property>/controls/flight/aileron</property>
<offset type="double">0.0</offset>
<factor type="double">1.0</factor>
</binding>
--property-adjust:一度実行される毎に値をstepだけ増やしま...
---<property>'''設定したいプロパティ'''</property>で設定...
---<step>'''一度の動作で増やす量'''</step>(負の数を指定す...
--nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてく...
-全ての軸の設定が終わるまで、これを繰り返します。
#br
-それが終わったら、以下の物をボタンの数だけコピー&ペース...
<button n="">
<desc></desc>
<repeatable>false</repeatable>
<binding>
<command></command>
</binding>
</button>
+まず、<axis n="'''ボタン番号'''">に変更して、どのボタン...
+ボタンの概要を<desc>タグと</desc>タグの間に書きます。(<d...
+リピート動作させたい場合は、<repeatable>のところを、以下...
<repeatable>true</repeatable>
+<command>と</command>の間に、使いたいコマンドを書きます...
--property-adjust:一度実行される毎に値をstepだけ増やしま...
---<property>'''設定したいプロパティ'''</property>で設定...
---<step>'''一度の動作で増やす量'''</step>(負の数を指定す...
---以下のサンプルは、ボタン2に「ラダートリムを0.001(正な...
<button n="2">
<desc>Rudder Trim Right</desc>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/rudder-trim</property>
<step>0.001</step>
</binding>
</button>
--property-toggle:指定したプロパティの値のオン/オフ(true/...
---<property>'''設定したいプロパティ'''</property>で設定...
---以下はスピードブレーキのオン/オフの切り替えをさせる例...
<desc>Toggle speedbrake</desc>
<binding>
<command>property-toggle</command>
<property>/controls/flight/speedbrake</property>
</binding>
--property-assign:指定したプロパティの値を指定した値に変...
---<property>'''設定したいプロパティ'''</property>で設定...
---<value>:値をここで指定します。
---左ブレーキをかける設定例
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">1.0</value> <!-- ブレーキは1.0...
</binding>
--property-swap:以下のように、2組の<property>タグで指定し...
<binding>
<command>property-swap</command>
<property>/sim/panel/path</property>
<property>/sim/panel_2/path</property>
</binding>
---nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてく...
-全て終わったら</PropertyList>と書いて、保存してください。
*** 操作すべきプロパティ [#g3e79609]
+操縦翼面
-/controls/flight/aileron
--エルロンです。-1〜+1の範囲のdouble形で、左方向が負、中...
-/controls/flight/elevator
--エレベータです。-1〜+1の範囲のdouble形で、機首上げ側が...
-/controls/flight/rudder
--ラダーです。-1〜+1の範囲のdouble形で、左方向が負、中心...
-/controls/flight/elevator-trim
--エレベータトリムです。機首上げ側が負、中心がゼロ、機首...
-/controls/flight/rudder-trim
--ラダートリムです。-1〜+1の範囲のdouble形で、左方向が負...
+エンジン関係
-/controls/engines/engine[0]/throttle
--第一エンジンのスロットルです。double形で、0で最小、1で...
-/controls/engines/engine[0]/mixture
--第一エンジンのミクスチャーです。double形で、0で最小、1...
-/controls/engines/engine[0]/propeller-pitch
--第一エンジンのプロペラピッチです。double形で、0で最小回...
なお、第二エンジンの場合、操作すべきプロパティが/controls...
エンジンの数が変わってもジョイスティックの設定をわざわざ...
+車輪関係
-/controls/gear/brake-left
--左車輪のブレーキです。double形で、0でブレーキ解除、1で...
-/controls/gear/brake-right
--右車輪のブレーキです。double形で、0でブレーキ解除、1で...
-/controls/gear/brake-parking
--駐機用ブレーキです。double形で、0でブレーキ解除、1でブ...
*** nasalスクリプトの使い方 [#z3f17efb]
-以下に、nasal経由でFGCOM向けにPTTを割り当てる例を記述し...
<button n="8">
<desc>PTT (for fgcom)</desc>
<binding>
<command>nasal</command>
<script>controls.ptt(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.ptt(0)</script>
</binding>
</mod-up>
</button>
--この場合、ボタン8を押すとcontrols.nas内のptt関数に、引...
--<mod-up>については詳しくは後述しますが、controls.nas内...
--参考資料(controls.nasより)
var ptt = func(b) setprop("/instrumentation/comm/ptt", b);
-また、特に引数を与えずに呼び出す場合もあります。
--以下の例は、スロットル制御をnasalで行う例です。
<axis n="2">
<desc>Throttle</desc>
<binding>
<command>nasal</command>
<script>controls.throttleAxis()</script>
</binding>
</axis>
--参考資料(controls.nasより)
# Joystick axis handlers (use cmdarg). Shouldn't be cal...
# other contexts. A non-null argument reverses the axis...
var axisHandler = func(pre, post) {
func(invert = 0) {
var val = cmdarg().getNode("setting").getValue();
if(invert) val = -val;
foreach(var e; engines)
if(e.selected.getValue())
setprop(pre ~ e.index ~ post, (1 - val) ...
}
}
var throttleAxis = axisHandler("/controls/engines/engine...
var mixtureAxis = axisHandler("/controls/engines/engine[...
var propellerAxis = axisHandler("/controls/engines/engin...
var carbHeatAxis = axisHandler("/controls/anti-ice/engin...
--この例では、変数throttleAxisを呼び出した後は以下のよう...
+++axisHandler()関数が呼び出される
+++nasalに組み込まれているcmdarg()関数を通して軸の値を取...
+++その値を(1-val)/2 した物をsetprop()関数でスロットルの...
+++↑を機体のエンジン数だけ繰り返し実行します。
多くの場合、「欲しい機能を与えてくれるnasal関数は何か」と...
以下でジョイスティックの設定に使える関数と引数を簡単に説...
-controls.gearDown('''n''')
--車輪の上げ下げをします。
---引数: '''n'''=-1で脚上げ、'''n'''=1で脚を下げます。'''...
-controls.flapsDown('''n''')
--フラップの上げ下げをします。
---引数:'''n'''=-1でフラップを(最大フラップに対して)33%上...
-controls.gearToggle()
--ギアの上げ下げをトグルします。controls.gearDown()と違い...
---引数:なし
-controls.startEngine()
--controls.selectEngine()又はcontrols.selectAllEngines()...
---引数:なし~
以下の様に、<repeatable>と<mod-up>を使うと、「ボタン13を...
<button n="13">
<desc>Fire Starter on Selected Engine(s)</desc>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>controls.startEngine(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.startEngine(0)</script>
</binding>
</mod-up>
</button>
-controls.selectEngine('''n''')
--操作したいエンジンを選択します。
---引数:エンジン番号('''n'''=0で第一エンジン、'''n'''=1で...
-controls.selectAllEngines()
--全てのエンジンを選択します。
---引数:なし
-props.setAll('''base''' , '''child''' , '''value''')
--以下のように、プロパティ配列のそれぞれに同じ値をセット...
"/controls/engines/engine[0]/starter"
"/controls/engines/engine[1]/starter"
"/controls/engines/engine[2]/starter"
---引数: '''base''':値をセットするプロパティの親要素''' ,...
---全てのエンジンのスターターを止めたい場合の例を示します。
props.setAll("/controls/engines/engine", "starter", 0)
-view.panViewDir('''step''')
--視界を左右に動かします。
---引数: '''step'''度ずつ視界を左右に動かします。正の値で...
-view.panViewPitch('''step''')
--視界を上下に動かします。
---引数: '''step'''度ずつ視界を上下に動かします。正の値で...
-view.resetView()
--視点をリセットします。x/Xキーでズームしていた場合、解除...
---引数:なし
*** ちょっと凝った設定 [#e2d40a3a]
-「ボタンを離した時に動作」させたいなら、</binding>の後ろ...
--ボタン4に「押している間だけ左車輪ブレーキを掛ける」=「...
<button n="4">
<desc>Left brake</desc>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">1.0</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">0.0</value>
</binding>
</mod-up>
</button>
-また、一つの軸やボタンで複数のプロパティの操作を割り当て...
これはスロットルなどに使えました・・・が、前述の通り今はnasa...
--以下に、軸4に第一エンジン(engine[0])と第二エンジン(engi...
<axis n="4">
<desc>Mixture</desc>
<binding>
<command>property-scale</command>
<property>/controls/engines/engine[0]/mixture</property>
<offset type="double">-1.0</offset>
<factor type="double">-0.5</factor>
</binding>
<binding>
<command>property-scale</command>
<property>/controls/engines/engine[1]/mixture</property>
<offset type="double">-1.0</offset>
<factor type="double">-0.5</factor>
</binding>
</axis>
**関連文書 [#a8bba39a]
さらに細かくカスタマイズしたい、といった場合は[[訳)ジョイ...
----
- 新規作成 2009/03/29 sambar
- ちょっと整形&js_demoの出力のところを一部修正 2009/03/29...
- nasalの部分を追加開始 2009/03/29 23:41 sambar
- js_demo導入のMac版を作成 2009/03/30 00:53 MiYABi
- nasalの部分の追加終了 2009/03/31 sambar
- 本メモ欄をリスト化 toshi &new{2009-04-19};
- SPAMにより削除された内容を復活 toshi &new{2009-12-27};
- 再びSPAMにより書き換えられたため、管理者権限でページ名...
- 管理者権限で暫定的にページ名を「ジョイスティックの設定(...
終了行:
[[FrontPage]]
注意:本文書はFlightGear2.9.0以前のものを対象としています...
2.10.0以降で、より簡単にジョイスティックを設定する方法は[...
* 手動設定ガイド [#re6faac7]
#contents
#br
#hr
#br
#br
** [Joystick Information] の確認 [#e8160fe4]
- ジョイスティックをつないだ状態でFlightGearを起動し、[He...
- グレー表示でクリック出来ない場合:
-- システムがジョイスティックを認識していないようです。
ジョイスティックが正しく接続されていることを確認してくだ...
#br
** Driver: 行の確認 [#b610d572]
- Driver: C:/Program Files/FlightGear/data/Input/Joystick...
-- 自動認識されているので追加設定は不要です。そのままお使...
- Driver: C:/Program Files/FlightGear/data/Input/Joystick...
-- 自動認識が正常に機能しなかったため、汎用のジョイスティ...
このため、基本的な操作しかできません。ジョイスティックの...
#br
** Joystick #0: 行の確認 [#v84b8034]
- 文字化けしている場合:
-- Vistaでこの現象が発生するようです。
自動認識させることはできませんが、手はまだあります。
ひとまず手順2に進んでください。
- "Saitek X45 Flight Controller"のように正常に表示される...
自動認識させることができるかもしれません。
同じく手順2に進んでください。
#br
#br
* ジョイスティック定義ファイルの調査 [#z3c7f8f4]
- FlightGear をインストールしたフォルダ内のFlightGear/dat...
使おうとしているジョイスティックの機種に該当しそうなジョ...
-- 存在する場合: もうすぐ設定完了です。手順3に進んでくだ...
-- 存在しない場合:
--- 残念ですが、既存のジョイスティック定義ファイルを雛形...
--- 作成方法については、以下の[[「ジョイスティック定義フ...
-- 基本的な操作のみでも構わなければ、汎用のジョイスティッ...
#br
#br
* $FG_ROOT/joysticks.xmlの修正 [#pcd6d7cb]
** 手順1.2でJoystick #0: が文字化けしていた場合: [#s482b5...
- FlightGear\data\joysticks.xml ファイルをテキストエディ...
<PropertyList>
<!--
<js-named include="Input/Joysticks/Local/X45-modi...
<js n="0" include="Input/Joysticks/Local/joystick...
-->
<js n="0" include="Input/Joysticks/Saitek/ST290-P...
</PropertyList>
- 再び手順1.の [Joystick Information] を確認し、正しく設...
** 手順1.2でJoystick #0: が"Saitek X45 Flight Controller"...
- 手順2で確認したジョイスティック設定ファイル(たとえばFli...
<PropertyList>
<name>Saitek X45</name>
<name>Saitek Saitek X45</name>
<name>Saitek X45 Flight Controller USB</name>
<name>Saitek X45 Flight Control Stick </name>
<name>Saitek Saitek X45 Flight Control Stick </name>
<name>Saitek X45 Flight Controller</name>
- 再び手順1.の [Joystick Information] を確認し、正しく設...
#br
#br
* ジョイスティック定義ファイルの作成 [#j761ff1f]
さて、先ほど「残念ですが」と言いましたが、「FlightGearの...
実は、翻訳文書の[[「訳)特徴」の、「内部プロパティは公開さ...
で出てきた「プロパティツリー」の値を書き換えることで飛行...
少々面倒に感じるかもしれませんが、ここを理解しておくと後...
#br
** 設定の前に[#y70211e6]
Windows版では、FlightGearのインストール先を"C:\Program Fi...
MacOSX版では、"/Applications"にインストールしていると仮定...
#br
** js_demoの入手方法 [#x0b79df1]
本来ならjs_demoはFlightGearに同梱されている(べき)なのです...
//筆者はMacを所有していないので、MacOSX版FlightGearにjs_d...
*** Windowsの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?p...
C:\Program Files\FlightGear\binフォルダに保存してください。
*** MacOSXの場合 [#n4a85b2b]
http://flightgear.jpn.org/modules/d3downloads/index.php?p...
解凍してできた js_demo を
/Applications/FlightGear.app/Contents/Resourcesフォルダに...
#br
** js_demoの起動 [#c62dc28e]
ここでは、js_demoの起動方法だけを書きます。出力結果の読み...
*** Windowsの場合 [#hc62daa8]
先ほど入手したjs_demoをコマンドプロンプトから起動してくだ...
c:\
cd "\Program Files\FlightGear\bin"
js_demo.exe
*** MacOSXの場合 [#hc62daa8]
先ほど入手したjs_demoをダブルクリックで、またはターミナル...
cd /Applications/FlightGear.app/Contents/Resources
./js_demo
#br
** js_demoの出力結果の読み方と、操作割り当ての決定手順 [#...
Joystick test program.
~~~~~~~~~~~~~~~~~~~~~~
Joystick 0 is "Saitek X45 Flight Controller"
Joystick 1 not detected
+---------------JS.0-----------------+---------------JS...
| Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4 Ax:5 Ax:6 Ax:7 | ~...
+------------------------------------+------------------...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
| 0000 +0.1 -0.0 +1.0 +1.0 +1.0 -1.0 +0.0 +0.0 | . . ...
最初の何行かの出力はスクロールが早くて画面を通り過ぎてし...
まず、最初の "Joystick 0 is "Saitek X45 Flight Controller...
先ほどの「1.2 Joystick #0: 行の確認」で認識された名前と同...
ただし、日本語版WindowsVistaでは "Microsoft PC ジョイステ...
次に、出力の読み方の解説をします。
左側の「JS:0」に注目してください。「JS:1」は繋いでいない...
一番左の列の値がボタンの状態を示していて、軸0〜軸7の順で...
- 初めに、何か適当に操作してみてください。ジョイスティッ...
--モード切り替えスイッチを「ボタン」として検出している場...
--その場合、モード切替スイッチを操作して、その値を記録し...
- モード切替スイッチのチェックが終わったら、それ以外のボ...
- 他のボタンについてもこのチェックを繰り返してください。
- 次に、スティックを左右に倒して、「どの軸の数値が変化す...
- その軸の、「中立位置での値」「右一杯に倒した時の値」「...
- 同様に他の軸についてもチェックしてください。
- HAT(POV)スイッチを操作してください。HATスイッチがボタン...
すると、以下のような表ができると思います。
さて、スティックのどの軸/ボタンに何を割り当てるかは人それ...
もし、適切な役割が思い浮かばない場合、取り合えず何も設定...
--軸
, 軸番号 , 実際の軸 , 方向 , 備考
, 0 , 左スティック左右 , 右に操作して正 , エルロン
, 1 , 左スティック上下 , 上に操作して正 , エレベータ
, 2 , 右スティック左右 , 右に操作して正 , ラダー
, 3 , 右スティック上下 , 上に操作して正 , エレベータトリム
, 4 , N/A , N/A , この軸は無い
, 5 , N/A , N/A , この軸は無い
, 6 , 左右ボタン , 右に操作して正 , POV左右
, 7 , 上下ボタン , 上に操作して正 , POV上下
--ボタン
, ボタン番号 , 数値 , 実際のボタン , 役割
, N/A ,0000 , ,
, 0 , 0001 , △ , ラダートリム(右)
, 1 , 0002 , ○ , ミクスチャ リッチ
, 2 , 0004 , × , ミクスチャ リーン
, 3 , 0008 , □ , ラダートリム(左)
, 4 , 0010 , L2 , スロットル閉
, 5 , 0020 , R2 , スロットル開
, 6 , 0040 , L1ボタン , プロペラ回転下げ(高ピッチ)
, 7 , 0080 , R1ボタン , プロペラ回転上げ(低ピッチ)
, 8 , 0100 , スタート , セルモータを回す
, 9 , 0200 , セレクト , 見る方向をリセット
, 10 , 0400 , L3 , 車輪ブレーキ
, 11 , 0800 , R3 , 使用せず
#br
** 実際にXMLファイルを記述する [#hab46326]
- その前に、「1.2 Joystick #0: 行の確認」で、文字化けして...
<PropertyList>
<!--
<js-named include="Input/Joysticks/Local/X45-modified.x...
<js n="0" include="Input/Joysticks/Local/joystick_0.xml...
-->
<js n="0" include="Input/Joysticks/manufacture/urjoystic...
</PropertyList>
これは、ジョイスティックの自動認識の結果を上書きして、使...
実際のところ、2バイト文字を含まないファイル名なら何でもい...
(他のジョイスティック定義ファイル同様、$FGROOT\Input\Joys...
#br
** ジョイスティック設定ファイルを実際に書く [#ncd462e5]
多くの場合、「既存のジョイスティック定義ファイルを元に・・・...
もちろん、既存のジョイスティック定義ファイルの中に、あな...
-まず、(メモ帳以外の)テキストエディタを開き、先頭に<Prope...
-次に<name></name>と書き、両タグの間に先ほどjs_demoで表示...
-以下の物を軸の数だけコピー&ペーストしてください。
<axis n="">
<desc></desc>
<dead-band>0<dead-band>
<binding>
<command></command>
</binding>
</axis>
+まず、<axis n="'''軸番号'''">に変更して、どの軸か指定し...
+軸の概要を<desc>タグと</desc>タグの間に書きます。(<desc>...
+デッドバンドを設定したい場合、<dead-band>と<dead-band>の...
+また、動かした方向「だけ」が必要な場合は<high>と<low>の2...
---<high>と<low>を使って、軸をエレベータートリムの調整に...
<axis n="1">
<low>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/elevator-trim</property>
<step type="double">0.001</step>
</binding>
</low>
<high>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/elevator-trim</property>
<step type="double">-0.001</step>
</binding>
</high>
</axis>
+<command>と</command>の間に、使いたいコマンドを書きます...
--property-scale:生のジョイスティックの出力を加工してプロ...
--優先順位はdead-band,offset,factorの順です。別の表現をす...
---<property>'''設定したいプロパティ'''</property>で設定...
---<offset>'''オフセット量'''</offset>で0点をいくらズラす...
---<factor>'''倍率'''</factor> ↑で0点をずらした場合に操作...
---エルロンを操作するための使用例
<binding>
<command>property-scale</command>
<property>/controls/flight/aileron</property>
<offset type="double">0.0</offset>
<factor type="double">1.0</factor>
</binding>
--property-adjust:一度実行される毎に値をstepだけ増やしま...
---<property>'''設定したいプロパティ'''</property>で設定...
---<step>'''一度の動作で増やす量'''</step>(負の数を指定す...
--nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてく...
-全ての軸の設定が終わるまで、これを繰り返します。
#br
-それが終わったら、以下の物をボタンの数だけコピー&ペース...
<button n="">
<desc></desc>
<repeatable>false</repeatable>
<binding>
<command></command>
</binding>
</button>
+まず、<axis n="'''ボタン番号'''">に変更して、どのボタン...
+ボタンの概要を<desc>タグと</desc>タグの間に書きます。(<d...
+リピート動作させたい場合は、<repeatable>のところを、以下...
<repeatable>true</repeatable>
+<command>と</command>の間に、使いたいコマンドを書きます...
--property-adjust:一度実行される毎に値をstepだけ増やしま...
---<property>'''設定したいプロパティ'''</property>で設定...
---<step>'''一度の動作で増やす量'''</step>(負の数を指定す...
---以下のサンプルは、ボタン2に「ラダートリムを0.001(正な...
<button n="2">
<desc>Rudder Trim Right</desc>
<repeatable>true</repeatable>
<binding>
<command>property-adjust</command>
<property>/controls/flight/rudder-trim</property>
<step>0.001</step>
</binding>
</button>
--property-toggle:指定したプロパティの値のオン/オフ(true/...
---<property>'''設定したいプロパティ'''</property>で設定...
---以下はスピードブレーキのオン/オフの切り替えをさせる例...
<desc>Toggle speedbrake</desc>
<binding>
<command>property-toggle</command>
<property>/controls/flight/speedbrake</property>
</binding>
--property-assign:指定したプロパティの値を指定した値に変...
---<property>'''設定したいプロパティ'''</property>で設定...
---<value>:値をここで指定します。
---左ブレーキをかける設定例
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">1.0</value> <!-- ブレーキは1.0...
</binding>
--property-swap:以下のように、2組の<property>タグで指定し...
<binding>
<command>property-swap</command>
<property>/sim/panel/path</property>
<property>/sim/panel_2/path</property>
</binding>
---nasal:nasalスクリプトを実行します。
---<script>タグと</script>タグの間にスクリプトを書いてく...
-全て終わったら</PropertyList>と書いて、保存してください。
*** 操作すべきプロパティ [#g3e79609]
+操縦翼面
-/controls/flight/aileron
--エルロンです。-1〜+1の範囲のdouble形で、左方向が負、中...
-/controls/flight/elevator
--エレベータです。-1〜+1の範囲のdouble形で、機首上げ側が...
-/controls/flight/rudder
--ラダーです。-1〜+1の範囲のdouble形で、左方向が負、中心...
-/controls/flight/elevator-trim
--エレベータトリムです。機首上げ側が負、中心がゼロ、機首...
-/controls/flight/rudder-trim
--ラダートリムです。-1〜+1の範囲のdouble形で、左方向が負...
+エンジン関係
-/controls/engines/engine[0]/throttle
--第一エンジンのスロットルです。double形で、0で最小、1で...
-/controls/engines/engine[0]/mixture
--第一エンジンのミクスチャーです。double形で、0で最小、1...
-/controls/engines/engine[0]/propeller-pitch
--第一エンジンのプロペラピッチです。double形で、0で最小回...
なお、第二エンジンの場合、操作すべきプロパティが/controls...
エンジンの数が変わってもジョイスティックの設定をわざわざ...
+車輪関係
-/controls/gear/brake-left
--左車輪のブレーキです。double形で、0でブレーキ解除、1で...
-/controls/gear/brake-right
--右車輪のブレーキです。double形で、0でブレーキ解除、1で...
-/controls/gear/brake-parking
--駐機用ブレーキです。double形で、0でブレーキ解除、1でブ...
*** nasalスクリプトの使い方 [#z3f17efb]
-以下に、nasal経由でFGCOM向けにPTTを割り当てる例を記述し...
<button n="8">
<desc>PTT (for fgcom)</desc>
<binding>
<command>nasal</command>
<script>controls.ptt(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.ptt(0)</script>
</binding>
</mod-up>
</button>
--この場合、ボタン8を押すとcontrols.nas内のptt関数に、引...
--<mod-up>については詳しくは後述しますが、controls.nas内...
--参考資料(controls.nasより)
var ptt = func(b) setprop("/instrumentation/comm/ptt", b);
-また、特に引数を与えずに呼び出す場合もあります。
--以下の例は、スロットル制御をnasalで行う例です。
<axis n="2">
<desc>Throttle</desc>
<binding>
<command>nasal</command>
<script>controls.throttleAxis()</script>
</binding>
</axis>
--参考資料(controls.nasより)
# Joystick axis handlers (use cmdarg). Shouldn't be cal...
# other contexts. A non-null argument reverses the axis...
var axisHandler = func(pre, post) {
func(invert = 0) {
var val = cmdarg().getNode("setting").getValue();
if(invert) val = -val;
foreach(var e; engines)
if(e.selected.getValue())
setprop(pre ~ e.index ~ post, (1 - val) ...
}
}
var throttleAxis = axisHandler("/controls/engines/engine...
var mixtureAxis = axisHandler("/controls/engines/engine[...
var propellerAxis = axisHandler("/controls/engines/engin...
var carbHeatAxis = axisHandler("/controls/anti-ice/engin...
--この例では、変数throttleAxisを呼び出した後は以下のよう...
+++axisHandler()関数が呼び出される
+++nasalに組み込まれているcmdarg()関数を通して軸の値を取...
+++その値を(1-val)/2 した物をsetprop()関数でスロットルの...
+++↑を機体のエンジン数だけ繰り返し実行します。
多くの場合、「欲しい機能を与えてくれるnasal関数は何か」と...
以下でジョイスティックの設定に使える関数と引数を簡単に説...
-controls.gearDown('''n''')
--車輪の上げ下げをします。
---引数: '''n'''=-1で脚上げ、'''n'''=1で脚を下げます。'''...
-controls.flapsDown('''n''')
--フラップの上げ下げをします。
---引数:'''n'''=-1でフラップを(最大フラップに対して)33%上...
-controls.gearToggle()
--ギアの上げ下げをトグルします。controls.gearDown()と違い...
---引数:なし
-controls.startEngine()
--controls.selectEngine()又はcontrols.selectAllEngines()...
---引数:なし~
以下の様に、<repeatable>と<mod-up>を使うと、「ボタン13を...
<button n="13">
<desc>Fire Starter on Selected Engine(s)</desc>
<repeatable>true</repeatable>
<binding>
<command>nasal</command>
<script>controls.startEngine(1)</script>
</binding>
<mod-up>
<binding>
<command>nasal</command>
<script>controls.startEngine(0)</script>
</binding>
</mod-up>
</button>
-controls.selectEngine('''n''')
--操作したいエンジンを選択します。
---引数:エンジン番号('''n'''=0で第一エンジン、'''n'''=1で...
-controls.selectAllEngines()
--全てのエンジンを選択します。
---引数:なし
-props.setAll('''base''' , '''child''' , '''value''')
--以下のように、プロパティ配列のそれぞれに同じ値をセット...
"/controls/engines/engine[0]/starter"
"/controls/engines/engine[1]/starter"
"/controls/engines/engine[2]/starter"
---引数: '''base''':値をセットするプロパティの親要素''' ,...
---全てのエンジンのスターターを止めたい場合の例を示します。
props.setAll("/controls/engines/engine", "starter", 0)
-view.panViewDir('''step''')
--視界を左右に動かします。
---引数: '''step'''度ずつ視界を左右に動かします。正の値で...
-view.panViewPitch('''step''')
--視界を上下に動かします。
---引数: '''step'''度ずつ視界を上下に動かします。正の値で...
-view.resetView()
--視点をリセットします。x/Xキーでズームしていた場合、解除...
---引数:なし
*** ちょっと凝った設定 [#e2d40a3a]
-「ボタンを離した時に動作」させたいなら、</binding>の後ろ...
--ボタン4に「押している間だけ左車輪ブレーキを掛ける」=「...
<button n="4">
<desc>Left brake</desc>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">1.0</value>
</binding>
<mod-up>
<binding>
<command>property-assign</command>
<property>/controls/gear/brake-left</property>
<value type="double">0.0</value>
</binding>
</mod-up>
</button>
-また、一つの軸やボタンで複数のプロパティの操作を割り当て...
これはスロットルなどに使えました・・・が、前述の通り今はnasa...
--以下に、軸4に第一エンジン(engine[0])と第二エンジン(engi...
<axis n="4">
<desc>Mixture</desc>
<binding>
<command>property-scale</command>
<property>/controls/engines/engine[0]/mixture</property>
<offset type="double">-1.0</offset>
<factor type="double">-0.5</factor>
</binding>
<binding>
<command>property-scale</command>
<property>/controls/engines/engine[1]/mixture</property>
<offset type="double">-1.0</offset>
<factor type="double">-0.5</factor>
</binding>
</axis>
**関連文書 [#a8bba39a]
さらに細かくカスタマイズしたい、といった場合は[[訳)ジョイ...
----
- 新規作成 2009/03/29 sambar
- ちょっと整形&js_demoの出力のところを一部修正 2009/03/29...
- nasalの部分を追加開始 2009/03/29 23:41 sambar
- js_demo導入のMac版を作成 2009/03/30 00:53 MiYABi
- nasalの部分の追加終了 2009/03/31 sambar
- 本メモ欄をリスト化 toshi &new{2009-04-19};
- SPAMにより削除された内容を復活 toshi &new{2009-12-27};
- 再びSPAMにより書き換えられたため、管理者権限でページ名...
- 管理者権限で暫定的にページ名を「ジョイスティックの設定(...
ページ名: