SLAM2の結果を配信できるようになりました。18.04にorb_slam2_rosをインストール結果をPythonプログラムで受け取り、matplotlibを使用して表示してみます。matplotlibで3Dデータを可視化(散布図プロットと3次元座標での指定)今回はdebug_imageで配信されるものと同等の内容が表示できるところまで試してみます。orb_slam2_rosによる車載カメラ動画の解析パッケージの作成こちらで作成したパッケージにプログラムを追加しました。配信されているオリジナル画像をmatplotlibで表示してみます。今回、動画は「/videofile/image_raw」トピックで配信されているので、これを監視して表示します。こちらを参考にQtで表示してみます。slam_basic1.py動画が表示できました。matplotlibこの画像に検出した座標データを上書きする必要があります。自分で計算するのは面倒なので、matplotlibの背景に画像を指定して表示する方法を調べました。PyQt5にmatplotlibを埋め込んでグラフを表示するmatplotlibでの表示に変更します。処理が追いつかないので適当に間引いて表示しています。ここらへんは今後の課題です。slam_basic1.pyセンサーデータのプロットここまで作って気がついたのですが、どうもデバッグ画面で表示されるマーカーの情報はトピックに流れていない模様。z座標のポイントデータが配信されています。これを可視化してみようと思います。空のデータが設定されている模様。ポイント数が多いので、1回だけプロットしています。PointCloud2のデータ変換はこちらのソースが参考になりました。listener()プロット結果はこちら。何だろう?別の動画ファイルでも解析してみます。#3よくわからんですな。付属のサンプルプログラムを見て、出直します。orb_slam2_rosによる車載カメラ動画の解析やっと道具が揃いました。デバッグ画像を表示してみます。orb_slam2_r200_mono.launchorb_slam2の起動ファイルを編集し、動画が配信されているトピックをチェックするよう修正します。</node></launch>起動テスト・コンソール1orb_slam2を起動します。video_stream_opencvで動画(mp4)ファイルを再生する・コンソール3画像ビューワーを起動します。rqt_image_viewちゃんと解析されているじゃないですか。次はPythonで解析結果を処理する方法を調べてみます。video_stream_opencvで動画(mp4)ファイルを再生するROSでは、USBカメラの画像を処理するサンプルがよくありますが、テストを行う時は動画ファイルの再生結果を入力としたい場合がよくあります。ROSをインストールこちらでは、rosbagでログデータを再生していますが、できれば撮影した動画ファイルをそのまま使用したい。video_stream_opencvこのパッケージを使えば簡単に実現できそうです。http://wiki.ros.org/video_stream_opencvaptでインストール。ros-melodic-video-stream-opencv起動は、launchファイルを記載しないと行けない模様。catkinワークスペースに「video_file.launch」というファイルを作成します。内容は以下のようになりました。video_stream_providerに再生したいmp4ファイルを絶対パスで指定します。</include></launch>再生するファイルは、ニコニ・コモンズの車載カメラ動画http://commons.nicovideo.jp/search/tag/%E8%BB%8A%E8%BC%89%E5%8B%95%E7%94%BBこちらをお借りしています。起点~終点まで走行launchファイルが準備できたら実行。video_file.launchrqt_image_viewで内容確認。rqt_image_viewちゃんと再生されました。SLAM2をインストールしました。ROSをインストール次は解析結果を扱うプログラムを。思ったのですが、C++でプログラムを書くのがめんどくさい。何か良い用法はないか調べてみると、「orb_slam2_ros」というパッケージを見つけました。http://wiki.ros.org/orb_slam2_rosざっと見た感じ、このノードを起動して画像を送りつけると解析結果をPublishしてくれる模様。これなら、解析結果を受け取るノードがPythonで記載できそうです。18.04にインストールして見ます。インストールこちらを参考にインストールを行いました。https://github.com/appliedAI-Initiative/orb_slam_2_rosC++やOpenCVはこちらの手順デーインストール済です。3.4.1をインストール(install-opencv.sh)Eigen3をインストール。libeigen3-dev続いてorb_slam2_rosをダウンロードし、ビルドします。catkinワークスペースのsrcディレクトリに移動。※ワークスペースのパスは以下のコマンドで確認できます。$ROS_PACKAGE_PATH私の場合、ホームディレクトリのcatkin_ws/srcです。~catkin_ws/srcソースを取得して、catkin_wsに移動。catkin_makeを実行します。ROSをインストールこの時の苦労はなんだったんだというぐらい、あっさりインストールできました。単眼カメラ用のノードを起動します。orb_slam2_r200_mono.launchどんなトピックが作成されたか確認してみます。subscriber/camera/rgb/image_rawに画像データを送れば、/orb_slam2_r200_mono/debug_imageで結果が確認できそう。ROSをインストールこちらのサンプルをそのまま使用します。/image_raw:=/camera/rgb/image_rawビューワーで結果を表示。rqt_image_view動いてくれました。2の機能が使えて便利です。18.04にインストールしてみます。前提条件として、ROSやOpenCV3はインストール済です。一応以下のライブラリのインストールコマンドを実行しておきました。libpng-devPangolinのインストール依存しているPangolinをインストールします。memory」エラーが発生したので、スレッド数を明示しています。通常は「-j」オプションのみでOKだと思います。memory」ORB_SLAM2ソースを取得してビルドすると以下のエラーが発生します。scope調べてみると、unistd.hのincludeが不足しているとのこと。requestしている方がいましたので、こちらをソースを使用してビルドすることにします。build.sh※仮想環境の場合の例外ここでbuild.shを編集。-j4」と変更しておきました。変更が終わったらビルドを実行。./build.sh続いてROSノードをビルドします。ROS_PACKAGE_PATHに「ORB_SLAM2/Examples/ROS」のパスを追加。build_ros.shに実行権限を付与して実行します。./build_ros.shここでエラー。update'依存している「tf」が不足しているとのこと。こちらが参考になりました。https://github.com/raulmur/ORB_SLAM2/issues/386tfを追加しビルド。<unistd.h>を追記して再度ビルドすると通ってくれました。動作確認テストデータをダウンロードし解凍します。dev/ORB_SLAM2/Examples/Monocular/TUM1.yaml※エラーになる場合、ORB_SLAM2/Examples/ROSにパスを通してから実行します。ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/baranche/dev/ORB_SLAM2/Examples/ROSやっと動いてくれました。【参考URL】https://github.com/raulmur/ORB_SLAM2ROSのORB_SLAM2を動かしてみた。次のページプロフィールAuthor:symfoblog形式だと探しにくいので、まとめサイト作成中です。