統合天体撮影システム③GPS編

Raspberry Piと、INDIを活用した統合天体観測システムを紹介していきます。

※改造については、あくまでご自身の責任にてお願いいたします。本内容は参考情報としてご覧ください。


1. GPS

GPSを搭載することで、正確な観測位置を取得できます。ネット環境のない中において、位置情報のみならず、非常に正確な時間を取得することができます。

統合天体観測システムを使用しない場合は、OnstepにGPSを接続することができますし。この統合システムを使用する場合は、Onstepでは使用せず、Raspberry Pi 5に取り付けることで、INDIによって、システム全体で位置情報、時間情報が共有できます。


2. GPSのセットアップ

2.1 raspi-configによるシリアルポートの有効化

今回、GPSとの通信は、シリアル通信(UART)を使用します。
Raspberry Piには、プライマリUART (PL011)と、ミニUART (Auxiliary UART)2種類のUARTがあります。GPSは9600bpsなどの決まった速度で通信するため、安定したボーレートを持つプライマリUART (/dev/ttyAMA0) を利用することが推奨されます。

プライマリUARTミニUART
デバイス名/dev/ttyAMA0/dev/ttyS0
精度高精度。専用のクロックジェネレーターに接続されているため、ボーレートが安定しています。低精度。CPUコアのクロックに依存するため、CPU負荷や温度によってボーレートが変動しやすいです。

まず、Rasppi-configを起動し、以下の操作で、シリアルポートの設定を行います。 

sudo raspi-config

3 Interface Options
 → I6 Serial Port

 → Would you like a login shell to be accessible over serial?  → No
   選択フリーズ回避:シリアルコンソール機能を無効化します。(/dev/ttyAMA0へのカーネルメッセージ出力を停止)
 → Would you like the serial port hardware to be enabled? → Yes
   選択UART有効化:シリアルポートハードウェア(enable_uart=1)を有効にします。

2.2 必要なパッケージのインストール

以下のコマンドを実行し、必要なパッケージをインストールします。

sudo apt update
sudo apt install gpsd gpsd-clients chrony

パッケージ名役割・機能主な用途
gpsdシリアルやUSBで接続されたGPS/AIS受信機を監視し、位置・速度・時刻データを統一フォーマットで提供。複数のアプリケーションが同時にGPSデータを利用できるようにする。例:位置情報ログ、天文観測機器の時刻合わせ。
gpsd-clientsgpsd用の補助ツール・クライアント群。cgps(CUI表示)、xgps(GUI表示)、gpspipe(データ出力)、gpsmon(監視)などを含むGPSデータの可視化・テスト・デバッグ・シミュレーション。gpsdの動作確認やデバイス設定に利用。
chrony高精度なNTPクライアント兼サーバー。さらに、 GPSデバイスやPPS信号を時刻源として利用可能。PPS (Pulse Per Second) はGPSから得られる高精度な1秒パルスで、サブマイクロ秒精度のクロック同期を実現できる。システムクロックの正確な同期。外部NTPサーバーとの時刻合わせ、孤立ネットワークでの内部時刻管理、GPS/PPSを利用した高精度時刻基準の構築。

2.3 GPSモジュール、PPS信号の有効化

/boot/firmware/config.txtのファイルの最後の部分に追記し。以下のようにします。GPSモジュール、PPS信号を有効にします。

sudo nano /boot/firmware/config.txt


[cm5]
dtoverlay=dwc2,dr_mode=host
[all]
dtparam=uart0=on


# — GPS時刻同期のための追記 ——————————————–
# GPS時刻同期のためにシリアルポートを有効化

enable_uart=1

# Bluetoothを無効化し、GPSに安定したプライマリUARTを解放
dtoverlay=disable-bt

# — GPS時刻同期のための追記 —
# GPS時刻同期のためにシリアルポートを有効化

enable_uart=1

# Bluetoothを無効化し、GPSに安定したプライマリUARTを解放
dtoverlay=disable-bt
# PPS信号を有効化し、GPIO 18ピンに割り当てる
dtoverlay=pps-gpio,gpiopin=18

ファイル編集後再起動します。

sudo reboot

2.4 GPSDの設定と安定化

/etc/default/gpsdのファイルを編集します。シリアルポートの明確化、GPSDオプションの設定、USBの自動検出を無効にし、動作を安定させます。

sudo nano /etc/default/gpsd

GPSD_OPTIONの説明

オプション意味目的
-nネットワーク接続をリッスンしないセキュリティのため、外部からの接続を待ち受けません。
-Gグループアクセスを許可するgpsd ユーザー以外(特に chrony)がGPSデータにアクセスできるよう権限を設定します。
-N共有メモリインターフェースを有効化gpsd が解析した高精度のGPS時刻データを、共有メモリと呼ばれるシステム領域に書き出します。これにより、chrony はそのメモリを読み取り、時刻同期に使用できるようになります。
-s 9600ボーレートを9600bpsにするGPSユニットのボーレートに設定します。

2.5 gpsd.service の競合解消と安定化

Raspberry Pi などで GPSD を使うとき、起動時に ソケットやポートの取り合いが起き、サービスが不安定になることがあります。以下のファイルを編集し、systemd の設定を修正して GPSD を安定して起動できるようにします。

Note: /(全角)を/(半角)に修正してください。

設定項目 修正前 修正後 意味

Type = simple に変更forking は systemd がサービスを見失いやすい。simple にすると systemd が直接管理でき、安定性が向上。
Requires=gpsd.socket
を削除
ソケットが強制起動され、ポート競合の原因になるため削除。
Also=gpsd.socket gpsd.service  を削除有効化時にソケットまで有効化されるのを防ぐため削除。
TimeoutStartSec=180 を追加タイムアウトを延長
GPSモジュールが衛星を捕捉するまで時間がかかることがあるため、最大3分待つように設定。 これで「起動が遅いから失敗する」という問題を防げます。

2.6 サービスの停止と設定リロード

3.6 gpsdの起動とステータス確認

# シリアルゲッティの停止(OSによるポート占有を防ぐ)
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo systemctl mask serial-getty@ttyAMA0.service

#gpsdソケットの無効化(今回苦労したポイントの自動化)
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
sudo systemctl mask gpsd.socket

#設定ファイルの反映
sudo systemctl daemon-reload
sudo systemctl enable gpsd
sudo systemctl restart gpsd

3.7 GPS情報の確認

以下のコマンドでGPSモジュールから送信されているNMEA生データを確認できます。

cgps -s

このコマンドを実行すると、ターミナル上で衛星の数、緯度、経度などがリアルタイムに表示されます。Fix (位置情報確定) になれば成功です。Ctrl+c で終了します。

gpsmon


4. Chronyの設定

Chrony がインターネットではなく、GPSの超高精度な時刻ソースを参照するように設定します。

4.1 設定ファイルの変更

sudo nano /etc/chrony/chrony.conf

# GPS/PPSの設定
# GPSDからのNMEAデータ (時刻情報) を共有メモリ経由で参照

refclock SHM 0 refid GPS minpoll 4 maxpoll 4
# GPIOピン経由で取得したPPS信号を参照
refclock PPS /dev/pps0 refid PPS

4.2 Chronyの再起動と最終確認

以下のコマンドを実行し、Chronyを再起動します。

sudo systemctl restart chrony

同期状態の確認のため、以下のコマンドを実行します。出力結果の PPS に #* マークが表示され、Last sample がナノ秒 (ns) 単位になっていれば、構築成功です。

chronyc sources


5. INDI-GPSDのドライバのインストール

以上のところで、Raspberry Piは、GPSより位置情報と時間を取得し、OSの時間もそれを参照するようになりました。つぎにINIDIにて、これらの情報を使用するために、INDI-GPSDをインストールします。INDI GPSDはサードパーティのINDIパッケージで提供されています。以下のコマンドを実行し、コンパイルすることで、INDI-GPSDが追加されます。

# まず、既存の古いパッケージ情報を更新
sudo apt update

# gpsdドライバーを含むINDIパッケージをインストール
sudo apt install indi-gpsd


6. EKOSの設定

KStars/EKOSで、GPSの位置情報と、正確な時間を使用する設定です。EKOSを起動し、Profile Editorでは、GPSDを追加します。

Auxiliary → Others → GPSD

GPSDを追加すると、INDI Control PanelのタブにGPSDが現れます。ここで、位置と時間が読み込まれていることを確認できます。

最後に、Ekos Profileの画面で、Mountのタブを選択し、SourceのTimeとLocationをGPSDにします。こうすることで、システム全体がGPSDの時間情報と、位置情報を使うようになります。
Onstepが認識している位置情報は、SWSでも確認できます。これがGPSDの位置情報が一致していれば、成功です。


トップに戻る