1. 程式人生 > >半閒居士視覺SLAM十四講筆記(2)初識 SLAM- part 2 linux CMake、Kdevelop

半閒居士視覺SLAM十四講筆記(2)初識 SLAM- part 2 linux CMake、Kdevelop

-W350_2.gif-2.gif
該講詳細資料下載連結 【Baidu Yun】【Video】【Code

若您覺得本博文對您有幫助,請支援高博的新書《視覺SLAM十四講》,【點選購買
若您覺得本博文對您有幫助,請支援高博的新書《視覺SLAM十四講》,【點選購買
若您覺得本博文對您有幫助,請支援高博的新書《視覺SLAM十四講》,【點選購買

實踐:程式設計基礎

  1. 安裝 linux 系統

    • 對於初學者,建議使用 Ubuntu 14.04
      • Ubuntu 14.04.1 for ROS(indigo) by ExBot iso 發行版
        • 特別注意:安裝後不能上網的,執行以下命令:
          $ sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
        • 不能掛載U盤的,試試以下命令:
          $ sudo apt-get install exfat-utils
        • 打不開優盤。出現:Unable to open a folder for KINGSTON,No application is registered as handling this file.You do not have the permissions necessary to view the contents of “KINGSTON”.
          $ sudo chmod 655 /media/exbot
  2. CMake 構建工程

    • CMake 是一個跨平臺的軟體,在很多平臺可以使用。一般在 windows 下,我們會直接使用 VS 生成專案,在 linux 下面,我們也可以使用 QT Creater 生成專案,但是兩個不同平臺上面的專案不能相互移植。這就有了 CMake 的用武之地,我們可以先編寫一個 CMakeLists.txt 檔案,將需要的 .h 和 .cpp 檔案包含進來,然後在不同的平臺使用 CMake 呼叫各自的編譯器生成各自的工程。
    • 在 linux 平臺下使用 CMake 生成 Makefile 並編譯的 流程
      1. 編寫 CMakeLists.txt
      2. 執行命令“cmake PATH”生成 Makefile ( PATH 是 CMakeLists.txt 所在的目錄 )
      3. 使用 make 命令進行編譯
    • 舉例說明:CMake 構建 HelloSlam 工程

      1. Ctrl + Alt + T 按鍵開啟終端
      2. 在選定路徑下建立工程資料夾:
        $ mkdir HelloSlam
      3. 構建 HelloSlam 的檔案目錄結構
        $ cd HelloSlam
        $ mkdir bin build include lib src

        • bin 用來存放編譯好的可執行二進位制檔案
        • build 在該資料夾下執行 cmake ,這樣就不會汙染原始碼, 如果不想要這些自動生成的檔案,只要簡單的刪除 build 資料夾就可以
        • include 用來放標頭檔案
        • lib 用來放編譯好的庫檔案
        • src 用來放原始碼
      4. 檔案目錄結構
        HelloSlam_01.png
      5. 檔案內容

        • src/main.cpp

                #include <iostream>
                #include "CHello.h"
                int main(int argc,char** argv)
                {
                     CHello myhello;
                     myhello.print();
                     return 1;
                }
        • include/CHello.h

               #ifndef HELLO_HEADER_H
               #define HELLO_HEADER_H
          
               class CHello
               {
               public:
          
                 CHello(){}
          
                 ~CHello(){}
          
                 void print();
               };
          
               #endif
        • src/CHello.cpp

               #include <iostream>
               #include "CHello.h"
          
               void CHello::print()
               {
                   std::cout << "hello slam..." << std::endl;
               }
        • CMakeLists.txt

               # 宣告要求的 cmake 最低版本
               CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
          
               # 宣告一個 cmake 工程
               PROJECT(HELLOSLAM)
          
               # 設定編譯器
               SET(CMAKE_CXX_COMPILER "g++")
          
               # 設定編譯模式 (Debug/Release)
               SET(CMAKE_BUILD_TYPE "Debug")
          
               # 顯示執行構建過程中詳細的編譯資訊
               SET(CMAKE_VERBOSE_MAKEFILE on)
          
               # 指定可執行檔案目錄
               SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
          
               # 指定庫檔案目錄
               SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
          
               # 指定標頭檔案目錄
               INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)
          
               # 指定原始檔目錄
               SET(SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
          
               # 增加一個可執行的二進位制檔案
               ADD_EXECUTABLE(HelloSlam ${SOURCE_DIR}/main.cpp)
          
               # 生成庫檔案:libhello.so
               ADD_LIBRARY(hello SHARED ${SOURCE_DIR}/CHello.cpp)
          
               # 將庫檔案連結到可執行程式
               TARGET_LINK_LIBRARIES(HelloSlam hello)   
      6. 執行程式
        $ cd build
        $ cmake ..
        $ make
        $ ../bin/HelloSlam
        終端輸出: hello slam…

      7. 使用 Kdevelop 進行開發 [Kdevelop Download]
        Kdevelop 優勢:
        • 支援 CMake 工程
        • 支援 C++,有高亮、跳轉、補全等功能
        • 目錄樹瀏覽,方便查詢
        • 一鍵編譯、斷點除錯
        • 免費使用
      8. 匯入工程:工具欄 Project Open/Import Project
        HelloSlam_Kdevelop_02.png
        HelloSlam_Kdevelop_03.png
      9. 工具欄 Run Configure Launches,點選左側 + Add New …,設定 Executable(用 add_executable 指令構建的可執行程式),第二聯裡可以設定程式的執行引數和工作目錄,有時我們會給 main 函式進行傳參,如果沒有的話置空即可,對於工作目錄亦為如此,點選 OK 儲存配置結果。
        HelloSlam_Kdevelop_05.png
      10. Debug 中放置斷點,游標移植程式碼號左邊位置,左擊滑鼠即可放置斷點(甲殼蟲斷點標誌)
        HelloSlam_Kdevelop_07.png
      11. 接下來就可以進行工程的 Build , Execute, Debug
        HelloSlam_Kdevelop_08.png
        快捷鍵:
        • F8: Build
        • F10: Step Over
        • F11: Step Into
        • F12: Step Out