MATLAB で SLAM ワークフローを構築して展開しよう!
SLAM の基本と、それがロボットや自律システムでどんな役割を果たしているかを一緒に見てみましょう!その道の専門家の Jose Avendano Arbelaez が書いたブログ記事では、SLAM 技術とその MATLAB での使い方をサクッと紹介しています。詳細は 11 月 8 日に開催されたウェビナー「Build and Deploy SLAM Workflows with MATLAB」もご覧ください。
※この投稿は 2024 年 10 月 31 日に Autonomous Systems へ 投稿されたものの抄訳です。本文中に出てくるライブウェビナー「Build and Deploy SLAM Workflows with MATLAB」は終了しています。リンクはアーカイブページのものに差し替えています。(アプリケーションエンジニアリング部 草野)
最速でわかる SLAM 入門
読み進められているということは SLAM(同時位置特定と地図作成)について興味がありますね?これはロボットや自律システムで急成長中の技術です。ドローンやロボット、車が初めての場所を移動する時、環境の地図を作りながら自分の位置を特定する能力が必要です。そこで SLAM が活躍します。ロボット工学、自動運転、さらには空中測量など、SLAMの応用はたくさんあります。そして、MATLAB がこの技術を実装するための強力な機能を備えている今、SLAM を初めて学ぶ方への最速の入門記事を書くのに良いタイミングだと思いました。SLAM の実装に興味がある方への復習にもぴったりです。11月8日には「Build and Deploy SLAM Workflows with MATLAB」ウェビナーも開催しますので、ぜひご参加ください😊
SLAM とは何か、そしてなぜ重要なのか?
SLAM は、ロボットや車両が周囲の正確な地図を作成しながら、その地図上で自分の位置を特定することを可能にします。この2つの能力は、安全なナビゲーション、経路計画、動的な環境での障害物回避において非常に重要です。SLAM アルゴリズムは通常、使用するセンサーの種類によって以下のように分類できます。
- LiDAR SLAM– LiDAR (Light Detection and Ranging) を使用して距離を測ります。
- Visual SLAM – カメラ画像を用います。
- Multi-Sensor SLAM – カメラ、LiDAR、IMU(慣性計測装置)、GPS などのさまざまなセンサーを組み合わせて、精度と堅牢性を向上させます。
Fig. LiDAR SLAM による地図作成例
SLAM はどのように機能するのか?
SLAM アルゴリズムは、生のセンサーデータを収集し、それを2つの主要なステージで処理します:
- フロントエンド処理: 関連する特徴を抽出し、ロボットの位置の初期推定を作成します。この段階では、センサーからのデータを分析し、重要な特徴を特定し、時間経過による特徴の違いをもとにシステムの動きを判断します。
- バックエンド最適化: これらの初期推定を改善し、不正確さを減らし、ドリフトを修正します。ここでは、ノードが位置を表し、エッジが位置間の空間的関係を表すグラフベースのアプローチがよく使われます。ポーズグラフ最適化やファクターグラフといった技術がこのデータを洗練し、最終的に一貫した地図と正確な位置特定を構築します。
- ループクロージャ: 技術的には SLAM のバックエンドの一部ですが、特に強調する価値があります。ドリフトやエラーを減少させる優れたアルゴリズムがあるものの、センサーには精度に影響を及ぼす許容誤差があります。以前に訪れた環境の部分に戻ってくることで、地図と軌道を再確認し、修正を加えることができます。これは SLAM において非常に重要です。多くの SLAM アプリケーションは未知の環境を前提としていますが、ループクロージャを組み込む機会がある場合、その選択を真剣に考慮すべきです。例えば、ドローンで環境を再構築しようとする場合、既知の場所に簡単に戻ることができ、SLAM のバックエンド最適化に大きな利点をもたらします。
Fig. SLAM アルゴリズムにおける2つのステージ
SLAM アルゴリズムの種類
LiDAR SLAM
LiDAR を用いた SLAM は、ロボティクスの室内ナビゲーションや自動運転車の高解像で密な地図作成など、3Dマッピングが重要な環境に特に効果的です。しかし、2D LiDAR SLAM も非常に有用で、計算負荷が少ないのが特徴です。
実装のワークフロー:
- データ取得: LAS、PCD、rosbag ファイルなどの形式で点群データを読み込むか、センサーからライブ LiDAR データをストリームします
- データ処理: 計算負荷を減らすためにデータをクリーニングやフィルタリング(例:ダウンサンプリング)を行ったり、地面の平面をセグメント化したり、外れ値を除去したり、ノイズを除去したりします。
- 点群のレジストレーション: 複数の点群を ICP (Iterative Closest Point)、NDT (Normal Distributions Transform)、LOAM (LiDAR Odometry and Mapping) などのレジストレーションアルゴリズムを使用してワールド座標系に結合します。その結果、システムの姿勢を導き出します。
- グラフ最適化: 軌道誤差を最小化し、地図データを改善します。ループクロージャ検出により、ロボットが既知の場所を再訪したときにドリフトを修正して地図をさらに精密化できます。一般的に実装される最適化手法はポーズグラフです。
Visual SLAM (vSLAM)
Visual SLAM はカメラを使用して SLAM を行います。自動運転や UAV(無人航空機)で広く利用されており、リアルタイムのビジュアルデータが利用可能な場合には、ロボティクスでも採用が進んでいます。
Fig. ステレオ vSLAM を使った密な地図構築
vSLAM 実装のワークフロー:
- データ取得: カメラから画像を読み込みます。また、キャリブレーションを通じてカメラパラメータも取得します。
- データ処理: 画像のリサイズ、フィルタリング、またはセグメンテーションを行い、特徴検出を容易にします。
- トラッキングとマッピング: LiDAR SLAM との主な違いは、点群のレジストレーションを使用して姿勢を導き出す代わりに、コンピュータビジョンベースのアルゴリズムを使用し、画像内の重要な特徴を特定し、それをフレーム間で追跡し、既知のカメラパラメータ(内部パラメータ)を用いてカメラの位置を幾何学的に導き出すことです。
- グラフ最適化: 軌道誤差を最小化し、地図データを改善し、ループクロージャを処理します。vSLAM の場合、ポーズグラフとファクターグラフの両方が推定プロセスを最適化するための一般的な方法です。
vSLAM のバリエーション
- ステレオ vSLAM: ステレオビジョンは、2つのカメラを使用して2つの画像間の差異を比較することで深度を測定します。深度推定に理想的で、自動運転において駐車場のような複雑な環境をマッピングする際によく使われます。ループクロージャを活用することで軌道を最適化し、全体的な精度を向上させます。
- 魚眼カメラ: より広い角度とカバー範囲を提供できますが、ほとんどの一般的な vSLAM ソフトウェアで使用する前に画像の歪みを補正するという追加のデータ処理要素が必要です。
- RGB-D vSLAM: 単一のカメラで環境のスケール(絶対寸法)を導き出すのに役立ちます。これは、追加のキャリブレーションされた深度フレームがあるためです。
マルチセンサ SLAM
様々な条件での堅牢なナビゲーションが求められるアプリケーションでは、マルチセンサー SLAM によって多様なセンサーからのデータを組み合わせることができます。例えば、自律ドローンはカメラと IMU を組み合わせて、3D 空間での位置を正確に追跡することができます。複数のセンサーを使用したマッピング最適化を支援する新しい技術として、ファクターグラフがあります。前述のように、多くの vSLAM バリエーションですでに使用されており、ファクターグラフスタックを再利用することで、多くの開発作業を省くことができます。
Visual-Inertial SLAM (VI-SLAM)
カメラデータと IMU の読み取りを統合することで、VI-SLAM は環境のスケールを考慮し、迅速な動きの推定を支援することで位置推定の精度を向上させます。ファクターグラフは、ノードと因子を使用して位置の制約をモデル化し、複数のセンサーからのデータソースの統合を管理するためによく使用されます。ファクターグラフを利用することで、GPS、IMU、カメラ、ホイールエンコーダーなどの多様なデータタイプを統合でき、カスタム SLAM アルゴリズムへの投資を検討する際に多くの選択肢を提供します。
Fig VI-SLAM を使ったドローンの軌跡推定のアニメーション
検証と実装展開
SLAM アルゴリズムのテストと展開には、開発されたアルゴリズムの慎重な検証が必要で、時には組み込みハードウェアで実行できるように準備するのに時間がかかることもあります。SLAM の実装を終えた後に考慮すべき点を以下に示します。
- 軌道の比較: SLAM によって生成された経路は、絶対および相対誤差を評価するために、基準となる真実のデータと比較する必要があります。これにより、誤差が許容範囲内であることを確認できます。
- シミュレーション: Gazebo のようなシミュレーターを使用して、仮想環境でアルゴリズムをテストします。さまざまなシナリオを作成したり、合成データを生成したりすることで、SLAM アルゴリズムを検証するための多くのテストデータセットを得ることができます。例えば、シミュレートされた倉庫で動作するロボットは、SLAM アルゴリズムが複雑または動的な障害物にどのように反応するかをテストするのに役立ちます。
- コードの再利用性を高める: SLAM アルゴリズムを展開する最終ステップは、使用するロボットやプラットフォームのハードウェアで実行できるように修正することです。これは、アルゴリズムの実装を調整したり、開発スタックにラッパーを作成したり、別の言語でコードを書き直すことを含む場合があります。MATLAB/Simulink を使用している場合は、C/C++ ライブラリ、実行可能ファイル、さらには GPU 用の CUDA コードを生成するための自動コード生成を利用できます。
- ROS (Robot Operating System) への展開: 多くのSLAM開発者は、自分のアルゴリズムをパッケージ化されたROS ノードにしたいと考えるでしょう。これは、開発/テストスタックから、ROS システムとインターフェースするプロダクションレイアウトにコードを調整することを意味します。MATLAB で作業している場合は、ROS Toolbox に慣れることをお勧めします。適切なセットアップで、MATLAB コードや Simulink モデルからパッケージ化されたROS ノードを生成することができます。
Fig. SLAM の検証と展開の選択肢
SLAM アルゴリズムの選択
SLAM のようなカスタムアルゴリズムを開発することは、間違いなく長期的な投資です。そのため、SLAM アプローチを検討する前に、実際に何が必要か(正式な要件を導き出す)を考えることが重要です。最適な SLAM アプローチは、使用したいプラットフォームでのセンサーの可用性やアプリケーションの要件(解像度、ペイロード容量、コスト、計算能力など)に依存します。LiDAR は詳細な 3D マッピングには理想的ですが、カメラで対応可能なよりシンプルなタスクには過剰または高価かもしれません。マルチセンサー SLAM は、多様な環境で高い精度が求められるアプリケーション、例えば屋内外をナビゲートするドローンに適しており、同時に LiDAR や Visual SLAM の精度を向上しつつ、コストの増加を抑えることができます。どのタイプの SLAM があなたのアプリケーションに最適かを考えるには、MATLAB のドキュメントにあるこのページが良い出発点です。
結論
SLAM アルゴリズムは、自律システムにとって非常に複雑な開発投資のように思えるかもしれませんが、未知の環境を移動する車両やロボットには不可欠であり、適切なセンサーと計算能力があれば、認識スタックを大いに強化できます。LiDAR SLAM、Visual SLAM、ファクターグラフベースのマルチセンサー SLAM など、MATLAB で利用可能な再利用可能なアルゴリズムがあり、以前よりもはるかに少ない労力でカスタム SLAM 実装のプロトタイピングを可能にします。もちろん、この短いまとめでは SLAM についてすべてを語り尽くしていませんが、少しでも役立つ情報を提供できたなら嬉しいです!質問やフォローアップコンテンツの提案があれば、ぜひコメントしてください。
- 범주:
- SLAM
댓글
댓글을 남기려면 링크 를 클릭하여 MathWorks 계정에 로그인하거나 계정을 새로 만드십시오.