ゼロベースのVIO - 固有とSophus社のインストール構成

1.はじめに

私は最近、以前に数学的な導出は非常に困難であるだけ内側に、「状態推定値でロボットを」2冊の本を読み、「視覚的な14スピークスラム」と「スクラッチ手書きVIOから」レッスンダークブルー学校のネットワークを習い始め実用的な操作が混乱です。また、正式に学び、経験に遭遇した共有の問題、視覚的慣性走行距離計の研究と実践を入力し、「スクラッチ手書きVIOから」プログラムにより、いくつかの基本的なリー代数とマトリックス分析を活用しています。あなたはライブラリをインストールする必要がある最初のステップは、Sophus社があるので、VIOの練習のために、すべての研究は、焦点の三次元運動の姿勢の変化に基づいています。

2.概要

オペレーティングシステム:Ubuntu16.04。
コンパイラ環境:VSCode、C ++。紹介とVSCodeに設置、ここでプロジェクトの設定ファイルに焦点を当てる必要それらを繰り返さない.vscode / c_cpp_properties.jsonの変数インクルードパスを使用すると、新しいライブラリを追加する必要がある場合は、研究した後、あなたはパス、そのライブラリを取る必要がありますこの変数を追加します。
固有ライブラリ:マトリックスライブラリは、線形代数、ベクター、及びそのようなC ++ライブラリーのような行列演算であってもよいです。解凍はcmakeのを使用せずに使用することができます。
Sophus社ライブラリ:SO(2)の二次元運動のためのサポート、SE(2 )、 三次元運動SO(3)、SE(3 ) 、等、固有のライブラリー、ライブラリとテンプレートが非テンプレートライブラリに分割されているに基づいて開発されていますここで非テンプレートライブラリを選択します。

3.固有とSophus社インストール

(1)行列の固有値

インストール固有

sudo apt-get install libeigen3-dev

完了確認解凍後の固有のパスができ、3.3.7固有固有の別々のアウトフォルダ、および固有3.3.7を容易に(同じパス直下「の#include <固有/ ...>使用してコードを書きます「)、パス追加するインクルードパスを私がいた、は/ usr / local / /固有が含まれます以下に示すように:
ここに画像を挿入説明
プログラムヘッダは、例えば、次のコード、すなわち固有のテストを追加し、エラーのインストールが成功しませんでした。

#include <Eigen/Core>
#include <Eigen/Geometry>

(2)Sophus社リー代数

次のコマンドを使用してSophus社非テンプレートクラスライブラリをダウンロードしてください:

git clone https://github.com/strasdat/Sophus.git

Sophus社は、(不必要なトラブル、最良執行最後のインストールコマンドを避けるために)コンパイルします:

cd Sophus
git checkout a621ff
mkdir build
cmake ..
make
sudo make install

インストールが完了した後にコンパイルされますは/ usr / local /含める/ Sophus社 / さまざまなヘッダファイル。追加する同じパスSophus社インクルードパスを
ここに画像を挿入説明
簡単な例ではSophus.cppを確認するために使用することができます。

#include <iostream>
#include <Eigen/Core>
#include "sophus/so3"

int main(){
	Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
    Eigen::AngleAxisd rotation_vector(M_PI/4, Eigen::Vector3d(0,0,1));
    Sophus::Quaterniond q(R);

	return 0;
}

あなたのコードをコンパイルするとき、あなたは、単に使用することはできませんG ++ Sophus.cpp -o Sophus社コード自体は文句はありませんが、ダイナミックリンクライブラリlibSophus.soが適切にリンクされていないので、見つからないSophus社にプロンプトが表示されますにもかかわらず、コンパイル。だから、コンパイルするには2つの方法があります。

(3)コンパイル

G ++モード

次のコマンドを使用します。

g++ Sophus.cpp -l Sophus -o Sophus

この方法で唯一の一見単純なコマンドが、一般的にそう100個のファイルを接続する必要がある場合を想像し、ほとんどの場合には適切ではありませんが、コンパイラは常にその長い文字列を書き込むことはできません。

cmakeの道

同じディレクトリにCPPファイルをコンパイルする新しいCMakeLists.txt、本文書の作成には、それが自動的にSophus社ライブラリのパスを見つけることができるように、ファイル。ここで私はCMakeLists.txtを書いたものです。

cmake_minimum_required( VERSION 2.8 )
PROJECT(DemoSophus)

FIND_PACKAGE(Sophus REQUIRED)

SET(CMAKE_EXPORT_COMPILE_COMMANDS ON)
SET(SOPHUS_INCLUDE_DIR /usr/local/include/sophus)
SET(EIGEN_INCLUDE_DIR /usr/local/include/eigen3)
SET(ALL_CODE_LIST Sophus.cpp)
SET(SOPHUS_LIBRARIES /usr/local/lib/libSophus.so)

MESSAGE(STATUS "This is binary dir: " ${DemoSophus_BINARY_DIR})
MESSAGE(STATUS "This is source dir: " ${DemoSophus_SOURCE_DIR})

INCLUDE_DIRECTORIES(${SOPHUS_INCLUDE_DIR})
ADD_EXECUTABLE(Sophus ${ALL_CODE_LIST})
TARGET_LINK_LIBRARIES(Sophus ${SOPHUS_LIBRARIES})

私は初心者だったかについて書いてCMakeLists.txtは、必要であれば、簡単にここでは、インターネットcmakeのチュートリアルで見つかった非常に簡単な例であることができます。これはメッセージ文の中でのみプロンプトの情報を、無視することができます。なお、唯一のSET文、最初のカスタム変数名(ランダムに名前、名前はパスの後ろを表した後)、その後、完成へのパスは、自分自身に対応するそれらのファイルへのパスを参照してください。次に、それをコンパイルするためにcmakeのを使用しています。

mkdir build
cd build
cmake ..
make

最後に、buildフォルダには、対応する実行ファイルSophus社を生成します。
ここに画像を挿入説明

4.おわりに

私もこの方法をコンパイルすることができますがcmakeの始まりを知りませんでした、モード、経験のインストールの問題Sophus社ライブラリはまた、いくつかの努力を取っ++グラムを使用して通常の練習は、魚はこの単純な例レコード全体のインストールで、ここで、少し理解CMAKEプロセス。ファイルをコンパイルする必要性よりも後に、あなたはゆっくりとcmakeのの利便性で実現するために来ます。

リリース元の2件の記事 ウォンの賞賛0 ビュー127

おすすめ

転載: blog.csdn.net/EternalGlory_wx/article/details/104423759