BEIKE blog

備忘録です

[Ubuntu18.04]Cartographer ROSを構築し、ros_bagデータからpcdデータに変換しマップを生成する

概要

この記事の題名の通りCartographer ROSを構築し、ros_bagデータからpcdデータに変換しマップを生成するまでの流れを説明していきます。

動作環境&筆者のPCスペック(実際に動かした)

環境

  • Ubuntu18.04.4 LTS(実機)

PCスペック

  • Corei7-8665 QadroP520 メモリ32GB

やり方

細かく説明していきたいと思います。以下説明の流れです。


①Ubuntu18.04にCartographerをインストールする
②ros_bagデータを公式サイトからダウンロードする
③ros_bagデータを分割する
④rosbagデータからpcdファイルに変換する
⑤ダウンサンプリングを行う
pcdファイルを連結させ一つのマップを作る(現在やり方を模索中)
おまけpcdデータを見たり編集したりする

①Ubuntu18.04にCartographerをインストールする

  • cartographer_rosを構築するためにwstoolrosdepビルドを高速化するためにNinjaをインストール
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
~$ mkdir carto_ws && cd carto_ws
~/carto_ws$ wstool init src
~/carto_ws$ wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
~/carto_ws$ wstool update -t src
  • cartographer_rosの依存パッケージをrosdepによりインストール

sudo rosdep initは、ROSをインストールしてからすでに実行している場合はエラーを出力します。このエラーは無視できます。

~/carto_ws$ src/cartographer/scripts/install_proto3.sh
~/carto_ws$ sudo rosdep init
~/carto_ws$ rosdep update
~/carto_ws$ rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
  • ビルドしてインストール
~$ cd ~/carto_ws
~/carto_ws$ catkin_make_isolated --install --use-ninja

②ros_bagデータを公式サイトからダウンロードする

  • wgetを使用してros_bagデータを公式サイトからダウンロード
~$ cd ~/Downloads
~/Downloads$ wget https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-03-01-13-39-41.bag

③ros_bagデータを分割する

ros_bagデータを分割するときUNIX_Timeという基準時間を使用します

(協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数)

  • ros_bagデータを分割する(1ファイル1GB以下を目安に分割しました)

[5/16追記]以前は八分割していましたが、つなぎ合わせるのが大変でした。というのも特徴が少ないもの同士をつなげることになるので、、、。 ということで、2分割にしました。なぜこの時間で切り取っているかというと往復箇所は除いた時間になっています。

~/Downloads$ rosbag filter b3-2016-03-01-13-39-41.bag output_1.bag "t.secs >= 1456839581.97 and t.secs < 1456839725.235"
~/Downloads$ rosbag filter b3-2016-03-01-13-39-41.bag output_2.bag "t.secs >= 1456839868.5 and t.secs < 1456839964.01" 

④rosbagデータからpcdファイルに変換する

  • まず.pbstreamの拡張子が付くファイルを生成
~$ roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/output_1.bag
~$ roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/output_2.bag
  • pcdファイルを生成させるためにassets_writer_backpack_3d.luaを編集
vim /home/ikebe/catro_ws/src/cartographer_ros/cartographer_ros/configuration_files/assets_writer_backpack_3d.lua

以下のように追加(一番下まで行くと、追加場所わかる)

f:id:beike:20200501000544p:plain
assets_writer_backpack_3d.lua

一応ビルド

~$ cd ~/carto_ws && catkin_make_isolated  --use-ninja
  • .bag.pbstreamより.pcdを生成

[5/14追記]roslaunch終了後、赤文字が出てきますが気にしなくて良い

~$ roslaunch cartographer_ros assets_writer_backpack_3d.launch bag_filenames:=${HOME}/Downloads/output_1.bag pose_graph_filename:=${HOME}/Downloads/output_1.bag.pbstream
~$ roslaunch cartographer_ros assets_writer_backpack_3d.launch bag_filenames:=${HOME}/Downloads/output_2.bag pose_graph_filename:=${HOME}/Downloads/output_2.bag.pbstream

⑤ダウンサンプリングを行う

パッケージを自作しました。

コメントアウトを丁寧に入れました。(可読性はあると思う)

github.com

  • パッケージの導入からダウンサンプリング方法まで
~$ mkdir -p ~/pcl_downsampling_ws/src && cd ~/pcl_downsampling_ws/src
~/pcl_downsampling_ws/src$ catkin_init_workspace
~$ cd ~/pcl_downsampling_ws/ && catkin_make
~/pcl_downsampling_ws$ cd src && git clone https://github.com/uhobeike/pcl_downsampling.git
~/pcl_downsampling_ws/src$ cd .. && catkin_make
~$ source devel/setup.bash
~$ roscore

別ターミナルにて

~$ rosrun pcl_downsampling_ws downsampling

そしたらDownloadsディレクトリにファイルが生成されているはず


pcdファイルを連結させ一つのマップを作る

youtu.be


おまけpcdデータを見たり編集したりする

  • snapを使用し、CloudCompareをインストール
~$ snap install cloudcompare
  • CloudCompareを起動
~$ cloudcompare.CloudCompare 
簡単にダウンサンプリング処理をすることが可能です

以下マニュアルサイト

http://topography.csis.u-tokyo.ac.jp/resources/170210_hdts_cc/topography.csis.u-tokyo.ac.jp