ROS:RTABMAPによる同時マッピングと位置決め


視覚センサを搭載したロボットは、その周辺の地図を作成することができます.カメラ画像、ポイント雲、レーザースキャンを組み合わせて、抽象的な地図を作成することができます.次に、このマップは、ロボットをローカライズするために使用することができます.同時に両方の局面を結合することは、スラム-同時位置とマッピングと呼ばれています.これは非常に大胆な目標は自律的なナビゲーションのための前提条件です:現在の位置を開始すると、その周囲の目標をロボットに与え、ロボットは着実に目標位置に向かって移動します.基本的なレベルでは、先の方法を計画し、障害物を認識し、その周りの方法を推定する必要があります.高度なレベルでは、積極的にその環境をスキャンし、ライブの新しい障害を検出する必要があります.
ロボットオペレーティングシステムは、スラムを容易にするために、いくつかのツールを提供します.この記事ではrtabmapを調べます.SLAMのアプローチと必要なハードウェアの簡単な要約に従って、我々はマッピングモードでRTABMAPを開始し、チューニングに右に飛び込む.あなたは同様に起動ファイルのパラメータとチューニングのヒントを学びます.記録された地図で、我々はロボットをローカライズするためにrtabmapまたはrvizのどちらかを始めることができます.もう一度、起動するファイルとパラメータを使用します.この記事の後にあなたのロボットとのマッピングとローカライズにしっかりとグリップを与える必要があります.
この記事の技術的な文脈は、Ubuntuサーバ20.04、ROSノイック1.15.11、およびハードウェアとしてラズベリーパイ3または4です.すべての命令は新しいOSやライブラリのバージョンでも動作するはずです.
この記事はもともと私のブログに登場admantium.com .

背景:スラムへのアプローチ


ROSはナビゲーションのためのいくつかのアプローチとパッケージを提供しますearlier article . この理論的調査に続いて、2つの重要な要件を選択してみましょう.最初に、SLAMアルゴリズムはよく実行する必要があります.第二に、ライブラリを積極的に維持する必要がありますし、選択されたアルゴリズムとROS 2をサポートする必要があります.最後に、センサーはライブラリによってサポートされる必要があります、構成とセットアップが簡単でなければならなくて、良い価格パフォーマンス距離を持ちます.
二つの最良のSLAMアルゴリズムはRTAB MAPとORBである.これでcomparative analysis , RTABマップは、勝者、およびthis paper , ORBはステレオカメラやRGBDで使用するときに良いナビゲーションと走行距離機能をサポートしています.以降orb_slam2 パッケージはROS 1ディストリビューションの旋律にのみサポートされています.rtabmap_ros が使用されます.
他のロボットプロジェクトの研究の後、私はセンサーに関する以下の洞察を得ました
  • 古典Kinect 1 または、新しいKinect 2カメラは、ROSプロジェクトで良い地位で手頃なカメラです.たくさんの例が存在する.ダウンサイドでは、互換性の問題があるようだ1 , 最近のrosディストリビューションではセットアップが難しい2 , そして、モバイルロボットを使用するとき、独占的なコネクタはUSBと12 Vの入力電圧に接続される必要があります.
  • The RealSense Sensors 現在のROSとROS 2分布でよくサポートされている3 , また、ネイティブSDKも最新とすべての現在のプラットフォームで利用可能です4 . しかし.この装置の画質は、Kinect5 , そして、彼らはより高価です.
  • 最後に、手頃な価格でRP Lidar A1M8 また、いくつかのプロジェクトで使用すると簡単にセットアップ6 . ライダは障害物検出のための技術の基礎であり、それは周囲のイメージを得るために使用することはできません.また、ライダベースのナビゲーション屋内で問題になることができます7 .
  • 私のロボットプロジェクトで効果的であるために、私は構成とセットアップでより少ない時間を過ごしたいです、しかし、SLAMを使って半自動ナビゲーションを成し遂げるためにセンサーを使用して、調整することでより多くの時間.RealSenseカメラはこれらの基準を満たします、そして、そのドライバーは非常に最近です.だから、私はRealSense D435 sensor .

    rtabmapのインストール


    まず最初に、必要なrtabmapパッケージをこのコマンドでインストールします.
    sudo apt-get install ros-noetic-rtabmap-ros ros-noetic-rtabmap
    
    今、我々は続けることができます.

    RTABマッピングモード


    GUIの起動


    マッピングは、あなたの環境の地図を作成するアクティブなプロセスです.マッピングモードでrtabmapを起動するには、次のコマンドを使用します.
    roslaunch rtabmap_ros $LAUNCH_FILE \
      rtabmap_args:="--delete_db_on_start" \
      rtabmapviz:=true \
    
    この既定のコマンドはRTABMAP GUIアプリケーションを起動し、マップが生成されるトピックの設定済みの設定を開始します.パラメータ$LAUNCH_FILE rtabmaps起動ファイルのいずれかを指定できますrtabmap.launch それは特にうまく動作しますが、あなたのセットアップに依存するので、また、試すことができますrgbd.launch or stereo_mapping.launch . これらの起動ファイルの各々は、存在する非常に特定の話題を仮定します.あなたの必要性は、トピックをカメラによって提供されるそれらをマップする.ここで3 Dポイントクラウドでの作業時の起動ファイルです.
    roslaunch rtabmap_ros rtabmap.launch \
      depth_topic:=/camera/depth/image_rect_raw/ \
      rgb_topic:=/camera/color/image_raw \     
      camera_info_topic:=/camera/color/camera_info \
      rtabmapviz:=true \
      localization:=true
    
    GUIが起動し、次のようになります.

    パラメータチューニング


    マッピングは、100以上のパラメータではなく、お好みのカメラセンサーに使用されるパラメータを言及するように制御されます.正直、その圧倒的な.これは、語彙や概念をキャッチする論文を勉強する必要があるようです.
    私のアプローチは、デフォルトの設定ファイルで起動し、それをロードし、アプリケーションを実行し、パラメータを変更して、もう一度アプリケーションをチェックすることです.数回繰り返し、結果を毎回テストし、良いパフォーマンスをもたらした.詳細な手順
  • RTABMAPを起動し、開始ログ文をチェックしてください.ローカルの設定ファイルがどのディレクトリに保存されますか~/.ros/rtabmap_gui.ini
  • 推奨設定ファイルのいずれかを取得します.Raspberry Pi or Generic
  • 読み込むtuning tips , そして、それらをステップマップで設定するTool/Preferences
  • 私は、このアプローチがあなたを助けることを望みます.さらに、次の起動パラメータを試してください.
    roslaunch rtabmap_ros rtabmap.launch \
      rtabmap_args:="--delete_db_on_start  --Vis/MaxFeatures 500 --Mem/ImagePreDecimation 2 --Mem/ImagePostDecimation 2 --Kp/DetectorStrategy 6 --OdomF2M/MaxSize 1000 --Odom/ImageDecimation 2" \
      approx_sync:=true \
      queue_size:=30 \ 
      compressed_rate:=1 \ 
      noise_filter_radius:=0.05  \
      noise_filter_min_neighbors:=2 
    
    ここでは私のデスクトップのrtabmapとrvizを使用してライブマッピング私のアパートのマッピングです.

    RTAB局在モード


    ローカライズは、格納されているマップを使用して、現在のセンサーデータにアクセスして、地図上の場所を定義しようとすると、ロボットが位置しています.
    ローカライズモードはこのコマンドで起動します.
    roslaunch rtabmap_ros rtabmap.launc\
     localization:=true \ 
     rtabmapviz:=true \
     rviz:=true
    
    また、このコマンドはツールRVIZを始めます、そして、rtabmapによって提供されるそれらに対するパネルと話題購読の予め設定されたセット/rtabmap/cloud_map , 格納されているマップの3 Dポイントクラウド、または/rtabmap/grid_map , ナビゲーションのための効果的な周囲の2 Dフラットマップ.

    地図データの表示


    マップデータを表示するには、2つのオプションがあります.
    マッピングモードでRTABMAPを実行するときは、rvizを開き、mapcloudパネルを追加できます.次に、正しいリスニングのトピックを設定する/rtabmap/mapData , チェックボックスをアクティブにするdownlod map . 次のようになります.

    番目のオプションは、スタンドアロンツールに記録されたマップをロードすることですrtabmap-databaseViewer . 同じ名前コマンドを実行し、マップファイルを開きます.すぐ後にEdit , View 3DMap , そして次の2つの対話で4.0 and 8.0 . 次のようにして地図を見ることができます.

    結論


    ROSパッケージRTABMAPは、同時マッピングとローカライズを実現するオールインワンソリューションです.あなたのスタートは、広範囲に設定可能な起動ファイルを通してマッピングまたはローカライズモードでRTABMAPを開始します.あなたがすぐに始めるのを助けるために、この記事は、起動コマンドとパラメータを詳述しました.また、使用方法を最適化するために、Rtabmapのパラメータを調整する方法を学びました.一度マップを持っている場合は、どちらかのスタンドアロンRtabMapバイナリでそれを読み込むことができるか、ローカライズモードでRTabMap ROSのノードを起動することができます:新しいトピックは、RVIZは聞くことができるように表示されますし、その周辺のグリッドマップやポイントのデータを表示します.

    ソース


    ROS Rtabmapの複雑さを理解することはできませんでしたが、
  • Localization and Navigation using RTABmap
  • Turtlebot2 rtabmap tutorial
  • RTABmap project homepage
  • RTABmap forum

  • RTABmap Github Project and Issues
  • 脚注


    例えば、Kinectに関する質問をするときofficial ROS forum , 最近の回答を見つけるのは難しい.畝
    すばらしい記事でROS on Raspberry Pi 4 with Kinect , 長く、挑戦的な“設定とコンパイル”の旅の詳細を見つけることができます.著者は完全に構成されたラズベリーパイ4画像を公開することを決めた、あなたが耐えてきた多くの手間を節約.畝
    参照official Github repo
    The librealsense Linux、OSX、およびWindows上で動作します.畝
    これで、KinectとRealsense
    例えば、Raspberry Pi 4 project .畝
    LIDARベースの障害物の検出が失敗したところを見てください