Blog

AIMERA® × Visual SLAM の実験

VisualSLAMの実行結果。青色で軌跡が、黒と赤で点群が描かれている

はじめに

こんにちは。3Dエンジニアの中川です。定期的にブログを書いていきたいなと思っていたのですが、 前回 から年度をまたいでしまいました。ご無沙汰しております。前回は3DCG × AIで物体検出やってみたといったお話でしたが、今回はAIMERA® × Visual SLAMといったお話です。

皆様は昨年より弊社が提供しておりますAIカメラ AIMERA はご存知でしょうか。こちらはカメラ、照明、Jetson®(GPUが載った組み込み向けのボード)が一体になっているという特徴を持っております。カメラにはグローバルシャッターの高品質なセンサが搭載されており、コンパクトな筐体に弊社のハードウェアチームの様々なこだわりが詰まった製品です。また、今年度に入って同じく弊社製品であるAIカウントソフトウェア「Deep Counter®」との統合ソリューションの販売も開始されました。弊社が今年で設立10周年ということもあり、現在特別価格となっておりますので、ご興味ありましたら以下のリリースもご覧いただけると幸いです。

  • AI開発におけるデータ収集の工数を大幅に削減するAIカメラ「AIMERA(アイメラ)™」を提供開始 〜AI人材がいてもうまく進まない「良質なデータ収集」を簡単に。4ヶ月かかる工程を最短3日で実現〜 | 株式会社Rist | Rist Inc.
    https://www.rist.co.jp/202409177278/
  • 画像認識AIカメラ「AIMERA®」とAIカウントソフトウェア「Deep Counter®」の統合ソリューションを販売開始 | 株式会社Rist | Rist Inc.
    https://www.rist.co.jp/202604028252/

はい。宣伝はこのくらいにしまして、今回の実験の発端についてお話ししていきます。まず LIO-SAM という有名なSLAMの手法があるのですが、そこではハンドルをつけたミニPCを手で持って計測をしている様子が紹介されています。LIO-SAMは3D LiDARというレーザーで周囲の環境を計測するセンサを使うタイプのSLAMなのですが、SLAMにはカメラを使ったVisual SLAMというものもあります。AIMERAをはじめて見たとき、LIO-SAMみたいにハンドルをつければ同じようにSLAMができるんじゃないかな〜、と思ったのです。

はい。ということで、AIMERAにハンドルをつけて、それでVisual SLAMをやってみようという単なる私の思いつきが今回の実験の出発点です。本当に思いつきでやってみただけなので、軽い気持ちで読んでいただければ幸いです。

SLAMってなんぞや

ここまで何の説明もなくSLAMという言葉を使ってきてしまいましたが、ついてきていただけていますでしょうか。SLAMとはSimultaneous Localization and Mappingの略で、自己位置推定と地図作成を行う技術のことを指します。例えばロボットは地図があればその中で自分がどこにいるのかを判断し、更に次にどう動けば良いのかを決めることができます。しかし、地図がない環境ではそれができません。かと言って必ず外部から地図を与える必要があるとなると、その地図はどうやって作るのかという話になりますし、そもそも地図がない場所ではロボットは動くことができません。

そこでSLAMの出番です。SLAMではロボットが自分の周囲の環境をセンサで観測し、地図の作成と、その中で自分がどこにいるのかの推定を同時に行います。これによりロボットは地図がない環境でも動けるようになり、一度地図を作れば今後それを使うことも可能になります。SLAMには使うセンサによって様々なタイプがあるのですが、特にカメラを使ったSLAMはVisual SLAMと呼ばれます。なお、ここで言う地図はロボットが理解できる形式の地図であり、基本的に人が見るような地図とは異なります。点群が用いられることが多いです。

SLAMは皆様もご存知のロボット掃除機であったり自動運転車であったり、様々なものの中で使われております。Visual SLAMの中でも超有名な手法であるORB-SLAMの動画へのリンクを貼りますので、興味のある方はぜひご覧ください。

※ 先にお詫びしておきますと、ページ後半に掲載する私の実験動画では機密上カメラ画像が公開できず、地図が生成されていく様子しかお見せできません。こちらの動画で雰囲気を掴んでおいてもらえると幸いです。

利用したVisual SLAMの手法について

Visual SLAMはリアルタイムに画像処理を行う必要があり、AIMERAが高機能と言っても搭載されている組み込み向けボードのJetson®にとってはなかなか重たい計算が必要になります。良い手法はないかと探していると、なんとお誂え向きなものが公開されていました。

それがこちら、Jetson®-SLAMです。GPUを活用したリアルタイムSLAMライブラリで、Jetson®のような低消費電力デバイスでも高速に動作するとのことです。

GPUによる高速化の恩恵は恐らくステレオカメラを使った場合に最も大きいのだとは思いますが、カメラ1つの場合でも効果はありそうなのでこちらを使ってみることにしました。

AIMERAの準備と設定

今回の実験にあたってハードウェアチームよりAIMERAの試作機をお借りしました。こちらにはJetson®Orin Nano (8GB) が搭載されています。

設定としまして、AIMERAのカメラは2432 x 2048 pixelsで撮影できるのですが、これだとSLAMをリアルタイムに処理するには大きいので、今回は608 x 512 pixelsにリサイズして利用することにします。フレームレートは30 fpsです。AIMERAには照明も付いていますが今回は使用しません。

次にAIMERAに必要な部品を装着していきます。まずAIMERAにハンドルを装着し手で持てるようにします。AIMERAには三脚穴がついているので、そこにハンドルを取り付けることができます。Amazonで適当に安いハンドルを購入し、三脚穴に取り付けました。また、手持ちで撮影しながらウロウロするにあたって、電源コードが接続されていては困ります。Jetson®の必要な電力はバッテリーで十分に賄えるので、今回はモバイルバッテリーを装着してコードレスで動かせるようにします(※)。固定が甘いと落ちてしまうので、テープでしっかりと固定しました。

※ AIMERAは電源コードを接続して使用することを想定しており、バッテリー装着は非公式な使い方になります。

そうして完成した手持ちAIMERAがこちらです!

……はい。

「グッドデザイン賞®も受賞した筐体になにテープぐるぐる巻いてんだ!」と怒られないか心配ですが、ひとまずこれで準備は整いました。さあ実験に進みましょう!

実験方法

Visual SLAMを起動したAIMERAを手に持ち、オフィスの机の周りをウロウロと歩き回ります。

オフィスの簡単な見取り図と風景がこちらです。見取り図のグレーの部分には主に机やロッカーがあり、オレンジの矢印で移動経路を描いています。このルートを歩いている間に地図ができあがっていく様子や、推定された移動軌跡を確認します。

オフィスの見取り図。机とロッカーが灰色の矩形で表され、移動ルートがオレンジ色の矢印で描かれている。
オフィスの風景画像。机と椅子が並んでおり、机にはディスプレイが置かれている。机の奥には青い柱が3本見える

オフィス風景の画像は 会社概要 のページにて公開しているOffice Tour動画から1コマ抜き出したものです。古い動画でここから現在までに棚などが増えており、一番奥に見える柱も今は部屋になっていたりするのですが、実験で撮影した動画は機密上お見せすることができませんので、こちらから少しでも雰囲気を掴んでいただければ幸いです。

なお、この後に掲載する実験結果の動画や画像は、画面収録の都合上、一度動画を撮影・保存し、その保存された動画を用いてSLAMを実行した結果になります。撮影と実行どちらもAIMERAで行っておりますが、同時に実行した結果ではないことをご了承ください。ちゃんと同時でもリアルタイムに動くことは確認しています!

実験結果

さあ長々と書いてきましたが結果です!

まず実行中のAIMERAのGPU利用率は最大で50 %ほどになり、ばっちりGPUが活用できていました。また、画面表示しなければ平均40.6 fpsで動作することも確認でき、30 fpsの動画に対して問題なくリアルタイムに実行できておりました。

地図生成の様子

それではSLAMを実行して地図ができていく様子の動画を見てみましょう。こちらはJetson®-SLAMの実行画面を画面収録したものになります。やや長いので4倍速にしています。

先に示した経路の通りカメラが移動しているのが分かるかと思います。ばっちりAIMERAでVisual SLAMを動かすことができました!

ここで大雑把に説明しますと、画面には次のものが表示されています。

  • 青い三角形: カメラの位置と向き(キーフレーム)
  • 黒や赤の点: 点群(特徴点)
  • 緑の線: キーフレーム間で同じ特徴点を観測していることを示す線

キーフレームは他の画像(フレーム)と差の大きい特徴的な画像だけを選んで記憶したフレームのことです。全てのフレームの位置情報を記憶しているわけではなく、キーフレームだけを記憶することで、処理の軽量化が図られています。移動軌跡はこのキーフレームの位置によって表されます。

ところで動画の20秒辺りで地図や軌跡全体が少し動くのは分かりましたでしょうか?これはLoop Closingという、SLAM、特にVisual SLAMにとって重要な処理が働いていることによるものです。SLAMでは毎フレーム自己位置を推定しながら地図を作成していくのですが、順に計算するにつれてどうしても誤差が蓄積してしまいます。特にVisual SLAMではスケールドリフトと呼ばれる、地図全体のスケールが大きく、もしくは小さくなっていってしまう現象が起こることもあります。

そこでLoop Closingの出番です。Loop Closingを行うSLAMでは、同じ場所を再度訪れたときに前回の観測と照合することで、蓄積した誤差を修正することができます。今回の実験でも、机の周りをぐるっと一周したタイミングでループ前後のキーフレーム間が緑の線で繋がり、地図全体の位置関係や走行軌跡が修正されている様子が確認できます。

軌跡と見取り図の重ね合わせ

次はできあがった移動軌跡と点群を見取り図に重ね合わせてみましょう。スケールと向きは不定なので、見取り図に合わせて手動で拡大縮小と回転を行いました。

重ね合わせたものが以下の図です。先程のキーフレームをオレンジ色の点で表し、これを移動軌跡としています。

オフィスの見取り図として机とロッカーが灰色の矩形で表され、その上に黒い点群とオレンジの軌跡が描かれている。また、一部の黒い点群が緑の円で囲われ「ホワイトボード」と文字で説明されている

簡易的な見取り図に手動で合わせているので、一致したから正確だとは言いにくいのですが、概ね実際の移動軌跡と同じような軌跡が得られていそうです。実は見取り図の下の方の場所には縦長のホワイトボードがあったのですが、それをかわして移動している様子もばっちり軌跡に反映されているのが分かります。

所感とまとめ

実際にやってみた感想をまとめます。まずはAIMERAでVisual SLAMを動かすことができました!ただの思いつきからのスタートでしたが、上手く動いて良かったです。

撮影時の感想としては、片手で持つには本体が思ったより重く、腕がつらかったです。AIMERAは照明も搭載しており、更にそこにバッテリーも装着しているので当然ではあるのですが、片手で持ち続けるのは難しく、両手でしっかり持つ必要がありました。重い筐体を手持ちしているのもあり、動画もかなり揺れのあるものになってしまいました。ローリングシャッターだと揺れに応じた歪みが入ってしまうので、きっとここでグローバルシャッターの恩恵があっただろうなと思います。でも本格的にやるなら両手持ちのスタビライザーなどがあったほうが良さそうですね。

グローバルシャッターの恩恵といえば、人の目で見てもわかりやすい密な地図を作成するSLAMや、フォトグラメトリ、近年流行りの3D Gaussian Splattingなどをやりたい場合にも活きてくるかもしれません。リアルタイム実行は難しいかもしれませんが、移動しながら撮影しても歪みのない画像が得られるグローバルシャッターは、これらの分野では大きなメリットとなります。

おわりに

以上、AIMERAでVisual SLAMを試す実験でした。AIMERAでSLAMが動くことが確認でき、なかなか楽しい実験になりました。

最後になりますが、今回の実験はあくまで私の思いつきでやってみたものです。照明も無駄になりますので、ただSLAMがやりたいだけならAIMERAはちょっともったいないかもしれません。それでもAIMERAが持つ様々な可能性の一端を感じていただけたなら幸いです。

※本ブログに記載する会社名、ロゴ、システム名、商品名、ブランド名などは、各社の商号、登録商標、または商標です。