2017年5月7日日曜日

半自動スタートラッカ4


 今までは、そもそもちゃんと動くかわからなかったので、かなりぐちゃぐちゃなコードで実装していました。所謂ラーメンコードです。
 が、ちゃんと動くことがわかったので、一部をコピペしつつ、新しく書き直しています。以前は1回のマッチングで、スターカタログからの投影や、画像からの輝点の読み込み等をすべて行っていましたが、これらを分離することに主眼をおいています。例えば画像の解析は現在の2048x2048ピクセルでおよそ0.5秒かかりますが、同じ画像を解析するのであれば1回の読み込みでよく、1ループあたり0.5秒の短縮が可能です。カタログからの投影は毎回行う必要がありますが、これは0.05秒程度なので、ちょっと動作確認するくらいなら問題にならないくらいです。
 マッチングは、条件によって時間に幅があり、うまくハマれば数ミリ秒で終了する一方、すべてのパターンを試す場合(≒一致するパターンがない場合)は、結果が出るまで40秒位かかります。
 ホンモノのSTTは初期捕捉で数秒、更新レートが数十-百Hz程度ですので、現在の方法ではかなり遅いです。このあたりは、初期捕捉では使用するデータを疎にし、だんだん密にして確度を上げる、といったアルゴリズムになると思います。一方、更新レートの方は主に画像解析が支配的です。
 次のフレームでは確度が何十度もズレてる、といった場合には初期捕捉と同様ですが、人工衛星の場合、10Hzで撮影して、フレーム間で10degズレるということは、3秒で1回転するような速度ですが、このような角速度で運用されることはないはずです。某衛星の事故のような自体も想定すると、「確実にこの速度で回ってるぞ」みたいな情報が出せると良いのかもしれません。もっとも、そんな速度で回ってれば星を撮影しても写らないでしょうが。


 ざっくりとデータ量を考えてみると、宇宙環境耐性とかを気にしなければ、1/3くらいのCMOS1個と、STM32F4を1個の、2チップでスタートラッカが作れそうです。F4のオンチップでも、7等星くらいまでならデータを持てそうな感じです。RAMが多ければその分画像処理が楽になりますが、解像度を落とせばオンチップRAMでもギリギリ足りるかな、という感じです。はやぶさ2のSTTは一度に300x300ピクセルを処理するそうですが、8bit/pxなら90kバイトくらいなので、F4のメモリでも余裕で入ります。あとは浮動小数点の演算速度が鍵になるわけですが、これは作ってみないとわかりません。

 さすがにFlash2M/RAM384kのF4を1個ですべてのミッションを行う、というのは大変ですが、「安価なスタートラッカを自作して軌道上で実証する」(STTから計算した向きと地磁気センサの値だけをダウンリンクして、たまーーに視野の一部も下ろす)くらいのキューブサットなら1個のF4だけでも可能かもしれません。
 タイムスタンプ・地磁気データ・STT出力だけなら1セット32バイト程度ですから、数分に1回程度の頻度でSTTの計算結果をRAMに貯めておいて、指定した時間になったらデータを吐き出す、みたいな運用ができるはずです。タイムスタンプがあれば軌道上の位置がわかりますし、位置がわかれば地磁気線の方向もわかるはずです。地磁気線の向きがわかれば地磁気センサから衛星の姿勢2軸がわかりますから、STT出力と大幅にずれてなければOK、みたいな。ミッション機器に画素がありますから、ある程度以上の面積が明るい写真があれば、それをダウンリンクするみたいな機能があれば広報的にも強いですし。
 サクッとキューブサットを飛ばせるような時代になったら、そういう遊びもやってみたいなぁ。その頃にはSTTを含めたバス機材の値段も暴落してるんでしょうけども。

0 件のコメント:

コメントを投稿