Visual SLAM14講座----ch4の操作とピット回避
1.ch4の練習の準備
- より優れたリー代数ライブラリである Sophus ライブラリを既に持っていることを確認してください。
注:最初は、slambook2 フォルダーの下の 3rdparty フォルダーの内容は空であるため、ターミナルに次のように入力する必要があります。
cd slambook2/
git submodule update --init --recursive
注: Sophus ライブラリは、SO(3)、SE(3)、SO(2)、SE(2)、および変換 Sim(3) をサポートしています。これは、Eigen に基づいて開発されており、追加の依存ライブラリをインストールする必要はありません。
- まず依存環境、ターミナル入力をインストールします。
sudo apt-get install libglew-dev libboost-dev libboost-thread-dev libboost-filesystem-dev libpython3.8-dev python3-pip
- slambook2/3rdparty/Sophus フォルダーの下にあるターミナルを開き、次のように入力します。
mkdir build
cd build/
cmake ..
make -j4
sudo make install
- ターミナルでch4フォルダーに入り、以下のコマンドを実行してコンパイルします。
mkdir build
cd build
cmake ..
//注意,j4还是其他主要看自己的电脑情况
make -j4
- ビルドファイル内で実行します。
2、それぞれの実践的な操作
1. Sophusの基本的な使い方
ビルド ファイルで ./useSophus を実行すると、結果は次のようになります。
SO(3) from matrix:
2.22045e-16 -1 0
1 2.22045e-16 0
0 0 1
SO(3) from quaternion:
2.22045e-16 -1 0
1 2.22045e-16 0
0 0 1
they are equal
so3 = 0 0 1.5708
so3 hat=
0 -1.5708 0
1.5708 0 -0
-0 0 0
so3 hat vee= 0 0 1.5708
SO3 updated =
0 -1 0
1 0 -0.0001
0.0001 2.03288e-20 1
*******************************
SE3 from R,t=
2.22045e-16 -1 0 1
1 2.22045e-16 0 0
0 0 1 0
0 0 0 1
SE3 from q,t=
2.22045e-16 -1 0 1
1 2.22045e-16 0 0
0 0 1 0
0 0 0 1
se3 = 0.785398 -0.785398 0 0 0 1.5708
se3 hat =
0 -1.5708 0 0.785398
1.5708 0 -0 -0.785398
-0 0 0 0
0 0 0 0
se3 hat vee = 0.785398 -0.785398 0 0 0 1.5708
SE3 updated =
2.22045e-16 -1 0 1.0001
1 2.22045e-16 0 0
0 0 1 0
0 0 0 1
2. 例: 軌道誤差の評価
ビルドにサンプルを入力して ./trajectoryError を実行すると、結果は次のようになります。
同時に、ターミナルには次の出力が表示されます: RMSE = 2.20728
3. 発生した問題
- 問題: Sophus のインストール時に問題が発生しました。
解決策:次の内容を CMakeLists.txt ファイルに追加する必要があります。行 30 に追加するのが適切であることに注意してください。14 行目より前または行末に追加した場合、問題は解決されません。
set(CMAKE_CXX_FLAGS"-Wno-error=deprecated-declarations-Wno-deprecated-declarations ")
最後にパッケージをインストールします。
sudo メイクインストール
- ./trajectoryError を実行すると、次のプロンプトが表示されます。
trajectory ./example/groundtruth.txt not found.
trajectory ./example/estimated.txt not found.
trajectoryError: /home/fighter/slam/slambook2/ch4/example/trajectoryError.cpp:22: int main(int, char**): Assertion `!groundtruth.empty() && !estimated.empty()' failed.
Aborted
解決策: trajectoryError.cpp ファイルの 10 行目と 11 行目を変更します。
//改之前
string groundtruth_file = "./example/groundtruth.txt";
string estimated_file = "./example/estimated.txt";
//改之后
string groundtruth_file = "/home/fighter/slam/slambook2/ch4/example/groundtruth.txt";
string estimated_file = "/home/fighter/slam/slambook2/ch4/example/estimated.txt";
変更後は、ビルド内で make を再度実行してコンパイルする必要があることに注意してください。
理由: ファイルが見つからないことが主な理由ですが、さらなる問題やトラブルを避けるために、絶対パスに直接変更することをお勧めします。