未来を創る、テックコミュニティー

代表技術通信~点群の当たり判定とか

草場代表
2020/10/12

こんばんは。代表の草場です。

点群データを一気に合わせてUnityで読み込ませることには成功しました。が、重すぎてOculus Questに全然表示されない。。。この辺の重さはネックです。方法がわからず。
ついでに点群の当たり判定について調べています。増田研究室が積極的に研究されているみたいです。「大規模点群における衝突判定法」という論文を読んでいます。
点探索の高速化のために、点群からデプスマップ(深度マップ)に変換するそうです。点群を平面上に写像し、ピクセルごとに深度をもつデプスマップに変換するとのこと。
1回のレーザスキャンで得られた点群の座標は、計測装置を原点とした座標系(x, y, z)で記述される.レーザの照射方向は方位角θと仰角φ によって決まるので、座標は球面座標(θ, φ, r)に変換できます。メルカトル図法によって、球面全体を平面に展開できます。
そっか。後はデブスマップ上で衝突判定をすると。以下の手順です。

ある点P(x, y, z)をデプスマップ上に写像し、P のデプス値がデプスマップのデプス値より小さければ、この点は衝突しないと判定することができる。物体Mとの衝突判定は以下のような手順でできる。ここで、物体Mの面のうち、表側の面上のデプス値をrs,裏側の面上のデプス値をreとする。また、点が投影されるデプスマップ上の位置のデプス値をrEとする。
1. 物体Mの点集合の座標をスキャナ原点の座標系に変換する。
2. 裏側の面上の点pをデプスマップ上に投影する。
① re < rEであれば、点 p は衝突しないと判定する。
② そうでなければ、スキャナ原点と点pを通る直線に関して、物体Mの表側の面との交点を計算する。複数の交点がある場合は、reに最も近い手前の点を取る。このとき、rs < rE < re であれば、この点は衝突する。
3. 物体Mに関して、以下の判定を行う
①すべての裏側の点が衝突しないと判定されれば、物体Mは衝突しないと判定する。
②少なくとも一つの裏側の点が衝突すると判定されれば、物体Mは衝突すると判定する。
③上記のいずれでもない場合は「不明」と判定する。

後は実際に試してみるのみ。

 

 

この記事を書いた人
草場代表
エディター