ご無沙汰しております。ここ1カ月半ほど、自作のフライト・コードラント(航空四分儀)の改良に取り組んでいました。某有名メーカーの六分儀は、最小目盛りが0.2分角(12秒角)だそうですが、私の新しいコードラントは最小0.1分角または1秒角まで(好きな方の単位で)、太陽や惑星、恒星などの高度角が読めます。フライトシミュレーターの世界で、実世界の六分儀を1けた上回る分解能が実現できたわけで、いささかワクワクしております。使いやすさの面でも、高度角の「度」「分」の整数部は、全部の目盛りに添えた数字で直読でき、非常に観測が楽になって、ミス防止に繋がりそうです。改良のカギは、高度角目盛りの示度を60倍に拡大するメカニズムを、ふと思いついたことでした。以下に若干、経緯をご報告いたします。「投稿画像」の写真と併せてご覧頂けましたら幸いです。●●「分度器」にカーソルを取り付ける:これまでのフライト・コードラントは、平たく言いますと、方位盤付き精密分度器でした。機体の動きに縛られず、方位盤は常に北向き水平に、天体の高度を測る分度器は常に垂直を保ちますが、あとは中心に設けたビューで太陽や星を拡大し、目盛りごしに高度角を読む、というだけのことです。これでも十分実用になるのは、過去の「旅日記」でご報告した通りですが、正直言いますと、決して使いやすくはありませんでした。以前のコードラントは(私のAC3Dの扱い方に問題があって)ファイルサイズがやたらに重くなる傾向があり、あまり目盛りの数を増やせませんでした。そのため四分儀の生命線である、水平線から天頂までの90度を正確に計る高度角の最小目盛りが、0.1度(6分角)単位にしか出来なかったのは、誠に残念でした。ここは、もし可能でしたら1分角(緯度経度の計算で言えば、1nmに対応する精度)が欲しいところです。そこで使用時は思い切り画面を拡大し、最小目盛りの10分の1レベルの目測を交えて、天体高度を0.01度まで読んでいましたが、拡大状態では逆に「いま整数部は何度か」は全く分からす、いちいち画面をワイドに戻して、「度」表記の数字を確認する必要がありました。この数字はファイルサイズ節約のため、10度に1カ所しか設けていなかったので、なかなか視野に入って来ず、扱いにくい代物でした。私が使う天測計算ソフト「Navigator」は、高度角を「度・分」形式で、分の小数点以下1けたまで入力する仕様です。測定結果が「60.24度」ですと、いちいち「60度14.4分」に換算しなくてはならないのですが、この計算をしている最中に、正確な観測時刻(秒単位まで必要です)をメモし忘れていることに気付いて...「クソッ、やり直しっ!」と叫ぶとか、機上では色々とトラブルがありました。六分儀やノギスのような、精密アナログ計測器には普通、カーソルというものがありますね。対象物を照準すれば、手を放そうが少々時間が経とうが、カーソルが目盛り上の一点に停止しているので、後で数値をじっくり読むことが出来るわけです。わがコードラントにも、水平に伸びる線状の高度角(仰角)カーソルを新設し、視野の上下動を自動追尾させて、画面中央で交差する高度角目盛りを読む仕組みにしたいと思いました。すると、マウスポインタを「⇔」マークに切り替えて、好きなだけ画面を拡大して太陽や星を照準した後、そっとマウスから手を放して画面表示をワイドに変更すれば、落ち着いて正確に数値が読み取れます。「観測時刻も角度も、一瞬で確実に読み取ってメモしなければ!」という緊張からは解き放たれるし、ミスも起こりにくいわけです。カーソル上に、短いが細密な補助目盛り(一種の副尺)を設ければ、メインの目盛りが粗くても、一けた程度は高い角分解能が簡単に得られます。いうわけで、自動的に上下動をして視野中央を指す高度角カーソルが欲しかったのですが、カーソルを動かすプログラムの書き方が分かりませんでした。仰角を扱うには、機体のピッチとロールの2軸に分けて考えないといけないのかな...でも私の能力じゃ無理だよな、などと迷走したのが、取りあえずの敗因でした。何のはずみでしたか、人工水平儀の球体文字盤の制御プログラムや、フライト・コードラントの高度角目盛りを水平に回転させるアニメーションの応用で、(1)まず機体のピッチとロール角を相殺し、カーソルを水平にする。角度だけ、水平面で回転させる。角度だけ、ピッチ方向に回せばいい。いうことに気付きました。これで高度角カーソルは常に、コードラント視野の上下パンを自動追尾してくれます。例によって「分かってみれば簡単」なのでした。●●カーソルの角分解能を増幅する:ここでふと私は、回転アニメーションのvalue(係数と呼べばいいのでしょうか)を変えたら、何が起こるだろうか...と考えました。フルスケール90度の高度角目盛りの隣に、フルスケール360度のリング状の回転目盛りを新設するとします。指定し、追加の回転をさせたらどうなるか。value値が「-360」だったらどうなるか。回転目盛りは当然、コードラントのビューが1度上を向く(高度角カーソルも、常に同期して1度上に移動する)たびに、逆方向へまるまる1回転します。高度角カーソルの角分解能を『360倍に増幅』することが出来るわけで、これは重要な発見だと思いました。その時は高度角カーソルの移動量1度に対し、精密目盛りリングは逆方向へ60度余分に動きます。度単位の目盛りに対し、ちょうど60倍の感度増幅が行われます。いうことは、このリング上に「0〜59」の角度目盛りを順次6組書き込んでおけば、「度単位の目盛りと等間隔かつ同期して動く、分単位のスクロール目盛り」として機能するわけですよね。こりゃ素晴らしい!実際にやってみると、このプログラムは一発で動き、私は「分」直読の専用目盛りを得ました。「投稿画像」にアップしましたが、赤い垂直目盛りが高度角の「度」で、オレンジ色が「分」目盛りです。すべての目盛りに「度」「分」直読の数字を入れたところ、測定結果が極めて読み取りやすくなりました。ご覧の通り、高度角カーソルに一種の副尺(小規模な細密目盛り)を付属させ、「分」目盛りのバーと同じ位置に来た副尺を読むことによって、0.1分角および1秒角も読み取れるようにしました。(付記:副尺と言いましても、単に主目盛りの間隔をさらに10分の1とか、60分の1に縮小しているだけです。FlightGearの画面は相当極端な拡大表示が利きますので、こういう単純な仕組みでOKです。実世界の計測器ですと、もともと主目盛り自体が「これ以上、細かくは描けない」というレベルで作ってありますので、もう一けた測定精度を上げたければ、ノギスのバーニアスケールのように、例えば主目盛りの0.9倍の間隔で補助目盛りを切って、目盛り同士の間隔の最小公倍数を利用して(たぶん。この解釈自信なし)、ひとけた小さな数値まで読み取り可能にする...といった、高級な仕組みが必要になってきます。私の「副尺」は、拡大機能と言うよりは、主目盛りの数を極端に節約して、コードラントのファイルサイズを抑える工夫であることをお断りしておきます)といった次第で、とうとう...本物の六分儀をしのぐ分解能を持った計測器が、出来上がりました。以上の顛末は恐らく、自分で計器を設計される方には、ごく初歩的な常識に過ぎないであろうと想像します。これらを、独力で(再)発見した私にとっては、やっぱりそれ相応に嬉しい体験でした。●●精度を上げる闘い:私のコードラントは、6個のオブジェクト(アセンブリ部品)を独立ファイルとして作り、ひとつにマージして組み立てていますが、今回の新型は、うち4個を完全に設計し直しました。いまお話しした「分」直読の専用目盛りリングを装備する方法に加えて、最重要部である高度角目盛りそのものに、分単位直読の精密目盛りを組み込んでみるとか、色々な試みをしました。この分単位直読の精密目盛りは、水平線から天頂まで微細なバー(スケールサイズで長さ0.5ミリ)が、計5400本も並んで壮観ですが、実際にコードラントに組み込んでみたところ、機能的には大失敗でした。視野を上下左右にパンすると、目盛りが画面内で幾つかに分断されまして、一部の破片は、本来の2倍の角速度で画面上を移動する始末。極端に目盛りの多いオブジェクトを作ると、重すぎるためでしょうか、以前から各種の誤動作が起きています。今回は目盛りを大幅に減らした対策部品に差し替え後も、古いパーツの一部分が「ゴミ」として画面に残るケースが何度か見られました。全オブジェクトを消し、acファイルをカラにしてから、対策済みの部品を始め全オブジェクトを再マージすると、問題なく回復します。負荷を軽くし誤動作を避けるには、オブジェクトのグルーピング操作を、極力回避するのも効果的なようです。グルーピングは、特に重複して実施した場合、個々のポリゴンや頂点の位置などを再調整できなくなったり、コードラントの水平ジンバル機能が効かず大傾斜を起こすなど、私の環境では過去に不具合が生じています。今回はどうしても必要な場合、作業の終わりに1回だけ実行するよう留意しました。目盛り類を作る際の精度は、もっとも気を遣うところで、累積誤差が発生しないよう、角度計算の方法や目盛り配置の作業手順などに気を配りました。「精度を上げる闘い」は面白いテーマですが、手間も掛かります。私はAC3Dのオブジェクト回転ウィンドウに、小数点以下16桁の数字を果てしなく入力しながら、「ジョン・ハリソン(生涯を費やして、精度の極限を極める時計=航海用クロノメーター1号機を完成させた人)という男の才能と忍耐は、やっぱり凄い」などと、しきりに考えていました...。○いよいよ、新型コードラントが誕生。ピラタスPC-9M水上機に搭載し、サウサンプトン空港で、はくちょう座のデネブと、カシオペア座のシェダルを天測してみました。高度角の読みやすさは抜群で、測位計算の結果、緯度は正解より約1.2nm北、経度は約2.5nm西に出ました。テストを始めたばかりですが、FlightGearの旅に使う分には、今回の試験結果は十分に高精度です。実世界における天測の実用精度は、私の印象では1nmくらいかな、と思っています。六分儀が商船で毎日使われていた時代に船会社で聞いたところ、「達人だと誤差100mも可能」とのことでした。FlightGearにおける天文航法の精度は、当然ながらシミュレーター側の天体の表示精度など、さまざまな要因が絡みますので、コードラント単体の測定精度が劇的に上がっても、それだけで達人の域に近づけるわけではありませんが、一つの条件ではあろうと思います。●●わがフロートに水中舵を:最近の成果をもう一つ。PC-9M水上機のフロートに、ラダー連動の水中舵を付けてみました。断面はテーパー状で、釣り合い舵面もあり、よく見ると円筒形のヒンジが付いているとか、一応は舵らしく見えるように楽しんで作りました。プログラムは他機の引用に過ぎませんが、考えてみるとこれは、私が作った初めての動翼でして、そう思えばまぁ、ちょっとは可愛いです(^^;)。