Velodyne LiDAR VLP-16 with Unreal Engine4 (UE4)

今回は,Unreal EngineでLiDARのデータをリアルタイムで可視化するコードを書いたので,その備忘録(速報)

velodyne_window.PNG
UE4おなじみの椅子と,LiDARデータが描画されている.画像では16FPSとなっているが,これはスクリーンキャプチャしたため.

 


目的:

ROS環境にあるRVizのようなものをゲームエンジンで置き換えたい.

作戦1としてまずはVelodyneデータをそのままUDPで受け取り描画してみる.

作戦2ではROSBridgeを使ってROSのトピックを任意に表示できるようにする予定.

結果:動画のようにそれなりのフレームレート(40-50 FPS)で全データ*の大半をリアルタイムで描画できた.

*全データの大半というのは,受け取ったデータ全てを描画すると遅延が大きいので,一部間引いたため.

環境:

  • Unreal Engine4.19
  • Windows 10
  • ZBOX EN1070 (CPUをi7に置換済み)
  • Velodyne VLP-16

方法:

大まかな流れは以下の通り.

 

velodyne_blueprint.PNG
処理の流れ

 

  1. せっかく色々とプラグインがあるので,UDP受信は「Simple UDP TCP Socket Client(有料)」を使う.遅延も小さくよくできたプラグインながら,「255.255.255.255」を指定できないので,VeloView経由.(後述)
  2. C++アクタを作成し,BluePrint上でUDP初期化,イベント処理を配置する.UDP受信イベントからは,VLP-16のデータのうちヘッダを除く1206バイト分のデータが出てくるので,それを処理する関数(Velodyne Process)をC++で書く.
  3. バイト列がx,y,zの配列と,反射強度の配列に格納されるので,それを描画する.

という流れ.

現状,超とりあえず実装なので,もう少し高速化など綺麗に書いたら公開する予定です.


感想:

Unreal Engine (UE4) やUnityはゲームエンジンではあるものの,C++やC#で独自のコードを追加できるなど,その拡張性からデータの可視化などに活用されている.

ただ,元々が3DCGゲームエンジンなので,あまりデータの可視化に向かない部分も多いので,工夫が必要.一方で,OpenMPなどでやるfor文の並列化などがParallelForといった関数で用意されているなど,フレームレート維持のための枠組みも調べると存在する.ただドキュメントの整備状況が...

いろんなプラグインが公開されているが,UEにあって,Unityに無い,あるいはその逆もあるのがもどかしい.今回のVelodyneなどLiDAR可視化はググってもなかった(Kinectはいっぱいある)ので,作ってみた.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s