LoginSignup
7

More than 5 years have passed since last update.

Google Cartographer でSLAMデータを保存する

Last updated at Posted at 2017-08-05

目的

Google CartographerのAssets writer マニュアルを翻訳しました。

原文:googlecartographer assets_writer.rst
Github:cartographer_ros

Google Cartographerでは、SLAMのmapデータ・statusデータをAssets writerで保存します。
Assets writerで保存したデータは、Cartographerでまた呼び出して、状態を復元することができます。

Assets writer

SLAMの目的は、1つのセンサの軌跡を距離空間で計算することです。
より高いレベルでは、SLAMの入力はセンサデータであり、その出力はその時点までの軌道の最尤推定値となります。
リアルタイムで効率的なものにするために、Cartographerはセンサデータの大部分をすぐに送り出します。
軌道だけに興味があることは稀ですが、一度最尤の軌道が確立されると、全てのセンサデータを使用して、その周囲の情報を導き可視化することができます。Cartographerはこの目的で、assets writerを提供します。

以下のものを入力することができます。
 1.ROS bagファイルの中で、SLAMに送り込まれる、元のセンサデータ
 2.cartographerの状態、SLAMが生成する.pbstreamの中に含まれている。
 3.センサー以外(i.e. rosbagからのTFデータやURDFファイル),
 4.パイプラインの設定、.luaファイルで定義されているもの

Assets writerは、センサデータを通して、既知の軌跡をまとめます。
SLAMの点群データの色付け、フィルタリング、およびエクスポートにさまざまな形式で使用できます。
アセットライターの使用方法の詳細については、下記の例とcartographer/ioのヘッダーファイルを参照してください。

Sample usage

# Download the 3D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/b3-2016-04-05-14-14-00.bag

# Launch the 3D offline demo.
roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag

オフラインノードが終了するまで、コマンドラインで出力を監視します。
すべてのデータを処理してすべての最適化を完了した後、Cartographerの状態を表す"b3-2016-04-05-14-14-00.bag.pbstream"が書き込まれます。オンラインノードを実行して呼び出しても、同じ状態データを取得できます。

# Finish the first trajectory. No further data will be accepted on it.
rosservice call /finish_trajectory 0

# Ask Cartographer to serialize its current state.
rosservice call /write_state ${HOME}/Downloads/b3-2016-04-05-14-14-00.bag.pbstream

3Dバックパックのサンプル設定ファイルを使用してAssets writerを実行します。

roslaunch cartographer_ros assets_writer_backpack_3d.launch \
   bag_filenames:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag \
   pose_graph_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag.pbstream

執筆時点では、~/.rosに生成されます。

Configuration

assets writerは、パイプラインとしてモデル化されています。
これは、PointProcessorsPointsBatchsで構成されています。
データは最初のプロセッサから次のプロセッサに流れ、各プロセッサには通過する前にPointsBatchを修正する機会があります。

例えば、assets_writer_backpack_3d.luaは、min_max_range_filterを使用して、センサから離れすぎている、もしくは離れすぎている点を削除します。その後、X-Raysを書き込み、センサフレームIDに応じてPointsBatchの色を付け直し、X-Raysのセットごとに新しい色を使って書き込みます。
個々のPointsProcessorsはすべてcartographer/ioサブディレクトリにあり、個々のヘッダーファイルにドキュメント化されています。

First-person visualization of point clouds

視点を動かして、点群見るためには2ステップの方法があります
まず最初に、可視化したい点を含むPLYファイルを作成し、可視化にはpoint_cloud_viewerを使用します。

最初のステップは通常、IntensityToColorPointsProcessorを使用して点に白以外の色を与え、次にそれらをPlyWritingPointsProcessorを使用してPLYに書き込むことによって成し遂げます。

例として、assets_writer_backpack_2d.luaがあります。

PLYを取得したら、point_cloud_viewerのREADMEに従ってディスク上のoctreeデータ構造を生成します。
その構造は、同じリポジトリ内のビューアの1つが表示することができます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7