Mapping)も注目を集めています。「なんとなくこんな処理だろう」と大雑把な理解はしているものの、いざ説明しようと思うと出来そうで出来ないのがSLAM。そこで、ちゃんと丁寧に内容を理解していこうというのが本日の内容です。■SLAMの目的:SLAMの目的は1自己位置推定と2マップ作成です。Mapping」となっており、この2つは切っても切れない関係にあります。空間内で自分がどの位置にいるのかを把握する自己位置推定では、そもそも「空間」がどのようになっているのか把握しなければ自己位置推定したところで情報量がありません。なにも存在しない無限遠方の3D空間で「アナタはいまココにいます」と世界座標系の(x,y,z)を用意されても困るわけです。よって他オブジェクトが同じ座標系のどこにいるのかというマップがないと自己位置推定は意味を持たないわけです。マップ作製も自己位置推定と密接な関係にあり、SLAMにおいて自己位置推定を抜きにMAP作成はできません。画像群を一括処理するSfMと比べてSLAMは逐次的に取得される画像からMAP作成するので、入力画像について「世界座標におけるどの位置からどの姿勢で撮影したのか?」という自己位置が推定できなければ入力画像から3次元を更新できません。■SLAMの入力:入力は画像です。RGBだったりRGB-Dだったりしますが、とにかく画像です。異なる視点から複数回撮影された画像です。(1枚ずつ処理することもありますが)SLAMには複数の画像を用います。■SLAMの出力:出力は2つあります。1つ目はMapで、観測された対象物の世界座標系における3次元座標の集合です。ここには壁があって、ここには通路があって、という空間の把握に役立ちます。観測された画像のあらゆる画素や特徴点がMap反映されるわけではありません。計算量が膨大になったり、対応点の算出が困難になったりするため、冗長な点を省いたり、特徴的な点だけをMapに反映することがあります。2つ目の出力はPoseです、これは画像を撮影したときのカメラパラメータで、「どんなカメラでどの位置からどんな姿勢で撮影したのか」という情報に相当します。よって、カメラパラメータは画像1枚ごとに異なりますが、かといって全ての画像に対してカメラパラメータを推定するとは限りません。Flameと呼びます)だけで、冗長なものは間引くこともあります。カメラパラメータ推定は3次元空間内での自己位置推定と等価です。カメラパラメータには内部パラメータと外部パラメータの2つがあります。内部パラメータとはカメラのスペックのようなもので、焦点距離やレンズ歪などに相当します。https://www.slideshare.net/takahashikousuke/camera-calibration-111239064)。カメラの内部パラメータは既知として、外部パラメータのみ推測するような問題設定が比較的多いです。Takahashiさんによるこの説明がわかりやすいです■アルゴリズム:Map推定結果とPose推定結果から「この位置からこの姿勢で撮影したらこういう画像ができるだろう」と計算された投影点、と、実際にカメラが撮影した観測点を比較して、誤差が最小となるようにMapとPoseを更新します。■難しさ:RGBで取得した画像を入力とした場合、画像からMap推定するときの中間過程に「Depth推定」が必要となります。2次元のRGB画像から深度(Depth)を推定して3次元の世界座標系にマッピングするため、ここでも誤差が発生する可能性があります。Map推定の誤差なのか、Depth推定の誤差なのか、Pose推定の誤差なのか、見極めが難しくなります。先述したように撮影した全画像についてマッピングや自己位置推定を行うと処理がいつまでも終わりません。よってMap推定に有効なサンプル(KeyFrame)を選定する必要があり、その選定方法について様々な手法が提案されています。どの対象物(画素、特徴点)をMap推定やPose推定に使用するのかという選定にも工夫が必要です。Pose推定については下手なものを用いるとカメラ間で対応が取れなかったりするためです。濃度勾配が高い画素のみを推定に用いるなどの手法があります。局所的には正確に対応点を取ってMapやPoseを推定できたとしても、それを逐次的に繰り返すうちに誤差が蓄積して、全体のMapやPose推定では歪みが出ることがあります。Closingなど)。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。京都の某メーカーにて機械学習・IoT・ビッグデータを扱う。