視覺SLAM實踐(1)——環境搭建
為準備IMAV Indoor賽任務,近日決定開始學習視覺slam,為飛機提供室內定位資訊。
本文為高翔新書《視覺SLAM十四講》讀書筆記,用作梳理思路。
(1)終端環境下建立庫,並使用庫函式
目錄:slam/test/helloSLAM.cpp
slam/test/libHelloSLAM.cpp
slam/test/CMakeLists.txt
其中,libHelloSLAM為庫,helloSLAM為使用庫函式的原始碼//slam/test/helloSLAM.cpp #include <iostream> #include "libHelloSLAM.h" using namespace std; int main( int argc, char** argv ) { printHello(); return 0; }
//libHelloSLAM.c
#include <iostream>
using namespace std;
void printHello()
{
cout<<"Hello SLAM"<<endl;
}
//libHelloSLAM.h
#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif
最重要的就是使用cmake來製作工程,將庫與呼叫庫函式的原始碼建立連線。在cmake中的註釋不是//,而是#
當僅有幾個原始檔需要編譯時,用g++就很方便。但一般的工程專案中,有大量檔案需要編譯,且其中的依賴關係較為複雜,用cmake來管理更為高效。
#slam/test/helloSLAM.cpp # 宣告要求的 cmake 最低版本 cmake_minimum_required( VERSION 2.8 ) # 宣告一個 cmake 工程 project( HelloSLAM ) # 設定編譯模式 set( CMAKE_BUILD_TYPE "Debug" ) # 新增一個可執行程式 # 語法:add_executable( 程式名 原始碼檔案 ) add_executable( helloSLAM helloSLAM.cpp ) # 新增一個庫 add_library( hello libHelloSLAM.cpp ) # 共享庫 add_library( hello_shared SHARED libHelloSLAM.cpp ) # 將庫檔案連結到可執行程式上 target_link_libraries( helloSLAM hello_shared )
在編譯後cmake會生成不少中間檔案,所以我們在編譯前統一建立一個資料夾,在該資料夾中進行編譯,將中間檔案和原始碼分開。
mkdir build
cd build
cmake..
make
(2)IDE環境下建立庫,並使用庫函式
高翔書中使用的是Kdevelop,這個軟體比較蛋疼的是使用Eigen庫時不提時成員運算,還各種顯示錯誤。。。
好處就是可以debug
如果需要debug,需要先在cmake檔案中加入
set( CMAKE_BUILD_TYPE "Debug" )
1.載入工程:Project->Open/Import Project...
選擇寫好的CMakeLists檔案即可。
2.如果不需要debug,之間build就行
需要debug的話,要先配置一下執行:Run->Configure Launches...
進入Launch Configurations介面後,點選add New->Compiled Binary(二進位制檔案)
設定好後,新增斷點,debug即可,F10單步執行,F11單步跟進,F12單步跳出
OpenCV安裝
https://opencv.org/releases.html
由於OpenCV最新的版本3.4.1還沒有編譯好的庫檔案,所以要從上面網站中下原始碼進行安裝
首先安裝OpenCV依賴項
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
然後進入OpenCV原始檔中的build資料夾,像普通Cmake工程檔案一樣編譯
cd build
cmake ..
make//編譯
sudo make install//安裝OpenCV
編譯時間大概十多分鐘,預設儲存目錄在/usr/local/lib下