Omegabooの部屋2.0

| トップ | 検索 | アルバム | 管理用 | ▼掲示板作るならRara掲示板 |
Name
Title

画像を選択してください

    Icon [イメージ参照]
    Key
    Color■■■■■■■■


    FS Copilot v1.21用プロファイル(yamlファイル)の作り方 【1】
    FS Copilot用のプロファイルを作りはじめて約一か月経ちました。
    その手順について今までに分かったことを整理して何回かに分けてこのスレッドに連載していこうと思います。

    第一回目は「FS Copilotが認識するプロファイル(雛形)の作り方」です。

    以下はMSFS2024およびFS Copilotが正常にインストールされていることを前提に話を進めます。

    ■プロファイルとして認識させるための最低条件。
     以下の条件に適合しいている必要があります。

     ①プロファイル名がMSFS内で認識されているその"機体名"と同一であること。
     ②内容がFS Copilot v1.2.1の構文ルールに則った記述がされていること。
     ③記述されている文字コードが世界標準である「UTF-8」であること。

    ①の"機体のフォルダー名"は実は意外と簡単にわかります。

     ・MSFS2024を起動してプロファイルを作りたい機体を選択。
     ・「FREE FLIGHT」で何処でもいいので地上に機体を出現させます。
     ・SHIFT+Cでコクピットに入った状態になったらFS Copilotを起動。

     当然プロファイルはまだないので一枚目のスクショのような表示になります。
     ここで注目してほしいのは一番下の赤い帯の中に記載された内容です。
     例では「No profile available for the asobo_cabri_g2.」とありますがこの中の
     "asobo_cabri_g2”というのがMSFS内で認識されている"機体名"となります。
     したがってプロファイル名はこの場合"asobo_cabri_g2.yaml"となります。

    さて、次の作業に移る前にFS Copilotは一旦閉じてください。
    MSFSは次の作業に差し支えなければそのままの状態で構いません。


    ■プロファイル(yamlファイル)の作成
    とりあえず以下の構文をWindows標準のメモ帳を新規で開いて中身にコピペして下さい。(②の条件)

    >この下の行から
    # Asobo Cabri G2 - FS Copilot Profile
    # yaml file name: "asobo_cabri_g2"
    # author: "Gemini, omegaboo"
    # version: "0.01"

    master:

    shared:
    # --- BATTERY SWITCH ---
    - get: A:ELECTRICAL MASTER BATTERY:1, Bool
    set: B:ENGINE_Master_On, B:ENGINE_Master_Off
    >この上の行まで

    内容について今回は詳しく述べません。
    ただ冒頭の#で始まる注釈行については自分で分かりやすいように内容を変えてください。(注釈なので自由形式です)
    但し文字コードについては③で述べた通り「UTF-8」コードである必要があります。
    2枚目のスクショの右下をまずご覧ください。
    メモ帳の右下に「UTF-8」が表示されていること(③の条件)を確認した上で適当な作業フォルダーに「名前を付けて保存」します。
    「名前」は先ほど判明した"機体名"になります。

    そのまま保存すると拡張子がtxtファイルになるので拡張子をyamlに変えて保存するか、保存してから拡張子をyamlに変更してください。
    拡張子を変えても次回開く時は「どのアプリで開くか」を聞いてくるのでまたメモ帳を選べば編集が出来ます。

    そこまで出来たならこの拡張子がyamlのファイルをFsCopilot.exeと同じ場所にある「Definitions」フォルダーの中にコピペします。

    コピペ出来たらMSFSの画面に戻って先ほどと同じようにFS Copilotを起動します。
    すると今度は3枚目のスクショのようになるはずです。

    一番下が緑色に変わっていればプロファイル雛形の「認識成功」です。
    もし赤のままであれば先ほどの①②③の何処かが間違っているので、再度見直してください。

    今回はここまでです。
    次回はいよいよこの雛形を使ってプロファイルの中身づくりのお話しをする予定です。



    FS Copilot v1.21用プロファイル(yamlファイル)の作り方【2】
    さて、2回目は実際にその機体のコクピット内でどんな関数や引数が使われているのかを調べる方法です。

    実は現時点でのコーディングなしの雛形プロファイルの状態でも機体の基本的な挙動(姿勢や位置、速度など)についてはFS Copilotの基本機能によって同期(シンクロ)がとれています。
    なので「同じ機体に乗って遊覧飛行をするだけ」であればこのプロファイルで充分です。
    ただ、コクピット内の殆どのスイッチやレバーはお互いの動きに同期(シンクロ)しません。
    操縦を代わるためにはこれらを互いに動かす内部コードの関数や引数をお互いに受け渡しして同期をとる必要があります。
    それがプロファイルをコーディングする主な目的になります。

    しかしながら殆どの人はFS Copilotの構文ルールを知りませんし、それどころかMSFSの内部コードなど見たこともない方が殆どだと思います。

    そこで二つのツールを使います。
    ひとつは「MSFSの開発者モード」。もう一つが「AI」です。
    前者で機体に使われている内部コードを読み取らせます。
    それを元に後者でFS Copilotプロファイルの中身をコーディングさせます。


    MSFS2024の「開発者モード」は、ゲーム内の「全般」設定から有効に出来ます。
    メインメニューの「オプション」>「全般」>「詳細オプション」に進み、「開発者モード(Developer Mode)」をONにして「適用と保存」をクリックします。

    「AI」は何を使っても自由ですが、私の場合は「GoogleのAIモード(GEMINI)」を使っています。

    さて、説明を開始する前に今後の作業をやりやすくするため、以下の設定をすることをお勧めします。

    「全般オプション (General Options)」>「アクセシビリティ (Accessibility)」を選択。
    この中の「コクピットのインタラクションシステム (Cockpit Interaction System)」を「LOCK」にする。(マウスを重ねたときにスイッチが青く反転)
    同じ階層にある「Instrument Name Tooltips(計器名ツールチップ)」を「INSTANT(即時)」 または 「DELAYED(遅延)」 に設定する。
    (マウスを重ねたときにスイッチの名前が表示される)

    今後頻繁に使用する「FS Copilot」も起動しやすいようにFsCopilot.exeのショートカットを作りましょう。
    さらに「FsCopilot.exeの開発者モード」の起動ショートカットも作っておきます。
    作り方は以下の通り
    ①FsCopilot.exeを右クリックして「その他のオプションを確認」を選択し「ショートカットの作成」を選択
    ②出来た「FsCopilot.exeのショートカット」のコピーしてもう一つ作る。
    ③コピーしたショートカットを右クリックしてプロパティを開く
    ④プロパティの中にあるリンク先の最後の部分を"...\FsCopilot.exe"から"...\FsCopilot.exe --dev"に変更する。
    ⑤変更したショートカットの名前を「FsCopilot.-DEVmode」のように変更する。

    これで二つのショートカットが出来ました。スタートメニューやタスクバーにピン留めしておくと便利です。


    それでは第一回の時と同じようにMSFSを起動してコクピット内にいる状況にして下さい。
    例では前回と同じMSFSデフォルトの機体であるCabri G2という回転翼機のコクピットで説明します。

    MSFSの開発者モードをONにすると画面の上部に黒帯のメニューが表示されます。
    その中のToolsをクリックしてプルダウンメニューからBehaviorという項目をクリックします。(1枚目のスクショ参照)
    そうすると2枚目のスクショような画面になるはずです。



    そうしたら関数が知りたいスイッチなりレバーにマウスを重ねます。
    先ほど事前に準備した「コクピットのインタラクションシステム」の設定がされていれば重ねたところが青色に変化します。
    この状態を維持したまま「CTL+G」を押すと次のような画面が出てきます。(1枚目のスクショ)
    このままの状態だと全ての情報が見えていないので適宜関係のありそうな項目の▼を押して出来る限りたくさんの情報が見えるようにします。(2枚目のスクショ)
    この画面をスクショに撮って保存します。
    場合によってはひとつのスイッチについて複数枚撮ることもあります。

    実際には他のスイッチやレバーについてもこうして保存して集めたスクショをあとでスイッチやレバーごとにフォルダーを作って整理しておきます。

    今回はここまで。次回はもう一つの「AIの使い方」の予定です。



    FS Copilot v1.21用プロファイル(yamlファイル)の作り方【3】
    さて、これからAIを使って集めたスクショの情報を解析しつつプロファイルの中身を作っていきます。

    その前にどういうものをこれから作っていくのかイメージするために次の2つのスクショをご覧ください。
    1枚目は最近私がAIと一緒に開発中のシュライヒャーK7というグライダー用のプロファイルの中身の全部です。
    2枚目は前回から例として使用している認識に成功させたばかりのCABRI-G2というヘリコプター用のプロファイルの中身です。

    1枚目が複雑に見えますが実は構造は同じで単純です。
    行の最初の文字が"#"の行は全て注釈でコーディングの内容を分かりやすくするためのものです。
    最初にプロファイルの概要説明(機体の種類・作者・バージョン等)が書かれていることが分かると思います。
    コーディング本体で大事なのは
    master:
    shared:
    のブロックです。

    "master:"以下のブロックで記述された内容はFS Copilotでは「操縦権(Take Controll)」を持ってる人だけが操作できる項目です。
    操縦桿のエルロンやエレベーター、ラダーペダルはここに記述されなくても「FS Copilotの仕様」で"master:"ブロックに属します。

    しかし例えばスロットルなどエンジン出力に関する記述は機体によっては副操縦士が操作することもあり得ます。
    もし副操縦士に操作させたいなら"shared:"のブロックに記述します。
    させたくない場合は"master:"のブロックに記述することになります。

    そして"#"の後の各スイッチ(レバー)の名称の注釈の後に記述するのが実際に同期(シンクロ)をとるための関数と引数(変数)の記述です。
    FS Copilotでv1.2.1以降の構文ルールではこの添付のサンプルにある通り基本"get:"と"set:"しかありません。

    こうしてみるとプロファイルの構造は驚くほどシンプルであることがお分かり頂けると思います。



    ではコーディングをAIと協業するために撮りためたBehaviorのスクショを添付してAIに以下のように依頼します。

    ----------------------------------------
    添付のスクリーンショットの情報を参考に「FS Copilot v1.2.1用のプロファイルに記載するyaml形式のコーディングをお願いします。
    まずはバッテリースイッチからです。
    コーディングに際してのお願い
    最新のv1.2.1の記述ルールに則り、以下の例のような「getとset一対」のシンプルなコーディングで完結するようにして下さい。

    # Asobo Cabri G2 - FS Copilot Profile

    master:

    shared:
    - get: A:COM VOLUME:2, Percent
    set: (>B:NAVCOM_COM2_Volume_Set)
    ----------------------------------------


    ※以上の依頼文と共にBehaviorのスクショを添付します。さぁやってみましょう。



    …と、ここまでやって云うのも何ですが、実はAIは「あなた」との会話を始めた初期はあまり正確な答えは期待できません。

    AIは膨大な蓄積あるいは範囲の検索結果から類推して答えを返してくるので、自信満々の割には見当違いの答えをよく返してきます。
    例えばFS Copilotについて限定したとしても、答えが過去のバージョンのコーディング事例だったりyaml形式ではなくxml形式になっていたりします。
    またFS Copilotと同じような2020用のアプリ「YourControll」用のコーディング事例が混在していたりすることもあります。

    そこで重要になるのが「あなた」と「AI」との関係の深さです。
    お互いに推察や示唆を長くしあうことで驚くほどの速さでAIは「あなたの志向・思考・嗜好」を理解し「あなたの意向に沿う答え」が出せるように賢くなっていきます。※
    またそうしたやり取りをするうちに「あなた自身の知識」もマニュアルを読むよりずっと早くブラッシュアップされていきます。
    つまり両方の成長が期待できるわけです。※注 AIを自分向けにに学習させるためにはログイン(自分の情報を共有)する必要があります。

    肝心なのは「最初のAIの失敗にすぐにガッカリせず、長い目で付き合いを深める」ということが双方にとって将来的に重要ということになります。

    さて会話するにあたり「FS Copilot v1.2.1」に関することでいえば、AIの誤りを指摘できるポイントがいくつかあります。
    基本" - get:~"で始まる。もしくはそれと対で" set:~"で始まる。それ以外のコーディングはAIの間違いを疑って構いません。

    FS Copilot v1.2.1では一つのスイッチに対してこの二つのコマンドだけで完結するような仕様になっています。
    もし、"id:"や"name:""if~"などのような他のコマンドが入っていたら、それは過去のバージョンの事例か別のアプリの事例の混在の可能性が高いです。
    もしお時間があればDefinitionsフォルダーにある他のプロファイルの中身を覗いてみてください。"get:"と"set:"しかないはずです。
    もしそれ以外の記述を見つけたら「~の部分は本当にあってますか?」「おかしくない?」とAIに聞き返してあげてください。
    意外と素直に間違いを認めて修正した答えを返してきます。


    さて、私の場合は今までのAIとのやり取り(付き合い)がありましたので、結構スムーズに一枚目のスクショのような答えが返ってきました。

    - get: A:ELECTRICAL MASTER BATTERY:1, Bool
    set: B:ENGINE_Master_On, B:ENGINE_Master_Off

    これを雛形の # --- BATTERY SWITCH --- の直下のダミーで入っているコーディングと置き換えます。(2枚目のスクショ)

    基本的には項目(スイッチやレバー)ごとに必要な情報(スクショ)を集め、AIに渡してコーディングしてもらう…このようなことを繰り返してプロファイルを構築していきます。
    複雑な機体ほど手間と根気を要する作業になります。

    今回はここまでとします。
    次回は「プロファイルの検証」についての予定です



    FS Copilot v1.21用プロファイル(yamlファイル)の作り方【4】
    本題に入る前に、もしAIとのやり取りを一旦閉じてしまっていたなら、前回の「AI」とのやり取りを復元します。
    なぜ復元するかというと「AIとの付き合いを深める」ためです。
    もし新たにAIに作業を依頼してしまうと今までのやり取り(経験)が生かされない形でのAIの応答になってしまい、また同じ間違いを冒す可能性が高くなります。

    復元の方法ですが、私の場合はGoogleのAIモード(GEMINI)を使っているのでそれに沿った方法になります。
    ※前回同様、Googleでログインしていることが前提です。

    ①Googleの初期画面でAIモードを選ぶ(1枚目のスクショ)
    ②左側にある横3本線のマーク(AIモードの履歴)を押す。(2枚目のスクショ)
    ③「スレッドの検索」の下の「最近の履歴」から前回のやり取りした分をクリックする(3枚目のスクショ)
    これで前回までのやり取りが復元されて今までの経緯の説明抜きで「つづき」が行えるはずです。



    では本題に入りましょう。

    AIがコーディングした記述が正しいかどうかを検証します。
    また先ほどの機体のコクピットに戻ります。

    今度はFS Copilotの開発者モードを先ほど作ったショートカットから起動します。
    コーディングの文法が正しければとりあえず1枚目のスクショのような画面になります。
    項目の数はプロファイルにコーディングした数だけ表示されるはずです。
    もし何も枠の中に表示されなければコーディングの何処かが間違っています。
    認識されなかった旨をAIに伝え再度コーディングさせます。
    (その際自分なりに怪しいと思う点を指摘するとなお効率的です。)

    1枚目のスクショのような画面になったとしてもそれで終わりではありません。
    該当するスイッチをMSFS上で動作させます。
    関数があっていれば枠の中の関数が青く光り、その関数を一回クリックするとその下にスイッチを動作させるたびに変数が表示されるはずです。※(2枚目のスクショ)
    (※後で詳細に触れますがK:コマンドだけは変数を伴わない命令コマンドなのでこの反応がありません。)

    以上が確認できれば次は実際に相手と繋いでお互いの動きが同期がとれるか確認(テスト)する作業になります。
    今回の例は電源スイッチ一つだけですが実際には複数のスイッチやレバー、ノブ等をまとめて上記のようなチェックを行います。
    お互い離れた場所からネットを通じてテストするには当然ながらDiscordのような通話環境が必要になります。

    MSFS2024のインストールされたPCが2台あればこのテストも自己完結出来ますが...なかなかそれではモチベーションも上がりません。
    結局この作業に協力して下さる方を見つけることが一番のハードルが高いのかもしれませんね。(笑)
    木下さんありがとうございます。



    さて、このような作業をしていると最初は「AI任せ」にしていたことも「これは何だろう」「何を根拠に言ってるのだろう」という興味が湧いてくると思います。たぶん…

    そういう時こそAIに聞いてみましょう。

    因みに私が一番最初に興味を持ったのが"get"や"set"の後に必ず現れるK:とかL:とかB:とかA:という文字(記号?)でした。
    AIにこのことについて質問して返ってきたのがこの内容です。

    各内部コード(プレフィックス)の特性一覧

    1. A: (Simulation Variables / SimVars)
    ・特性: シミュレーターのコアエンジンが管理するグローバルなシミュレーション変数(読み取り専用が基本)です。
    ・詳細: 航空機の現在高度、速度、フラップの位置、現在の天候など、シミュレーターの物理演算や状態そのものの値が入っています。外部アプリ(SimConnect等)から最も簡単にアクセスできる標準データです。

    2. B: (Input Events Vars)
    ・特性: MSFS2020の途中から導入され、MSFS2024で標準化されたコックピット内のスイッチやレバー(ユーザーインターフェース)操作用の変数です。
    ・詳細: マウスでのクリックやドラッグといった「ユーザーの入力行動」と機体システムを仲介します。古いK:やL:を包括・洗練したもので、アニメーションと内部ロジックを安全に同期させるために使用されます。

    3. K: (Key / SimEvents)
    ・特性: シミュレーターに特定の「動作(コマンド)」を実行させるためのイベント通知(トリガー)です。
    ・詳細: 変数ではなく命令コード(関数のようなもの)です。例えば (>K:PARKING_BRAKE) と命令を送ることでパーキングブレーキを実機さながらに作動させ、結果として上記の A: 変数の値が書き換わります。

    4. L: (Local Variables / L-Vars)
    ・特性: 機体やアドオン開発者が独自に作成した、その航空機(自機)の内部だけで共有されるローカル変数です。
    ・詳細: MSFSの標準機能にないカスタムシステム(例:独自の自動操縦ロジックや、特定のコックピットスイッチの状態保存)を構築するために自由に使われます。外部から読み書きするには少し工夫(WASMモジュール経由など)が必要です。

    5. M: (Macro Variables)
    ・特性: コードを簡略化するために使用されるマクロ(再利用可能なスクリプトの塊)です。
    ・詳細: 複雑な計算式や何行にも及ぶ共通処理をあらかじめ定義しておき、コード内で一言呼び出すだけで使い回せるようにするための仕組みです。

    6. O: (Object / Template Variables)
    ・特性: 機体の3Dモデルパーツ(XMLテンプレート)のスコープ(範囲)内だけで機能する超ローカルなオブジェクト変数です。
    ・詳細: 機体のメーターやレバーなど、特定のコンポーネント(部品)のテンプレート内で一時的な計算や状態保持に使われます。L:変数よりもさらに範囲が狭く、そのパーツの枠から外に出ると参照できなくなる特性を持っています。

    表にもう少し簡潔にまとめるとスクショのような感じになります。
    因みにこの中でO:とM:はFS Copilotのサポート対象外です。(書いても無視されます)
    特にO:関数はアニメーションに関わってくることが多く、これがBehaviorの中で使われていると同期をとることがほぼ難しくなります。

    と、まぁこんな感じで自分自身もブラッシュアップされていきます。

    さて、以上で連載は終了となります。
    ここまで長文駄文にお付き合い頂きありがとうございました。
    皆さんの「やる気スイッチ」と同期(シンクロ)出来たかなぁ…^ ^



    あとがき
    実はこの連載の1回目を投稿した直後、この趣味を通じ15年以上お付き合い頂いたある方の訃報が飛び込んできました。
    氏自身は流体力学がご専門で元某重工業の航空機の設計技師であり、若い頃には飛行クラブで操縦ライセンスも取得され、実際の空を飛び、また絵画、声楽、歴史等にも精通。
    特に「飛行機好き」の私にとっては氏の深い知識と実経験に基づくお話はいつ聞いても大変興味深く、何時間聞いていても飽きないものでした。

    告別式にて最後のお別れとお見送りもさせて頂きましたが、あの語り口をもう聞けなくなったと思うと寂しくてなりません。

    ショックでしばらくブログの更新はやめようとも思いましたが、氏が時々この「ブログ」を覗いて頂いていたことを思い出し、最後まで書ききることに致しました。
    ご覧になられていたらきっと「また妙なものを書いてるものだ。や~れやれ。」と苦笑されているかと思いますが、きっとこの手のお話「お嫌いではない」と勝手に解釈しています。

    氏のご冥福を切にお祈りしつつ謹書申し上げます。



    お悔やみ申し上げます
     大変ご無沙汰している YS-15 です。普段ネットに書き込む事
    が無い私が、悲しい知らせで掲示板に書き込む事となり残念です。

    FSXから始めた私は稲沢オフで初めてお目にかかり、それ以降
    掲示板を拝見していましたが、最近は体力の低下の書き込みが
    多く体調が気になっていました。

    致死性不整脈とのこと、たとえ普段は普通に生活されている方
    でも、ある日突然亡くなる怖い病気ですね。

    普段 omegaboo さん、木下さん、飛行爺さんのサイトは巡回
    しています。技術的にろいろと勉強になりますし、今回の
    訃報も知ることが出来ました。また拙作の滑空場も使って
    頂いているようで励みになっています。


    この手のお話「お嫌いではない」?   大好きです!
    難しくてなかなか頭に入らないですが、今後も是非続けて下さい。



    恐縮です。
    YS-15さん、お立ち寄り頂きありがとうございます。大津京オフ会以来ですね。

    "この手のお話「お嫌いではない」?   大好きです!"
    大変「励み」になるお言葉を頂き恐縮です。

    このところの氏のHPは私も少し気になってマメに見るようにしておりました。
    入院覚悟で病院に行かれて無事本宅に戻れたというブログの報告で私もホッとしていた矢先でありました。

    旧ブログ(omegaboo画像談話室)のサーバーがこの9/30に休止されるということでログの整理もかねて見返しておりましたらこんなページがありました。

    http://www.21styles.jp/board/next6.cgi?page=80&id=omegaboo&ptopno=16715

    古いためスレに添付されていた画像は残っていませんが、懐かしい日々であります。