HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

ラズパイで天体望遠鏡を動かそう!

1年ほど前に生まれて初めて天体望遠鏡を買いました。

当時小4の子供の夏休みの宿題で「月の写真を撮ってくること」というのがあって、子供と一緒に一眼レフ+望遠レンズで写真を撮ってました。

その時の機材は、オリンパスのE620に50-200という構成でしたが、フルサイズ換算で400mmではイマイチ迫力に欠けるので、cannonの800mmのレンズにマウントアダプターつけて付けれないかなーとか、ニコンのP1000はどうかなーとか色々考えていたところにこの商品を見つけて5万円切ってるなんて激安じゃないか!*1という錯覚から衝動買いしてしまったのです :p

この機種はAZ-GTeという自動導入ができる架台がセットになっているもので、スマホアプリから操作できますというのがウリなんですが、買ってしばらく使っているうちに重大な欠点に気付きました。




  画面を見ずにタッチパネルを操作するのは人類には早すぎる


この機種、自動導入の仕組みがついていて、アプリから目当ての星を選ぶと望遠鏡をそっちに向けてくれるんですが、この機能を使うためには最初にアライメントという操作をする必要があります。

この時、天体望遠鏡を覗きながらアプリの画面に表示された上下左右のカーソルで微調整をして、選んだ星が視野の中心にくるように微調整する必要があるんですが、天体望遠鏡を覗きながらアプリの画面も見るのは至難の技。かといって画面を見ずにタッチパネルでカーソル操作も不可能というわけで、手探りで上下左右に動したいと思っていました。

有線接続用のポートがあるので、そこにwiiのヌンチャクを繋ぐというのが定石のようなのですが(たぶん誤解)そもそもwiiのヌンチャクを手に入れるところから結構な難易度です。

az-nunchuk.fun

幸いなことに、USBのジョイパッドとラズパイが余ってたので、こちらを使う方向で検討していました。

ラズパイでジョイパッドの入力を受け取るのは pygame https://www.pygame.org でできるし、AZ-GTeの操作自体はUDPで通信するだけで良いらしいので、これはもう楽勝でしょう。

と思って、昨年末くらいからパーツを買い集めたり情報収集したりして「おれ、このプロジェクトが終わったらラズパイで天体望遠鏡をいじって遊ぶんだ」みたいなフラグを立てたりもしてたんですが、その途中でこちらのソフトの存在を知りました。

www.indilib.org

これのdriverのところを見ていくと、AZ-GTi(AZ-GTeの上位機種、ソフト的には同じものらしいけど、ロータリーエンコーダが入ってて、モータを使わずに動かしても向きを認識してくれる)も使えるし、ジョイパッドも対応しているようです。

「巨人の肩の上には積極的に乗っていく」が信条の私としてはこりゃ使わざるを得ない、というわけで「indi libraryをインストールしたラズパイを使って、ジョイパッドでAZ-GTeを操作する」という方針に変更してようやく使えるようになったので、セットアップ方法についてメモを残しておきます(ここまで前置き)

インストール

ラズパイは、この辺でラズパイ4にインストールしてたSDカードを、その辺に転がってたラズパイ zero WHに挿して使います。

hpcmemo.hatenablog.com hpcmemo.hatenablog.com hpcmemo.hatenablog.com

まず、indilib本体のインストールですが、公式の説明どおりに進めます。

www.indilib.org

ラズパイ側は機器の制御しかしない予定なので、"To install only INDI Library with basic drivers"の部分に書かれているパッケージだけ入れます。

> wget -O - https://www.astroberry.io/repo/key | sudo apt-key add -
--2021-08-29 13:27:22--  https://www.astroberry.io/repo/key
www.astroberry.io (www.astroberry.io) をDNSに問いあわせています... 87.98.235.184
www.astroberry.io (www.astroberry.io)|87.98.235.184|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4365 (4.3K)
`STDOUT' に保存中

-                             100%[=================================================>]   4.26K  --.-KB/s 時間 0s       

2021-08-29 13:27:26 (29.9 MB/s) - stdout へ出力完了 [4365/4365]

OK
> sudo su -c "echo 'deb https://www.astroberry.io/repo/ buster main' > /etc/apt/sources.list.d/astroberry.list"
> sudo apt update
取得:1 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB]                                                
・
・
・
アップグレードできるパッケージが 163 個あります。表示するには 'apt list --upgradable' を実行してください。

そういえば、半年近くアップデートしてなかったので、アップデート可能なパッケージがたまってたようです。 kernelとかまで含まれているので、一応全部最新版にして再起動しておきます。

その後に、次のコマンドでindi libとAZ-GTiドライバを順にインストールします。

> sudo apt install libindi1 indi-bin
> sudo apt-get install indi-eqmod

最後に、確認のため次のコマンドでindi serverを起動します。

>indiserver -v indi_eqmod_telescope indi_joystick
2021-08-29T05:14:01: startup: indiserver -v indi_eqmod_telescope indi_joystick 
2021-08-29T05:14:01: Driver indi_eqmod_telescope: pid=10730 rfd=3 wfd=6 efd=7
2021-08-29T05:14:01: Driver indi_joystick: pid=10731 rfd=4 wfd=9 efd=10
2021-08-29T05:14:01: listening to port 7624 on fd 5
2021-08-29T05:14:02: Driver indi_eqmod_telescope: snooping on GPS Simulator.GEOGRAPHIC_COORD
2021-08-29T05:14:02: Driver indi_eqmod_telescope: snooping on GPS Simulator.TIME_UTC
2021-08-29T05:14:02: Driver indi_eqmod_telescope: snooping on Dome Simulator.DOME_PARK
2021-08-29T05:14:02: Driver indi_eqmod_telescope: snooping on Dome Simulator.DOME_SHUTTER
2021-08-29T05:14:02: Driver indi_eqmod_telescope: Using prefix /usr/share/indi//indi_eqmod_sk.xml
2021-08-29T05:14:02: Driver indi_eqmod_telescope: Using prefix /usr/share/indi//indi_align_sk.xml
2021-08-29T05:14:02: Driver indi_eqmod_telescope: Using prefix /usr/share/indi//indi_eqmod_simulator_sk.xml
2021-08-29T05:14:02: Driver indi_eqmod_telescope: Using prefix /usr/share/indi//indi_eqmod_scope_limits_sk.xml
2021-08-29T05:14:02: Driver indi_eqmod_telescope: EnumeratePlugins - found plugin SVD Math Plugin

こんな感じの出力が見れたら大丈夫です。続いて、indi webmanagerをインストールします。

github.com

このソフトは、リモートからindiserverの起動をしたり止めたりするためのツールで、後で出てきますがPCからKstarsというソフトでセットアップやコントロールをする時に使うそうです。

> sudo pip install indiweb
> indi-web -v

別のPCでブラウザを開いて、次のURLへアクセスします。

http://raspberrypi.local:8624

次のような画面が表示されたら正常にインストールできています。

f:id:n_so5:20210829163107p:plain

一旦ブラウザを閉じてPCにKstarsをインストールします。

edu.kde.org

macだと署名の関係で初回は素直に起動できませんが、(Launchpadからではなく)FinderからKStarsを右クリックして ctrlを押しながら開くを選択すれば起動できます。

support.apple.com

初回起動時の設定を終えてメイン画面が表示されると、上の方にずらっとツールバーが並んでいます。 このうち赤枠で囲ったドームっぽいアイコンをクリックすると、EKOSというINDIの設定アプリが立ち上がるので、そちらで設定をします。

f:id:n_so5:20210829172234p:plain

設定内容は次のとおり。

  • Modeは "remote"
  • Host はラズパイのホスト名を入れる
  • "INDI Web Manager"にチェックを入れる
  • Mountを"AZ-GTi"に
  • Aux1を"Joystick"に

最後にSAVEしてこの画面での設定は終わりです。

続いて、こちらのstartボタンを押すと、"INDI Control Panel"というウィンドウがさらに立ち上がります。

f:id:n_so5:20210829172747p:plain

まずJoyStickタブの中のMonitorタブに移動して動作確認をします。 よくあるゲームパッドの設定画面とおなじで、パッドを押すとそれに応じて画面上のボタンにチェックがつきます。一応、全ボタンが反応するか確認しておきましょう。

f:id:n_so5:20210829173136p:plain

次にAZ-GTiタブに移動します。

画面の下の方にログが表示されているんですが、うちの場合は次のような感じで、延々と接続に失敗したというメッセージが出つづけてました。

2021-08-29T08:29:41: [INFO] AZ-GTi is offline. 
2021-08-29T08:29:41: [ERROR] Error: Communication failed -> tty read failed, check connection: Read Error: Resource temporarily unavailable 
2021-08-29T08:29:26: [INFO] Connecting to 192.168.4.1@11880 ... 

これは、INDIとしてはAZ-GTeのAPモードのつもりで接続しようとしているけど、ラズパイのwifiは家庭内LANに繋っているのでアクセスできないというのが原因でした。

VNCでラズパイに接続して、右上の方に常駐してるアプリからAZ-GTeのSSIDを選んで接続します。接続した瞬間にPCとラズパイの接続が切れるので、VNCの画面が固まりますがもう用済みなのでそのまま閉じておきます。

PCもAZ-GTeの無線LANに繋いで、kstarsやもろもろのアプリをもう一度起動すると、正常に接続できているはずです。 *2

このままだと再起動する度に元の無線LANに繋がります。こちらのページを参考にwpa_supplicant.confを編集してAZ-GTeの方のpriorityを大きくしておきましょう。

qiita.com

INDI Control Panelに戻ってAZ-GTiタブの中のOptionタブで、Joystickを"Enable"に設定すると、ジョイスティックでぐるぐる望遠鏡を動かすことができます。

f:id:n_so5:20210831233848p:plain

ひと通り動かして操作を堪能したら最後にあと2つほど設定をしておきます。

1つ目はキーアサインの変更です。なぜかデフォルト設定ではボタン1、2、3という押しやすいボタンにabort, park, unparkといううっかり押すとパニック必須の機能がアサインされているので、これを全部削除します。 といってもアサイン無しにはできないようなので、自分が使っているジョイスティックについていないボタン(私の場合はボタン10, 11,12)を設定しておきます。

この設定画面、残念ながら直感的な操作ができないUIなんですが、2列並んでいる入力欄っぽいもののうち左の列は現在の設定値を表示するだけ(編集できない)、右の列が新しい設定値を入力する欄となっています。 なので、右側の列に設定する値を入れてその右にある"set"ボタンを押すと設定できます。

f:id:n_so5:20210831235303p:plain

設定が終わったら、optionタブに移動してsaveボタンを押しておきましょう。これで次回起動した時は、ここで設定した値が使われます。

f:id:n_so5:20210831235559p:plain

もう1つの設定は、inidi-webの自動起動設定です。こちらの説明にあるようにsystemd経由でラズパイの起動時にindi-webが実行できるようにしましょう。

github.com

基本的には、ここの説明どおりなんですが、pipでインストールすると設定ファイル(indiwebmanager.service)はインストールされないようなので、githubからダウンロードして /etc/systemd/system/ に置きます。

https://raw.githubusercontent.com/knro/indiwebmanager/master/indiwebmanager.service

続けて次のコマンドを実行しましょう。

> sudo chmod 644 /etc/systemd/system/indiwebmanager.service
> sudo systemctl daemon-reload
> sudo systemctl enable indiwebmanager.service

再起動して、ps -ef |grep inidi-webしてindiwebmanagerが起動しているか確認したら設定は完了です。

いやー長かったですね。次回は今の時点で未解決の問題がいくつかあるので、その辺を書いていきたいと思います。

*1:この時はセールで47800円になってました

*2:ひょっとするとアプリは再起動すら不要だったかもしれないけど、VNCが固まった時に落としてしまったので検証できてません