URG のデータ取得の方法について定義してみた。
今までの
URG は常にレーザを発行しているので、常にデータを取得しておけばよかった。データ取得方法についても1通りしかなかったしな。
タイムスタンプ、チェックサム、シリアル番号、指定回数のデータ取得、の機能を
URG が提供しているのだ! いい感じ。
従って、今までは要求する毎のデータを取得に加え、連続した 10枚のデータを取得といった処理が実現できる。 もしかしたら、その 10枚から測定対象の移動状態を検知したいかもしれない。つまり、そういう要求に対処できるコマンドを用意する必要がある。
なので、以下の3つのステップでデータ取得を行う。
- モード設定 ... バッファの数、リングバッファにするかキューにするか、の設定
- 取得指令 ... 測定角度、測定回数、の指定
- データ読み出し ... 取得してあるデータをバッファに取得
ここでいうリングバッファ、キューの違いは、取得バッファにデータがあるときにデータ取得が呼び出されたときに、キューであれば、新たなデータの更新は行わず、リングバッファならもっとも古いデータを新しいデータで上書きする、っていうイメージ。
古いデータの削除を許可するか、しないか、っていう説明の方が直感的かもね。まぁ、そんな感じ。
具体的な使用例は以下の通り。
- 指令毎にデータが取得したい場合
- モード設定 ... バッファ数1、キュー
- 取得指令 ... 必要な角度、1回測定
- 常にバッファに最新のデータを格納しておきたい場合
- モード設定 ... バッファ数1(以上)、リングバッファ
- 取得指令 ... 必要な角度、∞回測定
- 連続した n 個分のデータを取得したい場合
- モード設定 ... バッファ数 n、キュー
- 取得指令 ... 必要な角度、n 回測定
って感じ? とりあえず、UrgHandler に上記メソッドを定義。実装は明日かな?
そんな感じ〜!