太陽光から機体の方位角を推定する話

Solamilチームの松田です。

ミッションでは、簡単に言えば「太陽光から機体の方位角を推定」してその方位角を元にゴールを目指すというものになっています。そして推定にあたっては8*8のLEDマトリクスを使用します。

これに関しては上の写真のように機体に設置したLEDマトリクス、さらにこの上にピンホールを被せることで、太陽光の角度をLEDマトリクスから取り出そうという魂胆です。

実際の入力・出力イメージは下の画像の通りです。中央の四角がLEDマトリクスで四角内の小さな丸が一つ一つのLEDです。縦横一列ずつしか出していませんが、実際は8*8=64個のLEDが設置されています。
図ではLEDマトリクスのxy軸が描かれている他、右上を”北[N]”とする方位を想定しています。そして、太陽が南[S]にある(PM 0:00ぐらい)とします。この時、ピンホールを通して太陽光はマトリクスの右上に入力されます。この時、機体前方(マトリクスy軸正方向)が北西[NW]と出力されればOKということです。

方位角推定には、つまり機体前方と北の間の角度θを計算すれば良いです。またθは、以下のようにマトリクスから取れる太陽の角度θ_Lと時間・緯度・経度取得できる太陽方位角θ_Sから計算が出来ます。

さて、『θ_Lは普通に入力光の重心から計算すればいいしθ_Sも大した計算なくて出せるだろ』と思っていたら前者はともかく、後者は結構めんどいことが分かりました。

今回、太陽方位角θ_Sを計算する式は「太陽の高度と方位角(JavaScriptによる簡易版)」を参考にしました。見てもらうと分かるんですけどめちゃくちゃ複雑な計算式してるんですよね。計算する為には以下の要素が重要です。

  • 太陽赤緯 … “太陽の赤道からの高さ(角度)をいう。 ちなみに太陽赤緯は、春分・秋分=0度、夏至=23.27度、冬至=-23.27度。”
  • 均時差 … “天球上を一定な速さで動くと考えた平均太陽と、視太陽(真太陽)との移動の差。”
  • 時角 … “天体と子午線との角距離を時間(1時間 = 15度)を単位に表したものである。”
  • 仰角・高度

参考 Weblio辞書, Wikipedia

これらを時間や緯度・経度から計算し、全て組み合わせて初めて方位角が計算できます。
もちろん計算式を実装すること自体は時間を掛ければ全然問題ないわけですが、そのままだと計算量が多いので、もし最適化を目指す必要に迫られるのであればどこを削る必要があるか考えなきゃいけません…それが悩みどころというのが現状です。面倒だなぁ