ORB-SLAM2から

ORB-SLAMは、スペインのサラゴサ大学のRaulMur-Artalによって作成されたビジュアルSLAMシステムです。彼の論文「ORB-SLAM:多用途で正確な単眼SLAMシステム」は、2015年にIEEETrans。onRoboticsに掲載されました。オープンソースコードには、初期段階のORB-SLAMと後期段階のORB-SLAM2が含まれています。最初のバージョンは主に単眼SLAMに使用され、2番目のバージョンは単眼、双眼、およびRGBDインターフェイスをサポートします。

特徴

ORB-SLAMは、視覚的オドメトリ、追跡、ループ検出を含む完全なSLAMシステムです。これは、完全にスパースな特徴点に基づく単眼SLAMシステムであり、そのコアは、ビジュアルSLAM全体のコア機能としてORB(Orinted FAST and Brief)を使用することです。それはいくつかの側面で具体化されます:

  • 抽出および追跡された特徴点はORBを使用します。ORBフィーチャの抽出プロセスは非常に高速で、リアルタイムシステムに適しています。
  • ループバック検出はbag-of-wordsモデルを使用し、その辞書は大きなORB辞書です。
  • インターフェースは豊富で、単眼、双眼、およびRGBDセンサー入力をサポートし、ROSはコンパイル時にオプションであるため、アプリケーションは非常にポータブルになります。価格はさまざまなインターフェイスをサポートすることであり、コードロジックは少し複雑です。
  • リアルタイム計算は、PC上で30ms /フレームの速度で実行されますが、組み込みプラットフォームではパフォーマンスが低下します。

原理

ORB-SLAMの全体的なプロセスを次の図に示します。

これは主に、トラッキング、ローカルマッピング(スモールマップとも呼ばれます)、ループクロージング(ラージマップとも呼ばれます)の3つのスレッドで構成されています。

追跡

追跡スレッドは視覚走行距離計と同等であり、プロセスは次のとおりです。

  • まず、元の画像からORB特徴を抽出し、記述子を計算します。
  • 機能の説明によると、画像間の機能マッチング。
  • 一致する特徴点に基づいてカメラの動きを推定します。
  • キーフレーム基準に従って、現在のフレームがキーフレームであるかどうかが判断されます。

フレーム間モーションのサイズを使用してキーフレームを取得するほとんどのビジュアルSLAMと比較すると、ORB_SLAMのキーフレーム識別基準はより複雑です。

1実験の目的

(1)ORB-SLAM環境を構成し、実際の環境で実行します。
(2)プロジェクト実装のプロセスとフレームワークを理解します。
(3)UbuntuおよびROSシステムでの開発に精通します。

2実験環境

2.1ハードウェア

(1)次の構成のHPラップトップ:
プロセッサー:Intel®Core™i5-7300HQ CPU @ 2.50GHz×4
メモリ:8 GB
(2)センサーはLogitech C170 Webサイトであり、パラメーターは次のとおりです。
ピクセル:130万;キャプチャフォーマット:1024 * 768;インターフェース:USB 2.0

2.2ソフトウェア

(1)オペレーティングシステム:Ubuntu 14.04
(2)ソフトウェアプラットフォーム:ROSインディゴ

3実験ステップ

3.1最初に必要な依存関係をインストールします

(1)aptライブラリを更新し、ソフトウェアリストを更新します

$ sudo apt-get update

(2)Githubからローカルにプロジェクトのクローンを作成するために使用されるgitをインストールします

$ sudo apt-get install git

(3)プログラムコンパイル用にcmakeをインストールします

$ sudo apt-get install cmake

(4)視覚化およびユーザーインターフェイスとしてPangolinをインストールします
a。依存関係をインストールします

$ sudo apt-get install libglew-dev libpython2.7-dev

b。プロジェクトをGithubからローカルにダウンロードします

$ git clone https://github.com/stevenlovegrove/Pangolin.git

c。コンパイルしてインストールします

$ cd Pangolin
$ mkdir build
$ cd build
$ cmake ..
$ make –j
$ sudo make install

(5)OpenCVをインストールして、画像と機能を処理します。
最低限必要なバージョンは2.4.3であり、OpenCV2.4.11およびOpenCV3.2でテストされています。
注:ここでのバージョンの問題は非常に重要です。バージョン番号が異なると互換性がなくなり、さまざまなエラーが発生する可能性があります。再コンパイルのみが可能です。経験の浅い開発者の場合、エラーの検索と問題の解決に多くの時間を費やします。
今回の実験では、初めてOpenCV 3.2を使用しましたが、最後にエラーが発生し、OpenCV2.4.11に切り替えて成功しました。
a。依存関係をインストールする
[コンパイラ]

sudo apt-get install build-essential

[必須]

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

[オプション]

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

b。OpenCV公式Webサイト(http://opencv.org)からOpenCV 2.4.11のソースバージョンをダウンロードし、ローカルに解凍し
ます。c。コンパイルしてインストールします。

$ cd ~/opencv
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release –D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make –j8
$ sudo make install

コンパイルプロセスには時間がかかります。CPUパフォーマンスの低いコンピューターは使用しないことをお勧めしますmake -j。これはフリーズしやすく、CPUパフォーマンスの高いコンピューターを使用できますmake -jx。xはスレッドを表し、コンパイルを高速化できます。
(6)行列演算を実行できるオープンソースの線形ライブラリであるEigen3をインストールします

$ sudo apt-get install libeigen3-dev

(7)DBoW2とg2oのインストールDBoW2
は、DBowライブラリの改良版です。DBowライブラリは、画像にインデックスを付けて単語表現に変換するためのオープンソースのC ++ライブラリです。
g2oは、グラフベースの非線形誤差関数を最適化するためのオープンソースのC ++フレームワークです。
これらの2つのライブラリは、ORB-SLAM2プロジェクトのサードパーティフォルダにあります。ここでは個別にコンパイルされませんが、統一された方法でコンパイルされます。
(8)ORB-SLAM2をインストールします。a
。ウェアハウスのクローンを作成します。

$ git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

b。サードパーティライブラリでORB-SLAM2、DBoW2、およびg2oをコンパイルし、ORBディクショナリを解凍します。

$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh

3.2単眼の例

TUM、KITTI、EuRoCの3つのデータセットがあります。この実験では、TUMデータセットを使用します。http://vision.in.tum.de/data/datasets/rgbd-dataset/downloadからシーケンスをダウンロードし、解凍します。

$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER

その中にPATH_TO_SEQUENCE_FOLDERは、tumx.yamlデータセットのストレージパスがあり、ダウンロードされたデータセットに対応します。たとえば、TUM1.yaml、TUM2.yaml、TUM3.yamlは、それぞれfreiburg1、freiburg2、freiburg3に対応します。
ランニングエフェクトの図を以下に示します。図の左側のウィンドウにある小さな青い四角は、抽出された画像のORBフィーチャであり、右側のウィンドウは、環境のまばらなマップとカメラの移動トラックを示しています。

オープンデータセットは、データ不足を補うために大量のデータを提供できます。RGB-Dカメラがない場合でも、オープンデータセットのデータを使用して実験することができます。もちろん、必要に応じてうまくいくには、科学的な研究をしているのかエンジニアリングをしているのかにかかわらず、最初にツールを研ぎ澄ます必要があります。ハードウェア機器が必要です。さらに、公開データセットをアルゴリズムのパフォーマンス比較の評価基準として使用することもできます。

3.3ROSの例

ORB-SLAM2をオンラインでリアルタイムに実行するには、ROSが必要です。ROSのインストールに関しては、公式Webサイト(http://wiki.ros.org/indigo/Installation/Ubuntu)に詳細なインストールチュートリアルがあるので、ここでは繰り返しません。
この実験は、以前のブログカメラ画像情報の読み取りと表示」に基づいて開発され、カメラデータの読み取りと表示を実現します。収集された画像データは、ORB-SLAM2システムの入力として使用できます。
前のブログでは、ワークスペースcatkin_ws作成し、ORB-SLAM2プロジェクトをそのサブフォルダーに移動しましたsrc
(1)含まれているExamples/ROS/ORB_SLAM2パスをROS_PACKAGE_PATH環境変数に追加します。.bashrcファイルを開き、最後に次の行を追加します。

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

ここで、PATHはORB-SLAM2プロジェクトが配置されているパスであり、私のパスは/home/wb/catkin_ws/srcです。さらに、./bashrcファイル書き込みます

source /home/wb/catkin_ws/devel/setup.sh

最後に、ターミナルでコマンドを実行します

source ./bashrc

(2)は、ROSの下でコンパイルORB-SLAM2。
ORB-SLAMのデフォルトのサブスクリプションのトピックがあり/camera/image_raw、かつusb_camノードによって公開され話題である/usb_cam/image_rawあなたが必要とするので、ros_mono.ccその中のサブスクリプションのトピックを変更する。この時点に特別な注意を払ってください。ソースファイルの変更を再コンパイルする必要があるため、非常に時間がかかります。

$ chmod +x build_ros.sh
$ ./build_ros.sh

(3)
単眼ノードを実行する単眼ノードを実行する前に、まずカメラをコンピューターに接続してから、usb_camノードを起動します。

$ roslaunch usb_cam usb_cam-test.launc
$ rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE

4実験結果

単眼ノードを開始した後、最初に初期化する必要があります。ORB特徴点が画像から抽出されるまで、カメラは左右にシフトされます。次に、ハンドヘルドカメラが実験室の空間を移動します。ORB-SLAM2システムは、入力画像から毎秒30フレームの速度でORBの特徴を抽出します。一連の計算の後、カメラの移動軌跡と周囲の環境のまばらなマップは次のようになります。最終的に出力します。
注意

  1. スムーズに初期化できるようにするには、テクスチャが豊富なシーンを選択し、カメラをある程度シフトする必要があります。
  2. 速く移動することはできません。一定の速度で移動し続け、現在のフレームと前のフレームを十分な数の一致する特徴点で維持することをお勧めします。そうしないと、追跡が失敗します。
  3. トラッキングが失敗した後は、前のシーンに戻って再配置を実行する必要があります。
  4. コンピューターのパフォーマンスが低すぎないようにし、バッテリーを完全に充電したままにしてください。

カメラを手に持って、実験室のワークステーションをしばらく動かしたところ、最終結果を以下に示します。

図の左側のウィンドウにある小さな緑色の四角は抽出された画像ORBの特徴であり、右側のウィンドウにある緑色の線はカメラの移動軌跡を表し、青い四角は移動中の空間位置(キーフレーム)を表します。カメラ、および黒い点そして赤い点は環境のまばらな地図を表します(黒は歴史的な道路標識を表し、赤は現在の道路標識を表します)。

5まとめ

この時点で、このようなオープンソースプロジェクトをコンパイルして実行できます。さまざまなエラーレポートを経験しましたが、LinuxシステムとROSシステム、cmake、シェル、OpenCVなどの操作に精通しています。自分で開発するには、もっと徹底的な研究が必要です。
初心者として、オープンソースプロジェクトから始めて、その理論とエンジニアリングの実装を学ぶことは、始めるための近道であり、それに基づいて特定の改善を行います。
ただし、エンジニアリングの実装は科学研究の一部にすぎません。大学院生として、SLAMの小さな問題を把握し、既存のアルゴリズムを改善または比較できるかどうかを確認することがより重要です。したがって、私たちはまだ論文から始めて、インスピレーションを見つけ、それを実現し、効果を検証する必要があります。
まだ長い道のりがあり、科学研究の道は始まったばかりです。

おすすめ

転載: blog.csdn.net/u010451780/article/details/111309461