メインコンテンツ

3D シミュレーションでの UAV ナビゲーション向けステレオ Visual SLAM

"Visual SLAM" とは、環境地図作成を行うのと同時に、周囲に対するカメラの位置と向きを計算する処理のことです。Visual SLAM アルゴリズムを開発し、さまざまな条件でそのパフォーマンスを評価することは、困難な課題です。最大の課題の 1 つは、特に屋外環境で、カメラ センサーのグラウンド トゥルースを生成することです。シミュレーションを使用することで、さまざまなシナリオやカメラ構成でテストを行って、正確なグラウンド トゥルースを得ることができます。

この例では、Unreal Engine® シミュレーションを使用して、ステレオ カメラを搭載した UAV の市街地シナリオにおける Visual SLAM アルゴリズムを開発する方法を示します。

シミュレーション環境の設定

まず、Visual SLAM アルゴリズムのテストに使用できるシミュレーション環境でシナリオを設定します。典型的な市街地を描いたシーンをテスト対象ビークルの UAV とともに使用します。

次に、UAV がシーン内でたどる軌道を選択します。Unreal Engine シミュレーションのウェイポイントの選択 (Automated Driving Toolbox)の例に従って、一連のウェイポイントを対話形式で選択した後、関数 helperSelectSceneWaypoints を使用して UAV の基準軌跡を生成できます。この例では、以下に示すように、記録済みの基準軌跡を使用します。

% Load reference path
data        = load("uavStereoSLAMData.mat");

pos         = data.pos;          % Position
orientEuler = data.orientEuler;  % Orientation

Simulation 3D Scene Configuration (UAV Toolbox)ブロックを使用して、米国の市街地シーンを組み込んだ UAVVisualSLAMIn3DSimulation Simulink® モデルが構成されます。モデルは、Simulation 3D UAV Vehicle (UAV Toolbox)ブロックを使用して UAV をシーンに配置します。2 つのSimulation 3D Camera (UAV Toolbox)ブロックで構成されるステレオ カメラが UAV に接続されます。Simulation 3D Camera (UAV Toolbox)ブロックのダイアログ ボックスで、[取り付け] タブを使用してカメラの位置を調整します。[パラメーター] タブを使用して、さまざまなカメラをシミュレートするようにカメラのプロパティを構成します。シミュレートするステレオ カメラの内部パラメーターを推定するには、ステレオ カメラ キャリブレーター アプリの使用アプリを使用します。

% Stereo camera parameters
focalLength    = [1109, 1109]; % In pixels
principalPoint = [640, 360];   % In pixels [x, y]
imageSize      = [720, 1280];  % In pixels [mrows, ncols]
baseline       = 0.5;          % In meters

% Open the model
modelName = 'UAVVisualSLAMIn3DSimulation';
open_system(modelName);

Figure Video Viewer contains an axes object and other objects of type uiflowcontainer, uimenu, uitoolbar. The hidden axes object contains an object of type image.

Warning: Unrecognized function or variable 'CloneDetectionUI.internal.CloneDetectionPerspective.register'.

vSLAMModelUAV.PNG

ステレオ Visual SLAM シミュレーションの実行

Helper Stereo Visual SLAM System ブロックは、stereovslamクラスを使用してステレオ Visual SLAM パイプラインを実装するものです。モデルをシミュレートし、結果を可視化します。

% Set the random seed to get consistent results
rng(0);

% Run simulation
sim(modelName);

cameraTrajectorySLAM.png

stereoImageUAV.png

モデルを閉じます。

close_system(modelName);

参考文献

[1] Mur-Artal, Raul, and Juan D. Tardós. "ORB-SLAM2: An open-source SLAM system for monocular, stereo, and RGB-D cameras." IEEE Transactions on Robotics 33, no. 5 (2017): 1255-1262.