Go

Go言語で衛星間の距離を計算してみる

Go言語で衛星間の距離を計算してみる

Starlinkの衛星間距離を計算します。

テスラ社がスターリンク1というサービスを日本でも提供開始しました。衛星インターネット接続を提供するためにバンバン衛星を打ち上げています。2022年10月現在約6,000機打ちあがっているそうです。衛星の位置はこちらのリンク2から確認できます。 衛星高度500km程度ということで低遅延です。国内の光ファイバーと遜色ないとのことです。 帯域は、まだユーザー少ないのでダウンリンク数百Mbpsらしいですが、ユーザー増えると減ってくるのでしょう。

新しいバージョンの衛星は、レーザーを使って衛星間通信をしているそうです。 その衛星間距離はどの程度なのかという疑問がでてきて、お勉強中のGo言語を使って計算してみます。大した計算ではありませんが、Go言語のお勉強ということで。

Go言語で数値計算を

計算モデル

衛星間距離を計算するモデルはこんな感じです。問題あるのかはわかりません。

それぞれのパラメーターは、以下のとおりです。

  • r=地球半径 (km)
  • h=衛星高度 (km)
  • k=大気圏高度 (km)
  • y=衛星間距離 (km)

これでちょいちょいっと計算してみます。

コードを書きます

Go言語の文法調べながらコードを書いてみました。三角関数を使って衛星間距離を計算します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
	"fmt"
	"math"
)

func main() {
	const (
		RADIUS = 6378.0 // km
		ST_HEIGHT = 500.0 // km
		TAIKI = 100.0   // km
	)
	var theta_half float64 = 0.0
	var deg_half float64 = 0.0
	var y_half float64 = 0.0
	
	theta_half = math.Acos((RADIUS + TAIKI)  /  (RADIUS + ST_HEIGHT))
	deg_half = theta_half * 180 / math.Pi // rad -> deg
	y_half = math.Atan(theta_half) * (RADIUS + TAIKI)

	fmt.Println("theta =", 2 * theta_half, "rad")
	fmt.Println("deg =", 2 * deg_half, "deg")
	fmt.Println("y =", 2 * y_half, "km")
}

出力結果

ラズパイPi2b上で環境構築して、ちゃんと動きました。

1
2
3
4
5
6
7
pi@pi2b:~/work/numerical_calc $ go version
go version go1.19.1 linux/arm
pi@pi2b:~/work/numerical_calc $ go run starlink_distance.go 
theta = 0.6854431849111853 rad
deg = 39.27300159141619 deg
y = 4277.760999995798 km
pi@pi2b:~/work/numerical_calc $

見通し衛星間距離の最大値は約4,200km。実際は重なり具合やレーザー送受信機の制約等でもっと近いと思われます。80%程度と考えると3,200km、北海道から沖縄程度でしょうか。

直感的には500km(東京-大阪)から1,000km(東京-福岡)程度の距離ではないかと思っていました。

まとめ

Starlinkの衛星間距離の最大値をGo言語で計算しました。実際との際は、もう少し多角的に情報を組み合わせて考察ですね。

Go言語ちょっと勉強できました。VScodeのgo機能拡張は、関数補完いい感じですが、デバッガー動いてくれません。もう少し戯れが必要です。

参考リンク

comments powered by Disqus