障害物検出手法について
点群画像をOpenCVによるクラスタリングを行うのがわかりやすく障害物検出可能だが具体的な点の座標を活かせないため,点群の座標を利用してクラスタリングを行いたい
ダウンサンプリング
3D-LiDARは点群の数が多く,そのまま計算するとリアルタイムの障害物検出は難しい.そのため,3D点群の処理をしデータを軽量化する必要があると考えられる.その方法としてダウンサンプリングがある.
3次元点群処理の技術とPythonライブラリまとめ
https://qiita.com/Livbear/items/21cebd7b345196bf78f4
Voxel Grid Filter
ダウンサンプリング手法にVoxel Grid Filterがある.これは立方体のグリッドを配置し,グリッド内の点群の重心を取ることで点群数を減らす手法である.図では二次元であるが実際は三次元でグリッドを配置する.そして,単体のボクセル内で重心の計算を行う.
この手法は均等に点群をサンプリングできるため,点群の情報を維持しやすいと考えられる.ボクセル内で重心をとっているため,データの精度は高いが生のデータではないため,単体のボクセルが大きい場合は重心をとるのは有効だと考えられるが,ボクセルが細かい場合は単にボクセル自体の重心とるだけで,大まかな位置検出は可能だと考えられる.
3D-LiDARの場合放射状にレーザを照射しているため,遠近によって点群の密度が大きく変わるが,その差の軽減も期待できるだろう.
この実装について,システムフローを考える.xyz座標で区切っているため点群をxyz座標の三次元配列に格納し,それぞれの要素で重心をとることでダウンサンプリング可能だろう.
【Python_3D点群処理】点群のダウンサンプリング:ボクセル …
https://tech-deliberate-jiro.com/downsampling-grid/#google_vignette
最近点を特徴点とする手法
Voxel Grid Filterではxyz座標で区切るが3D-LiDARの点群を2D-LiDARのようにサンプリングする方法も考えられる.これは点群のxy座標を角度と距離に変換し,任意の角度で区切り,その範囲内で最も近い点群をサンプリングする方法である.この方法であれば2D-LiDARと同程度のデータ量となる.しかし,点の密度が近いほど大きいという偏りがあるため,より工夫が必要だと考えられる.
実装の際のシステムフローに関しては任意の分解能の角度ごとの配列に点群を格納し,その要素ごとに最短距離の点群を求めることで2Dのような点群が得られると考えられる.
二種類の手法の比較
Voxel Grid Filterは3Dのまま点群数を減らすことができるため,障害物の奥行なども見ることができ,障害物の大まかな位置やサイズを検出するのに有用だろう.ただ,ボクセルで区分けするため,画像処理と同様にデータの精度が低下することが考えられる.
一方,最近点を特徴点とする手法は実際のデータを格納しているため,点群の自己位置方向への誤差はほとんどないと考えられ,表面の形状を正確に取得しやすいだろう.しかし,近い点しか見えていないため,移動により見る角度が変わると点群の形状は変わってしまい,前後のフレームとの比較は難しくなると考えられる.
そのため,Voxel Grid Filterで軽量化した後、大まかなクラスタリングを行い,全体的な障害物の把握に利用し,回避に重要な部分に最近点を加えることである程度の精度を維持しつつ,点群データを軽量化できるのではないだろうか.