Skip to content

Latest commit

 

History

History
97 lines (80 loc) · 6.58 KB

4_reducing_latency.md

File metadata and controls

97 lines (80 loc) · 6.58 KB

reducing latency and camera pose

3Dカメラでの画像認識処理には、どうしても遅延が生じてしまう。

3Dカメラの方式による遅延時間の違い

  • 3Dカメラで深度情報を得る前の処理には次の3通りがある。
    1. 3Dカメラのボードでの電気的な処理結果を深度情報に変換しているもの
    • ToFカメラ: ToFカメラでは、光が戻ってくるまでの時間(time of flight)を計測している。  2. 3Dカメラに付随したアクセラレータによって、深度情報に変換しているもの
    • 例 RealSenseなどのstructured light方式のカメラ
    • 対応点マッチングによって、深度情報を計算させるために、アクセラレータを使用している。
    • USBインタフェースでそのカメラを利用する際には、アクセラレータの存在を意識する必要がない。  3. 3Dカメラで取得したデータから、深度情報を算出するには、GPUやCPUを必要とするもの
    • 例: StereoLabs ZED2i: NVIDIAのCUDAデバイスが必要

おそらくは、1が遅延時間が少なく、2,3はそれより大きいと推測される。 これらの遅延時間は、取得する画像サイズによって変わってくる。 画像サイズを大きくすると、計算に必要な時間が変わってくる。

累積の遅延時間

  • 3Dカメラと検出結果の統合までの遅延時間は、多くの要因の累積となる。
  • その時間を計測するのが大事であるが、必ずしも容易ではない。

遅延時間の計測

  • 画像取得・画像認識処理の結果を、取得画像にフィードバックする。
  • 例:物体検出位置の変化を、レーザーポインタでon/off表示する。
    • 対象物の出現を検出して、その結果をレーザーポインタでonを表示する。
    • 出現のタイミングと、レーザーポインタでの表示のonへの変化のタイミングとの時間差を各フレームの画像から確認する。
    • (ここでは、レーザーポインタのonに関わる時間が1msよりも格段に小さいことを想定している) あるいは、2. 遅延時間を測るには

遅延時間の問題

アプローチ1: 遅延時間の削減

遅延時間を減らすための方策

  • 3D計測や画像認識処理への入力の画像サイズを小さくする。
  • データのパイプライン設計を改善する。
    • CPU、GPU間のデータ転送を減らす。
  • モジュールの改善
    • メモリのコピーを減らす。
  • アクセラレータを使ってCPUの負荷を減らす。
  • シングルスレッドによるIOでの待ち時間を減らすために、マルチスレッドにして、IOの部分とデータ処理とを別スレッドにする。
  • 別々の検出器を複数動かすのではなく、1つの検出器で兼用させる。
    • 例:物体検出とインスタンスセグメンテーションとを同時に実行するライブラリの利用
  • encode/decode 処理を減らす。バイナリデータのテキスト化を不要にする。
  • 圧縮・展開処理をしない。
  • 圧縮・展開処理が必要なときは、利用可能なハードウェアアクセラレータを使う。
  • 動き差分を生じないときには、検出処理をスキップする。
  • その他、意図しない遅延の原因を取り除く。
  • バファファリング処理の改善

アプローチ2: 現時刻での予測

通信・画像認識などによる遅延を減らしたうえで、それでも残る問題を減らしていく。 画像認識・画像計測を用いた最新の認識は、以下のような結果

世界座標系での問題

上記の問題に対して、ロボットではカメラ姿勢の問題を生じてしまう。 自分の首の姿勢が変わったときに、やってくる車の動きを世界座標系で適切に判断する。 遅延時間を含んでいるので、現時刻での位置は、過去フレームのデータを含めた予測になる。

遅延時間の補正分の予測

このため遅延時間の分の補正を加えて、世界座標での位置を算出する。 この遅延時間の補正分の予測の予測器が、適切であるのかは、ユースケースの中で検証されなくてはならない。

他者の動き予測

例:渋谷のスクランブル交差点を渡ることを考える。 他の歩行者とぶつからないように歩く。 そこでは、他の歩行者の過去フレームを含めた世界座標系での動きを、ごく近い人に対して追跡している。 数秒先の瞬間も含めてぶつからないようにするためには、他者の動き予測を実施しなければならない。

これらの中で、遅延時間を含めた、他者の動き予測モデル・そこでの自らの行動モデルとを最適化することで、 他者にぶつからないように歩くことができるだろう。

アプローチ3: 低遅延センサを用いた安全対策

ぶつからないという目的のためには、視覚系のセンサには限界がある。 ガラス(透明物体)や鏡(反射物体)の問題 至近距離での3Dカメラの検出限界の問題 そのため、現時点では視覚センサだけにたよるのではなく、他のセンサを併用する。 例:

  • 超音波センサ
  • ピンポイント型のToFセンサ これらの場合には遅延時間が短く、フレームレートが高いので、 ぶつからないという目的に利用される。

coding

  • 変数のコピー渡しは減らす。
  • viewで十分な時に部分配列を使わない。
  • 動的に配列をつど確保することを減らす。
  • マルチスレッドで実装する。
  • バイナリデータをプロセス間で転送するときに、バイナリデータをテキスト化、テキスト化したものをバイナリ化などのオーバーヘッドを生じないように設計する。
  • 途中のデータの取りこぼしがあっても、最新のデータが得られやすいのを重視する。

大半がROS2がしていることじゃないか

  • 使ったこともなく、ROS2を毛嫌いするのは、現実的じゃない。
  • ロボットのための制御は、下位の階層と上位の階層とで異なることは珍しくない。μs単位の制御をしたい部分には、それようのマイコンと制御を導入するのがいいだろう。