ここではtelemetra-1の構成と設定方法について説明します。
ADXL355を制御して加速度データを収集するプログラムです。root権限で実行する必要があります。 標準仕様では、サンプリングレート1KHzの段階でFIRディジタルフィルタをかける、FIR LPF版です。 使用方法は次の通りです。
sudo /home/pi/telemetra/w355 (-dhuvwz) (-r range) [sr] [ch] [key] [size]
w355は加速度データをサンプリングレートsr(Hz)で取り込み、X, Y, Zの3成分データを chから始まる3チャネルの WINフォーマット データとして、大きさsize(KB)でキーkeyをもつ共有メモリに、巡回的に書き込みます。 srとして指定できるのは 100, 200, 500, 1000 のいずれか、chは 16進数 (0000-FFFD)です。keyは32ビット整数値です。
なお、w355が共有メモリに書き込む形式は、時間順に整列された 「order出力側の形式」ですので、 直接wdiskプログラムで1分ファイルに出力できます。
サンプリングレートとしては 100, 200, 500, 1000 (Hz)が指定できます。 ADXL355は内部クロックで動作し、この内部クロック周波数は1%程度のばらつき(個体差)をもちます。 ADXL355には、アナログローパスフィルタ、AD変換器、2段のディジタルローパス間引きフィルタ、 ディジタルハイパスフィルタ(オプションで使用)、ディジタル内挿フィルタが内蔵されています。 ADXL355はRaspberry Piのシステムクロックから生成したサンプリングレートのクロックを外から与えられ、 それに同期してデータを出力します。すなわちADXL355は、内部クロックでサンプリングしたデータを、 最終段階(1000Hz)で外部サンプリングレートクロックに合わせて出力するためにディジタル内挿フィルタを使います。 Telemetra-1のタイムスタンプはサンプリングレート1000Hzの段階で付加されるため、その付加誤差は1ms以内です。
w355はADXL355から1000Hzのレートで出力されたデータに、FIR型のアンチエリアシング・ローパスフィルタを かけてから、所要のサンプリングレートになるよう間引いて出力します。デフォルトでこのフィルタは 最小位相特性です。
このフィルタの特性は下記の通りです。上段の図はインパルスレスポンス(横軸はSR=1KHzのサンプル数)、 下段の図は振幅周波数特性(横軸Hz)で、線の色は緑が最小位相特性、青が直線位相特性です (振幅特性は同じなので重なっている)。 直線位相特性の場合、タイムスタンプは係数長の半分だけずらしてピーク位置をゼロにしてあります。 いずれのサンプリングレートでも、振幅特性はサンプリングレートの40%で約-6dB、50%(ナイキスト周波数)で約-120dB (≒1/220)です。
なお、共有メモリに書き込まれたデータを WINシステム の既存プログラムで利用する場合、500Hz以上のサンプリングレートでは 正常に扱えない場合があるので注意が必要です。UDPパケットサイズをMTU(1400~1500バイト程度) の許す範囲に収めるためには、 send_raw 等による伝送はサンプリングレート200Hz以下が無難です。
sudo /home/pi/telemetra/w355 100 9700 11 100
サンプリングレート100Hz、チャネル番号 9700,9701,9702のデータを大きさ 100KBの共有メモリ (キー 11番)に巡回的に書き込みます。
shmdump 11
ウォッチドッグタイマ―はRaspberry Piに備わった機能で、使用開始設定後は、定期的なリセット操作が 行われないと10数秒後にRaspberry Pi自体が再起動します。w355はオプション-w付きで起動すると ウォッチドッグタイマ―を使用開始設定し、以降1秒分のデータを出力するたびにリセット操作を 行います。w355が何らかの原因でデータを出力しなくなるとリセット操作が行われなくなり、 10数秒後にRaspberry Piが再起動します。ただし、w355プログラムが動作中に止まることは ほとんどないと思われ、またウォッチドッグタイマー使用中はリセット操作が行われるたびに (つまり毎秒)/var/log/syslog/kern.log と /var/log/syslog/syslogに1行のメッセージ ("watchdog0: watchdog did not stop!")が書き込まれてログファイルが膨らむために、初期設定では -wオプションを付けていません。
なお、オプション-wの有無にかかわらず、w355は起動時してから最初のデータを 出力するまでの間、ウォッチドッグタイマーを使用しています。これは一部のADXL355で初期化時に 止まる事例が見られたためです。
https://telemetra.jp/support/raspi/CPUシリアル番号
という名前のディレクトリ(webサイト)に置かれます。 このサイトを閲覧するにはユーザー名とパスワードによる認証が必要ですが、 ここは下記の「設定ファイルと実行」の項の webサーバーからの読み込み(getconf.sh) で使われるダウンロード用ディレクトリと同じものですので、 ユーザー名とパスワードは/home/pi/telemetra/getconf.sh内に 書いてあるものをお使いください。w355プログラムのファイル名は「w355_20200219f」のようにバージョン名が 付加されたものです。 ここから最新版プログラムをダウンロードし、w355という名前にコピーして お使いください。なお、バージョン名の最後に「f」が付くのが 標準仕様のFIR LPF版、付かないのがFIR LPFを持たない版です。 周波数特性が明確でエリアシングを回避できるFIR LPF版の使用をお勧めします。
# _win
#
sudo /home/pi/telemetra/w355 100 9700 11 100 &
/usr/local/win/bin/send_raw -1b 1400 11 telemetra.jp 9000 &
ここでは前述の例と同じプログラムw355と、サーバー telemetra.jp のUDPポート 9000へデータを送信するプログラム send_rawが設定されています。
定期的(または定時)に実行される2つのスクリプトが設定されています。 例えば、
* * * * * $HOME/monitor_procs > /dev/null 2>&1
6 * * * * $HOME/telemetra/getconf.sh > /dev/null 2>&1
このうち、毎分実行される/home/pi/monitor_procsについては上記の通りです。 システム起動後最初のプログラム実行もこれによって行われますので、Raspberry Piが起動したと 思ってもw355の実行開始(LED点滅で確認できる)はその1分近く後になることもあります。
1時間に1回(上の例では毎時6分)に実行される/home/pi/telemetra/getconf.shについては 次項で説明します。このスクリプトは毎時1~9分(個体による)に設定されています。
現在の/home/pi/telemetra/getconf.shの機能は次の通りです。
設定されたファイル、ダウンロード用のディレクトリ、サーバーが見つからないときは /home/pi/telemetra/getconf.shは何もしません。
この機能を利用しないときはcrontabから削除してください。