chapter06 | chapter07 | chapter08 | chapter09 | chapter10 |
---|---|---|---|---|
『SLAM入門 ロボットの自己位置推定と地図構築の技術』の実装レポジトリ.
著者 友納 正裕
出版社 オーム社
発行年 2018/03/05
ISBN 978-4-274-22166-8
ROSのRvizとの連携まで進めたいと思っているのだが,そもそも本書のサンプルプログラムは分かりにくい.理由は
- すべての章のプログラムを1つにまとめている
- 最適化計算や地図のサイズなどのパラメータがソースコード中に分散してハードコーディングされていている.修正がしにくいし,自分でも構成が理解しづらい
- 論理時刻が各クラスで重複している
など.ブラックボックスのまま表面だけをいじるのは嫌なので.サンプルプログラムを見ながらスクラッチから再実装した.気をつけたのは
- インクリメンタル に実装する.第n章の実装は,第n章で必要なクラスのみで構成すること.
- パラメータの定義は1つの箇所で集中して行う.
ParamServer
なるクラスを用意して,ParamServer::Set("map_size", 40), map_size = ParamServer::Get("map_size")
の形でパラメータを得る.ROSのパラメータサーバーに似ている.論理時刻もCounterServer::Increment(), cnt = CounterServer::Get()
の形でインクリメントしたり取得したりしている.シングルトンパターンを用いている. - ユニットテストを行うこと.第6章,7,8章で必要になるクラスの多くはテストケースを用意して機能をチェックしている.テストフレームワークとしては Gtest を用いている.各章ごとに,travis-ci 上でテストを行っている.
- その他C++に慣れること.CMakeでビルドする際に自動で
clang-format
で各ファイルをフォーマットしている.
最適化計算での閾値や地図のサイズなどのパラメーターのノミナル値は, すべて include/slam/parameters.h
に定義を集中している.
MPL-2.0
https://github.com/furo-org/LittleSLAM