手動導入サポートソフトを作りました

5月末にスカイメモSを購入しました。目標天体の導入は手動なので、AZ-GTiの自動導入に慣れきってしまった私でも容易に導入ができるように、導入をサポートするソフトを作ってみました。

作成の動機

手動導入のサポートといってもこれといった案はなかったのですが、極軸合わせでNINAのThree Point Auto Polar Alignmentを使ってみてコレだと思いました。Three Point Auto Polar Alignmentは、3ポイント目のプレートソルブが終わったあとは、極軸の調整をやっている間ずっと撮影&プレートソルブを繰り返して極軸の誤差を表示します。AZ-GTiでプレートソルブは使っていましたが、導入のズレを補正するため1回行うだけです。こんなに何回も繰り返すという使い方は、ある意味、目から鱗でした。
撮影画面の中心座標はプレートソルブで分かるので、目標天体の座標との差分を撮影の度に表示すれば目標の導入は楽になりそうです。

作成したソフト

作成したソフトの基本的な仕様は次の通りです。

  1. 目標天体の座標をStellariumから取得
  2. SharpCapnの保存先を監視し、撮影画像の保存を検出
  3. 2.の画像を引数としてASTAPでプレートソルブを実行
  4. 3.の結果を読み取り、目標天体と画面中心座標の差分を表示

以下画面のキャプチャです。

Stellariumで目標を選択した状態

メイン画面:「1. 天体の座標をStellariumから取得」した後、[Start]ボタンを押すと「2.SharpCapnの保存先監視」を開始。画像が保存される度に「3.プレートソルブ実行」と「4.座標と差分表示」が繰り返される

撮影画像表示画面:左は目標天体が画面外の場合、右は目標天体が画面に入った場合

このソフトに撮影する機能も実装しました。以下はその画面です。

このソフトのメイン画面:撮影するときの状態

この状態になるまでかなり時間をかけましたが、結構使えるソフトが出来たと思っています。作成に当たってはプロト作成と実写テストを2サイクルほど行いました。その内容を簡単に紹介します。

1stプロトの作成

最初は、Three Point Auto Polar Alignmentの様にNINAのプラグインを作ろうと思い、プラグインのテンプレートをダウンロードしました。コンパイルしてNINAに組み込むことはできるのですが、そこから先の中身の作り方やNINAとのやり取りの仕方などがさっぱり分かりません。Google先生に情報を探してしてもらってもなかなか作り方にはお目にかかれず、海外サイトにはあるかもしれませんが英語がダメダメなので早々に諦めて一から作ることにしました。開発言語などは、NINAの真似をしてC#WPFGUIのライブラリ)で組むことにしました。

各仕様に対し、忘備録を兼ねて参考にした情報などを記載します。

  1. 目標天体の座標をStellariumから取得:
    これについては、StellariumのWebサイトに説明がありました。StellariumのリモートコントロールプラグインはhttpサーバとしてStellarimのAPIとの橋渡しをしているみたいで、httpサーバのアドレスとポート “localhost:8090”(デフォルト)に“/api/objects/info?format=json” とGET要求を送ると、Stellariumで選択している天体の情報をJSONというフォーマットでテキストを返してくれます。そのテキストからJ2000のRaとDecの値を取り出せば良いわけです。C#にはhttpリクエストを送信/受信するHttpWebRequest/ HttpWebResponseというクラスがあるので、それを使いました。
  2. SharpCapnの保存先を監視し、撮影画像の保存を検出:
    これについては、フォルダを監視するクラス(FileSystemWatcher)があり、Webで検索するとその情報が色々出てきたので、あまり苦労せずコーディングできました。
  3. 2.の画像を引数としてASTAPでプレートソルブを実行:
    ASTAPのコマンドラインについては、ASTAPのWebサイトに説明があります。外部プロセスの実行処理は以前にも作った経験があるので、特に問題なく作ることが出来ました。
  4. 3.の結果を読み取り、目標天体と画面中心座標の差分を表示:
    結果はテキストファイルなので、通常のファイル読み込み処理です。また、出力データの説明もASTAPのWebサイトに記載されているので、これも特に問題はありません。ただし、1stプロトでは数値だけで結果を表示していました。

1stプロト動作確認

1stプロトができた後はしばらく天候が悪かったので、6月半ばに結構雲が出ている中使ってみました。目標天体は雲の切れ間に見えたわし座のθ星とし、すぐに曇ってしまったので1度だけのトライとなりました。以下はその時のメイン画面(の再現)です。

1stプロトの画面

この様に、目標座標と画面中心座標の差分を数値だけで示していたのですが、数値だけ見ての導入はちょっと無理がありました。そもそもどっちに動かしたらいいかよくわからないし、どのくらい動かせばいいかが分かり難いです。慣れれば使えなくなさそうですが、撮影した画像を表示して目標の方向を示すようにしないとダメだと判断しました。

2ndプロトの作成

最初に撮影画像の表示機能を追加するつもりでしたが、その前に撮影機能を追加しました。
理由は、単純に画素ピッチや画素数を入力するのが面倒だったので、カメラから直接その情報が読めないかな?と思い、ZWOのSDKをダウンロードしたことがきっかけでした。同梱されているデモプログラムのソースを見ながらその情報は取得できたので、調子に乗って撮影処理も作れるのでは?と欲を出し、いろいろと格闘しているうちにキャプチャした画像データの取得に成功。自分では作れないと思っていたものが作れたので、それだけで嬉しくて暫くは部屋の壁などを何度も撮影して喜んでいました。

その後、撮影画像の表示画面を追加しました。

追加した画像表示画面(再掲)

表示画像を見やすくするため、以前別件で作成したオートストレッチも組み込んでみました(画像はオートストレッチした状態です)。

撮影する機能を追加したことで、単純に考えればSarpCapの保存先監視機能は不要になります。しかし、目標天体を変える度にこのソフトで撮影してその後またShapCapで撮影となるので、冷却カメラだと一旦冷却をストップすることになり、再度温度が下がるまで待ち時間が生じます。そのため、フォルダ監視機能も残して撮影機能と両方が使えるようにしました。
因みに、ShapCapで撮影する場合、撮影画像を表示させる際にファイルから画素ピッチと画素数は読み込めてしまいます。これらの入力が面倒なことが撮影機能作成に繋がったので、画像表示機能を先に作っていたら、撮影機能は作らなかったかもしれません。あとで要らなくなる動作(画素ピッチと画素数)の簡易化をしようとした(無駄なことをしようとした)おかげで、撮影機能の作り方を理解することができました。

2ndプロト動作確認

その後も晴れない日が続きましたが、先月末に漸く晴れたので使ってみました(その時の撮った画像が前回の記事のものです)。1stプロトと違って画像で目標の方向が分かるので、格段に使い易くなりました。また、目標が近づくと目標の位置を○で示す様にしたので、どの程度動かせばいいかもおおよそ見当がつく様になりました。
これで、自動導入と同等とまではいかないまでも、手動導入を容易に行えるようになったと思います。

更なる機能追加

その後も悪天候が続き撮影出来ないので、その時間を有効?に使い、調子に乗って「ライブビュー機能」と「StellariumのView連携機能」を追加してみました。

ライブビューは、このソフトでピント合わせが出来るように追加しました。キャプチャ機能だけだと、ピント合わせをSharpCapで行ったあとにこのソフトで天体導入し、そのあとまたSharpCapに戻って撮影…となるので、ライブビューがあると便利です。
StellariumのView連携は、StellariumのWebサイトを見ていると表示中心を外部ソフトから制御できるようなので、これを使いたくて作ってみました。鏡筒を動かし撮影&プレートソルブをする度にStellariumのViewの中心を撮影画像の中心座標に移動させます。その様子をアニメーションGIFにしたものを掲載します。雰囲気が伝わるでしょうか。

StellariumとのViewの連携

この機能を実際に使うかどうかは分かりませんが、こんな感じで機能追加しているときりがないのでこれで一通り完成とします。

作成で苦労した点

ここまで記載した内容を見るとすんなり作った様に見えなくもないですが、実際はかなり苦労して作成しました。

たとえば、C#WPFのお作法がよく分からず、ちょっとした処理でもGoogle先生に相当お世話になりました。今まで仕事ではGUIVisual Basic 6、計算処理をC/C++で組むということしかやっておらず他言語のスキルが乏しいので、この歳になって新たな言語で作るのは結構大変でした。
他にも、撮影画像の表示画面上に目標天体示すためには天球座標を画像位置に換算する必要がありますが、頭の悪い自分には数式を自力で導出できずGoogle先生に散々探してもらいました。それでもドンピシャのものがなく、一部自分で導出したので間違っているのではないかと少し心配です。
ただ、バグなどがあっても自分で使うものなので、困るのは自分なので責任を負う必要もありません。不具合を見つけたり修正したりするのも、ある意味楽しみでもあります。その辺が仕事で作るソフトとの違いですね。苦労はしましたがいろいろと楽しめました。

まとめ

当初の目的である「手動導入のサポート」は達成できたと思います。ASIカメラ限定ですが「撮影」処理の作り方も把握できたのは、大きな収穫でした。

次にやるとすれば、このソフトでピント合わせから目標導入までできるので、そのまま撮影ができればなお良いですね。ただ、そうなると冷却の制御が必要になります。他にもSharpCapでやっている様に、撮影しながらライブスタックして撮影中も楽しみたいと考えるとかなりのボリュームなので、それらは来年の梅雨の時期にでもトライできればと思います。当面は、現在の機能でスカイメモSを有効活用していこうと思います。