EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

書籍「SLAM入門」の読書録~バックエンド編~

SLAM入門: ロボットの自己位置推定と地図構築の技術

SLAM入門: ロボットの自己位置推定と地図構築の技術

  • 作者:友納 正裕
  • 発売日: 2018/03/03
  • メディア: 単行本(ソフトカバー)

f:id:sy4310:20200706221325p:plain

目次

目的

  • 書籍「SLAM入門」を参考に、SLAMシステムにおけるバックエンド部分について理解する。
  • サンプルコードを参考に、C++での設計思想について理解する。

クラス設計

SlamFrontEndクラスのメンバとして集約される形で実装される。

f:id:sy4310:20200707214539p:plain

メソッド設計

SlamFrontEndクラスからの呼び出し

  • フロントエンドのメイン処理を行うprocess()メソッドから呼び出される。
  • ループ検出により再訪点が見つかったタイミングでポーズ調整、地図修正を実行する。

f:id:sy4310:20200707224805p:plain

ポーズ調整

  • SLAMにおけるポーズグラフの最適化ライブラリとして公開されているp2oを用いる。
  • 現在位置とマッチングする再訪点との間の残差が最小になるように最適化計算を繰り返す。
  • returnされるnewPosesは調整後のロボットの軌跡データなので、vectorとして定義される。

github.com

f:id:sy4310:20200707231251p:plain

地図修正

  • ポーズ調整により修正されたロボット軌跡に基づいてポーズグラフ上の各ノードを修正する。
  • PointCloudMapクラスのremakeMaps()メソッドを呼び出し、地図修正を実行する。
  • 部分地図を修正し、最後に全体地図を再構築する。

f:id:sy4310:20200707231313p:plain

GitHub

記載されている各UMLのダイアグラムは、全て下記のGitHubで公開済み。

github.com