晴れました。しかも新月。これを逃さない手はありません。Raspberry Pi4の新システムにして初撮影も兼ねています。
が、その前にシステムをSSDにしたのでどうやってファイルを取り出すか?まずは、USBメモリーを差し込んでみると…
認識しませんでした...
もう、あれこれ調整する時間がないので、sambaを組み込んで、ネットワーク経由で取り出すことにしました。
smb.confファイルに公開フォルダー設定を追記します。
これで、Win10から簡単に取り出せました。(\\IPアドレス\raspberrypiでアクセス)
それと、有線ネットワークが管理されていないというメッセージが出て、GUIで見れないので、いろいろ調べて次の設定を行いました。
そのファイルに、下記の内容を書き込みます。
で、デーモンを再起動。
さて、この間上手くいかなかったiGPSですが、スマホから先に情報を送っておくと上手くいきました。(これが正解なのかは不明です)なので、これもサービスに登録しておきます。
i-gps_start.shファイルを下記の内容で作成します。
i-gps_post.shファイルを下記の内容で作成します。
i-gps_stop.shファイルを下記の内容で作成します。
うーん、淡い部分は全然でした。もう少しゲインと露出を上げるべきでした。さらに言えば、QBPフィルターを使わなかったのは失敗でした。背景がなんとなくかぶっている感じです。Nik Collectionで強調したのですが、ちょっとやりすぎました。とりあえず前回のように途中で止まることなく撮影できたのでそれだけでも良しとしますか。
が、その前にシステムをSSDにしたのでどうやってファイルを取り出すか?まずは、USBメモリーを差し込んでみると…
認識しませんでした...
もう、あれこれ調整する時間がないので、sambaを組み込んで、ネットワーク経由で取り出すことにしました。
#sudo vim /etc/samba/smb.conf
smb.confファイルに公開フォルダー設定を追記します。
[raspberrypi]
comment = Raspberry Pi
path = /home/ubuntu/Pictures
guest ok = yes
guest only = yes
create mode = 0777
directry mode = 0777
read only = no
#browsable = no
force user = ubuntu
comment = Raspberry Pi
path = /home/ubuntu/Pictures
guest ok = yes
guest only = yes
create mode = 0777
directry mode = 0777
read only = no
#browsable = no
force user = ubuntu
これで、Win10から簡単に取り出せました。(\\IPアドレス\raspberrypiでアクセス)
それと、有線ネットワークが管理されていないというメッセージが出て、GUIで見れないので、いろいろ調べて次の設定を行いました。
#sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
そのファイルに、下記の内容を書き込みます。
[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernet
unmanaged-devices=*,except:type:wifi,except:type:wwan,except:type:ethernet
で、デーモンを再起動。
#sudo systemctl status NetworkManager
さて、この間上手くいかなかったiGPSですが、スマホから先に情報を送っておくと上手くいきました。(これが正解なのかは不明です)なので、これもサービスに登録しておきます。
i-gps_start.shファイルを下記の内容で作成します。
#!/bin/bash
cd /home/ubuntu/gpsd
/bin/python /home/ubuntu/gpsd/iPhone-gpsd.py > /dev/null 2>&1
cd /home/ubuntu/gpsd
/bin/python /home/ubuntu/gpsd/iPhone-gpsd.py > /dev/null 2>&1
#!/bin/bash
while ! [ -e /dev/pts/0 ]
do
sleep 1
done
chmod a+wr /dev/pts/0
logger Start fake GPS
while ! [ -e /dev/pts/0 ]
do
sleep 1
done
chmod a+wr /dev/pts/0
logger Start fake GPS
#!/bin/bash
kill `ps ax | grep "/usr/sbin/gpsd" | grep -v "grep" | awk '{print $1}'`
kill `ps ax | grep "/iPhone-gpsd.py" | grep -v "grep" | awk '{print $1}'`
logger Stop fake GPS
kill `ps ax | grep "/usr/sbin/gpsd" | grep -v "grep" | awk '{print $1}'`
kill `ps ax | grep "/iPhone-gpsd.py" | grep -v "grep" | awk '{print $1}'`
logger Stop fake GPS
igps.service(サービス登録ファイル)を下記の内容で作成します。
[Unit]
Description = iGPSD devices
[Service]
ExecStart = /home/ubuntu/gpsd/i-gps_start.sh
ExecStartPost = /home/ubuntu/gpsd/i-gps_post.sh
ExecStop = /home/ubuntu/gpsd/i-gps_stop.sh
[Install]
WantedBy = multi-user.target
Description = iGPSD devices
[Service]
ExecStart = /home/ubuntu/gpsd/i-gps_start.sh
ExecStartPost = /home/ubuntu/gpsd/i-gps_post.sh
ExecStop = /home/ubuntu/gpsd/i-gps_stop.sh
[Install]
WantedBy = multi-user.target
スクリプトは/home/ubuntu/gpsdに保存し、サービス登録ファイルは/lib/systemd/systemに保存します。
その後、サービスに登録します。
#sudo systemctl enable igps.service
#sudo systemctl daemon-reload
ちなみにpost設定を入れているのは、読み込み許可しないとINDI_GPSDにデータが渡らなかったためです。さらに、pts/0の設定にしていますが、これはコンソールより先にサービスが立ち上がるためです。最初コンソールを立ち上げた後にいろいろ設定していたので、iGPSはpts/1を使用していましたがそのままサービス登録するとそのptsの使用順の違いで動かないと困っていました。
さて、スマホからアクセスして位置情報を渡します。
そうすると、INDI_GPSD側で認識しました。
これで確実に位置が設定できますね。情報を頂いたTーStudioさんに感謝です!
撮影は3/20の夜で、大阪と和歌山の県境付近に行ってきました。ただ、すんなりと撮影準備ができたかというとそうではありませんでした。
Raspberry Pi4にしたことでASI CAPがインストールできず、ピント合わせができね~と焦っていましたが、タブレットでもできるようにしていたことを思い出し接続。いざ立ち上げると、カメラが認識しない。どうも変換コネクタがダメっぽく、念のため持ってきたPCでピント調整。でもここでの調整が甘くピントがずれてました…
なので、3対象の内 2対象はオシャカ、最後のIC4604にかけることにしました。
今度は、ピントを合わせなおして撮影開始。3時間かけた結果がこれです。
さて、スマホからアクセスして位置情報を渡します。
これで確実に位置が設定できますね。情報を頂いたTーStudioさんに感謝です!
撮影は3/20の夜で、大阪と和歌山の県境付近に行ってきました。ただ、すんなりと撮影準備ができたかというとそうではありませんでした。
Raspberry Pi4にしたことでASI CAPがインストールできず、ピント合わせができね~と焦っていましたが、タブレットでもできるようにしていたことを思い出し接続。いざ立ち上げると、カメラが認識しない。どうも変換コネクタがダメっぽく、念のため持ってきたPCでピント調整。でもここでの調整が甘くピントがずれてました…
なので、3対象の内 2対象はオシャカ、最後のIC4604にかけることにしました。
今度は、ピントを合わせなおして撮影開始。3時間かけた結果がこれです。
IC4604付近
撮影地:大阪 泉南市
望遠鏡:RedCat51(250mm)
カメラ:ASI294MC
フィルター:LPR-N
制御:Ekos + INDI
ガイドスコープ:マイクロガイドスコープ50(190mm)
ガイドカメラ:ASI178MM
ガイドソフト:PHD2
赤道儀:Celestron ADVANCED-VX
ゲイン:220
露出時間:180sec
枚数:Light × 60
コンポジット:自作ソフト
仕上げ:Photo Shop CS6
うーん、淡い部分は全然でした。もう少しゲインと露出を上げるべきでした。さらに言えば、QBPフィルターを使わなかったのは失敗でした。背景がなんとなくかぶっている感じです。Nik Collectionで強調したのですが、ちょっとやりすぎました。とりあえず前回のように途中で止まることなく撮影できたのでそれだけでも良しとしますか。
天気の悪い日が続くと、いろんなものが生えてきます。
ヒートシンクつけたのでわかりずらいですが、Raspberry Pi4です。M1Sもよかったのですが、やはりUSBポート数が多いに越したことはありません。
早速、Ubuntu MATEをインストール。(下記、細かい内容は省いています。すみません)
まずは、Ubuntu Serverをダウンロード(64bit版RaspberryPi4用 )
ダウンロード先:Install Ubuntu Server on a Raspberry Pi 2, 3 or 4
的のマークを選択して、「options」をクリックします。
この記事の中で、ブラウザ経由で時刻合わせがもう少しでできそうと書かれていました。ソフト屋さんの端くれとしてはチャレンジするしかないということで、いろいろ調べて何とか出来ました。(いろんなサイトのコードを切り貼りしてます)
とりあえず、Apache2とPHPをインストールします。
SSLを有効にします。
nmapで通信ポートの確認をします。(ポート番号443があればOK)
PHPからコマンドが実行できるように、sudoをパスワード無しで実行できるようにします。グローバルなネットには接続しないので、やむを得ずです。
HTMLファイルのヘッダーにJavascriptで次のコードを記載します。そして、ボタンが押されたら「GetPos」関数が呼び出されるようにします。(今回はこれをgetdate.htmlとしています)
次に、データを受け取るPHPスクリプトです。(これは、getdate.phpとしています)
これらを、httpsでアクセスできる場所に入れて、スマホのブラウザからgetdate.htmlをアクセスします。ボタンを押すとスマホの時刻でRP4の時刻が設定されます。うまくいったので、RTCはつけなくてよさそうです。GPSはどうしようかな~。iGPSというのもあって、こちらはスマホのGPS情報をRP4に渡して、内部はgpsdをだまくらかすものらしいのですが、上手く動かず。FireFox Ver49はhttpアクセスでGPS情報がとれるので何とかなりそうでしたが、もう少し時間がかかりそうです。
今晩はどうも晴れているようですが、明日お仕事なんで我慢我慢…
ヒートシンクつけたのでわかりずらいですが、Raspberry Pi4です。M1Sもよかったのですが、やはりUSBポート数が多いに越したことはありません。
早速、Ubuntu MATEをインストール。(下記、細かい内容は省いています。すみません)
まずは、Ubuntu Serverをダウンロード(64bit版RaspberryPi4用 )
ダウンロード先:Install Ubuntu Server on a Raspberry Pi 2, 3 or 4
ダウンロードしたイメージをmicroSDカードへ書き込み、PR4を起動します。
なんかひと手間掛けないとMATEがインストールできないようなので、コンソールログイン後にデスクトップ環境のUbuntu MATEをインストールします。
なんかひと手間掛けないとMATEがインストールできないようなので、コンソールログイン後にデスクトップ環境のUbuntu MATEをインストールします。
$sudo apt update
$sudo apt upgrade
$sudo apt install ubuntu-mate-desktop
$sudo apt upgrade
$sudo apt install ubuntu-mate-desktop
ログインマネージャーは「lightdm」を選択します。これで、自動ログインも可能になります。さらに、リモート制御ができるように「nomachine」を入れておきます。nomachine_6.9.2_1_arm64.debをダウンロードしてインストールします。
BluetoothでAdvanced VXのコントローラと接続するようにしているのですが、GUIではうまくいかなかったので、コマンドライン制御ができるように関連パッケージをインストールします。
sudo apt-get install -y bluetooth
sudo apt-get install -y pi-bluetooth
sudo apt-get install -y pi-bluetooth
Kstarsなどのインストールは過去記事の通りです。
ただ、後で気づいたのですがplate solveのデータはKStarsからもインストールできるようなので、今回はそうしてみます。とりあえず、EKOSの設定をCCD・架台ともにシミュレータを設定してINDIサーバーをスタートします。
的のマークを選択して、「options」をクリックします。
Index Filesをクリックし、ロケーションをHomeフォルダーのほうを選択します。そうするとそれぞれのカタログをクリックすることができるようになります。必要なファイルをクリックしてダウンロードしておきます。2MASSは8.0まですべて、Tycho2は全部入れておきました。
この間の撮影では撮影データのダウンロードが途中で止まる現象が出ていましたが、結局CCDカメラの電源容量不足が原因でした。セルフパワータイプのHUBを間に挟むことで止まることなくスケジュールは完了し、さらにデータダウンロード時間が1秒未満となかなかいい感じになりました。
というわけで、接続は次のようになりました。
【3/9追記 すっかり忘れてました…】
さらにSSDにシステムを移行して、USB起動させます。手持ちのSSDは/dev/sda4に新しいパーティションを作りました。ここにSDカード上のシステムをコピーします。
これで、ファイルの時刻やパーミッションなどそのままコピーが完了しました。次のコマンドでデバイスファイルをコピーします。
さてここまではいいのですが、このままでは時刻を都度設定しなければなりません。どうしたものかと悩んでいたところ、このブログにヒントがありました。(リンク失礼します)
この間の撮影では撮影データのダウンロードが途中で止まる現象が出ていましたが、結局CCDカメラの電源容量不足が原因でした。セルフパワータイプのHUBを間に挟むことで止まることなくスケジュールは完了し、さらにデータダウンロード時間が1秒未満となかなかいい感じになりました。
というわけで、接続は次のようになりました。
【3/9追記 すっかり忘れてました…】
さらにSSDにシステムを移行して、USB起動させます。手持ちのSSDは/dev/sda4に新しいパーティションを作りました。ここにSDカード上のシステムをコピーします。
sudo mount /dev/sda4 /mnt
sudo chown ubuntu:ubuntu /mnt
sudo -s
cd /
find . -xdev | cpio -pvdm /mnt
sudo chown ubuntu:ubuntu /mnt
sudo -s
cd /
find . -xdev | cpio -pvdm /mnt
これで、ファイルの時刻やパーミッションなどそのままコピーが完了しました。次のコマンドでデバイスファイルをコピーします。
sudo tar cf a.tar dev
cd /mnt
tar xvf /a.tar
そのあと、「/boot/firmwer/nobtcmd.txt」ファイルの「root=」のところを「root=/dev/sda4」と書き換えます。さらに/mnt/etc/fstabもルートファイルのマウントを「/dev/sda4」に書き換えます。これでリブートすると無事にSSDから起動できました。cd /mnt
tar xvf /a.tar
さてここまではいいのですが、このままでは時刻を都度設定しなければなりません。どうしたものかと悩んでいたところ、このブログにヒントがありました。(リンク失礼します)
この記事の中で、ブラウザ経由で時刻合わせがもう少しでできそうと書かれていました。ソフト屋さんの端くれとしてはチャレンジするしかないということで、いろいろ調べて何とか出来ました。(いろんなサイトのコードを切り貼りしてます)
とりあえず、Apache2とPHPをインストールします。
$apt install apache2 php
SSLを有効にします。
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl
$ sudo service apache2 restart
$ sudo a2ensite default-ssl
$ sudo service apache2 restart
$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-07 17:33 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00048s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
631/tcp open ipp
4000/tcp open remoteanything
7001/tcp open afs3-callback
20000/tcp open dnp
Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-07 17:33 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00048s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
631/tcp open ipp
4000/tcp open remoteanything
7001/tcp open afs3-callback
20000/tcp open dnp
Nmap done: 1 IP address (1 host up) scanned in 0.20 seconds
$sudo visudo
www-data ALL=(ALL) NOPASSWD: ALL ← この行を追加する
www-data ALL=(ALL) NOPASSWD: ALL ← この行を追加する
HTMLファイルのヘッダーにJavascriptで次のコードを記載します。そして、ボタンが押されたら「GetPos」関数が呼び出されるようにします。(今回はこれをgetdate.htmlとしています)
<!DOCTYPE html>
<head> <script>
if( navigator.geolocation )
{
// 現在位置を取得できる場合の処理
//alert( "あなたの端末では、現在位置を取得することができます。" ) ;
navigator.geolocation.getCurrentPosition(GetPositionProc,errorFunc);
}
// Geolocation APIに対応していない
else
{
// 現在位置を取得できない場合の処理
alert( "あなたの端末では、現在位置を取得できません。" ) ;
}
}
// 失敗した時の関数
function errorFunc( error )
{
// エラーコードのメッセージを定義
var errorMessage = {
0: "原因不明のエラーが発生しました…。" ,
1: "位置情報の取得が許可されませんでした…。" ,
2: "電波状況などで位置情報が取得できませんでした…。" ,
3: "位置情報の取得に時間がかかり過ぎてタイムアウトしました…。" ,
} ;
// エラーコードに合わせたエラー内容をアラート表示
alert( errorMessage[error.code] ) ;
}
function GetPositionProc(position) {
var geo_text = "緯度:" + position.coords.latitude + "\n";
geo_text += "経度:" + position.coords.longitude + "\n";
geo_text += "高度:" + position.coords.altitude + "\n";
geo_text += "位置精度:" + position.coords.accuracy + "\n";
geo_text += "高度精度:" + position.coords.altitudeAccuracy + "\n";
geo_text += "移動方向:" + position.coords.heading + "\n";
geo_text += "速度:" + position.coords.speed + "\n";
var date = new Date(position.timestamp);
geo_text += "取得時刻:" + date.toLocaleString() + "\n";
document.getElementById('position_view').innerHTML = geo_text;
var val1 = "date=" + date.toLocaleString();
val1 += "&latitude=" + position.coords.latitude;
val1 += "&longitude=" + position.coords.longitude;
senddata(val1);
}
function senddata(dat){
//
var url = "./getdate.php";
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
xhr.send(dat);
xhr.onreadystatechange = function(){
if(this.readyState === 4){
var list = document.getElementById("list");
list.innerHTML += "<div>"+this.responseText+"</div>";
document.forms.form1.test.value = "";
}
};
}
</script>
</head>
<pre id="position_view"></pre>
function GetPos() {
// Geolocation APIに対応しているif( navigator.geolocation )
{
// 現在位置を取得できる場合の処理
//alert( "あなたの端末では、現在位置を取得することができます。" ) ;
navigator.geolocation.getCurrentPosition(GetPositionProc,errorFunc);
}
// Geolocation APIに対応していない
else
{
// 現在位置を取得できない場合の処理
alert( "あなたの端末では、現在位置を取得できません。" ) ;
}
}
// 失敗した時の関数
function errorFunc( error )
{
// エラーコードのメッセージを定義
var errorMessage = {
0: "原因不明のエラーが発生しました…。" ,
1: "位置情報の取得が許可されませんでした…。" ,
2: "電波状況などで位置情報が取得できませんでした…。" ,
3: "位置情報の取得に時間がかかり過ぎてタイムアウトしました…。" ,
} ;
// エラーコードに合わせたエラー内容をアラート表示
alert( errorMessage[error.code] ) ;
}
function GetPositionProc(position) {
var geo_text = "緯度:" + position.coords.latitude + "\n";
geo_text += "経度:" + position.coords.longitude + "\n";
geo_text += "高度:" + position.coords.altitude + "\n";
geo_text += "位置精度:" + position.coords.accuracy + "\n";
geo_text += "高度精度:" + position.coords.altitudeAccuracy + "\n";
geo_text += "移動方向:" + position.coords.heading + "\n";
geo_text += "速度:" + position.coords.speed + "\n";
var date = new Date(position.timestamp);
geo_text += "取得時刻:" + date.toLocaleString() + "\n";
document.getElementById('position_view').innerHTML = geo_text;
var val1 = "date=" + date.toLocaleString();
val1 += "&latitude=" + position.coords.latitude;
val1 += "&longitude=" + position.coords.longitude;
senddata(val1);
}
function senddata(dat){
//
var url = "./getdate.php";
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
xhr.send(dat);
xhr.onreadystatechange = function(){
if(this.readyState === 4){
var list = document.getElementById("list");
list.innerHTML += "<div>"+this.responseText+"</div>";
document.forms.form1.test.value = "";
}
};
}
</script>
</head>
<body>
<button onclick="GetPos()">時刻・位置 取得</button><pre id="position_view"></pre>
</body>
</html>
<?php
header("Content-type: text/plain; charset=UTF-8");
$date_x= $_REQUEST['date'];
$latitude_x = $_REQUEST['latitude'];
$longitude_x = $_REQUEST['longitude'];
$command = 'sudo /bin/date -s "'.$date_x.'"';
exec($command);
?>
header("Content-type: text/plain; charset=UTF-8");
$date_x= $_REQUEST['date'];
$latitude_x = $_REQUEST['latitude'];
$longitude_x = $_REQUEST['longitude'];
$command = 'sudo /bin/date -s "'.$date_x.'"';
exec($command);
?>
これらを、httpsでアクセスできる場所に入れて、スマホのブラウザからgetdate.htmlをアクセスします。ボタンを押すとスマホの時刻でRP4の時刻が設定されます。うまくいったので、RTCはつけなくてよさそうです。GPSはどうしようかな~。iGPSというのもあって、こちらはスマホのGPS情報をRP4に渡して、内部はgpsdをだまくらかすものらしいのですが、上手く動かず。FireFox Ver49はhttpアクセスでGPS情報がとれるので何とかなりそうでしたが、もう少し時間がかかりそうです。
今晩はどうも晴れているようですが、明日お仕事なんで我慢我慢…