- 望遠鏡を模擬したクラス.
- 太陽系内の天体および恒星の位置データより,禁止角判定,および天体のイメージセンサ上の位置を返す.
MainRoutine
内では以下の3つの関数を動作させている.JudgeForbiddenAngle
- 太陽・月・地球の禁止角判定を行う関数.
Observe
- CelesInfoが提供する天体が画角内に入っているかどうかを判定し,入っているならばイメージセンサ上の位置を出力する関数.
ObserveStars
- HipparcosCatalogueを調べ,画角内に入っている恒星のうち視等級の小さい(すなわち,明るい)ものから数個のHIP IDを出力する関数.
telescope.cpp
,telescope.hpp
- クラスの定義が行われている.
hipparcos_catalogue.cpp
,hipparcos_catalogue.hpp
- 天球上の恒星の位置データ(ヒッパルコス星表)を読み出すためのクラスを定義している.
telescope.ini
で定数を入力する.- 初期化関数
InitTelescope
を利用し,インスタンスを生成.- Telescope1,…のように,個々の望遠鏡に番号が振ってある.
HipparcosCatalogue
のデータを利用するために,hip_main.csv
のダウンロードを済ませる必要がある.このためのスクリプトとしてs2e-core/scripts/Common/download_HIPcatalogue.sh
を用意した.Git Bashなどを利用して,このスクリプトがあるディレクトリで以下を実行することで,必要なcsvファイルをダウンロードすることができる.bash download_HIPcatalogue.sh
- 太陽・月・地球の禁止角判定を行う関数.
- 入力
- 判定対象の天体の,body座標系から見た位置
- この位置は,CelesInfoから提供される
- その判定対象の天体に関する禁止角
- 禁止角の値は,
telescope.ini
で指定する
- 禁止角の値は,
- 判定対象の天体の,body座標系から見た位置
- 出力
- 禁止角に入っているならばtrue,そうでないならばfalse
- 処理はコンポ座標系で行っている.$q_{b2c}$はTelescope.iniで指定する機体座標系(B)→コンポ座標系(C)変換Quaternionである.コンポ座標系は,望遠鏡視線方向をx方向としている.
- CelesInfoが提供する天体が画角内に入っているかどうかを判定し,入っているならばイメージセンサ上の位置を出力する関数.
- 画角内に入っていない場合は,(-1, -1)を出力する.
- 入力
- 対象天体の像の,望遠鏡センサ面上における位置への参照
- 判定対象の天体の,body座標系から見た位置
- この位置は,CelesInfoから提供される
- 出力
- なし
- 入力として与えた「対象天体の像の,望遠鏡センサ面上における位置」を書き換えている
- なし
- 画角内判定処理 イメージセンサ上での位置を取り扱うため,センサ上に改めて2次元座標系を定義しなおしている.具体的には,コンポ座標系z軸方向がセンサ座標系x軸方向,コンポ座標系y軸方向がセンサ座標系y軸方向に一致するように定義している.
このとき,コンポ座標系からみた天体の位置
であり,コンポ座標系xy平面でみた天体の方向のx軸からの偏角は
で計算される.これらの値はそれぞれソースコード上でarg_x,およびarg_yである(説明上,それぞれ
- センサ座標系の原点はイメージセンサの角に位置しており,
$x_{imgsensor}$ および$y_{imgsensor}$ は原点を基準とした正の値で表現される.単位はピクセル(pix)である.ここでは説明のためイメージセンサのx方向全ピクセル数(ソースコード上ではx_num_of_pix),y方向全ピクセル数(ソースコード上ではy_num_of_pix)をそれぞれ$N_x$ および$N_y$ と表記する.同様に,天体のイメージセンサ上の位置(ソースコード上ではpos_imgsensor)をX,Yと表記することにすれば,これらは
として計算される.なお,天体が画角内に入っていないときは,
HipparcosCatalogue
を調べ,画角内に入っている恒星のうち視等級の小さい(すなわち,明るい)ものから数個のHIP IDを出力する関数.- 出力するHIP IDの個数はTelescope.iniで指定する.
- 入力
- なし
- 出力
- なし
MainRoutine
でObserveStars
が呼び出されると,はじめにstar_in_sight
をクリアする.続いて,視等級の小さい順にHipparcosCatalogue
が提供する恒星が画角内に入っているかどうかを判定してゆき,入っている場合はHIP IDやセンサ上の位置などを含む情報をstar_in_sight
にプッシュする.これをstar_in_sight
の要素数が指定の個数に達するまで繰り返す.なお,HipparcosCatalogue
はあらかじめ視等級の小さい順にソートされている.
- エラー処理
- 指定の個数に達する前に,カタログの終端に達した場合は,出力するはずであった残りのデータはすべてのパラメータを-1とする.
禁止角判定, Observe
関数の動作, ObserveStars
関数の動作が正しく行えているかどうかを判定する.ここでは,body座標系において各軸まわりの角速度入力があったときに,どのような出力を得るかを確認し,その妥当性を検証することにする.
- 角速度入力 $ω_b=[0.1
00]^T$を与える.
- 入力ファイル
sample_simulation_base.ini
telescope.ini
- 初期値
sample_simulation_base.ini
Simulation start date[UTC] : 2017/12/01 11:00:00.0 Simulation finish time[sec] : 1500 姿勢Quaternion : q_i2b=[0 0 0 1]^T
telescope.ini
姿勢Quaternion : q_b2c=[0 0 0 1]^T 太陽禁止角[deg] : 60 地球禁止角[deg] : 60 月禁止角[deg] : 60 X方向総画素数 : 2048 Y方向総画素数 : 2048 X方向1ピクセル当たり視野角[deg] : 0.02 Y方向1ピクセル当たり視野角[deg] : 0.02
sample_simulation_base.ini
[HIPPARCOS_CATALOGUE] max_magnitude = 5.0 calculation = ENABLE logging = DISABLE
- なお,
sample_case.cpp
のメイン関数内において,外乱トルクはコメントアウトしている.
- 禁止角判定
- 上記の条件下で,太陽・地球・月の視線方向からの角度は,以下のようである.
Observe
関数の動作
- 禁止角判定の結果より,画角内に入っているのは地球および月のみであるから,それらに関して検討する.月のイメージセンサ上の位置の軌跡は,以下の図のようになった.
ObserveStars
関数の動作
- 出力結果は,1番目,2番目,3番目のHIP IDがそれぞれ113368,9884,3419であった.これらのイメージセンサ上での軌跡は以下の通りであった.
ObserveStars
関数の動作確認で述べたのと同様の理由により,軌跡が円を描いており正しい結果が得られていると考えられる.なお,HIP IDが113368,9884,3419に対応する恒星の視等級はそれぞれ1.17,2.01,2.04であることから,視等級の高いものから順番に出力されていることが確認できる.
- 角速度入力 $ω_b=[0
0.10]^T$ を与える.その他のシミュレーション条件はx軸周りの場合と同様である.なお,本シミュレーションでは望遠鏡に関してはy軸とz軸が等価であるから,z軸周りの回転を与えた場合の検証は割愛する.
- 禁止角判定
- 太陽・地球・月の視線方向からの角度は,以下のようである.