RaspberryPiで流星撮影

提供: ディーズガレージ wiki
移動先: 案内検索

書き込み中の記事です。

流星や火球や未確認飛行物体を映像で記録する場合メジャーなソフトはソノタコドットコムさんのUFOCaptureと思います。
残念なことにLinux版のUFOCaptureがありません。Linuxサーバに加えUFOCaptureのためだけにWindowsOSを常時起動しています。
電気料金気になってきます…。
これはもうRaspberryPiで同じシステムを作るしかないと思い挑戦してみることにします。

現状の観測環境です。
UFOCapture出力の自動マルチエンコード機能経由の天体観測ログ

環境

ボード RaspberryPi2 ModelB
OS 2015-11-21-raspbian-jessie.img
カメラ Logicool® HD Pro Webcam C920

ファームウェア更新

$ sudo rpi-update

再起動

$ sudo reboot

最新状態にアップデート

$ sudo apt-get update
$ sudo apt-get upgrade

再起動

$ sudo reboot

IPの固定

設定

$ sudo leafpad /etc/dhcpcd.conf

末尾に追記

interface eth0
static ip_address=192.168.1.184/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

再起動

$ sudo reboot

インストール

必要なライブラリのインストール
MySQLサーバインストール時にMySQLのrootパスワード入力を要求さるので適当なパスワード(後ほど設定に使用します)を入力

$ sudo apt-get install apache2 php5 mysql-server php-pear php5-mysql libvlc-dev libvlccore-dev vlc

ZoneMinderのインストール

$ sudo apt-get install zoneminder

パスワードファイル作成

$ sudo su
$ cd ~
$ leafpad .my.cnf

新規作成

[client]
user=root
password=(MySQLインストール時のパスワード)

データベース設定
MySQLインストール時のパスワードを使用

$ mysql -u root -p < /usr/share/zoneminder/db/zm_create.sql
$ mysql -u root -p
$ grant select,insert,update,delete on zm.* to 'zmuser'@localhost identified by 'zmpass';
$ use zm;
$ quit
$ rm .my.cnf
$ exit

パーミッション設定

$ sudo chmod 740 /etc/zm/zm.conf
$ sudo chown root:www-data /etc/zm/zm.conf
$ sudo chmod 4755 /usr/bin/zmfix
$ zmfix -a
$ sudo chown www-data.www-data /var/cache/zoneminder/temp

サービス登録

$ sudo systemctl enable zoneminder.service

ユーザー登録

$ sudo adduser www-data video

apache設定

$ sudo a2enmod cgi
$ sudo ln -s /etc/zm/apache.conf /etc/apache2/conf-enabled/zoneminder.conf

MooToolsのjavascriptライブラリがインストールされてないので手動で追加

MooToolsCoreのダウンロード http://mootools.net/core
MooToolsMoreのダウンロード http://mootools.net/more
$ sudo mkdir /var/www/html/javascript
$ sudo mkdir /var/www/html/javascript/mootools
$ sudo cp /home/pi/Downloads/MooTools-Core-1.5.2.js /var/www/html/javascript/mootools/mootools-core-nc.js
$ sudo cp /home/pi/Downloads/MooTools-More-1.5.2.js /var/www/html/javascript/mootools/mootools-more-nc.js
$ cd ~

共有メモリ設定
1) 128MB shhmax shared:

$ sudo su -
$ echo "kernel.shmmax = 134217728" >> /etc/sysctl.conf
$ exit

2) 2MB shmall pages:

$ sudo su -
$ echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
$ exit
$ sudo sysctl -p

Cambozolaのインストール(Internet Explorerに必要)

$ wget http://www.andywilcock.com/code/cambozola/cambozola-latest.tar.gz
$ tar -xzvf cambozola-latest.tar.gz
$ sudo cp cambozola-0.936/dist/cambozola.jar /usr/share/zoneminder

再起動

$ sudo reboot

操作

他のPCから接続

http://192.168.1.184/zm

Options→System→Check with zoneminder.com for updated versions (?)のチェックを外す
Options→Images→Is the (optional) cambozola java streaming client installed (?)をチェックする
Optional: under Paths change PATH_SWAP to /dev/shm (puts this process in RAM drive) Click Save

メイン画面のAdd New Monitorをクリック
ZM001.png

C920カメラの登録
ZM002.png

記録状況
ZM003.png

基本設定完了

v4l2のキャプチャーで記録する方法では15fps程度しか出ません。30fps目標にH.264かMJPEGのカメラ登録方法を探ってみます。

MJPG-streamer

ZoneMinderにUSBカメラで登録せずMJPGのIPカメラを登録する方向で試してみます。
必要なライブラリのインストール

$ sudo apt-get install subversion libjpeg-dev imagemagick

ダウンロード

$ svn checkout svn://svn.code.sf.net/p/mjpg-streamer/code/ mjpg-streamer-code
$ cd mjpg-streamer-code/mjpg-streamer

パッチ作成

$ sudo leafpad input_uvc_patch

新規作成

--- plugins/input_uvc/input_uvc.c       (revision 174)
+++ plugins/input_uvc/input_uvc.c       (working copy)
@@ -405,9 +405,13 @@
         if(pcontext->videoIn->formatIn == V4L2_PIX_FMT_YUYV) {
             DBG("compressing frame from input: %d\n", (int)pcontext->id);
             pglobal->in[pcontext->id].size = compress_yuyv_to_jpeg(pcontext->videoIn, pglobal->in[pcontext->id].buf, pcontext->videoIn->framesizeIn, gquality);
+            /* copy this frame's timestamp to user space */
+            pglobal->in[pcontext->id].timestamp = pcontext->videoIn->buf.timestamp;
         } else {
             DBG("copying frame from input: %d\n", (int)pcontext->id);
-            pglobal->in[pcontext->id].size = memcpy_picture(pglobal->in[pcontext->id].buf, pcontext->videoIn->tmpbuffer, pcontext->videoIn->buf.bytesused);
+            pglobal->in[pcontext->id].size = memcpy_picture(pglobal->in[pcontext->id].buf, pcontext->videoIn->tmpbuffer, pcontext->videoIn->tmpbytesused);
+            /* copy this frame's timestamp to user space */
+            pglobal->in[pcontext->id].timestamp = pcontext->videoIn->tmptimestamp;
         }
 
 #if 0
@@ -418,8 +422,6 @@
         prev_size = global->size;
 #endif
 
-        /* copy this frame's timestamp to user space */
-        pglobal->in[pcontext->id].timestamp = pcontext->videoIn->buf.timestamp;
 
         /* signal fresh_frame */
         pthread_cond_broadcast(&pglobal->in[pcontext->id].db_update);
Index: plugins/input_uvc/v4l2uvc.c
===================================================================
--- plugins/input_uvc/v4l2uvc.c (revision 174)
+++ plugins/input_uvc/v4l2uvc.c (working copy)
@@ -450,6 +450,8 @@
         */
 
         memcpy(vd->tmpbuffer, vd->mem[vd->buf.index], vd->buf.bytesused);
+        vd->tmpbytesused = vd->buf.bytesused;
+        vd->tmptimestamp = vd->buf.timestamp;
 
         if(debug)
             fprintf(stderr, "bytes in used %d \n", vd->buf.bytesused);
Index: plugins/input_uvc/v4l2uvc.h
===================================================================
--- plugins/input_uvc/v4l2uvc.h (revision 174)
+++ plugins/input_uvc/v4l2uvc.h (working copy)
@@ -28,6 +28,7 @@
 
 
 #include <stdio.h>
+#include <stdint.h>
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -105,6 +106,8 @@
     int framecount;
     int recordstart;
     int recordtime;
+    uint32_t tmpbytesused;
+    struct timeval tmptimestamp;
 };
 
 /* context of each camera thread */

パッチ実行

$ patch -p0 < input_uvc_patch

コンパイル+インストール

$ make USE_LIBV4L2=true clean all
$ sudo make DESTDIR=/usr/local install

起動スクリプト

$ cd ~
$ sudo leafpad mjpg_streamer

新規作成

#!/bin/sh
export LD_LIBRARY_PATH=/usr/local/lib
mjpg_streamer \
-i "input_uvc.so -d /dev/video0 -r 640x480 -f 30" \
-o "output_http.so -w /usr/local/www -p 8080"

実効権限

$ sudo chmod 755 mjpg_streamer

実行

$ ./mjpg_streamer

終了するにはCtrl+Cキー
カメラの登録
ZM004.png

GStreamer

ZoneMinderにUSBカメラで登録せずH.264のIPカメラを登録する方向で試してみます。

機能拡張

遠隔操作

RealVNC® Enterprise Edition の場合

※外部に公開するwebサーバーでは導入しないでください。非常に危険です。

電源、カメラ、LAN以外取り外しても遠隔で調整できるよう実運用向けにしてみます。 TightVNCなどではroot(管理者権限)が難しい作りになっています。モニターに表示するX-Windowそのままを表示してくれるx11vncを使用します。

x11vncのインストール

$ sudo apt-get install x11vnc

パスワードの入力 保存していいか聞かれるので「y」を選択

$ x11vnc -storepasswd

起動

$ x11vnc -usepw -forever

Ctrl+Cで一旦停止

自動起動設定

$ cd /home/pi/.config
$ mkdir autostart
$ cd autostart

新規作成

$ sudo leafpad x11vnc.desktop
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -display :0 -ultrafilexfer
StartupNotify=false
Terminal=false
Hidden=false

スクリーン解像度を変更する場合

$ sudo leafpad /boot/config.txt

コメントを削除して有効化

framebuffer_width=1440
framebuffer_height=900

シャットダウン

$ sudo shutdown

電源、LAN、USBカメラ以外取り外して電源入れ直し

VNCクライアントから接続してみる
クライアントパソコンにはavahiかBonjourがインストールされている必要があります。
Windowsパソコンだけ問題になりやすく、簡単な方法はiTunesをインストールすることです。
ネット検索で「Raspberry avahi Bonjour」辺りで調べると詳しい事情が出てきます。

参考

How to install ZoneMinder on Raspberry PI 1 or 2 with Raspbian 8.1 (Jessy) 64 bit
Hardware Compatibility List

Using the Raspberry Pi Camera Module with Zoneminder
MJPG stream is not working with kernel 3.18