SSMの使い方

基本的なSSMの使い方は下記のとおりです。

  • ssmを起動。
  • センサ用のドライバプログラムを起動。
  • それらのデータを利用するプログラムを起動する。

また、ユーティリティプログラムを利用する事ができます

  • lsssmで登録されているセンサを確認する。
  • ssmloggerでセンサデータをファイルに記録する。
  • ssmmultiplayerで記録したセンサデータを再生する。
  • ssmtransportで別のPC上のSSMとセンサデータを共有する。

SSMの起動方法

SSMを利用する際は、あらかじめssmを起動しておきます。

 ./ssm


Utilityの利用

lsssm

ssmおよびSensorA_driverを起動した状態でlsssmを起動してみると

./lsssm
No. |  sensor name   | suid |  size  |  num | tnum | cycle[s] |
----+----------------+------+--------+------+------+----------+
000 |    sensor_A    |    0 |     20 |  143 |  143 |    0.100 |
----+----------------+------+--------+------+------+----------+
Total 1 sensors.
といった感じで、登録されているセンサが表示されます。

ssmlogger

ssmloggerはSSMに登録されているセンサのデータをファイルに記録するプログラムです。 SSMに登録されているセンサのデータはすべて記録することができます。

./ssmlogger -n センサ名 -i センサのID -l 記録ファイル名
複数記録したいときはssmloggerを複数起動します。

ssmloggerを使ってSensorAのデータを記録してみる例。 SensorA_driverを起動して、

./ssmlogger -n sensor_A -l sensor_A.log
気がすんだらctrl+cで終了。 sensor_A.logというファイルができているはず。

もし、複数センサのログを記録したい場合には、複数起動すれば良い。 たとえばSensorA_driverとSensorB_driverを起動している状態で、

./ssmlogger -n sensor_A -l sensor_A.log & ./ssmlogger -n sensor_B -l sensor_B.log
のようにする。

シェルスクリプトを利用すると楽。

./logging.sh <記録ディレクトリ名>
で、logging.sh内に書かれているセンサのデータを指定ディレクトリに保存する。

ssmmultiplayer

ssmmultiplayerは記録した複数のセンサデータを同時に再生します。 ./ssmmultiplayer 記録ファイル名1 記録ファイル名2 記録ファイル名3 ...

ssmmultiplayerで複数ログを再生してみる例。

./ssmmultiplayer sensor_A.log sensor_B.log
で再生されます。 開始時刻は1番めに指定したログファイルにあわせられます。

再生したいデータが一つのディレクトリに入っている場合は、

./ssmmultiplayer <ディレクトリ>/*
で再生することが可能です。

注意: ssmmultiplayerで再生する場合、 タイムスタンプを参照してSSMに書き出すため、 センサの計測→通信等による取得の時間遅れが無視されます。 そのため、実際にセンサで計測した際と若干動作と異なる場合があります。

ssmtransport

複数PC間でセンサデータを共有するためのソフトウェア。 別のPCに接続されているセンサを使えるようになります。

ssm_trans.png
SSMの構成
PCの接続は現在は1対1の通信のみ対応。 センサは複数転送可能(なはず)です。 互いにファイルsend_sensorsに送りたいセンサの名前とIDを書いて、 サーバ側は
./ssmtransport
クライアント側は
./ssmtransport <サーバのIP>
で起動する。 両方に同じセンサ名が書いてあると大変なことになるかも。

なお、PC間ではNTP等で時刻同期をとることを推奨します。

大きな容量のデータを登録する

画像等のデータは毎秒24MByte等、非常におおきな記憶容量を必要とします。 SSMでは共有メモリにデータを蓄積するため、記録できる容量は共有メモリサイズに依存します。 設定されている共有メモリの大きさは下記

/proc/sys/kernel/shmmax
で参照できます。

一時的にサイズを変更する際は、

echo <サイズ> > /proc/sys/kernel/shmmax
ずっと変更する際は、/etc/sysctl.conf等に
kernel.shmmax = <サイズ>
と書くなどすれば反映されます。