衛星軌道面での動き

ホーム 上へ 衛星の軌道要素 経緯度・高さと直交座標 天空の時計と原子時計 ちょこっと(逆三角関数) 衛星軌道面での動き ベクトルと座標回転 衛星の方位と仰角 ちょこっと(NTP) 可視範囲と等距離円 衛星の速度とSA 地球の大きさと形 ちょこっと(方位磁石) SGP計算モデル アンテナの自動制御 リグのコントロール ちょこっと(ドップラ補正) DDEインターフェース 位置計算の数値例 マクロを使った自動運転 ちょこっと(軌道コレクション)

衛星は軌道平面の楕円の上を2次元的に運動する

 衛星は観測点から見ると3次元的な複雑な動きをしますが、衛星の軌道面では平面上の楕円の上をケプラーの方程式 にしたがって動く単純な回転運動です。 衛星の位置計算では、この軌道平面上から最終的に知りたいことは衛星のXY座標です。 ここで、X座標は地球の重心(近地点に近い楕円の焦点)を原点として近地点方向、Y座標はX軸から反時計回りに90度方向にとります。 衛星のXY座標を求めるために必要なものは、軌道の形を表す軌道の長半径 a (平均運動から計算する)と離心率 e 、軌道上の何処にいるかを表す平均近点 離角 Mk です。

 長半径 a、離心率 e、平均近点角 Mk から衛星のXY座標を求めるためには、いくつかの計算が必要で、その手順を示します。

 

平均近点離角 Mk から離心近点角 Ek を求める

 平均近点離角 Mk は長半径 a から決まる平均的な角速度で衛星が動いたと仮定した場合における近地点からの角度で、想像上の角度です。 離心近点角 Ek との関係は、

  Ek−e sin Ek = Mk

 

という形で与えられ、一般にケプラーの方程式と呼ばれています。 この式は、Ek について解いた形に書き直すことができないため、数値的に解く必要があります。

 

離心近点角 Ek から真近点角 Vk を求める

 Ek と Vk との関係は、

  sin Vk = (1−e^2)^0.5 sin Ek/(1−e cos Ek)

  cos Vk = (cos Ek−e)/(1−e cos Ek)

  tan Vk = (1−e^2)^0.5 sin Ek/(cos Ek−e)

 

と言う形になります。 パソコンで解く場合にはアークサインやアークコサインの関数がないので、tan Vk を求めて、アークタンジェント関数をつかって Vk を求めます。 

 

 なお、三角関数を使った計算では、常に象限についての注意が必要です。ここでは、

  cos Ek−e ≧ 0 Vkは第1、第4象限

  cos Ek−e < 0 Vkは第2、第3象限

となる。

 

離心近点角 Ek から動径 Rk を求める

 動径 Rk は地球重心から衛星までの距離で、Ek または、Vk から求めることができ、関係は、

  Rk = a (1−e cos Ek)

  Rk = a (1−e^2)/(1+e cos Vk)

 

という形になります。 どちらから求めてもよいのですが、Ek から求めた方が計算時間は短くなるでしょう。 

 

動径 Rk と真近点角 Vk から衛星のXY座標を求める

 これまでの計算手順で得られた値から、軌道面での衛星のXY座標を求めることができ、関係は、

  Xk = Rk cos Vk

  Yk = Rk sin Vk

 

という形になります。

 それでは、長半径 a、離心率 e、平均近点離角 Mk から、離心近点角 Ek、真近点角 Vk、動径 Rk、衛星のXY座標 Xk、Yk を計算して、フォームに表示するプログラムを使ってみましょう。

 

Calsat32OrbitKepler.zipをダウンロードして、解凍してください。

 

 解凍したフォルダに含まれる"Calsat32OrbitKepler.exe"を起動して、「 ケプラーの方程式の計算ボタン」を押すとつぎのようなフォームが表示されます。

 

 

 また、"Calsat32OrbitKepler.vbp"をクリックすると Visual BASIC が起動して、つぎのコードを見ることができます。

 

Private Sub Command1_Click()

Dim dblA As Double, dblE As Double, dblMk As Double
Dim dblEk As Double, dblEc As Double
Dim dblVk As Double, dblTanVk As Double
Dim dblRk As Double
Dim dblXk As Double, dblYk As Double
Dim dblPI As Double


'円周率の設定
    dblPI = 4# * Atn(1#)

'軌道長半径、離心率、平均近点離角の取得
    dblA = Val(Text1.Text)
    dblE = Val(Text2.Text)
    dblMk = Val(Text3.Text) / 180# * dblPI 'Radに変換


'---------------------------------------------------------------------
'衛星軌道面の離心近点角の計算
' dblEk (rad)
'ケプラーの方程式 dblMk = dblEk - dblE * SIN(dblEK)
'---------------------------------------------------------------------
    dblEc = dblMk + dblE * Sin(dblMk)
Loop1:
    dblEk = dblMk + dblE * Sin(dblEc)
    If Abs(dblEc - dblEk) > 0.000000000001 Then
        dblEc = dblEk
        GoTo Loop1
    End If

'---------------------------------------------------------------------
'衛星軌道面の真近点角の計算
' dblVk (rad)
' sin(dblVk) = (1# - dblE ^ 2#) ^ .5# * SIN(dblEk) / (1# - dblE * COS(dblEk))
' cos(dblVk) = (COS(dblEk) - dblE) / (1# - dblE * COS(dblEk))
' tan(dblVk) = (1# - eblE ^ 2#) ^ .5# * SIN(dblEk) / (COS(dblEk) - dblE)
'---------------------------------------------------------------------
    dblTanVk = (1# - dblE ^ 2#) ^ 0.5 * Sin(dblEk) / (Cos(dblEk) - dblE)
    dblVk = Atn(dblTanVk)
    If (Cos(dblEk) - dblE) < 0# Then
        dblVk = dblVk + dblPI
    End If
    If dblVk < 0# Then
        dblVk = 2# * dblPI + dblVk
    End If

'---------------------------------------------------------------------
'衛星軌道面の動径の計算
' dblRk (m)
' dblRk = dblA * (1# - dblE * COS(dblEk))
' dblRk = dblA * (1# - dblE ^ 2#) / (1# + eblE * COS(dblVk))
'---------------------------------------------------------------------
    dblRk = dblA * (1# - dblE * Cos(dblEk))

'---------------------------------------------------------------------
'衛星軌道面の位置直交座標の計算
' dblXk,dblYk (m)
'---------------------------------------------------------------------
    dblXk = dblRk * Cos(dblVk)
    dblYk = dblRk * Sin(dblVk)


'結果の表示
    Cls
    Print "離心近点角: "; dblEk / dblPI * 180# 'Degに変換
    Print "真近点角 : "; dblVk / dblPI * 180#
    Print "動径(km) : "; dblRk
    Print "X座標(km): "; dblXk
    Print "Y座標(km): "; dblYk

End Sub

 

 テキストボックスにはAO−10の値がセットされていますが、数値を変更して計算してみましょう。

 

 

 衛星の位置計算では、ケプラーの方程式という難解な式があって、難しいという先入観を持っていた方も多いのではないでしょうか。 実際にはBASICで10行足らずのもので解くことができます。 むしろケプラーの方程式が理解でき 、答えがでたとしても、衛星の位置計算で重要なことではありますが、小さな部分であることが理解できたのではないでしょうか。