日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

视觉SLAM十四讲中的修改代码总结

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 视觉SLAM十四讲中的修改代码总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

Chapter 3

visualizeGeometry

Chapter 4

Chapter 6

關于cmake_modules

g2o_curve_fitting

Chapter 7

Chapter 12


首先,關于數據集下載,直接下載又慢又容易失敗;現在我用 free download manager(迅雷更好,但我是ubuntu)。


高翔的《視覺SLAM十四講》提供了很多代碼,但所用的庫版本比較老,我用新版本庫在編譯的時候常會遇到問題。在此記錄我的修改。持續更新ing....

我的版本:opencv3.4.1

Chapter 3

visualizeGeometry

CMakeLists.txt: C++版本改為14。注:C++版本的標記似乎是有兩種寫法:

set( CMAKE_CXX_FLAGS "-std=c++14 -O3" ) set( CMAKE_CXX_STANDARD 14)

Chapter 4

sophus庫的安裝:

SLAM十四講中Sophus庫的make報錯 lvalue required as left operand of assignment unit_complex_.real()_supercolar的博客-CSDN博客

Chapter 6

關于cmake_modules

從第6講開始,代碼里開始有cmake_modules文件夾。這個與 find_packages 有關,find_package是怎么find的呢?它有兩個模式:

  • module模式:在 CMAKE_MODULE_NAME 下搜索 Find<package_name>.cmake,然后讀取變量等等。十四講的代碼采取的就是這個方法,作者先將 cmake_modules 文件夾路徑放入 CMAKE_MODULE_NAME,然后建立 Find<package_name>.cmake 文件,并在里面寫明 include 和 lib 的路徑。
  • config模式:一般庫在安裝后都會有 <package_name>Config.cmake 或 <lower_package_name>-config.cmake 文件,而此模式就是去搜索這個文件并讀取。
  • 我在自己電腦里搜索了一下,Ceres, g2o, OpenCV 等都有自己的<package_name>Config.cmake文件,所以實際上很多章節的cmake_modules文件夾都可以刪掉,讓find_package直接使用第二個模式。

    一個例外是,第7講的g2o里include了外部的庫CSparse,它沒有<package_name>Config.cmake,所以需要自己寫Find<package_name>.cmake。不過這個文件不用自己寫,它也在OpenCV庫的安裝包里:Downloads/g2o-master/cmake_modules/FindCSparse.cmake,直接把文件copy過來就行(十四講代碼就是這么做的)。

    g2o_curve_fitting

    CMakeLists.txt: C++版本改為14。

    另外,新版本的opencv中的一些普通指針改為了智能指針unique_ptr。unique_ptr中,為了防止重復構造,delete了拷貝構造函數、賦值函數,用移動構造、移動賦值替代——所以代碼中會涉及到把左值引用通過std::move()轉換為右值引用。

    //<------------------old version---------------------->// // Block::LinearSolverType* linearSolver = new g2o::LinearSolverDense<Block::PoseMatrixType>(); // 線性方程求解器 // Block* solver_ptr = new Block( linearSolver ); // 矩陣塊求解器 // g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( solver_ptr ); //<------------------new version---------------------->// std::unique_ptr<Block::LinearSolverType> linearSolver(new g2o::LinearSolverDense<Block::PoseMatrixType>()); std::unique_ptr<Block> solver_ptr(new Block(std::move(linearSolver)));// 矩陣塊求解器 g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg( std::move(solver_ptr) );

    疑問:g2o的變量和其他的不一樣?

    Chapter 7

    同Chapter6。VertexSBAPointXYZ 改為 VertexPointXYZ。

    Chapter 12

    gen_vocab_large.cpp: associate.py的對齊操作不是必須,把相關內容替換成自己數據集路徑即可。

    總結

    以上是生活随笔為你收集整理的视觉SLAM十四讲中的修改代码总结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。