C++ / pythonでg2oを試す
SLAM関係の技術では、Pose Graph Optimization, Bundle Adjustmentが重要なトピックとして出てきます。
それらを実装するにあたり、よく使われるライブラリがg2oです。しかしこのg2o, 日本語の情報が少なかったり、そもそも公式ドキュメントもあまり親切なものとは言えず、インストールもCMakeなどにある程度なじみがあることが前提で、初心者が触ってみるには少々敷居が高いです。
ということで、自分がg2oをインストールしてみたときの手順を一通りまとめてみようと思います。また、g2oをPythonから使えるようにしたg2opyというライブラリもあるので、そちらを使えるようにしたときの内容も備忘録として残しておきます。
- 検証環境
・Ubuntu 20.04(仮想マシン)
g2oのインストール
Ubuntuをインストールした直後にやる操作として手順を示します。
① cmakeのインストール
端末(terminal)を起動し、’cmake’と打つと、以下を実行するよう表示されます。
Command 'cmake' not found, but can be installed with:
sudo snap install cmake # version 3.22.2, or
sudo apt install cmake # version 3.16.3-1ubuntu1
See 'snap info cmake' for additional versions.
特に理由がなければ新しいバージョンを入れておけばよいので、
sudo snap install cmake --classic
でcmake 3.22.2 をインストールします(–classic が必要なので注意)
② Eigen3 のインストール
g2oを利用するうえで欠かせない行列演算・線型方程式の求解を担ってくれます。
特に3DのSLAM, バンドル調整では等長写像を表すクラス(Isometry3)が頻繁に登場します(このあたりの話は別の記事で触れたいと思います)。
概要はさておき、これはaptでインストールできるので以下のコマンドを実行します。
sudo apt install libeigen3-dev
③ その他依存パッケージのインストール
ビルドツールやqt関係、疎行列を扱うライブラリ、gitなどをインストールします。
sudo apt update
sudo apt upgrade
sudo apt install build-essential
sudo apt install libsuitesparce-dev
sudo apt install qtdeclarative5-dev
sudo apt install qt5-qmake
sudo apt install libqglviewer-dev-qt5
sudo apt install git
インストール対象は、g2oのgithub, Readme.mdのRequirementsに記載されているものから取ってきています
(注意)
もし、Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. と表示されるなら、以下を実施
- sudo lsof /var/lib/dpkg/lock-frontend でロックをかけているプロセスを番号で特定(念の為3種類とも実施?)
- sudo kill -9 XXXXでプロセスを強制終了させる
- sudo rm /var/lib/dpkg/lock-frontend でロックされていたファイルを削除
- sudo apt upgrade を実行
④ g2o リポジトリのクローンとビルド
以下を実行します(g2oのリポジトリをダウンロードするディレクトリまで移動している前提)。
git clone https://github.com/RainerKuemmerle/g2o
cd g2o
mkdir build
cd build
cmake ..
make -j4 (-jについては、コンパイルの並列ジョブ数なので指定しなくてもOK)
sudo make install
これでインストールは完了です(ビルドには数十分かかります)。
なお、g2oを用いたプログラムを作成する際には、CMakeLists.txtにて、find_packageを利用して書くのが後々楽だと思います。
なお、本記事は環境構築までが目標なので、g2oを用いたプログラムの作成方法については別の記事で触れる予定です。
g2opy公式のインストール手順とエラー@Ubuntu20.04
次は、g2oをpythonから使えるようにしたOSSである、g2opyのビルドとインストールについてです。githubのリポジトリは以下です。
ビルドには以下のライブラリが必要となるので、下記のコマンドを実施します。
sudo apt install libsuitesparse-dev
sudo apt install python3-distutils
githubの記述に従い、以下の作業を実施します(git clone は g2oのビルド作業を行うディレクトリに移動してから行ってください)
git clone https://github.com/uoip/g2opy.git
cd g2opy
mkdir build
cd build
cmake ..
make -j8 # -j〇 はなくてもOK(ビルドタスクの並列数)
cd ..
sudo python3 setup.py install
これで問題なくビルドできればいいのですが、2022/03現在、このままではビルドエラーが出ます。githubのissueに解決方法が載っていましたのでそれをまとめます。
エラー解消方法
g2opy/python/core/eigen_types.h の185行目 ~ 188行目を、以下のように変更するとOKです。
// 変更前
.def("x", (double (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::x)
.def("y", (double (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::y)
.def("z", (double (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::z)
.def("w", (double (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::w)
// ↓
// 変更後
.def("x", [](const Eigen::Quaterniond& q) { return q.x(); })
.def("y", [](const Eigen::Quaterniond& q) { return q.y(); })
.def("z", [](const Eigen::Quaterniond& q) { return q.z(); })
.def("w", [](const Eigen::Quaterniond& q) { return q.w(); })
インストールの注意点
公式では、
python setup.py install
を実行するとだけ書かれていますが、実際は以下のようにする必要があります。
sudo python3 setup.py install
また、setup.py の実行には以下をインストールしておく必要があるのでご注意ください。
sudo apt install python3-pip
pip3 install setuptools
まとめ
今回は、Graph Optimizationを行う際によく使われるg2oと、それのpythonラッパー版であるg2opyのビルド・インストール方法をまとめました。
g2o/g2opyの使い方とサンプルコードについては別の記事で紹介できればと思います。
コメント