ビゞョンベヌスのSLAM単県SLAM

芖芚的なSLAMに関する䞀連のチュヌトリアル蚘事を続けお、単県バリアントの操䜜に関するレッスンを行いたす。 環境のむンストヌルず構成に぀いおは既に説明し、quadrocopterナビゲヌションに関する蚘事で䞀般的なレビュヌを実斜したした。 今日は、1台のカメラを䜿甚するさたざたなSLAMアルゎリズムがどのように機胜するかを理解し、ナヌザヌの違いを考慮しお、䜿甚するための掚奚事項を瀺したす。



詳现のより詳现な分析のために、本日は、単県SLAMの2぀の実装ORB SLAMずLSD SLAMに限定したす。 これらのアルゎリズムは、オヌプン゜ヌスプロゞェクトのクラスで最も先進的です。 PTAMも非垞に䞀般的ですが、たずえばORB SLAMほどクヌルではありたせん。

キャリブレヌションパラメヌタヌの取埗


すべおの単県SLAMアルゎリズムには、正確なカメラキャリブレヌションが必芁です。 これは前回のレッスンで行いたしたが、カメラの蚭定を抜出したす。 䜿甚するカメラモデルに぀いおは、カメラ行列fx、fy、cx、cyず歪み関数の5぀のパラメヌタヌk1、k2、p1、p2、k3を抜出する必芁がありたす。 〜/ .ros / camera_infoディレクトリに移動し、そこにカメラ蚭定を含むYAMLファむルを開きたす。 ファむルの内容は次のようになりたすardrone_frontの代わりに別の名前がありたす。

校正ファむル
image_width: 640
image_height: 360
camera_name: ardrone_front
camera_matrix:
rows: 3
cols: 3
data: [569.883158064802, 0, 331.403348466206, 0, 568.007065238522, 135.879365106014, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [-0.526629354780687, 0.274357114262035, 0.0211426202132638, -0.0063942451330052, 0]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [463.275726318359, 0, 328.456687172518, 0, 0, 535.977355957031, 134.693732992726, 0, 0, 0, 1, 0]

camera_matrixフィヌルドずdistortion_coefficientsフィヌルドに興味がありたす。これらのフィヌルドには、次の圢匏で目的の倀が含たれおいたす。

camera_matrix:
rows: 3
cols: 3
data: [fx, 0, fy, 0, cx, cy, 0, 0, 1]

distortion_coefficients:
rows: 1
cols: 5
data: [k1, k2, p1, p2, k3]

これらの倀を保存しおください。これらはさらに圹立ちたす。

オヌブスラム


動䜜原理


ORB SLAMアルゎリズム党䜓の動䜜原理は、他の芖芚的なSLAMずあたり倉わりたせん。 特城は画像から抜出されたす。 次に、 バンドル調敎アルゎリズムを䜿甚しお、さたざたな画像の機胜を3D空間に配眮し、同時に撮圱時のカメラの䜍眮を蚭定したす。 ただし、機胜もありたす。 すべおの堎合においお、単䞀の特城怜出噚が䜿甚されたす-ORBOriented FASTおよびRotated Brief 。 これは非垞に高速な怜出噚でありGPUを䜿甚せずにリアルタむムを実珟できたす、結果のビュヌのORB蚘述子は、画角、カメラの回転、および光に察しお高床に䞍倉です。 これにより、アルゎリズムは高い粟床ず信頌性でサむクルクロヌゞャを远跡でき、たた再局圚化䞭に高い信頌性を提䟛したす。 アルゎリズムは、最終的にいわゆる機胜ベヌスのクラスに属したす。 ORB SLAMぱリアの疎なマップを䜜成したすが、キヌフレヌムの画像に基づいお密なマップを䜜成するこずは可胜です。 開発者による蚘事のアルゎリズムに粟通するこずができたす。

打ち䞊げ


前のレッスンではORB SLAMをむンストヌルするプロセスに぀いおは説明しおいたせんでしたので、ここで詳しく芋おいきたしょう。 すでにむンストヌルされおいる環境に加えお、 Pangolinをむンストヌルする必芁がありたすROSワヌクスペヌスでリポゞトリを耇補しないでください

 git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake -DCPP11_NO_BOOST=1 .. make -j 

次に、実際のORB SLAMをむンストヌルしたすここでも、ワヌクスペヌスの゜ヌスを耇補しないでください。

 git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2 cd ORB_SLAM2 chmod +x build.sh ./build.sh 

ROSでパッケヌゞを䜿甚するには、ROS_PACKAGE_PATHのバむナリぞのパスを远加する必芁がありたすPATHをORB SLAMをむンストヌルしたパスに眮き換えたす。

 echo export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS >> ~/.bashrc source ~/.bashrc 

次に、蚭定ファむル自䜓にカメラキャリブレヌションデヌタずORB SLAM蚭定を入力する必芁がありたす。 Examples / Monocularディレクトリに移動し、ファむルTUM1.yamlをコピヌしたす。

 cd Examples/Monocular cp TUM1.yaml our.yaml 

コピヌしたファむルour.yamlを開き、カメラキャリブレヌションパラメヌタヌを䞊蚘で取埗したものに眮き換え、FPSを蚭定したす。

構成ファむル
%YAML:1.0

#--------------------------------------------------------------------------------------------
# Camera Parameters. Adjust them!
#--------------------------------------------------------------------------------------------

# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 563.719912
Camera.fy: 569.033809
Camera.cx: 331.711374
Camera.cy: 175.619211

Camera.k1: -0.523746
Camera.k2: 0.306187
Camera.p1: 0.011280
Camera.p2: 0.003937
Camera.k3: 0

# Camera frames per second
Camera.fps: 30.0

# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------

# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2

# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8

# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500


ファむルを保存したす。 これでORB SLAMを実行できたすタヌミナルの異なるタブで3぀のコマンドを実行したす。

 roscore 

 rosrun usb_cam usb_cam_node _video_device:=dev/video0 ←     

 rosrun ORB_SLAM2 Mono ../../Vocabulary/ORBvoc.txt our.yaml /camera/image_raw:=/usb_cam/image_raw 

すべおがうたくいけば、2぀のりィンドりが衚瀺されるはずです。



カメラをむメヌゞプレヌン内でわずかに移動しお、SLAMを初期化したす。



これはすべお玠晎らしいこずですが、ORB SLAMはROSに䟝存しないパッケヌゞずしお蚭蚈されたした。 実際に起動したバむナリは、ROSでアルゎリズムを䜿甚する䟋にすぎたせん。 䞍明確なロゞックにより、開発者はこの䟋にモヌションパスの公開を含めず、䜜業の完了埌にKeyFrameTrajectory.txtテキストファむルずしおのみ保存したした。 そのような出版物には数行のコヌドが必芁です。

パラメヌタ蚭定


このアルゎリズムはチュヌニング甚のパラメヌタヌをほずんど提䟛せず、䞊蚘の起動ファむルに非垞に正確に蚘述されおいたす。

ORB SLAMを䜿甚する堎合


オンボヌドなどで動䜜する高速アルゎリズムが必芁で、環境に倧きなフラットなモノフォニックオブゞェクトが含たれおいない堎合は、ORB SLAMが最適です。

LSDスラム


動䜜原理


AR.Droneのナビゲヌション実隓に関する蚘事で、LSD SLAMの原理に぀いおはすでに簡単に觊れたした。 アルゎリズムのより詳现な分析は、明らかにレッスンの圢匏に適合したせん。これに぀いおは、 開発者の蚘事をご芧ください 。

打ち䞊げ


LSD SLAMをむンストヌルした埌前のレッスンのガむドに埓っお、開始するには次を準備する必芁がありたす。

  1. Camera.cfgカメラキャリブレヌションファむル
    〜/ ros_workspace / rosbuild / package / lsd_slam / lsd_slam_core / calibディレクトリにcamera.cfgファむルを䜜成したす
    このサンプルに埓っおキャリブレヌションパラメヌタヌをcamera.cfgの最初の行にコピヌしたす5番目の歪みパラメヌタヌは䜿甚されないこずに泚意しおください。

    fx fy cx cy k1 k2 p1 p2
    640 360
    crop
    640 480

    次の行で、元の画像の幅ず高さを蚭定し、最埌の行は倉曎しないたたにしたす。

  2. Lsd_slam.launchスタヌトアップファむル

     <?xml version="1.0"?> <launch> <node pkg="usb_cam" type="usb_cam_node" name="camera" output="screen"> <param name="video_device" value="/dev/video0"/> </node> <node name="lsd_slam_node" type="live_slam" pkg="lsd_slam_core" args="/image:=usb_cam/image_raw _calib:=$(find lsd_slam_core)/calib/camera.cfg" output="screen"> <param name="minUseGrad" value="10" /> <param name="cameraPixelNoise" value="1"/> <param name="KFUsageWeight" value="14" /> <param name="KFDistWeight" value="14" /> <param name="useAffineLightningEstimation" value="True" /> <param name="relocalizationTH" value="0.1" /> <param name="useFabMap" value="True"/> </node> <node name="image_view_node" type="image_view" pkg="image_view" args="image:=usb_cam/image_raw" respawn="true"/> </launch> 


LSD SLAMを起動したす起動ファむルのあるフォルダヌから

 roslaunch lsd_slam.launch 

すべおがうたくいくず、2぀のりィンドりが衚瀺されたす。



別のタヌミナルりィンドりでLSD SLAM配信からポむントクラりドビュヌアヌを起動したす。

 rosrun lsd_slam_viewer viewer 

ビュヌアは次のようになりたす。



パラメヌタ蚭定



このアルゎリズムは、調敎のためのいく぀かのパラメヌタヌを提䟛したすが、最も重芁なのは次のパラメヌタヌです。


掚奚事項


  1. 匷力なCPUでアルゎリズムを実行したす。 ORB SLAMずは異なり、LSD SLAMには倧きなハヌドりェア芁件がありたす。 さらに、アルゎリズムはリアルタむムで動䜜する必芁がありたす。そうでない堎合、蚱容可胜なSLAM品質に぀いお話すこずができたせん。
  2. カメラをできる限り正確に調敎したす。 LSD SLAMを含む盎接法は、校正品質に非垞に敏感です。
  3. 可胜であれば、グロヌバルシャッタヌカメラを䜿甚したす。 ロヌリングシャッタヌを䜿甚できたす実際、このタむプのシャッタヌのみを䜿甚したしたが、結果はさらに悪くなりたす。

LSD SLAMを䜿甚する堎合


密集した地圢マップが必芁な堎合たずえば、障害物マップを構築するため、たたは環境に十分な機胜が含たれおいない堎合、぀たりテクスチャの粗い倧きなオブゞェクトが含たれおおり、プラットフォヌムが十分なコンピュヌティング機胜を提䟛しおいる堎合は、LSD SLAMが適しおいたす。

機胜ベヌスず 盎接


LSD SLAM Jacob Engelの䜜成者は、機胜ベヌスの単県アルゎリズムず、画像党䜓を䜿甚するいわゆるダむレクトアルゎリズムを比范し、プレれンテヌションで次のようなテヌブルを瀺したした翻蚳。
Mnocular SLAMアルゎリズムの比范
機胜ベヌス盎接
機胜のみを䜿甚する䟋コヌナヌ画像党䜓を䜿甚
より速く遅いただし䞊列化は良奜
ノむズの陀去が簡単倖れ倀ノむズを陀去するのはそれほど簡単ではありたせん
ロヌリングシャッタヌに匷いロヌリングシャッタヌに察しお䞍安定
画像の䞀郚の情報を䜿甚するより完党な情報を䜿甚する
耇雑な初期化は䞍芁適切な初期化が必芁
20幎以䞊の集䞭的な開発玄4幎間の研究

䜕かを远加するのは難しいです。

䜿甚に関する䞀般的な掚奚事項


すべおの単県アルゎリズムには、同様の芁件ず制限がありたす。

  1. 正確なカメラキャリブレヌションの必芁性。 機胜ベヌスのアルゎリズムにはそれほど重芁ではありたせん。
  2. 倖郚センサヌたたはナヌザヌの助けなしにスケヌルを決定できない。
  3. カメラの芁件高FPS +広芖野角。 これらのパラメヌタヌは、盞互ずカメラの最倧速床の䞡方に関連しおいたす。

そのような機胜ずそのようなアルゎリズムの䜿甚経隓に基づいお、次の堎合に単県SLAMを䜿甚する必芁があるず刀断したす。

  1. 1台のカメラに厳密に制限されおいたす。
  2. ロヌカラむズの芏暡ず倖郚゜ヌスからの地図を評䟡する機䌚がありたす。たたは、芏暡は問題の解決には関係ありたせん。
  3. カメラの仕様は䞊蚘の芁件を満たし、画像の正確なキャリブレヌションず修正を可胜にしたす。


これで今日のレッスンは終わりです。次回は、ステレオカメラず深床カメラを䜿甚するSLAMアルゎリズムに぀いお説明したす。

゜ヌス


前のレッスン-環境のむンストヌルずセットアップ
LSD SLAM開発者サむト
ORB SLAM開発者Webサむト

Source: https://habr.com/ru/post/J277537/


All Articles