GTSAMとは
GTSAMはFactor Graphベースの最適化ライブラリで、SLAM(Simultaneous Localization and Mapping)やロボティクス分野で広く使われています。この記事では、GTSAMのPython Wrapperをインストールする方法を紹介します。
pipでのインストールができなかった
ネットで調べたり、chatgptによると以下のコマンドでインストールできると言われました。
pip install gtsam
しかし、自分の環境では上手くいかなかったです。そこでソースファイルからbuildしてインストールする方法を実行したので備忘録として記録しました。自分がビルドする際にエラーが出た際の解決方法も最後に載せているので、参考になったら幸いです。
参考リンク
基本的に公式ドキュメントに記載されている手順に従いますが、いくつか発生する可能性のあるエラーとその解決方法も合わせて紹介します。
前提条件
Python Wrapperには以下のパッケージが必要です:
- pyparsing (>=2.4.2)
- pybind-stubgen (>=2.5.1)
- numpy (>=1.11.0)
これらは次のコマンドでインストールできます:
pip install -r <gtsam_folder>/python/dev_requirements.txt
注:
<gtsam_folder>
はクローンしたGTSAMリポジトリのパスに置き換えてください。
インストール手順
1. リポジトリのクローンとビルド準備
# リポジトリをクローン
git clone https://github.com/borglab/gtsam.git
# クローンしたディレクトリに移動
cd gtsam
# ビルドディレクトリを作成
mkdir build
cd build
# CMakeの実行(Pythonラッパーを有効化)
cmake .. -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=3.8.10
# ※ Pythonのバージョンは環境に合わせて適宜変更してください
重要: buildディレクトリは必ずgit cloneした一番上のディレクトリ(gtsam/)に作成してください。Python wrapperだからといって
python/
ディレクトリ内に移動しないでください。
2. ビルドとインストール
# ビルド実行 (-jの後の数字はCPUコア数に応じて調整)
make -j12
# Pythonパッケージとしてインストール
make python-install
遭遇したエラーと解決方法
インストール中に以下のようなエラーが発生しました。
makeコマンド実行時のエラー
#warning "IncrementalFixedLagSmoother was moved to the gtsam/nonlinear directory"
このエラーは、GCCの拡張として警告を発生させ、-Werror
(警告をエラーとして扱う設定)によりビルドエラーになっています。C++23より前の仕様では#warning
が正式には標準に含まれていないため発生します。
解決方法
このファイルを編集します:
gtsam/gtsam_unstable/nonlinear/IncrementalFixedLagSmoother.h
問題の行をコメントアウトしても問題ありません。この警告はただ単にファイルが移動したことを伝えるメッセージなので、削除しても機能には影響しません。
cmakeコマンド実行時のスタブ生成エラー
make[3]: *** [python/CMakeFiles/python-unstable-stubs.dir/build.make:107: python/CMakeFiles/python-unstable-stubs] Error 1
make[2]: *** [CMakeFiles/Makefile2:43395: python/CMakeFiles/python-unstable-stubs.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:43506: python/CMakeFiles/python-install.dir/rule] Error 2
解決方法
スタブファイルはIDE補完や型チェッカー用であり、GTSAMのPythonラッパーを実行するだけなら必須ではありません。
gtsam/python/CMakeLists.txt
を開き、以下の部分を:
add_custom_target(
python-unstable-stubs
...
)
add_custom_target(
python-stubs
...
)
次のように書き換えます:
add_custom_target(python-unstable-stubs
COMMAND ${CMAKE_COMMAND} -E echo "Skipping stub generation for gtsam_unstable."
)
add_custom_target(python-stubs
COMMAND ${CMAKE_COMMAND} -E echo "Skipping stub generation for gtsam."
)
これによってスタブ生成をスキップし、代わりにダミーコマンドを実行するようになります。
インストール確認
インストールが完了したら、Pythonから次のようにインポートできることを確認します:
import gtsam
print(gtsam.__version__)
まとめ
GTSAMのPython Wrapperのインストールは基本的には簡単ですが、いくつかのエラーに遭遇することがあります。この記事で紹介した解決策を用いることで、スムーズにインストールできるはずです。
何か問題がありましたら、コメントでお知らせください!