ここではtelemetra-1の構成と設定方法について説明します。
ADXL355を制御して加速度データを収集するプログラムです。root権限で実行する必要があります。 使用方法は次の通りです。
sudo /home/pi/telemetra/w355 (-dfhtuvw) (-r range) [sr] [ch] [key] [size]
w355は加速度データをサンプリングレートsr(Hz)で取り込み、X, Y, Zの3成分データを chから始まる3チャネルのWINフォーマット データとして、大きさsize(KB)でキーkeyをもつ共有メモリに、巡回的に書き込みます。 srとして指定できるのは 100, 125, 200, 250, 500, 1000 のいずれか、chは 16進数 (0000-FFFD)です。keyは32ビット整数値です。
なお、w355が共有メモリに書き込む形式は、時間順に整列された 「order出力側の形式」ですので、 直接wdiskプログラムで1分ファイルに出力できます。
サンプリングレートとしては 100, 125, 200, 250, 500, 1000 (Hz)が指定できます。 ADXL355は内部クロックで動作し、この内部クロック周波数は1%程度のばらつき(個体差)をもちます。 ADXL355には、アナログローパスフィルタ、AD変換器、2段のディジタルローパス間引きフィルタ、 ディジタルハイパスフィルタ(オプションで使用)、ディジタル内挿フィルタが内蔵されています。 ADXL355はRaspberry Piのシステムクロックから生成したサンプリングレートのクロックを外から与えられ、 それに同期してデータを出力します。
ADXL355は内部クロックでサンプリングしたデータを、最終段階で外部サンプリングレートクロックに 合わせて出力するためにディジタル内挿フィルタを使います。なお、出力サンプリングレート125, 250, 500, 1000 Hz のデータはそれぞれ内部で(ほぼ同じ周波数である)125, 250, 500, 1000 Hzサンプリングのデータから内挿補間により 生成されますが、出力サンプリングレート100, 200 Hzのデータは、それぞれ内部で(やや異なる)125, 250 Hz サンプリングのデータから、やはり内挿補間により生成されます。
Raspberry Piのシステムクロックの周波数はADXL355の 内部クロックよりも正確ですが、NTPで較正されているシステム時計によりデータに毎秒の タイムスタンプをつける際、たまに(1%以下の頻度で)1秒間のサンプル数が指定したサンプリングレートと±1だけ ずれることがあります。これは、サンプリングレートのクロックの立ち上がりがシステム時計の秒刻みとは 必ずしも合っていないためです。Telemetra-1のタイムスタンプ誤差が「サンプリング間隔以下」 であるのも同じ理由です。デフォルトでw355は特に何もせず、その1秒間のデータ数が 指定されたサンプリングレートよりも±1だけ違い、その秒のチャネルヘッダーにもサンプリングレート としてその値が書かれます(WINフォーマット のサンプリングレートは形式的に毎秒可変で、以降の処理でも 通常特に不都合はありません)。これがもっとも素直な対応です。それに対し、オプション-f を指定すると、w355は常に指定されたサンプリングレートでデータを出力しますが、そのために、 余分になった1サンプルを廃棄したり、足りなくなった1サンプルを1サンプル前の値で代用します。 この操作は時間軸上での歪となりますからお勧めしませんが、サンプリングレートが必ず一定でないと後処理に不都合な場合には 利用できます。オプション-tはデフォルト動作よりもやや許容範囲を拡げるのでサンプリングレート 増減の頻度は減りますが、基本的にはデフォルト動作と同じですのでやや中途半端な処理です。
なお、共有メモリに書き込まれたデータをWINシステムの既存プログラムで利用する場合、500Hz以上のサンプリングレートでは 正常に扱えない場合があるので注意が必要です。UDPパケットサイズをMTU(1400~1500バイト程度)の許す範囲に収めるためには、 send_raw等による伝送はサンプリングレート250Hz以下が無難です。
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で初期化時に 止まる事例が見られたためです。
# _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から削除してください。